let there be midi
This commit is contained in:
commit
d338706cec
139 changed files with 12537 additions and 0 deletions
131
js/DOMLoader.script.js
Normal file
131
js/DOMLoader.script.js
Normal file
|
@ -0,0 +1,131 @@
|
|||
/*
|
||||
|
||||
DOMLoader : 0.2 : mudcu.be
|
||||
---------------------------
|
||||
DOMLoader.script.add({
|
||||
strictOrder: true,
|
||||
srcs: [
|
||||
{
|
||||
src: "../js/jszip/jszip.js",
|
||||
verify: "JSZip",
|
||||
callback: function() {
|
||||
console.log(1)
|
||||
}
|
||||
},
|
||||
{
|
||||
src: "../inc/downloadify/js/swfobject.js",
|
||||
verify: "swfobject",
|
||||
callback: function() {
|
||||
console.log(2)
|
||||
}
|
||||
}
|
||||
],
|
||||
callback: function() {
|
||||
console.log(3)
|
||||
}
|
||||
});
|
||||
|
||||
*/
|
||||
|
||||
if (typeof(DOMLoader) === "undefined") DOMLoader = {};
|
||||
|
||||
DOMLoader.script = function() {
|
||||
this.loaded = {};
|
||||
this.loading = {};
|
||||
return this;
|
||||
};
|
||||
|
||||
DOMLoader.script.prototype.add = function(config) {
|
||||
var that = this;
|
||||
var srcs = config.srcs;
|
||||
if (typeof(srcs) === "undefined") {
|
||||
srcs = [{
|
||||
src: config.src,
|
||||
verify: config.verify
|
||||
}];
|
||||
}
|
||||
/// adding the elements to the head
|
||||
var doc = document.getElementsByTagName("head")[0];
|
||||
///
|
||||
var testElement = function(element, test) {
|
||||
if (that.loaded[element.src]) return;
|
||||
if (test && !eval(test)) return;
|
||||
that.loaded[element.src] = true;
|
||||
//
|
||||
if (that.loading[element.src]) that.loading[element.src]();
|
||||
delete that.loading[element.src];
|
||||
//
|
||||
if (element.callback) element.callback();
|
||||
if (typeof(getNext) !== "undefined") getNext();
|
||||
};
|
||||
///
|
||||
var batchTest = [];
|
||||
var addElement = function(element) {
|
||||
if (/([\w\d.\[\]])$/.test(element.verify)) { // check whether its a variable reference
|
||||
element.test = "(typeof(" + element.verify + ") !== \"undefined\")";
|
||||
batchTest.push(element.test);
|
||||
}
|
||||
var script = document.createElement("script");
|
||||
script.onreadystatechange = function() {
|
||||
if (this.readyState !== "loaded" && this.readyState !== "complete") return;
|
||||
testElement(element);
|
||||
};
|
||||
script.onload = function() {
|
||||
testElement(element);
|
||||
};
|
||||
script.setAttribute("type", "text/javascript");
|
||||
script.setAttribute("src", element.src);
|
||||
doc.appendChild(script);
|
||||
that.loading[element.src] = function() {};
|
||||
};
|
||||
/// checking to see whether everything loaded properly
|
||||
var onLoad = function(element) {
|
||||
if (element) {
|
||||
testElement(element, element.test);
|
||||
} else {
|
||||
for (var n = 0; n < srcs.length; n ++) {
|
||||
testElement(srcs[n], srcs[n].test);
|
||||
}
|
||||
}
|
||||
if (!config.strictOrder && eval(batchTest.join(" && "))) { // finished loading all the requested scripts
|
||||
if (config.callback) config.callback();
|
||||
} else { // keep calling back the function
|
||||
setTimeout(function() { //- should get slower over time?
|
||||
onLoad(element);
|
||||
}, 10);
|
||||
}
|
||||
};
|
||||
/// loading methods; strict ordering or loose ordering
|
||||
if (config.strictOrder) {
|
||||
var ID = -1;
|
||||
var getNext = function() {
|
||||
ID ++;
|
||||
if (!srcs[ID]) { // all elements are loaded
|
||||
if (config.callback) config.callback();
|
||||
} else { // loading new script
|
||||
var element = srcs[ID];
|
||||
var src = element.src;
|
||||
if (that.loading[src]) { // already loading from another call (attach to event)
|
||||
that.loading[src] = function() {
|
||||
if (element.callback) element.callback();
|
||||
getNext();
|
||||
}
|
||||
} else if (!that.loaded[src]) { // create script element
|
||||
addElement(element);
|
||||
onLoad(element);
|
||||
} else { // it's already been successfully loaded
|
||||
getNext();
|
||||
}
|
||||
}
|
||||
};
|
||||
getNext();
|
||||
} else { // loose ordering
|
||||
for (var ID = 0; ID < srcs.length; ID ++) {
|
||||
if (that.loaded[srcs[ID].src]) return;
|
||||
addElement(srcs[ID]);
|
||||
}
|
||||
onLoad();
|
||||
}
|
||||
};
|
||||
|
||||
DOMLoader.script = (new DOMLoader.script());
|
Loading…
Add table
Add a link
Reference in a new issue