UNPKG

listen-events

Version:

EventBus 是一个简单的 WEB 端事件侦听器,提供了一种将事件分派给订阅的事件侦听器的机制。

24 lines 3.15 kB
"use strict";exports.__esModule=true;exports.EventBus=void 0;var EventBus=(function(){function EventBus(listeners){this._listeners=listeners||{};} EventBus.prototype.emitSync=function(name){var _this=this;var args=[];for(var _i=1;_i<arguments.length;_i++){args[_i-1]=arguments[_i];} name=name.toString();var vals=[];if(this.has(name)){var _e=this.listeners(name);if(_e.length===1){_e.map(function(f){var v=f.apply(f,args);f.once&&_this.offs(name);vals.push(v);});} else{_e=_e.map(function(f){if(f.length===args.length){var v=f.apply(f,args);vals.push(v);if(f.once) return null;} return f;}).filter(function(f){return f!=null;});_e.length>0?(this._listeners[name]=_e):this.offs(name);}} return Promise.all(vals);};EventBus.prototype.emit=function(name){var _this=this;var args=[];for(var _i=1;_i<arguments.length;_i++){args[_i-1]=arguments[_i];} name=name.toString();if(this.has(name)){var _e=this.listeners(name);if(_e.length===1){_e.map(function(f){f.apply(f,args),f.once&&_this.offs(name);});} else{_e=_e.map(function(f){if(f.length===args.length){f.apply(f,args);if(f.once) return null;} return f;}).filter(function(f){return f!=null;});_e.length>0?(this._listeners[name]=_e):this.offs(name);}} return this;};EventBus.prototype.emitAll=function(name){var args=[];for(var _i=1;_i<arguments.length;_i++){args[_i-1]=arguments[_i];} name=name.toString();if(this.has(name)){var _e=this.listeners(name).map(function(f){return f===null||f===void 0?void 0:f.apply(f,args),f;}).filter(function(f){return!f.once;});_e.length>0?(this._listeners[name]=_e):this.offs(name);} return this;};EventBus.prototype.on=function(name,listener){name=name.toString();var i=this._findIndex(name,listener);if(i===-1){if(!this._listeners[name]) this._listeners[name]=[];this._listeners[name].push(listener);} return this;};EventBus.prototype.once=function(name,listener){return listener.once=1,this.on(name,listener);};EventBus.prototype.off=function(name,listener){name=name.toString();var i=this._findIndex(name,listener);if(i>-1){var c=this.count(name);if(c===1){this.offs(name);} else{this._listeners[name].splice(i,1);}} return this;};EventBus.prototype.offs=function(){var _this=this;var names=[];for(var _i=0;_i<arguments.length;_i++){names[_i]=arguments[_i];} names.map(function(name){_this._listeners[name.toString()]&&delete _this._listeners[name.toString()];});return this;};EventBus.prototype.listeners=function(name){var _e=this._listeners[name];return _e?_e:[];};EventBus.prototype.has=function(name){return this.listeners(name).length>0;};EventBus.prototype.count=function(name){return this.listeners(name).length;};EventBus.prototype._findIndex=function(name,listener){if(this.has(name)===false) return-1;if(!listener) return 0;var _e=this.listeners(name);for(var i=0;i<_e.length;i++){var f=_e[i];if(!f) continue;if((f.name===listener.name&&f.length===listener.length)||f.toString()===listener.toString()) return i;} return-1;};EventBus.prototype._reflectApply=function(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};return EventBus;}());exports.EventBus=EventBus;var eventBus=new EventBus();exports["default"]=eventBus;