| // 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(); |
| } |
| } |
| } |