Mercurial > hg > NetworkVis
diff d3s_examples/python-neo4jrestclient/static/platin/lib/simile/ajax/simile-ajax-api.js @ 8:18ef6948d689
new d3s examples
author | Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de> |
---|---|
date | Thu, 01 Oct 2015 17:17:27 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/d3s_examples/python-neo4jrestclient/static/platin/lib/simile/ajax/simile-ajax-api.js Thu Oct 01 17:17:27 2015 +0200 @@ -0,0 +1,282 @@ +/*================================================== + * Simile Ajax API + *================================================== + */ + +if (typeof SimileAjax == "undefined") { + var isCompiled = ("SimileAjax_isCompiled" in window) && window.SimileAjax_isCompiled; + + var SimileAjax = { + loaded: false, + loadingScriptsCount: 0, + error: null, + params: { bundle:"true" } + }; + + SimileAjax.Platform = new Object(); + /* + HACK: We need these 2 things here because we cannot simply append + a <script> element containing code that accesses SimileAjax.Platform + to initialize it because IE executes that <script> code first + before it loads ajax.js and platform.js. + */ + + var getHead = function(doc) { + return doc.getElementsByTagName("head")[0]; + }; + + SimileAjax.findScript = function(doc, substring) { + var scripts=doc.documentElement.getElementsByTagName("script"); + for (s=0; s<scripts.length;s++) { + var url = scripts[s].src; + var i = url.indexOf(substring); + if (i >= 0) { + return url; + } + } + + var heads = doc.documentElement.getElementsByTagName("head"); + for (var h = 0; h < heads.length; h++) { + var node = heads[h].firstChild; + while (node != null) { + if (node.nodeType == 1 && node.tagName.toLowerCase() == "script") { + var url = node.src; + var i = url.indexOf(substring); + if (i >= 0) { + return url; + } + } + node = node.nextSibling; + } + } + return null; + }; + + SimileAjax.includeJavascriptFile = function(doc, url, onerror, charset, callback) { + onerror = onerror || ""; + if (doc.body == null) { + try { + var q = "'" + onerror.replace( /'/g, '&apos' ) + "'"; // " + doc.write("<script src='" + url + "' onerror="+ q + + (charset ? " charset='"+ charset +"'" : "") + + " type='text/javascript'>"+ onerror + "</script>"); + return; + } catch (e) { + // fall through + } + } + + var calledBack = false; + var callbackOnce = function() { + if (callback && !calledBack) { + calledBack=true; + callback(); + } + } + var script = doc.createElement("script"); + if (onerror) { + try { script.innerHTML = onerror; } catch(e) {}; + script.onerror = function () {onerror(); callbackOnce()}; + } + else { + script.onerror = callbackOnce; + } + if (charset) { + script.setAttribute("charset", charset); + } + script.type = "text/javascript"; + script.language = "JavaScript"; + script.src = url; + if (callback) + script.onload = script.onreadystatechange = function() { + if (!this.readyState || this.readyState == "loaded" || + this.readyState == "complete") + callbackOnce(); + } + return getHead(doc).appendChild(script); + }; + + function includeJavascriptList(doc, urlPrefix, filenames, included, index, callback) { + if (!included[index]) { // avoid duplicate callback + included[index] = true; + if (index<filenames.length) { + var nextCall=function(){ + includeJavascriptList(doc, urlPrefix, filenames, + included, index+1, callback); + } + SimileAjax. + includeJavascriptFile(doc, + urlPrefix + filenames[index], null, null, + nextCall); + } + else if (callback != null) callback(); + } + } + + SimileAjax.includeJavascriptFiles = function(doc, urlPrefix, filenames) { + if (doc.body == null) { + for (var i = 0; i < filenames.length; i++) { + SimileAjax.includeJavascriptFile(doc, urlPrefix + filenames[i]); + } + SimileAjax.loadingScriptsCount += filenames.length; + SimileAjax.includeJavascriptFile(doc, SimileAjax.urlPrefix + "scripts/signal.js?" + filenames.length); + } + else { + var included = new Array(); + for (var i = 0; i < filenames.length; i++) + included[i] = false; + + if (typeof window.SimileAjax_onLoad == "string") + f = eval(window.SimileAjax_onLoad); + else if (typeof window.SimileAjax_onLoad == "function") + f = window.SimileAjax_onLoad; + + window.SimileAjax_onLoad = null; + includeJavascriptList(doc, urlPrefix, filenames, included, 0, f); + } + }; + + SimileAjax.includeCssFile = function(doc, url) { + if (doc.body == null) { + try { + doc.write("<link rel='stylesheet' href='" + url + "' type='text/css'/>"); + return; + } catch (e) { + // fall through + } + } + + var link = doc.createElement("link"); + link.setAttribute("rel", "stylesheet"); + link.setAttribute("type", "text/css"); + link.setAttribute("href", url); + getHead(doc).appendChild(link); + }; + SimileAjax.includeCssFiles = function(doc, urlPrefix, filenames) { + for (var i = 0; i < filenames.length; i++) { + SimileAjax.includeCssFile(doc, urlPrefix + filenames[i]); + } + }; + + /** + * Append into urls each string in suffixes after prefixing it with urlPrefix. + * @param {Array} urls + * @param {String} urlPrefix + * @param {Array} suffixes + */ + SimileAjax.prefixURLs = function(urls, urlPrefix, suffixes) { + for (var i = 0; i < suffixes.length; i++) { + urls.push(urlPrefix + suffixes[i]); + } + }; + + /** + * Parse out the query parameters from a URL + * @param {String} url the url to parse, or location.href if undefined + * @param {Object} to optional object to extend with the parameters + * @param {Object} types optional object mapping keys to value types + * (String, Number, Boolean or Array, String by default) + * @return a key/value Object whose keys are the query parameter names + * @type Object + */ + SimileAjax.parseURLParameters = function(url, to, types) { + to = to || {}; + types = types || {}; + + if (typeof url == "undefined") { + url = location.href; + } + var q = url.indexOf("?"); + if (q < 0) { + return to; + } + url = (url+"#").slice(q+1, url.indexOf("#")); // toss the URL fragment + + var params = url.split("&"), param, parsed = {}; + var decode = window.decodeURIComponent || unescape; + for (var i = 0; param = params[i]; i++) { + var eq = param.indexOf("="); + var name = decode(param.slice(0,eq)); + var old = parsed[name]; + var replacement = decode(param.slice(eq+1)); + + if (typeof old == "undefined") { + old = []; + } else if (!(old instanceof Array)) { + old = [old]; + } + parsed[name] = old.concat(replacement); + } + for (var i in parsed) { + if (!parsed.hasOwnProperty(i)) continue; + var type = types[i] || String; + var data = parsed[i]; + if (!(data instanceof Array)) { + data = [data]; + } + if (type === Boolean && data[0] == "false") { + to[i] = false; // because Boolean("false") === true + } else { + to[i] = type.apply(this, data); + } + } + return to; + }; + + if (!isCompiled) { + (function() { + var javascriptFiles = [ + "platform.js", + "debug.js", + "xmlhttp.js", + "json.js", + "dom.js", + "graphics.js", + "date-time.js", + "string.js", + "html.js", + "data-structure.js", + "units.js", + + "ajax.js", + "history.js", + "window-manager.js", + "remoteLog.js" + ]; + var cssFiles = [ + "graphics.css" + ]; + if (!("jQuery" in window) && !("$" in window)) { +// javascriptFiles.unshift("jquery-1.4.2.min.js"); + SimileAjax.includeJavascriptFile(document, "http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"); + } + + + if (typeof SimileAjax_urlPrefix == "string") { + SimileAjax.urlPrefix = SimileAjax_urlPrefix; + } else { + var url = SimileAjax.findScript(document, "simile-ajax-api.js"); + if (url == null) { + SimileAjax.error = new Error("Failed to derive URL prefix for Simile Ajax API code files"); + return; + } + + SimileAjax.urlPrefix = url.substr(0, url.indexOf("simile-ajax-api.js")); + SimileAjax.parseURLParameters(url, SimileAjax.params, { bundle: Boolean }); + } + + + + if (!isCompiled) { + if (SimileAjax.params.bundle) { + SimileAjax.includeJavascriptFiles(document, SimileAjax.urlPrefix, [ "simile-ajax-bundle.js" ]); + } else { + SimileAjax.includeJavascriptFiles(document, SimileAjax.urlPrefix + "scripts/", javascriptFiles); + } + SimileAjax.includeCssFiles(document, SimileAjax.urlPrefix + "styles/", cssFiles); + } + + SimileAjax.loaded = true; + })(); + } +}