diff --git a/js/jquery.jcarousel.js b/js/jquery.jcarousel.js index 57816f2..62fe464 100644 --- a/js/jquery.jcarousel.js +++ b/js/jquery.jcarousel.js @@ -534,6 +534,13 @@ pos: function(i, fv) { var pos = $jc.intval(this.list.css(this.lt)); + // Initialize the first element index so that if there is more space + // than we have elements in our carousel, the carousel starts + // wrapping immediately instead of using placeholders. + if (this.first === null) { + this.first = this.options.start; + } + if (this.locked || this.animating) { return pos; } diff --git a/js/jquery.jcarousel.min.js b/js/jquery.jcarousel.min.js index 5d9a91e..d2cbe7a 100644 --- a/js/jquery.jcarousel.min.js +++ b/js/jquery.jcarousel.min.js @@ -13,4 +13,4 @@ * http://billwscott.com/carousel/ */ -(function(g){var q={vertical:!1,rtl:!1,start:1,offset:1,size:null,scroll:3,visible:null,animation:"normal",easing:"swing",auto:0,wrap:null,initCallback:null,setupCallback:null,reloadCallback:null,itemLoadCallback:null,itemFirstInCallback:null,itemFirstOutCallback:null,itemLastInCallback:null,itemLastOutCallback:null,itemVisibleInCallback:null,itemVisibleOutCallback:null,animationStepCallback:null,buttonNextHTML:"
",buttonPrevHTML:"
",buttonNextEvent:"click",buttonPrevEvent:"click", buttonNextCallback:null,buttonPrevCallback:null,itemFallbackDimension:null},m=!1;g(window).bind("load.jcarousel",function(){m=!0});g.jcarousel=function(a,c){this.options=g.extend({},q,c||{});this.autoStopped=this.locked=!1;this.buttonPrevState=this.buttonNextState=this.buttonPrev=this.buttonNext=this.list=this.clip=this.container=null;if(!c||c.rtl===void 0)this.options.rtl=(g(a).attr("dir")||g("html").attr("dir")||"").toLowerCase()=="rtl";this.wh=!this.options.vertical?"width":"height";this.lt=!this.options.vertical? this.options.rtl?"right":"left":"top";for(var b="",d=a.className.split(" "),f=0;f").parent();if(this.container.size()===0)this.container=this.clip.wrap("
").parent();b!==""&&this.container.parent()[0].className.indexOf("jcarousel-skin")==-1&&this.container.wrap('
');this.buttonPrev=g(".jcarousel-prev",this.container);if(this.buttonPrev.size()===0&&this.options.buttonPrevHTML!==null)this.buttonPrev=g(this.options.buttonPrevHTML).appendTo(this.container);this.buttonPrev.addClass(this.className("jcarousel-prev"));this.buttonNext= g(".jcarousel-next",this.container);if(this.buttonNext.size()===0&&this.options.buttonNextHTML!==null)this.buttonNext=g(this.options.buttonNextHTML).appendTo(this.container);this.buttonNext.addClass(this.className("jcarousel-next"));this.clip.addClass(this.className("jcarousel-clip")).css({position:"relative"});this.list.addClass(this.className("jcarousel-list")).css({overflow:"hidden",position:"relative",top:0,margin:0,padding:0}).css(this.options.rtl?"right":"left",0);this.container.addClass(this.className("jcarousel-container")).css({position:"relative"}); !this.options.vertical&&this.options.rtl&&this.container.addClass("jcarousel-direction-rtl").attr("dir","rtl");var j=this.options.visible!==null?Math.ceil(this.clipping()/this.options.visible):null,b=this.list.children("li"),e=this;if(b.size()>0){var h=0,i=this.options.offset;b.each(function(){e.format(this,i++);h+=e.dimension(this,j)});this.list.css(this.wh,h+100+"px");if(!c||c.size===void 0)this.options.size=b.size()}this.container.css("display","block");this.buttonNext.css("display","block");this.buttonPrev.css("display", "block");this.funcNext=function(){e.next()};this.funcPrev=function(){e.prev()};this.funcResize=function(){e.resizeTimer&&clearTimeout(e.resizeTimer);e.resizeTimer=setTimeout(function(){e.reload()},100)};this.options.initCallback!==null&&this.options.initCallback(this,"init");!m&&g.browser.safari?(this.buttons(!1,!1),g(window).bind("load.jcarousel",function(){e.setup()})):this.setup()};var f=g.jcarousel;f.fn=f.prototype={jcarousel:"0.2.8"};f.fn.extend=f.extend=g.extend;f.fn.extend({setup:function(){this.prevLast= this.prevFirst=this.last=this.first=null;this.animating=!1;this.tail=this.resizeTimer=this.timer=null;this.inTail=!1;if(!this.locked){this.list.css(this.lt,this.pos(this.options.offset)+"px");var a=this.pos(this.options.start,!0);this.prevFirst=this.prevLast=null;this.animate(a,!1);g(window).unbind("resize.jcarousel",this.funcResize).bind("resize.jcarousel",this.funcResize);this.options.setupCallback!==null&&this.options.setupCallback(this)}},reset:function(){this.list.empty();this.list.css(this.lt, "0px");this.list.css(this.wh,"10px");this.options.initCallback!==null&&this.options.initCallback(this,"reset");this.setup()},reload:function(){this.tail!==null&&this.inTail&&this.list.css(this.lt,f.intval(this.list.css(this.lt))+this.tail);this.tail=null;this.inTail=!1;this.options.reloadCallback!==null&&this.options.reloadCallback(this);if(this.options.visible!==null){var a=this,c=Math.ceil(this.clipping()/this.options.visible),b=0,d=0;this.list.children("li").each(function(f){b+=a.dimension(this, c);f+1this.options.size)c=this.options.size;for(var b=a;b<=c;b++){var d=this.get(b);if(!d.length||d.hasClass("jcarousel-item-placeholder"))return!1}return!0}, get:function(a){return g(">.jcarousel-item-"+a,this.list)},add:function(a,c){var b=this.get(a),d=0,p=g(c);if(b.length===0)for(var j,e=f.intval(a),b=this.create(a);;){if(j=this.get(--e),e<=0||j.length){e<=0?this.list.prepend(b):j.after(b);break}}else d=this.dimension(b);p.get(0).nodeName.toUpperCase()=="LI"?(b.replaceWith(p),b=p):b.empty().append(c);this.format(b.removeClass(this.className("jcarousel-item-placeholder")),a);p=this.options.visible!==null?Math.ceil(this.clipping()/this.options.visible): null;d=this.dimension(b,p)-d;a>0&&a=this.first&&a<=this.last)){var b=this.dimension(c);athis.options.size?this.options.size:a);for(var d=this.first>a,g=this.options.wrap!="circular"&&this.first<=1?1:this.first,j=d?this.get(g): this.get(this.last),e=d?g:g-1,h=null,i=0,k=!1,l=0;d?--e>=a:++ethis.options.size)))j=this.get(this.index(e)),j.length&&(h=this.add(e,j.clone(!0)));j=h;l=this.dimension(h);k&&(i+=l);if(this.first!==null&&(this.options.wrap=="circular"||e>=1&&(this.options.size===null||e<= this.options.size)))b=d?b+l:b-l}for(var g=this.clipping(),m=[],o=0,n=0,j=this.get(a-1),e=a;++o;){h=this.get(e);k=!h.length;if(h.length===0){h=this.create(e).addClass(this.className("jcarousel-item-placeholder"));if(j.length===0)this.list.prepend(h);else j[d?"before":"after"](h);if(this.first!==null&&this.options.wrap=="circular"&&this.options.size!==null&&(e<=0||e>this.options.size))j=this.get(this.index(e)),j.length&&(h=this.add(e,j.clone(!0)))}j=h;l=this.dimension(h);if(l===0)throw Error("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting..."); this.options.wrap!="circular"&&this.options.size!==null&&e>this.options.size?m.push(h):k&&(i+=l);n+=l;if(n>=g)break;e++}for(h=0;h0&&(this.list.css(this.wh,this.dimension(this.list)+i+"px"),d&&(b-=i,this.list.css(this.lt,f.intval(this.list.css(this.lt))-i+"px")));i=a+o-1;if(this.options.wrap!="circular"&&this.options.size&&i>this.options.size)i=this.options.size;if(e>i){o=0;e=i;for(n=0;++o;){h=this.get(e--);if(!h.length)break;n+=this.dimension(h);if(n>=g)break}}e=i-o+ 1;this.options.wrap!="circular"&&e<1&&(e=1);if(this.inTail&&d)b+=this.tail,this.inTail=!1;this.tail=null;if(this.options.wrap!="circular"&&i==this.options.size&&i-o+1>=1&&(d=f.intval(this.get(i).css(!this.options.vertical?"marginRight":"marginBottom")),n-d>g))this.tail=n-g-d;if(c&&a===this.options.size&&this.tail)b-=this.tail,this.inTail=!0;for(;a-- >e;)b+=this.dimension(this.get(a));this.prevFirst=this.first;this.prevLast=this.last;this.first=e;this.last=i;return b},animate:function(a,c){if(!this.locked&& !this.animating){this.animating=!0;var b=this,d=function(){b.animating=!1;a===0&&b.list.css(b.lt,0);!b.autoStopped&&(b.options.wrap=="circular"||b.options.wrap=="both"||b.options.wrap=="last"||b.options.size===null||b.last=b.first&&c<=b.last)&&(c<1||c>b.options.size)&&b.remove(c)}; this.notify("onBeforeAnimation");if(!this.options.animation||c===!1)this.list.css(this.lt,a+"px"),d();else{var f=!this.options.vertical?this.options.rtl?{right:a}:{left:a}:{top:a},d={duration:this.options.animation,easing:this.options.easing,complete:d};if(g.isFunction(this.options.animationStepCallback))d.step=this.options.animationStepCallback;this.list.animate(f,d)}}},startAuto:function(a){if(a!==void 0)this.options.auto=a;if(this.options.auto===0)return this.stopAuto();if(this.timer===null){this.autoStopped= !1;var c=this;this.timer=window.setTimeout(function(){c.next()},this.options.auto*1E3)}},stopAuto:function(){this.pauseAuto();this.autoStopped=!0},pauseAuto:function(){if(this.timer!==null)window.clearTimeout(this.timer),this.timer=null},buttons:function(a,c){if(a==null&&(a=!this.locked&&this.options.size!==0&&(this.options.wrap&&this.options.wrap!="first"||this.options.size===null||this.last=this.options.size))a=this.tail!==null&&!this.inTail;if(c==null&&(c=!this.locked&&this.options.size!==0&&(this.options.wrap&&this.options.wrap!="last"||this.first>1),!this.locked&&(!this.options.wrap||this.options.wrap=="last")&&this.options.size!==null&&this.first==1))c=this.tail!==null&&this.inTail;var b=this;this.buttonNext.size()>0?(this.buttonNext.unbind(this.options.buttonNextEvent+".jcarousel",this.funcNext),a&&this.buttonNext.bind(this.options.buttonNextEvent+".jcarousel",this.funcNext), this.buttonNext[a?"removeClass":"addClass"](this.className("jcarousel-next-disabled")).attr("disabled",a?!1:!0),this.options.buttonNextCallback!==null&&this.buttonNext.data("jcarouselstate")!=a&&this.buttonNext.each(function(){b.options.buttonNextCallback(b,this,a)}).data("jcarouselstate",a)):this.options.buttonNextCallback!==null&&this.buttonNextState!=a&&this.options.buttonNextCallback(b,null,a);this.buttonPrev.size()>0?(this.buttonPrev.unbind(this.options.buttonPrevEvent+".jcarousel",this.funcPrev), c&&this.buttonPrev.bind(this.options.buttonPrevEvent+".jcarousel",this.funcPrev),this.buttonPrev[c?"removeClass":"addClass"](this.className("jcarousel-prev-disabled")).attr("disabled",c?!1:!0),this.options.buttonPrevCallback!==null&&this.buttonPrev.data("jcarouselstate")!=c&&this.buttonPrev.each(function(){b.options.buttonPrevCallback(b,this,c)}).data("jcarouselstate",c)):this.options.buttonPrevCallback!==null&&this.buttonPrevState!=c&&this.options.buttonPrevCallback(b,null,c);this.buttonNextState= a;this.buttonPrevState=c},notify:function(a){var c=this.prevFirst===null?"init":this.prevFirst=j&&k<=e)&&a(k)}}},create:function(a){return this.format("
  • ",a)},format:function(a,c){for(var a=g(a),b=a.get(0).className.split(" "),d=0;d",buttonPrevHTML:"
    ",buttonNextEvent:"click",buttonPrevEvent:"click",buttonNextCallback:null,buttonPrevCallback:null,itemFallbackDimension:null},s=!1;t(window).bind("load.jcarousel",function(){s=!0}),t.jcarousel=function(n,l){this.options=t.extend({},i,l||{}),this.locked=!1,this.autoStopped=!1,this.container=null,this.clip=null,this.list=null,this.buttonNext=null,this.buttonPrev=null,this.buttonNextState=null,this.buttonPrevState=null,l&&void 0!==l.rtl||(this.options.rtl="rtl"==(t(n).attr("dir")||t("html").attr("dir")||"").toLowerCase()),this.wh=this.options.vertical?"height":"width",this.lt=this.options.vertical?"top":this.options.rtl?"right":"left";for(var o="",e=n.className.split(" "),a=0;a").parent()),0===this.container.size()&&(this.container=this.clip.wrap("
    ").parent()),""!==o&&-1==this.container.parent()[0].className.indexOf("jcarousel-skin")&&this.container.wrap('
    '),this.buttonPrev=t(".jcarousel-prev",this.container),0===this.buttonPrev.size()&&null!==this.options.buttonPrevHTML&&(this.buttonPrev=t(this.options.buttonPrevHTML).appendTo(this.container)),this.buttonPrev.addClass(this.className("jcarousel-prev")),this.buttonNext=t(".jcarousel-next",this.container),0===this.buttonNext.size()&&null!==this.options.buttonNextHTML&&(this.buttonNext=t(this.options.buttonNextHTML).appendTo(this.container)),this.buttonNext.addClass(this.className("jcarousel-next")),this.clip.addClass(this.className("jcarousel-clip")).css({position:"relative"}),this.list.addClass(this.className("jcarousel-list")).css({overflow:"hidden",position:"relative",top:0,margin:0,padding:0}).css(this.options.rtl?"right":"left",0),this.container.addClass(this.className("jcarousel-container")).css({position:"relative"}),!this.options.vertical&&this.options.rtl&&this.container.addClass("jcarousel-direction-rtl").attr("dir","rtl");var h=null!==this.options.visible?Math.ceil(this.clipping()/this.options.visible):null,r=this.list.children("li"),c=this;if(r.size()>0){var u=0,p=this.options.offset;r.each(function(){c.format(this,p++),u+=c.dimension(this,h)}),this.list.css(this.wh,u+100+"px"),l&&void 0!==l.size||(this.options.size=r.size())}this.container.css("display","block"),this.buttonNext.css("display","block"),this.buttonPrev.css("display","block"),this.funcNext=function(){c.next()},this.funcPrev=function(){c.prev()},this.funcResize=function(){c.resizeTimer&&clearTimeout(c.resizeTimer),c.resizeTimer=setTimeout(function(){c.reload()},100)},null!==this.options.initCallback&&this.options.initCallback(this,"init"),!s&&t.browser.safari?(this.buttons(!1,!1),t(window).bind("load.jcarousel",function(){c.setup()})):this.setup()};var n=t.jcarousel;n.fn=n.prototype={jcarousel:"0.2.8"},n.fn.extend=n.extend=t.extend,n.fn.extend({setup:function(){if(this.first=null,this.last=null,this.prevFirst=null,this.prevLast=null,this.animating=!1,this.timer=null,this.resizeTimer=null,this.tail=null,this.inTail=!1,!this.locked){this.list.css(this.lt,this.pos(this.options.offset)+"px");var i=this.pos(this.options.start,!0);this.prevFirst=this.prevLast=null,this.animate(i,!1),t(window).unbind("resize.jcarousel",this.funcResize).bind("resize.jcarousel",this.funcResize),null!==this.options.setupCallback&&this.options.setupCallback(this)}},reset:function(){this.list.empty(),this.list.css(this.lt,"0px"),this.list.css(this.wh,"10px"),null!==this.options.initCallback&&this.options.initCallback(this,"reset"),this.setup()},reload:function(){if(null!==this.tail&&this.inTail&&this.list.css(this.lt,n.intval(this.list.css(this.lt))+this.tail),this.tail=null,this.inTail=!1,null!==this.options.reloadCallback&&this.options.reloadCallback(this),null!==this.options.visible){var t=this,i=Math.ceil(this.clipping()/this.options.visible),s=0,l=0;this.list.children("li").each(function(n){s+=t.dimension(this,i),n+1this.options.size&&(i=this.options.size);for(var s=t;i>=s;s++){var n=this.get(s);if(!n.length||n.hasClass("jcarousel-item-placeholder"))return!1}return!0},get:function(i){return t(">.jcarousel-item-"+i,this.list)},add:function(i,s){var l=this.get(i),o=0,e=t(s);if(0===l.length){var a,h=n.intval(i);for(l=this.create(i);;)if(a=this.get(--h),0>=h||a.length){0>=h?this.list.prepend(l):a.after(l);break}}else o=this.dimension(l);"LI"==e.get(0).nodeName.toUpperCase()?(l.replaceWith(e),l=e):l.empty().append(s),this.format(l.removeClass(this.className("jcarousel-item-placeholder")),i);var r=null!==this.options.visible?Math.ceil(this.clipping()/this.options.visible):null,c=this.dimension(l,r)-o;return i>0&&i=this.first&&t<=this.last)){var s=this.dimension(i);tt?1:this.options.size&&t>this.options.size?this.options.size:t);for(var l,o=this.first>t,e="circular"!=this.options.wrap&&this.first<=1?1:this.first,a=o?this.get(e):this.get(this.last),h=o?e:e-1,r=null,c=0,u=!1,p=0;o?--h>=t:++h=h||h>this.options.size)&&(l=this.get(this.index(h)),l.length&&(r=this.add(h,l.clone(!0))))),a=r,p=this.dimension(r),u&&(c+=p),null!==this.first&&("circular"==this.options.wrap||h>=1&&(null===this.options.size||h<=this.options.size))&&(s=o?s+p:s-p);var f=this.clipping(),d=[],v=0,b=0;for(a=this.get(t-1),h=t;++v;){if(r=this.get(h),u=!r.length,0===r.length&&(r=this.create(h).addClass(this.className("jcarousel-item-placeholder")),0===a.length?this.list.prepend(r):a[o?"before":"after"](r),null!==this.first&&"circular"==this.options.wrap&&null!==this.options.size&&(0>=h||h>this.options.size)&&(l=this.get(this.index(h)),l.length&&(r=this.add(h,l.clone(!0))))),a=r,p=this.dimension(r),0===p)throw new Error("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...");if("circular"!=this.options.wrap&&null!==this.options.size&&h>this.options.size?d.push(r):u&&(c+=p),b+=p,b>=f)break;h++}for(var m=0;m0&&(this.list.css(this.wh,this.dimension(this.list)+c+"px"),o&&(s-=c,this.list.css(this.lt,n.intval(this.list.css(this.lt))-c+"px")));var k=t+v-1;if("circular"!=this.options.wrap&&this.options.size&&k>this.options.size&&(k=this.options.size),h>k)for(v=0,h=k,b=0;++v&&(r=this.get(h--),r.length)&&(b+=this.dimension(r),!(b>=f)););var g=k-v+1;if("circular"!=this.options.wrap&&1>g&&(g=1),this.inTail&&o&&(s+=this.tail,this.inTail=!1),this.tail=null,"circular"!=this.options.wrap&&k==this.options.size&&k-v+1>=1){var x=n.intval(this.get(k).css(this.options.vertical?"marginBottom":"marginRight"));b-x>f&&(this.tail=b-f-x)}for(i&&t===this.options.size&&this.tail&&(s-=this.tail,this.inTail=!0);t-->g;)s+=this.dimension(this.get(t));return this.prevFirst=this.first,this.prevLast=this.last,this.first=g,this.last=k,s},animate:function(i,s){if(!this.locked&&!this.animating){this.animating=!0;var n=this,l=function(){if(n.animating=!1,0===i&&n.list.css(n.lt,0),!n.autoStopped&&("circular"==n.options.wrap||"both"==n.options.wrap||"last"==n.options.wrap||null===n.options.size||n.last=n.first&&t<=n.last||!(1>t||t>n.options.size)||n.remove(t)};if(this.notify("onBeforeAnimation"),this.options.animation&&s!==!1){var o=this.options.vertical?{top:i}:this.options.rtl?{right:i}:{left:i},e={duration:this.options.animation,easing:this.options.easing,complete:l};t.isFunction(this.options.animationStepCallback)&&(e.step=this.options.animationStepCallback),this.list.animate(o,e)}else this.list.css(this.lt,i+"px"),l()}},startAuto:function(t){if(void 0!==t&&(this.options.auto=t),0===this.options.auto)return this.stopAuto();if(null===this.timer){this.autoStopped=!1;var i=this;this.timer=window.setTimeout(function(){i.next()},1e3*this.options.auto)}},stopAuto:function(){this.pauseAuto(),this.autoStopped=!0},pauseAuto:function(){null!==this.timer&&(window.clearTimeout(this.timer),this.timer=null)},buttons:function(t,i){null==t&&(t=!this.locked&&0!==this.options.size&&(this.options.wrap&&"first"!=this.options.wrap||null===this.options.size||this.last=this.options.size)||(t=null!==this.tail&&!this.inTail)),null==i&&(i=!this.locked&&0!==this.options.size&&(this.options.wrap&&"last"!=this.options.wrap||this.first>1),this.locked||this.options.wrap&&"last"!=this.options.wrap||null===this.options.size||1!=this.first||(i=null!==this.tail&&this.inTail));var s=this;this.buttonNext.size()>0?(this.buttonNext.unbind(this.options.buttonNextEvent+".jcarousel",this.funcNext),t&&this.buttonNext.bind(this.options.buttonNextEvent+".jcarousel",this.funcNext),this.buttonNext[t?"removeClass":"addClass"](this.className("jcarousel-next-disabled")).attr("disabled",t?!1:!0),null!==this.options.buttonNextCallback&&this.buttonNext.data("jcarouselstate")!=t&&this.buttonNext.each(function(){s.options.buttonNextCallback(s,this,t)}).data("jcarouselstate",t)):null!==this.options.buttonNextCallback&&this.buttonNextState!=t&&this.options.buttonNextCallback(s,null,t),this.buttonPrev.size()>0?(this.buttonPrev.unbind(this.options.buttonPrevEvent+".jcarousel",this.funcPrev),i&&this.buttonPrev.bind(this.options.buttonPrevEvent+".jcarousel",this.funcPrev),this.buttonPrev[i?"removeClass":"addClass"](this.className("jcarousel-prev-disabled")).attr("disabled",i?!1:!0),null!==this.options.buttonPrevCallback&&this.buttonPrev.data("jcarouselstate")!=i&&this.buttonPrev.each(function(){s.options.buttonPrevCallback(s,this,i)}).data("jcarouselstate",i)):null!==this.options.buttonPrevCallback&&this.buttonPrevState!=i&&this.options.buttonPrevCallback(s,null,i),this.buttonNextState=t,this.buttonPrevState=i},notify:function(t){var i=null===this.prevFirst?"init":this.prevFirst=u;u++)null===u||u>=e&&a>=u||c(u)}}},create:function(t){return this.format("
  • ",t)},format:function(i,s){i=t(i);for(var n=i.get(0).className.split(" "),l=0;l