mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
170 lines
4.7 KiB
JavaScript
170 lines
4.7 KiB
JavaScript
(function(window) {
|
|
'use strict';
|
|
|
|
window.load = new LoadProto();
|
|
|
|
function LoadProto() {
|
|
function load(src, callback) {
|
|
var ext = getExt(src);
|
|
|
|
switch (ext) {
|
|
case '.js':
|
|
load.js(src, callback);
|
|
break;
|
|
|
|
case '.css':
|
|
load.css(src, callback);
|
|
break;
|
|
|
|
case '.json':
|
|
load.json(src, callback);
|
|
break;
|
|
|
|
default:
|
|
load.ajax(src, callback);
|
|
}
|
|
}
|
|
|
|
load.js = function(src, callback) {
|
|
var id = getIdBySrc(src),
|
|
el = document.getElementById(id);
|
|
|
|
if (el) {
|
|
callback();
|
|
} else {
|
|
el = document.createElement('script');
|
|
el.id = id;
|
|
el.src = src;
|
|
|
|
el.addEventListener('load', function(event) {
|
|
callback(null, event);
|
|
});
|
|
|
|
el.addEventListener('error', callback);
|
|
|
|
document.body.appendChild(el);
|
|
}
|
|
|
|
return el;
|
|
};
|
|
|
|
load.css = function(src, callback) {
|
|
var id = getIdBySrc(src),
|
|
el = document.getElementById(id);
|
|
|
|
if (el) {
|
|
callback();
|
|
} else {
|
|
el = document.createElement('link');
|
|
el.id = getIdBySrc(src);
|
|
el.rel = 'stylesheet';
|
|
el.href = src;
|
|
|
|
el.addEventListener('load', function(event) {
|
|
callback(null, event);
|
|
});
|
|
|
|
el.addEventListener('error', callback);
|
|
|
|
document.head.appendChild(el);
|
|
}
|
|
|
|
return el;
|
|
};
|
|
|
|
load.ajax = function(url, callback) {
|
|
var request = new XMLHttpRequest();
|
|
|
|
request.open('GET', url, true);
|
|
|
|
request.addEventListener('load', function() {
|
|
var data;
|
|
|
|
if (request.status >= 200 && request.status < 400){
|
|
data = request.responseText;
|
|
callback(null, data);
|
|
}
|
|
});
|
|
|
|
request.addEventListener('error', callback);
|
|
|
|
request.send();
|
|
};
|
|
|
|
load.json = function(url ,callback) {
|
|
load.ajax(url, function(error, data) {
|
|
var json;
|
|
|
|
if (!error)
|
|
json = JSON.parse(data);
|
|
|
|
callback(error, json);
|
|
});
|
|
};
|
|
|
|
load.series = function(urls, callback) {
|
|
var url = urls.shift();
|
|
|
|
if (!url)
|
|
callback();
|
|
else
|
|
load(url, function(error) {
|
|
if (error)
|
|
callback(error);
|
|
else
|
|
load.series(urls, callback);
|
|
});
|
|
};
|
|
|
|
load.parallel = function(urls, callback) {
|
|
var i = urls.length,
|
|
done,
|
|
func = function(error) {
|
|
--i;
|
|
|
|
if (!i && !done || error) {
|
|
done = true;
|
|
callback(error);
|
|
}
|
|
};
|
|
|
|
urls.forEach(function(url) {
|
|
load(url, func);
|
|
});
|
|
};
|
|
|
|
function getExt(name) {
|
|
var ret = '',
|
|
dot,
|
|
isStr = typeof name === 'string';
|
|
|
|
if (isStr) {
|
|
dot = name.lastIndexOf('.');
|
|
|
|
if (~dot)
|
|
ret = name.substr(dot);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
function getIdBySrc(src) {
|
|
var num, sub, id,
|
|
isStr = typeof src === 'string';
|
|
|
|
if (isStr) {
|
|
if (~src.indexOf(':'))
|
|
src += '-join';
|
|
|
|
num = src.lastIndexOf('/') + 1;
|
|
sub = src.substr(src, num);
|
|
id = src.replace(sub, '')
|
|
.replace(/\./g, '-');
|
|
}
|
|
|
|
return id;
|
|
}
|
|
|
|
return load;
|
|
}
|
|
})(window);
|