1/* 2 * Lean Slider v1.0.1 3 * http://dev7studios.com/lean-slider 4 * 5 * Copyright 2012, Dev7studios 6 * Free to use and abuse under the MIT license. 7 * http://www.opensource.org/licenses/mit-license.php 8 */ 9 10;(function($) { 11 12 $.fn.leanSlider = function(options) { 13 14 // Set up plugin vars 15 var plugin = this, 16 settings = {}, 17 slider = $(this), 18 slides = slider.children(), 19 currentSlide = 0, 20 timer = 0; 21 22 var init = function() { 23 // Set up settings 24 settings = $.extend({}, $.fn.leanSlider.defaults, options); 25 26 // Add inital classes 27 slider.addClass('lean-slider'); 28 slides.addClass('lean-slider-slide'); 29 30 currentSlide = settings.startSlide; 31 if(settings.startSlide < 0 || settings.startSlide >= slides.length) currentSlide = 0; 32 $(slides[currentSlide]).addClass('current'); 33 34 // Set up directionNav 35 if(settings.directionNav && $(settings.directionNav).length){ 36 var prevNav = $('<a href="#" class="lean-slider-prev">'+ settings.prevText +'</a>'), 37 nextNav = $('<a href="#" class="lean-slider-next">'+ settings.nextText +'</a>'); 38 if(settings.directionNavPrevBuilder) prevNav = $(settings.directionNavPrevBuilder.call(this, settings.prevText)); 39 if(settings.directionNavNextBuilder) nextNav = $(settings.directionNavNextBuilder.call(this, settings.nextText)); 40 41 prevNav.on('click', function(e){ 42 e.preventDefault(); 43 plugin.prev(); 44 }); 45 nextNav.on('click', function(e){ 46 e.preventDefault(); 47 plugin.next(); 48 }); 49 50 $(settings.directionNav).append(prevNav); 51 $(settings.directionNav).append(nextNav); 52 } 53 54 // Set up controlNav 55 if(settings.controlNav && $(settings.controlNav).length){ 56 slides.each(function(i){ 57 var controlNav = $('<a href="#" class="lean-slider-control-nav">'+ (i + 1) +'</a>'); 58 if(settings.controlNavBuilder) controlNav = $(settings.controlNavBuilder.call(this, i, $(slides[i]))); 59 60 controlNav.on('click', function(e){ 61 e.preventDefault(); 62 plugin.show(i); 63 }); 64 65 $(settings.controlNav).append(controlNav); 66 }); 67 } 68 69 // Set up pauseOnHover 70 if(settings.pauseOnHover && settings.pauseTime && settings.pauseTime > 0){ 71 slider.hover( 72 function () { 73 clearTimeout(timer); 74 }, 75 function () { 76 doTimer(); 77 } 78 ); 79 } 80 81 // Initial processing 82 updateControlNav(); 83 doTimer(); 84 85 // Trigger the afterLoad callback 86 settings.afterLoad.call(this); 87 88 return plugin; 89 }; 90 91 // Process timer 92 var doTimer = function(){ 93 if(settings.pauseTime && settings.pauseTime > 0){ 94 clearTimeout(timer); 95 timer = setTimeout(function(){ plugin.next(); }, settings.pauseTime); 96 } 97 }; 98 99 // Update controlNav 100 var updateControlNav = function(){ 101 if(settings.controlNav){ 102 $('.lean-slider-control-nav', settings.controlNav).removeClass('active'); 103 $($('.lean-slider-control-nav', settings.controlNav).get(currentSlide)).addClass('active'); 104 } 105 }; 106 107 // Prev 108 plugin.prev = function(){ 109 // Trigger the beforeChange callback 110 settings.beforeChange.call(this, currentSlide); 111 112 currentSlide--; 113 if(currentSlide < 0) currentSlide = slides.length - 1; 114 slides.removeClass('current'); 115 $(slides[currentSlide]).addClass('current'); 116 updateControlNav(); 117 doTimer(); 118 119 // Trigger the afterChange callback 120 settings.afterChange.call(this, currentSlide); 121 }; 122 123 // Next 124 plugin.next = function(){ 125 // Trigger the beforeChange callback 126 settings.beforeChange.call(this, currentSlide); 127 128 currentSlide++; 129 if(currentSlide >= slides.length) currentSlide = 0; 130 slides.removeClass('current'); 131 $(slides[currentSlide]).addClass('current'); 132 updateControlNav(); 133 doTimer(); 134 135 // Trigger the afterChange callback 136 settings.afterChange.call(this, currentSlide); 137 }; 138 139 // Show 140 plugin.show = function(index){ 141 // Trigger the beforeChange callback 142 settings.beforeChange.call(this, currentSlide); 143 144 currentSlide = index;
145 if(currentSlide < 0) currentSlide = slides.length - 1; 146 if(currentSlide >= slides.length) currentSlide = 0; 147 slides.removeClass('current'); 148 $(slides[currentSlide]).addClass('current'); 149 updateControlNav(); 150 doTimer(); 151 152 // Trigger the afterChange callback 153 settings.afterChange.call(this, currentSlide); 154 }; 155 156 // Call constructor 157 return init(); 158 }; 159 160 // Defaults 161 $.fn.leanSlider.defaults = { 162 pauseTime: 4000, 163 pauseOnHover: true, 164 startSlide: 0, 165 directionNav: 'right', 166 directionNavPrevBuilder: '', 167 directionNavNextBuilder: '', 168 controlNav: '', 169 controlNavBuilder: '', 170 prevText: 'Prev', 171 nextText: 'Next', 172 beforeChange: function(){}, 173 afterChange: function(){}, 174 afterLoad: function(){} 175 }; 176 177})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.