{"version":3,"sources":["webpack://[name]/./src/js/components/ImageZoomerComponent.js","webpack://[name]/./node_modules/magnify/dist/js/jquery.magnify.js","webpack://[name]/./node_modules/magnify/dist/js/jquery.magnify-mobile.js"],"names":["ImageZoomerComponent","_BaseComponent","element","_this","_classCallCheck","_callSuper","init","openModal","closeModal","_inherits","_createClass","key","get","zoom","modal","modalImage","value","img","this","$el","querySelector","SELECTORS","$","magnify","_this2","currentSize","getMediaQuery","parentNode","addEventListener","e","preventDefault","document","modalImg","modalCloseButton","classList","remove","src","currentTarget","href","focus","add","match","BaseComponent","fn","oOptions","extend","$that","$html","nTimer","refresh","clearTimeout","setTimeout","destroy","each","$this","$lens","prev","sStyle","data","parent","length","attr","removeAttr","unwrap","window","off","resize","el","$image","$anchor","closest","oDataAttr","i","toLowerCase","sZoomSrc","$container","nImageWidth","nImageHeight","nMagnifiedWidth","nMagnifiedHeight","nLensWidth","nLensHeight","nPosX","nPosY","nX","nY","oContainerOffset","oImageOffset","nBoundX","nBoundY","getOffset","o","offset","top","parseInt","css","left","hideLens","is","fadeOut","removeClass","trigger","moveLens","pageX","originalEvent","touches","pageY","x","y","addClass","fadeIn","sBgPos","nRatioX","Math","round","nRatioY","nBoundRight","nBoundBottom","isNaN","afterLoad","test","navigator","userAgent","elZoomImage","Image","on","wrap","children","before","width","height","not","sUsemap","$map","slice","after","click","clientX","clientY","hide","elPoint","elementFromPoint","nodeName","a","split","jQuery","appendTo","append","$lensMobile","DocumentTouch","msMaxTouchPoints","$magnify","$magnifyMobile","toggle","oScrollOffset","scrollLeft","scrollTop","html","replace","$magnifyImage","oZoomSize","nXPct","nYPct","innerWidth","innerHeight"],"mappings":"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","file":"js/component-ImageZoomerComponent-js.chunks.js","sourcesContent":["import BaseComponent from '../abstracts/BaseComponent';\nimport 'jquery/dist/jquery.js'\nimport magnify from 'magnify/dist/js/jquery.magnify.js';\nimport 'magnify/dist/js/jquery.magnify-mobile.js';\nimport {match} from '../utilities/ResolutionHandler';\n\nexport default class ImageZoomerComponent extends BaseComponent {\n\n get SELECTORS() {\n return {\n zoom: '.zoom',\n modal: '#zoomModal',\n openModal: '.js-open-modal',\n modalImage: '.catalog-detail__modal-image'\n }\n }\n\n constructor(element) {\n super(element);\n this.init();\n this.openModal();\n this.closeModal();\n }\n\n init() {\n const img = this.$el.querySelector(this.SELECTORS.zoom);\n $(img).magnify();\n }\n\n openModal() {\n let currentSize = this.getMediaQuery(currentSize);\n if (currentSize !== 'large') return;\n\n this.$el.parentNode.addEventListener(\"click\", (e) => {\n e.preventDefault();\n const modal = document.querySelector(this.SELECTORS.modal);\n const modalImg = modal.querySelector(this.SELECTORS.modalImage);\n const modalCloseButton = modal.querySelector('.close');\n modal.classList.remove('hide');\n modalImg.src = e.currentTarget.href;\n modalCloseButton.focus();\n })\n\n }\n\n closeModal() {\n let currentSize = this.getMediaQuery(currentSize);\n if (currentSize !== 'large') return;\n\n const modal = document.querySelector(this.SELECTORS.modal);\n const modalCloseButton = modal.querySelector('.close');\n modalCloseButton.addEventListener(\"click\", (e) => {\n modal.classList.add('hide');\n });\n }\n\n getMediaQuery(currentSize) {\n if (match('medium', 'small')) {\n currentSize = 'small';\n } else if (match('large', 'medium')) {\n currentSize = 'medium';\n } else if (match(null, 'large')) {\n currentSize = 'large';\n }\n return currentSize;\n }\n\n}\n","/*!\n * jQuery Magnify Plugin v2.3.3 by T. H. Doan (https://thdoan.github.io/magnify/)\n * Based on http://thecodeplayer.com/walkthrough/magnifying-glass-for-images-using-jquery-and-css3\n *\n * jQuery Magnify by T. H. Doan is licensed under the MIT License.\n * Read a copy of the license in the LICENSE file or at https://choosealicense.com/licenses/mit/\n */\n\n(function($) {\n $.fn.magnify = function(oOptions) {\n // Default options\n oOptions = $.extend({\n 'src': '',\n 'speed': 100,\n 'timeout': -1,\n 'touchBottomOffset': 0,\n 'finalWidth': null,\n 'finalHeight': null,\n 'magnifiedWidth': null,\n 'magnifiedHeight': null,\n 'limitBounds': false,\n 'mobileCloseEvent': 'touchstart',\n 'afterLoad': function(){}\n }, oOptions);\n\n var $that = this, // Preserve scope\n $html = $('html'),\n\n // Initiate\n init = function(el) {\n var $image = $(el),\n $anchor = $image.closest('a'),\n oDataAttr = {};\n\n // Get data attributes\n for (var i in oOptions) {\n oDataAttr[i] = $image.attr('data-magnify-' + i.toLowerCase());\n }\n\n // Disable zooming if no valid large image source\n var sZoomSrc = oDataAttr['src'] || oOptions['src'] || $anchor.attr('href') || '';\n if (!sZoomSrc) return;\n\n var $container,\n $lens,\n nImageWidth,\n nImageHeight,\n nMagnifiedWidth,\n nMagnifiedHeight,\n nLensWidth,\n nLensHeight,\n nBoundX = 0,\n nBoundY = 0,\n nPosX, nPosY, // Absolute cursor position\n nX, nY, // Relative cursor position\n oContainerOffset, // Relative to document\n oImageOffset, // Relative to container\n // Get true offsets\n getOffset = function() {\n var o = $container.offset();\n // Store offsets from container border to image inside\n // NOTE: .offset() does NOT take into consideration image border and padding.\n oImageOffset = {\n 'top': ($image.offset().top-o.top) + parseInt($image.css('border-top-width')) + parseInt($image.css('padding-top')),\n 'left': ($image.offset().left-o.left) + parseInt($image.css('border-left-width')) + parseInt($image.css('padding-left'))\n };\n o.top += oImageOffset['top'];\n o.left += oImageOffset['left'];\n return o;\n },\n // Hide the lens\n hideLens = function() {\n if ($lens.is(':visible')) $lens.fadeOut(oOptions['speed'], function() {\n $html.removeClass('magnifying').trigger('magnifyend'); // Reset overflow-x\n });\n },\n moveLens = function(e) {\n // Reinitialize if image initially hidden\n if (!nImageHeight) {\n refresh();\n return;\n }\n if (e) {\n e.preventDefault();\n // Save last coordinates in case we need to call this function directly (required when\n // updating magnifiedWidth/magnifiedHeight while the lens is visible).\n nPosX = e.pageX || e.originalEvent.touches[0].pageX;\n nPosY = e.pageY || e.originalEvent.touches[0].pageY;\n $image.data('lastPos', {\n 'x': nPosX,\n 'y': nPosY\n });\n } else {\n nPosX = $image.data('lastPos').x;\n nPosY = $image.data('lastPos').y;\n }\n // x/y coordinates of the mouse pointer or touch point. This is the position of\n // .magnify relative to the document.\n //\n // We deduct the positions of .magnify from the mouse or touch positions relative to\n // the document to get the mouse or touch positions relative to the container.\n nX = nPosX - oContainerOffset['left'],\n nY = (nPosY - oContainerOffset['top']) - oOptions['touchBottomOffset'];\n // Toggle magnifying lens\n if (!$lens.is(':animated')) {\n if (nX>nBoundX && nXnBoundY && nY0) nRatioX = 0;\n else if (nRatioX0) nRatioY = 0;\n else if (nRatioY');\n }\n $container = $image.parent('.magnify');\n // Create the magnifying lens div if necessary\n if ($image.prev('.magnify-lens').length) {\n $container.children('.magnify-lens').css('background-image', 'url(\\'' + sZoomSrc + '\\')');\n } else {\n $image.before('
');\n }\n $lens = $container.children('.magnify-lens');\n // Remove the \"Loading...\" text\n $lens.removeClass('loading');\n // Cache dimensions and offsets for improved performance\n // NOTE: This code is inside the load() function, which is important. The width and\n // height of the object would return 0 if accessed before the image is fully loaded.\n nImageWidth = oOptions['finalWidth'] || $image.width();\n nImageHeight = oOptions['finalHeight'] || $image.height();\n nMagnifiedWidth = oOptions['magnifiedWidth'] || elZoomImage.width;\n nMagnifiedHeight = oOptions['magnifiedHeight'] || elZoomImage.height;\n nLensWidth = $lens.width();\n nLensHeight = $lens.height();\n oContainerOffset = getOffset(); // Required by refresh()\n // Set zoom boundaries\n if (oOptions['limitBounds']) {\n nBoundX = (nLensWidth/2) / (nMagnifiedWidth/nImageWidth);\n nBoundY = (nLensHeight/2) / (nMagnifiedHeight/nImageHeight);\n }\n // Enforce non-native large image size?\n if (nMagnifiedWidth!==elZoomImage.width || nMagnifiedHeight!==elZoomImage.height) {\n $lens.css('background-size', nMagnifiedWidth + 'px ' + nMagnifiedHeight + 'px');\n }\n // Store zoom dimensions for mobile plugin\n $image.data('zoomSize', {\n 'width': nMagnifiedWidth,\n 'height': nMagnifiedHeight\n });\n // Store mobile close event for mobile plugin\n $container.data('mobileCloseEvent', oDataAttr['mobileCloseEvent'] || oOptions['mobileCloseEvent']);\n // Clean up\n elZoomImage = null;\n // Execute callback\n oOptions.afterLoad();\n // Simulate a lens move to update positioning if magnifiedWidth/magnifiedHeight is\n // updated while the lens is visible\n if ($lens.is(':visible')) moveLens();\n // Handle mouse movements\n $container.off().on({\n 'mousemove touchmove': moveLens,\n 'mouseenter': function() {\n // Need to update offsets here to support accordions\n oContainerOffset = getOffset();\n },\n 'mouseleave': hideLens\n });\n\n // Prevent magnifying lens from getting \"stuck\"\n if (oOptions['timeout']>=0) {\n $container.on('touchend', function() {\n setTimeout(hideLens, oOptions['timeout']);\n });\n }\n // Ensure lens is closed when tapping outside of it\n $('body').not($container).on('touchstart', hideLens);\n\n // Support image map click-throughs while zooming\n var sUsemap = $image.attr('usemap');\n if (sUsemap) {\n var $map = $('map[name=' + sUsemap.slice(1) + ']');\n // Image map needs to be on the same DOM level as image source\n $image.after($map);\n $container.click(function(e) {\n // Trigger click on image below lens at current cursor position\n if (e.clientX || e.clientY) {\n $lens.hide();\n var elPoint = document.elementFromPoint(\n e.clientX || e.originalEvent.touches[0].clientX,\n e.clientY || e.originalEvent.touches[0].clientY\n );\n if (elPoint.nodeName==='AREA') {\n elPoint.click();\n } else {\n // Workaround for buggy implementation of elementFromPoint()\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=1227469\n $('area', $map).each(function() {\n var a = $(this).attr('coords').split(',');\n if (nX>=a[0] && nX<=a[2] && nY>=a[1] && nY<=a[3]) {\n this.click();\n return false;\n }\n });\n }\n }\n });\n }\n\n if ($anchor.length) {\n // Make parent anchor inline-block to have correct dimensions\n $anchor.css('display', 'inline-block');\n // Disable parent anchor if it's sourcing the large image\n if ($anchor.attr('href') && !(oDataAttr['src'] || oOptions['src'])) {\n $anchor.click(function(e) {\n e.preventDefault();\n });\n }\n }\n\n },\n 'error': function() {\n // Clean up\n elZoomImage = null;\n }\n });\n\n elZoomImage.src = sZoomSrc;\n }, // END init()\n\n // Simple debounce\n nTimer = 0,\n refresh = function() {\n clearTimeout(nTimer);\n nTimer = setTimeout(function() {\n $that.destroy();\n $that.magnify(oOptions);\n }, 100);\n };\n\n /**\n * Public Methods\n */\n\n // Turn off zoom and reset to original state\n this.destroy = function() {\n this.each(function() {\n var $this = $(this),\n $lens = $this.prev('div.magnify-lens'),\n sStyle = $this.data('originalStyle');\n if ($this.parent('div.magnify').length && $lens.length) {\n if (sStyle) $this.attr('style', sStyle);\n else $this.removeAttr('style');\n $this.unwrap();\n $lens.remove();\n }\n });\n // Unregister event handler\n $(window).off('resize', refresh);\n return $that;\n }\n\n // Handle window resizing\n $(window).resize(refresh);\n\n return this.each(function() {\n // Initiate magnification powers\n init(this);\n });\n\n };\n}(jQuery));\n","/*!\n * Mobile plugin for jQuery Magnify (https://thdoan.github.io/magnify/)\n *\n * jQuery Magnify by T. H. Doan is licensed under the MIT License.\n * Read a copy of the license in the LICENSE file or at https://choosealicense.com/licenses/mit/\n */\n\n(function($) {\n // Ensure this is loaded after jquery.magnify.js\n if (!$.fn.magnify) return;\n // Add required CSS\n $('').appendTo('head');\n // Ensure .magnify is rendered\n $(window).on('load', function() {\n $('body').append('
');\n var $lensMobile = $('.lens-mobile');\n // Only enable mobile zoom on smartphones\n if ($lensMobile.is(':visible') && !!('ontouchstart' in window || (window.DocumentTouch && document instanceof DocumentTouch) || navigator.msMaxTouchPoints)) {\n var $magnify = $('.magnify'),\n $magnifyMobile = $('.magnify-mobile');\n // Disable desktop magnifying lens\n $magnify.off();\n // Initiate mobile zoom\n // NOTE: Fixed elements inside a scrolling div have issues in iOS, so we need to insert the\n // close icon at the same level as the lens.\n $magnifyMobile.hide().append('×');\n // Hook up event handlers\n $magnifyMobile.children('.close').on($magnify.data('mobileCloseEvent'), function() {\n $magnifyMobile.toggle();\n });\n $magnify.children('img').on({\n 'touchend': function() {\n // Only execute on tap\n if ($(this).data('drag')) return;\n var oScrollOffset = $(this).data('scrollOffset');\n $magnifyMobile.toggle();\n // Zoom into touch point\n $lensMobile.scrollLeft(oScrollOffset.x);\n $lensMobile.scrollTop(oScrollOffset.y);\n },\n 'touchmove': function() {\n // Set drag state\n $(this).data('drag', true);\n },\n 'touchstart': function(e) {\n // Render zoom image\n // NOTE: In iOS background-image is url(...), not url(\"...\").\n $lensMobile.html('\"\"');\n // Determine zoom position\n var $magnifyImage = $(this),\n oZoomSize = $magnifyImage.data('zoomSize'),\n nX = e.originalEvent.touches[0].pageX - $magnifyImage.offset().left,\n nXPct = nX / $magnifyImage.width(),\n nY = e.originalEvent.touches[0].pageY - $magnifyImage.offset().top,\n nYPct = nY / $magnifyImage.height();\n // Store scroll offsets\n $magnifyImage.data('scrollOffset', {\n 'x': (oZoomSize.width*nXPct)-(window.innerWidth/2),\n 'y': (oZoomSize.height*nYPct)-(window.innerHeight/2)\n });\n // Reset drag state\n $(this).data('drag', false);\n }\n });\n }\n });\n}(jQuery));\n"],"sourceRoot":""}