refactor(dom) Events

This commit is contained in:
coderaiser 2014-05-28 06:14:13 -04:00
parent e8161e859c
commit 5f3c4a9f22

View file

@ -306,51 +306,48 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
},
EventsProto = function() {
var Events = this,
ADD = true,
REMOVE = false,
process = function(pAdd, type, listener, elementParam, useCapture) {
var i, n,
element = (elementParam || window),
var Events = this,
parseArgs = function(eventName, listener, element, useCapture, callback) {
var type = Util.getType(eventName);
eventProcess = pAdd ?
element.addEventListener :
element.removeEventListener,
ret = type && eventProcess,
event = '';
switch(type) {
case 'string':
callback(element || window,
eventName,
listener,
useCapture);
break;
eventProcess = eventProcess.bind(element);
if (ret) {
if (Util.isString(type))
eventProcess(
type,
case 'array':
eventName.forEach(function(eventName) {
parseArgs(
eventName,
listener,
useCapture
element,
useCapture,
callback
);
else if (Util.isArray(type))
for (i = 0, n = type.length; i < n; i++)
process(
pAdd,
type[i],
listener,
element,
useCapture
);
else if (Util.isObject(type)) {
if (listener)
element = listener;
});
break;
case 'object':
if (listener)
element = listener;
for (event in type)
process(
pAdd,
event,
type[event],
element,
useCapture
);
}
Object.keys(eventName).forEach(function(name) {
var eventListener = eventName[name];
parseArgs(
name,
eventListener,
element,
useCapture,
callback
);
});
break;
}
};
@ -362,14 +359,14 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
* @param useCapture
* @param element {document by default}
*/
this.add = function(type, listener, element, useCapture) {
return process(
ADD,
type,
listener,
element,
useCapture
);
this.add = function(type, listener, useCapture, element) {
parseArgs(type, listener, useCapture, element, function(element) {
var args = Util.slice(arguments, 1);
window.addEventListener.apply(element, args);
});
return Events;
};
/**
@ -381,15 +378,14 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
* @param element {document by default}
*/
this.addOnce = function(type, listener, element, useCapture) {
var ret = this,
lOneTime = function (pEvent) {
ret.remove(type, lOneTime, element, useCapture);
listener(pEvent);
var once = function (event) {
Events.remove(type, once, element, useCapture);
listener(event);
};
this.add(type, lOneTime, element, useCapture);
this.add(type, once, element, useCapture);
return ret;
return Events;
};
/**
@ -400,17 +396,16 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
* @param useCapture
* @param element {document by default}
*/
this.remove = function(type, listener, element, useCapture) {
return process(
REMOVE,
type,
listener,
element,
useCapture
);
this.remove = function(type, listener, useCapture, element) {
parseArgs(type, listener, useCapture, element, function(element) {
var args = Util.slice(arguments, 1);
window.removeEventListener.apply(element, args);
});
return Events;
};
/**
* safe add event keydown listener
*
@ -465,6 +460,16 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
return this.add('error', listener, element, useCapture);
};
/**
* safe add load click listener
*
* @param listener
* @param useCapture
*/
this.addLoad = function(listener, element, useCapture) {
return this.add('load', listener, element, useCapture);
};
/**
* crossbrowser create event
*
@ -486,7 +491,6 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
return event;
};
/**
* create keydown event
*