improve event_emitter

- add once
- _signal = fast _emit without side effects (preventdefault)
- capturing argument for addListener
This commit is contained in:
nightwing 2013-02-02 18:13:57 +04:00
commit 911cbb3bfb

View file

@ -32,11 +32,13 @@ define(function(require, exports, module) {
"use strict";
var EventEmitter = {};
var stopPropagation = function() { this.propagationStopped = true; };
var preventDefault = function() { this.defaultPrevented = true; };
EventEmitter._emit =
EventEmitter._dispatchEvent = function(eventName, e) {
this._eventRegistry = this._eventRegistry || {};
this._defaultHandlers = this._defaultHandlers || {};
this._eventRegistry || (this._eventRegistry = {});
this._defaultHandlers || (this._defaultHandlers = {});
var listeners = this._eventRegistry[eventName] || [];
var defaultHandler = this._defaultHandlers[eventName];
@ -48,18 +50,12 @@ EventEmitter._dispatchEvent = function(eventName, e) {
if (!e.type)
e.type = eventName;
if (!e.stopPropagation) {
e.stopPropagation = function() {
this.propagationStopped = true;
};
}
if (!e.preventDefault) {
e.preventDefault = function() {
this.defaultPrevented = true;
};
}
if (!e.stopPropagation)
e.stopPropagation = stopPropagation;
if (!e.preventDefault)
e.preventDefault = preventDefault;
if (!e.target)
e.target = this;
for (var i=0; i<listeners.length; i++) {
listeners[i](e);
@ -71,6 +67,26 @@ EventEmitter._dispatchEvent = function(eventName, e) {
return defaultHandler(e);
};
EventEmitter._signal = function(eventName, e) {
var listeners = (this._eventRegistry || {})[eventName];
if (!listeners)
return;
for (var i=0; i<listeners.length; i++)
listeners[i](e);
};
EventEmitter.once = function(eventName, callback) {
var _self = this;
var newCallback = function() {
fun && fun.apply(null, arguments);
_self.removeEventListener(event, newCallback);
};
this.addEventListener(event, newCallback);
};
EventEmitter.setDefaultHandler = function(eventName, callback) {
this._defaultHandlers = this._defaultHandlers || {};
@ -81,7 +97,7 @@ EventEmitter.setDefaultHandler = function(eventName, callback) {
};
EventEmitter.on =
EventEmitter.addEventListener = function(eventName, callback) {
EventEmitter.addEventListener = function(eventName, callback, capturing) {
this._eventRegistry = this._eventRegistry || {};
var listeners = this._eventRegistry[eventName];
@ -89,7 +105,7 @@ EventEmitter.addEventListener = function(eventName, callback) {
listeners = this._eventRegistry[eventName] = [];
if (listeners.indexOf(callback) == -1)
listeners.push(callback);
listeners[capturing ? "unshift" : "push"](callback);
};
EventEmitter.removeListener =