| 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;
 
 
  |