forked from Pagawa/PgwSlideshow
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpgwslideshow.min.js
9 lines (9 loc) · 12.6 KB
/
pgwslideshow.min.js
1
2
3
4
5
6
7
8
9
/**
* PgwSlideshow - Version 2.0
*
* Copyright 2014, Jonathan M. Piat
* http://pgwjs.com - http://pagawa.com
*
* Released under the GNU GPLv3 license - http://opensource.org/licenses/gpl-3.0
*/
!function(a){a.fn.pgwSlideshow=function(b){var c={mainClassName:"pgwSlideshow",transitionEffect:"sliding",displayList:!0,displayControls:!0,touchControls:!0,autoSlide:!1,beforeSlide:!1,afterSlide:!1,maxHeight:null,adaptiveDuration:200,transitionDuration:500,intervalDuration:3e3,pauseOnHovering:!0};if(0==this.length)return this;if(this.length>1)return this.each(function(){a(this).pgwSlideshow(b)}),this;var d=this;d.plugin=this,d.config={},d.data=[],d.currentSlide=0,d.slideCount=0,d.resizeEvent=null,d.intervalEvent=null,d.touchFirstPosition=null,d.touchListLastPosition=!1,d.window=a(window);var e=function(){return d.config=a.extend({},c,b),i(),d.config.displayList&&p(),d.window.resize(function(){clearTimeout(d.resizeEvent),d.resizeEvent=setTimeout(function(){h();var a=d.plugin.find(".ps-current > ul > li.elt_"+d.currentSlide+" img").height();f(a),d.config.displayList&&(p(),q())},100)}),d.config.autoSlide&&o(),!0},f=function(a,b){return d.config.maxHeight&&a+d.plugin.find(".ps-list").height()>d.config.maxHeight&&(a=d.config.maxHeight-d.plugin.find(".ps-list").height()),"function"==typeof d.plugin.find(".ps-current").animate?d.plugin.find(".ps-current").stop().animate({height:a},d.config.adaptiveDuration,function(){d.config.maxHeight&&d.plugin.find(".ps-current > ul > li img").css("max-height",a+"px")}):(d.plugin.find(".ps-current").css("height",a),d.config.maxHeight&&d.plugin.find(".ps-current > ul > li img").css("max-height",a+"px")),!0},g=function(){var b=0;return d.plugin.show(),d.plugin.find(".ps-list > ul > li").show().each(function(){b+=a(this).width()}),d.plugin.find(".ps-list > ul").width(b),!0},h=function(){return d.plugin.width()<=480?d.plugin.addClass("narrow").removeClass("wide"):d.plugin.addClass("wide").removeClass("narrow"),!0},i=function(){if(d.plugin.removeClass("pgwSlideshow").removeClass(d.config.mainClassName),d.plugin.wrap('<div class="ps-list"></div>'),d.plugin=d.plugin.parent(),d.plugin.wrap('<div class="'+d.config.mainClassName+'"></div>'),d.plugin=d.plugin.parent(),d.plugin.prepend('<div class="ps-current"><ul></ul><span class="ps-caption"></span></div>'),d.slideCount=d.plugin.find(".ps-list > ul > li").length,0==d.slideCount)throw new Error("pgwSlideshow - No slider item has been found");d.slideCount>1&&(d.config.displayControls&&(d.plugin.find(".ps-current").prepend('<span class="ps-prev"><span class="ps-prevIcon"></span></span>'),d.plugin.find(".ps-current").append('<span class="ps-next"><span class="ps-nextIcon"></span></span>'),d.plugin.find(".ps-current .ps-prev").click(function(){d.previousSlide()}),d.plugin.find(".ps-current .ps-next").click(function(){d.nextSlide()})),d.config.touchControls&&(d.plugin.find(".ps-current").on("touchstart",function(a){try{a.originalEvent.touches[0].clientX&&null==d.touchFirstPosition&&(d.touchFirstPosition=a.originalEvent.touches[0].clientX)}catch(a){d.touchFirstPosition=null}}),d.plugin.find(".ps-current").on("touchmove",function(a){try{a.originalEvent.touches[0].clientX&&null!=d.touchFirstPosition&&(a.originalEvent.touches[0].clientX>d.touchFirstPosition+50?(d.touchFirstPosition=null,d.previousSlide()):a.originalEvent.touches[0].clientX<d.touchFirstPosition-50&&(d.touchFirstPosition=null,d.nextSlide()))}catch(a){d.touchFirstPosition=null}}),d.plugin.find(".ps-current").on("touchend",function(a){d.touchFirstPosition=null})));var b=1;return d.plugin.find(".ps-list > ul > li").each(function(){var c=j(a(this));c.id=b,d.data.push(c),a(this).addClass("elt_"+c.id),a(this).wrapInner('<span class="ps-item'+(1==b?" ps-selected":"")+'"></span>');var e=a('<li class="elt_'+b+'"></li>');c.image?e.html('<img src="'+c.image+'" alt="'+(c.title?c.title:"")+'">'):c.thumbnail&&e.html('<img src="'+c.thumbnail+'" alt="'+(c.title?c.title:"")+'">'),c.link&&e.html('<a href="'+c.link+'"'+(c.linkTarget?' target="'+c.linkTarget+'"':"")+">"+e.html()+"</a>"),d.plugin.find(".ps-current > ul").append(e),a(this).css("cursor","pointer").click(function(a){a.preventDefault(),n(c.id)}),b++}),d.config.displayList?(g(),d.plugin.find(".ps-list").prepend('<span class="ps-prev"><span class="ps-prevIcon"></span></span>'),d.plugin.find(".ps-list").append('<span class="ps-next"><span class="ps-nextIcon"></span></span>'),d.plugin.find(".ps-list").show()):d.plugin.find(".ps-list").hide(),d.config.autoSlide&&d.config.pauseOnHovering&&d.plugin.on("mouseenter",function(){clearInterval(d.intervalEvent),d.intervalEvent=null}).on("mouseleave",function(){o()}),d.plugin.find(".ps-current > ul > li").hide(),n(1),d.plugin.find(".ps-current > ul > li.elt_1 img").on("load",function(){h();var a=d.plugin.find(".ps-current > ul > li.elt_1 img").height();f(a)}),h(),d.plugin.show(),!0},j=function(a){var b={},c=a.find("a").attr("href");if("undefined"!=typeof c&&""!=c){b.link=c;var d=a.find("a").attr("target");"undefined"!=typeof d&&""!=d&&(b.linkTarget=d)}var e=a.find("img").attr("src");"undefined"!=typeof e&&""!=e&&(b.thumbnail=e);var f=a.find("img").attr("data-large-src");"undefined"!=typeof f&&""!=f&&(b.image=f);var g=a.find("img").attr("alt");"undefined"!=typeof g&&""!=g&&(b.title=g);var h=a.find("img").attr("data-description");return"undefined"!=typeof h&&""!=h&&(b.description=h),b},k=function(a){var b="";a.title&&(b+="<b>"+a.title+"</b>"),a.description&&(""!=b&&(b+="<br>"),b+=a.description),""!=b&&(a.link&&(b='<a href="'+a.link+'"'+(a.linkTarget?' target="'+a.linkTarget+'"':"")+">"+b+"</a>"),"function"==typeof d.plugin.find(".ps-caption").fadeIn?(d.plugin.find(".ps-caption").html(b),d.plugin.find(".ps-caption").fadeIn(d.config.transitionDuration/2)):(d.plugin.find(".ps-caption").html(b),d.plugin.find(".ps-caption").show())),d.plugin.find(".ps-list > ul > li .ps-item").removeClass("ps-selected"),d.plugin.find(".ps-list > ul > li.elt_"+a.id+" .ps-item").addClass("ps-selected"),d.config.displayList&&(p(),q()),d.config.displayControls&&("function"==typeof d.plugin.find(".ps-current > .ps-prev").fadeIn?d.plugin.find(".ps-current > .ps-prev, .ps-current > .ps-next").fadeIn(d.config.transitionDuration/2):d.plugin.find(".ps-current > .ps-prev, .ps-current > .ps-next").show()),"function"==typeof d.config.afterSlide&&d.config.afterSlide(a.id);var c=d.plugin.find(".ps-current .elt_"+a.id+" img").height();return f(c,!0),!0},l=function(b){var c=d.plugin.find(".ps-current > ul");if(c.find("li").not(".elt_"+d.currentSlide).not(".elt_"+b.id).each(function(){"function"==typeof a(this).stop&&a(this).stop(),a(this).css("position","").css("z-index",1).hide()}),d.currentSlide>0){var e=c.find(".elt_"+d.currentSlide);"function"!=typeof e.animate&&(e.animate=function(a,b,c){e.css(a),c&&c()}),"function"==typeof e.stop&&e.stop(),e.css("position","absolute").animate({opacity:0},d.config.transitionDuration,function(){e.css("position","").css("z-index",1).hide()})}d.currentSlide=b.id;var f=c.find(".elt_"+b.id);return"function"!=typeof f.animate&&(f.animate=function(a,b,c){f.css(a),c&&c()}),"function"==typeof f.stop&&f.stop(),f.css("position","absolute").show().animate({opacity:1},d.config.transitionDuration,function(){f.css("position","").css("z-index",2).css("display","block"),k(b)}),!0},m=function(a,b){var c=d.plugin.find(".ps-current > ul");if("undefined"==typeof b&&(b="left"),0==d.currentSlide)c.find(".elt_1").css({position:"",left:"",opacity:1,"z-index":2}).show(),d.plugin.find(".ps-list > li.elt_1").css("opacity","1"),k(a);else{if(d.transitionInProgress)return!1;d.transitionInProgress=!0;var e=c.width();if("left"==b)var f=-e,g=e;else var f=e,g=-e;var h=c.find(".elt_"+d.currentSlide);"function"!=typeof h.animate&&(h.animate=function(a,b,c){h.css(a),c&&c()}),h.css("position","absolute").animate({left:f},d.config.transitionDuration,function(){h.css("position","").css("z-index",1).css("left","").css("opacity",0).hide()});var i=c.find(".elt_"+a.id);"function"!=typeof i.animate&&(i.animate=function(a,b,c){i.css(a),c&&c()}),i.css("position","absolute").css("left",g).css("opacity",1).show().animate({left:0},d.config.transitionDuration,function(){i.css("position","").css("left","").css("z-index",2).show(),d.transitionInProgress=!1,k(a)})}return d.currentSlide=a.id,!0},n=function(a,b,c){if(a==d.currentSlide)return!1;var e=d.data[a-1];if("undefined"==typeof e)throw new Error("pgwSlideshow - The element "+a+" is undefined");return"undefined"==typeof c&&(c="left"),"function"==typeof d.config.beforeSlide&&d.config.beforeSlide(a),"function"==typeof d.plugin.find(".ps-caption").fadeOut?d.plugin.find(".ps-caption, .ps-prev, .ps-next").fadeOut(d.config.transitionDuration/2):d.plugin.find(".ps-caption, .ps-prev, .ps-next").hide(),"sliding"==d.config.transitionEffect?m(e,c):l(e),"undefined"!=typeof b&&d.config.autoSlide&&o(),!0},o=function(){return clearInterval(d.intervalEvent),d.slideCount>1&&d.config.autoSlide&&(d.intervalEvent=setInterval(function(){if(d.currentSlide+1<=d.slideCount)var a=d.currentSlide+1;else var a=1;n(a)},d.config.intervalDuration)),!0},p=function(){if(!d.config.displayList)return!1;g();var a=d.plugin.find(".ps-list"),b=a.width(),c=d.plugin.find(".ps-list > ul"),e=c.width();if(e>b){c.css("margin","0 45px");var f=parseInt(c.css("margin-left")),h=parseInt(c.css("margin-right"));b-=f+h,a.find(".ps-prev").show().unbind("click").click(function(){var a=parseInt(c.css("left")),f=a+b;0==a?f=-(e-b):f>0&&(f=0),"function"==typeof c.animate?c.animate({left:f},d.config.transitionDuration):c.css("left",f)}),a.find(".ps-next").show().unbind("click").click(function(){var a=parseInt(c.css("left")),f=a-b,g=-(e-b);a==g?f=0:f<g&&(f=g),"function"==typeof c.animate?c.animate({left:f},d.config.transitionDuration):c.css("left",f)}),d.config.touchControls&&(d.plugin.find(".ps-list > ul").on("touchmove",function(b){try{if(b.originalEvent.touches[0].clientX){var e=0==d.touchListLastPosition?0:d.touchListLastPosition;nbPixels=0==d.touchListLastPosition?1:Math.abs(e-b.originalEvent.touches[0].clientX),d.touchListLastPosition=b.originalEvent.touches[0].clientX;var f="";e>b.originalEvent.touches[0].clientX?f="left":e<b.originalEvent.touches[0].clientX&&(f="right")}var g=parseInt(c.css("left"));if("left"==f){var h=a.width(),i=c.width(),j=parseInt(c.css("margin-left")),k=parseInt(c.css("margin-right"));h-=j+k;var l=-(i-h),m=g-nbPixels;m>l&&c.css("left",m)}else if("right"==f){var m=g+nbPixels;m<0?c.css("left",m):c.css("left",0)}}catch(a){d.touchListLastPosition=!1}}),d.plugin.find(".ps-list > ul").on("touchend",function(a){d.touchListLastPosition=!1}))}else{var f=parseInt((b-e)/2);c.css("left",0).css("margin-left",f),a.find(".ps-prev").hide(),a.find(".ps-next").hide(),d.plugin.find(".ps-list > ul").unbind("touchstart touchmove touchend")}return!0},q=function(){var a=d.plugin.find(".ps-list").width(),b=d.plugin.find(".ps-list > ul"),c=b.width(),e=parseInt(b.css("margin-left")),f=parseInt(b.css("margin-right"));a-=e+f;var g=Math.abs(parseInt(b.css("left"))),h=g+a,i=d.plugin.find(".ps-list .ps-selected").position().left,j=i+d.plugin.find(".ps-list .ps-selected").width();if(i<g||j>h||c>a&&h>j){var k=-(c-a);-i<k?b.css("left",k):b.css("left",-i)}return!0};return d.startSlide=function(){return d.config.autoSlide=!0,o(),!0},d.stopSlide=function(){return d.config.autoSlide=!1,clearInterval(d.intervalEvent),!0},d.getCurrentSlide=function(){return d.currentSlide},d.getSlideCount=function(){return d.slideCount},d.displaySlide=function(a){return n(a,!0),!0},d.nextSlide=function(){if(d.currentSlide+1<=d.slideCount)var a=d.currentSlide+1;else var a=1;return n(a,!0,"left"),!0},d.previousSlide=function(){if(d.currentSlide-1>=1)var a=d.currentSlide-1;else var a=d.slideCount;return n(a,!0,"right"),!0},d.destroy=function(b){return clearInterval(d.intervalEvent),"undefined"!=typeof b?(d.plugin.find(".ps-list > ul > li").each(function(){a(this).attr("style",null).removeClass().unbind("click"),a(this).html(a(this).find("span").html())}),d.plugin.find(".ps-current").remove(),d.plugin.find(".ps-list").find(".ps-prev, .ps-next").remove(),d.plugin.find(".ps-list > ul").addClass(d.config.mainClassName).attr("style",""),d.plugin.find(".ps-list > ul").unwrap().unwrap(),d.hide()):d.parent().parent().remove(),d.plugin=null,d.data=[],d.config={},d.currentSlide=0,d.slideCount=0,d.resizeEvent=null,d.intervalEvent=null,d.touchFirstPosition=null,d.window=null,!0},d.reload=function(b){return d.destroy(!0),d=this,d.plugin=this,d.window=a(window),d.plugin.show(),d.config=a.extend({},c,b),i(),d.window.resize(function(){clearTimeout(d.resizeEvent),d.resizeEvent=setTimeout(function(){h();var a=d.plugin.find(".ps-current > ul > li.elt_"+d.currentSlide+" img").css("max-height","").height();f(a),d.config.displayList&&(p(),q())},100)}),d.config.autoSlide&&o(),!0},e(),this}}(window.Zepto||window.jQuery);