UNPKG

sprotty

Version:

A next-gen framework for graphical views

187 lines 6.42 kB
"use strict"; /******************************************************************************** * Copyright (c) 2018 TypeFox and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. * * This Source Code may also be made available under the following Secondary * Licenses when the conditions for such availability set forth in the Eclipse * Public License v. 2.0 are satisfied: GNU General Public License, version 2 * with the GNU Classpath Exception which is available at * https://www.gnu.org/software/classpath/license.html. * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ Object.defineProperty(exports, "__esModule", { value: true }); exports.getActualCode = exports.matchesKeystroke = void 0; const browser_1 = require("./browser"); /** * Returns whether the keyboard event matches the keystroke described by the given * code and modifiers. The code must comply to the format of the `code` property * of KeyboardEvent, but in contrast to that property, the actual keyboard layout is * considered by this function if possible. */ function matchesKeystroke(event, code, ...modifiers) { if (getActualCode(event) !== code) return false; if ((0, browser_1.isMac)()) { if (event.ctrlKey !== (modifiers.findIndex(m => m === 'ctrl') >= 0)) return false; if (event.metaKey !== (modifiers.findIndex(m => m === 'meta' || m === 'ctrlCmd') >= 0)) return false; } else { if (event.ctrlKey !== (modifiers.findIndex(m => m === 'ctrl' || m === 'ctrlCmd') >= 0)) return false; if (event.metaKey !== (modifiers.findIndex(m => m === 'meta') >= 0)) return false; } if (event.altKey !== (modifiers.findIndex(m => m === 'alt') >= 0)) return false; if (event.shiftKey !== (modifiers.findIndex(m => m === 'shift') >= 0)) return false; return true; } exports.matchesKeystroke = matchesKeystroke; /** * Determines a key code from the given event. This is necessary because the `code` property of * a KeyboardEvent does not consider keyboard layouts. */ function getActualCode(event) { if (event.keyCode) { const result = STRING_CODE[event.keyCode]; if (result !== undefined) return result; } return event.code; } exports.getActualCode = getActualCode; const STRING_CODE = new Array(256); (() => { function addKeyCode(stringCode, numericCode) { if (STRING_CODE[numericCode] === undefined) STRING_CODE[numericCode] = stringCode; } addKeyCode('Pause', 3); addKeyCode('Backspace', 8); addKeyCode('Tab', 9); addKeyCode('Enter', 13); addKeyCode('ShiftLeft', 16); addKeyCode('ShiftRight', 16); addKeyCode('ControlLeft', 17); addKeyCode('ControlRight', 17); addKeyCode('AltLeft', 18); addKeyCode('AltRight', 18); addKeyCode('CapsLock', 20); addKeyCode('Escape', 27); addKeyCode('Space', 32); addKeyCode('PageUp', 33); addKeyCode('PageDown', 34); addKeyCode('End', 35); addKeyCode('Home', 36); addKeyCode('ArrowLeft', 37); addKeyCode('ArrowUp', 38); addKeyCode('ArrowRight', 39); addKeyCode('ArrowDown', 40); addKeyCode('Insert', 45); addKeyCode('Delete', 46); addKeyCode('Digit1', 49); addKeyCode('Digit2', 50); addKeyCode('Digit3', 51); addKeyCode('Digit4', 52); addKeyCode('Digit5', 53); addKeyCode('Digit6', 54); addKeyCode('Digit7', 55); addKeyCode('Digit8', 56); addKeyCode('Digit9', 57); addKeyCode('Digit0', 48); addKeyCode('KeyA', 65); addKeyCode('KeyB', 66); addKeyCode('KeyC', 67); addKeyCode('KeyD', 68); addKeyCode('KeyE', 69); addKeyCode('KeyF', 70); addKeyCode('KeyG', 71); addKeyCode('KeyH', 72); addKeyCode('KeyI', 73); addKeyCode('KeyJ', 74); addKeyCode('KeyK', 75); addKeyCode('KeyL', 76); addKeyCode('KeyM', 77); addKeyCode('KeyN', 78); addKeyCode('KeyO', 79); addKeyCode('KeyP', 80); addKeyCode('KeyQ', 81); addKeyCode('KeyR', 82); addKeyCode('KeyS', 83); addKeyCode('KeyT', 84); addKeyCode('KeyU', 85); addKeyCode('KeyV', 86); addKeyCode('KeyW', 87); addKeyCode('KeyX', 88); addKeyCode('KeyY', 89); addKeyCode('KeyZ', 90); addKeyCode('OSLeft', 91); addKeyCode('MetaLeft', 91); addKeyCode('OSRight', 92); addKeyCode('MetaRight', 92); addKeyCode('ContextMenu', 93); addKeyCode('Numpad0', 96); addKeyCode('Numpad1', 97); addKeyCode('Numpad2', 98); addKeyCode('Numpad3', 99); addKeyCode('Numpad4', 100); addKeyCode('Numpad5', 101); addKeyCode('Numpad6', 102); addKeyCode('Numpad7', 103); addKeyCode('Numpad8', 104); addKeyCode('Numpad9', 105); addKeyCode('NumpadMultiply', 106); addKeyCode('NumpadAdd', 107); addKeyCode('NumpadSeparator', 108); addKeyCode('NumpadSubtract', 109); addKeyCode('NumpadDecimal', 110); addKeyCode('NumpadDivide', 111); addKeyCode('F1', 112); addKeyCode('F2', 113); addKeyCode('F3', 114); addKeyCode('F4', 115); addKeyCode('F5', 116); addKeyCode('F6', 117); addKeyCode('F7', 118); addKeyCode('F8', 119); addKeyCode('F9', 120); addKeyCode('F10', 121); addKeyCode('F11', 122); addKeyCode('F12', 123); addKeyCode('F13', 124); addKeyCode('F14', 125); addKeyCode('F15', 126); addKeyCode('F16', 127); addKeyCode('F17', 128); addKeyCode('F18', 129); addKeyCode('F19', 130); addKeyCode('F20', 131); addKeyCode('F21', 132); addKeyCode('F22', 133); addKeyCode('F23', 134); addKeyCode('F24', 135); addKeyCode('NumLock', 144); addKeyCode('ScrollLock', 145); addKeyCode('Semicolon', 186); addKeyCode('Equal', 187); addKeyCode('Comma', 188); addKeyCode('Minus', 189); addKeyCode('Period', 190); addKeyCode('Slash', 191); addKeyCode('Backquote', 192); addKeyCode('IntlRo', 193); addKeyCode('BracketLeft', 219); addKeyCode('Backslash', 220); addKeyCode('BracketRight', 221); addKeyCode('Quote', 222); addKeyCode('IntlYen', 255); })(); //# sourceMappingURL=keyboard.js.map