diff options
author | Brian Picciano <mediocregopher@gmail.com> | 2021-01-21 17:22:53 -0700 |
---|---|---|
committer | Brian Picciano <mediocregopher@gmail.com> | 2021-01-21 17:22:53 -0700 |
commit | bcf9b230be6d74c71567fd0771b31d47d8dd39c7 (patch) | |
tree | 2d0fc16142d55bbd5876ac6b8174c2857883b40e /src/assets/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js | |
parent | d57fd70640948cf20eeb41b56e8d4e23e616cec0 (diff) |
build the blog with nix
Diffstat (limited to 'src/assets/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js')
-rw-r--r-- | src/assets/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/src/assets/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js b/src/assets/trading-in-the-rain/MIDI.js/js/util/dom_request_script.js new file mode 100644 index 0000000..8f1ea5a --- /dev/null +++ b/src/assets/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 |