diff --git a/lib/client/loader.js b/lib/client/loader.js index 1e68ac0e..20cd7425 100644 --- a/lib/client/loader.js +++ b/lib/client/loader.js @@ -183,138 +183,122 @@ var Util, DOM; * async, - true by default * inner: 'id{color:red, }, * class, - * not_append - false by default + * notAppend - false by default * } */ - this.anyload = function(pParams_o) { - var i, n, lElements_a; - - if (!pParams_o ) return; - - /* if a couple of params was - * processing every of params - * and quit - */ - if (Util.isArray(pParams_o)) { - lElements_a = []; - for(i = 0, n = pParams_o.length; i < n ; i++) - lElements_a[i] = this.anyload(pParams_o[i]); + this.anyload = function(params) { + var element, ext, onError, type, + p = params, + name = params.name, + func = params.func, + parent = params.parent || document.body, + isObj = Util.isObject(func), - return lElements_a; - } + /* + * if passed arguments function + * then it's onload by default + * + * if object - then onload and onerror + */ + funcLoad = function(event) { + Events.remove('load', funcLoad, element); + Events.remove('error', funcError, element); + + Util.exec(func, event); + }, + + funcError = function() { + var template = 'file {{ src }} could not be loaded', + msg = Util.render(template, { + src: p.src + }); + + parent.removeChild(element); + + Images.showError(msg); + + Util.exec(onError); + }; - var lName = pParams_o.name, - lAttr = pParams_o.attribute, - lID = pParams_o.id, - lClass = pParams_o.className, - lSrc = pParams_o.src, - lFunc = pParams_o.func, - lOnError, - lAsync = pParams_o.async, - lParent = pParams_o.parent || document.body, - lInner = pParams_o.inner, - lStyle = pParams_o.style, - lNotAppend = pParams_o.not_append; - - if (Util.isObject(lFunc)) { - lOnError = lFunc.onerror; - lFunc = lFunc.onload; + if (isObj) { + onError = func.onerror; + func = func.onload; } /* убираем путь к файлу, оставляя только название файла */ - if (!lID && lSrc) - lID = DOM.getIdBySrc(lSrc); + if (!p.id && p.src) + p.id = DOM.getIdBySrc(p.src); - var lElement = DOMTree.getById(lID); + element = DOM.getById(p.id); - /* если скрипт еще не загружен */ - if (!lElement) { - if (!lName && lSrc) { + if (element) { + Util.exec(func); + } else { + if (!name && p.src) { + ext = Util.getExt(p.src); - var lDot = lSrc.lastIndexOf('.'), - lExt = lSrc.substr(lDot); - switch(lExt) { - case '.js': - lName = 'script'; - break; - case '.css': - lName = 'link'; - lParent = document.head; - break; - default: - return {code: -1, text: 'name can not be empty'}; + switch (ext) { + case '.js': + name = 'script'; + break; + case '.css': + name = 'link'; + parent = document.head; + break; } } - lElement = document.createElement(lName); - if (lID) - lElement.id = lID; + element = document.createElement(name); - if (lClass) - lElement.className = lClass; + Events.add('load', funcLoad, element); + Events.addError(funcError, element); - if (lSrc) { + if (p.id) + element.id = p.id; + + if (p.className) + element.className = p.className; + + if (p.src) { /* if work with css use href */ - if (lName === 'link') { - lElement.href = lSrc; - lElement.rel = 'stylesheet'; + if (name === 'link') { + element.href = p.src; + element.rel = 'stylesheet'; } else - lElement.src = lSrc; - - /* - * if passed arguments function - * then it's onload by default - * - * if object - then onload and onerror - */ - var lLoad = function(pEvent) { - Events.remove('load', lLoad, lElement); - Events.remove('error', lError, lElement); - - Util.exec(lFunc, pEvent); - }, - - lError = function() { - lParent.removeChild(lElement); - - Images.showError({ - responseText: 'file ' + - lSrc + - ' could not be loaded', - status : 404 - }); - - Util.exec(lOnError); - }; - - Events.add('load', lLoad, lElement); - Events.addError(lError, lElement); + element.src = p.src; } - if (lAttr) - for(i in lAttr) - lElement.setAttribute(i, lAttr[i]); + if (p.attribute) { + type = Util.getType(p.attribute); + + switch(type) { + case 'string': + element.setAttribute(p.attribute, ''); + break; + + case 'object': + Object.keys(p.attribute).forEach(function(name) { + element.setAttribute(name, p.attribute[name]); + }); + break; + } + } - if (lStyle) - lElement.style.cssText = lStyle; + if (p.style) + element.style.cssText = p.style; - if (lAsync || lAsync === undefined) - lElement.async = true; + if (p.async && name === 'script' || p.async === undefined) + element.async = true; - if (!lNotAppend) - lParent.appendChild(lElement); + if (!p.notAppend) + parent.appendChild(element); - if (lInner) - lElement.innerHTML = lInner; + if (p.inner) + element.innerHTML = p.inner; } - /* если js-файл уже загружен - * запускаем функцию onload - */ - else - Util.exec(lFunc); - return lElement; + return element; }, - + /** * Функция загружает js-файл *