Files
wyczarujprezent.pl/modules/leogallery/views/js/jquery.magnify.js
2024-10-28 22:14:22 +01:00

4 lines
4.2 KiB
JavaScript

/*! magnify
* https://www.leotheme.com
* Copyright (c) 2022 LeoTheme; Licensed MIT */
!function(t){t.fn.magnify=function(i){i=t.extend({src:"",speed:100,timeout:-1,touchBottomOffset:0,finalWidth:null,finalHeight:null,magnifiedWidth:null,magnifiedHeight:null,limitBounds:!1,mobileCloseEvent:"touchstart",afterLoad:function(){}},i);var e=this,n=t("html"),a=0,o=function(){clearTimeout(a),a=setTimeout(function(){e.destroy(),e.magnify(i)},100)};return this.destroy=function(){return this.each(function(){var i=t(this),e=i.prev("div.magnify-lens"),n=i.data("originalStyle");i.parent("div.magnify").length&&e.length&&(n?i.attr("style",n):i.removeAttr("style"),i.unwrap(),e.remove())}),t(window).off("resize",o),e},t(window).resize(o),this.each(function(){!function(e){var a=t(e),s=a.closest("a"),r={};for(var f in i)r[f]=a.attr("data-magnify-"+f.toLowerCase());var l=r.src||i.src||s.attr("href")||"";if(l){var d,c,u,h,g,m,p,v,y,b,w,N,B,k,E=0,H=0,W=function(){var t=d.offset();return k={top:a.offset().top-t.top+parseInt(a.css("border-top-width"))+parseInt(a.css("padding-top")),left:a.offset().left-t.left+parseInt(a.css("border-left-width"))+parseInt(a.css("padding-left"))},t.top+=k.top,t.left+=k.left,t},x=function(){c.is(":visible")&&c.fadeOut(i.speed,function(){n.removeClass("magnifying").trigger("magnifyend")})},M=function(t){if(h){if(t?(t.preventDefault(),y=t.pageX||t.originalEvent.touches[0].pageX,b=t.pageY||t.originalEvent.touches[0].pageY,a.data("lastPos",{x:y,y:b})):(y=a.data("lastPos").x,b=a.data("lastPos").y),w=y-B.left,N=b-B.top-i.touchBottomOffset,c.is(":animated")||(w>E&&w<u-E&&N>H&&N<h-H?c.is(":hidden")&&(n.addClass("magnifying").trigger("magnifystart"),c.fadeIn(i.speed)):x()),c.is(":visible")){var e="";if(g&&m){var s=-Math.round(w/u*g-p/2),r=-Math.round(N/h*m-v/2);if(i.limitBounds){var f=-Math.round((u-E)/u*g-p/2),l=-Math.round((h-H)/h*m-v/2);s>0?s=0:s<f&&(s=f),r>0?r=0:r<l&&(r=l)}e=s+"px "+r+"px"}c.css({top:Math.round(N-v/2)+k.top+"px",left:Math.round(w-p/2)+k.left+"px","background-position":e})}}else o()};isNaN(+r.speed)||(i.speed=+r.speed),isNaN(+r.timeout)||(i.timeout=+r.timeout),isNaN(+r.finalWidth)||(i.finalWidth=+r.finalWidth),isNaN(+r.finalHeight)||(i.finalHeight=+r.finalHeight),isNaN(+r.magnifiedWidth)||(i.magnifiedWidth=+r.magnifiedWidth),isNaN(+r.magnifiedHeight)||(i.magnifiedHeight=+r.magnifiedHeight),"true"===r.limitBounds&&(i.limitBounds=!0),"function"==typeof window[r.afterLoad]&&(i.afterLoad=window[r.afterLoad]),/\b(Android|BlackBerry|IEMobile|iPad|iPhone|Mobile|Opera Mini)\b/.test(navigator.userAgent)?isNaN(+r.touchBottomOffset)||(i.touchBottomOffset=+r.touchBottomOffset):i.touchBottomOffset=0,a.data("originalStyle",a.attr("style"));var C=new Image;t(C).on({load:function(){a.css("display","block"),a.parent(".magnify").length||a.wrap('<div class="magnify"></div>'),d=a.parent(".magnify"),a.prev(".magnify-lens").length?d.children(".magnify-lens").css("background-image","url('"+l+"')"):a.before('<div class="magnify-lens loading" style="background:url(\''+l+"') 0 0 no-repeat\"></div>"),(c=d.children(".magnify-lens")).removeClass("loading"),u=i.finalWidth||a.width(),h=i.finalHeight||a.height(),g=i.magnifiedWidth||C.width,m=i.magnifiedHeight||C.height,p=c.width(),v=c.height(),B=W(),i.limitBounds&&(E=p/2/(g/u),H=v/2/(m/h)),g===C.width&&m===C.height||c.css("background-size",g+"px "+m+"px"),a.data("zoomSize",{width:g,height:m}),d.data("mobileCloseEvent",r.mobileCloseEvent||i.mobileCloseEvent),C=null,i.afterLoad(),c.is(":visible")&&M(),d.off().on({"mousemove touchmove":M,mouseenter:function(){B=W()},mouseleave:x}),i.timeout>=0&&d.on("touchend",function(){setTimeout(x,i.timeout)}),t("body").not(d).on("touchstart",x);var e=a.attr("usemap");if(e){var n=t("map[name="+e.slice(1)+"]");a.after(n),d.click(function(i){if(i.clientX||i.clientY){c.hide();var e=document.elementFromPoint(i.clientX||i.originalEvent.touches[0].clientX,i.clientY||i.originalEvent.touches[0].clientY);"AREA"===e.nodeName?e.click():t("area",n).each(function(){var i=t(this).attr("coords").split(",");if(w>=i[0]&&w<=i[2]&&N>=i[1]&&N<=i[3])return this.click(),!1})}})}s.length&&(s.css("display","inline-block"),!s.attr("href")||r.src||i.src||s.click(function(t){t.preventDefault()}))},error:function(){C=null}}),C.src=l}}(this)})}}(jQuery);