From 8b14ded04e9e5c9b8a2eff9d0028661870fa537f Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 21 Jan 2013 09:53:00 -0500 Subject: [PATCH] refactored --- lib/client/dom.js | 77 +++++++++++++++++++++++++++++------------------ lib/client/ie.js | 6 ++++ 2 files changed, 54 insertions(+), 29 deletions(-) diff --git a/lib/client/dom.js b/lib/client/dom.js index 2518832f..8f35728e 100644 --- a/lib/client/dom.js +++ b/lib/client/dom.js @@ -102,6 +102,26 @@ var CloudCommander, Util, return lRet; }; + /** + * safe remove event listener + * @param pType + * @param pListener + * @param pUseCapture + * @param pElement {document by default} + */ + DOM.removeListener = function(pType, pListener, pUseCapture, pElement){ + var lRet = this; + + (pElement || window).removeEventListener( + pType, + pListener, + pUseCapture || false + ); + + return lRet; + }; + + /** * safe add event keydown listener * @param pListener @@ -417,8 +437,9 @@ var CloudCommander, Util, lFunc = pParams_o.func, lOnError, lAsync = pParams_o.async, - lParent = pParams_o.parent, + lParent = pParams_o.parent || document.body, lInner = pParams_o.inner, + lStyle = pParams_o.style, lNotAppend = pParams_o.not_append; if ( Util.isObject(lFunc) ){ @@ -429,10 +450,10 @@ var CloudCommander, Util, if(!lID && lSrc) lID = DOM.getIdBySrc(lSrc); - var element = DOM.getById(lID); + var lElement = DOM.getById(lID); /* если скрипт еще не загружен */ - if(!element){ + if(!lElement){ if(!lName && lSrc){ var lDot = lSrc.lastIndexOf('.'), @@ -449,23 +470,23 @@ var CloudCommander, Util, return {code: -1, text: 'name can not be empty'}; } } - element = document.createElement(lName); + lElement = document.createElement(lName); if(lID) - element.id = lID; + lElement.id = lID; if(lClass) - element.className = lClass; + lElement.className = lClass; /* if working with external css * using href in any other case * using src */ if(lName === 'link'){ - element.href = lSrc; - element.rel = 'stylesheet'; + lElement.href = lSrc; + lElement.rel = 'stylesheet'; }else - element.src = lSrc; + lElement.src = lSrc; /* * if passed arguments function @@ -474,16 +495,13 @@ var CloudCommander, Util, * if object - then onload and onerror */ - if( Util.isFunction(lFunc) ) - element.onload = lFunc; - - /* if element (js/css) will not loaded - * it would be removed from DOM tree - * and error image would be shown - */ - element.onerror = (function(){ - (pParams_o.parent || document.body) - .removeChild(element); + var lLoad = function(pEvent){ + DOM.removeListener('load', lLoad, false, lElement); + Util.exec(lFunc, pEvent); + }, + + lError = function(){ + lParent.removeChild(lElement); DOM.Images.showError({ responseText: 'file ' + @@ -493,21 +511,22 @@ var CloudCommander, Util, }); Util.exec(lOnError); - }); + }; - if(pParams_o.style){ - element.style.cssText = pParams_o.style; - } + DOM.addListener('load', lLoad, false, lElement); + DOM.addListener('error', lError, false, lElement); + + if(lStyle) + lElement.style.cssText = lStyle; if(lAsync || lAsync === undefined) - element.async = true; + lElement.async = true; if(!lNotAppend) - (lParent || document.body).appendChild(element); + lParent.appendChild(lElement); - if(lInner){ - element.innerHTML = lInner; - } + if(lInner) + lElement.innerHTML = lInner; } /* если js-файл уже загружен * запускаем функцию onload @@ -515,7 +534,7 @@ var CloudCommander, Util, else Util.exec(lFunc); - return element; + return lElement; }, /** diff --git a/lib/client/ie.js b/lib/client/ie.js index 46454924..6ac58860 100644 --- a/lib/client/ie.js +++ b/lib/client/ie.js @@ -58,6 +58,12 @@ var Util, DOM, $; return lRet; }; + if(document.removeEventListener){ + DOM.removeListener = function(pType, pListener, pCapture, pElement){ + $(pElement || window).unbind(pType, pListener); + }; + } + if(!document.getElementsByClassName){ DOM.getByClass = function(pClass, pElement){ var lClass = '.' + pClass,