Advertisement
stuppid_bot

Untitled

Jan 29th, 2016
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function EventEmitter() {
  2.   this._listeners = {};
  3. }
  4.  
  5.  
  6. EventEmitter.prototype = {
  7.   on: function(event, callback, context, once) {
  8.     var index = this._indexOf(event, callback, context);
  9.     if (index != -1) {
  10.       if (arguments.length > 3) {
  11.         this._listeners[event][index].once = once;
  12.       }
  13.       return;
  14.     }
  15.     if (!{}.hasOwnProperty.call(this._listeners, event)) {
  16.       this._listeners[event] = [];
  17.     }
  18.     this._listeners[event].push(
  19.       {callback: callback, context: context, once: once});
  20.   },
  21.  
  22.   once: function(event, callback, context) {
  23.     this.on(event, callback, context, true);
  24.   },
  25.  
  26.   /*
  27.    * off()                            remove all listeners
  28.    * off('foo')                       remove all listeners for event 'foo'
  29.    * off('foo', function[, context])  remove listener for event 'foo' in a
  30.    *                                  certain context
  31.    */
  32.   off: function(event, callback, context) {
  33.     if (!arguments.length) {
  34.       this._listeners = {};
  35.       return;
  36.     }
  37.     if (arguments.length == 1) {
  38.       if ({}.hasOwnProperty.call(this._listeners, event)) {
  39.         delete this._listeners[event];
  40.       }
  41.       return;
  42.     }
  43.     var index = this._indexOf(event, callback, context);
  44.     if (index == -1) {
  45.       return;
  46.     }
  47.     this._listeners[event].splice(index, 1);
  48.     if (!this._listeners[event].length) {
  49.       delete this._listeners[event];
  50.     }
  51.   },
  52.  
  53.   emit: function(event) {
  54.     if (!arguments.length ||
  55.           !{}.hasOwnProperty.call(this._listeners, event)) {
  56.       return;
  57.     }
  58.     var args = [].slice.call(arguments, 1);
  59.     var listeners = this._listeners[event];
  60.     var i = 0;
  61.     while (i < listeners.length) {
  62.       listeners[i].callback.apply(listeners[i].context || this, args);
  63.       if (listeners[i].once) {
  64.         listeners.splice(i, 1);
  65.         continue;
  66.       }
  67.       ++i;
  68.     }
  69.     if (!listeners.length) {
  70.       delete this._listeners[event];
  71.     }
  72.   },
  73.  
  74.   _indexOf: function(event, callback, context) {
  75.     if ({}.hasOwnProperty.call(this._listeners, event)) {
  76.       var listeners = this._listeners[event];
  77.       var i = listeners.length;
  78.       while (i--) {
  79.         if (callback == listeners[i].callback &&
  80.               ((!context && !listeners[i].context)
  81.                 || listeners[i].context === context)) {
  82.           return i;
  83.         }
  84.       }
  85.     }
  86.     return -1;
  87.   },
  88. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement