/* * jQuery to power the fancy slide module. * */ (function($) { $.fn.fancySlide = function(options){ var defaultoptions = { animation: 'slide', // Transition style continuous: true, // Return to first slide when last slide is // reached controlsBefore: '', // Prefix slide description controlsAfter: '', // Suffix slide description showControls: true, // Add controller to the slider slideControls: false, // Makes controls slide up and down on mouseover vertical: false, // Slide animations move vertically speed: 800, // Transition time rotate: true, // Let slider animate by itself pause: 4000 // Pause time between transitions }; var options = $.extend(defaultoptions, options); var obj = $(this); var slidewidth = $(this).outerWidth(); var slideheight = $(this).outerHeight(); var slides = $('li', obj).length; var currentslide = 0; var previousslide = 0; var position = 0; var timeout; var depth = 99; // Append to animation function name var animationtype = options.animation + 'animate'; if (options.speed == 0) { animationtype = 'dontanimate'; } /* * Initiate the fancy slider. * */ return this.each(function() { obj.width(slidewidth); obj.height(slideheight); obj.css('overflow', 'hidden'); if(options.showControls) { var html = '
'; html += '' + options.controlsBefore + ''; for (i = 0; i < slides; i++){ var thistitle = $('li img:eq(' + i + ')'); html += '

' + thistitle.attr('alt') + '

'; } html += '
'; for (i = 0; i < slides; i++){ var thisslide = $('li img:eq(' + i + ')'); html += '' html += '' + thisslide.attr('alt') + '' html += ''; } html += '
'; html += '
'; html += options.controlsAfter; $(obj).append(html); $('#controller').css('zIndex', depth + 1); $('#controller').css('width', slidewidth - 20); // Make sure controller link images are sized correctly $('#controller img').attr('height', '40'); // Set classes for controller text and buttons showinfo(); // Add sliding animation for controller if (options.slideControls) { var controlsheight = $('#controller').outerHeight(); $('#controller').css('bottom','-' + controlsheight + 'px'); obj.hover( function() { $('#controller').stop().animate({bottom:'0px'}, 300); }, function() { $('#controller').stop().animate({bottom:'-' + controlsheight + 'px'}, 300); } ); } // Give controller links functionality to change slides $('#controller a').each(function(i) { $(this).bind('click', function() { previousslide = currentslide; currentslide = i; eval(animationtype + '(' + currentslide + ',' + previousslide + ',' + true + ')'); return false; }); }); }; // Set slider CSS to override default drupal if (animationtype == 'slideanimate') { $('ul', obj).css({ 'margin' : 0, 'padding' : 0, 'width': slides*slidewidth }); $('li', obj).css({ 'float' : (options.vertical ? 'none' : 'left'), 'height' : slideheight, 'width' : slidewidth }); } else if (animationtype == 'fadeanimate' || animationtype == 'dontanimate') { $('ul', obj).css({ 'height' : slideheight, 'width' : slidewidth }); $('li', obj).css({ 'height' : slideheight, 'left' : '0', 'position' : 'absolute', 'top' : '0', 'width' : slidewidth }); for (i = 0; i < slides; i++){ $('li:eq(' + i + ')', obj).css('zIndex', depth); depth--; } } if (options.rotate) { timeout = setTimeout(function(){ eval(animationtype + '("rotate",' + previousslide + ',' + false + ')'); },options.pause); }; }); // Work out which slide to animate to function animationmechanic(destination) { if (destination == 'rotate') { currentslide++; if (currentslide > slides - 1) { currentslide = options.continuous ? 0 : currentslide - 1; } } else { currentslide = destination; }; return currentslide; }; /* * Dont animate transition. If speed is set to 0 use this to save on overhead * */ function dontanimate(destination, current, clicked) { var theslide = currentslide; if (destination == current){ //prevent button clicks on current slide if(clicked) clearTimeout(timeout); //reset timeout if controller links are clicked return; } animationmechanic(destination); if (options.showControls) { showinfo(); }; var diff = Math.abs(theslide-currentslide); var speed = diff * options.speed; if (!clicked){ if (currentslide == 0){ previousslide = slides - 1; } else { previousslide = currentslide - 1; } } $('li:eq(' + previousslide + ')', obj).stop(true, true).hide(); $('li:eq(' + currentslide + ')', obj).stop(true, true).show(); if(clicked) clearTimeout(timeout); // Reset timeout if controller links are clicked if(options.rotate) { timeout = setTimeout(function(){ eval(animationtype + '("rotate",' + previousslide + ',' + false + ')'); }, diff*speed + options.pause); }; }; /* * Slide transition * */ function slideanimate(destination, current, clicked) { var theslide = currentslide; if (destination == current){ // Prevent button clicks on current slide if(clicked) clearTimeout(timeout); // Reset timeout if controller links are clicked return; } animationmechanic(destination); if (options.showControls) { showinfo(); }; var diff = Math.abs(theslide-currentslide); var speed = diff * options.speed; if (!options.vertical) { position = (currentslide * slidewidth * -1); $('ul', obj).stop().animate({marginLeft: position}, speed); } else { position = (currentslide * slideheight * -1); $('ul', obj).stop().animate({marginTop: position}, speed); }; if (clicked) clearTimeout(timeout); // Reset timeout if controller links are clicked if (options.rotate) { timeout = setTimeout(function(){ eval(animationtype + '("rotate",' + previousslide + ',' + false + ')'); }, diff*speed + options.pause); }; }; /* * Fade transition * */ function fadeanimate(destination, current, clicked) { var theslide = currentslide; if (destination == current){ //Prevent button clicks on current slide if(clicked) clearTimeout(timeout); // Reset timeout if controller links are clicked return; } animationmechanic(destination); if (options.showControls) { showinfo(); }; if (!clicked){ if (currentslide == 0){ previousslide = slides - 1; } else { previousslide = currentslide - 1; } } var diff = Math.abs(theslide - currentslide); var speed = diff * options.speed; $('li:eq(' + previousslide + ')', obj).stop(true, true).fadeOut(speed); $('li:eq(' + currentslide + ')', obj).stop(true, true).fadeIn(speed); if(clicked) clearTimeout(timeout); // Reset timeout if controller links are clicked if(options.rotate) { timeout = setTimeout(function(){ eval(animationtype + '("rotate",' + previousslide + ',' + false + ')'); }, diff*speed + options.pause); }; }; // Change classes on controller info and button states function showinfo() { $('#controller p, #controller a').addClass('inactive'); $('#controller p.active, #controller a.active').removeClass('active'); $('#controller p:eq(' + currentslide + ')').removeClass('inactive'); $('#controller p:eq(' + currentslide + ')').addClass('active'); $('#controller a:eq(' + currentslide + ')').removeClass('inactive'); $('#controller a:eq(' + currentslide + ')').addClass('active'); }; }; })(jQuery); /* playback timings (ms): LoadShardBlock: 536.362 (3) esindex: 0.015 captures_list: 783.942 CDXLines.iter: 15.319 (3) PetaboxLoader3.datanode: 513.039 (4) exclusion.robots.fetch: 190.01 (4) exclusion.robots: 191.115 exclusion.robots.policy: 0.468 RedisCDXSource: 35.036 PetaboxLoader3.resolve: 94.144 (2) load_resource: 79.514 */