| Index: tools/dom/src/KeyboardEventStream.dart
|
| diff --git a/tools/dom/src/KeyboardEventStream.dart b/tools/dom/src/KeyboardEventStream.dart
|
| index 39c5cfc56739de0c6c7a3cc5a65bf882e892623b..a8c4ab99eb300fa6a6ba0d3053978d47404aca95 100644
|
| --- a/tools/dom/src/KeyboardEventStream.dart
|
| +++ b/tools/dom/src/KeyboardEventStream.dart
|
| @@ -66,8 +66,8 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| /** Return a stream for KeyEvents for the specified target. */
|
| // Note: this actually functions like a factory constructor.
|
| CustomStream<KeyEvent> forTarget(EventTarget e, {bool useCapture: false}) {
|
| - var handler = new _KeyboardEventHandler.initializeAllEventListeners(
|
| - _type, e);
|
| + var handler =
|
| + new _KeyboardEventHandler.initializeAllEventListeners(_type, e);
|
| return handler._stream;
|
| }
|
|
|
| @@ -75,22 +75,26 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| * General constructor, performs basic initialization for our improved
|
| * KeyboardEvent controller.
|
| */
|
| - _KeyboardEventHandler(this._type):
|
| - _stream = new _CustomKeyEventStreamImpl('event'), _target = null,
|
| - super(_EVENT_TYPE);
|
| + _KeyboardEventHandler(this._type)
|
| + : _stream = new _CustomKeyEventStreamImpl('event'),
|
| + _target = null,
|
| + super(_EVENT_TYPE);
|
|
|
| /**
|
| * Hook up all event listeners under the covers so we can estimate keycodes
|
| * and charcodes when they are not provided.
|
| */
|
| - _KeyboardEventHandler.initializeAllEventListeners(this._type, this._target) :
|
| - super(_EVENT_TYPE) {
|
| - Element.keyDownEvent.forTarget(_target, useCapture: true).listen(
|
| - processKeyDown);
|
| - Element.keyPressEvent.forTarget(_target, useCapture: true).listen(
|
| - processKeyPress);
|
| - Element.keyUpEvent.forTarget(_target, useCapture: true).listen(
|
| - processKeyUp);
|
| + _KeyboardEventHandler.initializeAllEventListeners(this._type, this._target)
|
| + : super(_EVENT_TYPE) {
|
| + Element.keyDownEvent
|
| + .forTarget(_target, useCapture: true)
|
| + .listen(processKeyDown);
|
| + Element.keyPressEvent
|
| + .forTarget(_target, useCapture: true)
|
| + .listen(processKeyPress);
|
| + Element.keyUpEvent
|
| + .forTarget(_target, useCapture: true)
|
| + .listen(processKeyUp);
|
| _stream = new _CustomKeyEventStreamImpl(_type);
|
| }
|
|
|
| @@ -112,9 +116,11 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| if (prevEvent._shadowCharCode == event.charCode) {
|
| return prevEvent.keyCode;
|
| }
|
| - if ((event.shiftKey || _capsLockOn) && event.charCode >= "A".codeUnits[0]
|
| - && event.charCode <= "Z".codeUnits[0] && event.charCode +
|
| - _ROMAN_ALPHABET_OFFSET == prevEvent._shadowCharCode) {
|
| + if ((event.shiftKey || _capsLockOn) &&
|
| + event.charCode >= "A".codeUnits[0] &&
|
| + event.charCode <= "Z".codeUnits[0] &&
|
| + event.charCode + _ROMAN_ALPHABET_OFFSET ==
|
| + prevEvent._shadowCharCode) {
|
| return prevEvent.keyCode;
|
| }
|
| }
|
| @@ -128,7 +134,8 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| * keypress events.
|
| */
|
| int _findCharCodeKeyDown(KeyboardEvent event) {
|
| - if (event.keyLocation == 3) { // Numpad keys.
|
| + if (event.keyLocation == 3) {
|
| + // Numpad keys.
|
| switch (event.keyCode) {
|
| case KeyCode.NUM_ZERO:
|
| // Even though this function returns _charCodes_, for some cases the
|
| @@ -170,7 +177,7 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| // keyCode locations and other information during the keyPress event.
|
| return event.keyCode + _ROMAN_ALPHABET_OFFSET;
|
| }
|
| - switch(event.keyCode) {
|
| + switch (event.keyCode) {
|
| case KeyCode.SEMICOLON:
|
| return KeyCode.FF_SEMICOLON;
|
| case KeyCode.EQUALS:
|
| @@ -217,23 +224,28 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| // Saves Ctrl or Alt + key for IE and WebKit, which won't fire keypress.
|
| if (!event.shiftKey &&
|
| (_keyDownList.last.keyCode == KeyCode.CTRL ||
|
| - _keyDownList.last.keyCode == KeyCode.ALT ||
|
| - Device.userAgent.contains('Mac') &&
|
| - _keyDownList.last.keyCode == KeyCode.META)) {
|
| + _keyDownList.last.keyCode == KeyCode.ALT ||
|
| + Device.userAgent.contains('Mac') &&
|
| + _keyDownList.last.keyCode == KeyCode.META)) {
|
| return false;
|
| }
|
|
|
| // Some keys with Ctrl/Shift do not issue keypress in WebKit.
|
| - if (Device.isWebKit && event.ctrlKey && event.shiftKey && (
|
| - event.keyCode == KeyCode.BACKSLASH ||
|
| - event.keyCode == KeyCode.OPEN_SQUARE_BRACKET ||
|
| - event.keyCode == KeyCode.CLOSE_SQUARE_BRACKET ||
|
| - event.keyCode == KeyCode.TILDE ||
|
| - event.keyCode == KeyCode.SEMICOLON || event.keyCode == KeyCode.DASH ||
|
| - event.keyCode == KeyCode.EQUALS || event.keyCode == KeyCode.COMMA ||
|
| - event.keyCode == KeyCode.PERIOD || event.keyCode == KeyCode.SLASH ||
|
| - event.keyCode == KeyCode.APOSTROPHE ||
|
| - event.keyCode == KeyCode.SINGLE_QUOTE)) {
|
| + if (Device.isWebKit &&
|
| + event.ctrlKey &&
|
| + event.shiftKey &&
|
| + (event.keyCode == KeyCode.BACKSLASH ||
|
| + event.keyCode == KeyCode.OPEN_SQUARE_BRACKET ||
|
| + event.keyCode == KeyCode.CLOSE_SQUARE_BRACKET ||
|
| + event.keyCode == KeyCode.TILDE ||
|
| + event.keyCode == KeyCode.SEMICOLON ||
|
| + event.keyCode == KeyCode.DASH ||
|
| + event.keyCode == KeyCode.EQUALS ||
|
| + event.keyCode == KeyCode.COMMA ||
|
| + event.keyCode == KeyCode.PERIOD ||
|
| + event.keyCode == KeyCode.SLASH ||
|
| + event.keyCode == KeyCode.APOSTROPHE ||
|
| + event.keyCode == KeyCode.SINGLE_QUOTE)) {
|
| return false;
|
| }
|
|
|
| @@ -255,7 +267,7 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| int _normalizeKeyCodes(KeyboardEvent event) {
|
| // Note: This may change once we get input about non-US keyboards.
|
| if (Device.isFirefox) {
|
| - switch(event.keyCode) {
|
| + switch (event.keyCode) {
|
| case KeyCode.FF_EQUALS:
|
| return KeyCode.EQUALS;
|
| case KeyCode.FF_SEMICOLON:
|
| @@ -276,9 +288,10 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| // we reset the state.
|
| if (_keyDownList.length > 0 &&
|
| (_keyDownList.last.keyCode == KeyCode.CTRL && !e.ctrlKey ||
|
| - _keyDownList.last.keyCode == KeyCode.ALT && !e.altKey ||
|
| - Device.userAgent.contains('Mac') &&
|
| - _keyDownList.last.keyCode == KeyCode.META && !e.metaKey)) {
|
| + _keyDownList.last.keyCode == KeyCode.ALT && !e.altKey ||
|
| + Device.userAgent.contains('Mac') &&
|
| + _keyDownList.last.keyCode == KeyCode.META &&
|
| + !e.metaKey)) {
|
| _keyDownList.clear();
|
| }
|
|
|
| @@ -289,7 +302,8 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| // as much information as possible on keypress about keycode and also
|
| // charCode.
|
| event._shadowCharCode = _findCharCodeKeyDown(event);
|
| - if (_keyDownList.length > 0 && event.keyCode != _keyDownList.last.keyCode &&
|
| + if (_keyDownList.length > 0 &&
|
| + event.keyCode != _keyDownList.last.keyCode &&
|
| !_firesKeyPressEvent(event)) {
|
| // Some browsers have quirks not firing keypress events where all other
|
| // browsers do. This makes them more consistent.
|
| @@ -350,7 +364,6 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| }
|
| }
|
|
|
| -
|
| /**
|
| * Records KeyboardEvents that occur on a particular element, and provides a
|
| * stream of outgoing KeyEvents with cross-browser consistent keyCode and
|
| @@ -367,7 +380,6 @@ class _KeyboardEventHandler extends EventStreamProvider<KeyEvent> {
|
| * possible. Bugs welcome!
|
| */
|
| class KeyboardEventStream {
|
| -
|
| /** Named constructor to produce a stream for onKeyPress events. */
|
| static CustomStream<KeyEvent> onKeyPress(EventTarget target) =>
|
| new _KeyboardEventHandler('keypress').forTarget(target);
|
|
|