From 8241d59da0168081654496d72d195170dcee0ce1 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 28 May 2014 08:28:35 -0400 Subject: [PATCH] feature(events) add --- html/fs/index.html | 1 + lib/client/dom.js | 307 ------------------------------------------ lib/client/events.js | 314 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 315 insertions(+), 307 deletions(-) create mode 100644 lib/client/events.js diff --git a/html/fs/index.html b/html/fs/index.html index befcc36d..6722ee65 100644 --- a/html/fs/index.html +++ b/html/fs/index.html @@ -42,6 +42,7 @@ lib + 'util.js', lib + 'cloudfunc.js', client + 'dom.js', + client + 'events.js', client + 'rest.js', client + 'load.js', client + 'notify.js', diff --git a/lib/client/dom.js b/lib/client/dom.js index 90006226..fbe1d246 100644 --- a/lib/client/dom.js +++ b/lib/client/dom.js @@ -305,311 +305,6 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog; }; }, - EventsProto = function() { - var Events = this, - parseArgs = function(eventName, element, listener, callback) { - var tmp, isFunc, - type = Util.getType(eventName); - - switch(type) { - default: - tmp = eventName; - eventName = element; - element = tmp; - - parseArgs( - eventName, - element, - listener, - callback - ); - break; - - case 'string': - isFunc = Util.isFunction(element); - - if (isFunc) { - listener = element; - element = window; - } - - callback(element || window, - eventName, - listener, - null); - break; - - case 'array': - eventName.forEach(function(eventName) { - parseArgs( - eventName, - element, - listener, - callback - ); - }); - break; - - case 'object': - Object.keys(eventName).forEach(function(name) { - var eventListener = eventName[name]; - - parseArgs( - name, - element, - eventListener, - callback - ); - }); - - break; - } - }; - - /** - * safe add event listener - * - * @param type - * @param element {document by default} - * @param listener - */ - this.add = function(type, element, listener) { - Util.checkArgs(arguments, ['type']); - - parseArgs(type, element, listener, function(element) { - var args = Util.slice(arguments, 1); - - window.addEventListener.apply(element, args); - }); - - return Events; - }; - - /** - * safe add event listener - * - * @param type - * @param listener - * @param element {document by default} - */ - this.addOnce = function(type, element, listener) { - var once = function (event) { - Events.remove(type, element, once); - listener(event); - }; - - this.add(type, element, once); - - return Events; - }; - - /** - * safe remove event listener - * - * @param type - * @param listener - * @param element {document by default} - */ - this.remove = function(type, element, listener) { - Util.checkArgs(arguments, ['type']); - - parseArgs(type, listener, element, function(element) { - var args = Util.slice(arguments, 1); - - window.removeEventListener.apply(element, args); - }); - - return Events; - }; - - /** - * safe add event keydown listener - * - * @param listener - */ - this.addKey = function() { - var name = 'keydown', - argsArr = Util.slice(arguments), - args = [name].concat(argsArr); - - return this.add.apply(this, args); - }; - - /** - * safe remove event click listener - * - * @param listener - */ - this.rmKey = function() { - var name = 'keydown', - argsArr = Util.slice(arguments), - args = [name].concat(argsArr); - - return this.remove.apply(this, args); - }; - - /** - * safe add event click listener - * - * @param listener - */ - this.addClick = function() { - var name = 'click', - argsArr = Util.slice(arguments), - args = [name].concat(argsArr); - - return this.add.apply(this, args); - }; - - /** - * safe remove event click listener - * - * @param listener - */ - this.rmClick = function() { - var name = 'click', - argsArr = Util.slice(arguments), - args = [name].concat(argsArr); - - return this.remove.apply(this, args); - }; - - this.addContextMenu = function() { - var name = 'contextmenu', - argsArr = Util.slice(arguments), - args = [name].concat(argsArr); - - return this.add.apply(this, args); - }; - - /** - * safe add event click listener - * - * @param listener - */ - this.addError = function() { - var name = 'error', - argsArr = Util.slice(arguments), - args = [name].concat(argsArr); - - return this.add.apply(this, args); - }; - - /** - * safe add load click listener - * - * @param listener - */ - this.addLoad = function() { - var name = 'load', - argsArr = Util.slice(arguments), - args = [name].concat(argsArr); - - return this.add.apply(this, args); - }; - - /** - * crossbrowser create event - * - * @param eventName - * @param keyCode - not necessarily - */ - this.create = function(eventName, keyCode) { - var event = document.createEvent('Event'); - - event.initEvent(eventName, true, true); - - if (keyCode) - event.keyCode = keyCode; - - event.isDefaultPrevented = function() { - return this.defaultPrevented; - }; - - return event; - }; - - /** - * create keydown event - * - * @param keyCode - */ - this.createKey = function(keyCode) { - return this.create('keydown', keyCode); - }; - - /** - * create click event - * - * @param pKeyCode - */ - this.createClick = function() { - return this.create('click'); - }; - - /** - * create click event - * - * @param pKeyCode - */ - this.createDblClick = function() { - return this.create('dblclick'); - }; - - /** - * dispatch event - * - * @param pEvent - */ - this.dispatch = function(event, element) { - var isStr = Util.isString(event); - - if (isStr) - event = Events.create(event); - else - event = event; - - return (element || window).dispatchEvent(event); - }; - - /** - * dispatch keydown event - * - * @param pKeyCode - * @param element - */ - this.dispatchKey = function(keyCode, element) { - var event = this.createKey(keyCode), - ret = this.dispatch(event, element); - - return ret; - }; - - /** - * dispatch click event - * - * @param element - */ - this.dispatchClick = function(element) { - var event = this.createClick(), - ret = this.dispatch(event, element); - - return ret; - }; - - /** - * dispatch dblclick event - * - * @param element - */ - this.dispatchDblClick = function(element) { - var event = this.createDblClick(), - ret = this.dispatch(event, element); - - return ret; - }; - }, - CmdProto = function() { var Cmd = this, CurrentInfo = {}, @@ -1925,7 +1620,6 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog; }, DOMTree = Util.extendProto(DOMTreeProto), - Events = Util.extendProto(EventsProto), Images = Util.extendProto(ImagesProto); DOMProto = DOMFunc.prototype = new CmdProto(); @@ -1934,7 +1628,6 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog; Util.extend(DOMProto, [ DOMTree, { - Events : Events, Images : Images, Dialog : Dialog } diff --git a/lib/client/events.js b/lib/client/events.js new file mode 100644 index 00000000..e43edfe2 --- /dev/null +++ b/lib/client/events.js @@ -0,0 +1,314 @@ +var Util, DOM; + +(function(Util, DOM) { + 'use strict'; + + var DOMProto = Object.getPrototypeOf(DOM); + + DOMProto.Events = new EventsProto(); + + function EventsProto() { + var Events = this, + parseArgs = function(eventName, element, listener, callback) { + var tmp, isFunc, + type = Util.getType(eventName); + + switch(type) { + default: + tmp = eventName; + eventName = element; + element = tmp; + + parseArgs( + eventName, + element, + listener, + callback + ); + break; + + case 'string': + isFunc = Util.isFunction(element); + + if (isFunc) { + listener = element; + element = window; + } + + callback(element || window, + eventName, + listener, + null); + break; + + case 'array': + eventName.forEach(function(eventName) { + parseArgs( + eventName, + element, + listener, + callback + ); + }); + break; + + case 'object': + Object.keys(eventName).forEach(function(name) { + var eventListener = eventName[name]; + + parseArgs( + name, + element, + eventListener, + callback + ); + }); + + break; + } + }; + + /** + * safe add event listener + * + * @param type + * @param element {document by default} + * @param listener + */ + this.add = function(type, element, listener) { + Util.checkArgs(arguments, ['type']); + + parseArgs(type, element, listener, function(element) { + var args = Util.slice(arguments, 1); + + window.addEventListener.apply(element, args); + }); + + return Events; + }; + + /** + * safe add event listener + * + * @param type + * @param listener + * @param element {document by default} + */ + this.addOnce = function(type, element, listener) { + var once = function (event) { + Events.remove(type, element, once); + listener(event); + }; + + this.add(type, element, once); + + return Events; + }; + + /** + * safe remove event listener + * + * @param type + * @param listener + * @param element {document by default} + */ + this.remove = function(type, element, listener) { + Util.checkArgs(arguments, ['type']); + + parseArgs(type, listener, element, function(element) { + var args = Util.slice(arguments, 1); + + window.removeEventListener.apply(element, args); + }); + + return Events; + }; + + /** + * safe add event keydown listener + * + * @param listener + */ + this.addKey = function() { + var name = 'keydown', + argsArr = Util.slice(arguments), + args = [name].concat(argsArr); + + return this.add.apply(this, args); + }; + + /** + * safe remove event click listener + * + * @param listener + */ + this.rmKey = function() { + var name = 'keydown', + argsArr = Util.slice(arguments), + args = [name].concat(argsArr); + + return this.remove.apply(this, args); + }; + + /** + * safe add event click listener + * + * @param listener + */ + this.addClick = function() { + var name = 'click', + argsArr = Util.slice(arguments), + args = [name].concat(argsArr); + + return this.add.apply(this, args); + }; + + /** + * safe remove event click listener + * + * @param listener + */ + this.rmClick = function() { + var name = 'click', + argsArr = Util.slice(arguments), + args = [name].concat(argsArr); + + return this.remove.apply(this, args); + }; + + this.addContextMenu = function() { + var name = 'contextmenu', + argsArr = Util.slice(arguments), + args = [name].concat(argsArr); + + return this.add.apply(this, args); + }; + + /** + * safe add event click listener + * + * @param listener + */ + this.addError = function() { + var name = 'error', + argsArr = Util.slice(arguments), + args = [name].concat(argsArr); + + return this.add.apply(this, args); + }; + + /** + * safe add load click listener + * + * @param listener + */ + this.addLoad = function() { + var name = 'load', + argsArr = Util.slice(arguments), + args = [name].concat(argsArr); + + return this.add.apply(this, args); + }; + + /** + * crossbrowser create event + * + * @param eventName + * @param keyCode - not necessarily + */ + this.create = function(eventName, keyCode) { + var event = document.createEvent('Event'); + + event.initEvent(eventName, true, true); + + if (keyCode) + event.keyCode = keyCode; + + event.isDefaultPrevented = function() { + return this.defaultPrevented; + }; + + return event; + }; + + /** + * create keydown event + * + * @param keyCode + */ + this.createKey = function(keyCode) { + return this.create('keydown', keyCode); + }; + + /** + * create click event + * + * @param pKeyCode + */ + this.createClick = function() { + return this.create('click'); + }; + + /** + * create click event + * + * @param pKeyCode + */ + this.createDblClick = function() { + return this.create('dblclick'); + }; + + /** + * dispatch event + * + * @param pEvent + */ + this.dispatch = function(event, element) { + var isStr = Util.isString(event); + + if (isStr) + event = Events.create(event); + else + event = event; + + return (element || window).dispatchEvent(event); + }; + + /** + * dispatch keydown event + * + * @param pKeyCode + * @param element + */ + this.dispatchKey = function(keyCode, element) { + var event = this.createKey(keyCode), + ret = this.dispatch(event, element); + + return ret; + }; + + /** + * dispatch click event + * + * @param element + */ + this.dispatchClick = function(element) { + var event = this.createClick(), + ret = this.dispatch(event, element); + + return ret; + }; + + /** + * dispatch dblclick event + * + * @param element + */ + this.dispatchDblClick = function(element) { + var event = this.createDblClick(), + ret = this.dispatch(event, element); + + return ret; + }; + } +})(Util, DOM);