annotate sites/all/libraries/jquery.cycle/jquery.cycle.lite.js @ 4:ce11bbd8f642

added modules
author danieleb <danielebarchiesi@me.com>
date Thu, 19 Sep 2013 10:38:44 +0100
parents b74b41bb73f0
children
rev   line source
danielebarchiesi@2 1 /*!
danielebarchiesi@2 2 * jQuery Cycle Lite Plugin
danielebarchiesi@2 3 * http://malsup.com/jquery/cycle/lite/
danielebarchiesi@2 4 * Copyright (c) 2008-2012 M. Alsup
danielebarchiesi@2 5 * Version: 1.7 (20-FEB-2013)
danielebarchiesi@2 6 * Dual licensed under the MIT and GPL licenses:
danielebarchiesi@2 7 * http://www.opensource.org/licenses/mit-license.php
danielebarchiesi@2 8 * http://www.gnu.org/licenses/gpl.html
danielebarchiesi@2 9 * Requires: jQuery v1.3.2 or later
danielebarchiesi@2 10 */
danielebarchiesi@2 11 ;(function($) {
danielebarchiesi@2 12 "use strict";
danielebarchiesi@2 13
danielebarchiesi@2 14 var ver = 'Lite-1.7';
danielebarchiesi@2 15 var msie = /MSIE/.test(navigator.userAgent);
danielebarchiesi@2 16
danielebarchiesi@2 17 $.fn.cycle = function(options) {
danielebarchiesi@2 18 return this.each(function() {
danielebarchiesi@2 19 options = options || {};
danielebarchiesi@2 20
danielebarchiesi@2 21 if (this.cycleTimeout)
danielebarchiesi@2 22 clearTimeout(this.cycleTimeout);
danielebarchiesi@2 23
danielebarchiesi@2 24 this.cycleTimeout = 0;
danielebarchiesi@2 25 this.cyclePause = 0;
danielebarchiesi@2 26
danielebarchiesi@2 27 var $cont = $(this);
danielebarchiesi@2 28 var $slides = options.slideExpr ? $(options.slideExpr, this) : $cont.children();
danielebarchiesi@2 29 var els = $slides.get();
danielebarchiesi@2 30 if (els.length < 2) {
danielebarchiesi@2 31 if (window.console)
danielebarchiesi@2 32 console.log('terminating; too few slides: ' + els.length);
danielebarchiesi@2 33 return; // don't bother
danielebarchiesi@2 34 }
danielebarchiesi@2 35
danielebarchiesi@2 36 // support metadata plugin (v1.0 and v2.0)
danielebarchiesi@2 37 var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
danielebarchiesi@2 38 var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
danielebarchiesi@2 39 if (meta)
danielebarchiesi@2 40 opts = $.extend(opts, meta);
danielebarchiesi@2 41
danielebarchiesi@2 42 opts.before = opts.before ? [opts.before] : [];
danielebarchiesi@2 43 opts.after = opts.after ? [opts.after] : [];
danielebarchiesi@2 44 opts.after.unshift(function(){ opts.busy=0; });
danielebarchiesi@2 45
danielebarchiesi@2 46 // allow shorthand overrides of width, height and timeout
danielebarchiesi@2 47 var cls = this.className;
danielebarchiesi@2 48 opts.width = parseInt((cls.match(/w:(\d+)/)||[])[1], 10) || opts.width;
danielebarchiesi@2 49 opts.height = parseInt((cls.match(/h:(\d+)/)||[])[1], 10) || opts.height;
danielebarchiesi@2 50 opts.timeout = parseInt((cls.match(/t:(\d+)/)||[])[1], 10) || opts.timeout;
danielebarchiesi@2 51
danielebarchiesi@2 52 if ($cont.css('position') == 'static')
danielebarchiesi@2 53 $cont.css('position', 'relative');
danielebarchiesi@2 54 if (opts.width)
danielebarchiesi@2 55 $cont.width(opts.width);
danielebarchiesi@2 56 if (opts.height && opts.height != 'auto')
danielebarchiesi@2 57 $cont.height(opts.height);
danielebarchiesi@2 58
danielebarchiesi@2 59 var first = 0;
danielebarchiesi@2 60 $slides.css({position: 'absolute', top:0}).each(function(i) {
danielebarchiesi@2 61 $(this).css('z-index', els.length-i);
danielebarchiesi@2 62 });
danielebarchiesi@2 63
danielebarchiesi@2 64 $(els[first]).css('opacity',1).show(); // opacity bit needed to handle reinit case
danielebarchiesi@2 65 if (msie)
danielebarchiesi@2 66 els[first].style.removeAttribute('filter');
danielebarchiesi@2 67
danielebarchiesi@2 68 if (opts.fit && opts.width)
danielebarchiesi@2 69 $slides.width(opts.width);
danielebarchiesi@2 70 if (opts.fit && opts.height && opts.height != 'auto')
danielebarchiesi@2 71 $slides.height(opts.height);
danielebarchiesi@2 72 if (opts.pause)
danielebarchiesi@2 73 $cont.hover(function(){this.cyclePause=1;}, function(){this.cyclePause=0;});
danielebarchiesi@2 74
danielebarchiesi@2 75 var txFn = $.fn.cycle.transitions[opts.fx];
danielebarchiesi@2 76 if (txFn)
danielebarchiesi@2 77 txFn($cont, $slides, opts);
danielebarchiesi@2 78
danielebarchiesi@2 79 $slides.each(function() {
danielebarchiesi@2 80 var $el = $(this);
danielebarchiesi@2 81 this.cycleH = (opts.fit && opts.height) ? opts.height : $el.height();
danielebarchiesi@2 82 this.cycleW = (opts.fit && opts.width) ? opts.width : $el.width();
danielebarchiesi@2 83 });
danielebarchiesi@2 84
danielebarchiesi@2 85 if (opts.cssFirst)
danielebarchiesi@2 86 $($slides[first]).css(opts.cssFirst);
danielebarchiesi@2 87
danielebarchiesi@2 88 if (opts.timeout) {
danielebarchiesi@2 89 // ensure that timeout and speed settings are sane
danielebarchiesi@2 90 if (opts.speed.constructor == String)
danielebarchiesi@2 91 opts.speed = {slow: 600, fast: 200}[opts.speed] || 400;
danielebarchiesi@2 92 if (!opts.sync)
danielebarchiesi@2 93 opts.speed = opts.speed / 2;
danielebarchiesi@2 94 while((opts.timeout - opts.speed) < 250)
danielebarchiesi@2 95 opts.timeout += opts.speed;
danielebarchiesi@2 96 }
danielebarchiesi@2 97 opts.speedIn = opts.speed;
danielebarchiesi@2 98 opts.speedOut = opts.speed;
danielebarchiesi@2 99
danielebarchiesi@2 100 opts.slideCount = els.length;
danielebarchiesi@2 101 opts.currSlide = first;
danielebarchiesi@2 102 opts.nextSlide = 1;
danielebarchiesi@2 103
danielebarchiesi@2 104 // fire artificial events
danielebarchiesi@2 105 var e0 = $slides[first];
danielebarchiesi@2 106 if (opts.before.length)
danielebarchiesi@2 107 opts.before[0].apply(e0, [e0, e0, opts, true]);
danielebarchiesi@2 108 if (opts.after.length > 1)
danielebarchiesi@2 109 opts.after[1].apply(e0, [e0, e0, opts, true]);
danielebarchiesi@2 110
danielebarchiesi@2 111 if (opts.click && !opts.next)
danielebarchiesi@2 112 opts.next = opts.click;
danielebarchiesi@2 113 if (opts.next)
danielebarchiesi@2 114 $(opts.next).unbind('click.cycle').bind('click.cycle', function(){return advance(els,opts,opts.rev?-1:1);});
danielebarchiesi@2 115 if (opts.prev)
danielebarchiesi@2 116 $(opts.prev).unbind('click.cycle').bind('click.cycle', function(){return advance(els,opts,opts.rev?1:-1);});
danielebarchiesi@2 117
danielebarchiesi@2 118 if (opts.timeout)
danielebarchiesi@2 119 this.cycleTimeout = setTimeout(function() {
danielebarchiesi@2 120 go(els,opts,0,!opts.rev);
danielebarchiesi@2 121 }, opts.timeout + (opts.delay||0));
danielebarchiesi@2 122 });
danielebarchiesi@2 123 };
danielebarchiesi@2 124
danielebarchiesi@2 125 function go(els, opts, manual, fwd) {
danielebarchiesi@2 126 if (opts.busy)
danielebarchiesi@2 127 return;
danielebarchiesi@2 128 var p = els[0].parentNode, curr = els[opts.currSlide], next = els[opts.nextSlide];
danielebarchiesi@2 129 if (p.cycleTimeout === 0 && !manual)
danielebarchiesi@2 130 return;
danielebarchiesi@2 131
danielebarchiesi@2 132 if (manual || !p.cyclePause) {
danielebarchiesi@2 133 if (opts.before.length)
danielebarchiesi@2 134 $.each(opts.before, function(i,o) { o.apply(next, [curr, next, opts, fwd]); });
danielebarchiesi@2 135 var after = function() {
danielebarchiesi@2 136 if (msie)
danielebarchiesi@2 137 this.style.removeAttribute('filter');
danielebarchiesi@2 138 $.each(opts.after, function(i,o) { o.apply(next, [curr, next, opts, fwd]); });
danielebarchiesi@2 139 queueNext(opts);
danielebarchiesi@2 140 };
danielebarchiesi@2 141
danielebarchiesi@2 142 if (opts.nextSlide != opts.currSlide) {
danielebarchiesi@2 143 opts.busy = 1;
danielebarchiesi@2 144 $.fn.cycle.custom(curr, next, opts, after);
danielebarchiesi@2 145 }
danielebarchiesi@2 146 var roll = (opts.nextSlide + 1) == els.length;
danielebarchiesi@2 147 opts.nextSlide = roll ? 0 : opts.nextSlide+1;
danielebarchiesi@2 148 opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
danielebarchiesi@2 149 } else {
danielebarchiesi@2 150 queueNext(opts);
danielebarchiesi@2 151 }
danielebarchiesi@2 152
danielebarchiesi@2 153 function queueNext(opts) {
danielebarchiesi@2 154 if (opts.timeout)
danielebarchiesi@2 155 p.cycleTimeout = setTimeout(function() { go(els,opts,0,!opts.rev); }, opts.timeout);
danielebarchiesi@2 156 }
danielebarchiesi@2 157 }
danielebarchiesi@2 158
danielebarchiesi@2 159 // advance slide forward or back
danielebarchiesi@2 160 function advance(els, opts, val) {
danielebarchiesi@2 161 var p = els[0].parentNode, timeout = p.cycleTimeout;
danielebarchiesi@2 162 if (timeout) {
danielebarchiesi@2 163 clearTimeout(timeout);
danielebarchiesi@2 164 p.cycleTimeout = 0;
danielebarchiesi@2 165 }
danielebarchiesi@2 166 opts.nextSlide = opts.currSlide + val;
danielebarchiesi@2 167 if (opts.nextSlide < 0) {
danielebarchiesi@2 168 opts.nextSlide = els.length - 1;
danielebarchiesi@2 169 }
danielebarchiesi@2 170 else if (opts.nextSlide >= els.length) {
danielebarchiesi@2 171 opts.nextSlide = 0;
danielebarchiesi@2 172 }
danielebarchiesi@2 173 go(els, opts, 1, val>=0);
danielebarchiesi@2 174 return false;
danielebarchiesi@2 175 }
danielebarchiesi@2 176
danielebarchiesi@2 177 $.fn.cycle.custom = function(curr, next, opts, cb) {
danielebarchiesi@2 178 var $l = $(curr), $n = $(next);
danielebarchiesi@2 179 $n.css(opts.cssBefore);
danielebarchiesi@2 180 var fn = function() {$n.animate(opts.animIn, opts.speedIn, opts.easeIn, cb);};
danielebarchiesi@2 181 $l.animate(opts.animOut, opts.speedOut, opts.easeOut, function() {
danielebarchiesi@2 182 $l.css(opts.cssAfter);
danielebarchiesi@2 183 if (!opts.sync)
danielebarchiesi@2 184 fn();
danielebarchiesi@2 185 });
danielebarchiesi@2 186 if (opts.sync)
danielebarchiesi@2 187 fn();
danielebarchiesi@2 188 };
danielebarchiesi@2 189
danielebarchiesi@2 190 $.fn.cycle.transitions = {
danielebarchiesi@2 191 fade: function($cont, $slides, opts) {
danielebarchiesi@2 192 $slides.not(':eq(0)').hide();
danielebarchiesi@2 193 opts.cssBefore = { opacity: 0, display: 'block' };
danielebarchiesi@2 194 opts.cssAfter = { display: 'none' };
danielebarchiesi@2 195 opts.animOut = { opacity: 0 };
danielebarchiesi@2 196 opts.animIn = { opacity: 1 };
danielebarchiesi@2 197 },
danielebarchiesi@2 198 fadeout: function($cont, $slides, opts) {
danielebarchiesi@2 199 opts.before.push(function(curr,next,opts,fwd) {
danielebarchiesi@2 200 $(curr).css('zIndex',opts.slideCount + (fwd === true ? 1 : 0));
danielebarchiesi@2 201 $(next).css('zIndex',opts.slideCount + (fwd === true ? 0 : 1));
danielebarchiesi@2 202 });
danielebarchiesi@2 203 $slides.not(':eq(0)').hide();
danielebarchiesi@2 204 opts.cssBefore = { opacity: 1, display: 'block', zIndex: 1 };
danielebarchiesi@2 205 opts.cssAfter = { display: 'none', zIndex: 0 };
danielebarchiesi@2 206 opts.animOut = { opacity: 0 };
danielebarchiesi@2 207 opts.animIn = { opacity: 1 };
danielebarchiesi@2 208 }
danielebarchiesi@2 209 };
danielebarchiesi@2 210
danielebarchiesi@2 211 $.fn.cycle.ver = function() { return ver; };
danielebarchiesi@2 212
danielebarchiesi@2 213 // @see: http://malsup.com/jquery/cycle/lite/
danielebarchiesi@2 214 $.fn.cycle.defaults = {
danielebarchiesi@2 215 animIn: {},
danielebarchiesi@2 216 animOut: {},
danielebarchiesi@2 217 fx: 'fade',
danielebarchiesi@2 218 after: null,
danielebarchiesi@2 219 before: null,
danielebarchiesi@2 220 cssBefore: {},
danielebarchiesi@2 221 cssAfter: {},
danielebarchiesi@2 222 delay: 0,
danielebarchiesi@2 223 fit: 0,
danielebarchiesi@2 224 height: 'auto',
danielebarchiesi@2 225 metaAttr: 'cycle',
danielebarchiesi@2 226 next: null,
danielebarchiesi@2 227 pause: false,
danielebarchiesi@2 228 prev: null,
danielebarchiesi@2 229 speed: 1000,
danielebarchiesi@2 230 slideExpr: null,
danielebarchiesi@2 231 sync: true,
danielebarchiesi@2 232 timeout: 4000
danielebarchiesi@2 233 };
danielebarchiesi@2 234
danielebarchiesi@2 235 })(jQuery);