Difference between revisions of "Template:Harvard BioDesign/JS"

Line 1: Line 1:
            $(".timeline-item").hover(function () {
+
var Timeline = new Object();
                 $(".timeline-item").removeClass("active");
+
Timeline.Platform = new Object();
                 $(this).toggleClass("active");
+
 
                 $(this).prev(".timeline-item").toggleClass("close");
+
(function() {
                 $(this).next(".timeline-item").toggleClass("close");
+
    var bundle = true;
             });
+
    var javascriptFiles = [
 +
        "timeline.js",
 +
 
 +
        "util/platform.js",
 +
        "util/debug.js",
 +
        "util/xmlhttp.js",
 +
        "util/dom.js",
 +
        "util/graphics.js",
 +
        "util/date-time.js",
 +
        "util/data-structure.js",
 +
        "util/html.js",
 +
 
 +
        "units.js",
 +
        "themes.js",
 +
        "ethers.js",
 +
        "ether-painters.js",
 +
        "labellers.js",
 +
        "sources.js",
 +
        "layouts.js",
 +
        "painters.js",
 +
        "decorators.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
 +
        "ru", // Russian
 +
        "se", // Swedish
 +
        "vi", // Vietnamese
 +
        "zh" // Chinese
 +
    ];
 +
 
 +
    try {
 +
        var desiredLocales = ["en"];
 +
        var defaultServerLocale = "en";
 +
 
 +
        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] == "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;
 +
        var includeCssFiles;
 +
        if ("SimileAjax" in window) {
 +
            includeJavascriptFiles = function(urlPrefix, filenames) {
 +
                SimileAjax.includeJavascriptFiles(document, urlPrefix, filenames);
 +
            }
 +
            includeCssFiles = function(urlPrefix, filenames) {
 +
                SimileAjax.includeCssFiles(document, urlPrefix, filenames);
 +
            }
 +
        } else {
 +
            var getHead = function() {
 +
                return document.getElementsByTagName("head")[0];
 +
            };
 +
            var includeJavascriptFile = function(url) {
 +
                 if (document.body == null) {
 +
                    try {
 +
                        document.write("<script src='" + url + "' type='text/javascript'></script>");
 +
                        return;
 +
                    } catch (e) {
 +
                        // fall through
 +
                    }
 +
                }
 +
 
 +
                var script = document.createElement("script");
 +
                script.type = "text/javascript";
 +
                script.language = "JavaScript";
 +
                script.src = url;
 +
                getHead().appendChild(script);
 +
            };
 +
            var includeCssFile = function(url) {
 +
                if (document.body == null) {
 +
                    try {
 +
                        document.write("<link rel='stylesheet' href='" + url + "' type='text/css'/>");
 +
                        return;
 +
                    } catch (e) {
 +
                        // fall through
 +
                    }
 +
                 }
 +
 
 +
                var link = document.createElement("link");
 +
                link.setAttribute("rel", "stylesheet");
 +
                link.setAttribute("type", "text/css");
 +
                link.setAttribute("href", url);
 +
                getHead().appendChild(link);
 +
            }
 +
 
 +
            includeJavascriptFiles = function(urlPrefix, filenames) {
 +
                for (var i = 0; i < filenames.length; i++) {
 +
                    includeJavascriptFile(urlPrefix + filenames[i]);
 +
                }
 +
            };
 +
            includeCssFiles = function(urlPrefix, filenames) {
 +
                for (var i = 0; i < filenames.length; i++) {
 +
                    includeCssFile(urlPrefix + filenames[i]);
 +
                }
 +
            };
 +
        }
 +
 
 +
        /*
 +
        *  Include non-localized files
 +
        */
 +
        if (bundle) {
 +
            includeJavascriptFiles(Timeline.urlPrefix, ["bundle.js"]);
 +
            includeCssFiles(Timeline.urlPrefix, ["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);
 +
            }
 +
        }
 +
 
 +
        Timeline.Platform.serverLocale = defaultServerLocale;
 +
        Timeline.Platform.clientLocale = defaultClientLocale;
 +
    } catch (e) {
 +
        alert(e);
 +
    }
 +
})();

Revision as of 14:31, 2 July 2015

var Timeline = new Object(); Timeline.Platform = new Object();

(function() {

   var bundle = true;
   var javascriptFiles = [
       "timeline.js",
       "util/platform.js",
       "util/debug.js",
       "util/xmlhttp.js",
       "util/dom.js",
       "util/graphics.js",
       "util/date-time.js",
       "util/data-structure.js",
       "util/html.js",
       "units.js",
       "themes.js",
       "ethers.js",
       "ether-painters.js",
       "labellers.js",
       "sources.js",
       "layouts.js",
       "painters.js",
       "decorators.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
       "ru", // Russian
       "se", // Swedish
       "vi", // Vietnamese
       "zh" // Chinese
   ];
   try {
       var desiredLocales = ["en"];
       var defaultServerLocale = "en";
       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] == "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;
       var includeCssFiles;
       if ("SimileAjax" in window) {
           includeJavascriptFiles = function(urlPrefix, filenames) {
               SimileAjax.includeJavascriptFiles(document, urlPrefix, filenames);
           }
           includeCssFiles = function(urlPrefix, filenames) {
               SimileAjax.includeCssFiles(document, urlPrefix, filenames);
           }
       } else {
           var getHead = function() {
               return document.getElementsByTagName("head")[0];
           };
           var includeJavascriptFile = function(url) {
               if (document.body == null) {
                   try {
                       document.write("<script src='" + url + "' type='text/javascript'></script>");
                       return;
                   } catch (e) {
                       // fall through
                   }
               }
               var script = document.createElement("script");
               script.type = "text/javascript";
               script.language = "JavaScript";
               script.src = url;
               getHead().appendChild(script);
           };
           var includeCssFile = function(url) {
               if (document.body == null) {
                   try {
                       document.write("<link rel='stylesheet' href='" + url + "' type='text/css'/>");
                       return;
                   } catch (e) {
                       // fall through
                   }
               }
               var link = document.createElement("link");
               link.setAttribute("rel", "stylesheet");
               link.setAttribute("type", "text/css");
               link.setAttribute("href", url);
               getHead().appendChild(link);
           }
           includeJavascriptFiles = function(urlPrefix, filenames) {
               for (var i = 0; i < filenames.length; i++) {
                   includeJavascriptFile(urlPrefix + filenames[i]);
               }
           };
           includeCssFiles = function(urlPrefix, filenames) {
               for (var i = 0; i < filenames.length; i++) {
                   includeCssFile(urlPrefix + filenames[i]);
               }
           };
       }
       /*
        *  Include non-localized files
        */
       if (bundle) {
           includeJavascriptFiles(Timeline.urlPrefix, ["bundle.js"]);
           includeCssFiles(Timeline.urlPrefix, ["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);
           }
       }
       Timeline.Platform.serverLocale = defaultServerLocale;
       Timeline.Platform.clientLocale = defaultClientLocale;
   } catch (e) {
       alert(e);
   }

})();