@stand/event
Version:
344 lines (286 loc) • 12.2 kB
JavaScript
'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;