UNPKG

infamous

Version:

A CSS3D/WebGL UI library.

63 lines (46 loc) 1.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _Mixin = _interopRequireDefault(require("./Mixin")); var _lowclass = _interopRequireDefault(require("lowclass")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _default = (0, _Mixin.default)(Base => (0, _lowclass.default)('Observable').extends(Base, ({ Super }) => ({ on(eventName, callback, context) { if (!this._eventMap) this._eventMap = new Map(); let callbacks = this._eventMap.get(eventName); if (!callbacks) this._eventMap.set(eventName, callbacks = []); if (typeof callback == 'function') callbacks.push([callback, context]); // save callback associated with context else throw new Error('Expected a function in callback argument of Observable#on.'); }, off(eventName, callback) { if (!this._eventMap || !this._eventMap.has(eventName)) return; const callbacks = this._eventMap.get(eventName); const index = callbacks.findIndex(tuple => tuple[0] === callback); if (index == -1) return; callbacks.splice(index, 1); if (callbacks.length === 0) this._eventMap.delete(eventName); if (this._eventMap.size === 0) this._eventMap = null; }, trigger(eventName, data) { if (!this._eventMap || !this._eventMap.has(eventName)) return; const callbacks = this._eventMap.get(eventName); let tuple = undefined; let callback = undefined; let context = undefined; for (let i = 0, len = callbacks.length; i < len; i += 1) { tuple = callbacks[i]; callback = tuple[0]; context = tuple[1]; callback.call(context, data); } }, // alias for trigger triggerEvent(...args) { return this.trigger(...args); } }))); exports.default = _default;