From 5f3c4a9f225c9ef3cc9298d13e050352117cbb8c Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 28 May 2014 06:14:13 -0400 Subject: [PATCH] refactor(dom) Events --- lib/client/dom.js | 132 ++++++++++++++++++++++++---------------------- 1 file changed, 68 insertions(+), 64 deletions(-) diff --git a/lib/client/dom.js b/lib/client/dom.js index c00c6df4..350d1a7e 100644 --- a/lib/client/dom.js +++ b/lib/client/dom.js @@ -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 *