Index: third_party/google_input_tools/third_party/closure_library/closure/goog/events/keycodes.js |
diff --git a/third_party/google_input_tools/third_party/closure_library/closure/goog/events/keycodes.js b/third_party/google_input_tools/third_party/closure_library/closure/goog/events/keycodes.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d0ad82c4958ec5e277303586afb8d29baa1b1708 |
--- /dev/null |
+++ b/third_party/google_input_tools/third_party/closure_library/closure/goog/events/keycodes.js |
@@ -0,0 +1,415 @@ |
+// Copyright 2006 The Closure Library Authors. All Rights Reserved. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS-IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+/** |
+ * @fileoverview Constant declarations for common key codes. |
+ * |
+ * @author eae@google.com (Emil A Eklund) |
+ * @see ../demos/keyhandler.html |
+ */ |
+ |
+goog.provide('goog.events.KeyCodes'); |
+ |
+goog.require('goog.userAgent'); |
+ |
+ |
+/** |
+ * Key codes for common characters. |
+ * |
+ * This list is not localized and therefore some of the key codes are not |
+ * correct for non US keyboard layouts. See comments below. |
+ * |
+ * @enum {number} |
+ */ |
+goog.events.KeyCodes = { |
+ WIN_KEY_FF_LINUX: 0, |
+ MAC_ENTER: 3, |
+ BACKSPACE: 8, |
+ TAB: 9, |
+ NUM_CENTER: 12, // NUMLOCK on FF/Safari Mac |
+ ENTER: 13, |
+ SHIFT: 16, |
+ CTRL: 17, |
+ ALT: 18, |
+ PAUSE: 19, |
+ CAPS_LOCK: 20, |
+ ESC: 27, |
+ SPACE: 32, |
+ PAGE_UP: 33, // also NUM_NORTH_EAST |
+ PAGE_DOWN: 34, // also NUM_SOUTH_EAST |
+ END: 35, // also NUM_SOUTH_WEST |
+ HOME: 36, // also NUM_NORTH_WEST |
+ LEFT: 37, // also NUM_WEST |
+ UP: 38, // also NUM_NORTH |
+ RIGHT: 39, // also NUM_EAST |
+ DOWN: 40, // also NUM_SOUTH |
+ PRINT_SCREEN: 44, |
+ INSERT: 45, // also NUM_INSERT |
+ DELETE: 46, // also NUM_DELETE |
+ ZERO: 48, |
+ ONE: 49, |
+ TWO: 50, |
+ THREE: 51, |
+ FOUR: 52, |
+ FIVE: 53, |
+ SIX: 54, |
+ SEVEN: 55, |
+ EIGHT: 56, |
+ NINE: 57, |
+ FF_SEMICOLON: 59, // Firefox (Gecko) fires this for semicolon instead of 186 |
+ FF_EQUALS: 61, // Firefox (Gecko) fires this for equals instead of 187 |
+ FF_DASH: 173, // Firefox (Gecko) fires this for dash instead of 189 |
+ QUESTION_MARK: 63, // needs localization |
+ A: 65, |
+ B: 66, |
+ C: 67, |
+ D: 68, |
+ E: 69, |
+ F: 70, |
+ G: 71, |
+ H: 72, |
+ I: 73, |
+ J: 74, |
+ K: 75, |
+ L: 76, |
+ M: 77, |
+ N: 78, |
+ O: 79, |
+ P: 80, |
+ Q: 81, |
+ R: 82, |
+ S: 83, |
+ T: 84, |
+ U: 85, |
+ V: 86, |
+ W: 87, |
+ X: 88, |
+ Y: 89, |
+ Z: 90, |
+ META: 91, // WIN_KEY_LEFT |
+ WIN_KEY_RIGHT: 92, |
+ CONTEXT_MENU: 93, |
+ NUM_ZERO: 96, |
+ NUM_ONE: 97, |
+ NUM_TWO: 98, |
+ NUM_THREE: 99, |
+ NUM_FOUR: 100, |
+ NUM_FIVE: 101, |
+ NUM_SIX: 102, |
+ NUM_SEVEN: 103, |
+ NUM_EIGHT: 104, |
+ NUM_NINE: 105, |
+ NUM_MULTIPLY: 106, |
+ NUM_PLUS: 107, |
+ NUM_MINUS: 109, |
+ NUM_PERIOD: 110, |
+ NUM_DIVISION: 111, |
+ F1: 112, |
+ F2: 113, |
+ F3: 114, |
+ F4: 115, |
+ F5: 116, |
+ F6: 117, |
+ F7: 118, |
+ F8: 119, |
+ F9: 120, |
+ F10: 121, |
+ F11: 122, |
+ F12: 123, |
+ NUMLOCK: 144, |
+ SCROLL_LOCK: 145, |
+ |
+ // OS-specific media keys like volume controls and browser controls. |
+ FIRST_MEDIA_KEY: 166, |
+ LAST_MEDIA_KEY: 183, |
+ |
+ SEMICOLON: 186, // needs localization |
+ DASH: 189, // needs localization |
+ EQUALS: 187, // needs localization |
+ COMMA: 188, // needs localization |
+ PERIOD: 190, // needs localization |
+ SLASH: 191, // needs localization |
+ APOSTROPHE: 192, // needs localization |
+ TILDE: 192, // needs localization |
+ SINGLE_QUOTE: 222, // needs localization |
+ OPEN_SQUARE_BRACKET: 219, // needs localization |
+ BACKSLASH: 220, // needs localization |
+ CLOSE_SQUARE_BRACKET: 221, // needs localization |
+ WIN_KEY: 224, |
+ MAC_FF_META: 224, // Firefox (Gecko) fires this for the meta key instead of 91 |
+ MAC_WK_CMD_LEFT: 91, // WebKit Left Command key fired, same as META |
+ MAC_WK_CMD_RIGHT: 93, // WebKit Right Command key fired, different from META |
+ WIN_IME: 229, |
+ |
+ // We've seen users whose machines fire this keycode at regular one |
+ // second intervals. The common thread among these users is that |
+ // they're all using Dell Inspiron laptops, so we suspect that this |
+ // indicates a hardware/bios problem. |
+ // http://en.community.dell.com/support-forums/laptop/f/3518/p/19285957/19523128.aspx |
+ PHANTOM: 255 |
+}; |
+ |
+ |
+/** |
+ * Returns true if the event contains a text modifying key. |
+ * @param {goog.events.BrowserEvent} e A key event. |
+ * @return {boolean} Whether it's a text modifying key. |
+ */ |
+goog.events.KeyCodes.isTextModifyingKeyEvent = function(e) { |
+ if (e.altKey && !e.ctrlKey || |
+ e.metaKey || |
+ // Function keys don't generate text |
+ e.keyCode >= goog.events.KeyCodes.F1 && |
+ e.keyCode <= goog.events.KeyCodes.F12) { |
+ return false; |
+ } |
+ |
+ // The following keys are quite harmless, even in combination with |
+ // CTRL, ALT or SHIFT. |
+ switch (e.keyCode) { |
+ case goog.events.KeyCodes.ALT: |
+ case goog.events.KeyCodes.CAPS_LOCK: |
+ case goog.events.KeyCodes.CONTEXT_MENU: |
+ case goog.events.KeyCodes.CTRL: |
+ case goog.events.KeyCodes.DOWN: |
+ case goog.events.KeyCodes.END: |
+ case goog.events.KeyCodes.ESC: |
+ case goog.events.KeyCodes.HOME: |
+ case goog.events.KeyCodes.INSERT: |
+ case goog.events.KeyCodes.LEFT: |
+ case goog.events.KeyCodes.MAC_FF_META: |
+ case goog.events.KeyCodes.META: |
+ case goog.events.KeyCodes.NUMLOCK: |
+ case goog.events.KeyCodes.NUM_CENTER: |
+ case goog.events.KeyCodes.PAGE_DOWN: |
+ case goog.events.KeyCodes.PAGE_UP: |
+ case goog.events.KeyCodes.PAUSE: |
+ case goog.events.KeyCodes.PHANTOM: |
+ case goog.events.KeyCodes.PRINT_SCREEN: |
+ case goog.events.KeyCodes.RIGHT: |
+ case goog.events.KeyCodes.SCROLL_LOCK: |
+ case goog.events.KeyCodes.SHIFT: |
+ case goog.events.KeyCodes.UP: |
+ case goog.events.KeyCodes.WIN_KEY: |
+ case goog.events.KeyCodes.WIN_KEY_RIGHT: |
+ return false; |
+ case goog.events.KeyCodes.WIN_KEY_FF_LINUX: |
+ return !goog.userAgent.GECKO; |
+ default: |
+ return e.keyCode < goog.events.KeyCodes.FIRST_MEDIA_KEY || |
+ e.keyCode > goog.events.KeyCodes.LAST_MEDIA_KEY; |
+ } |
+}; |
+ |
+ |
+/** |
+ * Returns true if the key fires a keypress event in the current browser. |
+ * |
+ * Accoridng to MSDN [1] IE only fires keypress events for the following keys: |
+ * - Letters: A - Z (uppercase and lowercase) |
+ * - Numerals: 0 - 9 |
+ * - Symbols: ! @ # $ % ^ & * ( ) _ - + = < [ ] { } , . / ? \ | ' ` " ~ |
+ * - System: ESC, SPACEBAR, ENTER |
+ * |
+ * That's not entirely correct though, for instance there's no distinction |
+ * between upper and lower case letters. |
+ * |
+ * [1] http://msdn2.microsoft.com/en-us/library/ms536939(VS.85).aspx) |
+ * |
+ * Safari is similar to IE, but does not fire keypress for ESC. |
+ * |
+ * Additionally, IE6 does not fire keydown or keypress events for letters when |
+ * the control or alt keys are held down and the shift key is not. IE7 does |
+ * fire keydown in these cases, though, but not keypress. |
+ * |
+ * @param {number} keyCode A key code. |
+ * @param {number=} opt_heldKeyCode Key code of a currently-held key. |
+ * @param {boolean=} opt_shiftKey Whether the shift key is held down. |
+ * @param {boolean=} opt_ctrlKey Whether the control key is held down. |
+ * @param {boolean=} opt_altKey Whether the alt key is held down. |
+ * @return {boolean} Whether it's a key that fires a keypress event. |
+ */ |
+goog.events.KeyCodes.firesKeyPressEvent = function(keyCode, opt_heldKeyCode, |
+ opt_shiftKey, opt_ctrlKey, opt_altKey) { |
+ if (!goog.userAgent.IE && |
+ !(goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher('525'))) { |
+ return true; |
+ } |
+ |
+ if (goog.userAgent.MAC && opt_altKey) { |
+ return goog.events.KeyCodes.isCharacterKey(keyCode); |
+ } |
+ |
+ // Alt but not AltGr which is represented as Alt+Ctrl. |
+ if (opt_altKey && !opt_ctrlKey) { |
+ return false; |
+ } |
+ |
+ // Saves Ctrl or Alt + key for IE and WebKit 525+, which won't fire keypress. |
+ // Non-IE browsers and WebKit prior to 525 won't get this far so no need to |
+ // check the user agent. |
+ if (goog.isNumber(opt_heldKeyCode)) { |
+ opt_heldKeyCode = goog.events.KeyCodes.normalizeKeyCode(opt_heldKeyCode); |
+ } |
+ if (!opt_shiftKey && |
+ (opt_heldKeyCode == goog.events.KeyCodes.CTRL || |
+ opt_heldKeyCode == goog.events.KeyCodes.ALT || |
+ goog.userAgent.MAC && |
+ opt_heldKeyCode == goog.events.KeyCodes.META)) { |
+ return false; |
+ } |
+ |
+ // Some keys with Ctrl/Shift do not issue keypress in WEBKIT. |
+ if (goog.userAgent.WEBKIT && opt_ctrlKey && opt_shiftKey) { |
+ switch (keyCode) { |
+ case goog.events.KeyCodes.BACKSLASH: |
+ case goog.events.KeyCodes.OPEN_SQUARE_BRACKET: |
+ case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET: |
+ case goog.events.KeyCodes.TILDE: |
+ case goog.events.KeyCodes.SEMICOLON: |
+ case goog.events.KeyCodes.DASH: |
+ case goog.events.KeyCodes.EQUALS: |
+ case goog.events.KeyCodes.COMMA: |
+ case goog.events.KeyCodes.PERIOD: |
+ case goog.events.KeyCodes.SLASH: |
+ case goog.events.KeyCodes.APOSTROPHE: |
+ case goog.events.KeyCodes.SINGLE_QUOTE: |
+ return false; |
+ } |
+ } |
+ |
+ // When Ctrl+<somekey> is held in IE, it only fires a keypress once, but it |
+ // continues to fire keydown events as the event repeats. |
+ if (goog.userAgent.IE && opt_ctrlKey && opt_heldKeyCode == keyCode) { |
+ return false; |
+ } |
+ |
+ switch (keyCode) { |
+ case goog.events.KeyCodes.ENTER: |
+ return true; |
+ case goog.events.KeyCodes.ESC: |
+ return !goog.userAgent.WEBKIT; |
+ } |
+ |
+ return goog.events.KeyCodes.isCharacterKey(keyCode); |
+}; |
+ |
+ |
+/** |
+ * Returns true if the key produces a character. |
+ * This does not cover characters on non-US keyboards (Russian, Hebrew, etc.). |
+ * |
+ * @param {number} keyCode A key code. |
+ * @return {boolean} Whether it's a character key. |
+ */ |
+goog.events.KeyCodes.isCharacterKey = function(keyCode) { |
+ if (keyCode >= goog.events.KeyCodes.ZERO && |
+ keyCode <= goog.events.KeyCodes.NINE) { |
+ return true; |
+ } |
+ |
+ if (keyCode >= goog.events.KeyCodes.NUM_ZERO && |
+ keyCode <= goog.events.KeyCodes.NUM_MULTIPLY) { |
+ return true; |
+ } |
+ |
+ if (keyCode >= goog.events.KeyCodes.A && |
+ keyCode <= goog.events.KeyCodes.Z) { |
+ return true; |
+ } |
+ |
+ // Safari sends zero key code for non-latin characters. |
+ if (goog.userAgent.WEBKIT && keyCode == 0) { |
+ return true; |
+ } |
+ |
+ switch (keyCode) { |
+ case goog.events.KeyCodes.SPACE: |
+ case goog.events.KeyCodes.QUESTION_MARK: |
+ case goog.events.KeyCodes.NUM_PLUS: |
+ case goog.events.KeyCodes.NUM_MINUS: |
+ case goog.events.KeyCodes.NUM_PERIOD: |
+ case goog.events.KeyCodes.NUM_DIVISION: |
+ case goog.events.KeyCodes.SEMICOLON: |
+ case goog.events.KeyCodes.FF_SEMICOLON: |
+ case goog.events.KeyCodes.DASH: |
+ case goog.events.KeyCodes.EQUALS: |
+ case goog.events.KeyCodes.FF_EQUALS: |
+ case goog.events.KeyCodes.COMMA: |
+ case goog.events.KeyCodes.PERIOD: |
+ case goog.events.KeyCodes.SLASH: |
+ case goog.events.KeyCodes.APOSTROPHE: |
+ case goog.events.KeyCodes.SINGLE_QUOTE: |
+ case goog.events.KeyCodes.OPEN_SQUARE_BRACKET: |
+ case goog.events.KeyCodes.BACKSLASH: |
+ case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET: |
+ return true; |
+ default: |
+ return false; |
+ } |
+}; |
+ |
+ |
+/** |
+ * Normalizes key codes from OS/Browser-specific value to the general one. |
+ * @param {number} keyCode The native key code. |
+ * @return {number} The normalized key code. |
+ */ |
+goog.events.KeyCodes.normalizeKeyCode = function(keyCode) { |
+ if (goog.userAgent.GECKO) { |
+ return goog.events.KeyCodes.normalizeGeckoKeyCode(keyCode); |
+ } else if (goog.userAgent.MAC && goog.userAgent.WEBKIT) { |
+ return goog.events.KeyCodes.normalizeMacWebKitKeyCode(keyCode); |
+ } else { |
+ return keyCode; |
+ } |
+}; |
+ |
+ |
+/** |
+ * Normalizes key codes from their Gecko-specific value to the general one. |
+ * @param {number} keyCode The native key code. |
+ * @return {number} The normalized key code. |
+ */ |
+goog.events.KeyCodes.normalizeGeckoKeyCode = function(keyCode) { |
+ switch (keyCode) { |
+ case goog.events.KeyCodes.FF_EQUALS: |
+ return goog.events.KeyCodes.EQUALS; |
+ case goog.events.KeyCodes.FF_SEMICOLON: |
+ return goog.events.KeyCodes.SEMICOLON; |
+ case goog.events.KeyCodes.FF_DASH: |
+ return goog.events.KeyCodes.DASH; |
+ case goog.events.KeyCodes.MAC_FF_META: |
+ return goog.events.KeyCodes.META; |
+ case goog.events.KeyCodes.WIN_KEY_FF_LINUX: |
+ return goog.events.KeyCodes.WIN_KEY; |
+ default: |
+ return keyCode; |
+ } |
+}; |
+ |
+ |
+/** |
+ * Normalizes key codes from their Mac WebKit-specific value to the general one. |
+ * @param {number} keyCode The native key code. |
+ * @return {number} The normalized key code. |
+ */ |
+goog.events.KeyCodes.normalizeMacWebKitKeyCode = function(keyCode) { |
+ switch (keyCode) { |
+ case goog.events.KeyCodes.MAC_WK_CMD_RIGHT: // 93 |
+ return goog.events.KeyCodes.META; // 91 |
+ default: |
+ return keyCode; |
+ } |
+}; |