123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import * as browser from './browser.js';
- import { EVENT_KEY_CODE_MAP, KeyCodeUtils } from '../common/keyCodes.js';
- import { SimpleKeybinding } from '../common/keybindings.js';
- import * as platform from '../common/platform.js';
- function extractKeyCode(e) {
- if (e.charCode) {
- // "keypress" events mostly
- let char = String.fromCharCode(e.charCode).toUpperCase();
- return KeyCodeUtils.fromString(char);
- }
- const keyCode = e.keyCode;
- // browser quirks
- if (keyCode === 3) {
- return 7 /* PauseBreak */;
- }
- else if (browser.isFirefox) {
- if (keyCode === 59) {
- return 80 /* Semicolon */;
- }
- else if (keyCode === 107) {
- return 81 /* Equal */;
- }
- else if (keyCode === 109) {
- return 83 /* Minus */;
- }
- else if (platform.isMacintosh && keyCode === 224) {
- return 57 /* Meta */;
- }
- }
- else if (browser.isWebKit) {
- if (keyCode === 91) {
- return 57 /* Meta */;
- }
- else if (platform.isMacintosh && keyCode === 93) {
- // the two meta keys in the Mac have different key codes (91 and 93)
- return 57 /* Meta */;
- }
- else if (!platform.isMacintosh && keyCode === 92) {
- return 57 /* Meta */;
- }
- }
- // cross browser keycodes:
- return EVENT_KEY_CODE_MAP[keyCode] || 0 /* Unknown */;
- }
- const ctrlKeyMod = (platform.isMacintosh ? 256 /* WinCtrl */ : 2048 /* CtrlCmd */);
- const altKeyMod = 512 /* Alt */;
- const shiftKeyMod = 1024 /* Shift */;
- const metaKeyMod = (platform.isMacintosh ? 2048 /* CtrlCmd */ : 256 /* WinCtrl */);
- export class StandardKeyboardEvent {
- constructor(source) {
- this._standardKeyboardEventBrand = true;
- let e = source;
- this.browserEvent = e;
- this.target = e.target;
- this.ctrlKey = e.ctrlKey;
- this.shiftKey = e.shiftKey;
- this.altKey = e.altKey;
- this.metaKey = e.metaKey;
- this.keyCode = extractKeyCode(e);
- this.code = e.code;
- // console.info(e.type + ": keyCode: " + e.keyCode + ", which: " + e.which + ", charCode: " + e.charCode + ", detail: " + e.detail + " ====> " + this.keyCode + ' -- ' + KeyCode[this.keyCode]);
- this.ctrlKey = this.ctrlKey || this.keyCode === 5 /* Ctrl */;
- this.altKey = this.altKey || this.keyCode === 6 /* Alt */;
- this.shiftKey = this.shiftKey || this.keyCode === 4 /* Shift */;
- this.metaKey = this.metaKey || this.keyCode === 57 /* Meta */;
- this._asKeybinding = this._computeKeybinding();
- this._asRuntimeKeybinding = this._computeRuntimeKeybinding();
- // console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);
- }
- preventDefault() {
- if (this.browserEvent && this.browserEvent.preventDefault) {
- this.browserEvent.preventDefault();
- }
- }
- stopPropagation() {
- if (this.browserEvent && this.browserEvent.stopPropagation) {
- this.browserEvent.stopPropagation();
- }
- }
- toKeybinding() {
- return this._asRuntimeKeybinding;
- }
- equals(other) {
- return this._asKeybinding === other;
- }
- _computeKeybinding() {
- let key = 0 /* Unknown */;
- if (this.keyCode !== 5 /* Ctrl */ && this.keyCode !== 4 /* Shift */ && this.keyCode !== 6 /* Alt */ && this.keyCode !== 57 /* Meta */) {
- key = this.keyCode;
- }
- let result = 0;
- if (this.ctrlKey) {
- result |= ctrlKeyMod;
- }
- if (this.altKey) {
- result |= altKeyMod;
- }
- if (this.shiftKey) {
- result |= shiftKeyMod;
- }
- if (this.metaKey) {
- result |= metaKeyMod;
- }
- result |= key;
- return result;
- }
- _computeRuntimeKeybinding() {
- let key = 0 /* Unknown */;
- if (this.keyCode !== 5 /* Ctrl */ && this.keyCode !== 4 /* Shift */ && this.keyCode !== 6 /* Alt */ && this.keyCode !== 57 /* Meta */) {
- key = this.keyCode;
- }
- return new SimpleKeybinding(this.ctrlKey, this.shiftKey, this.altKey, this.metaKey, key);
- }
- }
|