lightgallery
Version:
lightGallery is a feature-rich, modular JavaScript gallery plugin for building beautiful image and video galleries for the web and the mobile
2 lines (1 loc) • 25.5 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).lgZoom=e()}(this,function(){"use strict";const t=.82;function e(t,e=.995){return t*e/(1-e)}const i={zoomIn:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="currentColor"><path transform="translate(0, 960) scale(1, -1)" d="M512 512.667h-86v-86h-42v86h-86v42h86v86h42v-86h86v-42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z"/></svg>',zoomOut:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="currentColor"><path transform="translate(0, 960) scale(1, -1)" d="M298 554.667h214v-42h-214v42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z"/></svg>',actualSize:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="currentColor"><path transform="translate(0, 960) scale(1, -1)" d="M384 853.334h426.667q53 0 90.5-37.5t37.5-90.5v-426.667q0-53-37.5-90.5t-90.5-37.5h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 53 37.5 90.5t90.5 37.5zM170.667 675.334v-547.333q0-17.667 12.5-30.167t30.167-12.5h547.333q-13.333-37.667-46.333-61.5t-74.333-23.833h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 41.333 23.833 74.333t61.5 46.333zM810.667 768h-426.667q-17.667 0-30.167-12.5t-12.5-30.167v-426.667q0-17.667 12.5-30.167t30.167-12.5h426.667q17.667 0 30.167 12.5t12.5 30.167v426.667q0 17.667-12.5 30.167t-30.167 12.5z"/></svg>'};function s(t,e,i,s,o){const n=function(t,e,i,s){const o=s/i;return{x:t.x-(t.x-e.x)*o,y:t.y-(t.y-e.y)*o}}(e,i,s,o);return{x:n.x+(t.x-e.x),y:n.y+(t.y-e.y)}}function o(t){const e=[];if("string"!=typeof t)return e;for(const i of t.split(",")){const t=i.trim().split(/\s+/),s=t[0];if(!s)continue;const o=t[1];if(!o){e.push({url:s,density:1});continue}const n=parseFloat(o);Number.isNaN(n)||n<=0||(o.endsWith("w")?e.push({url:s,width:n}):o.endsWith("x")&&e.push({url:s,density:n}))}return e}function n(t,e){if(!t)return!0;const i=/^\(\s*(min|max)-width:\s*([\d.]+)px\s*\)$/.exec(t.trim());if(!i)return!1;const s=parseFloat(i[2]);return"min"===i[1]?e.width>=s:e.width<=s}function a(t,e,i){if(t.width){const e=parseFloat(t.width);if(!Number.isNaN(e)&&e>0)return e}let s=[];const a=Array.isArray(t.sources)?t.sources:[];for(const l of a)if(n(l.media,e)){s=o(l.srcset);break}!s.length&&t.srcset&&(s=o(t.srcset));const r=s.map(t=>t.width).filter(t=>void 0!==t);if(r.length)return Math.max(...r);const h=function(t,e){if(!t)return;let i=t;const s=t.split(",");if(s[1])for(let r=0;r<s.length;r++){const t=s[r].trim();if(parseInt(t.split("-")[2],10)>e){i=t;break}r===s.length-1&&(i=t)}const o=i.trim().split("-"),n=parseInt(o[0],10),a=parseInt(o[1],10);return Number.isFinite(n)&&Number.isFinite(a)?{width:n,height:a}:void 0}(t.lgSize,e.width);return h&&h.width>0?h.width:i}function r(t,e,i=100){return[...t.filter(t=>e.t-t.t<=i),e]}function h(t,e,i=100){const s=t.filter(t=>e-t.t<=i);if(s.length<2)return{x:0,y:0};const o=s[0],n=s[s.length-1],a=n.t-o.t;if(a<5)return{x:0,y:0};const r=n.x-o.x,h=n.y-o.y;return{x:Math.abs(r)>1?r/a:0,y:Math.abs(h)>1?h/a:0}}function l(t,e,i){let s=0,o=Date.now();const n=t.map(t=>({position:t.from,velocity:t.velocity})),a=()=>{const r=Date.now(),h=Math.min(Math.max(r-o,0),64);o=r;let l=!0;if(t.forEach((t,e)=>{n[e]=function(t,e,i,{dampingRatio:s=1,naturalFrequency:o=12}={}){const n=i/1e3,a=o,r=Math.min(s,1),h=t.position-e,l=1e3*t.velocity,c=Math.exp(-r*a*n);let g,m;if(r<1){const t=a*Math.sqrt(1-r*r),e=h,i=(l+r*a*h)/t,s=Math.cos(t*n),o=Math.sin(t*n);g=c*(e*s+i*o),m=c*((i*t-r*a*e)*s-(e*t+r*a*i)*o)}else{const t=l+a*h;g=c*(h+t*n),m=c*(t-a*(h+t*n))}return{position:e+g,velocity:m/1e3}}(n[e],t.target,h,t),function(t,e,i=.3,s=.012){return Math.abs(t.position-e)<i&&Math.abs(t.velocity)<s}(n[e],t.target)||(l=!1)}),l)return e(t.map(t=>t.target)),void(null==i||i());e(n.map(t=>t.position)),s=requestAnimationFrame(a)};return s=requestAnimationFrame(a),()=>cancelAnimationFrame(s)}const c={scale:1,zoom:!0,infiniteZoom:!0,actualSize:!0,showZoomInOutIcons:!1,actualSizeIcons:{zoomIn:"lg-zoom-in",zoomOut:"lg-zoom-out"},enableZoomAfter:300},g="lgContainerResize",m="lgBeforeOpen",d="lgAfterOpen",u="lgSlideItemLoad",f="lgAfterSlide",p="lgRotateLeft",x="lgRotateRight",y="lgFlipHorizontal",z="lgFlipVertical";var S=Object.defineProperty,w=Object.getOwnPropertySymbols,I=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable,v=(t,e,i)=>e in t?S(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,b=(t,e)=>{for(var i in e||(e={}))I.call(e,i)&&v(t,i,e[i]);if(w)for(var i of w(e))C.call(e,i)&&v(t,i,e[i]);return t};return class{constructor(t,e){return this.core=t,this.$LG=e,this.settings=b(b({},c),this.core.settings),this}buildTemplates(){var t,e,i,s,o,n;const a=!1!==this.core.settings.showGestureButtons;let r=a&&this.settings.showZoomInOutIcons?`<button id="${this.core.getIdName("lg-zoom-in")}" type="button" aria-label="${null!=(e=null==(t=this.settings.zoomPluginStrings)?void 0:t.zoomIn)?e:this.core.settings.strings.zoomIn}" class="lg-zoom-in lg-icon"></button><button id="${this.core.getIdName("lg-zoom-out")}" type="button" aria-label="${null!=(s=null==(i=this.settings.zoomPluginStrings)?void 0:i.zoomOut)?s:this.core.settings.strings.zoomOut}" class="lg-zoom-out lg-icon"></button>`:"";a&&this.settings.actualSize&&(r+=`<button id="${this.core.getIdName("lg-actual-size")}" type="button" aria-label="${null!=(n=null==(o=this.settings.zoomPluginStrings)?void 0:o.viewActualSize)?n:this.core.settings.strings.viewActualSize}" class="${this.settings.actualSizeIcons.zoomIn} lg-icon"></button>`),this.core.outer.addClass("lg-use-transition-for-zoom"),this.core.$toolbar.first().append(r)}enableZoom(t){let e=this.settings.enableZoomAfter+t.detail.delay;this.$LG("body").first().hasClass("lg-from-hash")&&t.detail.delay?e=0:this.$LG("body").first().removeClass("lg-from-hash"),this.zoomableTimeout=setTimeout(()=>{this.isImageSlide(this.core.index)&&(this.core.getSlideItem(t.detail.index).addClass("lg-zoomable"),t.detail.index===this.core.index&&this.setZoomEssentials())},e+30)}enableZoomOnSlideItemLoad(){this.core.LGel.on(`${u}.zoom`,this.enableZoom.bind(this))}getDragCords(t){return{x:t.pageX,y:t.pageY}}getSwipeCords(t){return{x:t.touches[0].pageX,y:t.touches[0].pageY}}getDragAllowedAxises(t,e){if(!this.containerRect)return{allowX:!1,allowY:!1};const i=this.core.getSlideItem(this.core.index).find(".lg-image").first().get();let s=0,o=0;const n=i.getBoundingClientRect();if(t){const e=this.getVisualImageSize(i,i.offsetWidth,i.offsetHeight);s=e.height*t,o=e.width*t}else if(e)s=n.height+e*n.height,o=n.width+e*n.width;else if(this.core.currentImageSize){const t=this.getVisualImageSize(i,this.core.currentImageSize.width,this.core.currentImageSize.height);s=t.height*this.scale,o=t.width*this.scale}else s=n.height,o=n.width;const a=s>this.containerRect.height;return{allowX:o>this.containerRect.width,allowY:a}}setZoomEssentials(){this.containerRect=this.core.$content.get().getBoundingClientRect()}zoomImage(t,e,i,s){if(!this.containerRect||Math.abs(e)<=0)return;const o=this.containerRect.width/2+this.containerRect.left,n=this.containerRect.height/2+this.containerRect.top+this.scrollTop;let a,r,h,l;if(1===t&&(this.positionChanged=!1),this.positionChanged){const t=this.scale-e;a=t?this.left/t:0,r=t?this.top/t:0,this.pageX=o-a,this.pageY=n-r,this.positionChanged=!1}let c=o-this.pageX,g=n-this.pageY;if(t-e>1){const i=(t-e)/Math.abs(e);c=(e<0?-c:c)+this.left*(i+(e<0?-1:1)),g=(e<0?-g:g)+this.top*(i+(e<0?-1:1)),h=c/i,l=g/i}else{const i=(t-e)*e;h=c*i,l=g*i}if(i){const e=this.clampPinchPan({x:h,y:l},t);h=e.x,l=e.y}this.setZoomStyles({x:h,y:l,scale:t}),this.left=h,this.top=l,s&&this.setZoomImageSize()}resetImageTranslate(t){if(!this.isImageSlide(t))return;const e=this.core.getSlideItem(t).find(".lg-image").first();this.imageReset=!1,e.removeClass("reset-transition reset-transition-y reset-transition-x"),this.core.outer.removeClass("lg-actual-size"),e.css("width","auto").css("height","auto"),setTimeout(()=>{e.removeClass("no-transition")},10)}setZoomImageSize(t=500){const e=this.core.getSlideItem(this.core.index).find(".lg-image").first();setTimeout(()=>{if(this.core.touchAction)return;const t=this.getCurrentImageActualSizeScale();this.scale>=t&&(e.addClass("no-transition"),this.imageReset=!0)},t),setTimeout(()=>{if(this.core.touchAction)return;const t=this.getCurrentImageActualSizeScale();if(this.scale>=t){const t=this.getDragAllowedAxises(this.scale),i=e.get(),s=this.getNaturalWidth(this.core.index),o=i.naturalWidth>0?s*i.naturalHeight/i.naturalWidth:i.naturalHeight;e.css("width",s+"px").css("height",o+"px"),this.core.outer.addClass("lg-actual-size"),t.allowX&&t.allowY?e.addClass("reset-transition"):t.allowX&&!t.allowY?e.addClass("reset-transition-x"):!t.allowX&&t.allowY&&e.addClass("reset-transition-y")}},t+50)}setZoomStyles(t){const e=this.core.getSlideItem(this.core.index).find(".lg-img-wrap").first(),i=this.core.getSlideItem(this.core.index).find(".lg-image").first(),s=this.core.outer.find(".lg-current .lg-dummy-img").first();this.scale=t.scale,i.css("transform","scale3d("+t.scale+", "+t.scale+", 1)"),s.css("transform","scale3d("+t.scale+", "+t.scale+", 1)");const o="translate3d("+t.x+"px, "+t.y+"px, 0)";e.css("transform",o)}setActualSize(t,e){if(this.zoomInProgress)return;this.zoomInProgress=!0;const i=this.core.galleryItems[this.core.index];this.resetImageTranslate(t),setTimeout(()=>{if(!i.src||this.core.outer.hasClass("lg-first-slide-loading"))return;const t=this.getCurrentImageActualSizeScale(),s=this.scale;this.core.outer.hasClass("lg-zoomed")?this.scale=1:this.scale=this.getScale(t),this.setPageCords(e),this.beginZoom(this.scale),this.zoomImage(this.scale,this.scale-s,!0,!0)},50),setTimeout(()=>{this.core.outer.removeClass("lg-grabbing").addClass("lg-grab")},60),setTimeout(()=>{this.zoomInProgress=!1},610)}getNaturalWidth(t){const e=this.core.getSlideItem(t).find(".lg-image").first();return a(this.core.galleryItems[t],{width:window.innerWidth},e.get().naturalWidth)}getActualSizeScale(t,e){let i;return i=t>=e?function(t,e){return e&&t/e||2}(t,e):1,i}getCurrentImageActualSizeScale(){var t;const e=this.core.getSlideItem(this.core.index).find(".lg-image").first().get();let i=null==(t=this.core.currentImageSize)?void 0:t.width;if(!i)if(this.core.outer.hasClass("lg-actual-size")){this.containerRect||this.setZoomEssentials();const t=this.getNaturalWidth(this.core.index);i=function(t,e,i){const s=Math.min(e,t.width),o=Math.min(i,t.height),n=Math.min(s/t.width,o/t.height);return{width:t.width*n,height:t.height*n}}({width:t,height:e.naturalWidth>0?t*e.naturalHeight/e.naturalWidth:e.naturalHeight},this.containerRect.width,this.containerRect.height).width}else i=e.offsetWidth;const s=this.getNaturalWidth(this.core.index)||i;return this.getActualSizeScale(s,i)}getPageCords(t){const e={};if(t)e.x=t.pageX||t.touches[0].pageX,e.y=t.pageY||t.touches[0].pageY;else{const t=this.core.$content.get().getBoundingClientRect();e.x=t.width/2+t.left,e.y=t.height/2+this.scrollTop+t.top}return e}setPageCords(t){const e=this.getPageCords(t);this.pageX=e.x,this.pageY=e.y}manageActualPixelClassNames(){this.core.getElementById("lg-actual-size").removeClass(this.settings.actualSizeIcons.zoomIn).addClass(this.settings.actualSizeIcons.zoomOut)}beginZoom(t){return this.core.outer.removeClass("lg-zoom-drag-transition lg-zoom-dragging"),t>1?(this.core.outer.addClass("lg-zoomed"),this.manageActualPixelClassNames()):this.resetZoom(),t>1}getScale(t){const e=this.getCurrentImageActualSizeScale();return t<1?t=1:t>e&&(t=e),t}init(){if(this.core.registerDefaultIcons(i),!this.settings.zoom)return;this.buildTemplates(),this.enableZoomOnSlideItemLoad();let t=null;this.core.outer.on("dblclick.lg",t=>{this.$LG(t.target).hasClass("lg-image")&&this.setActualSize(this.core.index,t)}),this.core.outer.on("touchstart.lg",e=>{const i=this.$LG(e.target);1===e.touches.length&&i.hasClass("lg-image")&&(t?(clearTimeout(t),t=null,e.preventDefault(),this.setActualSize(this.core.index,e)):t=setTimeout(()=>{t=null},300))}),this.core.LGel.on(`${g}.zoom ${x}.zoom ${p}.zoom ${y}.zoom ${z}.zoom`,()=>{if(!this.core.lgOpened||!this.isImageSlide(this.core.index)||this.core.touchAction)return;this.stopZoomSpring();const t=this.core.getSlideItem(this.core.index).find(".lg-img-wrap").first();this.top=0,this.left=0,this.setZoomEssentials(),this.setZoomSwipeStyles(t,{x:0,y:0}),this.positionChanged=!0}),this.$LG(window).on(`scroll.lg.zoom.global${this.core.lgId}`,()=>{this.core.lgOpened&&(this.scrollTop=this.$LG(window).scrollTop())}),this.core.getElementById("lg-zoom-out").on("click.lg",()=>{if(!this.isImageSlide(this.core.index))return;let t=0;this.imageReset&&(this.resetImageTranslate(this.core.index),t=50),setTimeout(()=>{let t=this.scale-this.settings.scale;t<1&&(t=1),this.beginZoom(t),this.zoomImage(t,-this.settings.scale,!0,!this.settings.infiniteZoom)},t)}),this.core.getElementById("lg-zoom-in").on("click.lg",()=>{this.zoomIn()}),this.core.getElementById("lg-actual-size").on("click.lg",()=>{this.setActualSize(this.core.index)}),this.core.LGel.on(`${m}.zoom`,()=>{this.core.outer.find(".lg-item").removeClass("lg-zoomable")}),this.core.LGel.on(`${d}.zoom`,()=>{this.scrollTop=this.$LG(window).scrollTop(),this.pageX=this.core.outer.width()/2,this.pageY=this.core.outer.height()/2+this.scrollTop,this.scale=1}),this.core.LGel.on(`${f}.zoom`,t=>{const{prevIndex:e}=t.detail;this.scale=1,this.positionChanged=!1,this.zoomInProgress=!1,this.resetZoom(e),this.resetImageTranslate(e),this.isImageSlide(this.core.index)&&this.setZoomEssentials()}),this.zoomDrag(),this.pinchZoom(),this.zoomSwipe(),this.zoomableTimeout=!1,this.positionChanged=!1,this.zoomInProgress=!1}zoomIn(){if(!this.isImageSlide(this.core.index))return;let t=this.scale+this.settings.scale;this.settings.infiniteZoom||(t=this.getScale(t)),this.beginZoom(t),this.zoomImage(t,Math.min(this.settings.scale,t-this.scale),!0,!this.settings.infiniteZoom)}resetZoom(t){this.stopZoomSpring(),this.core.outer.removeClass("lg-zoomed lg-zoom-drag-transition");const e=this.core.getElementById("lg-actual-size"),i=this.core.getSlideItem(void 0!==t?t:this.core.index);e.removeClass(this.settings.actualSizeIcons.zoomOut).addClass(this.settings.actualSizeIcons.zoomIn),i.find(".lg-img-wrap").first().removeAttr("style"),i.find(".lg-image").first().removeAttr("style"),this.scale=1,this.left=0,this.top=0,this.setPageCords()}stopZoomSpring(){this.cancelZoomSpring&&(this.cancelZoomSpring(),this.cancelZoomSpring=void 0)}settleIntoBounds(){this.setZoomEssentials();const t=this.core.getSlideItem(this.core.index).find(".lg-image").first().get().getBoundingClientRect(),e=this.getCurrentImageActualSizeScale(),i=this.settings.infiniteZoom?Math.max(this.scale,1):Math.min(Math.max(this.scale,1),Math.max(e,1)),s=this.scale>0?i/this.scale:1,o=t.width*s,n=t.height*s,{bottom:a}=this.core.mediaContainerPosition,r=Math.abs(o-this.containerRect.width)/2,h=Math.abs(n-this.containerRect.height)/2,c=n>this.containerRect.height?Math.min(-h+a,h):-h,g=Math.min(Math.max(this.left,-r),r),m=Math.min(Math.max(this.top,c),h);Math.abs(g-this.left)<1&&Math.abs(m-this.top)<1&&Math.abs(i-this.scale)<.001||(this.core.outer.addClass("lg-zoom-drag-transition lg-zoom-dragging"),this.stopZoomSpring(),this.cancelZoomSpring=l([{from:this.scale,velocity:0,target:i},{from:this.left,velocity:0,target:g},{from:this.top,velocity:0,target:m}],([t,e,i])=>{this.left=e,this.top=i,this.setZoomStyles({x:e,y:i,scale:t})},()=>{this.cancelZoomSpring=void 0,this.core.outer.removeClass("lg-zoom-dragging lg-zoom-drag-transition"),i>1&&i>=Math.max(e,1)&&this.setZoomImageSize(0)}))}getTouchDistance(t){return e={x:t.touches[0].pageX,y:t.touches[0].pageY},i={x:t.touches[1].pageX,y:t.touches[1].pageY},Math.sqrt((e.x-i.x)*(e.x-i.x)+(e.y-i.y)*(e.y-i.y));var e,i}getPinchMidPoint(t){const e=this.containerRect.width/2+this.containerRect.left,i=this.containerRect.height/2+this.containerRect.top+this.scrollTop;return{x:(t.touches[0].pageX+t.touches[1].pageX)/2-e,y:(t.touches[0].pageY+t.touches[1].pageY)/2-i}}getVisualImageSize(t,e,i){const s=t.closest(".lg-img-rotate");return function(t,e,i){if(!i)return{width:t,height:e};const s=/rotate\((-?\d+(?:\.\d+)?)deg\)/.exec(i),o=/scale3d\((-?\d+(?:\.\d+)?)/.exec(i),n=(null==o?void 0:o[1])?Math.abs(parseFloat(o[1])):1,a=(((null==s?void 0:s[1])?parseFloat(s[1]):0)%360+360)%360;return 90===a||270===a?{width:e*n,height:t*n}:{width:t*n,height:e*n}}(e,i,null==s?void 0:s.style.transform)}clampPinchPan(t,e){const i=this.core.getSlideItem(this.core.index).find(".lg-image").first().get(),s=this.getVisualImageSize(i,i.offsetWidth,i.offsetHeight),o=function(t,e,i,s,o){return{maxX:Math.max(0,(t*o-i)/2),maxY:Math.max(0,(e*o-s)/2)}}(s.width,s.height,this.containerRect.width,this.containerRect.height,e);return function(t,e,i){const s=Math.min(-e.maxY+i,e.maxY);return{x:Math.min(Math.max(t.x,-e.maxX),e.maxX),y:Math.min(Math.max(t.y,s),e.maxY)}}(t,o,this.core.mediaContainerPosition.bottom)}pinchZoom(){let i=0,o=!1,n=1,a=1,c={x:0,y:0},g={x:0,y:0},m=1,d={x:0,y:0},u=[],f=this.core.getSlideItem(this.core.index);this.core.outer.on("touchstart.lg",t=>{if(f=this.core.getSlideItem(this.core.index),this.isImageSlide(this.core.index)&&2===t.touches.length){if(t.preventDefault(),this.core.outer.hasClass("lg-first-slide-loading"))return;this.stopZoomSpring(),this.setZoomEssentials(),n=this.scale||1,c={x:this.left,y:this.top},g=this.getPinchMidPoint(t),this.core.outer.addClass("lg-zoom-drag-transition lg-zoom-dragging"),this.setPageCords(t),this.resetImageTranslate(this.core.index),a=this.getCurrentImageActualSizeScale(),this.core.touchAction="pinch",i=this.getTouchDistance(t),m=n,d=g,u=[{x:g.x,y:g.y,t:Date.now()}]}}),this.core.$inner.on("touchmove.lg",t=>{if(2===t.touches.length&&"pinch"===this.core.touchAction&&(this.$LG(t.target).hasClass("lg-item")||f.get().contains(t.target))){t.preventDefault();const e=this.getTouchDistance(t),h=i-e;if(!o&&Math.abs(h)>5&&(o=!0),o){const o=this.core.settings.pinchToClose&&this.core.settings.closable&&m<=1,h=function(t,e,i,s,o,n=!1){if(t<=0)return i;let a=e/t*i;a<1&&!n&&(a=1+.15*(a-1));const r=Math.max(s,1);return!o&&a>r&&(a=r+.05*(a-r)),a}(i,e,n,a,this.settings.infiniteZoom,o),l=Math.round(1e4*(h+Number.EPSILON))/1e4,f=this.getPinchMidPoint(t);d=f,u=r(u,{x:f.x,y:f.y,t:Date.now()});const p=s(f,g,c,n,l);this.left=p.x,this.top=p.y,this.setZoomStyles({x:p.x,y:p.y,scale:l}),m=Math.max(m,l)}}}),this.core.$inner.on("touchend.lg",r=>{if("pinch"===this.core.touchAction&&(this.$LG(r.target).hasClass("lg-item")||f.get().contains(r.target))){if(o=!1,i=0,(p={scale:this.scale,maxGestureScale:m,pinchToClose:this.core.settings.pinchToClose,closable:this.core.settings.closable}).pinchToClose&&p.closable&&p.scale<1&&p.maxGestureScale<=1)this.core.outer.removeClass("lg-zoom-dragging"),this.resetZoom(),this.core.closeGallery();else if(this.scale<=1)this.core.outer.removeClass("lg-zoomed"),this.stopZoomSpring(),this.cancelZoomSpring=l([{from:this.scale,velocity:0,target:1},{from:this.left,velocity:0,target:0},{from:this.top,velocity:0,target:0}],([t,e,i])=>{this.left=e,this.top=i,this.setZoomStyles({x:e,y:i,scale:t})},()=>{this.cancelZoomSpring=void 0,this.core.outer.removeClass("lg-zoom-dragging"),this.resetZoom()});else{const i=a,o=Math.min(this.scale,Math.max(i,1)),r=h(u,Date.now()),m=s(d,g,c,n,o),f={x:m.x+e(r.x),y:m.y+e(r.y)},p=this.clampPinchPan(f,o);this.positionChanged=!0,this.manageActualPixelClassNames(),this.core.outer.addClass("lg-zoomed"),this.stopZoomSpring(),this.cancelZoomSpring=l([{from:this.scale,velocity:0,target:o},{from:this.left,velocity:r.x,target:p.x,dampingRatio:p.x!==f.x?t:1},{from:this.top,velocity:r.y,target:p.y,dampingRatio:p.y!==f.y?t:1}],([t,e,i])=>{this.left=e,this.top=i,this.setZoomStyles({x:e,y:i,scale:t})},()=>{this.cancelZoomSpring=void 0,this.core.outer.removeClass("lg-zoom-dragging lg-zoom-drag-transition"),o>=i&&this.setZoomImageSize(0)})}this.core.touchAction=void 0}var p})}touchendZoom(i,s,o,n,a){const r=this.core.getSlideItem(this.core.index).find(".lg-img-wrap").first(),h=this.getPossibleSwipeDragCords(),c=this.getZoomSwipeCords(i,s,o,n,h),g=(t,e,i)=>Math.min(Math.max(t,i),e),m=o?g(c.x+e(a.x),h.minX,h.maxX):this.left,d=n?g(c.y+e(a.y),h.minY,h.maxY):this.top;if(this.positionChanged=!0,Math.abs(m-c.x)<1&&Math.abs(d-c.y)<1)return this.left=m,this.top=d,this.setZoomSwipeStyles(r,{x:m,y:d}),void this.core.outer.removeClass("lg-zoom-dragging lg-zoom-drag-transition");this.core.outer.addClass("lg-zoom-dragging"),this.stopZoomSpring(),this.cancelZoomSpring=l([{from:c.x,velocity:a.x,target:m,dampingRatio:m!==c.x+e(a.x)?t:1},{from:c.y,velocity:a.y,target:d,dampingRatio:d!==c.y+e(a.y)?t:1}],([t,e])=>{this.left=t,this.top=e,this.setZoomSwipeStyles(r,{x:t,y:e})},()=>{this.cancelZoomSpring=void 0,this.core.outer.removeClass("lg-zoom-dragging lg-zoom-drag-transition")})}getZoomSwipeCords(t,e,i,s,o){const n={};if(s){if(n.y=this.top+(e.y-t.y),this.isBeyondPossibleTop(n.y,o.minY)){const t=o.minY-n.y;n.y=o.minY-t/6}else if(this.isBeyondPossibleBottom(n.y,o.maxY)){const t=n.y-o.maxY;n.y=o.maxY+t/6}}else n.y=this.top;if(i){if(n.x=this.left+(e.x-t.x),this.isBeyondPossibleLeft(n.x,o.minX)){const t=o.minX-n.x;n.x=o.minX-t/6}else if(this.isBeyondPossibleRight(n.x,o.maxX)){const t=n.x-o.maxX;n.x=o.maxX+t/6}}else n.x=this.left;return n}isBeyondPossibleLeft(t,e){return t>=e}isBeyondPossibleRight(t,e){return t<=e}isBeyondPossibleTop(t,e){return t>=e}isBeyondPossibleBottom(t,e){return t<=e}isImageSlide(t){const e=this.core.galleryItems[t];return"image"===this.core.getSlideType(e)}getPossibleSwipeDragCords(t){const e=this.core.getSlideItem(this.core.index).find(".lg-image").first().get().getBoundingClientRect();let i=e.height,s=e.width;t&&(i+=t*i,s+=t*s);const{bottom:o}=this.core.mediaContainerPosition;return{minY:(i-this.containerRect.height)/2,maxY:(this.containerRect.height-i)/2+o,minX:(s-this.containerRect.width)/2,maxX:(this.containerRect.width-s)/2}}setZoomSwipeStyles(t,e){t.css("transform","translate3d("+e.x+"px, "+e.y+"px, 0)")}zoomSwipe(){let t,e,i={},s={},o=!1,n=!1,a=!1,l=[],c=this.core.getSlideItem(this.core.index);this.core.$inner.on("touchstart.lg",r=>{if(this.isImageSlide(this.core.index)&&(c=this.core.getSlideItem(this.core.index),(this.$LG(r.target).hasClass("lg-item")||c.get().contains(r.target))&&1===r.touches.length&&this.core.outer.hasClass("lg-zoomed"))){r.preventDefault(),this.stopZoomSpring(),o=!1,s={};const h=this.getSwipeCords(r);l=[{x:h.x,y:h.y,t:Date.now()}],this.core.touchAction="zoomSwipe",e=this.core.getSlideItem(this.core.index).find(".lg-img-wrap").first();const c=this.getDragAllowedAxises(0);a=c.allowY,n=c.allowX,i=this.getSwipeCords(r),t=this.getPossibleSwipeDragCords(),this.core.outer.addClass("lg-zoom-dragging lg-zoom-drag-transition")}}),this.core.$inner.on("touchmove.lg",h=>{if(1===h.touches.length&&"zoomSwipe"===this.core.touchAction&&(this.$LG(h.target).hasClass("lg-item")||c.get().contains(h.target))){h.preventDefault(),this.core.touchAction="zoomSwipe",s=this.getSwipeCords(h),l=r(l,{x:s.x,y:s.y,t:Date.now()});const c=this.getZoomSwipeCords(i,s,n,a,t);(Math.abs(s.x-i.x)>15||Math.abs(s.y-i.y)>15)&&(o=!0,this.setZoomSwipeStyles(e,c))}}),this.core.$inner.on("touchend.lg",t=>{if("zoomSwipe"===this.core.touchAction&&(this.$LG(t.target).hasClass("lg-item")||c.get().contains(t.target))){if(t.preventDefault(),this.core.touchAction=void 0,this.core.outer.removeClass("lg-zoom-dragging"),!o)return void this.settleIntoBounds();o=!1,this.touchendZoom(i,s,n,a,h(l,Date.now()))}})}zoomDrag(){let t,e,i={},s={},o=!1,n=!1,a=!1,l=!1,c=[];this.core.outer.on("mousedown.lg.zoom",s=>{if(!this.isImageSlide(this.core.index))return;const n=this.core.getSlideItem(this.core.index);if(this.$LG(s.target).hasClass("lg-item")||n.get().contains(s.target)){this.core.outer.hasClass("lg-zoomed")&&this.stopZoomSpring(),c=[{x:s.pageX,y:s.pageY,t:Date.now()}],e=this.core.getSlideItem(this.core.index).find(".lg-img-wrap").first();const n=this.getDragAllowedAxises(0);l=n.allowY,a=n.allowX,this.core.outer.hasClass("lg-zoomed")&&this.$LG(s.target).hasClass("lg-object")&&(a||l)&&(s.preventDefault(),i=this.getDragCords(s),t=this.getPossibleSwipeDragCords(),o=!0,this.core.outer.removeClass("lg-grab").addClass("lg-grabbing lg-zoom-drag-transition lg-zoom-dragging"))}}),this.$LG(window).on(`mousemove.lg.zoom.global${this.core.lgId}`,h=>{if(o){n=!0,s=this.getDragCords(h),c=r(c,{x:s.x,y:s.y,t:Date.now()});const o=this.getZoomSwipeCords(i,s,a,l,t);this.setZoomSwipeStyles(e,o)}}),this.$LG(window).on(`mouseup.lg.zoom.global${this.core.lgId}`,t=>{o&&(o=!1,this.core.outer.removeClass("lg-zoom-dragging"),!n||i.x===s.x&&i.y===s.y?this.settleIntoBounds():(s=this.getDragCords(t),this.touchendZoom(i,s,a,l,h(c,Date.now()))),n=!1),this.core.outer.removeClass("lg-grabbing").addClass("lg-grab")})}closeGallery(){this.imageReset&&this.resetImageTranslate(this.core.index),this.resetZoom(),this.zoomInProgress=!1}destroy(){this.$LG(window).off(`.lg.zoom.global${this.core.lgId}`),this.core.LGel.off(".lg.zoom"),this.core.LGel.off(".zoom"),clearTimeout(this.zoomableTimeout),this.zoomableTimeout=!1}}});