-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.touch-gallery-1.0.0.min.js
40 lines (40 loc) · 20.1 KB
/
jquery.touch-gallery-1.0.0.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
* NETEYE Activity Indicator jQuery Plugin
*
* Copyright (c) 2010 NETEYE GmbH
* Licensed under the MIT license
*
* Author: Felix Gnass [fgnass at neteye dot de]
* Version: 1.0.0
*/
(function($){$.fn.activity=function(opts){this.each(function(){var $this=$(this);var el=$this.data("activity");if(el){clearInterval(el.data("interval"));el.remove();$this.removeData("activity");}if(opts!==false){opts=$.extend({color:$this.css("color")},$.fn.activity.defaults,opts);el=render($this,opts).css("position","absolute").prependTo(opts.outside?"body":$this);var h=$this.outerHeight()-el.height();var w=$this.outerWidth()-el.width();var margin={top:opts.valign=="top"?opts.padding:opts.valign=="bottom"?h-opts.padding:Math.floor(h/2),left:opts.align=="left"?opts.padding:opts.align=="right"?w-opts.padding:Math.floor(w/2)};var offset=$this.offset();if(opts.outside){el.css({top:offset.top+"px",left:offset.left+"px"});}else{margin.top-=el.offset().top-offset.top;margin.left-=el.offset().left-offset.left;}el.css({marginTop:margin.top+"px",marginLeft:margin.left+"px"});animate(el,opts.segments,Math.round(10/opts.speed)/10);$this.data("activity",el);}});return this;};$.fn.activity.defaults={segments:12,space:3,length:7,width:4,speed:1.2,align:"center",valign:"center",padding:4};$.fn.activity.getOpacity=function(opts,i){var steps=opts.steps||opts.segments-1;var end=opts.opacity!==undefined?opts.opacity:1/steps;return 1-Math.min(i,steps)*(1-end)/steps;};var render=function(){return $("<div>").addClass("busy");};var animate=function(){};function svg(tag,attr){var el=document.createElementNS("http://www.w3.org/2000/svg",tag||"svg");if(attr){$.each(attr,function(k,v){el.setAttributeNS(null,k,v);});}return $(el);}if(document.createElementNS&&document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect){render=function(target,d){var innerRadius=d.width*2+d.space;var r=(innerRadius+d.length+Math.ceil(d.width/2)+1);var el=svg().width(r*2).height(r*2);var g=svg("g",{"stroke-width":d.width,"stroke-linecap":"round",stroke:d.color}).appendTo(svg("g",{transform:"translate("+r+","+r+")"}).appendTo(el));for(var i=0;i<d.segments;i++){g.append(svg("line",{x1:0,y1:innerRadius,x2:0,y2:innerRadius+d.length,transform:"rotate("+(360/d.segments*i)+", 0, 0)",opacity:$.fn.activity.getOpacity(d,i)}));}return $("<div>").append(el).width(2*r).height(2*r);};if(document.createElement("div").style.WebkitAnimationName!==undefined){var animations={};animate=function(el,steps,duration){if(!animations[steps]){var name="spin"+steps;var rule="@-webkit-keyframes "+name+" {";for(var i=0;i<steps;i++){var p1=Math.round(100000/steps*i)/1000;var p2=Math.round(100000/steps*(i+1)-1)/1000;var value="% { -webkit-transform:rotate("+Math.round(360/steps*i)+"deg); }\n";rule+=p1+value+p2+value;}rule+="100% { -webkit-transform:rotate(100deg); }\n}";document.styleSheets[0].insertRule(rule);animations[steps]=name;}el.css("-webkit-animation",animations[steps]+" "+duration+"s linear infinite");};}else{animate=function(el,steps,duration){var rotation=0;var g=el.find("g g").get(0);el.data("interval",setInterval(function(){g.setAttributeNS(null,"transform","rotate("+(++rotation%steps*(360/steps))+")");},duration*1000/steps));};}}else{var s=$("<shape>").css("behavior","url(#default#VML)").appendTo("body");if(s.get(0).adj){var sheet=document.createStyleSheet();$.each(["group","shape","stroke"],function(){sheet.addRule(this,"behavior:url(#default#VML);");});render=function(target,d){var innerRadius=d.width*2+d.space;var r=(innerRadius+d.length+Math.ceil(d.width/2)+1);var s=r*2;var o=-Math.ceil(s/2);var el=$("<group>",{coordsize:s+" "+s,coordorigin:o+" "+o}).css({top:o,left:o,width:s,height:s});for(var i=0;i<d.segments;i++){el.append($("<shape>",{path:"m "+innerRadius+",0 l "+(innerRadius+d.length)+",0"}).css({width:s,height:s,rotation:(360/d.segments*i)+"deg"}).append($("<stroke>",{color:d.color,weight:d.width+"px",endcap:"round",opacity:$.fn.activity.getOpacity(d,i)})));}return $("<group>",{coordsize:s+" "+s}).css({width:s,height:s,overflow:"hidden"}).append(el);};animate=function(el,steps,duration){var rotation=0;var g=el.get(0);el.data("interval",setInterval(function(){g.style.rotation=++rotation%steps*(360/steps);},duration*1000/steps));};}$(s).remove();}})(jQuery);
/*
* NETEYE Activity Indicator jQuery Plugin
*
* Copyright (c) 2010 NETEYE GmbH
* Licensed under the MIT license
*
* Author: Felix Gnass [fgnass at neteye dot de]
* Version: 1.0.0
*/
(function($){$.fn.activity=function(opts){this.each(function(){var $this=$(this);var el=$this.data("activity");if(el){clearInterval(el.data("interval"));el.remove();$this.removeData("activity");}if(opts!==false){opts=$.extend({color:$this.css("color")},$.fn.activity.defaults,opts);el=render($this,opts).css("position","absolute").prependTo(opts.outside?"body":$this);var margin={top:Math.floor(($this.outerHeight()-el.height())/2),left:Math.floor(($this.outerWidth()-el.width())/2)};var offset=$this.offset();if(opts.outside){el.css({top:offset.top+"px",left:offset.left+"px"});}else{margin.top-=el.offset().top-offset.top;margin.left-=el.offset().left-offset.left;}el.css({marginTop:margin.top+"px",marginLeft:margin.left+"px"});animate(el,opts.segments,Math.round(10/opts.speed)/10);$this.data("activity",el);}});return this;};$.fn.activity.defaults={segments:12,space:3,length:7,width:4,speed:1.2};$.fn.activity.getOpacity=function(opts,i){var steps=opts.steps||opts.segments-1;var end=opts.opacity!==undefined?opts.opacity:1/steps;return 1-Math.min(i,steps)*(1-end)/steps;};var render=function(){return $("<div>").addClass("busy");};var animate=function(){};function svg(tag,attr){var el=document.createElementNS("http://www.w3.org/2000/svg",tag||"svg");if(attr){$.each(attr,function(k,v){el.setAttributeNS(null,k,v);});}return $(el);}if(document.createElementNS&&document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect){render=function(target,d){var innerRadius=d.width*2+d.space;var r=(innerRadius+d.length+Math.ceil(d.width/2)+1);var el=svg().width(r*2).height(r*2);var g=svg("g",{"stroke-width":d.width,"stroke-linecap":"round",stroke:d.color}).appendTo(svg("g",{transform:"translate("+r+","+r+")"}).appendTo(el));for(var i=0;i<d.segments;i++){g.append(svg("line",{x1:0,y1:innerRadius,x2:0,y2:innerRadius+d.length,transform:"rotate("+(360/d.segments*i)+", 0, 0)",opacity:$.fn.activity.getOpacity(d,i)}));}return $("<div>").append(el).width(2*r).height(2*r);};if(document.createElement("div").style.WebkitAnimationName!==undefined){var animations={};animate=function(el,steps,duration){if(!animations[steps]){var name="spin"+steps;var rule="@-webkit-keyframes "+name+" {";for(var i=0;i<steps;i++){var p1=Math.round(100000/steps*i)/1000;var p2=Math.round(100000/steps*(i+1)-1)/1000;var value="% { -webkit-transform:rotate("+Math.round(360/steps*i)+"deg); }\n";rule+=p1+value+p2+value;}rule+="100% { -webkit-transform:rotate(100deg); }\n}";document.styleSheets[0].insertRule(rule);animations[steps]=name;}el.css("-webkit-animation",animations[steps]+" "+duration+"s linear infinite");};}else{animate=function(el,steps,duration){var rotation=0;var g=el.find("g g").get(0);el.data("interval",setInterval(function(){g.setAttributeNS(null,"transform","rotate("+(++rotation%steps*(360/steps))+")");},duration*1000/steps));};}}else{var s=$("<shape>").css("behavior","url(#default#VML)").appendTo("body");if(s.get(0).adj){var sheet=document.createStyleSheet();$.each(["group","shape","stroke"],function(){sheet.addRule(this,"behavior:url(#default#VML);");});render=function(target,d){var innerRadius=d.width*2+d.space;var r=(innerRadius+d.length+Math.ceil(d.width/2)+1);var s=r*2;var o=-Math.ceil(s/2);var el=$("<group>",{coordsize:s+" "+s,coordorigin:o+" "+o}).css({top:o,left:o,width:s,height:s});for(var i=0;i<d.segments;i++){el.append($("<shape>",{path:"m "+innerRadius+",0 l "+(innerRadius+d.length)+",0"}).css({width:s,height:s,rotation:(360/d.segments*i)+"deg"}).append($("<stroke>",{color:d.color,weight:d.width+"px",endcap:"round",opacity:$.fn.activity.getOpacity(d,i)})));}return $("<group>",{coordsize:s+" "+s}).css({width:s,height:s,overflow:"hidden"}).append(el);};animate=function(el,steps,duration){var rotation=0;var g=el.get(0);el.data("interval",setInterval(function(){g.style.rotation=++rotation%steps*(360/steps);},duration*1000/steps));};}$(s).remove();}})(jQuery);
/*
* NETEYE Transform & Transition Plugin
*
* Copyright (c) 2010 NETEYE GmbH
* Licensed under the MIT license
*
* Author: Felix Gnass [fgnass at neteye dot de]
* Version: 1.0.0
*/
(function($){var props=(function(){var prefixes=["Webkit","Moz","O"];var style=document.createElement("div").style;function findProp(name){var result="";if(style[name]!==undefined){return name;}$.each(prefixes,function(){var p=this+name.charAt(0).toUpperCase()+name.substring(1);if(style[p]!==undefined){result=p;return false;}});return result;}var result={};$.each(["transitionDuration","transitionProperty","transform","transformOrigin"],function(){result[this]=findProp(this);});return result;})();var supports3d=(function(){var s=document.createElement("div").style;try{s[props.transform]="translate3d(0,0,0)";return s[props.transform].length>0;}catch(ex){return false;}})();function transform(el,commands){var t=el.data("transform");if(!t){t=new Transformation();el.data("transform",t);}if(commands!==undefined){if(commands===false||commands.reset){t.reset();}else{t.exec(commands);}}return t;}function TransformFunction(pattern,defaults){function fillIn(pattern,data){return pattern.replace(/\{(\w+)\}/g,function(s,p1){return data[p1];});}this.reset=function(){$.extend(this,defaults);};this.format=function(){return fillIn(pattern,this);};this.reset();}function Transformation(){var fn={translate:new TransformFunction("translate({x}px,{y}px)",{x:0,y:0}),scale:new TransformFunction("scale({x},{y})",{x:1,y:1}),rotate:new TransformFunction("rotate({deg}deg)",{deg:0})};if(supports3d){fn.translate=new TransformFunction("translate3d({x}px,{y}px,0px)",{x:0,y:0});fn.scale=new TransformFunction("scale3d({x},{y},1)",{x:1,y:1});}var commands={rotate:function(deg){fn.rotate.deg=deg;},rotateBy:function(deg){fn.rotate.deg+=deg;},scale:function(s){if(typeof s=="number"){s={x:s,y:s};}fn.scale.x=s.x;fn.scale.y=s.y;},scaleBy:function(s){if(typeof s=="number"){s={x:s,y:s};}fn.scale.x*=s.x;fn.scale.y*=s.y;},translate:function(s){var t=fn.translate;if(!s){s={x:0,y:0};}t.x=(s.x!==undefined)?parseInt(s.x,10):t.x;t.y=(s.y!==undefined)?parseInt(s.y,10):t.y;},translateBy:function(s){var t=fn.translate;t.x+=parseInt(s.x,10)||0;t.y+=parseInt(s.y,10)||0;}};this.fn=fn;this.exec=function(cmd){for(var n in cmd){if(commands[n]){commands[n](cmd[n]);}}};this.reset=function(){$.each(fn,function(){this.reset();});};this.format=function(){var s="";$.each(fn,function(k,v){s+=v.format()+" ";});return s;};}$.fn.transform=function(opts){var result=this;if($.fn.transform.supported){this.each(function(){var $this=$(this);var t=transform($this,opts);if(opts===undefined){result=t.fn;return false;}var origin=opts&&opts.origin?opts.origin:"0 0";$this.css(props.transitionDuration,"0s").css(props.transformOrigin,origin).css(props.transform,t.format());});}return result;};$.fn.transform.supported=!!props.transform;$.fn.transition=function(css,opts){opts=$.extend({delay:0,duration:0.4},opts);var property="";$.each(css,function(k,v){property+=k+",";});this.each(function(){var $this=$(this);if(!$.fn.transition.supported){$this.css(css);if(opts.onFinish){$.proxy(opts.onFinish,$this)();}return;}var _duration=$this.css(props.transitionDuration);function apply(){$this.css(props.transitionProperty,property).css(props.transitionDuration,opts.duration+"s");$this.css(css);if(opts.duration>0){$this.one("webkitTransitionEnd oTransitionEnd transitionend",afterCompletion);}else{setTimeout(afterCompletion,1);}}function afterCompletion(){$this.css(props.transitionDuration,_duration);if(opts.onFinish){$.proxy(opts.onFinish,$this)();}}if(opts.delay>0){setTimeout(apply,opts.delay);}else{apply();}});return this;};$.fn.transition.supported=!!props.transitionProperty;$.fn.transformTransition=function(opts){opts=$.extend({origin:"0 0",css:{}},opts);var css=opts.css;if($.fn.transform.supported){css[props.transform]=transform(this,opts).format();this.css(props.transformOrigin,opts.origin);}return this.transition(css,opts);};})(jQuery);
/*
* NETEYE Touch-Gallery jQuery Plugin
*
* Copyright (c) 2010 NETEYE GmbH
* Licensed under the MIT license
*
* Author: Felix Gnass [fgnass at neteye dot de]
* Version: 1.0.0
*/
(function($){var mobileSafari=/Mobile.*Safari/.test(navigator.userAgent);$.fn.touchGallery=function(opts){opts=$.extend({},$.fn.touchGallery.defaults,opts);var thumbs=this;this.live("click",function(ev){ev.preventDefault();var clickedThumb=$(this);if(!clickedThumb.is(".open")){thumbs.addClass("open");openGallery(thumbs,clickedThumb,opts);}});return this;};$.fn.touchGallery.defaults={getSource:function(){return this.href;}};function openGallery(thumbs,clickedThumb,opts){clickedThumb.activity();var img=new Image();img.onload=function(){clickedThumb.activity(false);showGallery(thumbs,thumbs.index(clickedThumb),this,opts.getSource);};img.src=$.proxy(opts.getSource,clickedThumb.get(0))();}function showGallery(thumbs,index,clickedImage,getSrcCallback){var viewport=fitToView(preventTouch($('<div id="galleryViewport">').css({position:"fixed",top:0,left:0,overflow:"hidden"}).transform(false).appendTo("body")));var stripe=$('<div id="galleryStripe">').css({position:"absolute",height:"100%",top:0,left:(-index*getInnerWidth())+"px"}).width(thumbs.length*getInnerWidth()).transform(false).appendTo(viewport);setupEventListeners(stripe,getInnerWidth(),index,thumbs.length-1);$(window).bind("orientationchange.gallery",function(){fitToView(viewport);stripe.find("img").each(centerImage);});thumbs.each(function(i){var page=$("<div>").addClass("galleryPage").css({display:"block",position:"absolute",left:i*getInnerWidth()+"px",overflow:"hidden",height:"100%"}).width(getInnerWidth()).data("thumbs",thumbs).data("thumb",$(this)).transform(false).appendTo(stripe);if(i==index){var $img=$(clickedImage).css({position:"absolute",display:"block"}).transform(false);makeInvisible(centerImage(index,clickedImage,$img)).appendTo(page);zoomIn($(this),$img,function(){stripe.addClass("ready");loadSurroundingImages(index);});insertShade(viewport);}else{page.activity({color:"#fff"});var img=new Image();var src=$.proxy(getSrcCallback,this)();page.one("loadImage",function(){img.src=src;});img.onload=function(){var $this=$(this).css({position:"absolute",display:"block"}).transform(false);centerImage(i,this,$this).appendTo(page.activity(false));page.trigger("loaded");};}});}function hideGallery(stripe){if(stripe.is(".ready")&&!stripe.is(".panning")){$("#galleryShade").remove();var page=stripe.find(".galleryPage").eq(stripe.data("galleryIndex"));page.data("thumbs").removeClass("open");var thumb=page.data("thumb");stripe.add(window).add(document).unbind(".gallery");zoomOut(page.find("img"),thumb,function(){makeVisible(thumb).transform(false);$("#galleryViewport").remove();});}}function insertShade(target,onFinish){var el=$('<div id="galleryShade">').css({top:0,left:0,background:"#000",opacity:0});if(mobileSafari){var l=Math.max(screen.width,screen.height)*(window.devicePixelRatio||1)+Math.max(getScrollLeft(),getScrollTop())+100;el.css({position:"absolute"}).width(l).height(l);}else{el.css({position:"fixed",width:"100%",height:"100%"});}el.insertBefore(target).transform(false).transition({opacity:1},{delay:200,duration:0.8,onFinish:onFinish});}function centerImage(i,img,el){el=el||$(img);if(!img.naturalWidth){img.naturalWidth=img.width;img.naturalHeight=img.height;}var s=Math.min(getViewportScale(),Math.min(getInnerHeight()/img.naturalHeight,getInnerWidth()/img.naturalWidth));el.css({top:Math.round((getInnerHeight()-img.naturalHeight*s)/2)+"px",left:Math.round((getInnerWidth()-img.naturalWidth*s)/2)+"px"}).width(Math.round(img.naturalWidth*s));return el;}function zoomIn(small,large,onFinish){var b=bounds(large);var t=bounds(small);var s=Math.max(t.width/large.width(),t.height/large.height());var ox=mobileSafari?0:getScrollLeft();var oy=mobileSafari?0:getScrollTop();large.transform({translate:{x:t.left-b.left-ox-Math.round((b.width*s-t.width)/2),y:t.top-b.top-oy-Math.round((b.height*s-t.height)/2)},scale:s});setTimeout(function(){makeVisible(large);makeInvisible(small);large.transformTransition({reset:true,onFinish:onFinish});},1);}function zoomOut(large,small,onFinish){if(large.length===0||!$.fn.transition.supported){if(onFinish){onFinish();}return;}var b=bounds(large);var t=bounds(small);var w=Math.min(b.height*t.width/t.height,b.width);var h=Math.min(b.width*t.height/t.width,b.height);var s=Math.max(t.width/w,t.height/h);var div=$("<div>").css({overflow:"hidden",position:"absolute",width:w+"px",height:h+"px",top:getScrollTop()+Math.round((getInnerHeight()-h)/2)+"px",left:getScrollLeft()+Math.round((getInnerWidth()-w)/2)+"px"}).appendTo("body").append(large.css({top:1-Math.floor((b.height-h)/2)+"px",left:-Math.floor((b.width-w)/2)+"px"})).transform(false);b=bounds(div);div.transformTransition({translate:{x:t.left-b.left-Math.round((w*s-t.width)/2),y:t.top-b.top-Math.round((h*s-t.height)/2)},scale:s,onFinish:function(){onFinish();div.remove();}});}function getPage(i){return $("#galleryStripe .galleryPage").eq(i);}function getThumb(i){return getPage(i).data("thumb");}function loadSurroundingImages(i){var page=getPage(i);function triggerLoad(){getPage(i-1).add(getPage(i+1)).trigger("loadImage");}if(page.find("img").length>0){triggerLoad();}else{page.one("loaded",triggerLoad);}}function setupEventListeners(el,pageWidth,currentIndex,max){var scale=getViewportScale();var xOffset=parseInt(el.css("left"),10);el.data("galleryIndex",currentIndex);function flick(dir){var i=el.data("galleryIndex");makeVisible(getThumb(i));i=Math.max(0,Math.min(i+dir,max));el.data("galleryIndex",i);makeInvisible(getThumb(i));loadSurroundingImages(i);if($.fn.transform.supported){var x=-i*pageWidth-xOffset;if(x!=el.transform().translate.x){el.addClass("panning").transformTransition({translate:{x:x},onFinish:function(){this.removeClass("panning");}});}}else{el.css("left",-i*pageWidth+"px");}}$(document).bind("keydown.gallery",function(event){if(event.keyCode==37){el.trigger("prev");}else{if(event.keyCode==39){el.trigger("next");}}if(event.keyCode==27||event.keyCode==32){el.trigger("close");}return false;});el.bind("touchstart",function(){$(this).data("pan",{startX:event.targetTouches[0].screenX,lastX:event.targetTouches[0].screenX,startTime:new Date().getTime(),startOffset:$(this).transform().translate.x,distance:function(){return Math.round(scale*(this.startX-this.lastX));},delta:function(){var x=event.targetTouches[0].screenX;this.dir=this.lastX>x?1:-1;var delta=Math.round(scale*(this.lastX-x));this.lastX=x;return delta;},duration:function(){return new Date().getTime()-this.startTime;}});return false;}).bind("touchmove",function(){var pan=$(this).data("pan");$(this).transform({translateBy:{x:-pan.delta()}});return false;}).bind("touchend",function(){var pan=$(this).data("pan");if(pan.distance()===0&&pan.duration()<500){$(event.target).trigger("click");}else{flick(pan.dir);}return false;}).bind("prev",function(){flick(-1);}).bind("next",function(){flick(1);}).bind("click close",function(){hideGallery(el);});}function fitToView(el){if(mobileSafari){el.css({top:getScrollTop()+"px",left:getScrollLeft()+"px"});}return el.width(getInnerWidth()).height(getInnerHeight());}function getViewportScale(){return getInnerWidth()/document.documentElement.clientWidth;}function getWindowProp(name,ie){if(window[name]!==undefined){return window[name];}var d=document.documentElement;if(d&&d[ie]){return d[ie];}return document.body[ie];}function getScrollTop(){return getWindowProp("pageYOffset","scrollTop");}function getScrollLeft(){return getWindowProp("pageXOffset","scrollLeft");}function getInnerWidth(){return getWindowProp("innerWidth","clientWidth");}function getInnerHeight(){return getWindowProp("innerHeight","clientHeight");}function makeVisible(el){return el.css("visibility","visible");}function makeInvisible(el){return el.css("visibility","hidden");}function bounds(el){var e=el.get(0);if(e&&e.getBoundingClientRect){return e.getBoundingClientRect();}return $.extend({width:el.width(),height:el.height()},el.offset());}function preventTouch(el){return el.bind("touchstart",function(){return false;});}})(jQuery);