123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- 'use strict';
- function EventPubSub() {
- this._events_={};
- this.publish=this.trigger=this.emit=emit;
- this.subscribe=this.on=on;
- this.once=once;
- this.unSubscribe=this.off=off;
- this.emit$=emit$;
- function on(type,handler,once){
- if(!handler){
- throw new ReferenceError('handler not defined.');
- }
- if(!this._events_[type]){
- this._events_[type]=[];
- }
- if(once){
- handler._once_ = once;
- }
- this._events_[type].push(handler);
- return this;
- }
- function once(type,handler){
- return this.on(type, handler, true);
- }
- function off(type,handler){
- if(!this._events_[type]){
- return this;
- }
- if(!handler){
- throw new ReferenceError('handler not defined. if you wish to remove all handlers from the event please pass "*" as the handler');
- }
- if(handler=='*'){
- delete this._events_[type];
- return this;
- }
- var handlers=this._events_[type];
- while(handlers.includes(handler)){
- handlers.splice(
- handlers.indexOf(handler),
- 1
- );
- }
- if(handlers.length<1){
- delete this._events_[type];
- }
- return this;
- }
- function emit(type){
- this.emit$.apply(this, arguments);
- if(!this._events_[type]){
- return this;
- }
- arguments.splice=Array.prototype.splice;
- arguments.splice(0,1);
- var handlers=this._events_[type];
- var onceHandled=[];
- for(var i in handlers){
- var handler=handlers[i];
- handler.apply(this, arguments);
- if(handler._once_){
- onceHandled.push(handler);
- }
- }
- for(var i in onceHandled){
- this.off(
- type,
- onceHandled[i]
- );
- }
- return this;
- }
- function emit$(type, args){
- if(!this._events_['*']){
- return this;
- }
- var catchAll=this._events_['*'];
- args.shift=Array.prototype.shift;
- args.shift(type);
- for(var handler of catchAll){
- handler.apply(this, args);
- }
- return this;
- }
- return this;
- }
- if (!Array.prototype.includes) {
- Array.prototype.includes = function(searchElement /*, fromIndex*/) {
- 'use strict';
- if (this == null) {
- throw new TypeError('Array.prototype.includes called on null or undefined');
- }
- var O = Object(this);
- var len = parseInt(O.length, 10) || 0;
- if (len === 0) {
- return false;
- }
- var n = parseInt(arguments[1], 10) || 0;
- var k;
- if (n >= 0) {
- k = n;
- } else {
- k = len + n;
- if (k < 0) {k = 0;}
- }
- var currentElement;
- while (k < len) {
- currentElement = O[k];
- if (searchElement === currentElement ||
- (searchElement !== searchElement && currentElement !== currentElement)) { // NaN !== NaN
- return true;
- }
- k++;
- }
- return false;
- };
- }
- module.exports=EventPubSub;
|