Mercurial > hg > extraction-interface
view geotemco/js/Build/Loader/DynaJsLoader.js @ 0:b12c99b7c3f0
commit for previous development
author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
---|---|
date | Mon, 19 Jan 2015 17:13:49 +0100 |
parents | |
children |
line wrap: on
line source
/* * 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(); } }; };