UNPKG

@stand/event

Version:
344 lines (286 loc) 12.2 kB
'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var _Object$defineProperty = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/define-property')); var _Object$defineProperties = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/define-properties')); var _Object$getOwnPropertyDescriptors = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors')); var _Object$getOwnPropertyDescriptor = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor')); var _filterInstanceProperty = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/instance/filter')); var _defineProperty = _interopDefault(require('@babel/runtime-corejs3/helpers/defineProperty')); var _parseInt = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/parse-int')); var _regeneratorRuntime = _interopDefault(require('@babel/runtime-corejs3/regenerator')); var _asyncToGenerator = _interopDefault(require('@babel/runtime-corejs3/helpers/asyncToGenerator')); var _slicedToArray = _interopDefault(require('@babel/runtime-corejs3/helpers/slicedToArray')); var _Array$isArray = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/array/is-array')); var _Object$getOwnPropertySymbols = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols')); var _Object$keys = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/keys')); var _concatInstanceProperty = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/instance/concat')); var _forEachInstanceProperty = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/instance/for-each')); var _classCallCheck = _interopDefault(require('@babel/runtime-corejs3/helpers/classCallCheck')); var _createClass = _interopDefault(require('@babel/runtime-corejs3/helpers/createClass')); var _Symbol = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/symbol')); var StandCallback = _interopDefault(require('@stand/callback')); function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context8; _forEachInstanceProperty(_context8 = ownKeys(source, true)).call(_context8, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context9; _forEachInstanceProperty(_context9 = ownKeys(source)).call(_context9, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; } var executeMethodsSymbol = _Symbol('executeMethods'); var getStandCallbackSymbol = _Symbol('getStandCallback'); var bindSymbol = _Symbol('bindSymbol'); var parseEventSymbol = _Symbol('parseEvent'); var defaultGroupSymbole = _Symbol('defaultGroup'); var isEmpty = function isEmpty(data) { return typeof data === 'undefined' || data === ''; }; var Event = /*#__PURE__*/ function () { function Event() { _classCallCheck(this, Event); this.standCallbacks = {}; } _createClass(Event, [{ key: "getDefaultEventGroup", value: function getDefaultEventGroup() { return defaultGroupSymbole; } }, { key: "configEventGroups", value: function configEventGroups(eventName) { var _context, _context2; var groups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var callback = this[getStandCallbackSymbol](eventName); _forEachInstanceProperty(_context = _concatInstanceProperty(_context2 = _Object$keys(groups)).call(_context2, _Object$getOwnPropertySymbols(groups))).call(_context, function (group) { var item = groups[group]; if (_Array$isArray(item)) { var _item = _slicedToArray(item, 2), order = _item[0], _item$ = _item[1], defaultExtra = _item$ === void 0 ? 1000 : _item$; callback.configGroup(group, order, defaultExtra); } else if (typeof item === 'number') { callback.configGroup(group, item, 1000); } }); return this; } }, { key: "on", value: function on(eventInfo, method) { return this[bindSymbol](eventInfo, method); } }, { key: "once", value: function once(eventInfo, method) { return this[bindSymbol](eventInfo, method, { count: 1 }); } }, { key: "off", value: function off(eventInfo) { var _this$parseEventSymbo = this[parseEventSymbol](eventInfo, false), name = _this$parseEventSymbo.name, group = _this$parseEventSymbo.group, extra = _this$parseEventSymbo.extra, id = _this$parseEventSymbo.id; var callback = this.standCallbacks[name]; if (id) { callback.removeById(id, group); } else if (group) { callback.removeByGroup(group, extra); } else { callback.removeAll(); } return this; } }, { key: "emit", value: function () { var _emit = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee(eventInfo) { var _this$parseEventSymbo2, name, group, extra, id, callback, _context3, items, item, _len, params, _key, _args = arguments; return _regeneratorRuntime.wrap(function _callee$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _this$parseEventSymbo2 = this[parseEventSymbol](eventInfo, false), name = _this$parseEventSymbo2.name, group = _this$parseEventSymbo2.group, extra = _this$parseEventSymbo2.extra, id = _this$parseEventSymbo2.id; callback = this.standCallbacks[name]; if (!callback) { _context4.next = 8; break; } items = []; if (id) { item = callback.getById(id, group); if (item) { items = [item]; } } else if (group) { items = callback.getByGroup(group, extra); } else { items = callback.getAll(); } for (_len = _args.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { params[_key - 1] = _args[_key]; } _context4.next = 8; return this[executeMethodsSymbol].apply(this, _concatInstanceProperty(_context3 = [items]).call(_context3, params)); case 8: return _context4.abrupt("return", this); case 9: case "end": return _context4.stop(); } } }, _callee, this); })); function emit(_x) { return _emit.apply(this, arguments); } return emit; }() }, { key: "parseEventIdentity", value: function parseEventIdentity(identity) { if (typeof identity === 'string') { var reg = /([^./#|]+)?(\/([^./#|]*))?(\.([-\d]*))?(#([^./#|]+))?(\|([-\d]+))?/; var arr = reg.exec(identity); var name = arr[1] || ''; var group = arr[3] || ''; var result = { name: arr[1] || '', group: arr[3], extra: arr[5] ? _parseInt(arr[5], 10) : arr[5], id: arr[7], count: arr[9] ? _parseInt(arr[9], 10) : arr[9], groupSign: arr[2] ? '/' : '', extraSign: arr[4] ? '.' : '', idSign: arr[6] ? '#' : '', countSign: arr[8] ? '|' : '' }; return result; } else { return identity; } } }, { key: parseEventSymbol, value: function value(eventInfo, isBind) { var info = this.parseEventIdentity(eventInfo); if (isEmpty(info.group) && (info.groupSign || isBind)) { info.group = this.getDefaultEventGroup(); } if (isBind && info.group && isEmpty(info.extra)) { var callback = this[getStandCallbackSymbol](info.name); var config = callback.getGroupConfig(info.group); info.extra = config[1]; } if (info.count) { info.count = _parseInt(info.count, 10); } if (info.extra) { info.extra = _parseInt(info.extra, 10); } return info; } }, { key: bindSymbol, value: function value(eventInfo, method) { var other = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var _this$parseEventSymbo3 = this[parseEventSymbol](eventInfo, true), name = _this$parseEventSymbo3.name, group = _this$parseEventSymbo3.group, extra = _this$parseEventSymbo3.extra, id = _this$parseEventSymbo3.id, count = _this$parseEventSymbo3.count; var callback = this[getStandCallbackSymbol](name); var item = _objectSpread({ method: method, group: group, extra: extra, id: id, executed: 0, count: count }, other); callback.add(item); return this; } }, { key: getStandCallbackSymbol, value: function value(eventName) { if (!this.standCallbacks[eventName]) { this.standCallbacks[eventName] = new StandCallback(); } return this.standCallbacks[eventName]; } }, { key: executeMethodsSymbol, value: function () { var _value = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee2() { var items, _context6, item, executed, count, _len2, params, _key2, _item$method, _context5, _args2 = arguments; return _regeneratorRuntime.wrap(function _callee2$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: items = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : []; if (!items.length) { _context7.next = 11; break; } item = items.shift(); executed = item.executed, count = item.count; for (_len2 = _args2.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { params[_key2 - 1] = _args2[_key2]; } if (!(!count || count > executed)) { _context7.next = 9; break; } _context7.next = 8; return (_item$method = item.method).call.apply(_item$method, _concatInstanceProperty(_context5 = [this]).call(_context5, params)); case 8: item.executed += 1; case 9: _context7.next = 11; return this[executeMethodsSymbol].apply(this, _concatInstanceProperty(_context6 = [items]).call(_context6, params)); case 11: return _context7.abrupt("return", this); case 12: case "end": return _context7.stop(); } } }, _callee2, this); })); function value() { return _value.apply(this, arguments); } return value; }() }]); return Event; }(); module.exports = Event;