diff options
Diffstat (limited to 'mod/graphstats/vendors/simile-timeline/timeline_js/timeline-api.js')
-rw-r--r-- | mod/graphstats/vendors/simile-timeline/timeline_js/timeline-api.js | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/mod/graphstats/vendors/simile-timeline/timeline_js/timeline-api.js b/mod/graphstats/vendors/simile-timeline/timeline_js/timeline-api.js new file mode 100644 index 000000000..f71037094 --- /dev/null +++ b/mod/graphstats/vendors/simile-timeline/timeline_js/timeline-api.js @@ -0,0 +1,277 @@ +/*================================================== + * Timeline API + * + * This file will load all the Javascript files + * necessary to make the standard timeline work. + * It also detects the default locale. + * + * To run from the MIT copy of Timeline: + * Include this file in your HTML file as follows: + * + * <script src="http://static.simile.mit.edu/timeline/api-2.0/timeline-api.js" + * type="text/javascript"></script> + * + * + * To host the Timeline files on your own server: + * 1) Install the Timeline and Simile-Ajax files onto your webserver using + * timeline_libraries.zip or timeline_source.zip + * + * 2) Set global js variables used to send parameters to this script: + * Timeline_ajax_url -- url for simile-ajax-api.js + * Timeline_urlPrefix -- url for the *directory* that contains timeline-api.js + * Include trailing slash + * Timeline_parameters='bundle=true'; // you must set bundle to true if you are using + * // timeline_libraries.zip since only the + * // bundled libraries are included + * + * eg your html page would include + * + * <script> + * Timeline_ajax_url="http://YOUR_SERVER/javascripts/timeline/timeline_ajax/simile-ajax-api.js"; + * Timeline_urlPrefix='http://YOUR_SERVER/javascripts/timeline/timeline_js/'; + * Timeline_parameters='bundle=true'; + * </script> + * <script src="http://YOUR_SERVER/javascripts/timeline/timeline_js/timeline-api.js" + * type="text/javascript"> + * </script> + * + * SCRIPT PARAMETERS + * This script auto-magically figures out locale and has defaults for other parameters + * To set parameters explicity, set js global variable Timeline_parameters or include as + * parameters on the url using GET style. Eg the two next lines pass the same parameters: + * Timeline_parameters='bundle=true'; // pass parameter via js variable + * <script src="http://....timeline-api.js?bundle=true" // pass parameter via url + * + * Parameters + * timeline-use-local-resources -- + * bundle -- true: use the single js bundle file; false: load individual files (for debugging) + * locales -- + * defaultLocale -- + * forceLocale -- force locale to be a particular value--used for debugging. Normally locale is determined + * by browser's and server's locale settings. + *================================================== + */ + +(function() { + var useLocalResources = false; + if (document.location.search.length > 0) { + var params = document.location.search.substr(1).split("&"); + for (var i = 0; i < params.length; i++) { + if (params[i] == "timeline-use-local-resources") { + useLocalResources = true; + } + } + }; + + var loadMe = function() { + if ("Timeline" in window) { + return; + } + + window.Timeline = new Object(); + window.Timeline.DateTime = window.SimileAjax.DateTime; // for backward compatibility + + var bundle = false; + var javascriptFiles = [ + "timeline.js", + "themes.js", + "ethers.js", + "ether-painters.js", + "labellers.js", + "sources.js", + "original-painter.js", + "detailed-painter.js", + "overview-painter.js", + "decorators.js", + "units.js" + ]; + var cssFiles = [ + "timeline.css", + "ethers.css", + "events.css" + ]; + + var localizedJavascriptFiles = [ + "timeline.js", + "labellers.js" + ]; + var localizedCssFiles = [ + ]; + + // ISO-639 language codes, ISO-3166 country codes (2 characters) + var supportedLocales = [ + "cs", // Czech + "de", // German + "en", // English + "es", // Spanish + "fr", // French + "it", // Italian + "nl", // Dutch (The Netherlands) + "ru", // Russian + "se", // Swedish + "tr", // Turkish + "vi", // Vietnamese + "zh" // Chinese + ]; + + try { + var desiredLocales = [ "en" ], + defaultServerLocale = "en", + forceLocale = null; + + var parseURLParameters = function(parameters) { + var params = parameters.split("&"); + for (var p = 0; p < params.length; p++) { + var pair = params[p].split("="); + if (pair[0] == "locales") { + desiredLocales = desiredLocales.concat(pair[1].split(",")); + } else if (pair[0] == "defaultLocale") { + defaultServerLocale = pair[1]; + } else if (pair[0] == "forceLocale") { + forceLocale = pair[1]; + desiredLocales = desiredLocales.concat(pair[1].split(",")); + } else if (pair[0] == "bundle") { + bundle = pair[1] != "false"; + } + } + }; + + (function() { + if (typeof Timeline_urlPrefix == "string") { + Timeline.urlPrefix = Timeline_urlPrefix; + if (typeof Timeline_parameters == "string") { + parseURLParameters(Timeline_parameters); + } + } else { + var heads = document.documentElement.getElementsByTagName("head"); + for (var h = 0; h < heads.length; h++) { + var scripts = heads[h].getElementsByTagName("script"); + for (var s = 0; s < scripts.length; s++) { + var url = scripts[s].src; + var i = url.indexOf("timeline-api.js"); + if (i >= 0) { + Timeline.urlPrefix = url.substr(0, i); + var q = url.indexOf("?"); + if (q > 0) { + parseURLParameters(url.substr(q + 1)); + } + return; + } + } + } + throw new Error("Failed to derive URL prefix for Timeline API code files"); + } + })(); + + var includeJavascriptFiles = function(urlPrefix, filenames) { + SimileAjax.includeJavascriptFiles(document, urlPrefix, filenames); + } + var includeCssFiles = function(urlPrefix, filenames) { + SimileAjax.includeCssFiles(document, urlPrefix, filenames); + } + + /* + * Include non-localized files + */ + if (bundle) { + includeJavascriptFiles(Timeline.urlPrefix, [ "timeline-bundle.js" ]); + includeCssFiles(Timeline.urlPrefix, [ "timeline-bundle.css" ]); + } else { + includeJavascriptFiles(Timeline.urlPrefix + "scripts/", javascriptFiles); + includeCssFiles(Timeline.urlPrefix + "styles/", cssFiles); + } + + /* + * Include localized files + */ + var loadLocale = []; + loadLocale[defaultServerLocale] = true; + + var tryExactLocale = function(locale) { + for (var l = 0; l < supportedLocales.length; l++) { + if (locale == supportedLocales[l]) { + loadLocale[locale] = true; + return true; + } + } + return false; + } + var tryLocale = function(locale) { + if (tryExactLocale(locale)) { + return locale; + } + + var dash = locale.indexOf("-"); + if (dash > 0 && tryExactLocale(locale.substr(0, dash))) { + return locale.substr(0, dash); + } + + return null; + } + + for (var l = 0; l < desiredLocales.length; l++) { + tryLocale(desiredLocales[l]); + } + + var defaultClientLocale = defaultServerLocale; + var defaultClientLocales = ("language" in navigator ? navigator.language : navigator.browserLanguage).split(";"); + for (var l = 0; l < defaultClientLocales.length; l++) { + var locale = tryLocale(defaultClientLocales[l]); + if (locale != null) { + defaultClientLocale = locale; + break; + } + } + + for (var l = 0; l < supportedLocales.length; l++) { + var locale = supportedLocales[l]; + if (loadLocale[locale]) { + includeJavascriptFiles(Timeline.urlPrefix + "scripts/l10n/" + locale + "/", localizedJavascriptFiles); + includeCssFiles(Timeline.urlPrefix + "styles/l10n/" + locale + "/", localizedCssFiles); + } + } + + if (forceLocale == null) { + Timeline.serverLocale = defaultServerLocale; + Timeline.clientLocale = defaultClientLocale; + } else { + Timeline.serverLocale = forceLocale; + Timeline.clientLocale = forceLocale; + } + } catch (e) { + alert(e); + } + }; + + /* + * Load SimileAjax if it's not already loaded + */ + if (typeof SimileAjax == "undefined") { + window.SimileAjax_onLoad = loadMe; + + var url = useLocalResources ? + "http://127.0.0.1:9999/ajax/api/simile-ajax-api.js?bundle=false" : + "http://static.simile.mit.edu/ajax/api-2.0/simile-ajax-api.js"; + if (typeof Timeline_ajax_url == "string") { + url = Timeline_ajax_url; + } + var createScriptElement = function() { + var script = document.createElement("script"); + script.type = "text/javascript"; + script.language = "JavaScript"; + script.src = url; + document.getElementsByTagName("head")[0].appendChild(script); + } + if (document.body == null) { + try { + document.write("<script src='" + url + "' type='text/javascript'></script>"); + } catch (e) { + createScriptElement(); + } + } else { + createScriptElement(); + } + } else { + loadMe(); + } +})(); |