Sha256: 509b879b077dea1fc182c371c718df4ba84b9d0d6f324847dfb7bb9ad736bf84

Contents?: true

Size: 1.81 KB

Versions: 34

Compression:

Stored size: 1.81 KB

Contents

'use strict';

/* Simplified implementation of DOM2 EventTarget.
 *   http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget
 */

function EventTarget() {
  this._listeners = {};
}

EventTarget.prototype.addEventListener = function(eventType, listener) {
  if (!(eventType in this._listeners)) {
    this._listeners[eventType] = [];
  }
  var arr = this._listeners[eventType];
  // #4
  if (arr.indexOf(listener) === -1) {
    // Make a copy so as not to interfere with a current dispatchEvent.
    arr = arr.concat([listener]);
  }
  this._listeners[eventType] = arr;
};

EventTarget.prototype.removeEventListener = function(eventType, listener) {
  var arr = this._listeners[eventType];
  if (!arr) {
    return;
  }
  var idx = arr.indexOf(listener);
  if (idx !== -1) {
    if (arr.length > 1) {
      // Make a copy so as not to interfere with a current dispatchEvent.
      this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1));
    } else {
      delete this._listeners[eventType];
    }
    return;
  }
};

EventTarget.prototype.dispatchEvent = function() {
  var event = arguments[0];
  var t = event.type;
  // equivalent of Array.prototype.slice.call(arguments, 0);
  var args = arguments.length === 1 ? [event] : Array.apply(null, arguments);
  // TODO: This doesn't match the real behavior; per spec, onfoo get
  // their place in line from the /first/ time they're set from
  // non-null. Although WebKit bumps it to the end every time it's
  // set.
  if (this['on' + t]) {
    this['on' + t].apply(this, args);
  }
  if (t in this._listeners) {
    // Grab a reference to the listeners list. removeEventListener may alter the list.
    var listeners = this._listeners[t];
    for (var i = 0; i < listeners.length; i++) {
      listeners[i].apply(this, args);
    }
  }
};

module.exports = EventTarget;

Version data entries

34 entries across 33 versions & 12 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.18.0 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.18.2 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.16.1 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.15.2 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.18.4 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.18.1 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.14.0 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
tang-0.2.1 spec/tang_app/node_modules/sockjs-client/lib/event/eventtarget.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/sockjs-client/lib/event/eventtarget.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/sockjs-client/lib/event/eventtarget.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/sockjs-client/lib/event/eventtarget.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/sockjs-client/lib/event/eventtarget.js
tang-0.2.0 spec/tang_app/node_modules/sockjs-client/lib/event/eventtarget.js
tang-0.1.0 spec/tang_app/node_modules/sockjs-client/lib/event/eventtarget.js
tang-0.0.9 spec/tang_app/node_modules/sockjs-client/lib/event/eventtarget.js
enju_library-0.3.8 spec/dummy/node_modules/sockjs-client/lib/event/eventtarget.js
ilog-0.4.1 node_modules/sockjs-client/lib/event/eventtarget.js