UNPKG

skylark-utils

Version:

An Elegant HTML5 JavaScript Library.

89 lines (74 loc) 2.7 kB
define([ "./skylark", "./langx", "./noder", "./finder" ], function(skylark, langx, noder, finder) { var head = document.getElementsByTagName('head')[0], scriptsByUrl = {}, scriptElementsById = {}, count = 0; function scripter() { return scripter; } langx.mixin(scripter, { loadJavaScript: function(url, loadedCallback, errorCallback) { var script = scriptsByUrl[url]; if (!script) { script = scriptsByUrl[url] = { state: 0, //0:unload,1:loaded,-1:loaderror loadedCallbacks: [], errorCallbacks: [] } } script.loadedCallbacks.push(loadedCallback); script.errorCallbacks.push(errorCallback); if (script.state === 1) { script.node.onload(); } else if (script.state === -1) { script.node.onerror(); } else { var node = script.node = document.createElement("script"), id = script.id = (count++); node.type = "text/javascript"; node.async = false; node.defer = false; startTime = new Date().getTime(); head.appendChild(node); node.onload = function() { script.state = 1; var callbacks = script.loadedCallbacks, i = callbacks.length; while (i--) { callbacks[i](); } script.loadedCallbacks = []; script.errorCallbacks = []; }, node.onerror = function() { script.state = -1; var callbacks = script.errorCallbacks, i = callbacks.length; while (i--) { callbacks[i](); } script.loadedCallbacks = []; script.errorCallbacks = []; }; node.src = url; scriptElementsById[id] = node; } return script.id; }, deleteJavaScript: function(id) { var node = scriptElementsById[id]; if (node) { var url = node.src; noder.remove(node); delete scriptElementsById[id]; delete scriptsByUrl[url]; } } }); return skylark.scripter = scripter; });