279 lines
11 KiB
JavaScript
279 lines
11 KiB
JavaScript
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
import { illegalArgument } from './errors.js';
|
||
|
var KeyCodeStrMap = /** @class */ (function () {
|
||
|
function KeyCodeStrMap() {
|
||
|
this._keyCodeToStr = [];
|
||
|
this._strToKeyCode = Object.create(null);
|
||
|
}
|
||
|
KeyCodeStrMap.prototype.define = function (keyCode, str) {
|
||
|
this._keyCodeToStr[keyCode] = str;
|
||
|
this._strToKeyCode[str.toLowerCase()] = keyCode;
|
||
|
};
|
||
|
KeyCodeStrMap.prototype.keyCodeToStr = function (keyCode) {
|
||
|
return this._keyCodeToStr[keyCode];
|
||
|
};
|
||
|
KeyCodeStrMap.prototype.strToKeyCode = function (str) {
|
||
|
return this._strToKeyCode[str.toLowerCase()] || 0 /* Unknown */;
|
||
|
};
|
||
|
return KeyCodeStrMap;
|
||
|
}());
|
||
|
var uiMap = new KeyCodeStrMap();
|
||
|
var userSettingsUSMap = new KeyCodeStrMap();
|
||
|
var userSettingsGeneralMap = new KeyCodeStrMap();
|
||
|
(function () {
|
||
|
function define(keyCode, uiLabel, usUserSettingsLabel, generalUserSettingsLabel) {
|
||
|
if (usUserSettingsLabel === void 0) { usUserSettingsLabel = uiLabel; }
|
||
|
if (generalUserSettingsLabel === void 0) { generalUserSettingsLabel = usUserSettingsLabel; }
|
||
|
uiMap.define(keyCode, uiLabel);
|
||
|
userSettingsUSMap.define(keyCode, usUserSettingsLabel);
|
||
|
userSettingsGeneralMap.define(keyCode, generalUserSettingsLabel);
|
||
|
}
|
||
|
define(0 /* Unknown */, 'unknown');
|
||
|
define(1 /* Backspace */, 'Backspace');
|
||
|
define(2 /* Tab */, 'Tab');
|
||
|
define(3 /* Enter */, 'Enter');
|
||
|
define(4 /* Shift */, 'Shift');
|
||
|
define(5 /* Ctrl */, 'Ctrl');
|
||
|
define(6 /* Alt */, 'Alt');
|
||
|
define(7 /* PauseBreak */, 'PauseBreak');
|
||
|
define(8 /* CapsLock */, 'CapsLock');
|
||
|
define(9 /* Escape */, 'Escape');
|
||
|
define(10 /* Space */, 'Space');
|
||
|
define(11 /* PageUp */, 'PageUp');
|
||
|
define(12 /* PageDown */, 'PageDown');
|
||
|
define(13 /* End */, 'End');
|
||
|
define(14 /* Home */, 'Home');
|
||
|
define(15 /* LeftArrow */, 'LeftArrow', 'Left');
|
||
|
define(16 /* UpArrow */, 'UpArrow', 'Up');
|
||
|
define(17 /* RightArrow */, 'RightArrow', 'Right');
|
||
|
define(18 /* DownArrow */, 'DownArrow', 'Down');
|
||
|
define(19 /* Insert */, 'Insert');
|
||
|
define(20 /* Delete */, 'Delete');
|
||
|
define(21 /* KEY_0 */, '0');
|
||
|
define(22 /* KEY_1 */, '1');
|
||
|
define(23 /* KEY_2 */, '2');
|
||
|
define(24 /* KEY_3 */, '3');
|
||
|
define(25 /* KEY_4 */, '4');
|
||
|
define(26 /* KEY_5 */, '5');
|
||
|
define(27 /* KEY_6 */, '6');
|
||
|
define(28 /* KEY_7 */, '7');
|
||
|
define(29 /* KEY_8 */, '8');
|
||
|
define(30 /* KEY_9 */, '9');
|
||
|
define(31 /* KEY_A */, 'A');
|
||
|
define(32 /* KEY_B */, 'B');
|
||
|
define(33 /* KEY_C */, 'C');
|
||
|
define(34 /* KEY_D */, 'D');
|
||
|
define(35 /* KEY_E */, 'E');
|
||
|
define(36 /* KEY_F */, 'F');
|
||
|
define(37 /* KEY_G */, 'G');
|
||
|
define(38 /* KEY_H */, 'H');
|
||
|
define(39 /* KEY_I */, 'I');
|
||
|
define(40 /* KEY_J */, 'J');
|
||
|
define(41 /* KEY_K */, 'K');
|
||
|
define(42 /* KEY_L */, 'L');
|
||
|
define(43 /* KEY_M */, 'M');
|
||
|
define(44 /* KEY_N */, 'N');
|
||
|
define(45 /* KEY_O */, 'O');
|
||
|
define(46 /* KEY_P */, 'P');
|
||
|
define(47 /* KEY_Q */, 'Q');
|
||
|
define(48 /* KEY_R */, 'R');
|
||
|
define(49 /* KEY_S */, 'S');
|
||
|
define(50 /* KEY_T */, 'T');
|
||
|
define(51 /* KEY_U */, 'U');
|
||
|
define(52 /* KEY_V */, 'V');
|
||
|
define(53 /* KEY_W */, 'W');
|
||
|
define(54 /* KEY_X */, 'X');
|
||
|
define(55 /* KEY_Y */, 'Y');
|
||
|
define(56 /* KEY_Z */, 'Z');
|
||
|
define(57 /* Meta */, 'Meta');
|
||
|
define(58 /* ContextMenu */, 'ContextMenu');
|
||
|
define(59 /* F1 */, 'F1');
|
||
|
define(60 /* F2 */, 'F2');
|
||
|
define(61 /* F3 */, 'F3');
|
||
|
define(62 /* F4 */, 'F4');
|
||
|
define(63 /* F5 */, 'F5');
|
||
|
define(64 /* F6 */, 'F6');
|
||
|
define(65 /* F7 */, 'F7');
|
||
|
define(66 /* F8 */, 'F8');
|
||
|
define(67 /* F9 */, 'F9');
|
||
|
define(68 /* F10 */, 'F10');
|
||
|
define(69 /* F11 */, 'F11');
|
||
|
define(70 /* F12 */, 'F12');
|
||
|
define(71 /* F13 */, 'F13');
|
||
|
define(72 /* F14 */, 'F14');
|
||
|
define(73 /* F15 */, 'F15');
|
||
|
define(74 /* F16 */, 'F16');
|
||
|
define(75 /* F17 */, 'F17');
|
||
|
define(76 /* F18 */, 'F18');
|
||
|
define(77 /* F19 */, 'F19');
|
||
|
define(78 /* NumLock */, 'NumLock');
|
||
|
define(79 /* ScrollLock */, 'ScrollLock');
|
||
|
define(80 /* US_SEMICOLON */, ';', ';', 'OEM_1');
|
||
|
define(81 /* US_EQUAL */, '=', '=', 'OEM_PLUS');
|
||
|
define(82 /* US_COMMA */, ',', ',', 'OEM_COMMA');
|
||
|
define(83 /* US_MINUS */, '-', '-', 'OEM_MINUS');
|
||
|
define(84 /* US_DOT */, '.', '.', 'OEM_PERIOD');
|
||
|
define(85 /* US_SLASH */, '/', '/', 'OEM_2');
|
||
|
define(86 /* US_BACKTICK */, '`', '`', 'OEM_3');
|
||
|
define(110 /* ABNT_C1 */, 'ABNT_C1');
|
||
|
define(111 /* ABNT_C2 */, 'ABNT_C2');
|
||
|
define(87 /* US_OPEN_SQUARE_BRACKET */, '[', '[', 'OEM_4');
|
||
|
define(88 /* US_BACKSLASH */, '\\', '\\', 'OEM_5');
|
||
|
define(89 /* US_CLOSE_SQUARE_BRACKET */, ']', ']', 'OEM_6');
|
||
|
define(90 /* US_QUOTE */, '\'', '\'', 'OEM_7');
|
||
|
define(91 /* OEM_8 */, 'OEM_8');
|
||
|
define(92 /* OEM_102 */, 'OEM_102');
|
||
|
define(93 /* NUMPAD_0 */, 'NumPad0');
|
||
|
define(94 /* NUMPAD_1 */, 'NumPad1');
|
||
|
define(95 /* NUMPAD_2 */, 'NumPad2');
|
||
|
define(96 /* NUMPAD_3 */, 'NumPad3');
|
||
|
define(97 /* NUMPAD_4 */, 'NumPad4');
|
||
|
define(98 /* NUMPAD_5 */, 'NumPad5');
|
||
|
define(99 /* NUMPAD_6 */, 'NumPad6');
|
||
|
define(100 /* NUMPAD_7 */, 'NumPad7');
|
||
|
define(101 /* NUMPAD_8 */, 'NumPad8');
|
||
|
define(102 /* NUMPAD_9 */, 'NumPad9');
|
||
|
define(103 /* NUMPAD_MULTIPLY */, 'NumPad_Multiply');
|
||
|
define(104 /* NUMPAD_ADD */, 'NumPad_Add');
|
||
|
define(105 /* NUMPAD_SEPARATOR */, 'NumPad_Separator');
|
||
|
define(106 /* NUMPAD_SUBTRACT */, 'NumPad_Subtract');
|
||
|
define(107 /* NUMPAD_DECIMAL */, 'NumPad_Decimal');
|
||
|
define(108 /* NUMPAD_DIVIDE */, 'NumPad_Divide');
|
||
|
})();
|
||
|
export var KeyCodeUtils;
|
||
|
(function (KeyCodeUtils) {
|
||
|
function toString(keyCode) {
|
||
|
return uiMap.keyCodeToStr(keyCode);
|
||
|
}
|
||
|
KeyCodeUtils.toString = toString;
|
||
|
function fromString(key) {
|
||
|
return uiMap.strToKeyCode(key);
|
||
|
}
|
||
|
KeyCodeUtils.fromString = fromString;
|
||
|
function toUserSettingsUS(keyCode) {
|
||
|
return userSettingsUSMap.keyCodeToStr(keyCode);
|
||
|
}
|
||
|
KeyCodeUtils.toUserSettingsUS = toUserSettingsUS;
|
||
|
function toUserSettingsGeneral(keyCode) {
|
||
|
return userSettingsGeneralMap.keyCodeToStr(keyCode);
|
||
|
}
|
||
|
KeyCodeUtils.toUserSettingsGeneral = toUserSettingsGeneral;
|
||
|
function fromUserSettings(key) {
|
||
|
return userSettingsUSMap.strToKeyCode(key) || userSettingsGeneralMap.strToKeyCode(key);
|
||
|
}
|
||
|
KeyCodeUtils.fromUserSettings = fromUserSettings;
|
||
|
})(KeyCodeUtils || (KeyCodeUtils = {}));
|
||
|
export function KeyChord(firstPart, secondPart) {
|
||
|
var chordPart = ((secondPart & 0x0000FFFF) << 16) >>> 0;
|
||
|
return (firstPart | chordPart) >>> 0;
|
||
|
}
|
||
|
export function createKeybinding(keybinding, OS) {
|
||
|
if (keybinding === 0) {
|
||
|
return null;
|
||
|
}
|
||
|
var firstPart = (keybinding & 0x0000FFFF) >>> 0;
|
||
|
var chordPart = (keybinding & 0xFFFF0000) >>> 16;
|
||
|
if (chordPart !== 0) {
|
||
|
return new ChordKeybinding([
|
||
|
createSimpleKeybinding(firstPart, OS),
|
||
|
createSimpleKeybinding(chordPart, OS)
|
||
|
]);
|
||
|
}
|
||
|
return new ChordKeybinding([createSimpleKeybinding(firstPart, OS)]);
|
||
|
}
|
||
|
export function createSimpleKeybinding(keybinding, OS) {
|
||
|
var ctrlCmd = (keybinding & 2048 /* CtrlCmd */ ? true : false);
|
||
|
var winCtrl = (keybinding & 256 /* WinCtrl */ ? true : false);
|
||
|
var ctrlKey = (OS === 2 /* Macintosh */ ? winCtrl : ctrlCmd);
|
||
|
var shiftKey = (keybinding & 1024 /* Shift */ ? true : false);
|
||
|
var altKey = (keybinding & 512 /* Alt */ ? true : false);
|
||
|
var metaKey = (OS === 2 /* Macintosh */ ? ctrlCmd : winCtrl);
|
||
|
var keyCode = (keybinding & 255 /* KeyCode */);
|
||
|
return new SimpleKeybinding(ctrlKey, shiftKey, altKey, metaKey, keyCode);
|
||
|
}
|
||
|
var SimpleKeybinding = /** @class */ (function () {
|
||
|
function SimpleKeybinding(ctrlKey, shiftKey, altKey, metaKey, keyCode) {
|
||
|
this.ctrlKey = ctrlKey;
|
||
|
this.shiftKey = shiftKey;
|
||
|
this.altKey = altKey;
|
||
|
this.metaKey = metaKey;
|
||
|
this.keyCode = keyCode;
|
||
|
}
|
||
|
SimpleKeybinding.prototype.equals = function (other) {
|
||
|
return (this.ctrlKey === other.ctrlKey
|
||
|
&& this.shiftKey === other.shiftKey
|
||
|
&& this.altKey === other.altKey
|
||
|
&& this.metaKey === other.metaKey
|
||
|
&& this.keyCode === other.keyCode);
|
||
|
};
|
||
|
SimpleKeybinding.prototype.isModifierKey = function () {
|
||
|
return (this.keyCode === 0 /* Unknown */
|
||
|
|| this.keyCode === 5 /* Ctrl */
|
||
|
|| this.keyCode === 57 /* Meta */
|
||
|
|| this.keyCode === 6 /* Alt */
|
||
|
|| this.keyCode === 4 /* Shift */);
|
||
|
};
|
||
|
SimpleKeybinding.prototype.toChord = function () {
|
||
|
return new ChordKeybinding([this]);
|
||
|
};
|
||
|
/**
|
||
|
* Does this keybinding refer to the key code of a modifier and it also has the modifier flag?
|
||
|
*/
|
||
|
SimpleKeybinding.prototype.isDuplicateModifierCase = function () {
|
||
|
return ((this.ctrlKey && this.keyCode === 5 /* Ctrl */)
|
||
|
|| (this.shiftKey && this.keyCode === 4 /* Shift */)
|
||
|
|| (this.altKey && this.keyCode === 6 /* Alt */)
|
||
|
|| (this.metaKey && this.keyCode === 57 /* Meta */));
|
||
|
};
|
||
|
return SimpleKeybinding;
|
||
|
}());
|
||
|
export { SimpleKeybinding };
|
||
|
var ChordKeybinding = /** @class */ (function () {
|
||
|
function ChordKeybinding(parts) {
|
||
|
if (parts.length === 0) {
|
||
|
throw illegalArgument("parts");
|
||
|
}
|
||
|
this.parts = parts;
|
||
|
}
|
||
|
ChordKeybinding.prototype.equals = function (other) {
|
||
|
if (other === null) {
|
||
|
return false;
|
||
|
}
|
||
|
if (this.parts.length !== other.parts.length) {
|
||
|
return false;
|
||
|
}
|
||
|
for (var i = 0; i < this.parts.length; i++) {
|
||
|
if (!this.parts[i].equals(other.parts[i])) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
};
|
||
|
return ChordKeybinding;
|
||
|
}());
|
||
|
export { ChordKeybinding };
|
||
|
var ResolvedKeybindingPart = /** @class */ (function () {
|
||
|
function ResolvedKeybindingPart(ctrlKey, shiftKey, altKey, metaKey, kbLabel, kbAriaLabel) {
|
||
|
this.ctrlKey = ctrlKey;
|
||
|
this.shiftKey = shiftKey;
|
||
|
this.altKey = altKey;
|
||
|
this.metaKey = metaKey;
|
||
|
this.keyLabel = kbLabel;
|
||
|
this.keyAriaLabel = kbAriaLabel;
|
||
|
}
|
||
|
return ResolvedKeybindingPart;
|
||
|
}());
|
||
|
export { ResolvedKeybindingPart };
|
||
|
/**
|
||
|
* A resolved keybinding. Can be a simple keybinding or a chord keybinding.
|
||
|
*/
|
||
|
var ResolvedKeybinding = /** @class */ (function () {
|
||
|
function ResolvedKeybinding() {
|
||
|
}
|
||
|
return ResolvedKeybinding;
|
||
|
}());
|
||
|
export { ResolvedKeybinding };
|