infamous
Version:
A CSS3D/WebGL UI library.
63 lines (46 loc) • 1.82 kB
JavaScript
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;
;