ming-demo1
Version:
mdf metaui web
155 lines (120 loc) • 4.67 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _pick2 = _interopRequireDefault(require("lodash/pick"));
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
var _forEach2 = _interopRequireDefault(require("lodash/forEach"));
var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
var _indexOf2 = _interopRequireDefault(require("lodash/indexOf"));
var _assign2 = _interopRequireDefault(require("lodash/assign"));
var _isElement2 = _interopRequireDefault(require("lodash/isElement"));
var _addDomEventListener = _interopRequireDefault(require("add-dom-event-listener"));
var _Util = require("./Util");
var TEXT_NODE = 3;
function getEventTarget(nativeEvent) {
var target = nativeEvent.target || nativeEvent.srcElement || window;
if (target.correspondingUseElement) {
target = target.correspondingUseElement;
}
return target.nodeType === TEXT_NODE ? target.parentNode : target;
}
var Shortcut = function () {
function Shortcut(options) {
(0, _classCallCheck2["default"])(this, Shortcut);
(0, _defineProperty2["default"])(this, "_options", {
type: 'keydown',
container: document
});
(0, _defineProperty2["default"])(this, "shortcutCollection", {});
var container = options && options.container;
if ((0, _isElement2["default"])(container)) {
container.tabIndex < 0 && (container.tabIndex = 0);
} else {
container = document;
}
this._init(container, (0, _assign2["default"])({}, this._options, options));
}
(0, _createClass2["default"])(Shortcut, [{
key: "_init",
value: function _init(container, options) {
var that = this;
var func = function func(nativeEvent) {
var target = getEventTarget(nativeEvent);
var activeKeys = (0, _Util.getEventModifiers)(nativeEvent);
var key = (0, _Util.getEventKey)(nativeEvent);
if (key !== '' && (0, _indexOf2["default"])(['Ctrl', 'Shift', 'Alt', 'Meta'], key) < 0) {
activeKeys.push(key);
}
var activeCombination = that._convertKey(activeKeys.join('+'));
var item = that.shortcutCollection[activeCombination];
if (item && item.getEnableState(nativeEvent) && (0, _isFunction2["default"])(item['callback'])) {
(0, _Util.preventDefault)(nativeEvent);
(0, _Util.stopPropagation)(nativeEvent);
item['callback'](nativeEvent);
}
};
that.handler = (0, _addDomEventListener["default"])(container, options.type, func);
}
}, {
key: "_convertKey",
value: function _convertKey(shortCut) {
return shortCut.toLowerCase().split('+').sort().join('+');
}
}, {
key: "_toArray",
value: function _toArray(obj) {
return (0, _isArray2["default"])(obj) ? obj : [obj];
}
}, {
key: "add",
value: function add(obj) {
var that = this;
var combinations = that._toArray(obj);
(0, _forEach2["default"])(combinations, function (item) {
if ((0, _isEmpty2["default"])(item.shortCut)) return;
that.shortcutCollection[that._convertKey(item.shortCut)] = (0, _assign2["default"])({
getEnableState: function getEnableState(nativeEvent) {
var tagName = getEventTarget(nativeEvent).tagName;
return !(tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT');
},
callback: function callback() {}
}, (0, _pick2["default"])(item, ['getEnableState', 'callback']));
});
}
}, {
key: "clear",
value: function clear() {
this.shortcutCollection = {};
}
}, {
key: "remove",
value: function remove(obj) {
var that = this;
var result = that._toArray(obj);
(0, _forEach2["default"])(result, function (item) {
var k = that._convertKey(item);
delete that.shortcutCollection[k];
});
}
}, {
key: "unbind",
value: function unbind() {
this.handler.remove();
}
}, {
key: "destroy",
value: function destroy() {
this.unbind();
}
}]);
return Shortcut;
}();
exports["default"] = Shortcut;
//# sourceMappingURL=Shortcut.js.map
;