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);