/** * koslider - KOslider is a jQuery slider/carousel plugin that uses CSS3 transitions for its animation * @version v0.5.0 * @link https://github.com/mrmartineau/KOslider * @license MIT */ Function.prototype.debounce=function(e){var t=this,i=null,n=e;return function(){function e(){t.apply(o,s),i=null}var o=this,s=arguments;i&&clearTimeout(i),i=setTimeout(e,n)}},function($,f){var KOslider=function(){var _=this;_.options={keys:!1,dots:!0,dotsClick:!1,arrows:!0,sliderEl:".KOslider",slide:".KOslider-slide",uiPosition:"before",customPrevBtnClass:void 0,customNextBtnClass:void 0,debug:!1,setHeight:"auto",autoplay:!1,autoplayInterval:4e3,swipe:!1,itemWidth:void 0,inactiveClass:"KOslider--inactive",activeClass:"KOslider--active",callbacks:{}},_.init=function(e,t){if(_.options=$.extend(_.options,t),_.el=e,_.slider=e.find(_.options.sliderEl),_.slide=_.slider.find(_.options.slide),_.options.debug&&console.log("KOslider ::\n Options:\n ",_.options),_.slide.length<2)return e.addClass(_.options.inactiveClass),void(_.options.debug&&console.log("KOslider :: not enough elements to make a slider",t));var t=_.options,i=_.slide,n=i.length;return _.leftOffset=0,_.index=0,_.min=0,_.count=n-1,$(window).resize($.proxy(_.getWidth.debounce(500),this)).trigger("resize"),_.el.on("click",".KOslider-UI-btn",function(e){e.preventDefault();var t=$(this).data("fn");_[t]()}),t.keys&&_.keypresses(),t.dotsClick&&_.dotsClick(),t.autoplay&&_.autoplay(),t.swipe&&_.swipe(),_},$.fn.KOslider.destroy=function(){_.slider.css("width","auto").data({KOslider:void 0,key:void 0}),_.slider.find(".KOslider-UI").remove(),_.slide.css("width","auto")},_["goto"]=function(x){_.tooThin?(_.leftOffset=0,_.reachedEnd=!1):_.leftOffset<_.max||-(x*_.itemWidth)<_.max?(_.leftOffset=_.max,_.reachedEnd=!0,_.options.debug&&console.log("KOslider :: reachedEnd = true")):(_.leftOffset=-(x*_.itemWidth),_.reachedEnd=!1),_.index=x,_.setHeight(x),_.slider.css("transform","translateX("+_.leftOffset+"px)"),_.options.debug&&console.log("KOslider ::\n _.goto() :: \n x",x,"\n leftOffset:",_.leftOffset,"\n index",_.index,"\n itemWidth:",_.itemWidth,"\n move amount:",_.leftOffset/_.index),_.navState(),void 0!==_.options.callbacks.onChange&&eval(_.options.callbacks.onChange)},_.next=function(){var e;return _.index<_.count?(e=_.index+1,void _["goto"](e)):void(e=_.count)},_.prev=function(){var e;return _.index>0?(e=_.index-1,void _["goto"](e)):void(e=0)},_.navState=function(){var e,t;e=0===_.index?!0:!1,t=_.index===_.count||_.reachedEnd?!0:!1,_.el.find(".KOslider-UI-btn--previous").prop("disabled",e),_.el.find(".KOslider-UI-btn--next").prop("disabled",t),_.el.find(".KOslider-UI-dot").eq(_.index).addClass("is-active").siblings().removeClass("is-active")},_.getWidth=function(){_.itemWidth=parseInt(_.options.itemWidth)>0?parseInt(_.options.itemWidth):_.el.width(),_.setSize(_.itemWidth)},_.setSize=function(e){var t=_.el.width(),i=_.slide.length*e;_.max=Math.round(-(i-t)),_.leftOffset=-(e*_.index),_.slider.css({width:Math.round(i),transform:"translateX("+_.leftOffset+"px)"}),_.slide.css({width:e}),_.setHeight(_.index),i>t?0===_.el.find(".KOslider-UI").length&&(_.createUI(),_.tooThin=!1):(_.el.find(".KOslider-UI").remove(),_.tooThin=!0,0!==_.leftOffset&&(_.leftOffset=0,_["goto"](0))),_.options.debug&&console.log("KOslider ::\n _.setSize() :: \n _.max:",_.max,"\n _.min:",_.min,"\n leftOffset:",_.leftOffset,"\n index",_.index,"\n itemWidth:",_.itemWidth,"\n _.slide.length",_.slide.length,"\n $sliderWidth",i)},_.setHeight=function(e){if("auto"==_.options.setHeight){var t=_.slide.eq(e).height();_.slider.height(t)}else"equal"==_.options.setHeight&&_.equalizeHeights()},_.equalizeHeights=function(){_.options.debug&&console.log("Equal true");var e=0,t=_.options.equaliseEl;_.slider.find(t).each(function(){$(this).removeAttr("style"),$(this).height()>e&&(e=$(this).height())}),_.slider.find(t).css("height",e),_.options.debug&&console.log("KOslider ::\n _.equalizeHeights() :: \n highestBox:",e)},_.createUI=function(){html='<div class="KOslider-UI KOslider-UI--'+_.options.uiPosition+' clearfix"><div class="KOslider-UI-pagers">',_.options.arrows&&(html+='<button class="KOslider-UI-btn KOslider-UI-btn--previous '+_.options.customPrevBtnClass+'" data-fn="prev" disabled>Previous</button>'),_.options.dots&&(html+='<div class="KOslider-UI-dots">',$.each(_.slide,function(){html+='<span class="KOslider-UI-dot"></span>'}),html+="</div>"),_.options.arrows&&(html+='<button class="KOslider-UI-btn KOslider-UI-btn--next '+_.options.customNextBtnClass+'" data-fn="next">Next</button>'),html+="</div></div>","before"==_.options.uiPosition&&_.el.prepend(html),"after"==_.options.uiPosition&&_.el.append(html),_.el.find(".KOslider-UI-dot").eq(0).addClass("is-active")},_.keypresses=function(){$(document).keydown(function(e){var t=e.which;37==t?_.prev():39==t&&_.next()})},_.dotsClick=function(){_.el.on("click",".KOslider-UI-dot",function(e){e.preventDefault();var t=$(this).index();_.options.debug&&console.log("target",t),_["goto"](t)})},_.autoplay=function(){function e(){var e=_.index<_.count?_.index+1:0;_["goto"](e)}_.options.debug&&console.log("KOslider :: Autoplay KOslider. Are you sure you want this??");var t=window.setInterval(e,_.options.autoplayInterval);_.el.on({mouseover:function(){window.clearInterval(t),t=null},mouseout:function(){t=window.setInterval(e,_.options.autoplayInterval)}})},_.swipe=function(){function e(n){_.slide.off("touchstart",e),_.options.debug&&console.log("KOslider :: touchStartHandler event",n);var o=n.originalEvent.changedTouches[0];d.x=void 0!==o.pageX?o.pageX:o.clientX,d.y=void 0!==o.pageY?o.pageY:o.clientY,_.slide.on("touchmove",t),$(window).on("touchend",i)}function t(e){var t=e.originalEvent.touches[0],i=void 0!==t.pageX?t.pageX:t.clientX,o=void 0!==t.pageY?t.pageY:t.clientY;return Math.abs(d.y-o)>s.swipeMaxDrift?void n():void(Math.abs(d.x-i)>=s.swipeDistance&&(_.options.debug&&console.debug("KOslider :: swipe occurred. pixels swiped:",Math.abs(d.x-i)),i>d.x?_.prev():_.next(),n()))}function i(){_.options.debug&&console.log("KOslider :: touchEndHandler event",event),n()}function n(){l&&(_.slide.off("touchmove",t),$(window).off("touchend",i),_.slide.on("touchstart",e))}function o(t,i){l||(l=!0,d={x:0,y:0},s.swipeDistance=t,s.swipeMaxDrift=i,_.slide.on("touchstart",e))}var s=_.swipe,l=!1,d=null;s.swipeDistance=null,s.swipeMaxDrift=null,o(100,40)}};$.fn.KOslider=function(){var e=this.length;return this.each(function(t){var i=$(this),n="KOslider"+(e>1?"-"+ ++t:""),o=i.data("koslider"),s=(new KOslider).init(i,o);i.data(n,s).data("key",n)})},$("[data-koslider]").KOslider(),KOslider.version="0.5.0"}(jQuery,!1);