| // Copyright (c) 2012, 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. |
| |
| part of html; |
| |
| /** |
| * Defines the keycode values for keys that are returned by |
| * KeyboardEvent.keyCode. |
| * |
| * Important note: There is substantial divergence in how different browsers |
| * handle keycodes and their variants in different locales/keyboard layouts. We |
| * provide these constants to help make code processing keys more readable. |
| */ |
| abstract class KeyCode { |
| // These constant names were borrowed from Closure's Keycode enumeration |
| // class. |
| // https://github.com/google/closure-library/blob/master/closure/goog/events/keycodes.js |
| static const int WIN_KEY_FF_LINUX = 0; |
| static const int MAC_ENTER = 3; |
| static const int BACKSPACE = 8; |
| static const int TAB = 9; |
| /** NUM_CENTER is also NUMLOCK for FF and Safari on Mac. */ |
| static const int NUM_CENTER = 12; |
| static const int ENTER = 13; |
| static const int SHIFT = 16; |
| static const int CTRL = 17; |
| static const int ALT = 18; |
| static const int PAUSE = 19; |
| static const int CAPS_LOCK = 20; |
| static const int ESC = 27; |
| static const int SPACE = 32; |
| static const int PAGE_UP = 33; |
| static const int PAGE_DOWN = 34; |
| static const int END = 35; |
| static const int HOME = 36; |
| static const int LEFT = 37; |
| static const int UP = 38; |
| static const int RIGHT = 39; |
| static const int DOWN = 40; |
| static const int NUM_NORTH_EAST = 33; |
| static const int NUM_SOUTH_EAST = 34; |
| static const int NUM_SOUTH_WEST = 35; |
| static const int NUM_NORTH_WEST = 36; |
| static const int NUM_WEST = 37; |
| static const int NUM_NORTH = 38; |
| static const int NUM_EAST = 39; |
| static const int NUM_SOUTH = 40; |
| static const int PRINT_SCREEN = 44; |
| static const int INSERT = 45; |
| static const int NUM_INSERT = 45; |
| static const int DELETE = 46; |
| static const int NUM_DELETE = 46; |
| static const int ZERO = 48; |
| static const int ONE = 49; |
| static const int TWO = 50; |
| static const int THREE = 51; |
| static const int FOUR = 52; |
| static const int FIVE = 53; |
| static const int SIX = 54; |
| static const int SEVEN = 55; |
| static const int EIGHT = 56; |
| static const int NINE = 57; |
| static const int FF_SEMICOLON = 59; |
| static const int FF_EQUALS = 61; |
| /** |
| * CAUTION: The question mark is for US-keyboard layouts. It varies |
| * for other locales and keyboard layouts. |
| */ |
| static const int QUESTION_MARK = 63; |
| static const int A = 65; |
| static const int B = 66; |
| static const int C = 67; |
| static const int D = 68; |
| static const int E = 69; |
| static const int F = 70; |
| static const int G = 71; |
| static const int H = 72; |
| static const int I = 73; |
| static const int J = 74; |
| static const int K = 75; |
| static const int L = 76; |
| static const int M = 77; |
| static const int N = 78; |
| static const int O = 79; |
| static const int P = 80; |
| static const int Q = 81; |
| static const int R = 82; |
| static const int S = 83; |
| static const int T = 84; |
| static const int U = 85; |
| static const int V = 86; |
| static const int W = 87; |
| static const int X = 88; |
| static const int Y = 89; |
| static const int Z = 90; |
| static const int META = 91; |
| static const int WIN_KEY_LEFT = 91; |
| static const int WIN_KEY_RIGHT = 92; |
| static const int CONTEXT_MENU = 93; |
| static const int NUM_ZERO = 96; |
| static const int NUM_ONE = 97; |
| static const int NUM_TWO = 98; |
| static const int NUM_THREE = 99; |
| static const int NUM_FOUR = 100; |
| static const int NUM_FIVE = 101; |
| static const int NUM_SIX = 102; |
| static const int NUM_SEVEN = 103; |
| static const int NUM_EIGHT = 104; |
| static const int NUM_NINE = 105; |
| static const int NUM_MULTIPLY = 106; |
| static const int NUM_PLUS = 107; |
| static const int NUM_MINUS = 109; |
| static const int NUM_PERIOD = 110; |
| static const int NUM_DIVISION = 111; |
| static const int F1 = 112; |
| static const int F2 = 113; |
| static const int F3 = 114; |
| static const int F4 = 115; |
| static const int F5 = 116; |
| static const int F6 = 117; |
| static const int F7 = 118; |
| static const int F8 = 119; |
| static const int F9 = 120; |
| static const int F10 = 121; |
| static const int F11 = 122; |
| static const int F12 = 123; |
| static const int NUMLOCK = 144; |
| static const int SCROLL_LOCK = 145; |
| |
| // OS-specific media keys like volume controls and browser controls. |
| static const int FIRST_MEDIA_KEY = 166; |
| static const int LAST_MEDIA_KEY = 183; |
| |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int SEMICOLON = 186; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int DASH = 189; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int EQUALS = 187; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int COMMA = 188; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int PERIOD = 190; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int SLASH = 191; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int APOSTROPHE = 192; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int TILDE = 192; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int SINGLE_QUOTE = 222; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int OPEN_SQUARE_BRACKET = 219; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int BACKSLASH = 220; |
| /** |
| * CAUTION: This constant requires localization for other locales and keyboard |
| * layouts. |
| */ |
| static const int CLOSE_SQUARE_BRACKET = 221; |
| static const int WIN_KEY = 224; |
| static const int MAC_FF_META = 224; |
| static const int WIN_IME = 229; |
| |
| /** A sentinel value if the keycode could not be determined. */ |
| static const int UNKNOWN = -1; |
| |
| /** |
| * Returns true if the keyCode produces a (US keyboard) character. |
| * Note: This does not (yet) cover characters on non-US keyboards (Russian, |
| * Hebrew, etc.). |
| */ |
| static bool isCharacterKey(int keyCode) { |
| if ((keyCode >= ZERO && keyCode <= NINE) || |
| (keyCode >= NUM_ZERO && keyCode <= NUM_MULTIPLY) || |
| (keyCode >= A && keyCode <= Z)) { |
| return true; |
| } |
| |
| // Safari sends zero key code for non-latin characters. |
| if (Device.isWebKit && keyCode == 0) { |
| return true; |
| } |
| |
| return (keyCode == SPACE || |
| keyCode == QUESTION_MARK || |
| keyCode == NUM_PLUS || |
| keyCode == NUM_MINUS || |
| keyCode == NUM_PERIOD || |
| keyCode == NUM_DIVISION || |
| keyCode == SEMICOLON || |
| keyCode == FF_SEMICOLON || |
| keyCode == DASH || |
| keyCode == EQUALS || |
| keyCode == FF_EQUALS || |
| keyCode == COMMA || |
| keyCode == PERIOD || |
| keyCode == SLASH || |
| keyCode == APOSTROPHE || |
| keyCode == SINGLE_QUOTE || |
| keyCode == OPEN_SQUARE_BRACKET || |
| keyCode == BACKSLASH || |
| keyCode == CLOSE_SQUARE_BRACKET); |
| } |
| |
| /** |
| * Experimental helper function for converting keyCodes to keyNames for the |
| * keyIdentifier attribute still used in browsers not updated with current |
| * spec. This is an imperfect conversion! It will need to be refined, but |
| * hopefully it can just completely go away once all the browsers update to |
| * follow the DOM3 spec. |
| */ |
| static String _convertKeyCodeToKeyName(int keyCode) { |
| switch (keyCode) { |
| case KeyCode.ALT: |
| return _KeyName.ALT; |
| case KeyCode.BACKSPACE: |
| return _KeyName.BACKSPACE; |
| case KeyCode.CAPS_LOCK: |
| return _KeyName.CAPS_LOCK; |
| case KeyCode.CTRL: |
| return _KeyName.CONTROL; |
| case KeyCode.DELETE: |
| return _KeyName.DEL; |
| case KeyCode.DOWN: |
| return _KeyName.DOWN; |
| case KeyCode.END: |
| return _KeyName.END; |
| case KeyCode.ENTER: |
| return _KeyName.ENTER; |
| case KeyCode.ESC: |
| return _KeyName.ESC; |
| case KeyCode.F1: |
| return _KeyName.F1; |
| case KeyCode.F2: |
| return _KeyName.F2; |
| case KeyCode.F3: |
| return _KeyName.F3; |
| case KeyCode.F4: |
| return _KeyName.F4; |
| case KeyCode.F5: |
| return _KeyName.F5; |
| case KeyCode.F6: |
| return _KeyName.F6; |
| case KeyCode.F7: |
| return _KeyName.F7; |
| case KeyCode.F8: |
| return _KeyName.F8; |
| case KeyCode.F9: |
| return _KeyName.F9; |
| case KeyCode.F10: |
| return _KeyName.F10; |
| case KeyCode.F11: |
| return _KeyName.F11; |
| case KeyCode.F12: |
| return _KeyName.F12; |
| case KeyCode.HOME: |
| return _KeyName.HOME; |
| case KeyCode.INSERT: |
| return _KeyName.INSERT; |
| case KeyCode.LEFT: |
| return _KeyName.LEFT; |
| case KeyCode.META: |
| return _KeyName.META; |
| case KeyCode.NUMLOCK: |
| return _KeyName.NUM_LOCK; |
| case KeyCode.PAGE_DOWN: |
| return _KeyName.PAGE_DOWN; |
| case KeyCode.PAGE_UP: |
| return _KeyName.PAGE_UP; |
| case KeyCode.PAUSE: |
| return _KeyName.PAUSE; |
| case KeyCode.PRINT_SCREEN: |
| return _KeyName.PRINT_SCREEN; |
| case KeyCode.RIGHT: |
| return _KeyName.RIGHT; |
| case KeyCode.SCROLL_LOCK: |
| return _KeyName.SCROLL; |
| case KeyCode.SHIFT: |
| return _KeyName.SHIFT; |
| case KeyCode.SPACE: |
| return _KeyName.SPACEBAR; |
| case KeyCode.TAB: |
| return _KeyName.TAB; |
| case KeyCode.UP: |
| return _KeyName.UP; |
| case KeyCode.WIN_IME: |
| case KeyCode.WIN_KEY: |
| case KeyCode.WIN_KEY_LEFT: |
| case KeyCode.WIN_KEY_RIGHT: |
| return _KeyName.WIN; |
| default: |
| return _KeyName.UNIDENTIFIED; |
| } |
| return _KeyName.UNIDENTIFIED; |
| } |
| } |