SPB Git forge

spb/admin-ka

Public
41commits 1branches 0releases
172.9 MBsize
maindefault branch
19 days agolast push
JavaScript 65.5% Python 17.8% CSS 13% HTML 3.7%
7.1 KB · 217 lines javascript
Raw Blame History
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}