@21epub/epub-thirdparty
Version:
epub-thirdparty
166 lines (165 loc) • 7.21 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { KeyCodeUtils, IMMUTABLE_CODE_TO_KEY_CODE } from '../../../base/common/keyCodes.js';
import { ChordKeybinding, SimpleKeybinding } from '../../../base/common/keybindings.js';
import { BaseResolvedKeybinding } from './baseResolvedKeybinding.js';
import { removeElementsAfterNulls } from './resolvedKeybindingItem.js';
/**
* Do not instantiate. Use KeybindingService to get a ResolvedKeybinding seeded with information about the current kb layout.
*/
export class USLayoutResolvedKeybinding extends BaseResolvedKeybinding {
constructor(actual, os) {
super(os, actual.parts);
}
_keyCodeToUILabel(keyCode) {
if (this._os === 2 /* Macintosh */) {
switch (keyCode) {
case 15 /* LeftArrow */:
return '←';
case 16 /* UpArrow */:
return '↑';
case 17 /* RightArrow */:
return '→';
case 18 /* DownArrow */:
return '↓';
}
}
return KeyCodeUtils.toString(keyCode);
}
_getLabel(keybinding) {
if (keybinding.isDuplicateModifierCase()) {
return '';
}
return this._keyCodeToUILabel(keybinding.keyCode);
}
_getAriaLabel(keybinding) {
if (keybinding.isDuplicateModifierCase()) {
return '';
}
return KeyCodeUtils.toString(keybinding.keyCode);
}
_getElectronAccelerator(keybinding) {
return KeyCodeUtils.toElectronAccelerator(keybinding.keyCode);
}
_getDispatchPart(keybinding) {
return USLayoutResolvedKeybinding.getDispatchStr(keybinding);
}
static getDispatchStr(keybinding) {
if (keybinding.isModifierKey()) {
return null;
}
let result = '';
if (keybinding.ctrlKey) {
result += 'ctrl+';
}
if (keybinding.shiftKey) {
result += 'shift+';
}
if (keybinding.altKey) {
result += 'alt+';
}
if (keybinding.metaKey) {
result += 'meta+';
}
result += KeyCodeUtils.toString(keybinding.keyCode);
return result;
}
_getSingleModifierDispatchPart(keybinding) {
if (keybinding.keyCode === 5 /* Ctrl */ && !keybinding.shiftKey && !keybinding.altKey && !keybinding.metaKey) {
return 'ctrl';
}
if (keybinding.keyCode === 4 /* Shift */ && !keybinding.ctrlKey && !keybinding.altKey && !keybinding.metaKey) {
return 'shift';
}
if (keybinding.keyCode === 6 /* Alt */ && !keybinding.ctrlKey && !keybinding.shiftKey && !keybinding.metaKey) {
return 'alt';
}
if (keybinding.keyCode === 57 /* Meta */ && !keybinding.ctrlKey && !keybinding.shiftKey && !keybinding.altKey) {
return 'meta';
}
return null;
}
/**
* *NOTE*: Check return value for `KeyCode.Unknown`.
*/
static _scanCodeToKeyCode(scanCode) {
const immutableKeyCode = IMMUTABLE_CODE_TO_KEY_CODE[scanCode];
if (immutableKeyCode !== -1 /* DependsOnKbLayout */) {
return immutableKeyCode;
}
switch (scanCode) {
case 10 /* KeyA */: return 31 /* KeyA */;
case 11 /* KeyB */: return 32 /* KeyB */;
case 12 /* KeyC */: return 33 /* KeyC */;
case 13 /* KeyD */: return 34 /* KeyD */;
case 14 /* KeyE */: return 35 /* KeyE */;
case 15 /* KeyF */: return 36 /* KeyF */;
case 16 /* KeyG */: return 37 /* KeyG */;
case 17 /* KeyH */: return 38 /* KeyH */;
case 18 /* KeyI */: return 39 /* KeyI */;
case 19 /* KeyJ */: return 40 /* KeyJ */;
case 20 /* KeyK */: return 41 /* KeyK */;
case 21 /* KeyL */: return 42 /* KeyL */;
case 22 /* KeyM */: return 43 /* KeyM */;
case 23 /* KeyN */: return 44 /* KeyN */;
case 24 /* KeyO */: return 45 /* KeyO */;
case 25 /* KeyP */: return 46 /* KeyP */;
case 26 /* KeyQ */: return 47 /* KeyQ */;
case 27 /* KeyR */: return 48 /* KeyR */;
case 28 /* KeyS */: return 49 /* KeyS */;
case 29 /* KeyT */: return 50 /* KeyT */;
case 30 /* KeyU */: return 51 /* KeyU */;
case 31 /* KeyV */: return 52 /* KeyV */;
case 32 /* KeyW */: return 53 /* KeyW */;
case 33 /* KeyX */: return 54 /* KeyX */;
case 34 /* KeyY */: return 55 /* KeyY */;
case 35 /* KeyZ */: return 56 /* KeyZ */;
case 36 /* Digit1 */: return 22 /* Digit1 */;
case 37 /* Digit2 */: return 23 /* Digit2 */;
case 38 /* Digit3 */: return 24 /* Digit3 */;
case 39 /* Digit4 */: return 25 /* Digit4 */;
case 40 /* Digit5 */: return 26 /* Digit5 */;
case 41 /* Digit6 */: return 27 /* Digit6 */;
case 42 /* Digit7 */: return 28 /* Digit7 */;
case 43 /* Digit8 */: return 29 /* Digit8 */;
case 44 /* Digit9 */: return 30 /* Digit9 */;
case 45 /* Digit0 */: return 21 /* Digit0 */;
case 51 /* Minus */: return 83 /* Minus */;
case 52 /* Equal */: return 81 /* Equal */;
case 53 /* BracketLeft */: return 87 /* BracketLeft */;
case 54 /* BracketRight */: return 89 /* BracketRight */;
case 55 /* Backslash */: return 88 /* Backslash */;
case 56 /* IntlHash */: return 0 /* Unknown */; // missing
case 57 /* Semicolon */: return 80 /* Semicolon */;
case 58 /* Quote */: return 90 /* Quote */;
case 59 /* Backquote */: return 86 /* Backquote */;
case 60 /* Comma */: return 82 /* Comma */;
case 61 /* Period */: return 84 /* Period */;
case 62 /* Slash */: return 85 /* Slash */;
case 106 /* IntlBackslash */: return 92 /* IntlBackslash */;
}
return 0 /* Unknown */;
}
static _resolveSimpleUserBinding(binding) {
if (!binding) {
return null;
}
if (binding instanceof SimpleKeybinding) {
return binding;
}
const keyCode = this._scanCodeToKeyCode(binding.scanCode);
if (keyCode === 0 /* Unknown */) {
return null;
}
return new SimpleKeybinding(binding.ctrlKey, binding.shiftKey, binding.altKey, binding.metaKey, keyCode);
}
static resolveUserBinding(input, os) {
const parts = removeElementsAfterNulls(input.map(keybinding => this._resolveSimpleUserBinding(keybinding)));
if (parts.length > 0) {
return [new USLayoutResolvedKeybinding(new ChordKeybinding(parts), os)];
}
return [];
}
}