UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

272 lines (271 loc) 10.2 kB
import { __exports as keyboard } from "../../../../../_virtual/keyboard.mjs"; import "../util/logging.mjs"; import "../util/events.mjs"; import "./util.mjs"; import "./keysym.mjs"; import "../util/browser.mjs"; import { __exports as logging } from "../../../../../_virtual/logging.mjs"; import { __exports as util } from "../../../../../_virtual/util.mjs"; import { __exports as keysym } from "../../../../../_virtual/keysym.mjs"; import { __exports as browser } from "../../../../../_virtual/browser.mjs"; import { __exports as events } from "../../../../../_virtual/events.mjs"; (function(exports) { function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof2(obj2) { return typeof obj2; }; } else { _typeof = function _typeof2(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var Log = _interopRequireWildcard(logging); var _events = events; var KeyboardUtil = _interopRequireWildcard(util); var _keysym = _interopRequireDefault(keysym); var browser$1 = _interopRequireWildcard(browser); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = /* @__PURE__ */ new WeakMap(); var cacheNodeInterop = /* @__PURE__ */ new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache2(nodeInterop2) { return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var Keyboard = /* @__PURE__ */ function() { function Keyboard2(target) { _classCallCheck(this, Keyboard2); this._target = target || null; this._keyDownList = {}; this._altGrArmed = false; this._eventHandlers = { "keyup": this._handleKeyUp.bind(this), "keydown": this._handleKeyDown.bind(this), "blur": this._allKeysUp.bind(this) }; this.onkeyevent = function() { }; } _createClass(Keyboard2, [{ key: "_sendKeyEvent", value: function _sendKeyEvent(keysym2, code, down) { if (down) { this._keyDownList[code] = keysym2; } else { if (!(code in this._keyDownList)) { return; } delete this._keyDownList[code]; } Log.Debug("onkeyevent " + (down ? "down" : "up") + ", keysym: " + keysym2, ", code: " + code); this.onkeyevent(keysym2, code, down); } }, { key: "_getKeyCode", value: function _getKeyCode(e) { var code = KeyboardUtil.getKeycode(e); if (code !== "Unidentified") { return code; } if (e.keyCode) { if (e.keyCode !== 229) { return "Platform" + e.keyCode; } } if (e.keyIdentifier) { if (e.keyIdentifier.substr(0, 2) !== "U+") { return e.keyIdentifier; } var codepoint = parseInt(e.keyIdentifier.substr(2), 16); var _char = String.fromCharCode(codepoint).toUpperCase(); return "Platform" + _char.charCodeAt(); } return "Unidentified"; } }, { key: "_handleKeyDown", value: function _handleKeyDown(e) { var code = this._getKeyCode(e); var keysym2 = KeyboardUtil.getKeysym(e); if (this._altGrArmed) { this._altGrArmed = false; clearTimeout(this._altGrTimeout); if (code === "AltRight" && e.timeStamp - this._altGrCtrlTime < 50) { keysym2 = _keysym["default"].XK_ISO_Level3_Shift; } else { this._sendKeyEvent(_keysym["default"].XK_Control_L, "ControlLeft", true); } } if (code === "Unidentified") { if (keysym2) { this._sendKeyEvent(keysym2, code, true); this._sendKeyEvent(keysym2, code, false); } (0, _events.stopEvent)(e); return; } if (browser$1.isMac() || browser$1.isIOS()) { switch (keysym2) { case _keysym["default"].XK_Super_L: keysym2 = _keysym["default"].XK_Alt_L; break; case _keysym["default"].XK_Super_R: keysym2 = _keysym["default"].XK_Super_L; break; case _keysym["default"].XK_Alt_L: keysym2 = _keysym["default"].XK_Mode_switch; break; case _keysym["default"].XK_Alt_R: keysym2 = _keysym["default"].XK_ISO_Level3_Shift; break; } } if (code in this._keyDownList) { keysym2 = this._keyDownList[code]; } if ((browser$1.isMac() || browser$1.isIOS()) && code === "CapsLock") { this._sendKeyEvent(_keysym["default"].XK_Caps_Lock, "CapsLock", true); this._sendKeyEvent(_keysym["default"].XK_Caps_Lock, "CapsLock", false); (0, _events.stopEvent)(e); return; } var jpBadKeys = [_keysym["default"].XK_Zenkaku_Hankaku, _keysym["default"].XK_Eisu_toggle, _keysym["default"].XK_Katakana, _keysym["default"].XK_Hiragana, _keysym["default"].XK_Romaji]; if (browser$1.isWindows() && jpBadKeys.includes(keysym2)) { this._sendKeyEvent(keysym2, code, true); this._sendKeyEvent(keysym2, code, false); (0, _events.stopEvent)(e); return; } (0, _events.stopEvent)(e); if (code === "ControlLeft" && browser$1.isWindows() && !("ControlLeft" in this._keyDownList)) { this._altGrArmed = true; this._altGrTimeout = setTimeout(this._handleAltGrTimeout.bind(this), 100); this._altGrCtrlTime = e.timeStamp; return; } this._sendKeyEvent(keysym2, code, true); } }, { key: "_handleKeyUp", value: function _handleKeyUp(e) { (0, _events.stopEvent)(e); var code = this._getKeyCode(e); if (this._altGrArmed) { this._altGrArmed = false; clearTimeout(this._altGrTimeout); this._sendKeyEvent(_keysym["default"].XK_Control_L, "ControlLeft", true); } if ((browser$1.isMac() || browser$1.isIOS()) && code === "CapsLock") { this._sendKeyEvent(_keysym["default"].XK_Caps_Lock, "CapsLock", true); this._sendKeyEvent(_keysym["default"].XK_Caps_Lock, "CapsLock", false); return; } this._sendKeyEvent(this._keyDownList[code], code, false); if (browser$1.isWindows() && (code === "ShiftLeft" || code === "ShiftRight")) { if ("ShiftRight" in this._keyDownList) { this._sendKeyEvent(this._keyDownList["ShiftRight"], "ShiftRight", false); } if ("ShiftLeft" in this._keyDownList) { this._sendKeyEvent(this._keyDownList["ShiftLeft"], "ShiftLeft", false); } } } }, { key: "_handleAltGrTimeout", value: function _handleAltGrTimeout() { this._altGrArmed = false; clearTimeout(this._altGrTimeout); this._sendKeyEvent(_keysym["default"].XK_Control_L, "ControlLeft", true); } }, { key: "_allKeysUp", value: function _allKeysUp() { Log.Debug(">> Keyboard.allKeysUp"); for (var code in this._keyDownList) { this._sendKeyEvent(this._keyDownList[code], code, false); } Log.Debug("<< Keyboard.allKeysUp"); } }, { key: "grab", value: function grab() { this._target.addEventListener("keydown", this._eventHandlers.keydown); this._target.addEventListener("keyup", this._eventHandlers.keyup); window.addEventListener("blur", this._eventHandlers.blur); } }, { key: "ungrab", value: function ungrab() { this._target.removeEventListener("keydown", this._eventHandlers.keydown); this._target.removeEventListener("keyup", this._eventHandlers.keyup); window.removeEventListener("blur", this._eventHandlers.blur); this._allKeysUp(); } }]); return Keyboard2; }(); exports["default"] = Keyboard; })(keyboard);