refactor(loader) anyload

This commit is contained in:
coderaiser 2014-05-27 10:32:03 -04:00
parent 3bf977771c
commit 63a60c55a8

View file

@ -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-файл
*