JavaScript 65.5%
Python 17.8%
CSS 13%
HTML 3.7%
1"use strict";23function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }4Object.defineProperty(exports, "__esModule", {5 value: true6});7exports.getKey = getKey;8exports.getKeycode = getKeycode;9exports.getKeysym = getKeysym;10var _keysym = _interopRequireDefault(require("./keysym.js"));11var _keysymdef = _interopRequireDefault(require("./keysymdef.js"));12var _vkeys = _interopRequireDefault(require("./vkeys.js"));13var _fixedkeys = _interopRequireDefault(require("./fixedkeys.js"));14var _domkeytable = _interopRequireDefault(require("./domkeytable.js"));15var browser = _interopRequireWildcard(require("../util/browser.js"));16function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }17function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }18function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }19// Get 'KeyboardEvent.code', handling legacy browsers20function getKeycode(evt) {21 // Are we getting proper key identifiers?22 // (unfortunately Firefox and Chrome are crappy here and gives23 // us an empty string on some platforms, rather than leaving it24 // undefined)25 if (evt.code) {26 // Mozilla isn't fully in sync with the spec yet27 switch (evt.code) {28 case 'OSLeft':29 return 'MetaLeft';30 case 'OSRight':31 return 'MetaRight';32 }33 return evt.code;34 }3536 // The de-facto standard is to use Windows Virtual-Key codes37 // in the 'keyCode' field for non-printable characters38 if (evt.keyCode in _vkeys["default"]) {39 var code = _vkeys["default"][evt.keyCode];4041 // macOS has messed up this code for some reason42 if (browser.isMac() && code === 'ContextMenu') {43 code = 'MetaRight';44 }4546 // The keyCode doesn't distinguish between left and right47 // for the standard modifiers48 if (evt.location === 2) {49 switch (code) {50 case 'ShiftLeft':51 return 'ShiftRight';52 case 'ControlLeft':53 return 'ControlRight';54 case 'AltLeft':55 return 'AltRight';56 }57 }5859 // Nor a bunch of the numpad keys60 if (evt.location === 3) {61 switch (code) {62 case 'Delete':63 return 'NumpadDecimal';64 case 'Insert':65 return 'Numpad0';66 case 'End':67 return 'Numpad1';68 case 'ArrowDown':69 return 'Numpad2';70 case 'PageDown':71 return 'Numpad3';72 case 'ArrowLeft':73 return 'Numpad4';74 case 'ArrowRight':75 return 'Numpad6';76 case 'Home':77 return 'Numpad7';78 case 'ArrowUp':79 return 'Numpad8';80 case 'PageUp':81 return 'Numpad9';82 case 'Enter':83 return 'NumpadEnter';84 }85 }86 return code;87 }88 return 'Unidentified';89}9091// Get 'KeyboardEvent.key', handling legacy browsers92function getKey(evt) {93 // Are we getting a proper key value?94 if (evt.key !== undefined && evt.key !== 'Unidentified') {95 // Mozilla isn't fully in sync with the spec yet96 switch (evt.key) {97 case 'OS':98 return 'Meta';99 case 'LaunchMyComputer':100 return 'LaunchApplication1';101 case 'LaunchCalculator':102 return 'LaunchApplication2';103 }104105 // iOS leaks some OS names106 switch (evt.key) {107 case 'UIKeyInputUpArrow':108 return 'ArrowUp';109 case 'UIKeyInputDownArrow':110 return 'ArrowDown';111 case 'UIKeyInputLeftArrow':112 return 'ArrowLeft';113 case 'UIKeyInputRightArrow':114 return 'ArrowRight';115 case 'UIKeyInputEscape':116 return 'Escape';117 }118119 // Broken behaviour in Chrome120 if (evt.key === '\x00' && evt.code === 'NumpadDecimal') {121 return 'Delete';122 }123 return evt.key;124 }125126 // Try to deduce it based on the physical key127 var code = getKeycode(evt);128 if (code in _fixedkeys["default"]) {129 return _fixedkeys["default"][code];130 }131132 // If that failed, then see if we have a printable character133 if (evt.charCode) {134 return String.fromCharCode(evt.charCode);135 }136137 // At this point we have nothing left to go on138 return 'Unidentified';139}140141// Get the most reliable keysym value we can get from a key event142function getKeysym(evt) {143 var key = getKey(evt);144 if (key === 'Unidentified') {145 return null;146 }147148 // First look up special keys149 if (key in _domkeytable["default"]) {150 var location = evt.location;151152 // Safari screws up location for the right cmd key153 if (key === 'Meta' && location === 0) {154 location = 2;155 }156157 // And for Clear158 if (key === 'Clear' && location === 3) {159 var code = getKeycode(evt);160 if (code === 'NumLock') {161 location = 0;162 }163 }164 if (location === undefined || location > 3) {165 location = 0;166 }167168 // The original Meta key now gets confused with the Windows key169 // https://bugs.chromium.org/p/chromium/issues/detail?id=1020141170 // https://bugzilla.mozilla.org/show_bug.cgi?id=1232918171 if (key === 'Meta') {172 var _code = getKeycode(evt);173 if (_code === 'AltLeft') {174 return _keysym["default"].XK_Meta_L;175 } else if (_code === 'AltRight') {176 return _keysym["default"].XK_Meta_R;177 }178 }179180 // macOS has Clear instead of NumLock, but the remote system is181 // probably not macOS, so lying here is probably best...182 if (key === 'Clear') {183 var _code2 = getKeycode(evt);184 if (_code2 === 'NumLock') {185 return _keysym["default"].XK_Num_Lock;186 }187 }188189 // Windows sends alternating symbols for some keys when using a190 // Japanese layout. We have no way of synchronising with the IM191 // running on the remote system, so we send some combined keysym192 // instead and hope for the best.193 if (browser.isWindows()) {194 switch (key) {195 case 'Zenkaku':196 case 'Hankaku':197 return _keysym["default"].XK_Zenkaku_Hankaku;198 case 'Romaji':199 case 'KanaMode':200 return _keysym["default"].XK_Romaji;201 }202 }203 return _domkeytable["default"][key][location];204 }205206 // Now we need to look at the Unicode symbol instead207208 // Special key? (FIXME: Should have been caught earlier)209 if (key.length !== 1) {210 return null;211 }212 var codepoint = key.charCodeAt();213 if (codepoint) {214 return _keysymdef["default"].lookup(codepoint);215 }216 return null;217}