{"version":3,"file":"photoviewer.js","sources":["../src/js/defaults.js","../src/js/utilities.js","../src/js/constants.js","../src/js/draggable.js","../src/js/movable.js","../src/js/resizable.js","../src/js/core.js"],"sourcesContent":["export default {\r\n\r\n // Enable modal to drag\r\n draggable: true,\r\n\r\n // Enable modal to resize\r\n resizable: true,\r\n\r\n // Enable image to move\r\n movable: true,\r\n\r\n // Enable keyboard navigation\r\n keyboard: true,\r\n\r\n // Shows the title\r\n title: true,\r\n\r\n // Min width of modal\r\n modalWidth: 320,\r\n\r\n // Min height of modal\r\n modalHeight: 320,\r\n\r\n // Enable the page content fixed\r\n fixedContent: true,\r\n\r\n // Disable the modal size fixed\r\n fixedModalSize: false,\r\n\r\n // Disable the image viewer maximized on init\r\n initMaximized: false,\r\n\r\n // Threshold of modal to browser window\r\n gapThreshold: 0.02,\r\n\r\n // Threshold of image ratio\r\n ratioThreshold: 0.1,\r\n\r\n // Min ratio of image when zoom out\r\n minRatio: 0.05,\r\n\r\n // Max ratio of image when zoom in\r\n maxRatio: 16,\r\n\r\n // Toolbar options in header\r\n headToolbar: [\r\n 'maximize',\r\n 'close'\r\n ],\r\n\r\n // Toolbar options in footer\r\n footToolbar: [\r\n 'zoomIn',\r\n 'zoomOut',\r\n 'prev',\r\n 'fullscreen',\r\n 'next',\r\n 'actualSize',\r\n 'rotateRight'\r\n ],\r\n\r\n // Customize button icon\r\n icons: {\r\n minimize: `\r\n \r\n `,\r\n maximize: `\r\n \r\n `,\r\n close: `\r\n \r\n `,\r\n zoomIn: `\r\n \r\n `,\r\n zoomOut: `\r\n \r\n `,\r\n prev: `\r\n \r\n `,\r\n next: `\r\n \r\n `,\r\n fullscreen: `\r\n \r\n `,\r\n actualSize: `\r\n \r\n `,\r\n rotateLeft: `\r\n \r\n `,\r\n rotateRight: `\r\n \r\n `\r\n },\r\n\r\n // Customize language of button title\r\n i18n: {\r\n minimize: 'minimize',\r\n maximize: 'maximize',\r\n close: 'close',\r\n zoomIn: 'zoom-in(+)',\r\n zoomOut: 'zoom-out(-)',\r\n prev: 'prev(←)',\r\n next: 'next(→)',\r\n fullscreen: 'fullscreen',\r\n actualSize: 'actual-size(Ctrl+Alt+0)',\r\n rotateLeft: 'rotate-left(Ctrl+,)',\r\n rotateRight: 'rotate-right(Ctrl+.)'\r\n },\r\n\r\n // Enable multiple instances\r\n multiInstances: true,\r\n\r\n // Enable animation\r\n initAnimation: true,\r\n\r\n // Disable modal position fixed when change images\r\n fixedModalPos: false,\r\n\r\n // Modal z-index\r\n zIndex: 1090,\r\n\r\n // Selector of drag handler\r\n dragHandle: false,\r\n\r\n // Callback events\r\n callbacks: {\r\n beforeOpen: $.noop,\r\n opened: $.noop,\r\n beforeClose: $.noop,\r\n closed: $.noop,\r\n beforeChange: $.noop,\r\n changed: $.noop\r\n },\r\n\r\n // Start images index\r\n index: 0,\r\n\r\n // Load the image progressively\r\n progressiveLoading: true\r\n\r\n}\r\n","/**\r\n * [getImgSrc]\r\n * @param {[Object]} el [description]\r\n */\r\nexport function getImgSrc(el) {\r\n // Get data-src as image src at first\r\n let src = $(el).attr('data-src')\r\n ? $(el).attr('data-src')\r\n : $(el).attr('href');\r\n return src;\r\n}\r\n\r\n/**\r\n * [throttle]\r\n * @param {Function} fn [description]\r\n * @param {[Number]} delay [description]\r\n * @return {Function} [description]\r\n */\r\nexport function throttle(fn, delay) {\r\n\r\n let timer = null;\r\n\r\n return function () {\r\n let context = this,\r\n args = arguments;\r\n\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(function () {\r\n fn.apply(context, args);\r\n }, delay);\r\n };\r\n\r\n}\r\n\r\n/**\r\n * [preloadImg]\r\n * @param {[String]} src [image src]\r\n * @param {Function} success [callbacks]\r\n * @param {Function} error [callbacks]\r\n */\r\nexport function preloadImg(src, success, error) {\r\n\r\n let img = new Image();\r\n\r\n img.onload = function () {\r\n success(img);\r\n };\r\n\r\n img.onerror = function () {\r\n error(img);\r\n };\r\n\r\n img.src = src;\r\n\r\n}\r\n\r\n/**\r\n * [requestFullscreen]\r\n * @param {[type]} element [description]\r\n */\r\nexport function requestFullscreen(element) {\r\n if (element.requestFullscreen) {\r\n element.requestFullscreen();\r\n } else if (element.mozRequestFullScreen) {\r\n element.mozRequestFullScreen();\r\n } else if (element.webkitRequestFullscreen) {\r\n element.webkitRequestFullscreen();\r\n } else if (element.msRequestFullscreen) {\r\n element.msRequestFullscreen();\r\n }\r\n}\r\n\r\n/**\r\n * [exitFullscreen]\r\n */\r\nexport function exitFullscreen() {\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n } else if (document.mozCancelFullScreen) {\r\n document.mozCancelFullScreen();\r\n } else if (document.webkitExitFullscreen) {\r\n document.webkitExitFullscreen();\r\n }\r\n}\r\n\r\n/**\r\n * [getImageNameFromUrl]\r\n * @param {[String]} url [description]\r\n * @return {[String]} [description]\r\n */\r\nexport function getImageNameFromUrl(url) {\r\n let reg = /^.*?\\/*([^/?]*)\\.[a-z]+(\\?.+|$)/ig,\r\n txt = url.replace(reg, '$1');\r\n return txt;\r\n}\r\n\r\n/**\r\n * [getNumFromCSSValue]\r\n * @param {[String]} value [description]\r\n * @return {[Number]} [description]\r\n */\r\nexport function getNumFromCSSValue(value) {\r\n let reg = /\\d+/g,\r\n arr = value.match(reg),\r\n num = parseFloat(arr[0]);\r\n return num;\r\n}\r\n\r\n/**\r\n * [hasScrollbar]\r\n * @return {[Boolean]} [description]\r\n */\r\nexport function hasScrollbar() {\r\n return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight);\r\n}\r\n\r\n/**\r\n * [getScrollbarWidth]\r\n * @return {[Number]} [description]\r\n */\r\nexport function getScrollbarWidth() {\r\n\r\n let scrollDiv = document.createElement('div');\r\n scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\r\n document.body.appendChild(scrollDiv);\r\n let scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n document.body.removeChild(scrollDiv);\r\n\r\n return scrollbarWidth;\r\n\r\n}\r\n\r\n/**\r\n * [setGrabCursor]\r\n * @param {[Object]} imageData [description]\r\n * @param {[Object]} stageData [description]\r\n * @param {[Object]} stage [description]\r\n * @param {[Boolean]} isRotate [description]\r\n */\r\nexport function setGrabCursor(imageData, stageData, stage, isRotated) {\r\n\r\n let imageWidth = !isRotated ? imageData.w : imageData.h,\r\n imageHeight = !isRotated ? imageData.h : imageData.w;\r\n\r\n if (imageHeight > stageData.h || imageWidth > stageData.w) {\r\n stage.addClass('is-grab');\r\n }\r\n if (imageHeight <= stageData.h && imageWidth <= stageData.w) {\r\n stage.removeClass('is-grab');\r\n }\r\n}\r\n\r\n/**\r\n * [supportTouch]\r\n * @return {[Boolean]} [description]\r\n */\r\nexport function supportTouch() {\r\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\r\n}\r\n","import defaults from './defaults';\nimport { supportTouch } from './utilities';\n\nexport const $W = $(window);\nexport const $D = $(document);\n\nexport const CLICK_EVENT = 'click';\nexport const RESIZE_EVENT = 'resize';\nexport const KEYDOWN_EVENT = 'keydown';\nexport const WHEEL_EVENT = 'wheel mousewheel DOMMouseScroll';\n\nexport const TOUCH_START_EVENT = supportTouch() ? 'touchstart' : 'mousedown';\nexport const TOUCH_MOVE_EVENT = supportTouch() ? 'touchmove' : 'mousemove';\nexport const TOUCH_END_EVENT = supportTouch() ? 'touchend' : 'mouseup';\n\nexport const NS = 'photoviewer';\nexport const CLASS_NS = '.' + NS;\nexport const EVENT_NS = '.' + NS;\n\nexport const PUBLIC_VARS = {\n // image moving flag\n isMoving: false,\n // modal resizing flag\n isResizing: false,\n // modal z-index setting\n zIndex: defaults.zIndex,\n};\n","import {\r\n $D,\r\n TOUCH_START_EVENT,\r\n TOUCH_MOVE_EVENT,\r\n TOUCH_END_EVENT,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nexport default {\r\n\r\n /**\r\n * [draggable]\r\n * @param {[Object]} modal [the modal element]\r\n * @param {[Object]} dragHandle [the handle element when dragging]\r\n * @param {[Object]} dragCancel [the cancel element when dragging]\r\n */\r\n draggable(modal, dragHandle, dragCancel) {\r\n\r\n let isDragging = false;\r\n\r\n let startX = 0,\r\n startY = 0,\r\n\r\n left = 0,\r\n top = 0;\r\n\r\n let dragStart = (e) => {\r\n\r\n e = e || window.event;\r\n\r\n // Must be removed\r\n // e.preventDefault();\r\n\r\n if (this.options.multiInstances) {\r\n modal.css('z-index', ++PUBLIC_VARS['zIndex']);\r\n }\r\n\r\n // Get clicked button\r\n let elemCancel = $(e.target).closest(dragCancel);\r\n // Stop modal moving when click buttons\r\n if (elemCancel.length) {\r\n return true;\r\n }\r\n\r\n isDragging = true;\r\n\r\n startX = e.type === 'touchstart'\r\n ? e.originalEvent.targetTouches[0].pageX\r\n : e.clientX;\r\n startY = e.type === 'touchstart'\r\n ? e.originalEvent.targetTouches[0].pageY\r\n : e.clientY;\r\n\r\n left = $(modal).offset().left;\r\n top = $(modal).offset().top;\r\n\r\n $D.on(TOUCH_MOVE_EVENT + EVENT_NS, dragMove)\r\n .on(TOUCH_END_EVENT + EVENT_NS, dragEnd);\r\n\r\n };\r\n\r\n let dragMove = (e) => {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging && !PUBLIC_VARS['isMoving'] && !PUBLIC_VARS['isResizing'] && !this.isMaximized) {\r\n\r\n let endX = e.type === 'touchmove'\r\n ? e.originalEvent.targetTouches[0].pageX\r\n : e.clientX,\r\n endY = e.type === 'touchmove'\r\n ? e.originalEvent.targetTouches[0].pageY\r\n : e.clientY,\r\n\r\n relativeX = endX - startX,\r\n relativeY = endY - startY;\r\n\r\n $(modal).css({\r\n left: relativeX + left + 'px',\r\n top: relativeY + top + 'px'\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = () => {\r\n\r\n $D.off(TOUCH_MOVE_EVENT + EVENT_NS, dragMove)\r\n .off(TOUCH_END_EVENT + EVENT_NS, dragEnd);\r\n\r\n isDragging = false;\r\n\r\n };\r\n\r\n $(dragHandle).on(TOUCH_START_EVENT + EVENT_NS, dragStart);\r\n\r\n }\r\n\r\n}\r\n","import {\r\n $D,\r\n TOUCH_START_EVENT,\r\n TOUCH_MOVE_EVENT,\r\n TOUCH_END_EVENT,\r\n NS,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nconst ELEMS_WITH_GRABBING_CURSOR = `html,body,.${NS}-modal,.${NS}-stage,.${NS}-button,.${NS}-resizable-handle`;\r\n\r\nexport default {\r\n\r\n /**\r\n * --------------------------------------\r\n * 1.no movable\r\n * 2.vertical movable\r\n * 3.horizontal movable\r\n * 4.vertical & horizontal movable\r\n * --------------------------------------\r\n *\r\n * [image movable]\r\n * @param {[Object]} stage [the stage element]\r\n * @param {[Object]} image [the image element]\r\n */\r\n movable(stage, image) {\r\n\r\n let isDragging = false;\r\n\r\n let startX = 0,\r\n startY = 0,\r\n\r\n left = 0,\r\n top = 0,\r\n\r\n widthDiff = 0,\r\n heightDiff = 0,\r\n\r\n δ = 0;\r\n\r\n let dragStart = (e) => {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n let imageWidth = $(image).width(),\r\n imageHeight = $(image).height(),\r\n stageWidth = $(stage).width(),\r\n stageHeight = $(stage).height();\r\n\r\n startX = e.type === 'touchstart'\r\n ? e.originalEvent.targetTouches[0].pageX\r\n : e.clientX;\r\n startY = e.type === 'touchstart'\r\n ? e.originalEvent.targetTouches[0].pageY\r\n : e.clientY;\r\n\r\n // δ is the difference between image width and height\r\n δ = !this.isRotated ? 0 : (imageWidth - imageHeight) / 2;\r\n\r\n // Width or height difference can be use to limit image right or top position\r\n widthDiff = !this.isRotated\r\n ? (imageWidth - stageWidth)\r\n : (imageHeight - stageWidth);\r\n heightDiff = !this.isRotated\r\n ? (imageHeight - stageHeight)\r\n : (imageWidth - stageHeight);\r\n\r\n // Modal can be dragging if image is smaller to stage\r\n isDragging = (widthDiff > 0 || heightDiff > 0) ? true : false;\r\n PUBLIC_VARS['isMoving'] = (widthDiff > 0 || heightDiff > 0) ? true : false;\r\n\r\n // Reclac the element position when mousedown\r\n // Fixed the issue of stage with a border\r\n left = $(image).position().left - δ;\r\n top = $(image).position().top + δ;\r\n\r\n // Add grabbing cursor\r\n if (stage.hasClass('is-grab')) {\r\n $(ELEMS_WITH_GRABBING_CURSOR).addClass('is-grabbing');\r\n }\r\n\r\n $D.on(TOUCH_MOVE_EVENT + EVENT_NS, dragMove)\r\n .on(TOUCH_END_EVENT + EVENT_NS, dragEnd);\r\n\r\n };\r\n\r\n let dragMove = (e) => {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging) {\r\n\r\n let endX = e.type === 'touchmove'\r\n ? e.originalEvent.targetTouches[0].pageX\r\n : e.clientX,\r\n endY = e.type === 'touchmove'\r\n ? e.originalEvent.targetTouches[0].pageY\r\n : e.clientY,\r\n\r\n relativeX = endX - startX,\r\n relativeY = endY - startY,\r\n\r\n newLeft = relativeX + left,\r\n newTop = relativeY + top;\r\n\r\n // vertical limit\r\n if (heightDiff > 0) {\r\n\r\n if ((relativeY + top) > δ) {\r\n newTop = δ;\r\n } else if ((relativeY + top) < -heightDiff + δ) {\r\n newTop = -heightDiff + δ;\r\n }\r\n\r\n } else {\r\n newTop = top;\r\n }\r\n // horizontal limit\r\n if (widthDiff > 0) {\r\n\r\n if ((relativeX + left) > -δ) {\r\n newLeft = -δ;\r\n } else if ((relativeX + left) < -widthDiff - δ) {\r\n newLeft = -widthDiff - δ;\r\n }\r\n\r\n } else {\r\n newLeft = left;\r\n }\r\n\r\n $(image).css({\r\n left: newLeft + 'px',\r\n top: newTop + 'px'\r\n });\r\n\r\n // Update image initial data\r\n $.extend(this.imageData, {\r\n left: newLeft,\r\n top: newTop\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = () => {\r\n\r\n $D.off(TOUCH_MOVE_EVENT + EVENT_NS, dragMove)\r\n .off(TOUCH_END_EVENT + EVENT_NS, dragEnd);\r\n\r\n isDragging = false;\r\n PUBLIC_VARS['isMoving'] = false;\r\n\r\n // Remove grabbing cursor\r\n $(ELEMS_WITH_GRABBING_CURSOR).removeClass('is-grabbing');\r\n\r\n };\r\n\r\n $(stage).on(TOUCH_START_EVENT + EVENT_NS, dragStart);\r\n\r\n }\r\n\r\n}\r\n","import {\r\n $D,\r\n TOUCH_START_EVENT,\r\n TOUCH_MOVE_EVENT,\r\n TOUCH_END_EVENT,\r\n NS,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nimport {\r\n setGrabCursor\r\n} from './utilities';\r\n\r\nconst ELEMS_WITH_RESIZE_CURSOR = `html,body,.${NS}-modal,.${NS}-stage,.${NS}-button`;\r\n\r\nexport default {\r\n\r\n /**\r\n * ------------------------------\r\n * 1.modal resizable\r\n * 2.keep image in stage center\r\n * 3.other image limitations\r\n * ------------------------------\r\n *\r\n * [resizable]\r\n * @param {[Object]} modal [the modal element]\r\n * @param {[Object]} stage [the stage element]\r\n * @param {[Object]} image [the image element]\r\n * @param {[Number]} minWidth [the option of modalWidth]\r\n * @param {[Number]} minHeight [the option of modalHeight]\r\n */\r\n resizable(modal, stage, image, minWidth, minHeight) {\r\n\r\n let resizableHandleE = $(`
`),\r\n resizableHandleW = $(`
`),\r\n resizableHandleS = $(`
`),\r\n resizableHandleN = $(`
`),\r\n resizableHandleSE = $(`
`),\r\n resizableHandleSW = $(`
`),\r\n resizableHandleNE = $(`
`),\r\n resizableHandleNW = $(`
`);\r\n\r\n let resizableHandles = {\r\n 'e': resizableHandleE,\r\n 's': resizableHandleS,\r\n 'se': resizableHandleSE,\r\n 'n': resizableHandleN,\r\n 'w': resizableHandleW,\r\n 'nw': resizableHandleNW,\r\n 'ne': resizableHandleNE,\r\n 'sw': resizableHandleSW\r\n };\r\n\r\n $(modal).append(\r\n resizableHandleE, resizableHandleW, resizableHandleS, resizableHandleN,\r\n resizableHandleSE, resizableHandleSW, resizableHandleNE, resizableHandleNW\r\n );\r\n\r\n let isDragging = false;\r\n\r\n let startX = 0,\r\n startY = 0,\r\n\r\n modalData = {\r\n w: 0,\r\n h: 0,\r\n l: 0,\r\n t: 0\r\n },\r\n stageData = {\r\n w: 0,\r\n h: 0,\r\n l: 0,\r\n t: 0\r\n },\r\n imageData = {\r\n w: 0,\r\n h: 0,\r\n l: 0,\r\n t: 0\r\n },\r\n\r\n // δ is the difference between image width and height\r\n δ = 0,\r\n imgWidth = 0,\r\n imgHeight = 0,\r\n\r\n direction = '';\r\n\r\n // modal CSS options\r\n let getModalOpts = function (dir, offsetX, offsetY) {\r\n\r\n // Modal should not move when its width to the minwidth\r\n let modalLeft = (-offsetX + modalData.w) > minWidth\r\n ? (offsetX + modalData.l)\r\n : (modalData.l + modalData.w - minWidth),\r\n modalTop = (-offsetY + modalData.h) > minHeight\r\n ? (offsetY + modalData.t)\r\n : (modalData.t + modalData.h - minHeight);\r\n\r\n let opts = {\r\n 'e': {\r\n width: Math.max((offsetX + modalData.w), minWidth) + 'px'\r\n },\r\n 's': {\r\n height: Math.max((offsetY + modalData.h), minHeight) + 'px'\r\n },\r\n 'se': {\r\n width: Math.max((offsetX + modalData.w), minWidth) + 'px',\r\n height: Math.max((offsetY + modalData.h), minHeight) + 'px'\r\n },\r\n 'w': {\r\n width: Math.max((-offsetX + modalData.w), minWidth) + 'px',\r\n left: modalLeft + 'px'\r\n },\r\n 'n': {\r\n height: Math.max((-offsetY + modalData.h), minHeight) + 'px',\r\n top: modalTop + 'px'\r\n },\r\n 'nw': {\r\n width: Math.max((-offsetX + modalData.w), minWidth) + 'px',\r\n height: Math.max((-offsetY + modalData.h), minHeight) + 'px',\r\n top: modalTop + 'px',\r\n left: modalLeft + 'px'\r\n },\r\n 'ne': {\r\n width: Math.max((offsetX + modalData.w), minWidth) + 'px',\r\n height: Math.max((-offsetY + modalData.h), minHeight) + 'px',\r\n top: modalTop + 'px'\r\n },\r\n 'sw': {\r\n width: Math.max((-offsetX + modalData.w), minWidth) + 'px',\r\n height: Math.max((offsetY + modalData.h), minHeight) + 'px',\r\n left: modalLeft + 'px'\r\n }\r\n };\r\n\r\n return opts[dir];\r\n };\r\n\r\n // image CSS options\r\n let getImageOpts = function (dir, offsetX, offsetY) {\r\n\r\n // Image should not move when modal width to the min width\r\n // The minwidth is modal width, so we should clac the stage minwidth\r\n let widthDiff = (offsetX + modalData.w) > minWidth\r\n ? (stageData.w - imgWidth + offsetX - δ)\r\n : (minWidth - (modalData.w - stageData.w) - imgWidth - δ),\r\n heightDiff = (offsetY + modalData.h) > minHeight\r\n ? (stageData.h - imgHeight + offsetY + δ)\r\n : (minHeight - (modalData.h - stageData.h) - imgHeight + δ),\r\n\r\n widthDiff2 = (-offsetX + modalData.w) > minWidth\r\n ? (stageData.w - imgWidth - offsetX - δ)\r\n : (minWidth - (modalData.w - stageData.w) - imgWidth - δ),\r\n heightDiff2 = (-offsetY + modalData.h) > minHeight\r\n ? (stageData.h - imgHeight - offsetY + δ)\r\n : (minHeight - (modalData.h - stageData.h) - imgHeight + δ);\r\n\r\n // Get image position in dragging\r\n let imgLeft = (widthDiff > 0\r\n ? $(image).position().left\r\n : ($(image).position().left < 0\r\n ? $(image).position().left\r\n : 0)) - δ,\r\n imgTop = (heightDiff > 0\r\n ? $(image).position().top\r\n : ($(image).position().top < 0\r\n ? $(image).position().top\r\n : 0)) + δ,\r\n\r\n imgLeft2 = (widthDiff2 > 0\r\n ? $(image).position().left\r\n : ($(image).position().left < 0\r\n ? $(image).position().left\r\n : 0)) - δ,\r\n imgTop2 = (heightDiff2 > 0\r\n ? $(image).position().top\r\n : ($(image).position().top < 0\r\n ? $(image).position().top\r\n : 0)) + δ;\r\n\r\n let opts = {\r\n 'e': {\r\n left: widthDiff >= -δ\r\n ? ((widthDiff - δ) / 2 + 'px')\r\n : (imgLeft > widthDiff\r\n ? (imgLeft + 'px')\r\n : (widthDiff + 'px'))\r\n },\r\n 's': {\r\n top: heightDiff >= δ\r\n ? ((heightDiff + δ) / 2 + 'px')\r\n : (imgTop > heightDiff\r\n ? (imgTop + 'px')\r\n : (heightDiff + 'px'))\r\n },\r\n 'se': {\r\n top: heightDiff >= δ\r\n ? ((heightDiff + δ) / 2 + 'px')\r\n : (imgTop > heightDiff\r\n ? (imgTop + 'px')\r\n : (heightDiff + 'px')),\r\n left: widthDiff >= -δ\r\n ? ((widthDiff - δ) / 2 + 'px')\r\n : (imgLeft > widthDiff\r\n ? (imgLeft + 'px')\r\n : (widthDiff + 'px'))\r\n },\r\n 'w': {\r\n left: widthDiff2 >= -δ\r\n ? ((widthDiff2 - δ) / 2 + 'px')\r\n : (imgLeft2 > widthDiff2\r\n ? (imgLeft2 + 'px')\r\n : (widthDiff2 + 'px'))\r\n },\r\n 'n': {\r\n top: heightDiff2 >= δ\r\n ? ((heightDiff2 + δ) / 2 + 'px')\r\n : (imgTop2 > heightDiff2\r\n ? (imgTop2 + 'px')\r\n : (heightDiff2 + 'px'))\r\n },\r\n 'nw': {\r\n top: heightDiff2 >= δ\r\n ? ((heightDiff2 + δ) / 2 + 'px')\r\n : (imgTop2 > heightDiff2\r\n ? (imgTop2 + 'px')\r\n : (heightDiff2 + 'px')),\r\n left: widthDiff2 >= -δ\r\n ? ((widthDiff2 - δ) / 2 + 'px')\r\n : (imgLeft2 > widthDiff2\r\n ? (imgLeft2 + 'px')\r\n : (widthDiff2 + 'px'))\r\n },\r\n 'ne': {\r\n top: heightDiff2 >= δ\r\n ? ((heightDiff2 + δ) / 2 + 'px')\r\n : (imgTop2 > heightDiff2\r\n ? (imgTop2 + 'px')\r\n : (heightDiff2 + 'px')),\r\n left: widthDiff >= -δ\r\n ? ((widthDiff - δ) / 2 + 'px')\r\n : (imgLeft > widthDiff\r\n ? (imgLeft + 'px')\r\n : (widthDiff + 'px'))\r\n },\r\n 'sw': {\r\n top: heightDiff >= δ\r\n ? ((heightDiff + δ) / 2 + 'px')\r\n : (imgTop > heightDiff\r\n ? (imgTop + 'px')\r\n : (heightDiff + 'px')),\r\n left: widthDiff2 >= -δ\r\n ? ((widthDiff2 - δ) / 2 + 'px')\r\n : (imgLeft2 > widthDiff2\r\n ? (imgLeft2 + 'px')\r\n : (widthDiff2 + 'px'))\r\n }\r\n };\r\n\r\n return opts[dir];\r\n };\r\n\r\n let dragStart = (dir, e) => {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n isDragging = true;\r\n PUBLIC_VARS['isResizing'] = true;\r\n\r\n startX = e.type === 'touchstart'\r\n ? e.originalEvent.targetTouches[0].pageX\r\n : e.clientX;\r\n startY = e.type === 'touchstart'\r\n ? e.originalEvent.targetTouches[0].pageY\r\n : e.clientY;\r\n\r\n // Reclac the modal data when mousedown\r\n modalData = {\r\n w: $(modal).width(),\r\n h: $(modal).height(),\r\n l: $(modal).offset().left,\r\n t: $(modal).offset().top\r\n };\r\n\r\n stageData = {\r\n w: $(stage).width(),\r\n h: $(stage).height(),\r\n l: $(stage).offset().left,\r\n t: $(stage).offset().top\r\n };\r\n\r\n imageData = {\r\n w: $(image).width(),\r\n h: $(image).height(),\r\n l: $(image).position().left,\r\n t: $(image).position().top\r\n };\r\n\r\n // δ is the difference between image width and height\r\n δ = !this.isRotated\r\n ? 0\r\n : (imageData.w - imageData.h) / 2;\r\n imgWidth = !this.isRotated\r\n ? imageData.w\r\n : imageData.h;\r\n imgHeight = !this.isRotated\r\n ? imageData.h\r\n : imageData.w;\r\n\r\n direction = dir;\r\n\r\n // Add resizable cursor\r\n $(ELEMS_WITH_RESIZE_CURSOR).css('cursor', dir + '-resize');\r\n\r\n $D.on(TOUCH_MOVE_EVENT + EVENT_NS, dragMove)\r\n .on(TOUCH_END_EVENT + EVENT_NS, dragEnd);\r\n\r\n };\r\n\r\n let dragMove = (e) => {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging && !this.isMaximized) {\r\n\r\n let endX = e.type === 'touchmove'\r\n ? e.originalEvent.targetTouches[0].pageX\r\n : e.clientX,\r\n endY = e.type === 'touchmove'\r\n ? e.originalEvent.targetTouches[0].pageY\r\n : e.clientY,\r\n\r\n relativeX = endX - startX,\r\n relativeY = endY - startY;\r\n\r\n let modalOpts = getModalOpts(direction, relativeX, relativeY);\r\n\r\n $(modal).css(modalOpts);\r\n\r\n let imageOpts = getImageOpts(direction, relativeX, relativeY);\r\n\r\n $(image).css(imageOpts);\r\n\r\n this.isDoResize = true;\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = () => {\r\n\r\n $D.off(TOUCH_MOVE_EVENT + EVENT_NS, dragMove)\r\n .off(TOUCH_END_EVENT + EVENT_NS, dragEnd);\r\n\r\n // Set grab cursor\r\n if (PUBLIC_VARS['isResizing']) {\r\n setGrabCursor(\r\n {\r\n w: imgWidth,\r\n h: imgHeight\r\n },\r\n {\r\n w: $(stage).width(),\r\n h: $(stage).height()\r\n },\r\n stage\r\n );\r\n }\r\n\r\n isDragging = false;\r\n PUBLIC_VARS['isResizing'] = false;\r\n\r\n // Remove resizable cursor\r\n $(ELEMS_WITH_RESIZE_CURSOR).css('cursor', '');\r\n\r\n // Update image initial data\r\n let scale = this.getImageScaleToStage(\r\n $(stage).width(),\r\n $(stage).height()\r\n );\r\n\r\n $.extend(this.imageData, {\r\n initWidth: this.img.width * scale,\r\n initHeight: this.img.height * scale,\r\n initLeft: ($(stage).width() - this.img.width * scale) / 2,\r\n initTop: ($(stage).height() - this.img.height * scale) / 2\r\n });\r\n\r\n };\r\n\r\n $.each(resizableHandles, function (dir, handle) {\r\n handle.on(TOUCH_START_EVENT + EVENT_NS, function (e) {\r\n dragStart(dir, e);\r\n });\r\n });\r\n\r\n }\r\n\r\n}\r\n","import $ from 'jquery';\n\nimport DEFAULTS from './defaults';\n\nimport {\n $W,\n $D,\n CLICK_EVENT,\n RESIZE_EVENT,\n KEYDOWN_EVENT,\n WHEEL_EVENT,\n NS,\n CLASS_NS,\n EVENT_NS,\n PUBLIC_VARS\n} from './constants';\n\nimport {\n getImgSrc,\n throttle,\n preloadImg,\n requestFullscreen,\n getImageNameFromUrl,\n getNumFromCSSValue,\n hasScrollbar,\n getScrollbarWidth,\n setGrabCursor\n} from './utilities';\n\nimport draggable from './draggable';\nimport movable from './movable';\nimport resizable from './resizable';\n\n/**\n * PhotoViewer Class\n */\nclass PhotoViewer {\n\n constructor(items, options, el) {\n\n this.options = $.extend(true, {}, DEFAULTS, options);\n\n if (options && $.isArray(options.footToolbar)) {\n this.options.footToolbar = options.footToolbar;\n }\n\n if (options && $.isArray(options.headToolbar)) {\n this.options.headToolbar = options.headToolbar;\n }\n\n // Store element of clicked\n this.$el = $(el);\n\n // As we have multiple instances,\n // so every instance has following variables.\n\n // modal open flag\n this.isOpened = false;\n // modal maximize flag\n this.isMaximized = false;\n // image rotate 90*(2n+1) flag\n this.isRotated = false;\n // image rotate angle\n this.rotateAngle = 0;\n\n // if modal do resize\n this.isDoResize = false;\n\n // Store image data in every instance\n this.imageData = {};\n // Store modal data in every instance\n this.modalData = {\n width: null,\n height: null,\n left: null,\n top: null\n };\n\n this.init(items, this.options, el);\n\n }\n\n init(items, opts, el) {\n\n this.groupData = items;\n this.groupIndex = opts['index'];\n\n // Get image src\n let imgSrc = items[this.groupIndex]['src'];\n\n this.open();\n\n this.loadImg(imgSrc);\n\n // draggable & movable & resizable\n if (opts.draggable) {\n this.draggable(this.$photoviewer, this.dragHandle, CLASS_NS + '-button');\n }\n if (opts.movable) {\n this.movable(this.$stage, this.$image);\n }\n if (opts.resizable) {\n this.resizable(\n this.$photoviewer,\n this.$stage,\n this.$image,\n opts.modalWidth,\n opts.modalHeight\n );\n }\n\n }\n\n _creatBtns(toolbar, btns) {\n\n let btnsStr = '';\n\n $.each(toolbar, function (index, item) {\n btnsStr += btns[item];\n });\n\n return btnsStr;\n\n }\n\n _creatTitle() {\n return (this.options.title ? `
` : '');\n }\n\n _creatDOM() {\n\n let btnsTpl = {\n minimize: ``,\n maximize: ``,\n close: ``,\n zoomIn: ``,\n zoomOut: ``,\n prev: ``,\n next: ``,\n fullscreen: ``,\n actualSize: ``,\n rotateLeft: ``,\n rotateRight: ``\n };\n\n // photoviewer base HTML\n let photoviewerHTML =\n `
\n
\n
\n
\n ${this._creatBtns(this.options.headToolbar, btnsTpl)}\n
\n ${this._creatTitle()}\n
\n
\n \"\"\n
\n
\n
\n ${this._creatBtns(this.options.footToolbar, btnsTpl)}\n
\n
\n
\n
`;\n\n return photoviewerHTML;\n\n }\n\n build() {\n\n // Create photoviewer HTML string\n let photoviewerHTML = this._creatDOM();\n\n // Make photoviewer HTML string to jQuery element\n let $photoviewer = $(photoviewerHTML);\n\n // Get all photoviewer element\n this.$photoviewer = $photoviewer;\n this.$header = $photoviewer.find(CLASS_NS + '-header');\n this.$headToolbar = $photoviewer.find(CLASS_NS + '-toolbar-head');\n this.$footer = $photoviewer.find(CLASS_NS + '-footer');\n this.$footToolbar = $photoviewer.find(CLASS_NS + '-toolbar-foot');\n this.$stage = $photoviewer.find(CLASS_NS + '-stage');\n this.$title = $photoviewer.find(CLASS_NS + '-title');\n this.$image = $photoviewer.find(CLASS_NS + '-image');\n this.$close = $photoviewer.find(CLASS_NS + '-button-close');\n this.$maximize = $photoviewer.find(CLASS_NS + '-button-maximize');\n this.$minimize = $photoviewer.find(CLASS_NS + '-button-minimize');\n this.$zoomIn = $photoviewer.find(CLASS_NS + '-button-zoom-in');\n this.$zoomOut = $photoviewer.find(CLASS_NS + '-button-zoom-out');\n this.$actualSize = $photoviewer.find(CLASS_NS + '-button-actual-size');\n this.$fullscreen = $photoviewer.find(CLASS_NS + '-button-fullscreen');\n this.$rotateLeft = $photoviewer.find(CLASS_NS + '-button-rotate-left');\n this.$rotateRight = $photoviewer.find(CLASS_NS + '-button-rotate-right');\n this.$prev = $photoviewer.find(CLASS_NS + '-button-prev');\n this.$next = $photoviewer.find(CLASS_NS + '-button-next');\n\n // Add class before image loaded\n this.$stage.addClass('stage-ready');\n this.$image.addClass('image-ready');\n\n // Reset modal z-index with multiple instances\n this.$photoviewer.css('z-index', PUBLIC_VARS['zIndex']);\n\n // Set handle element of draggable\n if (!this.options.dragHandle || this.options.dragHandle === CLASS_NS + '-modal') {\n this.dragHandle = this.$photoviewer;\n } else {\n this.dragHandle = this.$photoviewer.find(this.options.dragHandle);\n }\n\n }\n\n open() {\n\n if (!this.options.multiInstances) {\n $(CLASS_NS + '-modal').eq(0).remove();\n }\n\n // Fixed modal position bug\n if (!$(CLASS_NS + '-modal').length && this.options.fixedContent) {\n\n $('html').css({ 'overflow': 'hidden' });\n\n if (hasScrollbar()) {\n let scrollbarWidth = getScrollbarWidth();\n if (scrollbarWidth) {\n $('html').css({ 'padding-right': scrollbarWidth });\n }\n }\n\n }\n\n this.build();\n\n this._triggerHook('beforeOpen', this.$el);\n\n // Add PhotoViewer to DOM\n $('body').append(this.$photoviewer);\n\n this.addEvents();\n\n this.setModalPos(this.$photoviewer);\n\n this._triggerHook('opened', this.$el);\n\n }\n\n close() {\n\n this._triggerHook('beforeClose', this.$el);\n\n // Remove instance\n this.$photoviewer.remove();\n\n this.isOpened = false;\n this.isMaximized = false;\n this.isRotated = false;\n this.rotateAngle = 0;\n\n let zeroModal = !$(CLASS_NS + '-modal').length;\n\n // Fixed modal position bug\n if (zeroModal && this.options.fixedContent) {\n $('html').css({ 'overflow': '', 'padding-right': '' });\n }\n\n // Reset zIndex after close\n if (zeroModal && this.options.multiInstances) {\n PUBLIC_VARS['zIndex'] = this.options.zIndex;\n }\n\n // off events\n if (!$(CLASS_NS + '-modal').length) {\n $D.off(KEYDOWN_EVENT + EVENT_NS);\n $W.off(RESIZE_EVENT + EVENT_NS);\n }\n\n this._triggerHook('closed', this.$el);\n\n }\n\n setModalPos(modal) {\n\n let winWidth = $W.width(),\n winHeight = $W.height(),\n scrollLeft = $D.scrollLeft(),\n scrollTop = $D.scrollTop();\n\n let modalWidth = this.options.modalWidth,\n modalHeight = this.options.modalHeight;\n\n // Set modal maximized when init\n if (this.options.initMaximized) {\n\n modal.addClass(NS + '-maximize');\n\n modal.css({\n width: '100%',\n height: '100%',\n left: 0,\n top: 0\n });\n\n this.isOpened = true;\n this.isMaximized = true;\n\n } else {\n\n // Make the modal in windows center\n modal.css({\n width: modalWidth,\n height: modalHeight,\n left: (winWidth - modalWidth) / 2 + scrollLeft + 'px',\n top: (winHeight - modalHeight) / 2 + scrollTop + 'px'\n });\n\n }\n\n }\n\n setModalSize(img) {\n\n let winWidth = $W.width(),\n winHeight = $W.height(),\n scrollLeft = $D.scrollLeft(),\n scrollTop = $D.scrollTop();\n\n // stage css value\n let stageCSS = {\n left: this.$stage.css('left'),\n right: this.$stage.css('right'),\n top: this.$stage.css('top'),\n bottom: this.$stage.css('bottom'),\n borderLeft: this.$stage.css('border-left-width'),\n borderRight: this.$stage.css('border-right-width'),\n borderTop: this.$stage.css('border-top-width'),\n borderBottom: this.$stage.css('border-bottom-width')\n };\n\n // Modal size should calc with stage css value\n let modalWidth = img.width +\n getNumFromCSSValue(stageCSS.left) +\n getNumFromCSSValue(stageCSS.right) +\n getNumFromCSSValue(stageCSS.borderLeft) +\n getNumFromCSSValue(stageCSS.borderRight),\n modalHeight = img.height +\n getNumFromCSSValue(stageCSS.top) +\n getNumFromCSSValue(stageCSS.bottom) +\n getNumFromCSSValue(stageCSS.borderTop) +\n getNumFromCSSValue(stageCSS.borderBottom);\n\n let gapThreshold = (this.options.gapThreshold > 0 ? this.options.gapThreshold : 0) + 1,\n // modal scale to window\n scale = Math.min(\n winWidth / (modalWidth * gapThreshold),\n winHeight / (modalHeight * gapThreshold),\n 1\n );\n\n let minWidth = Math.max(modalWidth * scale, this.options.modalWidth),\n minHeight = Math.max(modalHeight * scale, this.options.modalHeight);\n\n minWidth = this.options.fixedModalSize\n ? this.options.modalWidth\n : Math.round(minWidth);\n minHeight = this.options.fixedModalSize\n ? this.options.modalHeight\n : Math.round(minHeight);\n\n let modalCSSObj = {\n width: minWidth + 'px',\n height: minHeight + 'px',\n left: (winWidth - minWidth) / 2 + scrollLeft + 'px',\n top: (winHeight - minHeight) / 2 + scrollTop + 'px'\n };\n\n // Add modal init animation\n if (this.options.initAnimation) {\n this.$photoviewer.animate(modalCSSObj, () => {\n this.setImageSize(img);\n });\n } else {\n this.$photoviewer.css(modalCSSObj);\n this.setImageSize(img);\n }\n\n this.isOpened = true;\n\n }\n\n getImageScaleToStage(stageWidth, stageHeight) {\n\n var scale = 1;\n\n if (!this.isRotated) {\n scale = Math.min(stageWidth / this.img.width, stageHeight / this.img.height, 1);\n } else {\n scale = Math.min(stageWidth / this.img.height, stageHeight / this.img.width, 1);\n }\n\n return scale;\n }\n\n setImageSize(img) {\n\n let stageData = {\n w: this.$stage.width(),\n h: this.$stage.height()\n };\n\n let scale = this.getImageScaleToStage(\n stageData.w,\n stageData.h\n );\n\n this.$image.css({\n width: Math.ceil(img.width * scale) + 'px',\n height: Math.ceil(img.height * scale) + 'px',\n left: (stageData.w - Math.ceil(img.width * scale)) / 2 + 'px',\n top: (stageData.h - Math.ceil(img.height * scale)) / 2 + 'px'\n });\n\n // Store image initial data\n $.extend(this.imageData, {\n initWidth: img.width * scale,\n initHeight: img.height * scale,\n initLeft: (stageData.w - img.width * scale) / 2,\n initTop: (stageData.h - img.height * scale) / 2,\n width: img.width * scale,\n height: img.height * scale,\n left: (stageData.w - img.width * scale) / 2,\n top: (stageData.h - img.height * scale) / 2\n });\n\n // Set grab cursor\n setGrabCursor(\n {\n w: this.$image.width(),\n h: this.$image.height()\n },\n {\n w: this.$stage.width(),\n h: this.$stage.height()\n },\n this.$stage,\n this.isRotated\n );\n\n this.$stage.removeClass('stage-ready');\n this.$image.removeClass('image-ready');\n\n // loader end\n this.$photoviewer.find(CLASS_NS + '-loader').remove();\n\n // Add image init animation\n if (this.options.initAnimation && !this.options.progressiveLoading) {\n this.$image.fadeIn();\n }\n\n }\n\n loadImg(imgSrc, fn, err) {\n\n let loaderHTML = `
`;\n\n // loader start\n this.$photoviewer.append(loaderHTML);\n\n // Add class before image loaded\n this.$stage.addClass('stage-ready');\n this.$image.addClass('image-ready');\n\n // Reset image\n this.$image.removeAttr('style').attr('src', '');\n\n if (this.options.initAnimation && !this.options.progressiveLoading) {\n this.$image.hide();\n }\n\n this.$image.attr('src', imgSrc);\n\n preloadImg(imgSrc, (img) => {\n // Store HTMLImageElement\n this.img = img;\n\n // Store original data\n this.imageData = {\n originalWidth: img.width,\n originalHeight: img.height\n };\n\n if (this.isMaximized || (this.isOpened && this.options.fixedModalPos)) {\n this.setImageSize(img);\n } else {\n this.setModalSize(img);\n }\n\n // callback of image loaded successfully\n if (fn) {\n fn.call();\n }\n\n }, () => {\n // loader end\n this.$photoviewer.find(CLASS_NS + '-loader').remove();\n\n // callback of image loading failed\n if (err) {\n err.call();\n }\n });\n\n if (this.options.title) {\n this.setImgTitle(imgSrc);\n }\n\n }\n\n setImgTitle(url) {\n\n let title = this.groupData[this.groupIndex].title\n ? this.groupData[this.groupIndex].title\n : getImageNameFromUrl(url);\n\n this.$title.html(title);\n\n }\n\n jump(step) {\n\n this._triggerHook('beforeChange', this.groupIndex);\n\n this.groupIndex = this.groupIndex + step;\n\n this.jumpTo(this.groupIndex);\n\n }\n\n jumpTo(index) {\n\n index = index % this.groupData.length;\n\n if (index >= 0) {\n index = index % this.groupData.length;\n } else if (index < 0) {\n index = (this.groupData.length + index) % this.groupData.length;\n }\n\n this.groupIndex = index;\n\n this.loadImg(this.groupData[index].src, () => {\n this._triggerHook('changed', index);\n }, () => {\n this._triggerHook('changed', index);\n });\n\n }\n\n wheel(e) {\n\n e.preventDefault();\n\n let delta = 1;\n\n if (e.originalEvent.deltaY) {\n delta = e.originalEvent.deltaY > 0 ? 1 : -1;\n } else if (e.originalEvent.wheelDelta) {\n delta = -e.originalEvent.wheelDelta / 120;\n } else if (e.originalEvent.detail) {\n delta = e.originalEvent.detail > 0 ? 1 : -1;\n }\n\n // ratio threshold\n let ratio = -delta * this.options.ratioThreshold;\n\n // mouse point position relative to stage\n let pointer = {\n x: e.originalEvent.clientX - this.$stage.offset().left + $D.scrollLeft(),\n y: e.originalEvent.clientY - this.$stage.offset().top + $D.scrollTop()\n };\n\n this.zoom(ratio, pointer, e);\n\n }\n\n zoom(ratio, origin, e) {\n\n // zoom out ratio & zoom in ratio\n ratio = ratio < 0 ? (1 / (1 - ratio)) : (1 + ratio);\n\n // image ratio\n ratio = this.$image.width() / this.imageData.originalWidth * ratio;\n\n // Fixed digital error\n // if (ratio > 0.95 && ratio < 1.05) {\n // ratio = 1;\n // }\n\n if (ratio > this.options.maxRatio || ratio < this.options.minRatio) {\n return;\n }\n\n this.zoomTo(ratio, origin, e);\n\n }\n\n zoomTo(ratio, origin, e) {\n\n let $image = this.$image,\n $stage = this.$stage,\n imgData = {\n w: this.imageData.width,\n h: this.imageData.height,\n x: this.imageData.left,\n y: this.imageData.top\n };\n\n // image stage position\n // We will use it to calc the relative position of image\n let stageData = {\n w: $stage.width(),\n h: $stage.height(),\n x: $stage.offset().left,\n y: $stage.offset().top\n };\n\n let newWidth = this.imageData.originalWidth * ratio,\n newHeight = this.imageData.originalHeight * ratio,\n // Think about it for a while\n newLeft = origin.x - (origin.x - imgData.x) / imgData.w * newWidth,\n newTop = origin.y - (origin.y - imgData.y) / imgData.h * newHeight;\n\n // δ is the difference between image new width and new height\n let δ = !this.isRotated ? 0 : (newWidth - newHeight) / 2,\n imgNewWidth = !this.isRotated ? newWidth : newHeight,\n imgNewHeight = !this.isRotated ? newHeight : newWidth;\n\n let offsetX = stageData.w - newWidth,\n offsetY = stageData.h - newHeight;\n\n // zoom out & zoom in condition\n // It's important and it takes me a lot of time to get it\n // The conditions with image rotate 90 degree drive me crazy alomst!\n if (imgNewHeight <= stageData.h) {\n newTop = (stageData.h - newHeight) / 2;\n } else {\n newTop = newTop > δ\n ? δ\n : (newTop > (offsetY - δ)\n ? newTop\n : (offsetY - δ));\n }\n\n if (imgNewWidth <= stageData.w) {\n newLeft = (stageData.w - newWidth) / 2;\n } else {\n newLeft = newLeft > -δ\n ? -δ\n : (newLeft > (offsetX + δ)\n ? newLeft\n : (offsetX + δ));\n }\n\n // if the image scale get to the critical point\n if (Math.abs(this.imageData.initWidth - newWidth) < this.imageData.initWidth * 0.05) {\n this.setImageSize(this.img);\n } else {\n $image.css({\n width: Math.round(newWidth) + 'px',\n height: Math.round(newHeight) + 'px',\n left: Math.round(newLeft) + 'px',\n top: Math.round(newTop) + 'px'\n });\n\n // Set grab cursor\n setGrabCursor(\n {\n w: Math.round(imgNewWidth),\n h: Math.round(imgNewHeight)\n },\n {\n w: stageData.w,\n h: stageData.h\n },\n this.$stage\n );\n }\n\n\n // Update image initial data\n $.extend(this.imageData, {\n width: newWidth,\n height: newHeight,\n left: newLeft,\n top: newTop\n });\n\n }\n\n rotate(angle) {\n\n this.rotateAngle = this.rotateAngle + angle;\n\n if ((this.rotateAngle / 90) % 2 === 0) {\n this.isRotated = false;\n } else {\n this.isRotated = true;\n }\n\n this.rotateTo(this.rotateAngle);\n\n }\n\n rotateTo(angle) {\n\n this.$image.css({\n transform: 'rotate(' + angle + 'deg)'\n });\n\n this.setImageSize({\n width: this.imageData.originalWidth,\n height: this.imageData.originalHeight\n });\n\n // Remove grab cursor when rotate\n this.$stage.removeClass('is-grab');\n\n }\n\n resize() {\n\n let resizeHandler = throttle(() => {\n\n if (this.isOpened) {\n if (this.isMaximized) {\n this.setImageSize({\n width: this.imageData.originalWidth,\n height: this.imageData.originalHeight\n });\n } else {\n this.setModalSize({\n width: this.imageData.originalWidth,\n height: this.imageData.originalHeight\n });\n }\n }\n\n }, 500);\n\n return resizeHandler;\n\n }\n\n maximize() {\n\n if (!this.isMaximized) {\n // Store modal data before maximize\n this.modalData = {\n width: this.$photoviewer.width(),\n height: this.$photoviewer.height(),\n left: this.$photoviewer.offset().left,\n top: this.$photoviewer.offset().top\n };\n\n this.$photoviewer.addClass(NS + '-maximize');\n\n this.$photoviewer.css({\n width: '100%',\n height: '100%',\n left: 0,\n top: 0\n });\n\n this.isMaximized = true;\n\n } else {\n\n this.$photoviewer.removeClass(NS + '-maximize');\n\n this.$photoviewer.css({\n width: this.modalData.width\n ? this.modalData.width\n : this.options.modalWidth,\n height: this.modalData.height\n ? this.modalData.height\n : this.options.modalHeight,\n left: this.modalData.left\n ? this.modalData.left\n : ($W.width() - this.options.modalWidth) / 2 + $D.scrollLeft(),\n top: this.modalData.top\n ? this.modalData.top\n : ($W.height() - this.options.modalHeight) / 2 + $D.scrollTop()\n });\n\n this.isMaximized = false;\n }\n\n this.setImageSize({\n width: this.imageData.originalWidth,\n height: this.imageData.originalHeight\n });\n\n }\n\n fullscreen() {\n\n requestFullscreen(this.$photoviewer[0]);\n\n }\n\n keydown(e) {\n\n if (!this.options.keyboard) {\n return false;\n }\n\n let keyCode = e.keyCode || e.which || e.charCode,\n ctrlKey = e.ctrlKey || e.metaKey,\n altKey = e.altKey || e.metaKey;\n\n switch (keyCode) {\n // ←\n case 37:\n this.jump(-1);\n break;\n // →\n case 39:\n this.jump(1);\n break;\n // +\n case 187:\n this.zoom(\n this.options.ratioThreshold * 3,\n { x: this.$stage.width() / 2, y: this.$stage.height() / 2 },\n e\n );\n break;\n // -\n case 189:\n this.zoom(\n -this.options.ratioThreshold * 3,\n { x: this.$stage.width() / 2, y: this.$stage.height() / 2 },\n e\n );\n break;\n // + Firefox\n case 61:\n this.zoom(\n this.options.ratioThreshold * 3,\n { x: this.$stage.width() / 2, y: this.$stage.height() / 2 },\n e\n );\n break;\n // - Firefox\n case 173:\n this.zoom(\n -this.options.ratioThreshold * 3,\n { x: this.$stage.width() / 2, y: this.$stage.height() / 2 },\n e\n );\n break;\n // ctrl + alt + 0\n case 48:\n if (ctrlKey && altKey) {\n this.zoomTo(\n 1,\n { x: this.$stage.width() / 2, y: this.$stage.height() / 2 },\n e\n );\n }\n break;\n // ctrl + ,\n case 188:\n if (ctrlKey) {\n this.rotate(-90);\n }\n break;\n // ctrl + .\n case 190:\n if (ctrlKey) {\n this.rotate(90);\n }\n break;\n default:\n }\n\n }\n\n addEvents() {\n\n this.$close.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, (e) => {\n this.close();\n });\n\n this.$stage.off(WHEEL_EVENT + EVENT_NS).on(WHEEL_EVENT + EVENT_NS, (e) => {\n this.wheel(e);\n });\n\n this.$zoomIn.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, (e) => {\n this.zoom(\n this.options.ratioThreshold * 3,\n { x: this.$stage.width() / 2, y: this.$stage.height() / 2 },\n e\n );\n });\n\n this.$zoomOut.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, (e) => {\n this.zoom(\n -this.options.ratioThreshold * 3,\n { x: this.$stage.width() / 2, y: this.$stage.height() / 2 },\n e\n );\n });\n\n this.$actualSize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, (e) => {\n this.zoomTo(\n 1,\n { x: this.$stage.width() / 2, y: this.$stage.height() / 2 },\n e\n );\n });\n\n this.$prev.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, () => {\n this.jump(-1);\n });\n\n this.$fullscreen.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, () => {\n this.fullscreen();\n });\n\n this.$next.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, () => {\n this.jump(1);\n });\n\n this.$rotateLeft.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, () => {\n this.rotate(-90);\n });\n\n this.$rotateRight.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, () => {\n this.rotate(90);\n });\n\n this.$maximize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, () => {\n this.maximize();\n });\n\n $D.off(KEYDOWN_EVENT + EVENT_NS).on(KEYDOWN_EVENT + EVENT_NS, (e) => {\n this.keydown(e);\n });\n\n $W.on(RESIZE_EVENT + EVENT_NS, this.resize());\n\n }\n\n _triggerHook(e, data) {\n if (this.options.callbacks[e]) {\n this.options.callbacks[e].apply(this, $.isArray(data) ? data : [data]);\n }\n }\n\n\n}\n\n/**\n * Add methods to PhotoViewer\n */\n$.extend(PhotoViewer.prototype, draggable, movable, resizable);\n\n/**\n * Add PhotoViewer to globle\n */\nwindow.PhotoViewer = PhotoViewer;\n\n/**\n * jQuery plugin\n */\n\nlet jqEl = null,\n getImgGroup = function (list, groupName) {\n\n let items = [];\n\n $(list).each(function () {\n\n let src = getImgSrc(this);\n\n items.push({\n src: src,\n title: $(this).attr('data-title'),\n groupName: groupName\n });\n\n });\n\n return items;\n\n }\n\n$.fn.photoviewer = function (options) {\n\n jqEl = $(this);\n\n options = options ? options : {};\n\n // Convert a numeric string into a number\n for (let key in options) {\n if (typeof (options[key]) === 'string' && !isNaN(options[key])) {\n options[key] = parseFloat(options[key])\n }\n }\n\n // Get init event, 'click' or 'dblclick'\n let opts = $.extend(true, {}, DEFAULTS, options);\n\n // We should get zIndex of options before plugin's init.\n PUBLIC_VARS['zIndex'] = opts.zIndex;\n\n if (typeof options === 'string') {\n\n // $(this).data('photoviewer')[options]();\n\n } else {\n\n jqEl.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\n\n e.preventDefault();\n // This will stop triggering data-api event\n e.stopPropagation();\n\n // Get image group\n let items = [],\n currentGroupName = $(this).attr('data-group'),\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\n\n if (currentGroupName !== undefined) {\n items = getImgGroup(groupList, currentGroupName);\n options['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\n } else {\n items = getImgGroup(jqEl.not('[data-group]'));\n options['index'] = $(this).index();\n }\n\n $(this).data(NS, new PhotoViewer(items, options, this));\n\n });\n\n }\n\n return jqEl;\n\n};\n\n/**\n * PhotoViewer DATA-API\n */\n$D.on(CLICK_EVENT + EVENT_NS, '[data-' + NS + ']', function (e) {\n\n jqEl = $('[data-' + NS + ']');\n\n e.preventDefault();\n\n // Get image group\n let items = [],\n currentGroupName = $(this).attr('data-group'),\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\n\n if (currentGroupName !== undefined) {\n items = getImgGroup(groupList, currentGroupName);\n DEFAULTS['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\n } else {\n items = getImgGroup(jqEl.not('[data-group]'));\n DEFAULTS['index'] = $(this).index();\n }\n\n $(this).data(NS, new PhotoViewer(items, DEFAULTS, this));\n\n});\n\nexport default PhotoViewer;\n"],"names":["draggable","resizable","movable","keyboard","title","modalWidth","modalHeight","fixedContent","fixedModalSize","initMaximized","gapThreshold","ratioThreshold","minRatio","maxRatio","headToolbar","footToolbar","icons","minimize","maximize","close","zoomIn","zoomOut","prev","next","fullscreen","actualSize","rotateLeft","rotateRight","i18n","multiInstances","initAnimation","fixedModalPos","zIndex","dragHandle","callbacks","beforeOpen","$","noop","opened","beforeClose","closed","beforeChange","changed","index","progressiveLoading","getImgSrc","el","src","attr","throttle","fn","delay","timer","context","args","arguments","clearTimeout","setTimeout","apply","preloadImg","success","error","img","Image","onload","onerror","requestFullscreen","element","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","getImageNameFromUrl","url","reg","txt","replace","getNumFromCSSValue","value","arr","match","num","parseFloat","hasScrollbar","document","body","scrollHeight","window","innerHeight","documentElement","clientHeight","getScrollbarWidth","scrollDiv","createElement","style","cssText","appendChild","scrollbarWidth","offsetWidth","clientWidth","removeChild","setGrabCursor","imageData","stageData","stage","isRotated","imageWidth","w","h","imageHeight","addClass","removeClass","supportTouch","DocumentTouch","$W","$D","CLICK_EVENT","RESIZE_EVENT","KEYDOWN_EVENT","WHEEL_EVENT","TOUCH_START_EVENT","TOUCH_MOVE_EVENT","TOUCH_END_EVENT","NS","CLASS_NS","EVENT_NS","PUBLIC_VARS","isMoving","isResizing","defaults","modal","dragCancel","isDragging","startX","startY","left","top","dragStart","e","event","options","css","elemCancel","target","closest","length","type","originalEvent","targetTouches","pageX","clientX","pageY","clientY","offset","on","dragMove","dragEnd","preventDefault","isMaximized","endX","endY","relativeX","relativeY","off","ELEMS_WITH_GRABBING_CURSOR","image","widthDiff","heightDiff","δ","width","height","stageWidth","stageHeight","position","hasClass","newLeft","newTop","extend","ELEMS_WITH_RESIZE_CURSOR","minWidth","minHeight","resizableHandleE","resizableHandleW","resizableHandleS","resizableHandleN","resizableHandleSE","resizableHandleSW","resizableHandleNE","resizableHandleNW","resizableHandles","append","modalData","l","t","imgWidth","imgHeight","direction","getModalOpts","dir","offsetX","offsetY","modalLeft","modalTop","opts","Math","max","getImageOpts","widthDiff2","heightDiff2","imgLeft","imgTop","imgLeft2","imgTop2","modalOpts","imageOpts","isDoResize","scale","getImageScaleToStage","initWidth","initHeight","initLeft","initTop","each","handle","PhotoViewer","items","DEFAULTS","isArray","$el","isOpened","rotateAngle","init","groupData","groupIndex","imgSrc","open","loadImg","$photoviewer","$stage","$image","_creatBtns","toolbar","btns","btnsStr","item","_creatTitle","_creatDOM","btnsTpl","photoviewerHTML","build","$header","find","$headToolbar","$footer","$footToolbar","$title","$close","$maximize","$minimize","$zoomIn","$zoomOut","$actualSize","$fullscreen","$rotateLeft","$rotateRight","$prev","$next","eq","remove","_triggerHook","addEvents","setModalPos","zeroModal","winWidth","winHeight","scrollLeft","scrollTop","setModalSize","stageCSS","right","bottom","borderLeft","borderRight","borderTop","borderBottom","min","round","modalCSSObj","animate","setImageSize","ceil","fadeIn","err","loaderHTML","removeAttr","hide","originalWidth","originalHeight","call","setImgTitle","html","jump","step","jumpTo","wheel","delta","deltaY","wheelDelta","detail","ratio","pointer","x","y","zoom","origin","zoomTo","imgData","newWidth","newHeight","imgNewWidth","imgNewHeight","abs","rotate","angle","rotateTo","transform","resize","resizeHandler","keydown","keyCode","which","charCode","ctrlKey","metaKey","altKey","data","prototype","jqEl","getImgGroup","list","groupName","push","photoviewer","key","isNaN","stopPropagation","currentGroupName","groupList","undefined","not"],"mappings":"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"}