summaryrefslogtreecommitdiff
path: root/src/http/static/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/static/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js')
-rw-r--r--src/http/static/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js225
1 files changed, 225 insertions, 0 deletions
diff --git a/src/http/static/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js b/src/http/static/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js
new file mode 100644
index 0000000..8f1ea5a
--- /dev/null
+++ b/src/http/static/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js
@@ -0,0 +1,225 @@
+/*
+ -----------------------------------------------------------
+ dom.loadScript.js : 0.1.4 : 2014/02/12 : http://mudcu.be
+ -----------------------------------------------------------
+ Copyright 2011-2014 Mudcube. All rights reserved.
+ -----------------------------------------------------------
+ /// No verification
+ dom.loadScript.add("../js/jszip/jszip.js");
+ /// Strict loading order and verification.
+ dom.loadScript.add({
+ strictOrder: true,
+ urls: [
+ {
+ url: "../js/jszip/jszip.js",
+ verify: "JSZip",
+ onsuccess: function() {
+ console.log(1)
+ }
+ },
+ {
+ url: "../inc/downloadify/js/swfobject.js",
+ verify: "swfobject",
+ onsuccess: function() {
+ console.log(2)
+ }
+ }
+ ],
+ onsuccess: function() {
+ console.log(3)
+ }
+ });
+ /// Just verification.
+ dom.loadScript.add({
+ url: "../js/jszip/jszip.js",
+ verify: "JSZip",
+ onsuccess: function() {
+ console.log(1)
+ }
+ });
+*/
+
+if (typeof(dom) === "undefined") var dom = {};
+
+(function() { "use strict";
+
+dom.loadScript = function() {
+ this.loaded = {};
+ this.loading = {};
+ return this;
+};
+
+dom.loadScript.prototype.add = function(config) {
+ var that = this;
+ if (typeof(config) === "string") {
+ config = { url: config };
+ }
+ var urls = config.urls;
+ if (typeof(urls) === "undefined") {
+ urls = [{
+ url: config.url,
+ verify: config.verify
+ }];
+ }
+ /// adding the elements to the head
+ var doc = document.getElementsByTagName("head")[0];
+ ///
+ var testElement = function(element, test) {
+ if (that.loaded[element.url]) return;
+ if (test && globalExists(test) === false) return;
+ that.loaded[element.url] = true;
+ //
+ if (that.loading[element.url]) that.loading[element.url]();
+ delete that.loading[element.url];
+ //
+ if (element.onsuccess) element.onsuccess();
+ if (typeof(getNext) !== "undefined") getNext();
+ };
+ ///
+ var hasError = false;
+ var batchTest = [];
+ var addElement = function(element) {
+ if (typeof(element) === "string") {
+ element = {
+ url: element,
+ verify: config.verify
+ };
+ }
+ if (/([\w\d.\[\]\'\"])$/.test(element.verify)) { // check whether its a variable reference
+ var verify = element.test = element.verify;
+ if (typeof(verify) === "object") {
+ for (var n = 0; n < verify.length; n ++) {
+ batchTest.push(verify[n]);
+ }
+ } else {
+ batchTest.push(verify);
+ }
+ }
+ if (that.loaded[element.url]) return;
+ var script = document.createElement("script");
+ script.onreadystatechange = function() {
+ if (this.readyState !== "loaded" && this.readyState !== "complete") return;
+ testElement(element);
+ };
+ script.onload = function() {
+ testElement(element);
+ };
+ script.onerror = function() {
+ hasError = true;
+ delete that.loading[element.url];
+ if (typeof(element.test) === "object") {
+ for (var key in element.test) {
+ removeTest(element.test[key]);
+ }
+ } else {
+ removeTest(element.test);
+ }
+ };
+ script.setAttribute("type", "text/javascript");
+ script.setAttribute("src", element.url);
+ doc.appendChild(script);
+ that.loading[element.url] = function() {};
+ };
+ /// checking to see whether everything loaded properly
+ var removeTest = function(test) {
+ var ret = [];
+ for (var n = 0; n < batchTest.length; n ++) {
+ if (batchTest[n] === test) continue;
+ ret.push(batchTest[n]);
+ }
+ batchTest = ret;
+ };
+ var onLoad = function(element) {
+ if (element) {
+ testElement(element, element.test);
+ } else {
+ for (var n = 0; n < urls.length; n ++) {
+ testElement(urls[n], urls[n].test);
+ }
+ }
+ var istrue = true;
+ for (var n = 0; n < batchTest.length; n ++) {
+ if (globalExists(batchTest[n]) === false) {
+ istrue = false;
+ }
+ }
+ if (!config.strictOrder && istrue) { // finished loading all the requested scripts
+ if (hasError) {
+ if (config.error) {
+ config.error();
+ }
+ } else if (config.onsuccess) {
+ config.onsuccess();
+ }
+ } 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 (!urls[ID]) { // all elements are loaded
+ if (hasError) {
+ if (config.error) {
+ config.error();
+ }
+ } else if (config.onsuccess) {
+ config.onsuccess();
+ }
+ } else { // loading new script
+ var element = urls[ID];
+ var url = element.url;
+ if (that.loading[url]) { // already loading from another call (attach to event)
+ that.loading[url] = function() {
+ if (element.onsuccess) element.onsuccess();
+ getNext();
+ }
+ } else if (!that.loaded[url]) { // create script element
+ addElement(element);
+ onLoad(element);
+ } else { // it's already been successfully loaded
+ getNext();
+ }
+ }
+ };
+ getNext();
+ } else { // loose ordering
+ for (var ID = 0; ID < urls.length; ID ++) {
+ addElement(urls[ID]);
+ onLoad(urls[ID]);
+ }
+ }
+};
+
+dom.loadScript = new dom.loadScript();
+
+var globalExists = function(path, root) {
+ try {
+ path = path.split('"').join('').split("'").join('').split(']').join('').split('[').join('.');
+ var parts = path.split(".");
+ var length = parts.length;
+ var object = root || window;
+ for (var n = 0; n < length; n ++) {
+ var key = parts[n];
+ if (object[key] == null) {
+ return false;
+ } else { //
+ object = object[key];
+ }
+ }
+ return true;
+ } catch(e) {
+ return false;
+ }
+};
+
+})();
+
+/// For NodeJS
+if (typeof (module) !== "undefined" && module.exports) {
+ module.exports = dom.loadScript;
+} \ No newline at end of file