|
|
(One intermediate revision by the same user not shown) |
Line 1: |
Line 1: |
− | /*==================================================
| + | jQuery(document).ready(function($){ |
− | * Timeline API
| + | var timelineBlocks = $('.cd-timeline-block'), |
− | *
| + | offset = 0.8; |
− | * This file will load all the Javascript files
| + | |
− | * necessary to make the standard timeline work.
| + | |
− | * It also detects the default locale.
| + | |
− | *
| + | |
− | * Include this file in your HTML file as follows:
| + | |
− | *
| + | |
− | * <script src="http://simile.mit.edu/timeline/api/scripts/timeline-api.js" type="text/javascript"></script>
| + | |
− | *
| + | |
− | *==================================================
| + | |
− | */
| + | |
− | /*
| + | |
− | window.__simile_api_state = "not-used";
| + | |
− | window.setTimeout(function() {
| + | |
− | try {
| + | |
− | var div = document.createElement("div");
| + | |
− | div.style.fontSize = "12px";
| + | |
− | div.style.fontFamily = "sans-serif";
| + | |
− | div.style.position = "fixed";
| + | |
− | div.style.top = "25px";
| + | |
− | div.style.right = "25px";
| + | |
− | div.style.width = "20em";
| + | |
− | div.style.padding = "2em";
| + | |
− | div.style.backgroundColor = "#ffe080";
| + | |
− | div.style.zIndex = 1000000;
| + | |
− |
| + | |
− | if (window.__simile_api_state == "used") {
| + | |
− | div.innerHTML =
| + | |
− | 'Thank you for using <a href="http://www.simile-widgets.org/timeline/">SIMILE Timeline</a>. ' +
| + | |
− | 'However, your page is referencing an old version of Timeline at a location soon to be deprecated. ' +
| + | |
− | 'Please upgrade to the latest version at the latest location at <a href="http://www.simile-widgets.org/timeline/">http://www.simile-widgets.org/timeline/</a>.';
| + | |
− | } else {
| + | |
− | div.innerHTML =
| + | |
− | 'This web page is referencing an old version of the <a href="http://www.simile-widgets.org/timeline/">SIMILE Timeline API</a> but does not make use of it. ' +
| + | |
− | 'This reference is taxing our bandwidth unnecessarily. Please remove it (and this message will go away). Thank you for your cooperation.';
| + | |
− | }
| + | |
− | document.body.insertBefore(div, document.body.firstChild);
| + | |
− | } catch (e) {
| + | |
− | window.setTimeout(arguments.callee, 5000);
| + | |
− | }
| + | |
− | }, 10000);
| + | |
− | */
| + | |
| | | |
− | var Timeline = new Object();
| + | //hide timeline blocks which are outside the viewport |
− | Timeline.Platform = new Object();
| + | hideBlocks(timelineBlocks, offset); |
− | /*
| + | |
− | HACK: We need these 2 things here because we cannot simply append
| + | |
− | a <script> element containing code that accesses Timeline.Platform
| + | |
− | to initialize it because IE executes that <script> code first
| + | |
− | before it loads timeline.js and util/platform.js.
| + | |
− | */
| + | |
| | | |
− | (function() { | + | //on scolling, show/animate timeline blocks when enter the viewport |
− | var bundle = true;
| + | $(window).on('scroll', function(){ |
− | var javascriptFiles = [
| + | (!window.requestAnimationFrame) |
− | "timeline.js",
| + | ? setTimeout(function(){ showBlocks(timelineBlocks, offset); }, 100) |
| + | : window.requestAnimationFrame(function(){ showBlocks(timelineBlocks, offset); }); |
| + | }); |
| | | |
− | "util/platform.js",
| + | function hideBlocks(blocks, offset) { |
− | "util/debug.js",
| + | blocks.each(function(){ |
− | "util/xmlhttp.js",
| + | ( $(this).offset().top > $(window).scrollTop()+$(window).height()*offset ) && $(this).find('.cd-timeline-img, .cd-timeline-content').addClass('is-hidden'); |
− | "util/dom.js",
| + | }); |
− | "util/graphics.js",
| + | } |
− | "util/date-time.js",
| + | |
− | "util/data-structure.js",
| + | |
− | "util/html.js",
| + | |
| | | |
− | "units.js",
| + | function showBlocks(blocks, offset) { |
− | "themes.js",
| + | blocks.each(function(){ |
− | "ethers.js",
| + | ( $(this).offset().top <= $(window).scrollTop()+$(window).height()*offset && $(this).find('.cd-timeline-img').hasClass('is-hidden') ) && $(this).find('.cd-timeline-img, .cd-timeline-content').removeClass('is-hidden').addClass('bounce-in'); |
− | "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);
| + | |
− | }
| + | |
− | })();
| + | |
jQuery(document).ready(function($){
var timelineBlocks = $('.cd-timeline-block'),
offset = 0.8;
//hide timeline blocks which are outside the viewport
hideBlocks(timelineBlocks, offset);
//on scolling, show/animate timeline blocks when enter the viewport
$(window).on('scroll', function(){
(!window.requestAnimationFrame)
? setTimeout(function(){ showBlocks(timelineBlocks, offset); }, 100)
: window.requestAnimationFrame(function(){ showBlocks(timelineBlocks, offset); });
});
function hideBlocks(blocks, offset) {
blocks.each(function(){
( $(this).offset().top > $(window).scrollTop()+$(window).height()*offset ) && $(this).find('.cd-timeline-img, .cd-timeline-content').addClass('is-hidden');
});
}
function showBlocks(blocks, offset) {
blocks.each(function(){
( $(this).offset().top <= $(window).scrollTop()+$(window).height()*offset && $(this).find('.cd-timeline-img').hasClass('is-hidden') ) && $(this).find('.cd-timeline-img, .cd-timeline-content').removeClass('is-hidden').addClass('bounce-in');
});
}
});