mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-07-29 02:30:28 +00:00
refactor(loader) anyload
This commit is contained in:
parent
3bf977771c
commit
63a60c55a8
1 changed files with 91 additions and 107 deletions
|
|
@ -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-файл
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue