blob: 543df424cc7e8d4877e11856016cf14f9deefc82 [file] [log] [blame]
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// @dart = 2.9
part of touch;
/// Common events related helpers.
class EventUtil {
/// Add an event listener to an element.
/// The event callback is specified by [handler].
/// If [capture] is true, the listener gets events on the capture phase.
/// If [removeHandlerOnFocus] is true the handler is removed when there is any
/// focus event, and added back on blur events.
static void observe(
/*Element or Document*/ element, Stream stream, Function handler,
[bool removeHandlerOnFocus = false]) {
var subscription = stream.listen(handler);
// TODO(jacobr): this remove on focus behavior seems really ugly.
if (removeHandlerOnFocus) {
element.onFocus.listen((e) {
subscription.cancel();
});
element.onBlur.listen((e) {
subscription.cancel();
});
}
}
/// Clear the keyboard focus of the currently focused element (if there is
/// one). If there is no currently focused element then this function will do
/// nothing. For most browsers this will cause the keyboard to be dismissed.
static void blurFocusedElement() {
Element focusedEl = document.querySelector("*:focus");
if (focusedEl != null) {
focusedEl.blur();
}
}
}