Mercurial > hg > mpiwg_geobrowser
diff lib/GeoTemCo/js/Build/Loader/DynaJsLoader.js @ 0:b57c7821382f
initial
author | Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de> |
---|---|
date | Thu, 28 May 2015 10:28:12 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/GeoTemCo/js/Build/Loader/DynaJsLoader.js Thu May 28 10:28:12 2015 +0200 @@ -0,0 +1,105 @@ +/* +* DynaJsLoader.js +* +* Copyright (c) 2012, Stefan Jänicke. All rights reserved. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 3 of the License, or (at your option) any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +* MA 02110-1301 USA +*/ + +/** + * Dynamic Script Loader for GeoTemCo + * @author Stefan Jänicke (stjaenicke@informatik.uni-leipzig.de) + * @release 1.0 + * @release date: 2012-07-27 + * @version date: 2012-07-27 + */ +function DynaJsLoader() { + + this.checkInterval = 20; + this.loadAttempts = 2000; + + this.loadScripts = function(scripts, callback) { + + if (scripts.length > 0) { + this.scriptStack = scripts; + this.scriptIndex = 0; + this.loadScript(callback); + } + + }; + + this.loadScript = function(callback) { + + var loader = this; + if (this.scriptIndex < this.scriptStack.length) { + + var scriptEmbedded = false, scriptLoaded = false, iter = 0; + var scriptData = this.scriptStack[this.scriptIndex]; + this.scriptIndex++; + var testFunction = scriptData.test; + var test = function() { + scriptEmbedded = true; + if (!testFunction || typeof (eval(testFunction)) === 'function') { + scriptLoaded = true; + } else { + setTimeout(function() { + test(); + }), loader.checkInterval + } + } + var head = document.getElementsByTagName('head')[0]; + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = scriptData.url; + + script.onload = test; + script.onreadystatechange = function() { + if (this.readyState == 'complete') { + test(); + } + } + + head.appendChild(script); + + var checkStatus = function() { + if (scriptEmbedded && scriptLoaded) { + loader.loadScript(callback); + if ( typeof console != 'undefined') { + console.log(scriptData.url + " loaded in " + (iter * loader.checkInterval) + " ms"); + } + } else { + iter++; + if (iter > loader.loadAttempts) { + if ( typeof console != 'undefined') { + console.log("MapTimeView not loaded: Not able to load " + scriptData.url + "!"); + Publisher.Publish('StifReady', null); + } + return; + } + setTimeout(function() { + checkStatus(); + }), loader.checkInterval + } + } + checkStatus(); + + } else if (callback) { + callback(); + } + + }; + +};