Team:Wageningen UR/js/Timeliner.js

From 2014.igem.org

/*

  • Timeliner.js
  • @version 1.6.1
  • @copyright Tarek Anandan (http://www.technotarek.com)
  • /
(function($) {
       $.timeliner = function(options) {
           if ($.timeliners == null) {
               $.timeliners = { options: [] };
               $.timeliners.options.push(options);
           }
           else {
               $.timeliners.options.push(options);
           }
           $(document).ready(function() {
               for (var i=0; i<$.timeliners.options.length; i++) {
                   startTimeliner($.timeliners.options[i]);
               }
           });
       }
       function startTimeliner(options){
           var settings = {
               timelineContainer: options['timelineContainer'] || '#timelineContainer', // value: selector of the main element holding the timeline's content, default to #timelineContainer
               startState: options['startState'] || 'closed', // value: closed | open,
               // default to closed; sets whether the timeline is
               // initially collapsed or fully expanded
               startOpen: options['startOpen'] || [], // value: array of IDs of
               // single timelineEvents, default to empty; sets
               // the minor events that you want to display open
               // by default on page load
               baseSpeed: options['baseSpeed'] || 200, // value: numeric, default to
               // 200; sets the base speed for animation of the
               // event marker
               speed: options['speed'] || 4, // value: numeric, defalut to 4; a
               // multiplier applied to the base speed that sets
               // the speed at which an event's conents are
               // displayed and hidden
               fontOpen: options['fontOpen'] || '1.2em', // value: any valid CSS
               // font-size value, defaults to 1em; sets the font
               // size of an event after it is opened
               fontClosed: options['fontClosed'] || '1em', // value: any valid CSS
               // font-size value, defaults to 1em; sets the font
               // size of an event after it is closed
               expandAllText: options ['expandAllText'] || '+ expand all', // value:
               // string, sets the text of the expandAll selector
               // after the timeline is fully collapsed
               collapseAllText: options['collapseAllText'] || '- collapse all' // // value:
               // string, sets the text of the expandAll selector
               // after the timeline is fully expanded
           };
           function openEvent(eventHeading,eventBody) {
               $(eventHeading)
                   .removeClass('closed')
                   .addClass('open')
                   .animate({ fontSize: settings.fontOpen }, settings.baseSpeed);
               $(eventBody).show(settings.speed*settings.baseSpeed);
           }
           function closeEvent(eventHeading,eventBody) {
               $(eventHeading)
                   .animate({ fontSize: settings.fontClosed }, 0)
                   .removeClass('open')
                   .addClass('closed');
               $(eventBody).hide(settings.speed*settings.baseSpeed);
           }


           if ($(settings.timelineContainer).data('started')) {
               return;                 // we already initialized this timelineContainer
           } else {
               $(settings.timelineContainer).data('started', true);
               $(settings.timelineContainer+" "+".expandAll").html(settings.expandAllText);
               $(settings.timelineContainer+" "+".collapseAll").html(settings.collapseAllText);

// If startState option is set to closed, hide all the events; else, show fully expanded upon load if(settings.startState==='closed') { // Close all items

                               $(settings.timelineContainer+" "+".timelineEvent").hide();

// show startOpen events $.each($(settings.startOpen), function(index, value) {

                                   openEvent($(value).parent(settings.timelineContainer+" "+".timelineMinor").find("dt a"),$(value));

});

}else{

// Open all items

                               openEvent($(settings.timelineContainer+" "+".timelineMinor dt a"),$(settings.timelineContainer+" "+".timelineEvent"));

}

// Minor Event Click $(settings.timelineContainer).on("click",".timelineMinor dt",function(){

var currentId = $(this).attr('id');

// if the event is currently open if($(this).find('a').is('.open')) {

closeEvent($("a",this),$("#"+currentId+"EX"))

} else{ // if the event is currently closed

openEvent($("a", this),$("#"+currentId+"EX"));

}

});

// Major Marker Click $(settings.timelineContainer).on("click",".timelineMajorMarker",function() {

// number of minor events under this major event var numEvents = $(this).parents(".timelineMajor").find(".timelineMinor").length;

// number of minor events already open var numOpen = $(this).parents(".timelineMajor").find('.open').length;

if(numEvents > numOpen ) {

openEvent($(this).parents(".timelineMajor").find("dt a","dl.timelineMinor"),$(this).parents(".timelineMajor").find(".timelineEvent"));

} else{

closeEvent($(this).parents(".timelineMajor").find("dl.timelineMinor a"),$(this).parents(".timelineMajor").find(".timelineEvent"));

} });

// All Markers/Events

                       $(settings.timelineContainer+" "+".expandAll").click(function()

{ if($(this).hasClass('expanded')) {

closeEvent($(this).parents(settings.timelineContainer).find("dt a","dl.timelineMinor"),$(this).parents(settings.timelineContainer).find(".timelineEvent")); $(this).removeClass('expanded').html(settings.expandAllText);

} else{

openEvent($(this).parents(settings.timelineContainer).find("dt a","dl.timelineMinor"),$(this).parents(settings.timelineContainer).find(".timelineEvent")); $(this).addClass('expanded').html(settings.collapseAllText);

} });

               }

}; })(jQuery);