Team:RHIT/responsiveslides.min.js

From 2012.igem.org

(Difference between revisions)
Line 1: Line 1:
-
(function(d,D,v){d.fn.responsiveSlides=function(h){var b=d.extend({auto:!0,speed:1E3,timeout:4E3,pager:!1,nav:!1,random:!1,pause:!1,pauseControls:!1,prevText:"Previous",nextText:"Next",maxwidth:"",controls:"",namespace:"rslides",before:function(){},after:function(){}},h);return this.each(function(){v++;var e=d(this),n,p,i,k,l,m=0,f=e.children(),w=f.size(),q=parseFloat(b.speed),x=parseFloat(b.timeout),r=parseFloat(b.maxwidth),c=b.namespace,g=c+v,y=c+"_nav "+g+"_nav",s=c+"_here",j=g+"_on",z=g+"_s",
+
/*! ResponsiveSlides.js v1.32
-
o=d("<ul class='"+c+"_tabs "+g+"_tabs' />"),A={"float":"left",position:"relative"},E={"float":"left",position:"absolute"},t=function(a){b.before();f.stop().fadeOut(q,function(){d(this).removeClass(j).css(E)}).eq(a).fadeIn(q,function(){d(this).addClass(j).css(A);b.after();m=a})};b.random&&(f.sort(function(){return Math.round(Math.random())-0.5}),e.empty().append(f));f.each(function(a){this.id=z+a});e.addClass(c+" "+g);h&&h.maxwidth&&e.css("max-width",r);f.hide().eq(0).addClass(j).css(A).show();if(1<
+
* http://responsiveslides.com
-
f.size()){if(x<q+100)return;if(b.pager){var u=[];f.each(function(a){a=a+1;u=u+("<li><a href='#' class='"+z+a+"'>"+a+"</a></li>")});o.append(u);l=o.find("a");h.controls?d(b.controls).append(o):e.after(o);n=function(a){l.closest("li").removeClass(s).eq(a).addClass(s)}}b.auto&&(p=function(){k=setInterval(function(){f.stop(true,true);var a=m+1<w?m+1:0;b.pager&&n(a);t(a)},x)},p());i=function(){if(b.auto){clearInterval(k);p()}};b.pause&&e.hover(function(){clearInterval(k)},function(){i()});b.pager&&(l.bind("click",
+
* http://viljamis.com
-
function(a){a.preventDefault();b.pauseControls||i();a=l.index(this);if(!(m===a||d("."+j+":animated").length)){n(a);t(a)}}).eq(0).closest("li").addClass(s),b.pauseControls&&l.hover(function(){clearInterval(k)},function(){i()}));if(b.nav){c="<a href='#' class='"+y+" prev'>"+b.prevText+"</a><a href='#' class='"+y+" next'>"+b.nextText+"</a>";h.controls?d(b.controls).append(c):e.after(c);var c=d("."+g+"_nav"),B=d("."+g+"_nav.prev");c.bind("click",function(a){a.preventDefault();if(!d("."+j+":animated").length){var c=
+
*
-
f.index(d("."+j)),a=c-1,c=c+1<w?m+1:0;t(d(this)[0]===B[0]?a:c);b.pager&&n(d(this)[0]===B[0]?a:c);b.pauseControls||i()}});b.pauseControls&&c.hover(function(){clearInterval(k)},function(){i()})}}if("undefined"===typeof document.body.style.maxWidth&&h.maxwidth){var C=function(){e.css("width","100%");e.width()>r&&e.css("width",r)};C();d(D).bind("resize",function(){C()})}})}})(jQuery,this,0);
+
* Copyright (c) 2011-2012 @viljamis
 +
* Available under the MIT license
 +
*/
 +
 
 +
/*jslint browser: true, sloppy: true, vars: true, plusplus: true, indent: 2 */
 +
 
 +
(function ($, window, i) {
 +
  $.fn.responsiveSlides = function (options) {
 +
 
 +
    // Default settings
 +
    var settings = $.extend({
 +
      "auto": true,             // Boolean: Animate automatically, true or false
 +
      "speed": 1000,           // Integer: Speed of the transition, in milliseconds
 +
      "timeout": 4000,         // Integer: Time between slide transitions, in milliseconds
 +
      "pager": false,           // Boolean: Show pager, true or false
 +
      "nav": false,             // Boolean: Show navigation, true or false
 +
      "random": false,         // Boolean: Randomize the order of the slides, true or false
 +
      "pause": false,           // Boolean: Pause on hover, true or false
 +
      "pauseControls": false,   // Boolean: Pause when hovering controls, true or false
 +
      "prevText": "Previous",   // String: Text for the "previous" button
 +
      "nextText": "Next",       // String: Text for the "next" button
 +
      "maxwidth": "",           // Integer: Max-width of the slideshow, in pixels
 +
      "controls": "",           // Selector: Where controls should be appended to, default is after the <ul>
 +
      "namespace": "rslides",   // String: change the default namespace used
 +
      before: function () {},   // Function: Before callback
 +
      after: function () {}     // Function: After callback
 +
    }, options);
 +
 
 +
    return this.each(function () {
 +
 
 +
      // Index for namespacing
 +
      i++;
 +
 
 +
      var $this = $(this),
 +
 
 +
        // Local variables
 +
        selectTab,
 +
        startCycle,
 +
        restartCycle,
 +
        rotate,
 +
        $tabs,
 +
 
 +
        // Helpers
 +
        index = 0,
 +
        $slide = $this.children(),
 +
        length = $slide.size(),
 +
        fadeTime = parseFloat(settings.speed),
 +
        waitTime = parseFloat(settings.timeout),
 +
        maxw = parseFloat(settings.maxwidth),
 +
 
 +
        // Namespacing
 +
        namespace = settings.namespace,
 +
        namespaceIdx = namespace + i,
 +
 
 +
        // Classes
 +
        navClass = namespace + "_nav " + namespaceIdx + "_nav",
 +
        activeClass = namespace + "_here",
 +
        visibleClass = namespaceIdx + "_on",
 +
        slideClassPrefix = namespaceIdx + "_s",
 +
 
 +
        // Pager
 +
        $pager = $("<ul class='" + namespace + "_tabs " + namespaceIdx + "_tabs' />"),
 +
 
 +
        // Styles for visible and hidden slides
 +
        visible = {"float": "left", "position": "relative"},
 +
        hidden = {"float": "none", "position": "absolute"},
 +
 
 +
        // Fading animation
 +
        slideTo = function (idx) {
 +
          settings.before();
 +
          $slide
 +
            .stop()
 +
            .fadeOut(fadeTime, function () {
 +
              $(this)
 +
                .removeClass(visibleClass)
 +
                .css(hidden);
 +
            })
 +
            .eq(idx)
 +
            .fadeIn(fadeTime, function () {
 +
              $(this)
 +
                .addClass(visibleClass)
 +
                .css(visible);
 +
              settings.after();
 +
              index = idx;
 +
            });
 +
        };
 +
 
 +
      // Random order
 +
      if (settings.random) {
 +
        $slide.sort(function () {
 +
          return (Math.round(Math.random()) - 0.5);
 +
        });
 +
        $this
 +
          .empty()
 +
          .append($slide);
 +
      }
 +
 
 +
      // Add ID's to each slide
 +
      $slide.each(function (i) {
 +
        this.id = slideClassPrefix + i;
 +
      });
 +
 
 +
      // Add max-width and classes
 +
      $this.addClass(namespace + " " + namespaceIdx);
 +
      if (options && options.maxwidth) {
 +
        $this.css("max-width", maxw);
 +
      }
 +
 
 +
      // Hide all slides, then show first one
 +
      $slide
 +
        .hide()
 +
        .eq(0)
 +
        .addClass(visibleClass)
 +
        .css(visible)
 +
        .show();
 +
 
 +
      // Only run if there's more than one slide
 +
      if ($slide.size() > 1) {
 +
 
 +
        // Make sure the timeout is at least 100ms longer than the fade
 +
        if (waitTime < fadeTime + 100) {
 +
          return;
 +
        }
 +
 
 +
        // Pager
 +
        if (settings.pager) {
 +
          var tabMarkup = [];
 +
          $slide.each(function (i) {
 +
            var n = i + 1;
 +
            tabMarkup +=
 +
              "<li>" +
 +
              "<a href='#' class='" + slideClassPrefix + n + "'>" + n + "</a>" +
 +
              "</li>";
 +
          });
 +
          $pager.append(tabMarkup);
 +
 
 +
          $tabs = $pager.find("a");
 +
 
 +
          // Inject pager
 +
          if (options.controls) {
 +
            $(settings.controls).append($pager);
 +
          } else {
 +
            $this.after($pager);
 +
          }
 +
 
 +
          // Select pager item
 +
          selectTab = function (idx) {
 +
            $tabs
 +
              .closest("li")
 +
              .removeClass(activeClass)
 +
              .eq(idx)
 +
              .addClass(activeClass);
 +
          };
 +
        }
 +
 
 +
        // Auto cycle
 +
        if (settings.auto) {
 +
 
 +
          startCycle = function () {
 +
            rotate = setInterval(function () {
 +
 
 +
              // Clear the event queue
 +
              $slide.stop(true, true);
 +
 
 +
              var idx = index + 1 < length ? index + 1 : 0;
 +
 
 +
              // Remove active state and set new if pager is set
 +
              if (settings.pager) {
 +
                selectTab(idx);
 +
              }
 +
 
 +
              slideTo(idx);
 +
            }, waitTime);
 +
          };
 +
 
 +
          // Init cycle
 +
          startCycle();
 +
        }
 +
 
 +
        // Restarting cycle
 +
        restartCycle = function () {
 +
          if (settings.auto) {
 +
            // Stop
 +
            clearInterval(rotate);
 +
            // Restart
 +
            startCycle();
 +
          }
 +
        };
 +
 
 +
        // Pause on hover
 +
        if (settings.pause) {
 +
          $this.hover(function () {
 +
            clearInterval(rotate);
 +
          }, function () {
 +
            restartCycle();
 +
          });
 +
        }
 +
 
 +
        // Pager click event handler
 +
        if (settings.pager) {
 +
          $tabs.bind("click", function (e) {
 +
            e.preventDefault();
 +
 
 +
            if (!settings.pauseControls) {
 +
              restartCycle();
 +
            }
 +
 
 +
            // Get index of clicked tab
 +
            var idx = $tabs.index(this);
 +
 
 +
            // Break if element is already active or currently animated
 +
            if (index === idx || $("." + visibleClass + ":animated").length) {
 +
              return;
 +
            }
 +
 
 +
            // Remove active state from old tab and set new one
 +
            selectTab(idx);
 +
 
 +
            // Do the animation
 +
            slideTo(idx);
 +
          })
 +
            .eq(0)
 +
            .closest("li")
 +
            .addClass(activeClass);
 +
 
 +
          // Pause when hovering pager
 +
          if (settings.pauseControls) {
 +
            $tabs.hover(function () {
 +
              clearInterval(rotate);
 +
            }, function () {
 +
              restartCycle();
 +
            });
 +
          }
 +
        }
 +
 
 +
        // Navigation
 +
        if (settings.nav) {
 +
          var navMarkup =
 +
            "<a href='#' class='" + navClass + " prev'>" + settings.prevText + "</a>" +
 +
            "<a href='#' class='" + navClass + " next'>" + settings.nextText + "</a>";
 +
 
 +
          // Inject navigation
 +
          if (options.controls) {
 +
            $(settings.controls).append(navMarkup);
 +
          } else {
 +
            $this.after(navMarkup);
 +
          }
 +
 
 +
          var $trigger = $("." + namespaceIdx + "_nav"),
 +
            $prev = $("." + namespaceIdx + "_nav.prev");
 +
 
 +
          // Click event handler
 +
          $trigger.bind("click", function (e) {
 +
            e.preventDefault();
 +
 
 +
            // Prevent clicking if currently animated
 +
            if ($("." + visibleClass + ":animated").length) {
 +
              return;
 +
            }
 +
 
 +
            //  Adds active class during slide animation
 +
            //  $(this)
 +
            //    .addClass(namespace + "_active")
 +
            //    .delay(fadeTime)
 +
            //    .queue(function (next) {
 +
            //      $(this).removeClass(namespace + "_active");
 +
            //      next();
 +
            //  });
 +
 
 +
            // Determine where to slide
 +
            var idx = $slide.index($("." + visibleClass)),
 +
              prevIdx = idx - 1,
 +
              nextIdx = idx + 1 < length ? index + 1 : 0;
 +
 
 +
            // Go to slide
 +
            slideTo($(this)[0] === $prev[0] ? prevIdx : nextIdx);
 +
            if (settings.pager) {
 +
              selectTab($(this)[0] === $prev[0] ? prevIdx : nextIdx);
 +
            }
 +
 
 +
            if (!settings.pauseControls) {
 +
              restartCycle();
 +
            }
 +
          });
 +
 
 +
          // Pause when hovering navigation
 +
          if (settings.pauseControls) {
 +
            $trigger.hover(function () {
 +
              clearInterval(rotate);
 +
            }, function () {
 +
              restartCycle();
 +
            });
 +
          }
 +
        }
 +
 
 +
      }
 +
 
 +
      // Max-width fallback
 +
      if (typeof document.body.style.maxWidth === "undefined" && options.maxwidth) {
 +
        var widthSupport = function () {
 +
          $this.css("width", "100%");
 +
          if ($this.width() > maxw) {
 +
            $this.css("width", maxw);
 +
          }
 +
        };
 +
 
 +
        // Init fallback
 +
        widthSupport();
 +
        $(window).bind("resize", function () {
 +
          widthSupport();
 +
        });
 +
      }
 +
 
 +
    });
 +
 
 +
  };
 +
})(jQuery, this, 0);

Revision as of 00:00, 13 August 2012

/*! ResponsiveSlides.js v1.32

* http://responsiveslides.com
* http://viljamis.com
*
* Copyright (c) 2011-2012 @viljamis
* Available under the MIT license
*/

/*jslint browser: true, sloppy: true, vars: true, plusplus: true, indent: 2 */

(function ($, window, i) {

 $.fn.responsiveSlides = function (options) {
   // Default settings
   var settings = $.extend({
     "auto": true,             // Boolean: Animate automatically, true or false
     "speed": 1000,            // Integer: Speed of the transition, in milliseconds
     "timeout": 4000,          // Integer: Time between slide transitions, in milliseconds
     "pager": false,           // Boolean: Show pager, true or false
     "nav": false,             // Boolean: Show navigation, true or false
     "random": false,          // Boolean: Randomize the order of the slides, true or false
     "pause": false,           // Boolean: Pause on hover, true or false
     "pauseControls": false,   // Boolean: Pause when hovering controls, true or false
     "prevText": "Previous",   // String: Text for the "previous" button
     "nextText": "Next",       // String: Text for the "next" button
     "maxwidth": "",           // Integer: Max-width of the slideshow, in pixels
"controls": "", // Selector: Where controls should be appended to, default is after the
    "namespace": "rslides", // String: change the default namespace used before: function () {}, // Function: Before callback after: function () {} // Function: After callback }, options); return this.each(function () { // Index for namespacing i++; var $this = $(this), // Local variables selectTab, startCycle, restartCycle, rotate, $tabs, // Helpers index = 0, $slide = $this.children(), length = $slide.size(), fadeTime = parseFloat(settings.speed), waitTime = parseFloat(settings.timeout), maxw = parseFloat(settings.maxwidth), // Namespacing namespace = settings.namespace, namespaceIdx = namespace + i, // Classes navClass = namespace + "_nav " + namespaceIdx + "_nav", activeClass = namespace + "_here", visibleClass = namespaceIdx + "_on", slideClassPrefix = namespaceIdx + "_s", // Pager $pager = $("<ul class='" + namespace + "_tabs " + namespaceIdx + "_tabs' />"), // Styles for visible and hidden slides visible = {"float": "left", "position": "relative"}, hidden = {"float": "none", "position": "absolute"}, // Fading animation slideTo = function (idx) { settings.before(); $slide .stop() .fadeOut(fadeTime, function () { $(this) .removeClass(visibleClass) .css(hidden); }) .eq(idx) .fadeIn(fadeTime, function () { $(this) .addClass(visibleClass) .css(visible); settings.after(); index = idx; }); }; // Random order if (settings.random) { $slide.sort(function () { return (Math.round(Math.random()) - 0.5); }); $this .empty() .append($slide); } // Add ID's to each slide $slide.each(function (i) { this.id = slideClassPrefix + i; }); // Add max-width and classes $this.addClass(namespace + " " + namespaceIdx); if (options && options.maxwidth) { $this.css("max-width", maxw); } // Hide all slides, then show first one $slide .hide() .eq(0) .addClass(visibleClass) .css(visible) .show(); // Only run if there's more than one slide if ($slide.size() > 1) { // Make sure the timeout is at least 100ms longer than the fade if (waitTime < fadeTime + 100) { return; } // Pager if (settings.pager) { var tabMarkup = []; $slide.each(function (i) { var n = i + 1; tabMarkup += "
  • " + "<a href='#' class='" + slideClassPrefix + n + "'>" + n + "</a>" + "
  • ";
             });
             $pager.append(tabMarkup);
    
             $tabs = $pager.find("a");
    
             // Inject pager
             if (options.controls) {
               $(settings.controls).append($pager);
             } else {
               $this.after($pager);
             }
    
             // Select pager item
             selectTab = function (idx) {
               $tabs
                 .closest("li")
                 .removeClass(activeClass)
                 .eq(idx)
                 .addClass(activeClass);
             };
           }
    
           // Auto cycle
           if (settings.auto) {
    
             startCycle = function () {
               rotate = setInterval(function () {
    
                 // Clear the event queue
                 $slide.stop(true, true);
    
                 var idx = index + 1 < length ? index + 1 : 0;
    
                 // Remove active state and set new if pager is set
                 if (settings.pager) {
                   selectTab(idx);
                 }
    
                 slideTo(idx);
               }, waitTime);
             };
    
             // Init cycle
             startCycle();
           }
    
           // Restarting cycle
           restartCycle = function () {
             if (settings.auto) {
               // Stop
               clearInterval(rotate);
               // Restart
               startCycle();
             }
           };
    
           // Pause on hover
           if (settings.pause) {
             $this.hover(function () {
               clearInterval(rotate);
             }, function () {
               restartCycle();
             });
           }
    
           // Pager click event handler
           if (settings.pager) {
             $tabs.bind("click", function (e) {
               e.preventDefault();
    
               if (!settings.pauseControls) {
                 restartCycle();
               }
    
               // Get index of clicked tab
               var idx = $tabs.index(this);
    
               // Break if element is already active or currently animated
               if (index === idx || $("." + visibleClass + ":animated").length) {
                 return;
               }
    
               // Remove active state from old tab and set new one
               selectTab(idx);
    
               // Do the animation
               slideTo(idx);
             })
               .eq(0)
               .closest("li")
               .addClass(activeClass);
    
             // Pause when hovering pager
             if (settings.pauseControls) {
               $tabs.hover(function () {
                 clearInterval(rotate);
               }, function () {
                 restartCycle();
               });
             }
           }
    
           // Navigation
           if (settings.nav) {
             var navMarkup =
               "<a href='#' class='" + navClass + " prev'>" + settings.prevText + "</a>" +
               "<a href='#' class='" + navClass + " next'>" + settings.nextText + "</a>";
    
             // Inject navigation
             if (options.controls) {
               $(settings.controls).append(navMarkup);
             } else {
               $this.after(navMarkup);
             }
    
             var $trigger = $("." + namespaceIdx + "_nav"),
               $prev = $("." + namespaceIdx + "_nav.prev");
    
             // Click event handler
             $trigger.bind("click", function (e) {
               e.preventDefault();
    
               // Prevent clicking if currently animated
               if ($("." + visibleClass + ":animated").length) {
                 return;
               }
    
               //  Adds active class during slide animation
               //  $(this)
               //    .addClass(namespace + "_active")
               //    .delay(fadeTime)
               //    .queue(function (next) {
               //      $(this).removeClass(namespace + "_active");
               //      next();
               //  });
    
               // Determine where to slide
               var idx = $slide.index($("." + visibleClass)),
                 prevIdx = idx - 1,
                 nextIdx = idx + 1 < length ? index + 1 : 0;
    
               // Go to slide
               slideTo($(this)[0] === $prev[0] ? prevIdx : nextIdx);
               if (settings.pager) {
                 selectTab($(this)[0] === $prev[0] ? prevIdx : nextIdx);
               }
    
               if (!settings.pauseControls) {
                 restartCycle();
               }
             });
    
             // Pause when hovering navigation
             if (settings.pauseControls) {
               $trigger.hover(function () {
                 clearInterval(rotate);
               }, function () {
                 restartCycle();
               });
             }
           }
    
         }
    
         // Max-width fallback
         if (typeof document.body.style.maxWidth === "undefined" && options.maxwidth) {
           var widthSupport = function () {
             $this.css("width", "100%");
             if ($this.width() > maxw) {
               $this.css("width", maxw);
             }
           };
    
           // Init fallback
           widthSupport();
           $(window).bind("resize", function () {
             widthSupport();
           });
         }
    
       });
    
     };
    
    })(jQuery, this, 0);