choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
272 lines (221 loc) • 7.73 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
exports.preventDefault = preventDefault;
exports.stopEvent = stopEvent;
exports.stopPropagation = stopPropagation;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _tslib = require("tslib");
var _mobx = require("mobx");
var _isObject = _interopRequireDefault(require("lodash/isObject"));
var _noop = _interopRequireDefault(require("lodash/noop"));
function on(el, eventName, handle, handles) {
if (el.addEventListener) {
var _handle = (0, _slicedToArray2["default"])(handle, 2),
fn = _handle[0],
options = _handle[1];
el.addEventListener(eventName, fn, options);
} else {
var delegates = [];
handles.forEach(function (_ref) {
var _ref2 = (0, _slicedToArray2["default"])(_ref, 3),
delegateFn = _ref2[2];
if (el.detachEvent) {
el.detachEvent("on".concat(eventName), delegateFn);
delegates.unshift(delegateFn);
}
});
delegates.forEach(function (delegateFn) {
if (el.attachEvent) {
el.attachEvent("on".concat(eventName), delegateFn);
}
});
}
}
function off(el, eventName, handle) {
var _handle2 = (0, _slicedToArray2["default"])(handle, 3),
fn = _handle2[0],
options = _handle2[1],
delegateFn = _handle2[2];
if (el.removeEventListener) {
el.removeEventListener(eventName, fn, options);
} else if (el.detachEvent) {
el.detachEvent("on".concat(eventName), delegateFn);
}
}
function isEventListenerOptions(options) {
return (0, _isObject["default"])(options);
}
function isAddEventListenerOptions(options) {
return isEventListenerOptions(options) && ('once' in options || 'passive' in options);
}
function getCapture(options) {
return isEventListenerOptions(options) ? options.capture || false : options;
}
function isSameHandler(handle, other) {
var _handle3 = (0, _slicedToArray2["default"])(handle, 2),
handleFn = _handle3[0],
handleOption = _handle3[1];
var _other = (0, _slicedToArray2["default"])(other, 2),
otherFn = _other[0],
otherOption = _other[1];
return handleFn === otherFn && getCapture(handleOption) === getCapture(otherOption);
}
function callHandler(events, handle) {
var _handle4 = (0, _slicedToArray2["default"])(handle, 3),
options = _handle4[1],
delegateFn = _handle4[2];
if (isAddEventListenerOptions(options) && options.once) {
var index = events.indexOf(handle);
if (index !== -1) {
events.splice(index, 1);
}
}
for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
rest[_key - 2] = arguments[_key];
}
return delegateFn.apply(void 0, rest);
}
function delegate(fn) {
if ('handleEvent' in fn) {
return function () {
return fn.handleEvent.apply(fn, arguments);
};
}
return function () {
return fn.apply(void 0, arguments);
};
}
var EventManager = /*#__PURE__*/function () {
function EventManager(el) {
(0, _classCallCheck2["default"])(this, EventManager);
this.events = {};
this.setTarget(el);
}
(0, _createClass2["default"])(EventManager, [{
key: "setTarget",
value: function setTarget(el) {
this.el = el;
return this;
}
}, {
key: "addEventListener",
value: function addEventListener(eventName, fn) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
eventName = eventName.toLowerCase();
var events = this.events[eventName] || [];
var index = events.findIndex(function (handle) {
return isSameHandler(handle, [fn, options, _noop["default"]]);
});
if (index === -1) {
var newHandle = [fn, options, delegate(fn)];
if (getCapture(options)) {
var captureIndex = events.findIndex(function (_ref3) {
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
handleOptions = _ref4[1];
return !getCapture(handleOptions);
});
if (captureIndex === -1) {
events.push(newHandle);
} else {
events.splice(captureIndex, 0, newHandle);
}
} else {
events.push(newHandle);
}
this.events[eventName] = events;
var el = this.el;
if (el) {
on(el, eventName, newHandle, events);
}
}
return this;
}
}, {
key: "removeEventListener",
value: function removeEventListener(eventName, fn) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
eventName = eventName.toLowerCase();
var events = this.events[eventName];
if (events) {
var el = this.el;
if (fn) {
var index = events.findIndex(function (handle) {
return isSameHandler(handle, [fn, options, _noop["default"]]);
});
if (index !== -1) {
if (el) {
off(el, eventName, events[index]);
}
events.splice(index, 1);
}
} else {
this.events[eventName] = el ? (this.events[eventName] || []).filter(function (handle) {
off(el, eventName, handle);
return false;
}) : [];
}
}
return this;
}
}, {
key: "fireEventSync",
value: function fireEventSync(eventName) {
for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
rest[_key2 - 1] = arguments[_key2];
}
var events = this.events[eventName.toLowerCase()];
return events ? (0, _toConsumableArray2["default"])(events).every(function (handle) {
return callHandler.apply(void 0, [events, handle].concat(rest)) !== false;
}) : true;
}
}, {
key: "fireEvent",
value: function fireEvent(eventName) {
for (var _len3 = arguments.length, rest = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
rest[_key3 - 1] = arguments[_key3];
}
var events = this.events[eventName.toLowerCase()];
return events ? Promise.all((0, _toConsumableArray2["default"])(events).map(function (handle) {
return callHandler.apply(void 0, [events, handle].concat(rest));
})).then(function (all) {
return all.every(function (result) {
return result !== false;
});
}) : Promise.resolve(true);
}
}, {
key: "clear",
value: function clear() {
var _this = this;
if (this.el) {
Object.keys(this.events).forEach(function (eventName) {
return _this.removeEventListener(eventName);
});
}
this.events = {};
return this;
}
}]);
return EventManager;
}();
exports["default"] = EventManager;
(0, _tslib.__decorate)([_mobx.action], EventManager.prototype, "fireEventSync", null);
(0, _tslib.__decorate)([_mobx.action], EventManager.prototype, "fireEvent", null);
function preventDefault(e) {
e.preventDefault();
}
function stopPropagation(e) {
e.stopPropagation();
}
function stopEvent(e) {
preventDefault(e);
stopPropagation(e);
}
//# sourceMappingURL=index.js.map
;