diff --git a/lib/client/dom.js b/lib/client/dom.js index 73b37bed..15a4d2db 100644 --- a/lib/client/dom.js +++ b/lib/client/dom.js @@ -3,7 +3,8 @@ var CloudCommander, Util, DOM, CloudFunc; (function(Util){ 'use strict'; - var DOMConstructor = function(){}, + var DOMProto = {}, + DOMConstructor = function(){}, CURRENT_FILE = 'current-file', SELECTED_FILE = 'selected-file', XMLHTTP, Title, @@ -256,16 +257,205 @@ var CloudCommander, Util, DOM, CloudFunc; return (pElement || document).getElementsByClassName(pClass); }; }, + EventsProto = function(){ + /** + * safe add event listener + * + * @param pType + * @param pListener + * @param pUseCapture + * @param pElement {document by default} + */ + this.addListener = function(pType, pListener, pElement, pUseCapture){ + var lRet = this, + lElement = (pElement || window); + + if( lElement.addEventListener) + lElement.addEventListener( + pType, + pListener, + pUseCapture + ); + + return lRet; + }; + + /** + * safe add event listener + * + * @param pType + * @param pListener + * @param pUseCapture + * @param pElement {document by default} + */ + this.addOneTimeListener = function(pType, pListener, pElement, pUseCapture){ + var lRet = this, + lOneTime = function (pEvent){ + lRet.removeListener(pType, lOneTime, pElement, pUseCapture); + pListener(pEvent); + }; + + this.addListener(pType, lOneTime, pElement, pUseCapture); + + return lRet; + }; + + /** + * safe remove event listener + * + * @param pType + * @param pListener + * @param pUseCapture + * @param pElement {document by default} + */ + this.removeListener = function(pType, pListener, pElement, pUseCapture){ + var lRet = this; + + (pElement || window).removeEventListener( + pType, + pListener, + pUseCapture + ); + + return lRet; + }; + + + /** + * safe add event keydown listener + * + * @param pListener + * @param pUseCapture + */ + this.addKeyListener = function(pListener, pElement, pUseCapture){ + return this.addListener('keydown', pListener, pElement, pUseCapture); + }; + + /** + * safe add event click listener + * + * @param pListener + * @param pUseCapture + */ + this.addClickListener = function(pListener, pElement, pUseCapture){ + return this.addListener('click', pListener, pElement, pUseCapture); + }; + + this.addContextMenuListener = function(pListener, pElement, pUseCapture){ + return this.addListener('contextmenu', pListener, pElement, pUseCapture); + }; + + /** + * safe add event click listener + * + * @param pListener + * @param pUseCapture + */ + this.addErrorListener = function(pListener, pElement, pUseCapture){ + return this.addListener('error', pListener, pElement, pUseCapture); + }; + + /** + * crossbrowser create event + * + * @param pEventName + * @param pKeyCode - not necessarily + */ + this.createEvent = function(pEventName, pKeyCode){ + var lEvent = document.createEvent('Event'); + + lEvent.initEvent(pEventName, true, true); + + if(pKeyCode) + lEvent.keyCode = pKeyCode; + + lEvent.isDefaultPrevented = function(){ + return this.defaultPrevented; + }; + + return lEvent; + }; + + + /** + * create keydown event + * + * @param pKeyCode + */ + this.createKeyEvent = function(pKeyCode){ + return this.createEvent('keydown', pKeyCode); + }; + + /** + * create click event + * + * @param pKeyCode + */ + this.createClickEvent = function(){ + return this.createEvent('click'); + }; + + /** + * create click event + * + * @param pKeyCode + */ + this.createDblClickEvent = function(){ + return this.createEvent('dblclick'); + }; + + /** + * dispatch event + * + * @param pEvent + */ + this.dispatch = function(pEvent, pElement){ + return (pElement || window).dispatchEvent(pEvent); + }; + + /** + * dispatch keydown event + * + * @param pKeyCode + * @param pElement + */ + this.dispatchKeyEvent = function(pKeyCode, pElement){ + var lEvent = this.createKeyEvent(pKeyCode), + lRet = this.dispatch(lEvent, pElement); + + return lRet; + }; + + /** + * dispatch click event + * + * @param pElement + */ + this.dispatchClickEvent = function(pElement){ + var lEvent = this.createClickEvent(), + lRet = this.dispatch(lEvent, pElement); + + return lRet; + }; + + /** + * dispatch dblclick event + * + * @param pElement + */ + this.dispatchDblClickEvent = function(pElement){ + var lEvent = this.createDblClickEvent(), + lRet = this.dispatch(lEvent, pElement); + + return lRet; + }; + }, + RESTfull = function(){}, Images = function(){}, - DOMTreeConstructor = function(){}, - DOMTree, - DOMProto; - - DOMTreeConstructor.prototype= new DOMTreeProto(); - DOMTree = new DOMTreeConstructor(); - - DOMProto = new DOMTreeConstructor(); + DOMTreeConstructor = function(){}; + + Util.extend(DOMProto, [DOMTreeProto, EventsProto]); DOMConstructor.prototype = DOMProto; DOM = new DOMConstructor(); @@ -290,199 +480,6 @@ var CloudCommander, Util, DOM, CloudFunc; } - /** - * safe add event listener - * - * @param pType - * @param pListener - * @param pUseCapture - * @param pElement {document by default} - */ - DOMProto.addListener = function(pType, pListener, pElement, pUseCapture){ - var lRet = this, - lElement = (pElement || window); - - if( lElement.addEventListener) - lElement.addEventListener( - pType, - pListener, - pUseCapture - ); - - return lRet; - }; - - /** - * safe add event listener - * - * @param pType - * @param pListener - * @param pUseCapture - * @param pElement {document by default} - */ - DOMProto.addOneTimeListener = function(pType, pListener, pElement, pUseCapture){ - var lRet = this, - lOneTime = function (pEvent){ - DOMProto.removeListener(pType, lOneTime, pElement, pUseCapture); - pListener(pEvent); - }; - - DOMProto.addListener(pType, lOneTime, pElement, pUseCapture); - - return lRet; - }; - - /** - * safe remove event listener - * - * @param pType - * @param pListener - * @param pUseCapture - * @param pElement {document by default} - */ - DOMProto.removeListener = function(pType, pListener, pElement, pUseCapture){ - var lRet = this; - - (pElement || window).removeEventListener( - pType, - pListener, - pUseCapture - ); - - return lRet; - }; - - - /** - * safe add event keydown listener - * - * @param pListener - * @param pUseCapture - */ - DOMProto.addKeyListener = function(pListener, pElement, pUseCapture){ - return DOMProto.addListener('keydown', pListener, pElement, pUseCapture); - }; - - /** - * safe add event click listener - * - * @param pListener - * @param pUseCapture - */ - DOMProto.addClickListener = function(pListener, pElement, pUseCapture){ - return DOMProto.addListener('click', pListener, pElement, pUseCapture); - }; - - DOMProto.addContextMenuListener = function(pListener, pElement, pUseCapture){ - return DOMProto.addListener('contextmenu', pListener, pElement, pUseCapture); - }; - - /** - * safe add event click listener - * - * @param pListener - * @param pUseCapture - */ - DOMProto.addErrorListener = function(pListener, pElement, pUseCapture){ - return DOMProto.addListener('error', pListener, pElement, pUseCapture); - }; - - /** - * crossbrowser create event - * - * @param pEventName - * @param pKeyCode - not necessarily - */ - DOMProto.createEvent = function(pEventName, pKeyCode){ - var lEvent = document.createEvent('Event'); - - lEvent.initEvent(pEventName, true, true); - - if(pKeyCode) - lEvent.keyCode = pKeyCode; - - lEvent.isDefaultPrevented = function(){ - return this.defaultPrevented; - }; - - return lEvent; - }; - - - /** - * create keydown event - * - * @param pKeyCode - */ - DOMProto.createKeyEvent = function(pKeyCode){ - return DOMProto.createEvent('keydown', pKeyCode); - }; - - /** - * create click event - * - * @param pKeyCode - */ - DOMProto.createClickEvent = function(){ - return DOMProto.createEvent('click'); - }; - - /** - * create click event - * - * @param pKeyCode - */ - DOMProto.createDblClickEvent = function(){ - return DOMProto.createEvent('dblclick'); - }; - - /** - * dispatch event - * - * @param pEvent - */ - DOMProto.dispatch = function(pEvent, pElement){ - return (pElement || window).dispatchEvent(pEvent); - }; - - /** - * dispatch keydown event - * - * @param pKeyCode - * @param pElement - */ - DOMProto.dispatchKeyEvent = function(pKeyCode, pElement){ - var lEvent = DOMProto.createKeyEvent(pKeyCode), - lRet = DOMProto.dispatch(lEvent, pElement); - - return lRet; - }; - - /** - * dispatch click event - * - * @param pElement - */ - DOMProto.dispatchClickEvent = function(pElement){ - var lEvent = DOMProto.createClickEvent(), - lRet = DOMProto.dispatch(lEvent, pElement); - - return lRet; - }; - - /** - * dispatch dblclick event - * - * @param pElement - */ - DOMProto.dispatchDblClickEvent = function(pElement){ - var lEvent = DOMProto.createDblClickEvent(), - lRet = DOMProto.dispatch(lEvent, pElement); - - return lRet; - }; - - /** * load file countent thrue ajax * diff --git a/lib/util.js b/lib/util.js index 66e7a8b5..b0d82633 100644 --- a/lib/util.js +++ b/lib/util.js @@ -168,6 +168,23 @@ Util = exports || {}; return lRet; }; + Util.extend = function(pTarget, PObj){ + var i, n, lObj, lRet = Util.isObject(pTarget) ? pTarget : {}; + + if( Util.isArray(PObj) ) + for(i = 0, n = PObj.length; i < n; i++) + Util.extend(pTarget, PObj[i]); + + else if(PObj){ + lObj = Util.isFunction(PObj) ? new PObj() : PObj; + + for(i in lObj) + lRet[i] = lObj[i]; + } + + return lRet; + }; + /** for function * @param pI * @param pN