blob: fc71bb7fa2249db996cfdb92960efecb5ca87bab [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();
}
}
}