Skip to content

Instantly share code, notes, and snippets.

@Kingside
Forked from mudge/eventemitter.js
Created June 29, 2019 04:18
Show Gist options
  • Select an option

  • Save Kingside/388135a87a1c0834d5dc76b918fac3b4 to your computer and use it in GitHub Desktop.

Select an option

Save Kingside/388135a87a1c0834d5dc76b918fac3b4 to your computer and use it in GitHub Desktop.

Revisions

  1. @mudge mudge revised this gist Jun 21, 2013. 1 changed file with 32 additions and 15 deletions.
    47 changes: 32 additions & 15 deletions eventemitter.js
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,29 @@
    /* Polyfill indexOf. */
    var indexOf;

    if (typeof Array.prototype.indexOf === 'function') {
    indexOf = function (haystack, needle) {
    return haystack.indexOf(needle);
    };
    } else {
    indexOf = function (haystack, needle) {
    var i = 0, length = haystack.length, idx = -1, found = false;

    while (i < length && !found) {
    if (haystack[i] === needle) {
    idx = i;
    found = true;
    }

    i++;
    }

    return idx;
    };
    };


    /* Polyfill EventEmitter. */
    var EventEmitter = function () {
    this.events = {};
    };
    @@ -11,19 +37,10 @@ EventEmitter.prototype.on = function (event, listener) {
    };

    EventEmitter.prototype.removeListener = function (event, listener) {
    var i, length, idx = -1, found = false;
    var idx;

    if (typeof this.events[event] === 'object') {
    length = this.events[event].length;

    while (i < length && !found) {
    if (this.events[event][i] === listener) {
    idx = i;
    found = true;
    }

    i++;
    }
    idx = indexOf(this.events[event], listener);

    if (idx > -1) {
    this.events[event].splice(idx, 1);
    @@ -32,13 +49,14 @@ EventEmitter.prototype.removeListener = function (event, listener) {
    };

    EventEmitter.prototype.emit = function (event) {
    var i, length, args = [].slice.call(arguments, 1);
    var i, listeners, length, args = [].slice.call(arguments, 1);

    if (typeof this.events[event] === 'object') {
    length = this.events[event].length;
    listeners = this.events[event].slice();
    length = listeners.length;

    for (i = 0; i < length; i++) {
    this.events[event][i].apply(this, args);
    listeners[i].apply(this, args);
    }
    }
    };
    @@ -49,4 +67,3 @@ EventEmitter.prototype.once = function (event, listener) {
    listener.apply(this, arguments);
    });
    };

  2. @mudge mudge created this gist Jun 21, 2013.
    52 changes: 52 additions & 0 deletions eventemitter.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,52 @@
    var EventEmitter = function () {
    this.events = {};
    };

    EventEmitter.prototype.on = function (event, listener) {
    if (typeof this.events[event] !== 'object') {
    this.events[event] = [];
    }

    this.events[event].push(listener);
    };

    EventEmitter.prototype.removeListener = function (event, listener) {
    var i, length, idx = -1, found = false;

    if (typeof this.events[event] === 'object') {
    length = this.events[event].length;

    while (i < length && !found) {
    if (this.events[event][i] === listener) {
    idx = i;
    found = true;
    }

    i++;
    }

    if (idx > -1) {
    this.events[event].splice(idx, 1);
    }
    }
    };

    EventEmitter.prototype.emit = function (event) {
    var i, length, args = [].slice.call(arguments, 1);

    if (typeof this.events[event] === 'object') {
    length = this.events[event].length;

    for (i = 0; i < length; i++) {
    this.events[event][i].apply(this, args);
    }
    }
    };

    EventEmitter.prototype.once = function (event, listener) {
    this.on(event, function g () {
    this.removeListener(event, g);
    listener.apply(this, arguments);
    });
    };