diff --git a/dist/photoviewer.common.js b/dist/photoviewer.common.js index 3fbc65e..b7f543b 100644 --- a/dist/photoviewer.common.js +++ b/dist/photoviewer.common.js @@ -7,7 +7,7 @@ * | | | | | | |_| | | | | |_| |\ / _| |_| |__| /\ | |__| |\ \ * |_| |_| |_|\___/ |_| \___/ \_/ |_____|____|_/ \_|____|_| \_\ * - * photoviewer - v2.1.2 + * photoviewer - v2.1.3 * A JS plugin to view images just like in Windows * https://github.com/nzbin/photoviewer#readme * diff --git a/dist/photoviewer.common.js.map b/dist/photoviewer.common.js.map index 4028a51..d372cbd 100644 --- a/dist/photoviewer.common.js.map +++ b/dist/photoviewer.common.js.map @@ -1 +1 @@ -{"version":3,"file":"photoviewer.common.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 {\n\n // Enable modal to drag\n draggable: true,\n\n // Enable modal to resize\n resizable: true,\n\n // Enable image to move\n movable: true,\n\n // Enable keyboard navigation\n keyboard: true,\n\n // Shows the title\n title: true,\n\n // Min width of modal\n modalWidth: 320,\n\n // Min height of modal\n modalHeight: 320,\n\n // Enable the page content fixed\n fixedContent: true,\n\n // Disable the modal size fixed\n fixedModalSize: false,\n\n // Disable the image viewer maximized on init\n initMaximized: false,\n\n // Threshold of modal to browser window\n gapThreshold: 0.02,\n\n // Threshold of image ratio\n ratioThreshold: 0.1,\n\n // Min ratio of image when zoom out\n minRatio: 0.05,\n\n // Max ratio of image when zoom in\n maxRatio: 16,\n\n // Toolbar options in header\n headToolbar: [\n 'maximize',\n 'close'\n ],\n\n // Toolbar options in footer\n footToolbar: [\n 'zoomIn',\n 'zoomOut',\n 'prev',\n 'fullscreen',\n 'next',\n 'actualSize',\n 'rotateRight'\n ],\n\n // Customize button icon\n icons: {\n minimize: `\n \n `,\n maximize: `\n \n `,\n close: `\n \n `,\n zoomIn: `\n \n `,\n zoomOut: `\n \n `,\n prev: `\n \n `,\n next: `\n \n `,\n fullscreen: `\n \n `,\n actualSize: `\n \n `,\n rotateLeft: `\n \n `,\n rotateRight: `\n \n `\n },\n\n // Customize language of button title\n i18n: {\n minimize: 'minimize',\n maximize: 'maximize',\n close: 'close',\n zoomIn: 'zoom-in(+)',\n zoomOut: 'zoom-out(-)',\n prev: 'prev(←)',\n next: 'next(→)',\n fullscreen: 'fullscreen',\n actualSize: 'actual-size(Ctrl+Alt+0)',\n rotateLeft: 'rotate-left(Ctrl+,)',\n rotateRight: 'rotate-right(Ctrl+.)'\n },\n\n // Enable multiple instances\n multiInstances: true,\n\n // Enable animation\n initAnimation: true,\n\n // Disable modal position fixed when change images\n fixedModalPos: false,\n\n // Modal z-index\n zIndex: 1090,\n\n // Selector of drag handler\n dragHandle: false,\n\n // Callback events\n callbacks: {\n beforeOpen: $.noop,\n opened: $.noop,\n beforeClose: $.noop,\n closed: $.noop,\n beforeChange: $.noop,\n changed: $.noop\n },\n\n // Start images index\n index: 0\n\n}\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 self = this;\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 = function (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 (self.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 = function (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'] && !self.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 = function () {\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 self = this;\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 = function (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 δ = !self.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 = !self.isRotated\r\n ? (imageWidth - stageWidth)\r\n : (imageHeight - stageWidth);\r\n heightDiff = !self.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 = function (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(self.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 = function () {\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 self = this;\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 = function (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 δ = !self.isRotated\r\n ? 0\r\n : (imageData.w - imageData.h) / 2;\r\n imgWidth = !self.isRotated\r\n ? imageData.w\r\n : imageData.h;\r\n imgHeight = !self.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 = function (e) {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging && !self.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 self.isDoResize = true;\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = function () {\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 = self.getImageScaleToStage(\r\n $(stage).width(),\r\n $(stage).height()\r\n );\r\n\r\n $.extend(self.imageData, {\r\n initWidth: self.img.width * scale,\r\n initHeight: self.img.height * scale,\r\n initLeft: ($(stage).width() - self.img.width * scale) / 2,\r\n initTop: ($(stage).height() - self.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';\r\n\r\nimport DEFAULTS from './defaults';\r\n\r\nimport {\r\n $W,\r\n $D,\r\n CLICK_EVENT,\r\n RESIZE_EVENT,\r\n KEYDOWN_EVENT,\r\n WHEEL_EVENT,\r\n NS,\r\n CLASS_NS,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nimport {\r\n getImgSrc,\r\n throttle,\r\n preloadImg,\r\n requestFullscreen,\r\n getImageNameFromUrl,\r\n getNumFromCSSValue,\r\n hasScrollbar,\r\n getScrollbarWidth,\r\n setGrabCursor\r\n} from './utilities';\r\n\r\nimport draggable from './draggable';\r\nimport movable from './movable';\r\nimport resizable from './resizable';\r\n\r\n/**\r\n * PhotoViewer Class\r\n */\r\nclass PhotoViewer {\r\n\r\n constructor(items, options, el) {\r\n\r\n let self = this;\r\n\r\n this.options = $.extend(true, {}, DEFAULTS, options);\r\n\r\n if (options && $.isArray(options.footToolbar)) {\r\n this.options.footToolbar = options.footToolbar;\r\n }\r\n\r\n if (options && $.isArray(options.headToolbar)) {\r\n this.options.headToolbar = options.headToolbar;\r\n }\r\n\r\n // Store element of clicked\r\n this.$el = $(el);\r\n\r\n // As we have multiple instances,\r\n // so every instance has following variables.\r\n\r\n // modal open flag\r\n this.isOpened = false;\r\n // modal maximize flag\r\n this.isMaximized = false;\r\n // image rotate 90*(2n+1) flag\r\n this.isRotated = false;\r\n // image rotate angle\r\n this.rotateAngle = 0;\r\n\r\n // if modal do resize\r\n this.isDoResize = false;\r\n\r\n // Store image data in every instance\r\n this.imageData = {};\r\n // Store modal data in every instance\r\n this.modalData = {\r\n width: null,\r\n height: null,\r\n left: null,\r\n top: null\r\n };\r\n\r\n this.init(items, self.options, el);\r\n\r\n }\r\n\r\n init(items, opts, el) {\r\n\r\n this.groupData = items;\r\n this.groupIndex = opts['index'];\r\n\r\n // Get image src\r\n let imgSrc = items[this.groupIndex]['src'];\r\n\r\n this.open();\r\n\r\n this.loadImg(imgSrc);\r\n\r\n // draggable & movable & resizable\r\n if (opts.draggable) {\r\n this.draggable(this.$photoviewer, this.dragHandle, CLASS_NS + '-button');\r\n }\r\n if (opts.movable) {\r\n this.movable(this.$stage, this.$image);\r\n }\r\n if (opts.resizable) {\r\n this.resizable(\r\n this.$photoviewer,\r\n this.$stage,\r\n this.$image,\r\n opts.modalWidth,\r\n opts.modalHeight\r\n );\r\n }\r\n\r\n }\r\n\r\n _creatBtns(toolbar, btns) {\r\n\r\n let btnsStr = '';\r\n\r\n $.each(toolbar, function (index, item) {\r\n btnsStr += btns[item];\r\n });\r\n\r\n return btnsStr;\r\n\r\n }\r\n\r\n _creatTitle() {\r\n return (this.options.title ? `
` : '');\r\n }\r\n\r\n _creatDOM() {\r\n\r\n let btnsTpl = {\r\n minimize: ``,\r\n maximize: ``,\r\n close: ``,\r\n zoomIn: ``,\r\n zoomOut: ``,\r\n prev: ``,\r\n next: ``,\r\n fullscreen: ``,\r\n actualSize: ``,\r\n rotateLeft: ``,\r\n rotateRight: ``\r\n };\r\n\r\n // photoviewer base HTML\r\n let photoviewerHTML =\r\n `
\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.headToolbar, btnsTpl)}\r\n
\r\n ${this._creatTitle()}\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.footToolbar, btnsTpl)}\r\n
\r\n
\r\n
\r\n
`;\r\n\r\n return photoviewerHTML;\r\n\r\n }\r\n\r\n build() {\r\n\r\n // Create photoviewer HTML string\r\n let photoviewerHTML = this._creatDOM();\r\n\r\n // Make photoviewer HTML string to jQuery element\r\n let $photoviewer = $(photoviewerHTML);\r\n\r\n // Get all photoviewer element\r\n this.$photoviewer = $photoviewer;\r\n this.$header = $photoviewer.find(CLASS_NS + '-header');\r\n this.$headToolbar = $photoviewer.find(CLASS_NS + '-toolbar-head');\r\n this.$footer = $photoviewer.find(CLASS_NS + '-footer');\r\n this.$footToolbar = $photoviewer.find(CLASS_NS + '-toolbar-foot');\r\n this.$stage = $photoviewer.find(CLASS_NS + '-stage');\r\n this.$title = $photoviewer.find(CLASS_NS + '-title');\r\n this.$image = $photoviewer.find(CLASS_NS + '-image');\r\n this.$close = $photoviewer.find(CLASS_NS + '-button-close');\r\n this.$maximize = $photoviewer.find(CLASS_NS + '-button-maximize');\r\n this.$minimize = $photoviewer.find(CLASS_NS + '-button-minimize');\r\n this.$zoomIn = $photoviewer.find(CLASS_NS + '-button-zoom-in');\r\n this.$zoomOut = $photoviewer.find(CLASS_NS + '-button-zoom-out');\r\n this.$actualSize = $photoviewer.find(CLASS_NS + '-button-actual-size');\r\n this.$fullscreen = $photoviewer.find(CLASS_NS + '-button-fullscreen');\r\n this.$rotateLeft = $photoviewer.find(CLASS_NS + '-button-rotate-left');\r\n this.$rotateRight = $photoviewer.find(CLASS_NS + '-button-rotate-right');\r\n this.$prev = $photoviewer.find(CLASS_NS + '-button-prev');\r\n this.$next = $photoviewer.find(CLASS_NS + '-button-next');\r\n\r\n // Add class before image loaded\r\n this.$stage.addClass('stage-ready');\r\n this.$image.addClass('image-ready');\r\n\r\n // Reset modal z-index with multiple instances\r\n this.$photoviewer.css('z-index', PUBLIC_VARS['zIndex']);\r\n\r\n // Set handle element of draggable\r\n if (!this.options.dragHandle || this.options.dragHandle === CLASS_NS + '-modal') {\r\n this.dragHandle = this.$photoviewer;\r\n } else {\r\n this.dragHandle = this.$photoviewer.find(this.options.dragHandle);\r\n }\r\n\r\n }\r\n\r\n open() {\r\n\r\n if (!this.options.multiInstances) {\r\n $(CLASS_NS + '-modal').eq(0).remove();\r\n }\r\n\r\n // Fixed modal position bug\r\n if (!$(CLASS_NS + '-modal').length && this.options.fixedContent) {\r\n\r\n $('html').css({ 'overflow': 'hidden' });\r\n\r\n if (hasScrollbar()) {\r\n let scrollbarWidth = getScrollbarWidth();\r\n if (scrollbarWidth) {\r\n $('html').css({ 'padding-right': scrollbarWidth });\r\n }\r\n }\r\n\r\n }\r\n\r\n this.build();\r\n\r\n this._triggerHook('beforeOpen', this.$el);\r\n\r\n // Add PhotoViewer to DOM\r\n $('body').append(this.$photoviewer);\r\n\r\n this.addEvents();\r\n\r\n this.setModalPos(this.$photoviewer);\r\n\r\n this._triggerHook('opened', this.$el);\r\n\r\n }\r\n\r\n close() {\r\n\r\n this._triggerHook('beforeClose', this.$el);\r\n\r\n // Remove instance\r\n this.$photoviewer.remove();\r\n\r\n this.isOpened = false;\r\n this.isMaximized = false;\r\n this.isRotated = false;\r\n this.rotateAngle = 0;\r\n\r\n let zeroModal = !$(CLASS_NS + '-modal').length;\r\n\r\n // Fixed modal position bug\r\n if (zeroModal && this.options.fixedContent) {\r\n $('html').css({ 'overflow': '', 'padding-right': '' });\r\n }\r\n\r\n // Reset zIndex after close\r\n if (zeroModal && this.options.multiInstances) {\r\n PUBLIC_VARS['zIndex'] = this.options.zIndex;\r\n }\r\n\r\n // off events\r\n if (!$(CLASS_NS + '-modal').length) {\r\n $D.off(KEYDOWN_EVENT + EVENT_NS);\r\n $W.off(RESIZE_EVENT + EVENT_NS);\r\n }\r\n\r\n this._triggerHook('closed', this.$el);\r\n\r\n }\r\n\r\n setModalPos(modal) {\r\n\r\n let winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n let modalWidth = this.options.modalWidth,\r\n modalHeight = this.options.modalHeight;\r\n\r\n // Set modal maximized when init\r\n if (this.options.initMaximized) {\r\n\r\n modal.addClass(NS + '-maximize');\r\n\r\n modal.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isOpened = true;\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n // Make the modal in windows center\r\n modal.css({\r\n width: modalWidth,\r\n height: modalHeight,\r\n left: (winWidth - modalWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - modalHeight) / 2 + scrollTop + 'px'\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n setModalSize(img) {\r\n\r\n let self = this,\r\n winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n // stage css value\r\n let stageCSS = {\r\n left: this.$stage.css('left'),\r\n right: this.$stage.css('right'),\r\n top: this.$stage.css('top'),\r\n bottom: this.$stage.css('bottom'),\r\n borderLeft: this.$stage.css('border-left-width'),\r\n borderRight: this.$stage.css('border-right-width'),\r\n borderTop: this.$stage.css('border-top-width'),\r\n borderBottom: this.$stage.css('border-bottom-width')\r\n };\r\n\r\n // Modal size should calc with stage css value\r\n let modalWidth = img.width +\r\n getNumFromCSSValue(stageCSS.left) +\r\n getNumFromCSSValue(stageCSS.right) +\r\n getNumFromCSSValue(stageCSS.borderLeft) +\r\n getNumFromCSSValue(stageCSS.borderRight),\r\n modalHeight = img.height +\r\n getNumFromCSSValue(stageCSS.top) +\r\n getNumFromCSSValue(stageCSS.bottom) +\r\n getNumFromCSSValue(stageCSS.borderTop) +\r\n getNumFromCSSValue(stageCSS.borderBottom);\r\n\r\n let gapThreshold = (this.options.gapThreshold > 0 ? this.options.gapThreshold : 0) + 1,\r\n // modal scale to window\r\n scale = Math.min(\r\n winWidth / (modalWidth * gapThreshold),\r\n winHeight / (modalHeight * gapThreshold),\r\n 1\r\n );\r\n\r\n let minWidth = Math.max(modalWidth * scale, this.options.modalWidth),\r\n minHeight = Math.max(modalHeight * scale, this.options.modalHeight);\r\n\r\n minWidth = this.options.fixedModalSize\r\n ? this.options.modalWidth\r\n : Math.round(minWidth);\r\n minHeight = this.options.fixedModalSize\r\n ? this.options.modalHeight\r\n : Math.round(minHeight);\r\n\r\n let modalCSSObj = {\r\n width: minWidth + 'px',\r\n height: minHeight + 'px',\r\n left: (winWidth - minWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - minHeight) / 2 + scrollTop + 'px'\r\n };\r\n\r\n // Add modal init animation\r\n if (this.options.initAnimation) {\r\n this.$photoviewer.animate(modalCSSObj, function () {\r\n self.setImageSize(img);\r\n });\r\n } else {\r\n this.$photoviewer.css(modalCSSObj);\r\n this.setImageSize(img);\r\n }\r\n\r\n this.isOpened = true;\r\n\r\n }\r\n\r\n getImageScaleToStage(stageWidth, stageHeight) {\r\n\r\n var scale = 1;\r\n\r\n if (!this.isRotated) {\r\n scale = Math.min(stageWidth / this.img.width, stageHeight / this.img.height, 1);\r\n } else {\r\n scale = Math.min(stageWidth / this.img.height, stageHeight / this.img.width, 1);\r\n }\r\n\r\n return scale;\r\n }\r\n\r\n setImageSize(img) {\r\n\r\n let stageData = {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n };\r\n\r\n let scale = this.getImageScaleToStage(\r\n stageData.w,\r\n stageData.h\r\n );\r\n\r\n this.$image.css({\r\n width: Math.ceil(img.width * scale) + 'px',\r\n height: Math.ceil(img.height * scale) + 'px',\r\n left: (stageData.w - Math.ceil(img.width * scale)) / 2 + 'px',\r\n top: (stageData.h - Math.ceil(img.height * scale)) / 2 + 'px'\r\n });\r\n\r\n // Store image initial data\r\n $.extend(this.imageData, {\r\n initWidth: img.width * scale,\r\n initHeight: img.height * scale,\r\n initLeft: (stageData.w - img.width * scale) / 2,\r\n initTop: (stageData.h - img.height * scale) / 2,\r\n width: img.width * scale,\r\n height: img.height * scale,\r\n left: (stageData.w - img.width * scale) / 2,\r\n top: (stageData.h - img.height * scale) / 2\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: this.$image.width(),\r\n h: this.$image.height()\r\n },\r\n {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n },\r\n this.$stage,\r\n this.isRotated\r\n );\r\n\r\n // loader end\r\n this.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n\r\n // Add image init animation\r\n if (this.options.initAnimation) {\r\n this.$image.fadeIn();\r\n }\r\n\r\n }\r\n\r\n loadImg(imgSrc) {\r\n\r\n let self = this;\r\n\r\n let loaderHTML = `
`;\r\n\r\n // loader start\r\n this.$photoviewer.append(loaderHTML);\r\n\r\n if (this.options.initAnimation) {\r\n this.$image.hide();\r\n }\r\n\r\n this.$image.attr('src', imgSrc);\r\n\r\n preloadImg(imgSrc, function (img) {\r\n // Store HTMLImageElement\r\n self.img = img;\r\n\r\n // Store original data\r\n self.imageData = {\r\n originalWidth: img.width,\r\n originalHeight: img.height\r\n };\r\n\r\n if (self.isMaximized || (self.isOpened && self.options.fixedModalPos)) {\r\n self.setImageSize(img);\r\n } else {\r\n self.setModalSize(img);\r\n }\r\n\r\n self.$stage.removeClass('stage-ready');\r\n self.$image.removeClass('image-ready');\r\n\r\n }, function () {\r\n // loader end\r\n self.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n });\r\n\r\n if (this.options.title) {\r\n this.setImgTitle(imgSrc);\r\n }\r\n\r\n }\r\n\r\n setImgTitle(url) {\r\n\r\n let title = this.groupData[this.groupIndex].title\r\n ? this.groupData[this.groupIndex].title\r\n : getImageNameFromUrl(url);\r\n\r\n this.$title.html(title);\r\n\r\n }\r\n\r\n jump(index) {\r\n\r\n this.groupIndex = this.groupIndex + index;\r\n\r\n this.jumpTo(this.groupIndex);\r\n\r\n }\r\n\r\n jumpTo(index) {\r\n\r\n index = index % this.groupData.length;\r\n\r\n if (index >= 0) {\r\n index = index % this.groupData.length;\r\n } else if (index < 0) {\r\n index = (this.groupData.length + index) % this.groupData.length;\r\n }\r\n\r\n this.groupIndex = index;\r\n\r\n this._triggerHook('beforeChange', index);\r\n\r\n this.loadImg(this.groupData[index].src);\r\n\r\n this._triggerHook('changed', index);\r\n\r\n }\r\n\r\n wheel(e) {\r\n\r\n e.preventDefault();\r\n\r\n let delta = 1;\r\n\r\n if (e.originalEvent.deltaY) {\r\n delta = e.originalEvent.deltaY > 0 ? 1 : -1;\r\n } else if (e.originalEvent.wheelDelta) {\r\n delta = -e.originalEvent.wheelDelta / 120;\r\n } else if (e.originalEvent.detail) {\r\n delta = e.originalEvent.detail > 0 ? 1 : -1;\r\n }\r\n\r\n // ratio threshold\r\n let ratio = -delta * this.options.ratioThreshold;\r\n\r\n // mouse point position relative to stage\r\n let pointer = {\r\n x: e.originalEvent.clientX - this.$stage.offset().left + $D.scrollLeft(),\r\n y: e.originalEvent.clientY - this.$stage.offset().top + $D.scrollTop()\r\n };\r\n\r\n this.zoom(ratio, pointer, e);\r\n\r\n }\r\n\r\n zoom(ratio, origin, e) {\r\n\r\n // zoom out ratio & zoom in ratio\r\n ratio = ratio < 0 ? (1 / (1 - ratio)) : (1 + ratio);\r\n\r\n // image ratio\r\n ratio = this.$image.width() / this.imageData.originalWidth * ratio;\r\n\r\n // Fixed digital error\r\n // if (ratio > 0.95 && ratio < 1.05) {\r\n // ratio = 1;\r\n // }\r\n\r\n if (ratio > this.options.maxRatio || ratio < this.options.minRatio) {\r\n return;\r\n }\r\n\r\n this.zoomTo(ratio, origin, e);\r\n\r\n }\r\n\r\n zoomTo(ratio, origin, e) {\r\n\r\n let $image = this.$image,\r\n $stage = this.$stage,\r\n imgData = {\r\n w: this.imageData.width,\r\n h: this.imageData.height,\r\n x: this.imageData.left,\r\n y: this.imageData.top\r\n };\r\n\r\n // image stage position\r\n // We will use it to calc the relative position of image\r\n let stageData = {\r\n w: $stage.width(),\r\n h: $stage.height(),\r\n x: $stage.offset().left,\r\n y: $stage.offset().top\r\n };\r\n\r\n let newWidth = this.imageData.originalWidth * ratio,\r\n newHeight = this.imageData.originalHeight * ratio,\r\n // Think about it for a while\r\n newLeft = origin.x - (origin.x - imgData.x) / imgData.w * newWidth,\r\n newTop = origin.y - (origin.y - imgData.y) / imgData.h * newHeight;\r\n\r\n // δ is the difference between image new width and new height\r\n let δ = !this.isRotated ? 0 : (newWidth - newHeight) / 2,\r\n imgNewWidth = !this.isRotated ? newWidth : newHeight,\r\n imgNewHeight = !this.isRotated ? newHeight : newWidth;\r\n\r\n let offsetX = stageData.w - newWidth,\r\n offsetY = stageData.h - newHeight;\r\n\r\n // zoom out & zoom in condition\r\n // It's important and it takes me a lot of time to get it\r\n // The conditions with image rotate 90 degree drive me crazy alomst!\r\n if (imgNewHeight <= stageData.h) {\r\n newTop = (stageData.h - newHeight) / 2;\r\n } else {\r\n newTop = newTop > δ\r\n ? δ\r\n : (newTop > (offsetY - δ)\r\n ? newTop\r\n : (offsetY - δ));\r\n }\r\n\r\n if (imgNewWidth <= stageData.w) {\r\n newLeft = (stageData.w - newWidth) / 2;\r\n } else {\r\n newLeft = newLeft > -δ\r\n ? -δ\r\n : (newLeft > (offsetX + δ)\r\n ? newLeft\r\n : (offsetX + δ));\r\n }\r\n\r\n // if the image scale get to the critical point\r\n if (Math.abs(this.imageData.initWidth - newWidth) < this.imageData.initWidth * 0.05) {\r\n this.setImageSize(this.img);\r\n } else {\r\n $image.css({\r\n width: Math.round(newWidth) + 'px',\r\n height: Math.round(newHeight) + 'px',\r\n left: Math.round(newLeft) + 'px',\r\n top: Math.round(newTop) + 'px'\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: Math.round(imgNewWidth),\r\n h: Math.round(imgNewHeight)\r\n },\r\n {\r\n w: stageData.w,\r\n h: stageData.h\r\n },\r\n this.$stage\r\n );\r\n }\r\n\r\n\r\n // Update image initial data\r\n $.extend(this.imageData, {\r\n width: newWidth,\r\n height: newHeight,\r\n left: newLeft,\r\n top: newTop\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n rotate(angle) {\r\n\r\n this.rotateAngle = this.rotateAngle + angle;\r\n\r\n if ((this.rotateAngle / 90) % 2 === 0) {\r\n this.isRotated = false;\r\n } else {\r\n this.isRotated = true;\r\n }\r\n\r\n this.rotateTo(this.rotateAngle);\r\n\r\n }\r\n\r\n rotateTo(angle) {\r\n\r\n let self = this;\r\n\r\n this.$image.css({\r\n transform: 'rotate(' + angle + 'deg)'\r\n });\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n // Remove grab cursor when rotate\r\n this.$stage.removeClass('is-grab');\r\n\r\n }\r\n\r\n resize() {\r\n\r\n let self = this;\r\n\r\n let resizeHandler = throttle(function () {\r\n\r\n if (self.isOpened) {\r\n if (self.isMaximized) {\r\n self.setImageSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n } else {\r\n self.setModalSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n }\r\n }\r\n\r\n }, 500);\r\n\r\n return resizeHandler;\r\n\r\n }\r\n\r\n maximize() {\r\n\r\n let self = this;\r\n\r\n if (!this.isMaximized) {\r\n // Store modal data before maximize\r\n this.modalData = {\r\n width: this.$photoviewer.width(),\r\n height: this.$photoviewer.height(),\r\n left: this.$photoviewer.offset().left,\r\n top: this.$photoviewer.offset().top\r\n };\r\n\r\n this.$photoviewer.addClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n this.$photoviewer.removeClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: this.modalData.width\r\n ? this.modalData.width\r\n : this.options.modalWidth,\r\n height: this.modalData.height\r\n ? this.modalData.height\r\n : this.options.modalHeight,\r\n left: this.modalData.left\r\n ? this.modalData.left\r\n : ($W.width() - this.options.modalWidth) / 2 + $D.scrollLeft(),\r\n top: this.modalData.top\r\n ? this.modalData.top\r\n : ($W.height() - this.options.modalHeight) / 2 + $D.scrollTop()\r\n });\r\n\r\n this.isMaximized = false;\r\n }\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n }\r\n\r\n fullscreen() {\r\n\r\n requestFullscreen(this.$photoviewer[0]);\r\n\r\n }\r\n\r\n keydown(e) {\r\n\r\n let self = this;\r\n\r\n if (!this.options.keyboard) {\r\n return false;\r\n }\r\n\r\n let keyCode = e.keyCode || e.which || e.charCode,\r\n ctrlKey = e.ctrlKey || e.metaKey,\r\n altKey = e.altKey || e.metaKey;\r\n\r\n switch (keyCode) {\r\n // ←\r\n case 37:\r\n self.jump(-1);\r\n break;\r\n // →\r\n case 39:\r\n self.jump(1);\r\n break;\r\n // +\r\n case 187:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // -\r\n case 189:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // + Firefox\r\n case 61:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // - Firefox\r\n case 173:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // ctrl + alt + 0\r\n case 48:\r\n if (ctrlKey && altKey) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n }\r\n break;\r\n // ctrl + ,\r\n case 188:\r\n if (ctrlKey) {\r\n self.rotate(-90);\r\n }\r\n break;\r\n // ctrl + .\r\n case 190:\r\n if (ctrlKey) {\r\n self.rotate(90);\r\n }\r\n break;\r\n default:\r\n }\r\n\r\n }\r\n\r\n addEvents() {\r\n\r\n let self = this;\r\n\r\n this.$close.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.close();\r\n });\r\n\r\n this.$stage.off(WHEEL_EVENT + EVENT_NS).on(WHEEL_EVENT + EVENT_NS, function (e) {\r\n self.wheel(e);\r\n });\r\n\r\n this.$zoomIn.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$zoomOut.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$actualSize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$prev.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(-1);\r\n });\r\n\r\n this.$fullscreen.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.fullscreen();\r\n });\r\n\r\n this.$next.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(1);\r\n });\r\n\r\n this.$rotateLeft.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(-90);\r\n });\r\n\r\n this.$rotateRight.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(90);\r\n });\r\n\r\n this.$maximize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.maximize();\r\n });\r\n\r\n $D.off(KEYDOWN_EVENT + EVENT_NS).on(KEYDOWN_EVENT + EVENT_NS, function (e) {\r\n self.keydown(e);\r\n });\r\n\r\n $W.on(RESIZE_EVENT + EVENT_NS, self.resize());\r\n\r\n }\r\n\r\n _triggerHook(e, data) {\r\n if (this.options.callbacks[e]) {\r\n this.options.callbacks[e].apply(this, $.isArray(data) ? data : [data]);\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n/**\r\n * Add methods to PhotoViewer\r\n */\r\n$.extend(PhotoViewer.prototype, draggable, movable, resizable);\r\n\r\n/**\r\n * Add PhotoViewer to globle\r\n */\r\nwindow.PhotoViewer = PhotoViewer;\r\n\r\n/**\r\n * jQuery plugin\r\n */\r\n\r\nlet jqEl = null,\r\n getImgGroup = function (list, groupName) {\r\n\r\n let items = [];\r\n\r\n $(list).each(function () {\r\n\r\n let src = getImgSrc(this);\r\n\r\n items.push({\r\n src: src,\r\n title: $(this).attr('data-title'),\r\n groupName: groupName\r\n });\r\n\r\n });\r\n\r\n return items;\r\n\r\n }\r\n\r\n$.fn.photoviewer = function (options) {\r\n\r\n jqEl = $(this);\r\n\r\n options = options ? options : {};\r\n\r\n // Convert a numeric string into a number\r\n for (let key in options) {\r\n if (typeof (options[key]) === 'string' && !isNaN(options[key])) {\r\n options[key] = parseFloat(options[key])\r\n }\r\n }\r\n\r\n // Get init event, 'click' or 'dblclick'\r\n let opts = $.extend(true, {}, DEFAULTS, options);\r\n\r\n // We should get zIndex of options before plugin's init.\r\n PUBLIC_VARS['zIndex'] = opts.zIndex;\r\n\r\n if (typeof options === 'string') {\r\n\r\n // $(this).data('photoviewer')[options]();\r\n\r\n } else {\r\n\r\n jqEl.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n\r\n e.preventDefault();\r\n // This will stop triggering data-api event\r\n e.stopPropagation();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n options['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n options['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, options, this));\r\n\r\n });\r\n\r\n }\r\n\r\n return jqEl;\r\n\r\n};\r\n\r\n/**\r\n * PhotoViewer DATA-API\r\n */\r\n$D.on(CLICK_EVENT + EVENT_NS, '[data-' + NS + ']', function (e) {\r\n\r\n jqEl = $('[data-' + NS + ']');\r\n\r\n e.preventDefault();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n DEFAULTS['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n DEFAULTS['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, DEFAULTS, this));\r\n\r\n});\r\n\r\nexport default PhotoViewer;\r\n"],"names":["$","noop","getImgSrc","el","src","attr","throttle","fn","delay","timer","context","args","arguments","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","defaults","zIndex","modal","dragHandle","dragCancel","self","isDragging","startX","startY","left","top","dragStart","e","event","options","multiInstances","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","imgWidth","imgHeight","direction","getModalOpts","dir","offsetX","offsetY","modalLeft","l","modalTop","t","opts","Math","max","getImageOpts","widthDiff2","heightDiff2","imgLeft","imgTop","imgLeft2","imgTop2","modalOpts","imageOpts","isDoResize","scale","getImageScaleToStage","each","handle","PhotoViewer","items","DEFAULTS","isArray","footToolbar","headToolbar","$el","isOpened","rotateAngle","init","groupData","groupIndex","imgSrc","open","loadImg","draggable","$photoviewer","movable","$stage","$image","resizable","modalWidth","modalHeight","_creatBtns","toolbar","btns","btnsStr","index","item","_creatTitle","title","_creatDOM","btnsTpl","i18n","minimize","icons","maximize","close","zoomIn","zoomOut","prev","next","fullscreen","actualSize","rotateLeft","rotateRight","photoviewerHTML","build","$header","find","$headToolbar","$footer","$footToolbar","$title","$close","$maximize","$minimize","$zoomIn","$zoomOut","$actualSize","$fullscreen","$rotateLeft","$rotateRight","$prev","$next","eq","remove","fixedContent","_triggerHook","addEvents","setModalPos","zeroModal","winWidth","winHeight","scrollLeft","scrollTop","initMaximized","setModalSize","stageCSS","right","borderLeft","borderRight","bottom","borderTop","borderBottom","gapThreshold","min","fixedModalSize","round","modalCSSObj","initAnimation","animate","setImageSize","ceil","fadeIn","loaderHTML","hide","fixedModalPos","setImgTitle","html","jump","jumpTo","wheel","delta","deltaY","wheelDelta","detail","ratio","ratioThreshold","pointer","zoom","origin","originalWidth","maxRatio","minRatio","zoomTo","imgData","newWidth","newHeight","originalHeight","x","y","imgNewWidth","imgNewHeight","abs","initWidth","rotate","angle","rotateTo","resize","resizeHandler","keydown","keyboard","keyCode","which","charCode","ctrlKey","metaKey","altKey","data","callbacks","prototype","jqEl","getImgGroup","list","groupName","push","photoviewer","key","isNaN","stopPropagation","currentGroupName","groupList","undefined","not"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"photoviewer.common.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}\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 self = this;\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 = function (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 (self.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 = function (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'] && !self.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 = function () {\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 self = this;\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 = function (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 δ = !self.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 = !self.isRotated\r\n ? (imageWidth - stageWidth)\r\n : (imageHeight - stageWidth);\r\n heightDiff = !self.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 = function (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(self.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 = function () {\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 self = this;\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 = function (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 δ = !self.isRotated\r\n ? 0\r\n : (imageData.w - imageData.h) / 2;\r\n imgWidth = !self.isRotated\r\n ? imageData.w\r\n : imageData.h;\r\n imgHeight = !self.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 = function (e) {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging && !self.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 self.isDoResize = true;\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = function () {\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 = self.getImageScaleToStage(\r\n $(stage).width(),\r\n $(stage).height()\r\n );\r\n\r\n $.extend(self.imageData, {\r\n initWidth: self.img.width * scale,\r\n initHeight: self.img.height * scale,\r\n initLeft: ($(stage).width() - self.img.width * scale) / 2,\r\n initTop: ($(stage).height() - self.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';\r\n\r\nimport DEFAULTS from './defaults';\r\n\r\nimport {\r\n $W,\r\n $D,\r\n CLICK_EVENT,\r\n RESIZE_EVENT,\r\n KEYDOWN_EVENT,\r\n WHEEL_EVENT,\r\n NS,\r\n CLASS_NS,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nimport {\r\n getImgSrc,\r\n throttle,\r\n preloadImg,\r\n requestFullscreen,\r\n getImageNameFromUrl,\r\n getNumFromCSSValue,\r\n hasScrollbar,\r\n getScrollbarWidth,\r\n setGrabCursor\r\n} from './utilities';\r\n\r\nimport draggable from './draggable';\r\nimport movable from './movable';\r\nimport resizable from './resizable';\r\n\r\n/**\r\n * PhotoViewer Class\r\n */\r\nclass PhotoViewer {\r\n\r\n constructor(items, options, el) {\r\n\r\n let self = this;\r\n\r\n this.options = $.extend(true, {}, DEFAULTS, options);\r\n\r\n if (options && $.isArray(options.footToolbar)) {\r\n this.options.footToolbar = options.footToolbar;\r\n }\r\n\r\n if (options && $.isArray(options.headToolbar)) {\r\n this.options.headToolbar = options.headToolbar;\r\n }\r\n\r\n // Store element of clicked\r\n this.$el = $(el);\r\n\r\n // As we have multiple instances,\r\n // so every instance has following variables.\r\n\r\n // modal open flag\r\n this.isOpened = false;\r\n // modal maximize flag\r\n this.isMaximized = false;\r\n // image rotate 90*(2n+1) flag\r\n this.isRotated = false;\r\n // image rotate angle\r\n this.rotateAngle = 0;\r\n\r\n // if modal do resize\r\n this.isDoResize = false;\r\n\r\n // Store image data in every instance\r\n this.imageData = {};\r\n // Store modal data in every instance\r\n this.modalData = {\r\n width: null,\r\n height: null,\r\n left: null,\r\n top: null\r\n };\r\n\r\n this.init(items, self.options, el);\r\n\r\n }\r\n\r\n init(items, opts, el) {\r\n\r\n this.groupData = items;\r\n this.groupIndex = opts['index'];\r\n\r\n // Get image src\r\n let imgSrc = items[this.groupIndex]['src'];\r\n\r\n this.open();\r\n\r\n this.loadImg(imgSrc);\r\n\r\n // draggable & movable & resizable\r\n if (opts.draggable) {\r\n this.draggable(this.$photoviewer, this.dragHandle, CLASS_NS + '-button');\r\n }\r\n if (opts.movable) {\r\n this.movable(this.$stage, this.$image);\r\n }\r\n if (opts.resizable) {\r\n this.resizable(\r\n this.$photoviewer,\r\n this.$stage,\r\n this.$image,\r\n opts.modalWidth,\r\n opts.modalHeight\r\n );\r\n }\r\n\r\n }\r\n\r\n _creatBtns(toolbar, btns) {\r\n\r\n let btnsStr = '';\r\n\r\n $.each(toolbar, function (index, item) {\r\n btnsStr += btns[item];\r\n });\r\n\r\n return btnsStr;\r\n\r\n }\r\n\r\n _creatTitle() {\r\n return (this.options.title ? `
` : '');\r\n }\r\n\r\n _creatDOM() {\r\n\r\n let btnsTpl = {\r\n minimize: ``,\r\n maximize: ``,\r\n close: ``,\r\n zoomIn: ``,\r\n zoomOut: ``,\r\n prev: ``,\r\n next: ``,\r\n fullscreen: ``,\r\n actualSize: ``,\r\n rotateLeft: ``,\r\n rotateRight: ``\r\n };\r\n\r\n // photoviewer base HTML\r\n let photoviewerHTML =\r\n `
\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.headToolbar, btnsTpl)}\r\n
\r\n ${this._creatTitle()}\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.footToolbar, btnsTpl)}\r\n
\r\n
\r\n
\r\n
`;\r\n\r\n return photoviewerHTML;\r\n\r\n }\r\n\r\n build() {\r\n\r\n // Create photoviewer HTML string\r\n let photoviewerHTML = this._creatDOM();\r\n\r\n // Make photoviewer HTML string to jQuery element\r\n let $photoviewer = $(photoviewerHTML);\r\n\r\n // Get all photoviewer element\r\n this.$photoviewer = $photoviewer;\r\n this.$header = $photoviewer.find(CLASS_NS + '-header');\r\n this.$headToolbar = $photoviewer.find(CLASS_NS + '-toolbar-head');\r\n this.$footer = $photoviewer.find(CLASS_NS + '-footer');\r\n this.$footToolbar = $photoviewer.find(CLASS_NS + '-toolbar-foot');\r\n this.$stage = $photoviewer.find(CLASS_NS + '-stage');\r\n this.$title = $photoviewer.find(CLASS_NS + '-title');\r\n this.$image = $photoviewer.find(CLASS_NS + '-image');\r\n this.$close = $photoviewer.find(CLASS_NS + '-button-close');\r\n this.$maximize = $photoviewer.find(CLASS_NS + '-button-maximize');\r\n this.$minimize = $photoviewer.find(CLASS_NS + '-button-minimize');\r\n this.$zoomIn = $photoviewer.find(CLASS_NS + '-button-zoom-in');\r\n this.$zoomOut = $photoviewer.find(CLASS_NS + '-button-zoom-out');\r\n this.$actualSize = $photoviewer.find(CLASS_NS + '-button-actual-size');\r\n this.$fullscreen = $photoviewer.find(CLASS_NS + '-button-fullscreen');\r\n this.$rotateLeft = $photoviewer.find(CLASS_NS + '-button-rotate-left');\r\n this.$rotateRight = $photoviewer.find(CLASS_NS + '-button-rotate-right');\r\n this.$prev = $photoviewer.find(CLASS_NS + '-button-prev');\r\n this.$next = $photoviewer.find(CLASS_NS + '-button-next');\r\n\r\n // Add class before image loaded\r\n this.$stage.addClass('stage-ready');\r\n this.$image.addClass('image-ready');\r\n\r\n // Reset modal z-index with multiple instances\r\n this.$photoviewer.css('z-index', PUBLIC_VARS['zIndex']);\r\n\r\n // Set handle element of draggable\r\n if (!this.options.dragHandle || this.options.dragHandle === CLASS_NS + '-modal') {\r\n this.dragHandle = this.$photoviewer;\r\n } else {\r\n this.dragHandle = this.$photoviewer.find(this.options.dragHandle);\r\n }\r\n\r\n }\r\n\r\n open() {\r\n\r\n if (!this.options.multiInstances) {\r\n $(CLASS_NS + '-modal').eq(0).remove();\r\n }\r\n\r\n // Fixed modal position bug\r\n if (!$(CLASS_NS + '-modal').length && this.options.fixedContent) {\r\n\r\n $('html').css({ 'overflow': 'hidden' });\r\n\r\n if (hasScrollbar()) {\r\n let scrollbarWidth = getScrollbarWidth();\r\n if (scrollbarWidth) {\r\n $('html').css({ 'padding-right': scrollbarWidth });\r\n }\r\n }\r\n\r\n }\r\n\r\n this.build();\r\n\r\n this._triggerHook('beforeOpen', this.$el);\r\n\r\n // Add PhotoViewer to DOM\r\n $('body').append(this.$photoviewer);\r\n\r\n this.addEvents();\r\n\r\n this.setModalPos(this.$photoviewer);\r\n\r\n this._triggerHook('opened', this.$el);\r\n\r\n }\r\n\r\n close() {\r\n\r\n this._triggerHook('beforeClose', this.$el);\r\n\r\n // Remove instance\r\n this.$photoviewer.remove();\r\n\r\n this.isOpened = false;\r\n this.isMaximized = false;\r\n this.isRotated = false;\r\n this.rotateAngle = 0;\r\n\r\n let zeroModal = !$(CLASS_NS + '-modal').length;\r\n\r\n // Fixed modal position bug\r\n if (zeroModal && this.options.fixedContent) {\r\n $('html').css({ 'overflow': '', 'padding-right': '' });\r\n }\r\n\r\n // Reset zIndex after close\r\n if (zeroModal && this.options.multiInstances) {\r\n PUBLIC_VARS['zIndex'] = this.options.zIndex;\r\n }\r\n\r\n // off events\r\n if (!$(CLASS_NS + '-modal').length) {\r\n $D.off(KEYDOWN_EVENT + EVENT_NS);\r\n $W.off(RESIZE_EVENT + EVENT_NS);\r\n }\r\n\r\n this._triggerHook('closed', this.$el);\r\n\r\n }\r\n\r\n setModalPos(modal) {\r\n\r\n let winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n let modalWidth = this.options.modalWidth,\r\n modalHeight = this.options.modalHeight;\r\n\r\n // Set modal maximized when init\r\n if (this.options.initMaximized) {\r\n\r\n modal.addClass(NS + '-maximize');\r\n\r\n modal.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isOpened = true;\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n // Make the modal in windows center\r\n modal.css({\r\n width: modalWidth,\r\n height: modalHeight,\r\n left: (winWidth - modalWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - modalHeight) / 2 + scrollTop + 'px'\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n setModalSize(img) {\r\n\r\n let self = this,\r\n winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n // stage css value\r\n let stageCSS = {\r\n left: this.$stage.css('left'),\r\n right: this.$stage.css('right'),\r\n top: this.$stage.css('top'),\r\n bottom: this.$stage.css('bottom'),\r\n borderLeft: this.$stage.css('border-left-width'),\r\n borderRight: this.$stage.css('border-right-width'),\r\n borderTop: this.$stage.css('border-top-width'),\r\n borderBottom: this.$stage.css('border-bottom-width')\r\n };\r\n\r\n // Modal size should calc with stage css value\r\n let modalWidth = img.width +\r\n getNumFromCSSValue(stageCSS.left) +\r\n getNumFromCSSValue(stageCSS.right) +\r\n getNumFromCSSValue(stageCSS.borderLeft) +\r\n getNumFromCSSValue(stageCSS.borderRight),\r\n modalHeight = img.height +\r\n getNumFromCSSValue(stageCSS.top) +\r\n getNumFromCSSValue(stageCSS.bottom) +\r\n getNumFromCSSValue(stageCSS.borderTop) +\r\n getNumFromCSSValue(stageCSS.borderBottom);\r\n\r\n let gapThreshold = (this.options.gapThreshold > 0 ? this.options.gapThreshold : 0) + 1,\r\n // modal scale to window\r\n scale = Math.min(\r\n winWidth / (modalWidth * gapThreshold),\r\n winHeight / (modalHeight * gapThreshold),\r\n 1\r\n );\r\n\r\n let minWidth = Math.max(modalWidth * scale, this.options.modalWidth),\r\n minHeight = Math.max(modalHeight * scale, this.options.modalHeight);\r\n\r\n minWidth = this.options.fixedModalSize\r\n ? this.options.modalWidth\r\n : Math.round(minWidth);\r\n minHeight = this.options.fixedModalSize\r\n ? this.options.modalHeight\r\n : Math.round(minHeight);\r\n\r\n let modalCSSObj = {\r\n width: minWidth + 'px',\r\n height: minHeight + 'px',\r\n left: (winWidth - minWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - minHeight) / 2 + scrollTop + 'px'\r\n };\r\n\r\n // Add modal init animation\r\n if (this.options.initAnimation) {\r\n this.$photoviewer.animate(modalCSSObj, function () {\r\n self.setImageSize(img);\r\n });\r\n } else {\r\n this.$photoviewer.css(modalCSSObj);\r\n this.setImageSize(img);\r\n }\r\n\r\n this.isOpened = true;\r\n\r\n }\r\n\r\n getImageScaleToStage(stageWidth, stageHeight) {\r\n\r\n var scale = 1;\r\n\r\n if (!this.isRotated) {\r\n scale = Math.min(stageWidth / this.img.width, stageHeight / this.img.height, 1);\r\n } else {\r\n scale = Math.min(stageWidth / this.img.height, stageHeight / this.img.width, 1);\r\n }\r\n\r\n return scale;\r\n }\r\n\r\n setImageSize(img) {\r\n\r\n let stageData = {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n };\r\n\r\n let scale = this.getImageScaleToStage(\r\n stageData.w,\r\n stageData.h\r\n );\r\n\r\n this.$image.css({\r\n width: Math.ceil(img.width * scale) + 'px',\r\n height: Math.ceil(img.height * scale) + 'px',\r\n left: (stageData.w - Math.ceil(img.width * scale)) / 2 + 'px',\r\n top: (stageData.h - Math.ceil(img.height * scale)) / 2 + 'px'\r\n });\r\n\r\n // Store image initial data\r\n $.extend(this.imageData, {\r\n initWidth: img.width * scale,\r\n initHeight: img.height * scale,\r\n initLeft: (stageData.w - img.width * scale) / 2,\r\n initTop: (stageData.h - img.height * scale) / 2,\r\n width: img.width * scale,\r\n height: img.height * scale,\r\n left: (stageData.w - img.width * scale) / 2,\r\n top: (stageData.h - img.height * scale) / 2\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: this.$image.width(),\r\n h: this.$image.height()\r\n },\r\n {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n },\r\n this.$stage,\r\n this.isRotated\r\n );\r\n\r\n // loader end\r\n this.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n\r\n // Add image init animation\r\n if (this.options.initAnimation) {\r\n this.$image.fadeIn();\r\n }\r\n\r\n }\r\n\r\n loadImg(imgSrc) {\r\n\r\n let self = this;\r\n\r\n let loaderHTML = `
`;\r\n\r\n // loader start\r\n this.$photoviewer.append(loaderHTML);\r\n\r\n if (this.options.initAnimation) {\r\n this.$image.hide();\r\n }\r\n\r\n this.$image.attr('src', imgSrc);\r\n\r\n preloadImg(imgSrc, function (img) {\r\n // Store HTMLImageElement\r\n self.img = img;\r\n\r\n // Store original data\r\n self.imageData = {\r\n originalWidth: img.width,\r\n originalHeight: img.height\r\n };\r\n\r\n if (self.isMaximized || (self.isOpened && self.options.fixedModalPos)) {\r\n self.setImageSize(img);\r\n } else {\r\n self.setModalSize(img);\r\n }\r\n\r\n self.$stage.removeClass('stage-ready');\r\n self.$image.removeClass('image-ready');\r\n\r\n }, function () {\r\n // loader end\r\n self.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n });\r\n\r\n if (this.options.title) {\r\n this.setImgTitle(imgSrc);\r\n }\r\n\r\n }\r\n\r\n setImgTitle(url) {\r\n\r\n let title = this.groupData[this.groupIndex].title\r\n ? this.groupData[this.groupIndex].title\r\n : getImageNameFromUrl(url);\r\n\r\n this.$title.html(title);\r\n\r\n }\r\n\r\n jump(index) {\r\n\r\n this.groupIndex = this.groupIndex + index;\r\n\r\n this.jumpTo(this.groupIndex);\r\n\r\n }\r\n\r\n jumpTo(index) {\r\n\r\n index = index % this.groupData.length;\r\n\r\n if (index >= 0) {\r\n index = index % this.groupData.length;\r\n } else if (index < 0) {\r\n index = (this.groupData.length + index) % this.groupData.length;\r\n }\r\n\r\n this.groupIndex = index;\r\n\r\n this._triggerHook('beforeChange', index);\r\n\r\n this.loadImg(this.groupData[index].src);\r\n\r\n this._triggerHook('changed', index);\r\n\r\n }\r\n\r\n wheel(e) {\r\n\r\n e.preventDefault();\r\n\r\n let delta = 1;\r\n\r\n if (e.originalEvent.deltaY) {\r\n delta = e.originalEvent.deltaY > 0 ? 1 : -1;\r\n } else if (e.originalEvent.wheelDelta) {\r\n delta = -e.originalEvent.wheelDelta / 120;\r\n } else if (e.originalEvent.detail) {\r\n delta = e.originalEvent.detail > 0 ? 1 : -1;\r\n }\r\n\r\n // ratio threshold\r\n let ratio = -delta * this.options.ratioThreshold;\r\n\r\n // mouse point position relative to stage\r\n let pointer = {\r\n x: e.originalEvent.clientX - this.$stage.offset().left + $D.scrollLeft(),\r\n y: e.originalEvent.clientY - this.$stage.offset().top + $D.scrollTop()\r\n };\r\n\r\n this.zoom(ratio, pointer, e);\r\n\r\n }\r\n\r\n zoom(ratio, origin, e) {\r\n\r\n // zoom out ratio & zoom in ratio\r\n ratio = ratio < 0 ? (1 / (1 - ratio)) : (1 + ratio);\r\n\r\n // image ratio\r\n ratio = this.$image.width() / this.imageData.originalWidth * ratio;\r\n\r\n // Fixed digital error\r\n // if (ratio > 0.95 && ratio < 1.05) {\r\n // ratio = 1;\r\n // }\r\n\r\n if (ratio > this.options.maxRatio || ratio < this.options.minRatio) {\r\n return;\r\n }\r\n\r\n this.zoomTo(ratio, origin, e);\r\n\r\n }\r\n\r\n zoomTo(ratio, origin, e) {\r\n\r\n let $image = this.$image,\r\n $stage = this.$stage,\r\n imgData = {\r\n w: this.imageData.width,\r\n h: this.imageData.height,\r\n x: this.imageData.left,\r\n y: this.imageData.top\r\n };\r\n\r\n // image stage position\r\n // We will use it to calc the relative position of image\r\n let stageData = {\r\n w: $stage.width(),\r\n h: $stage.height(),\r\n x: $stage.offset().left,\r\n y: $stage.offset().top\r\n };\r\n\r\n let newWidth = this.imageData.originalWidth * ratio,\r\n newHeight = this.imageData.originalHeight * ratio,\r\n // Think about it for a while\r\n newLeft = origin.x - (origin.x - imgData.x) / imgData.w * newWidth,\r\n newTop = origin.y - (origin.y - imgData.y) / imgData.h * newHeight;\r\n\r\n // δ is the difference between image new width and new height\r\n let δ = !this.isRotated ? 0 : (newWidth - newHeight) / 2,\r\n imgNewWidth = !this.isRotated ? newWidth : newHeight,\r\n imgNewHeight = !this.isRotated ? newHeight : newWidth;\r\n\r\n let offsetX = stageData.w - newWidth,\r\n offsetY = stageData.h - newHeight;\r\n\r\n // zoom out & zoom in condition\r\n // It's important and it takes me a lot of time to get it\r\n // The conditions with image rotate 90 degree drive me crazy alomst!\r\n if (imgNewHeight <= stageData.h) {\r\n newTop = (stageData.h - newHeight) / 2;\r\n } else {\r\n newTop = newTop > δ\r\n ? δ\r\n : (newTop > (offsetY - δ)\r\n ? newTop\r\n : (offsetY - δ));\r\n }\r\n\r\n if (imgNewWidth <= stageData.w) {\r\n newLeft = (stageData.w - newWidth) / 2;\r\n } else {\r\n newLeft = newLeft > -δ\r\n ? -δ\r\n : (newLeft > (offsetX + δ)\r\n ? newLeft\r\n : (offsetX + δ));\r\n }\r\n\r\n // if the image scale get to the critical point\r\n if (Math.abs(this.imageData.initWidth - newWidth) < this.imageData.initWidth * 0.05) {\r\n this.setImageSize(this.img);\r\n } else {\r\n $image.css({\r\n width: Math.round(newWidth) + 'px',\r\n height: Math.round(newHeight) + 'px',\r\n left: Math.round(newLeft) + 'px',\r\n top: Math.round(newTop) + 'px'\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: Math.round(imgNewWidth),\r\n h: Math.round(imgNewHeight)\r\n },\r\n {\r\n w: stageData.w,\r\n h: stageData.h\r\n },\r\n this.$stage\r\n );\r\n }\r\n\r\n\r\n // Update image initial data\r\n $.extend(this.imageData, {\r\n width: newWidth,\r\n height: newHeight,\r\n left: newLeft,\r\n top: newTop\r\n });\r\n\r\n }\r\n\r\n rotate(angle) {\r\n\r\n this.rotateAngle = this.rotateAngle + angle;\r\n\r\n if ((this.rotateAngle / 90) % 2 === 0) {\r\n this.isRotated = false;\r\n } else {\r\n this.isRotated = true;\r\n }\r\n\r\n this.rotateTo(this.rotateAngle);\r\n\r\n }\r\n\r\n rotateTo(angle) {\r\n\r\n let self = this;\r\n\r\n this.$image.css({\r\n transform: 'rotate(' + angle + 'deg)'\r\n });\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n // Remove grab cursor when rotate\r\n this.$stage.removeClass('is-grab');\r\n\r\n }\r\n\r\n resize() {\r\n\r\n let self = this;\r\n\r\n let resizeHandler = throttle(function () {\r\n\r\n if (self.isOpened) {\r\n if (self.isMaximized) {\r\n self.setImageSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n } else {\r\n self.setModalSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n }\r\n }\r\n\r\n }, 500);\r\n\r\n return resizeHandler;\r\n\r\n }\r\n\r\n maximize() {\r\n\r\n let self = this;\r\n\r\n if (!this.isMaximized) {\r\n // Store modal data before maximize\r\n this.modalData = {\r\n width: this.$photoviewer.width(),\r\n height: this.$photoviewer.height(),\r\n left: this.$photoviewer.offset().left,\r\n top: this.$photoviewer.offset().top\r\n };\r\n\r\n this.$photoviewer.addClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n this.$photoviewer.removeClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: this.modalData.width\r\n ? this.modalData.width\r\n : this.options.modalWidth,\r\n height: this.modalData.height\r\n ? this.modalData.height\r\n : this.options.modalHeight,\r\n left: this.modalData.left\r\n ? this.modalData.left\r\n : ($W.width() - this.options.modalWidth) / 2 + $D.scrollLeft(),\r\n top: this.modalData.top\r\n ? this.modalData.top\r\n : ($W.height() - this.options.modalHeight) / 2 + $D.scrollTop()\r\n });\r\n\r\n this.isMaximized = false;\r\n }\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n }\r\n\r\n fullscreen() {\r\n\r\n requestFullscreen(this.$photoviewer[0]);\r\n\r\n }\r\n\r\n keydown(e) {\r\n\r\n let self = this;\r\n\r\n if (!this.options.keyboard) {\r\n return false;\r\n }\r\n\r\n let keyCode = e.keyCode || e.which || e.charCode,\r\n ctrlKey = e.ctrlKey || e.metaKey,\r\n altKey = e.altKey || e.metaKey;\r\n\r\n switch (keyCode) {\r\n // ←\r\n case 37:\r\n self.jump(-1);\r\n break;\r\n // →\r\n case 39:\r\n self.jump(1);\r\n break;\r\n // +\r\n case 187:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // -\r\n case 189:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // + Firefox\r\n case 61:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // - Firefox\r\n case 173:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // ctrl + alt + 0\r\n case 48:\r\n if (ctrlKey && altKey) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n }\r\n break;\r\n // ctrl + ,\r\n case 188:\r\n if (ctrlKey) {\r\n self.rotate(-90);\r\n }\r\n break;\r\n // ctrl + .\r\n case 190:\r\n if (ctrlKey) {\r\n self.rotate(90);\r\n }\r\n break;\r\n default:\r\n }\r\n\r\n }\r\n\r\n addEvents() {\r\n\r\n let self = this;\r\n\r\n this.$close.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.close();\r\n });\r\n\r\n this.$stage.off(WHEEL_EVENT + EVENT_NS).on(WHEEL_EVENT + EVENT_NS, function (e) {\r\n self.wheel(e);\r\n });\r\n\r\n this.$zoomIn.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$zoomOut.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$actualSize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$prev.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(-1);\r\n });\r\n\r\n this.$fullscreen.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.fullscreen();\r\n });\r\n\r\n this.$next.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(1);\r\n });\r\n\r\n this.$rotateLeft.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(-90);\r\n });\r\n\r\n this.$rotateRight.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(90);\r\n });\r\n\r\n this.$maximize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.maximize();\r\n });\r\n\r\n $D.off(KEYDOWN_EVENT + EVENT_NS).on(KEYDOWN_EVENT + EVENT_NS, function (e) {\r\n self.keydown(e);\r\n });\r\n\r\n $W.on(RESIZE_EVENT + EVENT_NS, self.resize());\r\n\r\n }\r\n\r\n _triggerHook(e, data) {\r\n if (this.options.callbacks[e]) {\r\n this.options.callbacks[e].apply(this, $.isArray(data) ? data : [data]);\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n/**\r\n * Add methods to PhotoViewer\r\n */\r\n$.extend(PhotoViewer.prototype, draggable, movable, resizable);\r\n\r\n/**\r\n * Add PhotoViewer to globle\r\n */\r\nwindow.PhotoViewer = PhotoViewer;\r\n\r\n/**\r\n * jQuery plugin\r\n */\r\n\r\nlet jqEl = null,\r\n getImgGroup = function (list, groupName) {\r\n\r\n let items = [];\r\n\r\n $(list).each(function () {\r\n\r\n let src = getImgSrc(this);\r\n\r\n items.push({\r\n src: src,\r\n title: $(this).attr('data-title'),\r\n groupName: groupName\r\n });\r\n\r\n });\r\n\r\n return items;\r\n\r\n }\r\n\r\n$.fn.photoviewer = function (options) {\r\n\r\n jqEl = $(this);\r\n\r\n options = options ? options : {};\r\n\r\n // Convert a numeric string into a number\r\n for (let key in options) {\r\n if (typeof (options[key]) === 'string' && !isNaN(options[key])) {\r\n options[key] = parseFloat(options[key])\r\n }\r\n }\r\n\r\n // Get init event, 'click' or 'dblclick'\r\n let opts = $.extend(true, {}, DEFAULTS, options);\r\n\r\n // We should get zIndex of options before plugin's init.\r\n PUBLIC_VARS['zIndex'] = opts.zIndex;\r\n\r\n if (typeof options === 'string') {\r\n\r\n // $(this).data('photoviewer')[options]();\r\n\r\n } else {\r\n\r\n jqEl.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n\r\n e.preventDefault();\r\n // This will stop triggering data-api event\r\n e.stopPropagation();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n options['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n options['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, options, this));\r\n\r\n });\r\n\r\n }\r\n\r\n return jqEl;\r\n\r\n};\r\n\r\n/**\r\n * PhotoViewer DATA-API\r\n */\r\n$D.on(CLICK_EVENT + EVENT_NS, '[data-' + NS + ']', function (e) {\r\n\r\n jqEl = $('[data-' + NS + ']');\r\n\r\n e.preventDefault();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n DEFAULTS['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n DEFAULTS['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, DEFAULTS, this));\r\n\r\n});\r\n\r\nexport default PhotoViewer;\r\n"],"names":["$","noop","getImgSrc","el","src","attr","throttle","fn","delay","timer","context","args","arguments","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","defaults","zIndex","modal","dragHandle","dragCancel","self","isDragging","startX","startY","left","top","dragStart","e","event","options","multiInstances","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","imgWidth","imgHeight","direction","getModalOpts","dir","offsetX","offsetY","modalLeft","l","modalTop","t","opts","Math","max","getImageOpts","widthDiff2","heightDiff2","imgLeft","imgTop","imgLeft2","imgTop2","modalOpts","imageOpts","isDoResize","scale","getImageScaleToStage","each","handle","PhotoViewer","items","DEFAULTS","isArray","footToolbar","headToolbar","$el","isOpened","rotateAngle","init","groupData","groupIndex","imgSrc","open","loadImg","draggable","$photoviewer","movable","$stage","$image","resizable","modalWidth","modalHeight","_creatBtns","toolbar","btns","btnsStr","index","item","_creatTitle","title","_creatDOM","btnsTpl","i18n","minimize","icons","maximize","close","zoomIn","zoomOut","prev","next","fullscreen","actualSize","rotateLeft","rotateRight","photoviewerHTML","build","$header","find","$headToolbar","$footer","$footToolbar","$title","$close","$maximize","$minimize","$zoomIn","$zoomOut","$actualSize","$fullscreen","$rotateLeft","$rotateRight","$prev","$next","eq","remove","fixedContent","_triggerHook","addEvents","setModalPos","zeroModal","winWidth","winHeight","scrollLeft","scrollTop","initMaximized","setModalSize","stageCSS","right","borderLeft","borderRight","bottom","borderTop","borderBottom","gapThreshold","min","fixedModalSize","round","modalCSSObj","initAnimation","animate","setImageSize","ceil","fadeIn","loaderHTML","hide","fixedModalPos","setImgTitle","html","jump","jumpTo","wheel","delta","deltaY","wheelDelta","detail","ratio","ratioThreshold","pointer","zoom","origin","originalWidth","maxRatio","minRatio","zoomTo","imgData","newWidth","newHeight","originalHeight","x","y","imgNewWidth","imgNewHeight","abs","initWidth","rotate","angle","rotateTo","resize","resizeHandler","keydown","keyboard","keyCode","which","charCode","ctrlKey","metaKey","altKey","data","callbacks","prototype","jqEl","getImgGroup","list","groupName","push","photoviewer","key","isNaN","stopPropagation","currentGroupName","groupList","undefined","not"],"mappings":"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"} \ No newline at end of file diff --git a/dist/photoviewer.css b/dist/photoviewer.css index fc46dad..7457c00 100644 --- a/dist/photoviewer.css +++ b/dist/photoviewer.css @@ -7,7 +7,7 @@ * | | | | | | |_| | | | | |_| |\ / _| |_| |__| /\ | |__| |\ \ * |_| |_| |_|\___/ |_| \___/ \_/ |_____|____|_/ \_|____|_| \_\ * - * photoviewer - v2.1.2 + * photoviewer - v2.1.3 * A JS plugin to view images just like in Windows * https://github.com/nzbin/photoviewer#readme * @@ -60,6 +60,37 @@ font-size: 0; } +.photoviewer-button { + display: inline-block; + width: 40px; + height: 40px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + font-size: 16px; + color: #3d3d3d; + line-height: 1; + text-align: center; + background: none; + border-width: 0; + border-radius: 0; + cursor: pointer; + outline: none; +} + +.photoviewer-button:hover { + color: #111; +} + +.photoviewer-button svg { + display: inline-block; + font-size: inherit; + width: 1em; + height: 1em; + overflow: visible; + vertical-align: -.125em; +} + .photoviewer-header { position: relative; z-index: 2; @@ -139,37 +170,6 @@ display: inline-block; } -.photoviewer-button { - display: inline-block; - width: 40px; - height: 40px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - margin: 0; - font-size: 16px; - color: #3d3d3d; - line-height: 1; - text-align: center; - background: none; - border-width: 0; - border-radius: 0; - cursor: pointer; - outline: none; -} - -.photoviewer-button:hover { - color: #111; -} - -.photoviewer-button svg { - display: inline-block; - font-size: inherit; - width: 1em; - height: 1em; - overflow: visible; - vertical-align: -.125em; -} - .photoviewer-loader { position: absolute; top: 0; diff --git a/dist/photoviewer.css.map b/dist/photoviewer.css.map index 8891d93..5e16166 100644 --- a/dist/photoviewer.css.map +++ b/dist/photoviewer.css.map @@ -1 +1 @@ -{"version":3,"sources":["","photoviewer.css"],"names":[],"mappings":"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","file":"photoviewer.css","sourcesContent":[null,".photoviewer-modal {\n position: absolute;\n z-index: 1090;\n width: 320px;\n height: 320px;\n cursor: default;\n overflow: visible !important;\n}\n\n.photoviewer-inner {\n position: absolute;\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n background-color: rgba(255, 255, 255, 0.85);\n box-shadow: 0 2px 10px 2px rgba(0, 0, 0, 0.3);\n border-radius: 5px;\n border: 1px solid #666;\n backdrop-filter: blur(5px);\n cursor: inherit;\n}\n\n.photoviewer-maximize {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.photoviewer-maximize .photoviewer-inner {\n border-radius: 0;\n}\n\n.photoviewer-maximize .photoviewer-resizable-handle {\n display: none;\n}\n\n.photoviewer-toolbar {\n font-size: 0;\n}\n\n.photoviewer-header {\n position: relative;\n z-index: 2;\n height: 30px;\n}\n\n.photoviewer-header .photoviewer-toolbar {\n float: right;\n}\n\n.photoviewer-header .photoviewer-button {\n height: 30px;\n}\n\n.photoviewer-header .photoviewer-button:hover {\n color: #333;\n background-color: #eee;\n}\n\n.photoviewer-header .photoviewer-button-close:hover {\n color: #fff;\n background-color: #ff4545;\n}\n\n.photoviewer-title {\n padding: 8px 10px;\n font-size: 14px;\n line-height: 1;\n white-space: nowrap;\n text-overflow: ellipsis;\n user-select: none;\n color: #333;\n overflow: hidden;\n}\n\n.photoviewer-stage {\n position: absolute;\n top: 30px;\n right: 0;\n bottom: 40px;\n left: 0;\n z-index: 1;\n border-top: 1px solid #666;\n border-bottom: 1px solid #666;\n background-color: #fff;\n overflow: hidden;\n}\n\n.photoviewer-stage.stage-ready {\n text-align: center;\n}\n\n.photoviewer-image {\n position: relative;\n display: inline-block;\n}\n\n.photoviewer-image.image-ready {\n max-width: 100%;\n max-height: 100%;\n}\n\n.photoviewer-footer {\n position: absolute;\n bottom: 0;\n z-index: 2;\n width: 100%;\n height: 40px;\n color: #fff;\n text-align: center;\n}\n\n.photoviewer-footer .photoviewer-toolbar {\n display: inline-block;\n}\n\n.photoviewer-button {\n display: inline-block;\n width: 40px;\n height: 40px;\n box-sizing: border-box;\n margin: 0;\n font-size: 16px;\n color: #3d3d3d;\n line-height: 1;\n text-align: center;\n background: none;\n border-width: 0;\n border-radius: 0;\n cursor: pointer;\n outline: none;\n}\n\n.photoviewer-button:hover {\n color: #111;\n}\n\n.photoviewer-button svg {\n display: inline-block;\n font-size: inherit;\n width: 1em;\n height: 1em;\n overflow: visible;\n vertical-align: -.125em;\n}\n\n.photoviewer-loader {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 2;\n text-align: center;\n color: #333;\n}\n\n.photoviewer-loader::before {\n content: '';\n display: inline-block;\n position: relative;\n width: 36px;\n height: 36px;\n box-sizing: border-box;\n border-width: 5px;\n border-style: solid;\n border-color: rgba(0, 0, 0, 0.5) rgba(0, 0, 0, 0.5) rgba(0, 0, 0, 0.5) rgba(255, 255, 255, 0.5);\n border-radius: 100%;\n animation: photoviewerLoading 1s infinite linear;\n}\n\n.photoviewer-loader::after {\n content: '';\n display: inline-block;\n width: 0;\n height: 100%;\n vertical-align: middle;\n overflow: hidden;\n}\n\n@keyframes photoviewerLoading {\n 0% {\n transform: rotateZ(0deg) translate3d(0, 0, 0);\n }\n 100% {\n transform: rotateZ(360deg) translate3d(0, 0, 0);\n }\n}\n\n.photoviewer-resizable-handle {\n position: absolute;\n z-index: 10;\n}\n\n.photoviewer-resizable-handle-e {\n top: 0;\n right: -5px;\n bottom: 0;\n left: auto;\n width: 10px;\n cursor: e-resize;\n}\n\n.photoviewer-resizable-handle-s {\n top: auto;\n right: 0;\n bottom: -5px;\n left: 0;\n height: 10px;\n cursor: s-resize;\n}\n\n.photoviewer-resizable-handle-w {\n top: 0;\n right: auto;\n bottom: 0;\n left: -5px;\n width: 10px;\n cursor: w-resize;\n}\n\n.photoviewer-resizable-handle-n {\n top: -5px;\n right: 0;\n bottom: auto;\n left: 0;\n height: 10px;\n cursor: n-resize;\n}\n\n.photoviewer-resizable-handle-se {\n top: auto;\n right: -5px;\n bottom: -5px;\n left: auto;\n width: 10px;\n height: 10px;\n cursor: se-resize;\n}\n\n.photoviewer-resizable-handle-sw {\n top: auto;\n right: auto;\n bottom: -5px;\n left: -5px;\n width: 10px;\n height: 10px;\n cursor: sw-resize;\n}\n\n.photoviewer-resizable-handle-nw {\n top: -5px;\n right: auto;\n bottom: auto;\n left: -5px;\n width: 10px;\n height: 10px;\n cursor: nw-resize;\n}\n\n.photoviewer-resizable-handle-ne {\n top: -5px;\n right: -5px;\n bottom: auto;\n left: auto;\n width: 10px;\n height: 10px;\n cursor: ne-resize;\n}\n\n:-webkit-full-screen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:-webkit-full-screen .photoviewer-header,\n:-webkit-full-screen .photoviewer-footer,\n:-webkit-full-screen .photoviewer-resizable-handle {\n display: none;\n}\n\n:-webkit-full-screen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n:-moz-full-screen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:-moz-full-screen .photoviewer-header,\n:-moz-full-screen .photoviewer-footer,\n:-moz-full-screen .photoviewer-resizable-handle {\n display: none;\n}\n\n:-moz-full-screen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n:-ms-fullscreen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:-ms-fullscreen .photoviewer-header,\n:-ms-fullscreen .photoviewer-footer,\n:-ms-fullscreen .photoviewer-resizable-handle {\n display: none;\n}\n\n:-ms-fullscreen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n:full-screen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:full-screen .photoviewer-header,\n:full-screen .photoviewer-footer,\n:full-screen .photoviewer-resizable-handle {\n display: none;\n}\n\n:full-screen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n:fullscreen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:fullscreen .photoviewer-header,\n:fullscreen .photoviewer-footer,\n:fullscreen .photoviewer-resizable-handle {\n display: none;\n}\n\n:fullscreen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n::backdrop {\n background-color: #000;\n}\n\n::-ms-backdrop {\n background-color: #000;\n}\n\n.is-grab {\n cursor: move;\n cursor: -webkit-grab;\n cursor: grab;\n}\n\n.is-grabbing {\n cursor: move;\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["","photoviewer.css"],"names":[],"mappings":"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","file":"photoviewer.css","sourcesContent":[null,".photoviewer-modal {\n position: absolute;\n z-index: 1090;\n width: 320px;\n height: 320px;\n cursor: default;\n overflow: visible !important;\n}\n\n.photoviewer-inner {\n position: absolute;\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n background-color: rgba(255, 255, 255, 0.85);\n box-shadow: 0 2px 10px 2px rgba(0, 0, 0, 0.3);\n border-radius: 5px;\n border: 1px solid #666;\n backdrop-filter: blur(5px);\n cursor: inherit;\n}\n\n.photoviewer-maximize {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.photoviewer-maximize .photoviewer-inner {\n border-radius: 0;\n}\n\n.photoviewer-maximize .photoviewer-resizable-handle {\n display: none;\n}\n\n.photoviewer-toolbar {\n font-size: 0;\n}\n\n.photoviewer-button {\n display: inline-block;\n width: 40px;\n height: 40px;\n box-sizing: border-box;\n margin: 0;\n font-size: 16px;\n color: #3d3d3d;\n line-height: 1;\n text-align: center;\n background: none;\n border-width: 0;\n border-radius: 0;\n cursor: pointer;\n outline: none;\n}\n\n.photoviewer-button:hover {\n color: #111;\n}\n\n.photoviewer-button svg {\n display: inline-block;\n font-size: inherit;\n width: 1em;\n height: 1em;\n overflow: visible;\n vertical-align: -.125em;\n}\n\n.photoviewer-header {\n position: relative;\n z-index: 2;\n height: 30px;\n}\n\n.photoviewer-header .photoviewer-toolbar {\n float: right;\n}\n\n.photoviewer-header .photoviewer-button {\n height: 30px;\n}\n\n.photoviewer-header .photoviewer-button:hover {\n color: #333;\n background-color: #eee;\n}\n\n.photoviewer-header .photoviewer-button-close:hover {\n color: #fff;\n background-color: #ff4545;\n}\n\n.photoviewer-title {\n padding: 8px 10px;\n font-size: 14px;\n line-height: 1;\n white-space: nowrap;\n text-overflow: ellipsis;\n user-select: none;\n color: #333;\n overflow: hidden;\n}\n\n.photoviewer-stage {\n position: absolute;\n top: 30px;\n right: 0;\n bottom: 40px;\n left: 0;\n z-index: 1;\n border-top: 1px solid #666;\n border-bottom: 1px solid #666;\n background-color: #fff;\n overflow: hidden;\n}\n\n.photoviewer-stage.stage-ready {\n text-align: center;\n}\n\n.photoviewer-image {\n position: relative;\n display: inline-block;\n}\n\n.photoviewer-image.image-ready {\n max-width: 100%;\n max-height: 100%;\n}\n\n.photoviewer-footer {\n position: absolute;\n bottom: 0;\n z-index: 2;\n width: 100%;\n height: 40px;\n color: #fff;\n text-align: center;\n}\n\n.photoviewer-footer .photoviewer-toolbar {\n display: inline-block;\n}\n\n.photoviewer-loader {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 2;\n text-align: center;\n color: #333;\n}\n\n.photoviewer-loader::before {\n content: '';\n display: inline-block;\n position: relative;\n width: 36px;\n height: 36px;\n box-sizing: border-box;\n border-width: 5px;\n border-style: solid;\n border-color: rgba(0, 0, 0, 0.5) rgba(0, 0, 0, 0.5) rgba(0, 0, 0, 0.5) rgba(255, 255, 255, 0.5);\n border-radius: 100%;\n animation: photoviewerLoading 1s infinite linear;\n}\n\n.photoviewer-loader::after {\n content: '';\n display: inline-block;\n width: 0;\n height: 100%;\n vertical-align: middle;\n overflow: hidden;\n}\n\n@keyframes photoviewerLoading {\n 0% {\n transform: rotateZ(0deg) translate3d(0, 0, 0);\n }\n 100% {\n transform: rotateZ(360deg) translate3d(0, 0, 0);\n }\n}\n\n.photoviewer-resizable-handle {\n position: absolute;\n z-index: 10;\n}\n\n.photoviewer-resizable-handle-e {\n top: 0;\n right: -5px;\n bottom: 0;\n left: auto;\n width: 10px;\n cursor: e-resize;\n}\n\n.photoviewer-resizable-handle-s {\n top: auto;\n right: 0;\n bottom: -5px;\n left: 0;\n height: 10px;\n cursor: s-resize;\n}\n\n.photoviewer-resizable-handle-w {\n top: 0;\n right: auto;\n bottom: 0;\n left: -5px;\n width: 10px;\n cursor: w-resize;\n}\n\n.photoviewer-resizable-handle-n {\n top: -5px;\n right: 0;\n bottom: auto;\n left: 0;\n height: 10px;\n cursor: n-resize;\n}\n\n.photoviewer-resizable-handle-se {\n top: auto;\n right: -5px;\n bottom: -5px;\n left: auto;\n width: 10px;\n height: 10px;\n cursor: se-resize;\n}\n\n.photoviewer-resizable-handle-sw {\n top: auto;\n right: auto;\n bottom: -5px;\n left: -5px;\n width: 10px;\n height: 10px;\n cursor: sw-resize;\n}\n\n.photoviewer-resizable-handle-nw {\n top: -5px;\n right: auto;\n bottom: auto;\n left: -5px;\n width: 10px;\n height: 10px;\n cursor: nw-resize;\n}\n\n.photoviewer-resizable-handle-ne {\n top: -5px;\n right: -5px;\n bottom: auto;\n left: auto;\n width: 10px;\n height: 10px;\n cursor: ne-resize;\n}\n\n:-webkit-full-screen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:-webkit-full-screen .photoviewer-header,\n:-webkit-full-screen .photoviewer-footer,\n:-webkit-full-screen .photoviewer-resizable-handle {\n display: none;\n}\n\n:-webkit-full-screen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n:-moz-full-screen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:-moz-full-screen .photoviewer-header,\n:-moz-full-screen .photoviewer-footer,\n:-moz-full-screen .photoviewer-resizable-handle {\n display: none;\n}\n\n:-moz-full-screen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n:-ms-fullscreen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:-ms-fullscreen .photoviewer-header,\n:-ms-fullscreen .photoviewer-footer,\n:-ms-fullscreen .photoviewer-resizable-handle {\n display: none;\n}\n\n:-ms-fullscreen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n:full-screen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:full-screen .photoviewer-header,\n:full-screen .photoviewer-footer,\n:full-screen .photoviewer-resizable-handle {\n display: none;\n}\n\n:full-screen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n:fullscreen {\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n:fullscreen .photoviewer-header,\n:fullscreen .photoviewer-footer,\n:fullscreen .photoviewer-resizable-handle {\n display: none;\n}\n\n:fullscreen .photoviewer-stage {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-width: 0;\n background-color: #000;\n}\n\n::backdrop {\n background-color: #000;\n}\n\n::-ms-backdrop {\n background-color: #000;\n}\n\n.is-grab {\n cursor: move;\n cursor: -webkit-grab;\n cursor: grab;\n}\n\n.is-grabbing {\n cursor: move;\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n"]} \ No newline at end of file diff --git a/dist/photoviewer.esm.js b/dist/photoviewer.esm.js index 172d001..aa6c84e 100644 --- a/dist/photoviewer.esm.js +++ b/dist/photoviewer.esm.js @@ -7,7 +7,7 @@ * | | | | | | |_| | | | | |_| |\ / _| |_| |__| /\ | |__| |\ \ * |_| |_| |_|\___/ |_| \___/ \_/ |_____|____|_/ \_|____|_| \_\ * - * photoviewer - v2.1.2 + * photoviewer - v2.1.3 * A JS plugin to view images just like in Windows * https://github.com/nzbin/photoviewer#readme * diff --git a/dist/photoviewer.esm.js.map b/dist/photoviewer.esm.js.map index 052905f..0c833ad 100644 --- a/dist/photoviewer.esm.js.map +++ b/dist/photoviewer.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"photoviewer.esm.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 {\n\n // Enable modal to drag\n draggable: true,\n\n // Enable modal to resize\n resizable: true,\n\n // Enable image to move\n movable: true,\n\n // Enable keyboard navigation\n keyboard: true,\n\n // Shows the title\n title: true,\n\n // Min width of modal\n modalWidth: 320,\n\n // Min height of modal\n modalHeight: 320,\n\n // Enable the page content fixed\n fixedContent: true,\n\n // Disable the modal size fixed\n fixedModalSize: false,\n\n // Disable the image viewer maximized on init\n initMaximized: false,\n\n // Threshold of modal to browser window\n gapThreshold: 0.02,\n\n // Threshold of image ratio\n ratioThreshold: 0.1,\n\n // Min ratio of image when zoom out\n minRatio: 0.05,\n\n // Max ratio of image when zoom in\n maxRatio: 16,\n\n // Toolbar options in header\n headToolbar: [\n 'maximize',\n 'close'\n ],\n\n // Toolbar options in footer\n footToolbar: [\n 'zoomIn',\n 'zoomOut',\n 'prev',\n 'fullscreen',\n 'next',\n 'actualSize',\n 'rotateRight'\n ],\n\n // Customize button icon\n icons: {\n minimize: `\n \n `,\n maximize: `\n \n `,\n close: `\n \n `,\n zoomIn: `\n \n `,\n zoomOut: `\n \n `,\n prev: `\n \n `,\n next: `\n \n `,\n fullscreen: `\n \n `,\n actualSize: `\n \n `,\n rotateLeft: `\n \n `,\n rotateRight: `\n \n `\n },\n\n // Customize language of button title\n i18n: {\n minimize: 'minimize',\n maximize: 'maximize',\n close: 'close',\n zoomIn: 'zoom-in(+)',\n zoomOut: 'zoom-out(-)',\n prev: 'prev(←)',\n next: 'next(→)',\n fullscreen: 'fullscreen',\n actualSize: 'actual-size(Ctrl+Alt+0)',\n rotateLeft: 'rotate-left(Ctrl+,)',\n rotateRight: 'rotate-right(Ctrl+.)'\n },\n\n // Enable multiple instances\n multiInstances: true,\n\n // Enable animation\n initAnimation: true,\n\n // Disable modal position fixed when change images\n fixedModalPos: false,\n\n // Modal z-index\n zIndex: 1090,\n\n // Selector of drag handler\n dragHandle: false,\n\n // Callback events\n callbacks: {\n beforeOpen: $.noop,\n opened: $.noop,\n beforeClose: $.noop,\n closed: $.noop,\n beforeChange: $.noop,\n changed: $.noop\n },\n\n // Start images index\n index: 0\n\n}\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 self = this;\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 = function (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 (self.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 = function (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'] && !self.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 = function () {\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 self = this;\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 = function (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 δ = !self.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 = !self.isRotated\r\n ? (imageWidth - stageWidth)\r\n : (imageHeight - stageWidth);\r\n heightDiff = !self.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 = function (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(self.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 = function () {\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 self = this;\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 = function (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 δ = !self.isRotated\r\n ? 0\r\n : (imageData.w - imageData.h) / 2;\r\n imgWidth = !self.isRotated\r\n ? imageData.w\r\n : imageData.h;\r\n imgHeight = !self.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 = function (e) {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging && !self.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 self.isDoResize = true;\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = function () {\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 = self.getImageScaleToStage(\r\n $(stage).width(),\r\n $(stage).height()\r\n );\r\n\r\n $.extend(self.imageData, {\r\n initWidth: self.img.width * scale,\r\n initHeight: self.img.height * scale,\r\n initLeft: ($(stage).width() - self.img.width * scale) / 2,\r\n initTop: ($(stage).height() - self.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';\r\n\r\nimport DEFAULTS from './defaults';\r\n\r\nimport {\r\n $W,\r\n $D,\r\n CLICK_EVENT,\r\n RESIZE_EVENT,\r\n KEYDOWN_EVENT,\r\n WHEEL_EVENT,\r\n NS,\r\n CLASS_NS,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nimport {\r\n getImgSrc,\r\n throttle,\r\n preloadImg,\r\n requestFullscreen,\r\n getImageNameFromUrl,\r\n getNumFromCSSValue,\r\n hasScrollbar,\r\n getScrollbarWidth,\r\n setGrabCursor\r\n} from './utilities';\r\n\r\nimport draggable from './draggable';\r\nimport movable from './movable';\r\nimport resizable from './resizable';\r\n\r\n/**\r\n * PhotoViewer Class\r\n */\r\nclass PhotoViewer {\r\n\r\n constructor(items, options, el) {\r\n\r\n let self = this;\r\n\r\n this.options = $.extend(true, {}, DEFAULTS, options);\r\n\r\n if (options && $.isArray(options.footToolbar)) {\r\n this.options.footToolbar = options.footToolbar;\r\n }\r\n\r\n if (options && $.isArray(options.headToolbar)) {\r\n this.options.headToolbar = options.headToolbar;\r\n }\r\n\r\n // Store element of clicked\r\n this.$el = $(el);\r\n\r\n // As we have multiple instances,\r\n // so every instance has following variables.\r\n\r\n // modal open flag\r\n this.isOpened = false;\r\n // modal maximize flag\r\n this.isMaximized = false;\r\n // image rotate 90*(2n+1) flag\r\n this.isRotated = false;\r\n // image rotate angle\r\n this.rotateAngle = 0;\r\n\r\n // if modal do resize\r\n this.isDoResize = false;\r\n\r\n // Store image data in every instance\r\n this.imageData = {};\r\n // Store modal data in every instance\r\n this.modalData = {\r\n width: null,\r\n height: null,\r\n left: null,\r\n top: null\r\n };\r\n\r\n this.init(items, self.options, el);\r\n\r\n }\r\n\r\n init(items, opts, el) {\r\n\r\n this.groupData = items;\r\n this.groupIndex = opts['index'];\r\n\r\n // Get image src\r\n let imgSrc = items[this.groupIndex]['src'];\r\n\r\n this.open();\r\n\r\n this.loadImg(imgSrc);\r\n\r\n // draggable & movable & resizable\r\n if (opts.draggable) {\r\n this.draggable(this.$photoviewer, this.dragHandle, CLASS_NS + '-button');\r\n }\r\n if (opts.movable) {\r\n this.movable(this.$stage, this.$image);\r\n }\r\n if (opts.resizable) {\r\n this.resizable(\r\n this.$photoviewer,\r\n this.$stage,\r\n this.$image,\r\n opts.modalWidth,\r\n opts.modalHeight\r\n );\r\n }\r\n\r\n }\r\n\r\n _creatBtns(toolbar, btns) {\r\n\r\n let btnsStr = '';\r\n\r\n $.each(toolbar, function (index, item) {\r\n btnsStr += btns[item];\r\n });\r\n\r\n return btnsStr;\r\n\r\n }\r\n\r\n _creatTitle() {\r\n return (this.options.title ? `
` : '');\r\n }\r\n\r\n _creatDOM() {\r\n\r\n let btnsTpl = {\r\n minimize: ``,\r\n maximize: ``,\r\n close: ``,\r\n zoomIn: ``,\r\n zoomOut: ``,\r\n prev: ``,\r\n next: ``,\r\n fullscreen: ``,\r\n actualSize: ``,\r\n rotateLeft: ``,\r\n rotateRight: ``\r\n };\r\n\r\n // photoviewer base HTML\r\n let photoviewerHTML =\r\n `
\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.headToolbar, btnsTpl)}\r\n
\r\n ${this._creatTitle()}\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.footToolbar, btnsTpl)}\r\n
\r\n
\r\n
\r\n
`;\r\n\r\n return photoviewerHTML;\r\n\r\n }\r\n\r\n build() {\r\n\r\n // Create photoviewer HTML string\r\n let photoviewerHTML = this._creatDOM();\r\n\r\n // Make photoviewer HTML string to jQuery element\r\n let $photoviewer = $(photoviewerHTML);\r\n\r\n // Get all photoviewer element\r\n this.$photoviewer = $photoviewer;\r\n this.$header = $photoviewer.find(CLASS_NS + '-header');\r\n this.$headToolbar = $photoviewer.find(CLASS_NS + '-toolbar-head');\r\n this.$footer = $photoviewer.find(CLASS_NS + '-footer');\r\n this.$footToolbar = $photoviewer.find(CLASS_NS + '-toolbar-foot');\r\n this.$stage = $photoviewer.find(CLASS_NS + '-stage');\r\n this.$title = $photoviewer.find(CLASS_NS + '-title');\r\n this.$image = $photoviewer.find(CLASS_NS + '-image');\r\n this.$close = $photoviewer.find(CLASS_NS + '-button-close');\r\n this.$maximize = $photoviewer.find(CLASS_NS + '-button-maximize');\r\n this.$minimize = $photoviewer.find(CLASS_NS + '-button-minimize');\r\n this.$zoomIn = $photoviewer.find(CLASS_NS + '-button-zoom-in');\r\n this.$zoomOut = $photoviewer.find(CLASS_NS + '-button-zoom-out');\r\n this.$actualSize = $photoviewer.find(CLASS_NS + '-button-actual-size');\r\n this.$fullscreen = $photoviewer.find(CLASS_NS + '-button-fullscreen');\r\n this.$rotateLeft = $photoviewer.find(CLASS_NS + '-button-rotate-left');\r\n this.$rotateRight = $photoviewer.find(CLASS_NS + '-button-rotate-right');\r\n this.$prev = $photoviewer.find(CLASS_NS + '-button-prev');\r\n this.$next = $photoviewer.find(CLASS_NS + '-button-next');\r\n\r\n // Add class before image loaded\r\n this.$stage.addClass('stage-ready');\r\n this.$image.addClass('image-ready');\r\n\r\n // Reset modal z-index with multiple instances\r\n this.$photoviewer.css('z-index', PUBLIC_VARS['zIndex']);\r\n\r\n // Set handle element of draggable\r\n if (!this.options.dragHandle || this.options.dragHandle === CLASS_NS + '-modal') {\r\n this.dragHandle = this.$photoviewer;\r\n } else {\r\n this.dragHandle = this.$photoviewer.find(this.options.dragHandle);\r\n }\r\n\r\n }\r\n\r\n open() {\r\n\r\n if (!this.options.multiInstances) {\r\n $(CLASS_NS + '-modal').eq(0).remove();\r\n }\r\n\r\n // Fixed modal position bug\r\n if (!$(CLASS_NS + '-modal').length && this.options.fixedContent) {\r\n\r\n $('html').css({ 'overflow': 'hidden' });\r\n\r\n if (hasScrollbar()) {\r\n let scrollbarWidth = getScrollbarWidth();\r\n if (scrollbarWidth) {\r\n $('html').css({ 'padding-right': scrollbarWidth });\r\n }\r\n }\r\n\r\n }\r\n\r\n this.build();\r\n\r\n this._triggerHook('beforeOpen', this.$el);\r\n\r\n // Add PhotoViewer to DOM\r\n $('body').append(this.$photoviewer);\r\n\r\n this.addEvents();\r\n\r\n this.setModalPos(this.$photoviewer);\r\n\r\n this._triggerHook('opened', this.$el);\r\n\r\n }\r\n\r\n close() {\r\n\r\n this._triggerHook('beforeClose', this.$el);\r\n\r\n // Remove instance\r\n this.$photoviewer.remove();\r\n\r\n this.isOpened = false;\r\n this.isMaximized = false;\r\n this.isRotated = false;\r\n this.rotateAngle = 0;\r\n\r\n let zeroModal = !$(CLASS_NS + '-modal').length;\r\n\r\n // Fixed modal position bug\r\n if (zeroModal && this.options.fixedContent) {\r\n $('html').css({ 'overflow': '', 'padding-right': '' });\r\n }\r\n\r\n // Reset zIndex after close\r\n if (zeroModal && this.options.multiInstances) {\r\n PUBLIC_VARS['zIndex'] = this.options.zIndex;\r\n }\r\n\r\n // off events\r\n if (!$(CLASS_NS + '-modal').length) {\r\n $D.off(KEYDOWN_EVENT + EVENT_NS);\r\n $W.off(RESIZE_EVENT + EVENT_NS);\r\n }\r\n\r\n this._triggerHook('closed', this.$el);\r\n\r\n }\r\n\r\n setModalPos(modal) {\r\n\r\n let winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n let modalWidth = this.options.modalWidth,\r\n modalHeight = this.options.modalHeight;\r\n\r\n // Set modal maximized when init\r\n if (this.options.initMaximized) {\r\n\r\n modal.addClass(NS + '-maximize');\r\n\r\n modal.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isOpened = true;\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n // Make the modal in windows center\r\n modal.css({\r\n width: modalWidth,\r\n height: modalHeight,\r\n left: (winWidth - modalWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - modalHeight) / 2 + scrollTop + 'px'\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n setModalSize(img) {\r\n\r\n let self = this,\r\n winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n // stage css value\r\n let stageCSS = {\r\n left: this.$stage.css('left'),\r\n right: this.$stage.css('right'),\r\n top: this.$stage.css('top'),\r\n bottom: this.$stage.css('bottom'),\r\n borderLeft: this.$stage.css('border-left-width'),\r\n borderRight: this.$stage.css('border-right-width'),\r\n borderTop: this.$stage.css('border-top-width'),\r\n borderBottom: this.$stage.css('border-bottom-width')\r\n };\r\n\r\n // Modal size should calc with stage css value\r\n let modalWidth = img.width +\r\n getNumFromCSSValue(stageCSS.left) +\r\n getNumFromCSSValue(stageCSS.right) +\r\n getNumFromCSSValue(stageCSS.borderLeft) +\r\n getNumFromCSSValue(stageCSS.borderRight),\r\n modalHeight = img.height +\r\n getNumFromCSSValue(stageCSS.top) +\r\n getNumFromCSSValue(stageCSS.bottom) +\r\n getNumFromCSSValue(stageCSS.borderTop) +\r\n getNumFromCSSValue(stageCSS.borderBottom);\r\n\r\n let gapThreshold = (this.options.gapThreshold > 0 ? this.options.gapThreshold : 0) + 1,\r\n // modal scale to window\r\n scale = Math.min(\r\n winWidth / (modalWidth * gapThreshold),\r\n winHeight / (modalHeight * gapThreshold),\r\n 1\r\n );\r\n\r\n let minWidth = Math.max(modalWidth * scale, this.options.modalWidth),\r\n minHeight = Math.max(modalHeight * scale, this.options.modalHeight);\r\n\r\n minWidth = this.options.fixedModalSize\r\n ? this.options.modalWidth\r\n : Math.round(minWidth);\r\n minHeight = this.options.fixedModalSize\r\n ? this.options.modalHeight\r\n : Math.round(minHeight);\r\n\r\n let modalCSSObj = {\r\n width: minWidth + 'px',\r\n height: minHeight + 'px',\r\n left: (winWidth - minWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - minHeight) / 2 + scrollTop + 'px'\r\n };\r\n\r\n // Add modal init animation\r\n if (this.options.initAnimation) {\r\n this.$photoviewer.animate(modalCSSObj, function () {\r\n self.setImageSize(img);\r\n });\r\n } else {\r\n this.$photoviewer.css(modalCSSObj);\r\n this.setImageSize(img);\r\n }\r\n\r\n this.isOpened = true;\r\n\r\n }\r\n\r\n getImageScaleToStage(stageWidth, stageHeight) {\r\n\r\n var scale = 1;\r\n\r\n if (!this.isRotated) {\r\n scale = Math.min(stageWidth / this.img.width, stageHeight / this.img.height, 1);\r\n } else {\r\n scale = Math.min(stageWidth / this.img.height, stageHeight / this.img.width, 1);\r\n }\r\n\r\n return scale;\r\n }\r\n\r\n setImageSize(img) {\r\n\r\n let stageData = {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n };\r\n\r\n let scale = this.getImageScaleToStage(\r\n stageData.w,\r\n stageData.h\r\n );\r\n\r\n this.$image.css({\r\n width: Math.ceil(img.width * scale) + 'px',\r\n height: Math.ceil(img.height * scale) + 'px',\r\n left: (stageData.w - Math.ceil(img.width * scale)) / 2 + 'px',\r\n top: (stageData.h - Math.ceil(img.height * scale)) / 2 + 'px'\r\n });\r\n\r\n // Store image initial data\r\n $.extend(this.imageData, {\r\n initWidth: img.width * scale,\r\n initHeight: img.height * scale,\r\n initLeft: (stageData.w - img.width * scale) / 2,\r\n initTop: (stageData.h - img.height * scale) / 2,\r\n width: img.width * scale,\r\n height: img.height * scale,\r\n left: (stageData.w - img.width * scale) / 2,\r\n top: (stageData.h - img.height * scale) / 2\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: this.$image.width(),\r\n h: this.$image.height()\r\n },\r\n {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n },\r\n this.$stage,\r\n this.isRotated\r\n );\r\n\r\n // loader end\r\n this.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n\r\n // Add image init animation\r\n if (this.options.initAnimation) {\r\n this.$image.fadeIn();\r\n }\r\n\r\n }\r\n\r\n loadImg(imgSrc) {\r\n\r\n let self = this;\r\n\r\n let loaderHTML = `
`;\r\n\r\n // loader start\r\n this.$photoviewer.append(loaderHTML);\r\n\r\n if (this.options.initAnimation) {\r\n this.$image.hide();\r\n }\r\n\r\n this.$image.attr('src', imgSrc);\r\n\r\n preloadImg(imgSrc, function (img) {\r\n // Store HTMLImageElement\r\n self.img = img;\r\n\r\n // Store original data\r\n self.imageData = {\r\n originalWidth: img.width,\r\n originalHeight: img.height\r\n };\r\n\r\n if (self.isMaximized || (self.isOpened && self.options.fixedModalPos)) {\r\n self.setImageSize(img);\r\n } else {\r\n self.setModalSize(img);\r\n }\r\n\r\n self.$stage.removeClass('stage-ready');\r\n self.$image.removeClass('image-ready');\r\n\r\n }, function () {\r\n // loader end\r\n self.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n });\r\n\r\n if (this.options.title) {\r\n this.setImgTitle(imgSrc);\r\n }\r\n\r\n }\r\n\r\n setImgTitle(url) {\r\n\r\n let title = this.groupData[this.groupIndex].title\r\n ? this.groupData[this.groupIndex].title\r\n : getImageNameFromUrl(url);\r\n\r\n this.$title.html(title);\r\n\r\n }\r\n\r\n jump(index) {\r\n\r\n this.groupIndex = this.groupIndex + index;\r\n\r\n this.jumpTo(this.groupIndex);\r\n\r\n }\r\n\r\n jumpTo(index) {\r\n\r\n index = index % this.groupData.length;\r\n\r\n if (index >= 0) {\r\n index = index % this.groupData.length;\r\n } else if (index < 0) {\r\n index = (this.groupData.length + index) % this.groupData.length;\r\n }\r\n\r\n this.groupIndex = index;\r\n\r\n this._triggerHook('beforeChange', index);\r\n\r\n this.loadImg(this.groupData[index].src);\r\n\r\n this._triggerHook('changed', index);\r\n\r\n }\r\n\r\n wheel(e) {\r\n\r\n e.preventDefault();\r\n\r\n let delta = 1;\r\n\r\n if (e.originalEvent.deltaY) {\r\n delta = e.originalEvent.deltaY > 0 ? 1 : -1;\r\n } else if (e.originalEvent.wheelDelta) {\r\n delta = -e.originalEvent.wheelDelta / 120;\r\n } else if (e.originalEvent.detail) {\r\n delta = e.originalEvent.detail > 0 ? 1 : -1;\r\n }\r\n\r\n // ratio threshold\r\n let ratio = -delta * this.options.ratioThreshold;\r\n\r\n // mouse point position relative to stage\r\n let pointer = {\r\n x: e.originalEvent.clientX - this.$stage.offset().left + $D.scrollLeft(),\r\n y: e.originalEvent.clientY - this.$stage.offset().top + $D.scrollTop()\r\n };\r\n\r\n this.zoom(ratio, pointer, e);\r\n\r\n }\r\n\r\n zoom(ratio, origin, e) {\r\n\r\n // zoom out ratio & zoom in ratio\r\n ratio = ratio < 0 ? (1 / (1 - ratio)) : (1 + ratio);\r\n\r\n // image ratio\r\n ratio = this.$image.width() / this.imageData.originalWidth * ratio;\r\n\r\n // Fixed digital error\r\n // if (ratio > 0.95 && ratio < 1.05) {\r\n // ratio = 1;\r\n // }\r\n\r\n if (ratio > this.options.maxRatio || ratio < this.options.minRatio) {\r\n return;\r\n }\r\n\r\n this.zoomTo(ratio, origin, e);\r\n\r\n }\r\n\r\n zoomTo(ratio, origin, e) {\r\n\r\n let $image = this.$image,\r\n $stage = this.$stage,\r\n imgData = {\r\n w: this.imageData.width,\r\n h: this.imageData.height,\r\n x: this.imageData.left,\r\n y: this.imageData.top\r\n };\r\n\r\n // image stage position\r\n // We will use it to calc the relative position of image\r\n let stageData = {\r\n w: $stage.width(),\r\n h: $stage.height(),\r\n x: $stage.offset().left,\r\n y: $stage.offset().top\r\n };\r\n\r\n let newWidth = this.imageData.originalWidth * ratio,\r\n newHeight = this.imageData.originalHeight * ratio,\r\n // Think about it for a while\r\n newLeft = origin.x - (origin.x - imgData.x) / imgData.w * newWidth,\r\n newTop = origin.y - (origin.y - imgData.y) / imgData.h * newHeight;\r\n\r\n // δ is the difference between image new width and new height\r\n let δ = !this.isRotated ? 0 : (newWidth - newHeight) / 2,\r\n imgNewWidth = !this.isRotated ? newWidth : newHeight,\r\n imgNewHeight = !this.isRotated ? newHeight : newWidth;\r\n\r\n let offsetX = stageData.w - newWidth,\r\n offsetY = stageData.h - newHeight;\r\n\r\n // zoom out & zoom in condition\r\n // It's important and it takes me a lot of time to get it\r\n // The conditions with image rotate 90 degree drive me crazy alomst!\r\n if (imgNewHeight <= stageData.h) {\r\n newTop = (stageData.h - newHeight) / 2;\r\n } else {\r\n newTop = newTop > δ\r\n ? δ\r\n : (newTop > (offsetY - δ)\r\n ? newTop\r\n : (offsetY - δ));\r\n }\r\n\r\n if (imgNewWidth <= stageData.w) {\r\n newLeft = (stageData.w - newWidth) / 2;\r\n } else {\r\n newLeft = newLeft > -δ\r\n ? -δ\r\n : (newLeft > (offsetX + δ)\r\n ? newLeft\r\n : (offsetX + δ));\r\n }\r\n\r\n // if the image scale get to the critical point\r\n if (Math.abs(this.imageData.initWidth - newWidth) < this.imageData.initWidth * 0.05) {\r\n this.setImageSize(this.img);\r\n } else {\r\n $image.css({\r\n width: Math.round(newWidth) + 'px',\r\n height: Math.round(newHeight) + 'px',\r\n left: Math.round(newLeft) + 'px',\r\n top: Math.round(newTop) + 'px'\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: Math.round(imgNewWidth),\r\n h: Math.round(imgNewHeight)\r\n },\r\n {\r\n w: stageData.w,\r\n h: stageData.h\r\n },\r\n this.$stage\r\n );\r\n }\r\n\r\n\r\n // Update image initial data\r\n $.extend(this.imageData, {\r\n width: newWidth,\r\n height: newHeight,\r\n left: newLeft,\r\n top: newTop\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n rotate(angle) {\r\n\r\n this.rotateAngle = this.rotateAngle + angle;\r\n\r\n if ((this.rotateAngle / 90) % 2 === 0) {\r\n this.isRotated = false;\r\n } else {\r\n this.isRotated = true;\r\n }\r\n\r\n this.rotateTo(this.rotateAngle);\r\n\r\n }\r\n\r\n rotateTo(angle) {\r\n\r\n let self = this;\r\n\r\n this.$image.css({\r\n transform: 'rotate(' + angle + 'deg)'\r\n });\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n // Remove grab cursor when rotate\r\n this.$stage.removeClass('is-grab');\r\n\r\n }\r\n\r\n resize() {\r\n\r\n let self = this;\r\n\r\n let resizeHandler = throttle(function () {\r\n\r\n if (self.isOpened) {\r\n if (self.isMaximized) {\r\n self.setImageSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n } else {\r\n self.setModalSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n }\r\n }\r\n\r\n }, 500);\r\n\r\n return resizeHandler;\r\n\r\n }\r\n\r\n maximize() {\r\n\r\n let self = this;\r\n\r\n if (!this.isMaximized) {\r\n // Store modal data before maximize\r\n this.modalData = {\r\n width: this.$photoviewer.width(),\r\n height: this.$photoviewer.height(),\r\n left: this.$photoviewer.offset().left,\r\n top: this.$photoviewer.offset().top\r\n };\r\n\r\n this.$photoviewer.addClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n this.$photoviewer.removeClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: this.modalData.width\r\n ? this.modalData.width\r\n : this.options.modalWidth,\r\n height: this.modalData.height\r\n ? this.modalData.height\r\n : this.options.modalHeight,\r\n left: this.modalData.left\r\n ? this.modalData.left\r\n : ($W.width() - this.options.modalWidth) / 2 + $D.scrollLeft(),\r\n top: this.modalData.top\r\n ? this.modalData.top\r\n : ($W.height() - this.options.modalHeight) / 2 + $D.scrollTop()\r\n });\r\n\r\n this.isMaximized = false;\r\n }\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n }\r\n\r\n fullscreen() {\r\n\r\n requestFullscreen(this.$photoviewer[0]);\r\n\r\n }\r\n\r\n keydown(e) {\r\n\r\n let self = this;\r\n\r\n if (!this.options.keyboard) {\r\n return false;\r\n }\r\n\r\n let keyCode = e.keyCode || e.which || e.charCode,\r\n ctrlKey = e.ctrlKey || e.metaKey,\r\n altKey = e.altKey || e.metaKey;\r\n\r\n switch (keyCode) {\r\n // ←\r\n case 37:\r\n self.jump(-1);\r\n break;\r\n // →\r\n case 39:\r\n self.jump(1);\r\n break;\r\n // +\r\n case 187:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // -\r\n case 189:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // + Firefox\r\n case 61:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // - Firefox\r\n case 173:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // ctrl + alt + 0\r\n case 48:\r\n if (ctrlKey && altKey) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n }\r\n break;\r\n // ctrl + ,\r\n case 188:\r\n if (ctrlKey) {\r\n self.rotate(-90);\r\n }\r\n break;\r\n // ctrl + .\r\n case 190:\r\n if (ctrlKey) {\r\n self.rotate(90);\r\n }\r\n break;\r\n default:\r\n }\r\n\r\n }\r\n\r\n addEvents() {\r\n\r\n let self = this;\r\n\r\n this.$close.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.close();\r\n });\r\n\r\n this.$stage.off(WHEEL_EVENT + EVENT_NS).on(WHEEL_EVENT + EVENT_NS, function (e) {\r\n self.wheel(e);\r\n });\r\n\r\n this.$zoomIn.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$zoomOut.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$actualSize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$prev.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(-1);\r\n });\r\n\r\n this.$fullscreen.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.fullscreen();\r\n });\r\n\r\n this.$next.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(1);\r\n });\r\n\r\n this.$rotateLeft.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(-90);\r\n });\r\n\r\n this.$rotateRight.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(90);\r\n });\r\n\r\n this.$maximize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.maximize();\r\n });\r\n\r\n $D.off(KEYDOWN_EVENT + EVENT_NS).on(KEYDOWN_EVENT + EVENT_NS, function (e) {\r\n self.keydown(e);\r\n });\r\n\r\n $W.on(RESIZE_EVENT + EVENT_NS, self.resize());\r\n\r\n }\r\n\r\n _triggerHook(e, data) {\r\n if (this.options.callbacks[e]) {\r\n this.options.callbacks[e].apply(this, $.isArray(data) ? data : [data]);\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n/**\r\n * Add methods to PhotoViewer\r\n */\r\n$.extend(PhotoViewer.prototype, draggable, movable, resizable);\r\n\r\n/**\r\n * Add PhotoViewer to globle\r\n */\r\nwindow.PhotoViewer = PhotoViewer;\r\n\r\n/**\r\n * jQuery plugin\r\n */\r\n\r\nlet jqEl = null,\r\n getImgGroup = function (list, groupName) {\r\n\r\n let items = [];\r\n\r\n $(list).each(function () {\r\n\r\n let src = getImgSrc(this);\r\n\r\n items.push({\r\n src: src,\r\n title: $(this).attr('data-title'),\r\n groupName: groupName\r\n });\r\n\r\n });\r\n\r\n return items;\r\n\r\n }\r\n\r\n$.fn.photoviewer = function (options) {\r\n\r\n jqEl = $(this);\r\n\r\n options = options ? options : {};\r\n\r\n // Convert a numeric string into a number\r\n for (let key in options) {\r\n if (typeof (options[key]) === 'string' && !isNaN(options[key])) {\r\n options[key] = parseFloat(options[key])\r\n }\r\n }\r\n\r\n // Get init event, 'click' or 'dblclick'\r\n let opts = $.extend(true, {}, DEFAULTS, options);\r\n\r\n // We should get zIndex of options before plugin's init.\r\n PUBLIC_VARS['zIndex'] = opts.zIndex;\r\n\r\n if (typeof options === 'string') {\r\n\r\n // $(this).data('photoviewer')[options]();\r\n\r\n } else {\r\n\r\n jqEl.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n\r\n e.preventDefault();\r\n // This will stop triggering data-api event\r\n e.stopPropagation();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n options['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n options['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, options, this));\r\n\r\n });\r\n\r\n }\r\n\r\n return jqEl;\r\n\r\n};\r\n\r\n/**\r\n * PhotoViewer DATA-API\r\n */\r\n$D.on(CLICK_EVENT + EVENT_NS, '[data-' + NS + ']', function (e) {\r\n\r\n jqEl = $('[data-' + NS + ']');\r\n\r\n e.preventDefault();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n DEFAULTS['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n DEFAULTS['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, DEFAULTS, this));\r\n\r\n});\r\n\r\nexport default PhotoViewer;\r\n"],"names":["$","noop","getImgSrc","el","src","attr","throttle","fn","delay","timer","context","args","arguments","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","defaults","zIndex","modal","dragHandle","dragCancel","self","isDragging","startX","startY","left","top","dragStart","e","event","options","multiInstances","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","imgWidth","imgHeight","direction","getModalOpts","dir","offsetX","offsetY","modalLeft","l","modalTop","t","opts","Math","max","getImageOpts","widthDiff2","heightDiff2","imgLeft","imgTop","imgLeft2","imgTop2","modalOpts","imageOpts","isDoResize","scale","getImageScaleToStage","each","handle","PhotoViewer","items","DEFAULTS","isArray","footToolbar","headToolbar","$el","isOpened","rotateAngle","init","groupData","groupIndex","imgSrc","open","loadImg","draggable","$photoviewer","movable","$stage","$image","resizable","modalWidth","modalHeight","_creatBtns","toolbar","btns","btnsStr","index","item","_creatTitle","title","_creatDOM","btnsTpl","i18n","minimize","icons","maximize","close","zoomIn","zoomOut","prev","next","fullscreen","actualSize","rotateLeft","rotateRight","photoviewerHTML","build","$header","find","$headToolbar","$footer","$footToolbar","$title","$close","$maximize","$minimize","$zoomIn","$zoomOut","$actualSize","$fullscreen","$rotateLeft","$rotateRight","$prev","$next","eq","remove","fixedContent","_triggerHook","addEvents","setModalPos","zeroModal","winWidth","winHeight","scrollLeft","scrollTop","initMaximized","setModalSize","stageCSS","right","borderLeft","borderRight","bottom","borderTop","borderBottom","gapThreshold","min","fixedModalSize","round","modalCSSObj","initAnimation","animate","setImageSize","ceil","fadeIn","loaderHTML","hide","fixedModalPos","setImgTitle","html","jump","jumpTo","wheel","delta","deltaY","wheelDelta","detail","ratio","ratioThreshold","pointer","zoom","origin","originalWidth","maxRatio","minRatio","zoomTo","imgData","newWidth","newHeight","originalHeight","x","y","imgNewWidth","imgNewHeight","abs","initWidth","rotate","angle","rotateTo","resize","resizeHandler","keydown","keyboard","keyCode","which","charCode","ctrlKey","metaKey","altKey","data","callbacks","prototype","jqEl","getImgGroup","list","groupName","push","photoviewer","key","isNaN","stopPropagation","currentGroupName","groupList","undefined","not"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"photoviewer.esm.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}\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 self = this;\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 = function (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 (self.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 = function (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'] && !self.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 = function () {\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 self = this;\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 = function (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 δ = !self.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 = !self.isRotated\r\n ? (imageWidth - stageWidth)\r\n : (imageHeight - stageWidth);\r\n heightDiff = !self.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 = function (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(self.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 = function () {\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 self = this;\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 = function (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 δ = !self.isRotated\r\n ? 0\r\n : (imageData.w - imageData.h) / 2;\r\n imgWidth = !self.isRotated\r\n ? imageData.w\r\n : imageData.h;\r\n imgHeight = !self.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 = function (e) {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging && !self.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 self.isDoResize = true;\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = function () {\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 = self.getImageScaleToStage(\r\n $(stage).width(),\r\n $(stage).height()\r\n );\r\n\r\n $.extend(self.imageData, {\r\n initWidth: self.img.width * scale,\r\n initHeight: self.img.height * scale,\r\n initLeft: ($(stage).width() - self.img.width * scale) / 2,\r\n initTop: ($(stage).height() - self.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';\r\n\r\nimport DEFAULTS from './defaults';\r\n\r\nimport {\r\n $W,\r\n $D,\r\n CLICK_EVENT,\r\n RESIZE_EVENT,\r\n KEYDOWN_EVENT,\r\n WHEEL_EVENT,\r\n NS,\r\n CLASS_NS,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nimport {\r\n getImgSrc,\r\n throttle,\r\n preloadImg,\r\n requestFullscreen,\r\n getImageNameFromUrl,\r\n getNumFromCSSValue,\r\n hasScrollbar,\r\n getScrollbarWidth,\r\n setGrabCursor\r\n} from './utilities';\r\n\r\nimport draggable from './draggable';\r\nimport movable from './movable';\r\nimport resizable from './resizable';\r\n\r\n/**\r\n * PhotoViewer Class\r\n */\r\nclass PhotoViewer {\r\n\r\n constructor(items, options, el) {\r\n\r\n let self = this;\r\n\r\n this.options = $.extend(true, {}, DEFAULTS, options);\r\n\r\n if (options && $.isArray(options.footToolbar)) {\r\n this.options.footToolbar = options.footToolbar;\r\n }\r\n\r\n if (options && $.isArray(options.headToolbar)) {\r\n this.options.headToolbar = options.headToolbar;\r\n }\r\n\r\n // Store element of clicked\r\n this.$el = $(el);\r\n\r\n // As we have multiple instances,\r\n // so every instance has following variables.\r\n\r\n // modal open flag\r\n this.isOpened = false;\r\n // modal maximize flag\r\n this.isMaximized = false;\r\n // image rotate 90*(2n+1) flag\r\n this.isRotated = false;\r\n // image rotate angle\r\n this.rotateAngle = 0;\r\n\r\n // if modal do resize\r\n this.isDoResize = false;\r\n\r\n // Store image data in every instance\r\n this.imageData = {};\r\n // Store modal data in every instance\r\n this.modalData = {\r\n width: null,\r\n height: null,\r\n left: null,\r\n top: null\r\n };\r\n\r\n this.init(items, self.options, el);\r\n\r\n }\r\n\r\n init(items, opts, el) {\r\n\r\n this.groupData = items;\r\n this.groupIndex = opts['index'];\r\n\r\n // Get image src\r\n let imgSrc = items[this.groupIndex]['src'];\r\n\r\n this.open();\r\n\r\n this.loadImg(imgSrc);\r\n\r\n // draggable & movable & resizable\r\n if (opts.draggable) {\r\n this.draggable(this.$photoviewer, this.dragHandle, CLASS_NS + '-button');\r\n }\r\n if (opts.movable) {\r\n this.movable(this.$stage, this.$image);\r\n }\r\n if (opts.resizable) {\r\n this.resizable(\r\n this.$photoviewer,\r\n this.$stage,\r\n this.$image,\r\n opts.modalWidth,\r\n opts.modalHeight\r\n );\r\n }\r\n\r\n }\r\n\r\n _creatBtns(toolbar, btns) {\r\n\r\n let btnsStr = '';\r\n\r\n $.each(toolbar, function (index, item) {\r\n btnsStr += btns[item];\r\n });\r\n\r\n return btnsStr;\r\n\r\n }\r\n\r\n _creatTitle() {\r\n return (this.options.title ? `
` : '');\r\n }\r\n\r\n _creatDOM() {\r\n\r\n let btnsTpl = {\r\n minimize: ``,\r\n maximize: ``,\r\n close: ``,\r\n zoomIn: ``,\r\n zoomOut: ``,\r\n prev: ``,\r\n next: ``,\r\n fullscreen: ``,\r\n actualSize: ``,\r\n rotateLeft: ``,\r\n rotateRight: ``\r\n };\r\n\r\n // photoviewer base HTML\r\n let photoviewerHTML =\r\n `
\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.headToolbar, btnsTpl)}\r\n
\r\n ${this._creatTitle()}\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.footToolbar, btnsTpl)}\r\n
\r\n
\r\n
\r\n
`;\r\n\r\n return photoviewerHTML;\r\n\r\n }\r\n\r\n build() {\r\n\r\n // Create photoviewer HTML string\r\n let photoviewerHTML = this._creatDOM();\r\n\r\n // Make photoviewer HTML string to jQuery element\r\n let $photoviewer = $(photoviewerHTML);\r\n\r\n // Get all photoviewer element\r\n this.$photoviewer = $photoviewer;\r\n this.$header = $photoviewer.find(CLASS_NS + '-header');\r\n this.$headToolbar = $photoviewer.find(CLASS_NS + '-toolbar-head');\r\n this.$footer = $photoviewer.find(CLASS_NS + '-footer');\r\n this.$footToolbar = $photoviewer.find(CLASS_NS + '-toolbar-foot');\r\n this.$stage = $photoviewer.find(CLASS_NS + '-stage');\r\n this.$title = $photoviewer.find(CLASS_NS + '-title');\r\n this.$image = $photoviewer.find(CLASS_NS + '-image');\r\n this.$close = $photoviewer.find(CLASS_NS + '-button-close');\r\n this.$maximize = $photoviewer.find(CLASS_NS + '-button-maximize');\r\n this.$minimize = $photoviewer.find(CLASS_NS + '-button-minimize');\r\n this.$zoomIn = $photoviewer.find(CLASS_NS + '-button-zoom-in');\r\n this.$zoomOut = $photoviewer.find(CLASS_NS + '-button-zoom-out');\r\n this.$actualSize = $photoviewer.find(CLASS_NS + '-button-actual-size');\r\n this.$fullscreen = $photoviewer.find(CLASS_NS + '-button-fullscreen');\r\n this.$rotateLeft = $photoviewer.find(CLASS_NS + '-button-rotate-left');\r\n this.$rotateRight = $photoviewer.find(CLASS_NS + '-button-rotate-right');\r\n this.$prev = $photoviewer.find(CLASS_NS + '-button-prev');\r\n this.$next = $photoviewer.find(CLASS_NS + '-button-next');\r\n\r\n // Add class before image loaded\r\n this.$stage.addClass('stage-ready');\r\n this.$image.addClass('image-ready');\r\n\r\n // Reset modal z-index with multiple instances\r\n this.$photoviewer.css('z-index', PUBLIC_VARS['zIndex']);\r\n\r\n // Set handle element of draggable\r\n if (!this.options.dragHandle || this.options.dragHandle === CLASS_NS + '-modal') {\r\n this.dragHandle = this.$photoviewer;\r\n } else {\r\n this.dragHandle = this.$photoviewer.find(this.options.dragHandle);\r\n }\r\n\r\n }\r\n\r\n open() {\r\n\r\n if (!this.options.multiInstances) {\r\n $(CLASS_NS + '-modal').eq(0).remove();\r\n }\r\n\r\n // Fixed modal position bug\r\n if (!$(CLASS_NS + '-modal').length && this.options.fixedContent) {\r\n\r\n $('html').css({ 'overflow': 'hidden' });\r\n\r\n if (hasScrollbar()) {\r\n let scrollbarWidth = getScrollbarWidth();\r\n if (scrollbarWidth) {\r\n $('html').css({ 'padding-right': scrollbarWidth });\r\n }\r\n }\r\n\r\n }\r\n\r\n this.build();\r\n\r\n this._triggerHook('beforeOpen', this.$el);\r\n\r\n // Add PhotoViewer to DOM\r\n $('body').append(this.$photoviewer);\r\n\r\n this.addEvents();\r\n\r\n this.setModalPos(this.$photoviewer);\r\n\r\n this._triggerHook('opened', this.$el);\r\n\r\n }\r\n\r\n close() {\r\n\r\n this._triggerHook('beforeClose', this.$el);\r\n\r\n // Remove instance\r\n this.$photoviewer.remove();\r\n\r\n this.isOpened = false;\r\n this.isMaximized = false;\r\n this.isRotated = false;\r\n this.rotateAngle = 0;\r\n\r\n let zeroModal = !$(CLASS_NS + '-modal').length;\r\n\r\n // Fixed modal position bug\r\n if (zeroModal && this.options.fixedContent) {\r\n $('html').css({ 'overflow': '', 'padding-right': '' });\r\n }\r\n\r\n // Reset zIndex after close\r\n if (zeroModal && this.options.multiInstances) {\r\n PUBLIC_VARS['zIndex'] = this.options.zIndex;\r\n }\r\n\r\n // off events\r\n if (!$(CLASS_NS + '-modal').length) {\r\n $D.off(KEYDOWN_EVENT + EVENT_NS);\r\n $W.off(RESIZE_EVENT + EVENT_NS);\r\n }\r\n\r\n this._triggerHook('closed', this.$el);\r\n\r\n }\r\n\r\n setModalPos(modal) {\r\n\r\n let winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n let modalWidth = this.options.modalWidth,\r\n modalHeight = this.options.modalHeight;\r\n\r\n // Set modal maximized when init\r\n if (this.options.initMaximized) {\r\n\r\n modal.addClass(NS + '-maximize');\r\n\r\n modal.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isOpened = true;\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n // Make the modal in windows center\r\n modal.css({\r\n width: modalWidth,\r\n height: modalHeight,\r\n left: (winWidth - modalWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - modalHeight) / 2 + scrollTop + 'px'\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n setModalSize(img) {\r\n\r\n let self = this,\r\n winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n // stage css value\r\n let stageCSS = {\r\n left: this.$stage.css('left'),\r\n right: this.$stage.css('right'),\r\n top: this.$stage.css('top'),\r\n bottom: this.$stage.css('bottom'),\r\n borderLeft: this.$stage.css('border-left-width'),\r\n borderRight: this.$stage.css('border-right-width'),\r\n borderTop: this.$stage.css('border-top-width'),\r\n borderBottom: this.$stage.css('border-bottom-width')\r\n };\r\n\r\n // Modal size should calc with stage css value\r\n let modalWidth = img.width +\r\n getNumFromCSSValue(stageCSS.left) +\r\n getNumFromCSSValue(stageCSS.right) +\r\n getNumFromCSSValue(stageCSS.borderLeft) +\r\n getNumFromCSSValue(stageCSS.borderRight),\r\n modalHeight = img.height +\r\n getNumFromCSSValue(stageCSS.top) +\r\n getNumFromCSSValue(stageCSS.bottom) +\r\n getNumFromCSSValue(stageCSS.borderTop) +\r\n getNumFromCSSValue(stageCSS.borderBottom);\r\n\r\n let gapThreshold = (this.options.gapThreshold > 0 ? this.options.gapThreshold : 0) + 1,\r\n // modal scale to window\r\n scale = Math.min(\r\n winWidth / (modalWidth * gapThreshold),\r\n winHeight / (modalHeight * gapThreshold),\r\n 1\r\n );\r\n\r\n let minWidth = Math.max(modalWidth * scale, this.options.modalWidth),\r\n minHeight = Math.max(modalHeight * scale, this.options.modalHeight);\r\n\r\n minWidth = this.options.fixedModalSize\r\n ? this.options.modalWidth\r\n : Math.round(minWidth);\r\n minHeight = this.options.fixedModalSize\r\n ? this.options.modalHeight\r\n : Math.round(minHeight);\r\n\r\n let modalCSSObj = {\r\n width: minWidth + 'px',\r\n height: minHeight + 'px',\r\n left: (winWidth - minWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - minHeight) / 2 + scrollTop + 'px'\r\n };\r\n\r\n // Add modal init animation\r\n if (this.options.initAnimation) {\r\n this.$photoviewer.animate(modalCSSObj, function () {\r\n self.setImageSize(img);\r\n });\r\n } else {\r\n this.$photoviewer.css(modalCSSObj);\r\n this.setImageSize(img);\r\n }\r\n\r\n this.isOpened = true;\r\n\r\n }\r\n\r\n getImageScaleToStage(stageWidth, stageHeight) {\r\n\r\n var scale = 1;\r\n\r\n if (!this.isRotated) {\r\n scale = Math.min(stageWidth / this.img.width, stageHeight / this.img.height, 1);\r\n } else {\r\n scale = Math.min(stageWidth / this.img.height, stageHeight / this.img.width, 1);\r\n }\r\n\r\n return scale;\r\n }\r\n\r\n setImageSize(img) {\r\n\r\n let stageData = {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n };\r\n\r\n let scale = this.getImageScaleToStage(\r\n stageData.w,\r\n stageData.h\r\n );\r\n\r\n this.$image.css({\r\n width: Math.ceil(img.width * scale) + 'px',\r\n height: Math.ceil(img.height * scale) + 'px',\r\n left: (stageData.w - Math.ceil(img.width * scale)) / 2 + 'px',\r\n top: (stageData.h - Math.ceil(img.height * scale)) / 2 + 'px'\r\n });\r\n\r\n // Store image initial data\r\n $.extend(this.imageData, {\r\n initWidth: img.width * scale,\r\n initHeight: img.height * scale,\r\n initLeft: (stageData.w - img.width * scale) / 2,\r\n initTop: (stageData.h - img.height * scale) / 2,\r\n width: img.width * scale,\r\n height: img.height * scale,\r\n left: (stageData.w - img.width * scale) / 2,\r\n top: (stageData.h - img.height * scale) / 2\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: this.$image.width(),\r\n h: this.$image.height()\r\n },\r\n {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n },\r\n this.$stage,\r\n this.isRotated\r\n );\r\n\r\n // loader end\r\n this.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n\r\n // Add image init animation\r\n if (this.options.initAnimation) {\r\n this.$image.fadeIn();\r\n }\r\n\r\n }\r\n\r\n loadImg(imgSrc) {\r\n\r\n let self = this;\r\n\r\n let loaderHTML = `
`;\r\n\r\n // loader start\r\n this.$photoviewer.append(loaderHTML);\r\n\r\n if (this.options.initAnimation) {\r\n this.$image.hide();\r\n }\r\n\r\n this.$image.attr('src', imgSrc);\r\n\r\n preloadImg(imgSrc, function (img) {\r\n // Store HTMLImageElement\r\n self.img = img;\r\n\r\n // Store original data\r\n self.imageData = {\r\n originalWidth: img.width,\r\n originalHeight: img.height\r\n };\r\n\r\n if (self.isMaximized || (self.isOpened && self.options.fixedModalPos)) {\r\n self.setImageSize(img);\r\n } else {\r\n self.setModalSize(img);\r\n }\r\n\r\n self.$stage.removeClass('stage-ready');\r\n self.$image.removeClass('image-ready');\r\n\r\n }, function () {\r\n // loader end\r\n self.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n });\r\n\r\n if (this.options.title) {\r\n this.setImgTitle(imgSrc);\r\n }\r\n\r\n }\r\n\r\n setImgTitle(url) {\r\n\r\n let title = this.groupData[this.groupIndex].title\r\n ? this.groupData[this.groupIndex].title\r\n : getImageNameFromUrl(url);\r\n\r\n this.$title.html(title);\r\n\r\n }\r\n\r\n jump(index) {\r\n\r\n this.groupIndex = this.groupIndex + index;\r\n\r\n this.jumpTo(this.groupIndex);\r\n\r\n }\r\n\r\n jumpTo(index) {\r\n\r\n index = index % this.groupData.length;\r\n\r\n if (index >= 0) {\r\n index = index % this.groupData.length;\r\n } else if (index < 0) {\r\n index = (this.groupData.length + index) % this.groupData.length;\r\n }\r\n\r\n this.groupIndex = index;\r\n\r\n this._triggerHook('beforeChange', index);\r\n\r\n this.loadImg(this.groupData[index].src);\r\n\r\n this._triggerHook('changed', index);\r\n\r\n }\r\n\r\n wheel(e) {\r\n\r\n e.preventDefault();\r\n\r\n let delta = 1;\r\n\r\n if (e.originalEvent.deltaY) {\r\n delta = e.originalEvent.deltaY > 0 ? 1 : -1;\r\n } else if (e.originalEvent.wheelDelta) {\r\n delta = -e.originalEvent.wheelDelta / 120;\r\n } else if (e.originalEvent.detail) {\r\n delta = e.originalEvent.detail > 0 ? 1 : -1;\r\n }\r\n\r\n // ratio threshold\r\n let ratio = -delta * this.options.ratioThreshold;\r\n\r\n // mouse point position relative to stage\r\n let pointer = {\r\n x: e.originalEvent.clientX - this.$stage.offset().left + $D.scrollLeft(),\r\n y: e.originalEvent.clientY - this.$stage.offset().top + $D.scrollTop()\r\n };\r\n\r\n this.zoom(ratio, pointer, e);\r\n\r\n }\r\n\r\n zoom(ratio, origin, e) {\r\n\r\n // zoom out ratio & zoom in ratio\r\n ratio = ratio < 0 ? (1 / (1 - ratio)) : (1 + ratio);\r\n\r\n // image ratio\r\n ratio = this.$image.width() / this.imageData.originalWidth * ratio;\r\n\r\n // Fixed digital error\r\n // if (ratio > 0.95 && ratio < 1.05) {\r\n // ratio = 1;\r\n // }\r\n\r\n if (ratio > this.options.maxRatio || ratio < this.options.minRatio) {\r\n return;\r\n }\r\n\r\n this.zoomTo(ratio, origin, e);\r\n\r\n }\r\n\r\n zoomTo(ratio, origin, e) {\r\n\r\n let $image = this.$image,\r\n $stage = this.$stage,\r\n imgData = {\r\n w: this.imageData.width,\r\n h: this.imageData.height,\r\n x: this.imageData.left,\r\n y: this.imageData.top\r\n };\r\n\r\n // image stage position\r\n // We will use it to calc the relative position of image\r\n let stageData = {\r\n w: $stage.width(),\r\n h: $stage.height(),\r\n x: $stage.offset().left,\r\n y: $stage.offset().top\r\n };\r\n\r\n let newWidth = this.imageData.originalWidth * ratio,\r\n newHeight = this.imageData.originalHeight * ratio,\r\n // Think about it for a while\r\n newLeft = origin.x - (origin.x - imgData.x) / imgData.w * newWidth,\r\n newTop = origin.y - (origin.y - imgData.y) / imgData.h * newHeight;\r\n\r\n // δ is the difference between image new width and new height\r\n let δ = !this.isRotated ? 0 : (newWidth - newHeight) / 2,\r\n imgNewWidth = !this.isRotated ? newWidth : newHeight,\r\n imgNewHeight = !this.isRotated ? newHeight : newWidth;\r\n\r\n let offsetX = stageData.w - newWidth,\r\n offsetY = stageData.h - newHeight;\r\n\r\n // zoom out & zoom in condition\r\n // It's important and it takes me a lot of time to get it\r\n // The conditions with image rotate 90 degree drive me crazy alomst!\r\n if (imgNewHeight <= stageData.h) {\r\n newTop = (stageData.h - newHeight) / 2;\r\n } else {\r\n newTop = newTop > δ\r\n ? δ\r\n : (newTop > (offsetY - δ)\r\n ? newTop\r\n : (offsetY - δ));\r\n }\r\n\r\n if (imgNewWidth <= stageData.w) {\r\n newLeft = (stageData.w - newWidth) / 2;\r\n } else {\r\n newLeft = newLeft > -δ\r\n ? -δ\r\n : (newLeft > (offsetX + δ)\r\n ? newLeft\r\n : (offsetX + δ));\r\n }\r\n\r\n // if the image scale get to the critical point\r\n if (Math.abs(this.imageData.initWidth - newWidth) < this.imageData.initWidth * 0.05) {\r\n this.setImageSize(this.img);\r\n } else {\r\n $image.css({\r\n width: Math.round(newWidth) + 'px',\r\n height: Math.round(newHeight) + 'px',\r\n left: Math.round(newLeft) + 'px',\r\n top: Math.round(newTop) + 'px'\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: Math.round(imgNewWidth),\r\n h: Math.round(imgNewHeight)\r\n },\r\n {\r\n w: stageData.w,\r\n h: stageData.h\r\n },\r\n this.$stage\r\n );\r\n }\r\n\r\n\r\n // Update image initial data\r\n $.extend(this.imageData, {\r\n width: newWidth,\r\n height: newHeight,\r\n left: newLeft,\r\n top: newTop\r\n });\r\n\r\n }\r\n\r\n rotate(angle) {\r\n\r\n this.rotateAngle = this.rotateAngle + angle;\r\n\r\n if ((this.rotateAngle / 90) % 2 === 0) {\r\n this.isRotated = false;\r\n } else {\r\n this.isRotated = true;\r\n }\r\n\r\n this.rotateTo(this.rotateAngle);\r\n\r\n }\r\n\r\n rotateTo(angle) {\r\n\r\n let self = this;\r\n\r\n this.$image.css({\r\n transform: 'rotate(' + angle + 'deg)'\r\n });\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n // Remove grab cursor when rotate\r\n this.$stage.removeClass('is-grab');\r\n\r\n }\r\n\r\n resize() {\r\n\r\n let self = this;\r\n\r\n let resizeHandler = throttle(function () {\r\n\r\n if (self.isOpened) {\r\n if (self.isMaximized) {\r\n self.setImageSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n } else {\r\n self.setModalSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n }\r\n }\r\n\r\n }, 500);\r\n\r\n return resizeHandler;\r\n\r\n }\r\n\r\n maximize() {\r\n\r\n let self = this;\r\n\r\n if (!this.isMaximized) {\r\n // Store modal data before maximize\r\n this.modalData = {\r\n width: this.$photoviewer.width(),\r\n height: this.$photoviewer.height(),\r\n left: this.$photoviewer.offset().left,\r\n top: this.$photoviewer.offset().top\r\n };\r\n\r\n this.$photoviewer.addClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n this.$photoviewer.removeClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: this.modalData.width\r\n ? this.modalData.width\r\n : this.options.modalWidth,\r\n height: this.modalData.height\r\n ? this.modalData.height\r\n : this.options.modalHeight,\r\n left: this.modalData.left\r\n ? this.modalData.left\r\n : ($W.width() - this.options.modalWidth) / 2 + $D.scrollLeft(),\r\n top: this.modalData.top\r\n ? this.modalData.top\r\n : ($W.height() - this.options.modalHeight) / 2 + $D.scrollTop()\r\n });\r\n\r\n this.isMaximized = false;\r\n }\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n }\r\n\r\n fullscreen() {\r\n\r\n requestFullscreen(this.$photoviewer[0]);\r\n\r\n }\r\n\r\n keydown(e) {\r\n\r\n let self = this;\r\n\r\n if (!this.options.keyboard) {\r\n return false;\r\n }\r\n\r\n let keyCode = e.keyCode || e.which || e.charCode,\r\n ctrlKey = e.ctrlKey || e.metaKey,\r\n altKey = e.altKey || e.metaKey;\r\n\r\n switch (keyCode) {\r\n // ←\r\n case 37:\r\n self.jump(-1);\r\n break;\r\n // →\r\n case 39:\r\n self.jump(1);\r\n break;\r\n // +\r\n case 187:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // -\r\n case 189:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // + Firefox\r\n case 61:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // - Firefox\r\n case 173:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // ctrl + alt + 0\r\n case 48:\r\n if (ctrlKey && altKey) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n }\r\n break;\r\n // ctrl + ,\r\n case 188:\r\n if (ctrlKey) {\r\n self.rotate(-90);\r\n }\r\n break;\r\n // ctrl + .\r\n case 190:\r\n if (ctrlKey) {\r\n self.rotate(90);\r\n }\r\n break;\r\n default:\r\n }\r\n\r\n }\r\n\r\n addEvents() {\r\n\r\n let self = this;\r\n\r\n this.$close.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.close();\r\n });\r\n\r\n this.$stage.off(WHEEL_EVENT + EVENT_NS).on(WHEEL_EVENT + EVENT_NS, function (e) {\r\n self.wheel(e);\r\n });\r\n\r\n this.$zoomIn.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$zoomOut.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$actualSize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$prev.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(-1);\r\n });\r\n\r\n this.$fullscreen.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.fullscreen();\r\n });\r\n\r\n this.$next.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(1);\r\n });\r\n\r\n this.$rotateLeft.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(-90);\r\n });\r\n\r\n this.$rotateRight.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(90);\r\n });\r\n\r\n this.$maximize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.maximize();\r\n });\r\n\r\n $D.off(KEYDOWN_EVENT + EVENT_NS).on(KEYDOWN_EVENT + EVENT_NS, function (e) {\r\n self.keydown(e);\r\n });\r\n\r\n $W.on(RESIZE_EVENT + EVENT_NS, self.resize());\r\n\r\n }\r\n\r\n _triggerHook(e, data) {\r\n if (this.options.callbacks[e]) {\r\n this.options.callbacks[e].apply(this, $.isArray(data) ? data : [data]);\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n/**\r\n * Add methods to PhotoViewer\r\n */\r\n$.extend(PhotoViewer.prototype, draggable, movable, resizable);\r\n\r\n/**\r\n * Add PhotoViewer to globle\r\n */\r\nwindow.PhotoViewer = PhotoViewer;\r\n\r\n/**\r\n * jQuery plugin\r\n */\r\n\r\nlet jqEl = null,\r\n getImgGroup = function (list, groupName) {\r\n\r\n let items = [];\r\n\r\n $(list).each(function () {\r\n\r\n let src = getImgSrc(this);\r\n\r\n items.push({\r\n src: src,\r\n title: $(this).attr('data-title'),\r\n groupName: groupName\r\n });\r\n\r\n });\r\n\r\n return items;\r\n\r\n }\r\n\r\n$.fn.photoviewer = function (options) {\r\n\r\n jqEl = $(this);\r\n\r\n options = options ? options : {};\r\n\r\n // Convert a numeric string into a number\r\n for (let key in options) {\r\n if (typeof (options[key]) === 'string' && !isNaN(options[key])) {\r\n options[key] = parseFloat(options[key])\r\n }\r\n }\r\n\r\n // Get init event, 'click' or 'dblclick'\r\n let opts = $.extend(true, {}, DEFAULTS, options);\r\n\r\n // We should get zIndex of options before plugin's init.\r\n PUBLIC_VARS['zIndex'] = opts.zIndex;\r\n\r\n if (typeof options === 'string') {\r\n\r\n // $(this).data('photoviewer')[options]();\r\n\r\n } else {\r\n\r\n jqEl.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n\r\n e.preventDefault();\r\n // This will stop triggering data-api event\r\n e.stopPropagation();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n options['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n options['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, options, this));\r\n\r\n });\r\n\r\n }\r\n\r\n return jqEl;\r\n\r\n};\r\n\r\n/**\r\n * PhotoViewer DATA-API\r\n */\r\n$D.on(CLICK_EVENT + EVENT_NS, '[data-' + NS + ']', function (e) {\r\n\r\n jqEl = $('[data-' + NS + ']');\r\n\r\n e.preventDefault();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n DEFAULTS['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n DEFAULTS['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, DEFAULTS, this));\r\n\r\n});\r\n\r\nexport default PhotoViewer;\r\n"],"names":["$","noop","getImgSrc","el","src","attr","throttle","fn","delay","timer","context","args","arguments","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","defaults","zIndex","modal","dragHandle","dragCancel","self","isDragging","startX","startY","left","top","dragStart","e","event","options","multiInstances","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","imgWidth","imgHeight","direction","getModalOpts","dir","offsetX","offsetY","modalLeft","l","modalTop","t","opts","Math","max","getImageOpts","widthDiff2","heightDiff2","imgLeft","imgTop","imgLeft2","imgTop2","modalOpts","imageOpts","isDoResize","scale","getImageScaleToStage","each","handle","PhotoViewer","items","DEFAULTS","isArray","footToolbar","headToolbar","$el","isOpened","rotateAngle","init","groupData","groupIndex","imgSrc","open","loadImg","draggable","$photoviewer","movable","$stage","$image","resizable","modalWidth","modalHeight","_creatBtns","toolbar","btns","btnsStr","index","item","_creatTitle","title","_creatDOM","btnsTpl","i18n","minimize","icons","maximize","close","zoomIn","zoomOut","prev","next","fullscreen","actualSize","rotateLeft","rotateRight","photoviewerHTML","build","$header","find","$headToolbar","$footer","$footToolbar","$title","$close","$maximize","$minimize","$zoomIn","$zoomOut","$actualSize","$fullscreen","$rotateLeft","$rotateRight","$prev","$next","eq","remove","fixedContent","_triggerHook","addEvents","setModalPos","zeroModal","winWidth","winHeight","scrollLeft","scrollTop","initMaximized","setModalSize","stageCSS","right","borderLeft","borderRight","bottom","borderTop","borderBottom","gapThreshold","min","fixedModalSize","round","modalCSSObj","initAnimation","animate","setImageSize","ceil","fadeIn","loaderHTML","hide","fixedModalPos","setImgTitle","html","jump","jumpTo","wheel","delta","deltaY","wheelDelta","detail","ratio","ratioThreshold","pointer","zoom","origin","originalWidth","maxRatio","minRatio","zoomTo","imgData","newWidth","newHeight","originalHeight","x","y","imgNewWidth","imgNewHeight","abs","initWidth","rotate","angle","rotateTo","resize","resizeHandler","keydown","keyboard","keyCode","which","charCode","ctrlKey","metaKey","altKey","data","callbacks","prototype","jqEl","getImgGroup","list","groupName","push","photoviewer","key","isNaN","stopPropagation","currentGroupName","groupList","undefined","not"],"mappings":"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"} \ No newline at end of file diff --git a/dist/photoviewer.js b/dist/photoviewer.js index c95d759..c6cba42 100644 --- a/dist/photoviewer.js +++ b/dist/photoviewer.js @@ -7,7 +7,7 @@ * | | | | | | |_| | | | | |_| |\ / _| |_| |__| /\ | |__| |\ \ * |_| |_| |_|\___/ |_| \___/ \_/ |_____|____|_/ \_|____|_| \_\ * - * photoviewer - v2.1.2 + * photoviewer - v2.1.3 * A JS plugin to view images just like in Windows * https://github.com/nzbin/photoviewer#readme * diff --git a/dist/photoviewer.js.map b/dist/photoviewer.js.map index 7fb4cc3..5cf85ee 100644 --- a/dist/photoviewer.js.map +++ b/dist/photoviewer.js.map @@ -1 +1 @@ -{"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 {\n\n // Enable modal to drag\n draggable: true,\n\n // Enable modal to resize\n resizable: true,\n\n // Enable image to move\n movable: true,\n\n // Enable keyboard navigation\n keyboard: true,\n\n // Shows the title\n title: true,\n\n // Min width of modal\n modalWidth: 320,\n\n // Min height of modal\n modalHeight: 320,\n\n // Enable the page content fixed\n fixedContent: true,\n\n // Disable the modal size fixed\n fixedModalSize: false,\n\n // Disable the image viewer maximized on init\n initMaximized: false,\n\n // Threshold of modal to browser window\n gapThreshold: 0.02,\n\n // Threshold of image ratio\n ratioThreshold: 0.1,\n\n // Min ratio of image when zoom out\n minRatio: 0.05,\n\n // Max ratio of image when zoom in\n maxRatio: 16,\n\n // Toolbar options in header\n headToolbar: [\n 'maximize',\n 'close'\n ],\n\n // Toolbar options in footer\n footToolbar: [\n 'zoomIn',\n 'zoomOut',\n 'prev',\n 'fullscreen',\n 'next',\n 'actualSize',\n 'rotateRight'\n ],\n\n // Customize button icon\n icons: {\n minimize: `\n \n `,\n maximize: `\n \n `,\n close: `\n \n `,\n zoomIn: `\n \n `,\n zoomOut: `\n \n `,\n prev: `\n \n `,\n next: `\n \n `,\n fullscreen: `\n \n `,\n actualSize: `\n \n `,\n rotateLeft: `\n \n `,\n rotateRight: `\n \n `\n },\n\n // Customize language of button title\n i18n: {\n minimize: 'minimize',\n maximize: 'maximize',\n close: 'close',\n zoomIn: 'zoom-in(+)',\n zoomOut: 'zoom-out(-)',\n prev: 'prev(←)',\n next: 'next(→)',\n fullscreen: 'fullscreen',\n actualSize: 'actual-size(Ctrl+Alt+0)',\n rotateLeft: 'rotate-left(Ctrl+,)',\n rotateRight: 'rotate-right(Ctrl+.)'\n },\n\n // Enable multiple instances\n multiInstances: true,\n\n // Enable animation\n initAnimation: true,\n\n // Disable modal position fixed when change images\n fixedModalPos: false,\n\n // Modal z-index\n zIndex: 1090,\n\n // Selector of drag handler\n dragHandle: false,\n\n // Callback events\n callbacks: {\n beforeOpen: $.noop,\n opened: $.noop,\n beforeClose: $.noop,\n closed: $.noop,\n beforeChange: $.noop,\n changed: $.noop\n },\n\n // Start images index\n index: 0\n\n}\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 self = this;\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 = function (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 (self.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 = function (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'] && !self.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 = function () {\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 self = this;\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 = function (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 δ = !self.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 = !self.isRotated\r\n ? (imageWidth - stageWidth)\r\n : (imageHeight - stageWidth);\r\n heightDiff = !self.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 = function (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(self.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 = function () {\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 self = this;\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 = function (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 δ = !self.isRotated\r\n ? 0\r\n : (imageData.w - imageData.h) / 2;\r\n imgWidth = !self.isRotated\r\n ? imageData.w\r\n : imageData.h;\r\n imgHeight = !self.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 = function (e) {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging && !self.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 self.isDoResize = true;\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = function () {\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 = self.getImageScaleToStage(\r\n $(stage).width(),\r\n $(stage).height()\r\n );\r\n\r\n $.extend(self.imageData, {\r\n initWidth: self.img.width * scale,\r\n initHeight: self.img.height * scale,\r\n initLeft: ($(stage).width() - self.img.width * scale) / 2,\r\n initTop: ($(stage).height() - self.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';\r\n\r\nimport DEFAULTS from './defaults';\r\n\r\nimport {\r\n $W,\r\n $D,\r\n CLICK_EVENT,\r\n RESIZE_EVENT,\r\n KEYDOWN_EVENT,\r\n WHEEL_EVENT,\r\n NS,\r\n CLASS_NS,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nimport {\r\n getImgSrc,\r\n throttle,\r\n preloadImg,\r\n requestFullscreen,\r\n getImageNameFromUrl,\r\n getNumFromCSSValue,\r\n hasScrollbar,\r\n getScrollbarWidth,\r\n setGrabCursor\r\n} from './utilities';\r\n\r\nimport draggable from './draggable';\r\nimport movable from './movable';\r\nimport resizable from './resizable';\r\n\r\n/**\r\n * PhotoViewer Class\r\n */\r\nclass PhotoViewer {\r\n\r\n constructor(items, options, el) {\r\n\r\n let self = this;\r\n\r\n this.options = $.extend(true, {}, DEFAULTS, options);\r\n\r\n if (options && $.isArray(options.footToolbar)) {\r\n this.options.footToolbar = options.footToolbar;\r\n }\r\n\r\n if (options && $.isArray(options.headToolbar)) {\r\n this.options.headToolbar = options.headToolbar;\r\n }\r\n\r\n // Store element of clicked\r\n this.$el = $(el);\r\n\r\n // As we have multiple instances,\r\n // so every instance has following variables.\r\n\r\n // modal open flag\r\n this.isOpened = false;\r\n // modal maximize flag\r\n this.isMaximized = false;\r\n // image rotate 90*(2n+1) flag\r\n this.isRotated = false;\r\n // image rotate angle\r\n this.rotateAngle = 0;\r\n\r\n // if modal do resize\r\n this.isDoResize = false;\r\n\r\n // Store image data in every instance\r\n this.imageData = {};\r\n // Store modal data in every instance\r\n this.modalData = {\r\n width: null,\r\n height: null,\r\n left: null,\r\n top: null\r\n };\r\n\r\n this.init(items, self.options, el);\r\n\r\n }\r\n\r\n init(items, opts, el) {\r\n\r\n this.groupData = items;\r\n this.groupIndex = opts['index'];\r\n\r\n // Get image src\r\n let imgSrc = items[this.groupIndex]['src'];\r\n\r\n this.open();\r\n\r\n this.loadImg(imgSrc);\r\n\r\n // draggable & movable & resizable\r\n if (opts.draggable) {\r\n this.draggable(this.$photoviewer, this.dragHandle, CLASS_NS + '-button');\r\n }\r\n if (opts.movable) {\r\n this.movable(this.$stage, this.$image);\r\n }\r\n if (opts.resizable) {\r\n this.resizable(\r\n this.$photoviewer,\r\n this.$stage,\r\n this.$image,\r\n opts.modalWidth,\r\n opts.modalHeight\r\n );\r\n }\r\n\r\n }\r\n\r\n _creatBtns(toolbar, btns) {\r\n\r\n let btnsStr = '';\r\n\r\n $.each(toolbar, function (index, item) {\r\n btnsStr += btns[item];\r\n });\r\n\r\n return btnsStr;\r\n\r\n }\r\n\r\n _creatTitle() {\r\n return (this.options.title ? `
` : '');\r\n }\r\n\r\n _creatDOM() {\r\n\r\n let btnsTpl = {\r\n minimize: ``,\r\n maximize: ``,\r\n close: ``,\r\n zoomIn: ``,\r\n zoomOut: ``,\r\n prev: ``,\r\n next: ``,\r\n fullscreen: ``,\r\n actualSize: ``,\r\n rotateLeft: ``,\r\n rotateRight: ``\r\n };\r\n\r\n // photoviewer base HTML\r\n let photoviewerHTML =\r\n `
\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.headToolbar, btnsTpl)}\r\n
\r\n ${this._creatTitle()}\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.footToolbar, btnsTpl)}\r\n
\r\n
\r\n
\r\n
`;\r\n\r\n return photoviewerHTML;\r\n\r\n }\r\n\r\n build() {\r\n\r\n // Create photoviewer HTML string\r\n let photoviewerHTML = this._creatDOM();\r\n\r\n // Make photoviewer HTML string to jQuery element\r\n let $photoviewer = $(photoviewerHTML);\r\n\r\n // Get all photoviewer element\r\n this.$photoviewer = $photoviewer;\r\n this.$header = $photoviewer.find(CLASS_NS + '-header');\r\n this.$headToolbar = $photoviewer.find(CLASS_NS + '-toolbar-head');\r\n this.$footer = $photoviewer.find(CLASS_NS + '-footer');\r\n this.$footToolbar = $photoviewer.find(CLASS_NS + '-toolbar-foot');\r\n this.$stage = $photoviewer.find(CLASS_NS + '-stage');\r\n this.$title = $photoviewer.find(CLASS_NS + '-title');\r\n this.$image = $photoviewer.find(CLASS_NS + '-image');\r\n this.$close = $photoviewer.find(CLASS_NS + '-button-close');\r\n this.$maximize = $photoviewer.find(CLASS_NS + '-button-maximize');\r\n this.$minimize = $photoviewer.find(CLASS_NS + '-button-minimize');\r\n this.$zoomIn = $photoviewer.find(CLASS_NS + '-button-zoom-in');\r\n this.$zoomOut = $photoviewer.find(CLASS_NS + '-button-zoom-out');\r\n this.$actualSize = $photoviewer.find(CLASS_NS + '-button-actual-size');\r\n this.$fullscreen = $photoviewer.find(CLASS_NS + '-button-fullscreen');\r\n this.$rotateLeft = $photoviewer.find(CLASS_NS + '-button-rotate-left');\r\n this.$rotateRight = $photoviewer.find(CLASS_NS + '-button-rotate-right');\r\n this.$prev = $photoviewer.find(CLASS_NS + '-button-prev');\r\n this.$next = $photoviewer.find(CLASS_NS + '-button-next');\r\n\r\n // Add class before image loaded\r\n this.$stage.addClass('stage-ready');\r\n this.$image.addClass('image-ready');\r\n\r\n // Reset modal z-index with multiple instances\r\n this.$photoviewer.css('z-index', PUBLIC_VARS['zIndex']);\r\n\r\n // Set handle element of draggable\r\n if (!this.options.dragHandle || this.options.dragHandle === CLASS_NS + '-modal') {\r\n this.dragHandle = this.$photoviewer;\r\n } else {\r\n this.dragHandle = this.$photoviewer.find(this.options.dragHandle);\r\n }\r\n\r\n }\r\n\r\n open() {\r\n\r\n if (!this.options.multiInstances) {\r\n $(CLASS_NS + '-modal').eq(0).remove();\r\n }\r\n\r\n // Fixed modal position bug\r\n if (!$(CLASS_NS + '-modal').length && this.options.fixedContent) {\r\n\r\n $('html').css({ 'overflow': 'hidden' });\r\n\r\n if (hasScrollbar()) {\r\n let scrollbarWidth = getScrollbarWidth();\r\n if (scrollbarWidth) {\r\n $('html').css({ 'padding-right': scrollbarWidth });\r\n }\r\n }\r\n\r\n }\r\n\r\n this.build();\r\n\r\n this._triggerHook('beforeOpen', this.$el);\r\n\r\n // Add PhotoViewer to DOM\r\n $('body').append(this.$photoviewer);\r\n\r\n this.addEvents();\r\n\r\n this.setModalPos(this.$photoviewer);\r\n\r\n this._triggerHook('opened', this.$el);\r\n\r\n }\r\n\r\n close() {\r\n\r\n this._triggerHook('beforeClose', this.$el);\r\n\r\n // Remove instance\r\n this.$photoviewer.remove();\r\n\r\n this.isOpened = false;\r\n this.isMaximized = false;\r\n this.isRotated = false;\r\n this.rotateAngle = 0;\r\n\r\n let zeroModal = !$(CLASS_NS + '-modal').length;\r\n\r\n // Fixed modal position bug\r\n if (zeroModal && this.options.fixedContent) {\r\n $('html').css({ 'overflow': '', 'padding-right': '' });\r\n }\r\n\r\n // Reset zIndex after close\r\n if (zeroModal && this.options.multiInstances) {\r\n PUBLIC_VARS['zIndex'] = this.options.zIndex;\r\n }\r\n\r\n // off events\r\n if (!$(CLASS_NS + '-modal').length) {\r\n $D.off(KEYDOWN_EVENT + EVENT_NS);\r\n $W.off(RESIZE_EVENT + EVENT_NS);\r\n }\r\n\r\n this._triggerHook('closed', this.$el);\r\n\r\n }\r\n\r\n setModalPos(modal) {\r\n\r\n let winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n let modalWidth = this.options.modalWidth,\r\n modalHeight = this.options.modalHeight;\r\n\r\n // Set modal maximized when init\r\n if (this.options.initMaximized) {\r\n\r\n modal.addClass(NS + '-maximize');\r\n\r\n modal.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isOpened = true;\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n // Make the modal in windows center\r\n modal.css({\r\n width: modalWidth,\r\n height: modalHeight,\r\n left: (winWidth - modalWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - modalHeight) / 2 + scrollTop + 'px'\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n setModalSize(img) {\r\n\r\n let self = this,\r\n winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n // stage css value\r\n let stageCSS = {\r\n left: this.$stage.css('left'),\r\n right: this.$stage.css('right'),\r\n top: this.$stage.css('top'),\r\n bottom: this.$stage.css('bottom'),\r\n borderLeft: this.$stage.css('border-left-width'),\r\n borderRight: this.$stage.css('border-right-width'),\r\n borderTop: this.$stage.css('border-top-width'),\r\n borderBottom: this.$stage.css('border-bottom-width')\r\n };\r\n\r\n // Modal size should calc with stage css value\r\n let modalWidth = img.width +\r\n getNumFromCSSValue(stageCSS.left) +\r\n getNumFromCSSValue(stageCSS.right) +\r\n getNumFromCSSValue(stageCSS.borderLeft) +\r\n getNumFromCSSValue(stageCSS.borderRight),\r\n modalHeight = img.height +\r\n getNumFromCSSValue(stageCSS.top) +\r\n getNumFromCSSValue(stageCSS.bottom) +\r\n getNumFromCSSValue(stageCSS.borderTop) +\r\n getNumFromCSSValue(stageCSS.borderBottom);\r\n\r\n let gapThreshold = (this.options.gapThreshold > 0 ? this.options.gapThreshold : 0) + 1,\r\n // modal scale to window\r\n scale = Math.min(\r\n winWidth / (modalWidth * gapThreshold),\r\n winHeight / (modalHeight * gapThreshold),\r\n 1\r\n );\r\n\r\n let minWidth = Math.max(modalWidth * scale, this.options.modalWidth),\r\n minHeight = Math.max(modalHeight * scale, this.options.modalHeight);\r\n\r\n minWidth = this.options.fixedModalSize\r\n ? this.options.modalWidth\r\n : Math.round(minWidth);\r\n minHeight = this.options.fixedModalSize\r\n ? this.options.modalHeight\r\n : Math.round(minHeight);\r\n\r\n let modalCSSObj = {\r\n width: minWidth + 'px',\r\n height: minHeight + 'px',\r\n left: (winWidth - minWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - minHeight) / 2 + scrollTop + 'px'\r\n };\r\n\r\n // Add modal init animation\r\n if (this.options.initAnimation) {\r\n this.$photoviewer.animate(modalCSSObj, function () {\r\n self.setImageSize(img);\r\n });\r\n } else {\r\n this.$photoviewer.css(modalCSSObj);\r\n this.setImageSize(img);\r\n }\r\n\r\n this.isOpened = true;\r\n\r\n }\r\n\r\n getImageScaleToStage(stageWidth, stageHeight) {\r\n\r\n var scale = 1;\r\n\r\n if (!this.isRotated) {\r\n scale = Math.min(stageWidth / this.img.width, stageHeight / this.img.height, 1);\r\n } else {\r\n scale = Math.min(stageWidth / this.img.height, stageHeight / this.img.width, 1);\r\n }\r\n\r\n return scale;\r\n }\r\n\r\n setImageSize(img) {\r\n\r\n let stageData = {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n };\r\n\r\n let scale = this.getImageScaleToStage(\r\n stageData.w,\r\n stageData.h\r\n );\r\n\r\n this.$image.css({\r\n width: Math.ceil(img.width * scale) + 'px',\r\n height: Math.ceil(img.height * scale) + 'px',\r\n left: (stageData.w - Math.ceil(img.width * scale)) / 2 + 'px',\r\n top: (stageData.h - Math.ceil(img.height * scale)) / 2 + 'px'\r\n });\r\n\r\n // Store image initial data\r\n $.extend(this.imageData, {\r\n initWidth: img.width * scale,\r\n initHeight: img.height * scale,\r\n initLeft: (stageData.w - img.width * scale) / 2,\r\n initTop: (stageData.h - img.height * scale) / 2,\r\n width: img.width * scale,\r\n height: img.height * scale,\r\n left: (stageData.w - img.width * scale) / 2,\r\n top: (stageData.h - img.height * scale) / 2\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: this.$image.width(),\r\n h: this.$image.height()\r\n },\r\n {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n },\r\n this.$stage,\r\n this.isRotated\r\n );\r\n\r\n // loader end\r\n this.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n\r\n // Add image init animation\r\n if (this.options.initAnimation) {\r\n this.$image.fadeIn();\r\n }\r\n\r\n }\r\n\r\n loadImg(imgSrc) {\r\n\r\n let self = this;\r\n\r\n let loaderHTML = `
`;\r\n\r\n // loader start\r\n this.$photoviewer.append(loaderHTML);\r\n\r\n if (this.options.initAnimation) {\r\n this.$image.hide();\r\n }\r\n\r\n this.$image.attr('src', imgSrc);\r\n\r\n preloadImg(imgSrc, function (img) {\r\n // Store HTMLImageElement\r\n self.img = img;\r\n\r\n // Store original data\r\n self.imageData = {\r\n originalWidth: img.width,\r\n originalHeight: img.height\r\n };\r\n\r\n if (self.isMaximized || (self.isOpened && self.options.fixedModalPos)) {\r\n self.setImageSize(img);\r\n } else {\r\n self.setModalSize(img);\r\n }\r\n\r\n self.$stage.removeClass('stage-ready');\r\n self.$image.removeClass('image-ready');\r\n\r\n }, function () {\r\n // loader end\r\n self.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n });\r\n\r\n if (this.options.title) {\r\n this.setImgTitle(imgSrc);\r\n }\r\n\r\n }\r\n\r\n setImgTitle(url) {\r\n\r\n let title = this.groupData[this.groupIndex].title\r\n ? this.groupData[this.groupIndex].title\r\n : getImageNameFromUrl(url);\r\n\r\n this.$title.html(title);\r\n\r\n }\r\n\r\n jump(index) {\r\n\r\n this.groupIndex = this.groupIndex + index;\r\n\r\n this.jumpTo(this.groupIndex);\r\n\r\n }\r\n\r\n jumpTo(index) {\r\n\r\n index = index % this.groupData.length;\r\n\r\n if (index >= 0) {\r\n index = index % this.groupData.length;\r\n } else if (index < 0) {\r\n index = (this.groupData.length + index) % this.groupData.length;\r\n }\r\n\r\n this.groupIndex = index;\r\n\r\n this._triggerHook('beforeChange', index);\r\n\r\n this.loadImg(this.groupData[index].src);\r\n\r\n this._triggerHook('changed', index);\r\n\r\n }\r\n\r\n wheel(e) {\r\n\r\n e.preventDefault();\r\n\r\n let delta = 1;\r\n\r\n if (e.originalEvent.deltaY) {\r\n delta = e.originalEvent.deltaY > 0 ? 1 : -1;\r\n } else if (e.originalEvent.wheelDelta) {\r\n delta = -e.originalEvent.wheelDelta / 120;\r\n } else if (e.originalEvent.detail) {\r\n delta = e.originalEvent.detail > 0 ? 1 : -1;\r\n }\r\n\r\n // ratio threshold\r\n let ratio = -delta * this.options.ratioThreshold;\r\n\r\n // mouse point position relative to stage\r\n let pointer = {\r\n x: e.originalEvent.clientX - this.$stage.offset().left + $D.scrollLeft(),\r\n y: e.originalEvent.clientY - this.$stage.offset().top + $D.scrollTop()\r\n };\r\n\r\n this.zoom(ratio, pointer, e);\r\n\r\n }\r\n\r\n zoom(ratio, origin, e) {\r\n\r\n // zoom out ratio & zoom in ratio\r\n ratio = ratio < 0 ? (1 / (1 - ratio)) : (1 + ratio);\r\n\r\n // image ratio\r\n ratio = this.$image.width() / this.imageData.originalWidth * ratio;\r\n\r\n // Fixed digital error\r\n // if (ratio > 0.95 && ratio < 1.05) {\r\n // ratio = 1;\r\n // }\r\n\r\n if (ratio > this.options.maxRatio || ratio < this.options.minRatio) {\r\n return;\r\n }\r\n\r\n this.zoomTo(ratio, origin, e);\r\n\r\n }\r\n\r\n zoomTo(ratio, origin, e) {\r\n\r\n let $image = this.$image,\r\n $stage = this.$stage,\r\n imgData = {\r\n w: this.imageData.width,\r\n h: this.imageData.height,\r\n x: this.imageData.left,\r\n y: this.imageData.top\r\n };\r\n\r\n // image stage position\r\n // We will use it to calc the relative position of image\r\n let stageData = {\r\n w: $stage.width(),\r\n h: $stage.height(),\r\n x: $stage.offset().left,\r\n y: $stage.offset().top\r\n };\r\n\r\n let newWidth = this.imageData.originalWidth * ratio,\r\n newHeight = this.imageData.originalHeight * ratio,\r\n // Think about it for a while\r\n newLeft = origin.x - (origin.x - imgData.x) / imgData.w * newWidth,\r\n newTop = origin.y - (origin.y - imgData.y) / imgData.h * newHeight;\r\n\r\n // δ is the difference between image new width and new height\r\n let δ = !this.isRotated ? 0 : (newWidth - newHeight) / 2,\r\n imgNewWidth = !this.isRotated ? newWidth : newHeight,\r\n imgNewHeight = !this.isRotated ? newHeight : newWidth;\r\n\r\n let offsetX = stageData.w - newWidth,\r\n offsetY = stageData.h - newHeight;\r\n\r\n // zoom out & zoom in condition\r\n // It's important and it takes me a lot of time to get it\r\n // The conditions with image rotate 90 degree drive me crazy alomst!\r\n if (imgNewHeight <= stageData.h) {\r\n newTop = (stageData.h - newHeight) / 2;\r\n } else {\r\n newTop = newTop > δ\r\n ? δ\r\n : (newTop > (offsetY - δ)\r\n ? newTop\r\n : (offsetY - δ));\r\n }\r\n\r\n if (imgNewWidth <= stageData.w) {\r\n newLeft = (stageData.w - newWidth) / 2;\r\n } else {\r\n newLeft = newLeft > -δ\r\n ? -δ\r\n : (newLeft > (offsetX + δ)\r\n ? newLeft\r\n : (offsetX + δ));\r\n }\r\n\r\n // if the image scale get to the critical point\r\n if (Math.abs(this.imageData.initWidth - newWidth) < this.imageData.initWidth * 0.05) {\r\n this.setImageSize(this.img);\r\n } else {\r\n $image.css({\r\n width: Math.round(newWidth) + 'px',\r\n height: Math.round(newHeight) + 'px',\r\n left: Math.round(newLeft) + 'px',\r\n top: Math.round(newTop) + 'px'\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: Math.round(imgNewWidth),\r\n h: Math.round(imgNewHeight)\r\n },\r\n {\r\n w: stageData.w,\r\n h: stageData.h\r\n },\r\n this.$stage\r\n );\r\n }\r\n\r\n\r\n // Update image initial data\r\n $.extend(this.imageData, {\r\n width: newWidth,\r\n height: newHeight,\r\n left: newLeft,\r\n top: newTop\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n rotate(angle) {\r\n\r\n this.rotateAngle = this.rotateAngle + angle;\r\n\r\n if ((this.rotateAngle / 90) % 2 === 0) {\r\n this.isRotated = false;\r\n } else {\r\n this.isRotated = true;\r\n }\r\n\r\n this.rotateTo(this.rotateAngle);\r\n\r\n }\r\n\r\n rotateTo(angle) {\r\n\r\n let self = this;\r\n\r\n this.$image.css({\r\n transform: 'rotate(' + angle + 'deg)'\r\n });\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n // Remove grab cursor when rotate\r\n this.$stage.removeClass('is-grab');\r\n\r\n }\r\n\r\n resize() {\r\n\r\n let self = this;\r\n\r\n let resizeHandler = throttle(function () {\r\n\r\n if (self.isOpened) {\r\n if (self.isMaximized) {\r\n self.setImageSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n } else {\r\n self.setModalSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n }\r\n }\r\n\r\n }, 500);\r\n\r\n return resizeHandler;\r\n\r\n }\r\n\r\n maximize() {\r\n\r\n let self = this;\r\n\r\n if (!this.isMaximized) {\r\n // Store modal data before maximize\r\n this.modalData = {\r\n width: this.$photoviewer.width(),\r\n height: this.$photoviewer.height(),\r\n left: this.$photoviewer.offset().left,\r\n top: this.$photoviewer.offset().top\r\n };\r\n\r\n this.$photoviewer.addClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n this.$photoviewer.removeClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: this.modalData.width\r\n ? this.modalData.width\r\n : this.options.modalWidth,\r\n height: this.modalData.height\r\n ? this.modalData.height\r\n : this.options.modalHeight,\r\n left: this.modalData.left\r\n ? this.modalData.left\r\n : ($W.width() - this.options.modalWidth) / 2 + $D.scrollLeft(),\r\n top: this.modalData.top\r\n ? this.modalData.top\r\n : ($W.height() - this.options.modalHeight) / 2 + $D.scrollTop()\r\n });\r\n\r\n this.isMaximized = false;\r\n }\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n }\r\n\r\n fullscreen() {\r\n\r\n requestFullscreen(this.$photoviewer[0]);\r\n\r\n }\r\n\r\n keydown(e) {\r\n\r\n let self = this;\r\n\r\n if (!this.options.keyboard) {\r\n return false;\r\n }\r\n\r\n let keyCode = e.keyCode || e.which || e.charCode,\r\n ctrlKey = e.ctrlKey || e.metaKey,\r\n altKey = e.altKey || e.metaKey;\r\n\r\n switch (keyCode) {\r\n // ←\r\n case 37:\r\n self.jump(-1);\r\n break;\r\n // →\r\n case 39:\r\n self.jump(1);\r\n break;\r\n // +\r\n case 187:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // -\r\n case 189:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // + Firefox\r\n case 61:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // - Firefox\r\n case 173:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // ctrl + alt + 0\r\n case 48:\r\n if (ctrlKey && altKey) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n }\r\n break;\r\n // ctrl + ,\r\n case 188:\r\n if (ctrlKey) {\r\n self.rotate(-90);\r\n }\r\n break;\r\n // ctrl + .\r\n case 190:\r\n if (ctrlKey) {\r\n self.rotate(90);\r\n }\r\n break;\r\n default:\r\n }\r\n\r\n }\r\n\r\n addEvents() {\r\n\r\n let self = this;\r\n\r\n this.$close.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.close();\r\n });\r\n\r\n this.$stage.off(WHEEL_EVENT + EVENT_NS).on(WHEEL_EVENT + EVENT_NS, function (e) {\r\n self.wheel(e);\r\n });\r\n\r\n this.$zoomIn.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$zoomOut.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$actualSize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$prev.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(-1);\r\n });\r\n\r\n this.$fullscreen.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.fullscreen();\r\n });\r\n\r\n this.$next.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(1);\r\n });\r\n\r\n this.$rotateLeft.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(-90);\r\n });\r\n\r\n this.$rotateRight.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(90);\r\n });\r\n\r\n this.$maximize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.maximize();\r\n });\r\n\r\n $D.off(KEYDOWN_EVENT + EVENT_NS).on(KEYDOWN_EVENT + EVENT_NS, function (e) {\r\n self.keydown(e);\r\n });\r\n\r\n $W.on(RESIZE_EVENT + EVENT_NS, self.resize());\r\n\r\n }\r\n\r\n _triggerHook(e, data) {\r\n if (this.options.callbacks[e]) {\r\n this.options.callbacks[e].apply(this, $.isArray(data) ? data : [data]);\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n/**\r\n * Add methods to PhotoViewer\r\n */\r\n$.extend(PhotoViewer.prototype, draggable, movable, resizable);\r\n\r\n/**\r\n * Add PhotoViewer to globle\r\n */\r\nwindow.PhotoViewer = PhotoViewer;\r\n\r\n/**\r\n * jQuery plugin\r\n */\r\n\r\nlet jqEl = null,\r\n getImgGroup = function (list, groupName) {\r\n\r\n let items = [];\r\n\r\n $(list).each(function () {\r\n\r\n let src = getImgSrc(this);\r\n\r\n items.push({\r\n src: src,\r\n title: $(this).attr('data-title'),\r\n groupName: groupName\r\n });\r\n\r\n });\r\n\r\n return items;\r\n\r\n }\r\n\r\n$.fn.photoviewer = function (options) {\r\n\r\n jqEl = $(this);\r\n\r\n options = options ? options : {};\r\n\r\n // Convert a numeric string into a number\r\n for (let key in options) {\r\n if (typeof (options[key]) === 'string' && !isNaN(options[key])) {\r\n options[key] = parseFloat(options[key])\r\n }\r\n }\r\n\r\n // Get init event, 'click' or 'dblclick'\r\n let opts = $.extend(true, {}, DEFAULTS, options);\r\n\r\n // We should get zIndex of options before plugin's init.\r\n PUBLIC_VARS['zIndex'] = opts.zIndex;\r\n\r\n if (typeof options === 'string') {\r\n\r\n // $(this).data('photoviewer')[options]();\r\n\r\n } else {\r\n\r\n jqEl.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n\r\n e.preventDefault();\r\n // This will stop triggering data-api event\r\n e.stopPropagation();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n options['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n options['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, options, this));\r\n\r\n });\r\n\r\n }\r\n\r\n return jqEl;\r\n\r\n};\r\n\r\n/**\r\n * PhotoViewer DATA-API\r\n */\r\n$D.on(CLICK_EVENT + EVENT_NS, '[data-' + NS + ']', function (e) {\r\n\r\n jqEl = $('[data-' + NS + ']');\r\n\r\n e.preventDefault();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n DEFAULTS['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n DEFAULTS['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, DEFAULTS, this));\r\n\r\n});\r\n\r\nexport default PhotoViewer;\r\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","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","self","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","loaderHTML","hide","originalWidth","originalHeight","setImgTitle","html","jump","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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"} \ No newline at end of file +{"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}\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 self = this;\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 = function (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 (self.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 = function (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'] && !self.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 = function () {\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 self = this;\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 = function (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 δ = !self.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 = !self.isRotated\r\n ? (imageWidth - stageWidth)\r\n : (imageHeight - stageWidth);\r\n heightDiff = !self.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 = function (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(self.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 = function () {\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 self = this;\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 = function (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 δ = !self.isRotated\r\n ? 0\r\n : (imageData.w - imageData.h) / 2;\r\n imgWidth = !self.isRotated\r\n ? imageData.w\r\n : imageData.h;\r\n imgHeight = !self.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 = function (e) {\r\n\r\n e = e || window.event;\r\n\r\n e.preventDefault();\r\n\r\n if (isDragging && !self.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 self.isDoResize = true;\r\n\r\n }\r\n\r\n };\r\n\r\n let dragEnd = function () {\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 = self.getImageScaleToStage(\r\n $(stage).width(),\r\n $(stage).height()\r\n );\r\n\r\n $.extend(self.imageData, {\r\n initWidth: self.img.width * scale,\r\n initHeight: self.img.height * scale,\r\n initLeft: ($(stage).width() - self.img.width * scale) / 2,\r\n initTop: ($(stage).height() - self.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';\r\n\r\nimport DEFAULTS from './defaults';\r\n\r\nimport {\r\n $W,\r\n $D,\r\n CLICK_EVENT,\r\n RESIZE_EVENT,\r\n KEYDOWN_EVENT,\r\n WHEEL_EVENT,\r\n NS,\r\n CLASS_NS,\r\n EVENT_NS,\r\n PUBLIC_VARS\r\n} from './constants';\r\n\r\nimport {\r\n getImgSrc,\r\n throttle,\r\n preloadImg,\r\n requestFullscreen,\r\n getImageNameFromUrl,\r\n getNumFromCSSValue,\r\n hasScrollbar,\r\n getScrollbarWidth,\r\n setGrabCursor\r\n} from './utilities';\r\n\r\nimport draggable from './draggable';\r\nimport movable from './movable';\r\nimport resizable from './resizable';\r\n\r\n/**\r\n * PhotoViewer Class\r\n */\r\nclass PhotoViewer {\r\n\r\n constructor(items, options, el) {\r\n\r\n let self = this;\r\n\r\n this.options = $.extend(true, {}, DEFAULTS, options);\r\n\r\n if (options && $.isArray(options.footToolbar)) {\r\n this.options.footToolbar = options.footToolbar;\r\n }\r\n\r\n if (options && $.isArray(options.headToolbar)) {\r\n this.options.headToolbar = options.headToolbar;\r\n }\r\n\r\n // Store element of clicked\r\n this.$el = $(el);\r\n\r\n // As we have multiple instances,\r\n // so every instance has following variables.\r\n\r\n // modal open flag\r\n this.isOpened = false;\r\n // modal maximize flag\r\n this.isMaximized = false;\r\n // image rotate 90*(2n+1) flag\r\n this.isRotated = false;\r\n // image rotate angle\r\n this.rotateAngle = 0;\r\n\r\n // if modal do resize\r\n this.isDoResize = false;\r\n\r\n // Store image data in every instance\r\n this.imageData = {};\r\n // Store modal data in every instance\r\n this.modalData = {\r\n width: null,\r\n height: null,\r\n left: null,\r\n top: null\r\n };\r\n\r\n this.init(items, self.options, el);\r\n\r\n }\r\n\r\n init(items, opts, el) {\r\n\r\n this.groupData = items;\r\n this.groupIndex = opts['index'];\r\n\r\n // Get image src\r\n let imgSrc = items[this.groupIndex]['src'];\r\n\r\n this.open();\r\n\r\n this.loadImg(imgSrc);\r\n\r\n // draggable & movable & resizable\r\n if (opts.draggable) {\r\n this.draggable(this.$photoviewer, this.dragHandle, CLASS_NS + '-button');\r\n }\r\n if (opts.movable) {\r\n this.movable(this.$stage, this.$image);\r\n }\r\n if (opts.resizable) {\r\n this.resizable(\r\n this.$photoviewer,\r\n this.$stage,\r\n this.$image,\r\n opts.modalWidth,\r\n opts.modalHeight\r\n );\r\n }\r\n\r\n }\r\n\r\n _creatBtns(toolbar, btns) {\r\n\r\n let btnsStr = '';\r\n\r\n $.each(toolbar, function (index, item) {\r\n btnsStr += btns[item];\r\n });\r\n\r\n return btnsStr;\r\n\r\n }\r\n\r\n _creatTitle() {\r\n return (this.options.title ? `
` : '');\r\n }\r\n\r\n _creatDOM() {\r\n\r\n let btnsTpl = {\r\n minimize: ``,\r\n maximize: ``,\r\n close: ``,\r\n zoomIn: ``,\r\n zoomOut: ``,\r\n prev: ``,\r\n next: ``,\r\n fullscreen: ``,\r\n actualSize: ``,\r\n rotateLeft: ``,\r\n rotateRight: ``\r\n };\r\n\r\n // photoviewer base HTML\r\n let photoviewerHTML =\r\n `
\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.headToolbar, btnsTpl)}\r\n
\r\n ${this._creatTitle()}\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n ${this._creatBtns(this.options.footToolbar, btnsTpl)}\r\n
\r\n
\r\n
\r\n
`;\r\n\r\n return photoviewerHTML;\r\n\r\n }\r\n\r\n build() {\r\n\r\n // Create photoviewer HTML string\r\n let photoviewerHTML = this._creatDOM();\r\n\r\n // Make photoviewer HTML string to jQuery element\r\n let $photoviewer = $(photoviewerHTML);\r\n\r\n // Get all photoviewer element\r\n this.$photoviewer = $photoviewer;\r\n this.$header = $photoviewer.find(CLASS_NS + '-header');\r\n this.$headToolbar = $photoviewer.find(CLASS_NS + '-toolbar-head');\r\n this.$footer = $photoviewer.find(CLASS_NS + '-footer');\r\n this.$footToolbar = $photoviewer.find(CLASS_NS + '-toolbar-foot');\r\n this.$stage = $photoviewer.find(CLASS_NS + '-stage');\r\n this.$title = $photoviewer.find(CLASS_NS + '-title');\r\n this.$image = $photoviewer.find(CLASS_NS + '-image');\r\n this.$close = $photoviewer.find(CLASS_NS + '-button-close');\r\n this.$maximize = $photoviewer.find(CLASS_NS + '-button-maximize');\r\n this.$minimize = $photoviewer.find(CLASS_NS + '-button-minimize');\r\n this.$zoomIn = $photoviewer.find(CLASS_NS + '-button-zoom-in');\r\n this.$zoomOut = $photoviewer.find(CLASS_NS + '-button-zoom-out');\r\n this.$actualSize = $photoviewer.find(CLASS_NS + '-button-actual-size');\r\n this.$fullscreen = $photoviewer.find(CLASS_NS + '-button-fullscreen');\r\n this.$rotateLeft = $photoviewer.find(CLASS_NS + '-button-rotate-left');\r\n this.$rotateRight = $photoviewer.find(CLASS_NS + '-button-rotate-right');\r\n this.$prev = $photoviewer.find(CLASS_NS + '-button-prev');\r\n this.$next = $photoviewer.find(CLASS_NS + '-button-next');\r\n\r\n // Add class before image loaded\r\n this.$stage.addClass('stage-ready');\r\n this.$image.addClass('image-ready');\r\n\r\n // Reset modal z-index with multiple instances\r\n this.$photoviewer.css('z-index', PUBLIC_VARS['zIndex']);\r\n\r\n // Set handle element of draggable\r\n if (!this.options.dragHandle || this.options.dragHandle === CLASS_NS + '-modal') {\r\n this.dragHandle = this.$photoviewer;\r\n } else {\r\n this.dragHandle = this.$photoviewer.find(this.options.dragHandle);\r\n }\r\n\r\n }\r\n\r\n open() {\r\n\r\n if (!this.options.multiInstances) {\r\n $(CLASS_NS + '-modal').eq(0).remove();\r\n }\r\n\r\n // Fixed modal position bug\r\n if (!$(CLASS_NS + '-modal').length && this.options.fixedContent) {\r\n\r\n $('html').css({ 'overflow': 'hidden' });\r\n\r\n if (hasScrollbar()) {\r\n let scrollbarWidth = getScrollbarWidth();\r\n if (scrollbarWidth) {\r\n $('html').css({ 'padding-right': scrollbarWidth });\r\n }\r\n }\r\n\r\n }\r\n\r\n this.build();\r\n\r\n this._triggerHook('beforeOpen', this.$el);\r\n\r\n // Add PhotoViewer to DOM\r\n $('body').append(this.$photoviewer);\r\n\r\n this.addEvents();\r\n\r\n this.setModalPos(this.$photoviewer);\r\n\r\n this._triggerHook('opened', this.$el);\r\n\r\n }\r\n\r\n close() {\r\n\r\n this._triggerHook('beforeClose', this.$el);\r\n\r\n // Remove instance\r\n this.$photoviewer.remove();\r\n\r\n this.isOpened = false;\r\n this.isMaximized = false;\r\n this.isRotated = false;\r\n this.rotateAngle = 0;\r\n\r\n let zeroModal = !$(CLASS_NS + '-modal').length;\r\n\r\n // Fixed modal position bug\r\n if (zeroModal && this.options.fixedContent) {\r\n $('html').css({ 'overflow': '', 'padding-right': '' });\r\n }\r\n\r\n // Reset zIndex after close\r\n if (zeroModal && this.options.multiInstances) {\r\n PUBLIC_VARS['zIndex'] = this.options.zIndex;\r\n }\r\n\r\n // off events\r\n if (!$(CLASS_NS + '-modal').length) {\r\n $D.off(KEYDOWN_EVENT + EVENT_NS);\r\n $W.off(RESIZE_EVENT + EVENT_NS);\r\n }\r\n\r\n this._triggerHook('closed', this.$el);\r\n\r\n }\r\n\r\n setModalPos(modal) {\r\n\r\n let winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n let modalWidth = this.options.modalWidth,\r\n modalHeight = this.options.modalHeight;\r\n\r\n // Set modal maximized when init\r\n if (this.options.initMaximized) {\r\n\r\n modal.addClass(NS + '-maximize');\r\n\r\n modal.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isOpened = true;\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n // Make the modal in windows center\r\n modal.css({\r\n width: modalWidth,\r\n height: modalHeight,\r\n left: (winWidth - modalWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - modalHeight) / 2 + scrollTop + 'px'\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n setModalSize(img) {\r\n\r\n let self = this,\r\n winWidth = $W.width(),\r\n winHeight = $W.height(),\r\n scrollLeft = $D.scrollLeft(),\r\n scrollTop = $D.scrollTop();\r\n\r\n // stage css value\r\n let stageCSS = {\r\n left: this.$stage.css('left'),\r\n right: this.$stage.css('right'),\r\n top: this.$stage.css('top'),\r\n bottom: this.$stage.css('bottom'),\r\n borderLeft: this.$stage.css('border-left-width'),\r\n borderRight: this.$stage.css('border-right-width'),\r\n borderTop: this.$stage.css('border-top-width'),\r\n borderBottom: this.$stage.css('border-bottom-width')\r\n };\r\n\r\n // Modal size should calc with stage css value\r\n let modalWidth = img.width +\r\n getNumFromCSSValue(stageCSS.left) +\r\n getNumFromCSSValue(stageCSS.right) +\r\n getNumFromCSSValue(stageCSS.borderLeft) +\r\n getNumFromCSSValue(stageCSS.borderRight),\r\n modalHeight = img.height +\r\n getNumFromCSSValue(stageCSS.top) +\r\n getNumFromCSSValue(stageCSS.bottom) +\r\n getNumFromCSSValue(stageCSS.borderTop) +\r\n getNumFromCSSValue(stageCSS.borderBottom);\r\n\r\n let gapThreshold = (this.options.gapThreshold > 0 ? this.options.gapThreshold : 0) + 1,\r\n // modal scale to window\r\n scale = Math.min(\r\n winWidth / (modalWidth * gapThreshold),\r\n winHeight / (modalHeight * gapThreshold),\r\n 1\r\n );\r\n\r\n let minWidth = Math.max(modalWidth * scale, this.options.modalWidth),\r\n minHeight = Math.max(modalHeight * scale, this.options.modalHeight);\r\n\r\n minWidth = this.options.fixedModalSize\r\n ? this.options.modalWidth\r\n : Math.round(minWidth);\r\n minHeight = this.options.fixedModalSize\r\n ? this.options.modalHeight\r\n : Math.round(minHeight);\r\n\r\n let modalCSSObj = {\r\n width: minWidth + 'px',\r\n height: minHeight + 'px',\r\n left: (winWidth - minWidth) / 2 + scrollLeft + 'px',\r\n top: (winHeight - minHeight) / 2 + scrollTop + 'px'\r\n };\r\n\r\n // Add modal init animation\r\n if (this.options.initAnimation) {\r\n this.$photoviewer.animate(modalCSSObj, function () {\r\n self.setImageSize(img);\r\n });\r\n } else {\r\n this.$photoviewer.css(modalCSSObj);\r\n this.setImageSize(img);\r\n }\r\n\r\n this.isOpened = true;\r\n\r\n }\r\n\r\n getImageScaleToStage(stageWidth, stageHeight) {\r\n\r\n var scale = 1;\r\n\r\n if (!this.isRotated) {\r\n scale = Math.min(stageWidth / this.img.width, stageHeight / this.img.height, 1);\r\n } else {\r\n scale = Math.min(stageWidth / this.img.height, stageHeight / this.img.width, 1);\r\n }\r\n\r\n return scale;\r\n }\r\n\r\n setImageSize(img) {\r\n\r\n let stageData = {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n };\r\n\r\n let scale = this.getImageScaleToStage(\r\n stageData.w,\r\n stageData.h\r\n );\r\n\r\n this.$image.css({\r\n width: Math.ceil(img.width * scale) + 'px',\r\n height: Math.ceil(img.height * scale) + 'px',\r\n left: (stageData.w - Math.ceil(img.width * scale)) / 2 + 'px',\r\n top: (stageData.h - Math.ceil(img.height * scale)) / 2 + 'px'\r\n });\r\n\r\n // Store image initial data\r\n $.extend(this.imageData, {\r\n initWidth: img.width * scale,\r\n initHeight: img.height * scale,\r\n initLeft: (stageData.w - img.width * scale) / 2,\r\n initTop: (stageData.h - img.height * scale) / 2,\r\n width: img.width * scale,\r\n height: img.height * scale,\r\n left: (stageData.w - img.width * scale) / 2,\r\n top: (stageData.h - img.height * scale) / 2\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: this.$image.width(),\r\n h: this.$image.height()\r\n },\r\n {\r\n w: this.$stage.width(),\r\n h: this.$stage.height()\r\n },\r\n this.$stage,\r\n this.isRotated\r\n );\r\n\r\n // loader end\r\n this.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n\r\n // Add image init animation\r\n if (this.options.initAnimation) {\r\n this.$image.fadeIn();\r\n }\r\n\r\n }\r\n\r\n loadImg(imgSrc) {\r\n\r\n let self = this;\r\n\r\n let loaderHTML = `
`;\r\n\r\n // loader start\r\n this.$photoviewer.append(loaderHTML);\r\n\r\n if (this.options.initAnimation) {\r\n this.$image.hide();\r\n }\r\n\r\n this.$image.attr('src', imgSrc);\r\n\r\n preloadImg(imgSrc, function (img) {\r\n // Store HTMLImageElement\r\n self.img = img;\r\n\r\n // Store original data\r\n self.imageData = {\r\n originalWidth: img.width,\r\n originalHeight: img.height\r\n };\r\n\r\n if (self.isMaximized || (self.isOpened && self.options.fixedModalPos)) {\r\n self.setImageSize(img);\r\n } else {\r\n self.setModalSize(img);\r\n }\r\n\r\n self.$stage.removeClass('stage-ready');\r\n self.$image.removeClass('image-ready');\r\n\r\n }, function () {\r\n // loader end\r\n self.$photoviewer.find(CLASS_NS + '-loader').remove();\r\n });\r\n\r\n if (this.options.title) {\r\n this.setImgTitle(imgSrc);\r\n }\r\n\r\n }\r\n\r\n setImgTitle(url) {\r\n\r\n let title = this.groupData[this.groupIndex].title\r\n ? this.groupData[this.groupIndex].title\r\n : getImageNameFromUrl(url);\r\n\r\n this.$title.html(title);\r\n\r\n }\r\n\r\n jump(index) {\r\n\r\n this.groupIndex = this.groupIndex + index;\r\n\r\n this.jumpTo(this.groupIndex);\r\n\r\n }\r\n\r\n jumpTo(index) {\r\n\r\n index = index % this.groupData.length;\r\n\r\n if (index >= 0) {\r\n index = index % this.groupData.length;\r\n } else if (index < 0) {\r\n index = (this.groupData.length + index) % this.groupData.length;\r\n }\r\n\r\n this.groupIndex = index;\r\n\r\n this._triggerHook('beforeChange', index);\r\n\r\n this.loadImg(this.groupData[index].src);\r\n\r\n this._triggerHook('changed', index);\r\n\r\n }\r\n\r\n wheel(e) {\r\n\r\n e.preventDefault();\r\n\r\n let delta = 1;\r\n\r\n if (e.originalEvent.deltaY) {\r\n delta = e.originalEvent.deltaY > 0 ? 1 : -1;\r\n } else if (e.originalEvent.wheelDelta) {\r\n delta = -e.originalEvent.wheelDelta / 120;\r\n } else if (e.originalEvent.detail) {\r\n delta = e.originalEvent.detail > 0 ? 1 : -1;\r\n }\r\n\r\n // ratio threshold\r\n let ratio = -delta * this.options.ratioThreshold;\r\n\r\n // mouse point position relative to stage\r\n let pointer = {\r\n x: e.originalEvent.clientX - this.$stage.offset().left + $D.scrollLeft(),\r\n y: e.originalEvent.clientY - this.$stage.offset().top + $D.scrollTop()\r\n };\r\n\r\n this.zoom(ratio, pointer, e);\r\n\r\n }\r\n\r\n zoom(ratio, origin, e) {\r\n\r\n // zoom out ratio & zoom in ratio\r\n ratio = ratio < 0 ? (1 / (1 - ratio)) : (1 + ratio);\r\n\r\n // image ratio\r\n ratio = this.$image.width() / this.imageData.originalWidth * ratio;\r\n\r\n // Fixed digital error\r\n // if (ratio > 0.95 && ratio < 1.05) {\r\n // ratio = 1;\r\n // }\r\n\r\n if (ratio > this.options.maxRatio || ratio < this.options.minRatio) {\r\n return;\r\n }\r\n\r\n this.zoomTo(ratio, origin, e);\r\n\r\n }\r\n\r\n zoomTo(ratio, origin, e) {\r\n\r\n let $image = this.$image,\r\n $stage = this.$stage,\r\n imgData = {\r\n w: this.imageData.width,\r\n h: this.imageData.height,\r\n x: this.imageData.left,\r\n y: this.imageData.top\r\n };\r\n\r\n // image stage position\r\n // We will use it to calc the relative position of image\r\n let stageData = {\r\n w: $stage.width(),\r\n h: $stage.height(),\r\n x: $stage.offset().left,\r\n y: $stage.offset().top\r\n };\r\n\r\n let newWidth = this.imageData.originalWidth * ratio,\r\n newHeight = this.imageData.originalHeight * ratio,\r\n // Think about it for a while\r\n newLeft = origin.x - (origin.x - imgData.x) / imgData.w * newWidth,\r\n newTop = origin.y - (origin.y - imgData.y) / imgData.h * newHeight;\r\n\r\n // δ is the difference between image new width and new height\r\n let δ = !this.isRotated ? 0 : (newWidth - newHeight) / 2,\r\n imgNewWidth = !this.isRotated ? newWidth : newHeight,\r\n imgNewHeight = !this.isRotated ? newHeight : newWidth;\r\n\r\n let offsetX = stageData.w - newWidth,\r\n offsetY = stageData.h - newHeight;\r\n\r\n // zoom out & zoom in condition\r\n // It's important and it takes me a lot of time to get it\r\n // The conditions with image rotate 90 degree drive me crazy alomst!\r\n if (imgNewHeight <= stageData.h) {\r\n newTop = (stageData.h - newHeight) / 2;\r\n } else {\r\n newTop = newTop > δ\r\n ? δ\r\n : (newTop > (offsetY - δ)\r\n ? newTop\r\n : (offsetY - δ));\r\n }\r\n\r\n if (imgNewWidth <= stageData.w) {\r\n newLeft = (stageData.w - newWidth) / 2;\r\n } else {\r\n newLeft = newLeft > -δ\r\n ? -δ\r\n : (newLeft > (offsetX + δ)\r\n ? newLeft\r\n : (offsetX + δ));\r\n }\r\n\r\n // if the image scale get to the critical point\r\n if (Math.abs(this.imageData.initWidth - newWidth) < this.imageData.initWidth * 0.05) {\r\n this.setImageSize(this.img);\r\n } else {\r\n $image.css({\r\n width: Math.round(newWidth) + 'px',\r\n height: Math.round(newHeight) + 'px',\r\n left: Math.round(newLeft) + 'px',\r\n top: Math.round(newTop) + 'px'\r\n });\r\n\r\n // Set grab cursor\r\n setGrabCursor(\r\n {\r\n w: Math.round(imgNewWidth),\r\n h: Math.round(imgNewHeight)\r\n },\r\n {\r\n w: stageData.w,\r\n h: stageData.h\r\n },\r\n this.$stage\r\n );\r\n }\r\n\r\n\r\n // Update image initial data\r\n $.extend(this.imageData, {\r\n width: newWidth,\r\n height: newHeight,\r\n left: newLeft,\r\n top: newTop\r\n });\r\n\r\n }\r\n\r\n rotate(angle) {\r\n\r\n this.rotateAngle = this.rotateAngle + angle;\r\n\r\n if ((this.rotateAngle / 90) % 2 === 0) {\r\n this.isRotated = false;\r\n } else {\r\n this.isRotated = true;\r\n }\r\n\r\n this.rotateTo(this.rotateAngle);\r\n\r\n }\r\n\r\n rotateTo(angle) {\r\n\r\n let self = this;\r\n\r\n this.$image.css({\r\n transform: 'rotate(' + angle + 'deg)'\r\n });\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n // Remove grab cursor when rotate\r\n this.$stage.removeClass('is-grab');\r\n\r\n }\r\n\r\n resize() {\r\n\r\n let self = this;\r\n\r\n let resizeHandler = throttle(function () {\r\n\r\n if (self.isOpened) {\r\n if (self.isMaximized) {\r\n self.setImageSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n } else {\r\n self.setModalSize({\r\n width: self.imageData.originalWidth,\r\n height: self.imageData.originalHeight\r\n });\r\n }\r\n }\r\n\r\n }, 500);\r\n\r\n return resizeHandler;\r\n\r\n }\r\n\r\n maximize() {\r\n\r\n let self = this;\r\n\r\n if (!this.isMaximized) {\r\n // Store modal data before maximize\r\n this.modalData = {\r\n width: this.$photoviewer.width(),\r\n height: this.$photoviewer.height(),\r\n left: this.$photoviewer.offset().left,\r\n top: this.$photoviewer.offset().top\r\n };\r\n\r\n this.$photoviewer.addClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: '100%',\r\n height: '100%',\r\n left: 0,\r\n top: 0\r\n });\r\n\r\n this.isMaximized = true;\r\n\r\n } else {\r\n\r\n this.$photoviewer.removeClass(NS + '-maximize');\r\n\r\n this.$photoviewer.css({\r\n width: this.modalData.width\r\n ? this.modalData.width\r\n : this.options.modalWidth,\r\n height: this.modalData.height\r\n ? this.modalData.height\r\n : this.options.modalHeight,\r\n left: this.modalData.left\r\n ? this.modalData.left\r\n : ($W.width() - this.options.modalWidth) / 2 + $D.scrollLeft(),\r\n top: this.modalData.top\r\n ? this.modalData.top\r\n : ($W.height() - this.options.modalHeight) / 2 + $D.scrollTop()\r\n });\r\n\r\n this.isMaximized = false;\r\n }\r\n\r\n this.setImageSize({\r\n width: this.imageData.originalWidth,\r\n height: this.imageData.originalHeight\r\n });\r\n\r\n }\r\n\r\n fullscreen() {\r\n\r\n requestFullscreen(this.$photoviewer[0]);\r\n\r\n }\r\n\r\n keydown(e) {\r\n\r\n let self = this;\r\n\r\n if (!this.options.keyboard) {\r\n return false;\r\n }\r\n\r\n let keyCode = e.keyCode || e.which || e.charCode,\r\n ctrlKey = e.ctrlKey || e.metaKey,\r\n altKey = e.altKey || e.metaKey;\r\n\r\n switch (keyCode) {\r\n // ←\r\n case 37:\r\n self.jump(-1);\r\n break;\r\n // →\r\n case 39:\r\n self.jump(1);\r\n break;\r\n // +\r\n case 187:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // -\r\n case 189:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // + Firefox\r\n case 61:\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // - Firefox\r\n case 173:\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n break;\r\n // ctrl + alt + 0\r\n case 48:\r\n if (ctrlKey && altKey) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n }\r\n break;\r\n // ctrl + ,\r\n case 188:\r\n if (ctrlKey) {\r\n self.rotate(-90);\r\n }\r\n break;\r\n // ctrl + .\r\n case 190:\r\n if (ctrlKey) {\r\n self.rotate(90);\r\n }\r\n break;\r\n default:\r\n }\r\n\r\n }\r\n\r\n addEvents() {\r\n\r\n let self = this;\r\n\r\n this.$close.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.close();\r\n });\r\n\r\n this.$stage.off(WHEEL_EVENT + EVENT_NS).on(WHEEL_EVENT + EVENT_NS, function (e) {\r\n self.wheel(e);\r\n });\r\n\r\n this.$zoomIn.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$zoomOut.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoom(\r\n -self.options.ratioThreshold * 3,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$actualSize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n self.zoomTo(\r\n 1,\r\n { x: self.$stage.width() / 2, y: self.$stage.height() / 2 },\r\n e\r\n );\r\n });\r\n\r\n this.$prev.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(-1);\r\n });\r\n\r\n this.$fullscreen.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.fullscreen();\r\n });\r\n\r\n this.$next.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.jump(1);\r\n });\r\n\r\n this.$rotateLeft.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(-90);\r\n });\r\n\r\n this.$rotateRight.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.rotate(90);\r\n });\r\n\r\n this.$maximize.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function () {\r\n self.maximize();\r\n });\r\n\r\n $D.off(KEYDOWN_EVENT + EVENT_NS).on(KEYDOWN_EVENT + EVENT_NS, function (e) {\r\n self.keydown(e);\r\n });\r\n\r\n $W.on(RESIZE_EVENT + EVENT_NS, self.resize());\r\n\r\n }\r\n\r\n _triggerHook(e, data) {\r\n if (this.options.callbacks[e]) {\r\n this.options.callbacks[e].apply(this, $.isArray(data) ? data : [data]);\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n/**\r\n * Add methods to PhotoViewer\r\n */\r\n$.extend(PhotoViewer.prototype, draggable, movable, resizable);\r\n\r\n/**\r\n * Add PhotoViewer to globle\r\n */\r\nwindow.PhotoViewer = PhotoViewer;\r\n\r\n/**\r\n * jQuery plugin\r\n */\r\n\r\nlet jqEl = null,\r\n getImgGroup = function (list, groupName) {\r\n\r\n let items = [];\r\n\r\n $(list).each(function () {\r\n\r\n let src = getImgSrc(this);\r\n\r\n items.push({\r\n src: src,\r\n title: $(this).attr('data-title'),\r\n groupName: groupName\r\n });\r\n\r\n });\r\n\r\n return items;\r\n\r\n }\r\n\r\n$.fn.photoviewer = function (options) {\r\n\r\n jqEl = $(this);\r\n\r\n options = options ? options : {};\r\n\r\n // Convert a numeric string into a number\r\n for (let key in options) {\r\n if (typeof (options[key]) === 'string' && !isNaN(options[key])) {\r\n options[key] = parseFloat(options[key])\r\n }\r\n }\r\n\r\n // Get init event, 'click' or 'dblclick'\r\n let opts = $.extend(true, {}, DEFAULTS, options);\r\n\r\n // We should get zIndex of options before plugin's init.\r\n PUBLIC_VARS['zIndex'] = opts.zIndex;\r\n\r\n if (typeof options === 'string') {\r\n\r\n // $(this).data('photoviewer')[options]();\r\n\r\n } else {\r\n\r\n jqEl.off(CLICK_EVENT + EVENT_NS).on(CLICK_EVENT + EVENT_NS, function (e) {\r\n\r\n e.preventDefault();\r\n // This will stop triggering data-api event\r\n e.stopPropagation();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n options['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n options['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, options, this));\r\n\r\n });\r\n\r\n }\r\n\r\n return jqEl;\r\n\r\n};\r\n\r\n/**\r\n * PhotoViewer DATA-API\r\n */\r\n$D.on(CLICK_EVENT + EVENT_NS, '[data-' + NS + ']', function (e) {\r\n\r\n jqEl = $('[data-' + NS + ']');\r\n\r\n e.preventDefault();\r\n\r\n // Get image group\r\n let items = [],\r\n currentGroupName = $(this).attr('data-group'),\r\n groupList = $D.find('[data-group=\"' + currentGroupName + '\"]');\r\n\r\n if (currentGroupName !== undefined) {\r\n items = getImgGroup(groupList, currentGroupName);\r\n DEFAULTS['index'] = $(this).index('[data-group=\"' + currentGroupName + '\"]');\r\n } else {\r\n items = getImgGroup(jqEl.not('[data-group]'));\r\n DEFAULTS['index'] = $(this).index();\r\n }\r\n\r\n $(this).data(NS, new PhotoViewer(items, DEFAULTS, this));\r\n\r\n});\r\n\r\nexport default PhotoViewer;\r\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","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","self","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","loaderHTML","hide","originalWidth","originalHeight","setImgTitle","html","jump","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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"} \ No newline at end of file diff --git a/dist/photoviewer.min.css b/dist/photoviewer.min.css index dc030bc..1b8b4c8 100644 --- a/dist/photoviewer.min.css +++ b/dist/photoviewer.min.css @@ -7,12 +7,12 @@ * | | | | | | |_| | | | | |_| |\ / _| |_| |__| /\ | |__| |\ \ * |_| |_| |_|\___/ |_| \___/ \_/ |_____|____|_/ \_|____|_| \_\ * - * photoviewer - v2.1.2 + * photoviewer - v2.1.3 * A JS plugin to view images just like in Windows * https://github.com/nzbin/photoviewer#readme * * Copyright (c) 2018 nzbin * Released under MIT License - */.photoviewer-modal{position:absolute;z-index:1090;width:320px;height:320px;cursor:default;overflow:visible !important}.photoviewer-inner{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;background-color:rgba(255,255,255,0.85);-webkit-box-shadow:0 2px 10px 2px rgba(0,0,0,0.3);box-shadow:0 2px 10px 2px rgba(0,0,0,0.3);border-radius:5px;border:1px solid #666;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);cursor:inherit}.photoviewer-maximize{position:fixed;top:0;left:0;width:100%;height:100%}.photoviewer-maximize .photoviewer-inner{border-radius:0}.photoviewer-maximize .photoviewer-resizable-handle{display:none}.photoviewer-toolbar{font-size:0}.photoviewer-header{position:relative;z-index:2;height:30px}.photoviewer-header .photoviewer-toolbar{float:right}.photoviewer-header .photoviewer-button{height:30px}.photoviewer-header .photoviewer-button:hover{color:#333;background-color:#eee}.photoviewer-header .photoviewer-button-close:hover{color:#fff;background-color:#ff4545}.photoviewer-title{padding:8px 10px;font-size:14px;line-height:1;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#333;overflow:hidden}.photoviewer-stage{position:absolute;top:30px;right:0;bottom:40px;left:0;z-index:1;border-top:1px solid #666;border-bottom:1px solid #666;background-color:#fff;overflow:hidden}.photoviewer-stage.stage-ready{text-align:center}.photoviewer-image{position:relative;display:inline-block}.photoviewer-image.image-ready{max-width:100%;max-height:100%}.photoviewer-footer{position:absolute;bottom:0;z-index:2;width:100%;height:40px;color:#fff;text-align:center}.photoviewer-footer .photoviewer-toolbar{display:inline-block}.photoviewer-button{display:inline-block;width:40px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;font-size:16px;color:#3d3d3d;line-height:1;text-align:center;background:none;border-width:0;border-radius:0;cursor:pointer;outline:none}.photoviewer-button:hover{color:#111}.photoviewer-button svg{display:inline-block;font-size:inherit;width:1em;height:1em;overflow:visible;vertical-align:-.125em}.photoviewer-loader{position:absolute;top:0;left:0;right:0;bottom:0;z-index:2;text-align:center;color:#333}.photoviewer-loader::before{content:'';display:inline-block;position:relative;width:36px;height:36px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(255,255,255,0.5);border-radius:100%;-webkit-animation:photoviewerLoading 1s infinite linear;animation:photoviewerLoading 1s infinite linear}.photoviewer-loader::after{content:'';display:inline-block;width:0;height:100%;vertical-align:middle;overflow:hidden}@-webkit-keyframes photoviewerLoading{0%{-webkit-transform:rotateZ(0deg) translate3d(0, 0, 0);transform:rotateZ(0deg) translate3d(0, 0, 0)}100%{-webkit-transform:rotateZ(360deg) translate3d(0, 0, 0);transform:rotateZ(360deg) translate3d(0, 0, 0)}}@keyframes photoviewerLoading{0%{-webkit-transform:rotateZ(0deg) translate3d(0, 0, 0);transform:rotateZ(0deg) translate3d(0, 0, 0)}100%{-webkit-transform:rotateZ(360deg) translate3d(0, 0, 0);transform:rotateZ(360deg) translate3d(0, 0, 0)}}.photoviewer-resizable-handle{position:absolute;z-index:10}.photoviewer-resizable-handle-e{top:0;right:-5px;bottom:0;left:auto;width:10px;cursor:e-resize}.photoviewer-resizable-handle-s{top:auto;right:0;bottom:-5px;left:0;height:10px;cursor:s-resize}.photoviewer-resizable-handle-w{top:0;right:auto;bottom:0;left:-5px;width:10px;cursor:w-resize}.photoviewer-resizable-handle-n{top:-5px;right:0;bottom:auto;left:0;height:10px;cursor:n-resize}.photoviewer-resizable-handle-se{top:auto;right:-5px;bottom:-5px;left:auto;width:10px;height:10px;cursor:se-resize}.photoviewer-resizable-handle-sw{top:auto;right:auto;bottom:-5px;left:-5px;width:10px;height:10px;cursor:sw-resize}.photoviewer-resizable-handle-nw{top:-5px;right:auto;bottom:auto;left:-5px;width:10px;height:10px;cursor:nw-resize}.photoviewer-resizable-handle-ne{top:-5px;right:-5px;bottom:auto;left:auto;width:10px;height:10px;cursor:ne-resize}:-webkit-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-webkit-full-screen .photoviewer-header,:-webkit-full-screen .photoviewer-footer,:-webkit-full-screen .photoviewer-resizable-handle{display:none}:-webkit-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-moz-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-moz-full-screen .photoviewer-header,:-moz-full-screen .photoviewer-footer,:-moz-full-screen .photoviewer-resizable-handle{display:none}:-moz-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-ms-fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-ms-fullscreen .photoviewer-header,:-ms-fullscreen .photoviewer-footer,:-ms-fullscreen .photoviewer-resizable-handle{display:none}:-ms-fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:full-screen .photoviewer-header,:full-screen .photoviewer-footer,:full-screen .photoviewer-resizable-handle{display:none}:full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-webkit-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-moz-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-ms-fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-webkit-full-screen .photoviewer-header,:-webkit-full-screen .photoviewer-footer,:-webkit-full-screen .photoviewer-resizable-handle{display:none}:-moz-full-screen .photoviewer-header,:-moz-full-screen .photoviewer-footer,:-moz-full-screen .photoviewer-resizable-handle{display:none}:-ms-fullscreen .photoviewer-header,:-ms-fullscreen .photoviewer-footer,:-ms-fullscreen .photoviewer-resizable-handle{display:none}:fullscreen .photoviewer-header,:fullscreen .photoviewer-footer,:fullscreen .photoviewer-resizable-handle{display:none}:-webkit-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-moz-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-ms-fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}::-webkit-backdrop{background-color:#000}::backdrop{background-color:#000}::-ms-backdrop{background-color:#000}.is-grab{cursor:move;cursor:-webkit-grab;cursor:grab}.is-grabbing{cursor:move;cursor:-webkit-grabbing;cursor:grabbing} + */.photoviewer-modal{position:absolute;z-index:1090;width:320px;height:320px;cursor:default;overflow:visible !important}.photoviewer-inner{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;background-color:rgba(255,255,255,0.85);-webkit-box-shadow:0 2px 10px 2px rgba(0,0,0,0.3);box-shadow:0 2px 10px 2px rgba(0,0,0,0.3);border-radius:5px;border:1px solid #666;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);cursor:inherit}.photoviewer-maximize{position:fixed;top:0;left:0;width:100%;height:100%}.photoviewer-maximize .photoviewer-inner{border-radius:0}.photoviewer-maximize .photoviewer-resizable-handle{display:none}.photoviewer-toolbar{font-size:0}.photoviewer-button{display:inline-block;width:40px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;font-size:16px;color:#3d3d3d;line-height:1;text-align:center;background:none;border-width:0;border-radius:0;cursor:pointer;outline:none}.photoviewer-button:hover{color:#111}.photoviewer-button svg{display:inline-block;font-size:inherit;width:1em;height:1em;overflow:visible;vertical-align:-.125em}.photoviewer-header{position:relative;z-index:2;height:30px}.photoviewer-header .photoviewer-toolbar{float:right}.photoviewer-header .photoviewer-button{height:30px}.photoviewer-header .photoviewer-button:hover{color:#333;background-color:#eee}.photoviewer-header .photoviewer-button-close:hover{color:#fff;background-color:#ff4545}.photoviewer-title{padding:8px 10px;font-size:14px;line-height:1;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#333;overflow:hidden}.photoviewer-stage{position:absolute;top:30px;right:0;bottom:40px;left:0;z-index:1;border-top:1px solid #666;border-bottom:1px solid #666;background-color:#fff;overflow:hidden}.photoviewer-stage.stage-ready{text-align:center}.photoviewer-image{position:relative;display:inline-block}.photoviewer-image.image-ready{max-width:100%;max-height:100%}.photoviewer-footer{position:absolute;bottom:0;z-index:2;width:100%;height:40px;color:#fff;text-align:center}.photoviewer-footer .photoviewer-toolbar{display:inline-block}.photoviewer-loader{position:absolute;top:0;left:0;right:0;bottom:0;z-index:2;text-align:center;color:#333}.photoviewer-loader::before{content:'';display:inline-block;position:relative;width:36px;height:36px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(255,255,255,0.5);border-radius:100%;-webkit-animation:photoviewerLoading 1s infinite linear;animation:photoviewerLoading 1s infinite linear}.photoviewer-loader::after{content:'';display:inline-block;width:0;height:100%;vertical-align:middle;overflow:hidden}@-webkit-keyframes photoviewerLoading{0%{-webkit-transform:rotateZ(0deg) translate3d(0, 0, 0);transform:rotateZ(0deg) translate3d(0, 0, 0)}100%{-webkit-transform:rotateZ(360deg) translate3d(0, 0, 0);transform:rotateZ(360deg) translate3d(0, 0, 0)}}@keyframes photoviewerLoading{0%{-webkit-transform:rotateZ(0deg) translate3d(0, 0, 0);transform:rotateZ(0deg) translate3d(0, 0, 0)}100%{-webkit-transform:rotateZ(360deg) translate3d(0, 0, 0);transform:rotateZ(360deg) translate3d(0, 0, 0)}}.photoviewer-resizable-handle{position:absolute;z-index:10}.photoviewer-resizable-handle-e{top:0;right:-5px;bottom:0;left:auto;width:10px;cursor:e-resize}.photoviewer-resizable-handle-s{top:auto;right:0;bottom:-5px;left:0;height:10px;cursor:s-resize}.photoviewer-resizable-handle-w{top:0;right:auto;bottom:0;left:-5px;width:10px;cursor:w-resize}.photoviewer-resizable-handle-n{top:-5px;right:0;bottom:auto;left:0;height:10px;cursor:n-resize}.photoviewer-resizable-handle-se{top:auto;right:-5px;bottom:-5px;left:auto;width:10px;height:10px;cursor:se-resize}.photoviewer-resizable-handle-sw{top:auto;right:auto;bottom:-5px;left:-5px;width:10px;height:10px;cursor:sw-resize}.photoviewer-resizable-handle-nw{top:-5px;right:auto;bottom:auto;left:-5px;width:10px;height:10px;cursor:nw-resize}.photoviewer-resizable-handle-ne{top:-5px;right:-5px;bottom:auto;left:auto;width:10px;height:10px;cursor:ne-resize}:-webkit-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-webkit-full-screen .photoviewer-header,:-webkit-full-screen .photoviewer-footer,:-webkit-full-screen .photoviewer-resizable-handle{display:none}:-webkit-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-moz-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-moz-full-screen .photoviewer-header,:-moz-full-screen .photoviewer-footer,:-moz-full-screen .photoviewer-resizable-handle{display:none}:-moz-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-ms-fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-ms-fullscreen .photoviewer-header,:-ms-fullscreen .photoviewer-footer,:-ms-fullscreen .photoviewer-resizable-handle{display:none}:-ms-fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:full-screen .photoviewer-header,:full-screen .photoviewer-footer,:full-screen .photoviewer-resizable-handle{display:none}:full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-webkit-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-moz-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-ms-fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-webkit-full-screen .photoviewer-header,:-webkit-full-screen .photoviewer-footer,:-webkit-full-screen .photoviewer-resizable-handle{display:none}:-moz-full-screen .photoviewer-header,:-moz-full-screen .photoviewer-footer,:-moz-full-screen .photoviewer-resizable-handle{display:none}:-ms-fullscreen .photoviewer-header,:-ms-fullscreen .photoviewer-footer,:-ms-fullscreen .photoviewer-resizable-handle{display:none}:fullscreen .photoviewer-header,:fullscreen .photoviewer-footer,:fullscreen .photoviewer-resizable-handle{display:none}:-webkit-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-moz-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-ms-fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}::-webkit-backdrop{background-color:#000}::backdrop{background-color:#000}::-ms-backdrop{background-color:#000}.is-grab{cursor:move;cursor:-webkit-grab;cursor:grab}.is-grabbing{cursor:move;cursor:-webkit-grabbing;cursor:grabbing} /*# sourceMappingURL=photoviewer.min.css.map */ \ No newline at end of file diff --git a/dist/photoviewer.min.css.map b/dist/photoviewer.min.css.map index 87ed978..ba6bc98 100644 --- a/dist/photoviewer.min.css.map +++ b/dist/photoviewer.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["","photoviewer.min.css"],"names":[],"mappings":"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","file":"photoviewer.min.css","sourcesContent":[null,".photoviewer-modal{position:absolute;z-index:1090;width:320px;height:320px;cursor:default;overflow:visible !important}.photoviewer-inner{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;background-color:rgba(255,255,255,0.85);box-shadow:0 2px 10px 2px rgba(0,0,0,0.3);border-radius:5px;border:1px solid #666;backdrop-filter:blur(5px);cursor:inherit}.photoviewer-maximize{position:fixed;top:0;left:0;width:100%;height:100%}.photoviewer-maximize .photoviewer-inner{border-radius:0}.photoviewer-maximize .photoviewer-resizable-handle{display:none}.photoviewer-toolbar{font-size:0}.photoviewer-header{position:relative;z-index:2;height:30px}.photoviewer-header .photoviewer-toolbar{float:right}.photoviewer-header .photoviewer-button{height:30px}.photoviewer-header .photoviewer-button:hover{color:#333;background-color:#eee}.photoviewer-header .photoviewer-button-close:hover{color:#fff;background-color:#ff4545}.photoviewer-title{padding:8px 10px;font-size:14px;line-height:1;white-space:nowrap;text-overflow:ellipsis;user-select:none;color:#333;overflow:hidden}.photoviewer-stage{position:absolute;top:30px;right:0;bottom:40px;left:0;z-index:1;border-top:1px solid #666;border-bottom:1px solid #666;background-color:#fff;overflow:hidden}.photoviewer-stage.stage-ready{text-align:center}.photoviewer-image{position:relative;display:inline-block}.photoviewer-image.image-ready{max-width:100%;max-height:100%}.photoviewer-footer{position:absolute;bottom:0;z-index:2;width:100%;height:40px;color:#fff;text-align:center}.photoviewer-footer .photoviewer-toolbar{display:inline-block}.photoviewer-button{display:inline-block;width:40px;height:40px;box-sizing:border-box;margin:0;font-size:16px;color:#3d3d3d;line-height:1;text-align:center;background:none;border-width:0;border-radius:0;cursor:pointer;outline:none}.photoviewer-button:hover{color:#111}.photoviewer-button svg{display:inline-block;font-size:inherit;width:1em;height:1em;overflow:visible;vertical-align:-.125em}.photoviewer-loader{position:absolute;top:0;left:0;right:0;bottom:0;z-index:2;text-align:center;color:#333}.photoviewer-loader::before{content:'';display:inline-block;position:relative;width:36px;height:36px;box-sizing:border-box;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(255,255,255,0.5);border-radius:100%;animation:photoviewerLoading 1s infinite linear}.photoviewer-loader::after{content:'';display:inline-block;width:0;height:100%;vertical-align:middle;overflow:hidden}@keyframes photoviewerLoading{0%{transform:rotateZ(0deg) translate3d(0, 0, 0)}100%{transform:rotateZ(360deg) translate3d(0, 0, 0)}}.photoviewer-resizable-handle{position:absolute;z-index:10}.photoviewer-resizable-handle-e{top:0;right:-5px;bottom:0;left:auto;width:10px;cursor:e-resize}.photoviewer-resizable-handle-s{top:auto;right:0;bottom:-5px;left:0;height:10px;cursor:s-resize}.photoviewer-resizable-handle-w{top:0;right:auto;bottom:0;left:-5px;width:10px;cursor:w-resize}.photoviewer-resizable-handle-n{top:-5px;right:0;bottom:auto;left:0;height:10px;cursor:n-resize}.photoviewer-resizable-handle-se{top:auto;right:-5px;bottom:-5px;left:auto;width:10px;height:10px;cursor:se-resize}.photoviewer-resizable-handle-sw{top:auto;right:auto;bottom:-5px;left:-5px;width:10px;height:10px;cursor:sw-resize}.photoviewer-resizable-handle-nw{top:-5px;right:auto;bottom:auto;left:-5px;width:10px;height:10px;cursor:nw-resize}.photoviewer-resizable-handle-ne{top:-5px;right:-5px;bottom:auto;left:auto;width:10px;height:10px;cursor:ne-resize}:-webkit-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-webkit-full-screen .photoviewer-header,:-webkit-full-screen .photoviewer-footer,:-webkit-full-screen .photoviewer-resizable-handle{display:none}:-webkit-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-moz-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-moz-full-screen .photoviewer-header,:-moz-full-screen .photoviewer-footer,:-moz-full-screen .photoviewer-resizable-handle{display:none}:-moz-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-ms-fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-ms-fullscreen .photoviewer-header,:-ms-fullscreen .photoviewer-footer,:-ms-fullscreen .photoviewer-resizable-handle{display:none}:-ms-fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:full-screen .photoviewer-header,:full-screen .photoviewer-footer,:full-screen .photoviewer-resizable-handle{display:none}:full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:fullscreen .photoviewer-header,:fullscreen .photoviewer-footer,:fullscreen .photoviewer-resizable-handle{display:none}:fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}::backdrop{background-color:#000}::-ms-backdrop{background-color:#000}.is-grab{cursor:move;cursor:-webkit-grab;cursor:grab}.is-grabbing{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}\n"]} \ No newline at end of file +{"version":3,"sources":["","photoviewer.min.css"],"names":[],"mappings":"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","file":"photoviewer.min.css","sourcesContent":[null,".photoviewer-modal{position:absolute;z-index:1090;width:320px;height:320px;cursor:default;overflow:visible !important}.photoviewer-inner{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;background-color:rgba(255,255,255,0.85);box-shadow:0 2px 10px 2px rgba(0,0,0,0.3);border-radius:5px;border:1px solid #666;backdrop-filter:blur(5px);cursor:inherit}.photoviewer-maximize{position:fixed;top:0;left:0;width:100%;height:100%}.photoviewer-maximize .photoviewer-inner{border-radius:0}.photoviewer-maximize .photoviewer-resizable-handle{display:none}.photoviewer-toolbar{font-size:0}.photoviewer-button{display:inline-block;width:40px;height:40px;box-sizing:border-box;margin:0;font-size:16px;color:#3d3d3d;line-height:1;text-align:center;background:none;border-width:0;border-radius:0;cursor:pointer;outline:none}.photoviewer-button:hover{color:#111}.photoviewer-button svg{display:inline-block;font-size:inherit;width:1em;height:1em;overflow:visible;vertical-align:-.125em}.photoviewer-header{position:relative;z-index:2;height:30px}.photoviewer-header .photoviewer-toolbar{float:right}.photoviewer-header .photoviewer-button{height:30px}.photoviewer-header .photoviewer-button:hover{color:#333;background-color:#eee}.photoviewer-header .photoviewer-button-close:hover{color:#fff;background-color:#ff4545}.photoviewer-title{padding:8px 10px;font-size:14px;line-height:1;white-space:nowrap;text-overflow:ellipsis;user-select:none;color:#333;overflow:hidden}.photoviewer-stage{position:absolute;top:30px;right:0;bottom:40px;left:0;z-index:1;border-top:1px solid #666;border-bottom:1px solid #666;background-color:#fff;overflow:hidden}.photoviewer-stage.stage-ready{text-align:center}.photoviewer-image{position:relative;display:inline-block}.photoviewer-image.image-ready{max-width:100%;max-height:100%}.photoviewer-footer{position:absolute;bottom:0;z-index:2;width:100%;height:40px;color:#fff;text-align:center}.photoviewer-footer .photoviewer-toolbar{display:inline-block}.photoviewer-loader{position:absolute;top:0;left:0;right:0;bottom:0;z-index:2;text-align:center;color:#333}.photoviewer-loader::before{content:'';display:inline-block;position:relative;width:36px;height:36px;box-sizing:border-box;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(255,255,255,0.5);border-radius:100%;animation:photoviewerLoading 1s infinite linear}.photoviewer-loader::after{content:'';display:inline-block;width:0;height:100%;vertical-align:middle;overflow:hidden}@keyframes photoviewerLoading{0%{transform:rotateZ(0deg) translate3d(0, 0, 0)}100%{transform:rotateZ(360deg) translate3d(0, 0, 0)}}.photoviewer-resizable-handle{position:absolute;z-index:10}.photoviewer-resizable-handle-e{top:0;right:-5px;bottom:0;left:auto;width:10px;cursor:e-resize}.photoviewer-resizable-handle-s{top:auto;right:0;bottom:-5px;left:0;height:10px;cursor:s-resize}.photoviewer-resizable-handle-w{top:0;right:auto;bottom:0;left:-5px;width:10px;cursor:w-resize}.photoviewer-resizable-handle-n{top:-5px;right:0;bottom:auto;left:0;height:10px;cursor:n-resize}.photoviewer-resizable-handle-se{top:auto;right:-5px;bottom:-5px;left:auto;width:10px;height:10px;cursor:se-resize}.photoviewer-resizable-handle-sw{top:auto;right:auto;bottom:-5px;left:-5px;width:10px;height:10px;cursor:sw-resize}.photoviewer-resizable-handle-nw{top:-5px;right:auto;bottom:auto;left:-5px;width:10px;height:10px;cursor:nw-resize}.photoviewer-resizable-handle-ne{top:-5px;right:-5px;bottom:auto;left:auto;width:10px;height:10px;cursor:ne-resize}:-webkit-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-webkit-full-screen .photoviewer-header,:-webkit-full-screen .photoviewer-footer,:-webkit-full-screen .photoviewer-resizable-handle{display:none}:-webkit-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-moz-full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-moz-full-screen .photoviewer-header,:-moz-full-screen .photoviewer-footer,:-moz-full-screen .photoviewer-resizable-handle{display:none}:-moz-full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:-ms-fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:-ms-fullscreen .photoviewer-header,:-ms-fullscreen .photoviewer-footer,:-ms-fullscreen .photoviewer-resizable-handle{display:none}:-ms-fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:full-screen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:full-screen .photoviewer-header,:full-screen .photoviewer-footer,:full-screen .photoviewer-resizable-handle{display:none}:full-screen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}:fullscreen{top:0 !important;left:0 !important;width:100% !important;height:100% !important}:fullscreen .photoviewer-header,:fullscreen .photoviewer-footer,:fullscreen .photoviewer-resizable-handle{display:none}:fullscreen .photoviewer-stage{top:0;right:0;bottom:0;left:0;border-width:0;background-color:#000}::backdrop{background-color:#000}::-ms-backdrop{background-color:#000}.is-grab{cursor:move;cursor:-webkit-grab;cursor:grab}.is-grabbing{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}\n"]} \ No newline at end of file diff --git a/dist/photoviewer.min.js b/dist/photoviewer.min.js index ab17db8..0aa7ffa 100644 --- a/dist/photoviewer.min.js +++ b/dist/photoviewer.min.js @@ -6,13 +6,13 @@ * | | | | | | |_| | | | | |_| |\ / _| |_| |__| /\ | |__| |\ \ * |_| |_| |_|\___/ |_| \___/ \_/ |_____|____|_/ \_|____|_| \_\ * - * photoviewer - v2.1.2 + * photoviewer - v2.1.3 * A JS plugin to view images just like in Windows * https://github.com/nzbin/photoviewer#readme * * Copyright (c) 2018 nzbin * Released under MIT License */ -!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],i):t.photoviewer=i(t.jQuery)}(this,function(w){"use strict";w=w&&w.hasOwnProperty("default")?w.default:w;var n={draggable:!0,resizable:!0,movable:!0,keyboard:!0,title:!0,modalWidth:320,modalHeight:320,fixedContent:!0,fixedModalSize:!1,initMaximized:!1,gapThreshold:.02,ratioThreshold:.1,minRatio:.1,maxRatio:16,headToolbar:["maximize","close"],footToolbar:["zoomIn","zoomOut","prev","fullscreen","next","actualSize","rotateRight"],icons:{minimize:'',maximize:'',close:'',zoomIn:'',zoomOut:'',prev:'',next:'',fullscreen:'',actualSize:'',rotateLeft:'',rotateRight:''},i18n:{minimize:"minimize",maximize:"maximize",close:"close",zoomIn:"zoom-in(+)",zoomOut:"zoom-out(-)",prev:"prev(←)",next:"next(→)",fullscreen:"fullscreen",actualSize:"actual-size(Ctrl+Alt+0)",rotateLeft:"rotate-left(Ctrl+,)",rotateRight:"rotate-right(Ctrl+.)"},multiInstances:!0,initAnimation:!0,fixedModalPos:!1,zIndex:1090,dragHandle:!1,callbacks:{beforeOpen:$.noop,opened:$.noop,beforeClose:$.noop,closed:$.noop,beforeChange:$.noop,changed:$.noop},index:0};function u(t){var i=t.match(/\d+/g);return parseFloat(i[0])}function b(t,i,e,o){var s=o?t.h:t.w,n=o?t.w:t.h;(n>i.h||s>i.w)&&e.addClass("is-grab"),n<=i.h&&s<=i.w&&e.removeClass("is-grab")}function t(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}var f=$(window),x=$(document),e="click",o="resize",s="keydown",a="wheel mousewheel DOMMouseScroll",z=t()?"touchstart":"mousedown",M=t()?"touchmove":"mousemove",B=t()?"touchend":"mouseup",c="photoviewer",h="."+c,W="."+c,Y={isMoving:!1,isResizing:!1,zIndex:n.zIndex},i={draggable:function(n,t,i){var a=this,h=!1,l=0,r=0,d=0,p=0,e=function(t){if((t=t||window.event).preventDefault(),h&&!Y.isMoving&&!Y.isResizing&&!a.isMaximized){var i="touchmove"===t.type?t.originalEvent.targetTouches[0].pageX:t.clientX,e="touchmove"===t.type?t.originalEvent.targetTouches[0].pageY:t.clientY,o=i-l,s=e-r;$(n).css({left:o+d+"px",top:s+p+"px"})}},o=function t(){x.off(M+W,e).off(B+W,t),h=!1};$(t).on(z+W,function(t){if(t=t||window.event,a.options.multiInstances&&n.css("z-index",++Y.zIndex),$(t.target).closest(i).length)return!0;h=!0,l="touchstart"===t.type?t.originalEvent.targetTouches[0].pageX:t.clientX,r="touchstart"===t.type?t.originalEvent.targetTouches[0].pageY:t.clientY,d=$(n).offset().left,p=$(n).offset().top,x.on(M+W,e).on(B+W,o)})}},H="html,body,."+c+"-modal,."+c+"-stage,."+c+"-button,."+c+"-resizable-handle",l={movable:function(n,h){var l=this,r=!1,d=0,p=0,g=0,c=0,u=0,f=0,m=0,a=function(t){if((t=t||window.event).preventDefault(),r){var i="touchmove"===t.type?t.originalEvent.targetTouches[0].pageX:t.clientX,e="touchmove"===t.type?t.originalEvent.targetTouches[0].pageY:t.clientY,o=i-d,s=e-p,n=o+g,a=s+c;0'),i=$('
'),e=$('
'),o=$('
'),n=$('
'),a=$('
'),h=$('
'),l=$('
'),r={e:t,s:e,se:n,n:o,w:i,nw:l,ne:h,sw:a};$(H).append(t,i,e,o,n,a,h,l);var D=!1,V=0,I=0,R={w:0,h:0,l:0,t:0},k={w:0,h:0,l:0,t:0},d={w:0,h:0,l:0,t:0},A=0,E=0,S=0,O="",p=function(t){if((t=t||window.event).preventDefault(),D&&!T.isMaximized){var i="touchmove"===t.type?t.originalEvent.targetTouches[0].pageX:t.clientX,e="touchmove"===t.type?t.originalEvent.targetTouches[0].pageY:t.clientY,o=i-V,s=e-I,n=(x=O,b=s,z=-(w=o)+R.w>y?w+R.l:R.l+R.w-y,M=-b+R.h>L?b+R.t:R.t+R.h-L,{e:{width:Math.max(w+R.w,y)+"px"},s:{height:Math.max(b+R.h,L)+"px"},se:{width:Math.max(w+R.w,y)+"px",height:Math.max(b+R.h,L)+"px"},w:{width:Math.max(-w+R.w,y)+"px",left:z+"px"},n:{height:Math.max(-b+R.h,L)+"px",top:M+"px"},nw:{width:Math.max(-w+R.w,y)+"px",height:Math.max(-b+R.h,L)+"px",top:M+"px",left:z+"px"},ne:{width:Math.max(w+R.w,y)+"px",height:Math.max(-b+R.h,L)+"px",top:M+"px"},sw:{width:Math.max(-w+R.w,y)+"px",height:Math.max(b+R.h,L)+"px",left:z+"px"}}[x]);$(H).css(n);var a=(h=O,r=s,d=(l=o)+R.w>y?k.w-E+l-A:y-(R.w-k.w)-E-A,p=r+R.h>L?k.h-S+r+A:L-(R.h-k.h)-S+A,g=-l+R.w>y?k.w-E-l-A:y-(R.w-k.w)-E-A,c=-r+R.h>L?k.h-S-r+A:L-(R.h-k.h)-S+A,u=(0':""},i._creatDOM=function(){var t={minimize:'",maximize:'",close:'",zoomIn:'",zoomOut:'",prev:'",next:'",fullscreen:'",actualSize:'",rotateLeft:'",rotateRight:'"};return'
\n
\n
\n
\n '+this._creatBtns(this.options.headToolbar,t)+"\n
\n "+this._creatTitle()+'\n
\n
\n \n
\n \n
\n
"},i.build=function(){var t=this._creatDOM(),i=w(t);this.$photoviewer=i,this.$header=i.find(h+"-header"),this.$headToolbar=i.find(h+"-toolbar-head"),this.$footer=i.find(h+"-footer"),this.$footToolbar=i.find(h+"-toolbar-foot"),this.$stage=i.find(h+"-stage"),this.$title=i.find(h+"-title"),this.$image=i.find(h+"-image"),this.$close=i.find(h+"-button-close"),this.$maximize=i.find(h+"-button-maximize"),this.$minimize=i.find(h+"-button-minimize"),this.$zoomIn=i.find(h+"-button-zoom-in"),this.$zoomOut=i.find(h+"-button-zoom-out"),this.$actualSize=i.find(h+"-button-actual-size"),this.$fullscreen=i.find(h+"-button-fullscreen"),this.$rotateLeft=i.find(h+"-button-rotate-left"),this.$rotateRight=i.find(h+"-button-rotate-right"),this.$prev=i.find(h+"-button-prev"),this.$next=i.find(h+"-button-next"),this.$stage.addClass("stage-ready"),this.$image.addClass("image-ready"),this.$photoviewer.css("z-index",Y.zIndex),this.options.dragHandle&&this.options.dragHandle!==h+"-modal"?this.dragHandle=this.$photoviewer.find(this.options.dragHandle):this.dragHandle=this.$photoviewer},i.open=function(){if(this.options.multiInstances||w(h+"-modal").eq(0).remove(),!w(h+"-modal").length&&this.options.fixedContent&&(w("html").css({overflow:"hidden"}),document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight))){var t=function(){var t=document.createElement("div");t.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(t);var i=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),i}();t&&w("html").css({"padding-right":t})}this.build(),this._triggerHook("beforeOpen",this.$el),w("body").append(this.$photoviewer),this.addEvents(),this.setModalPos(this.$photoviewer),this._triggerHook("opened",this.$el)},i.close=function(){this._triggerHook("beforeClose",this.$el),this.$photoviewer.remove(),this.isOpened=!1,this.isMaximized=!1,this.isRotated=!1,this.rotateAngle=0;var t=!w(h+"-modal").length;t&&this.options.fixedContent&&w("html").css({overflow:"","padding-right":""}),t&&this.options.multiInstances&&(Y.zIndex=this.options.zIndex),w(h+"-modal").length||(x.off(s+W),f.off(o+W)),this._triggerHook("closed",this.$el)},i.setModalPos=function(t){var i=f.width(),e=f.height(),o=x.scrollLeft(),s=x.scrollTop(),n=this.options.modalWidth,a=this.options.modalHeight;this.options.initMaximized?(t.addClass(c+"-maximize"),t.css({width:"100%",height:"100%",left:0,top:0}),this.isOpened=!0,this.isMaximized=!0):t.css({width:n,height:a,left:(i-n)/2+o+"px",top:(e-a)/2+s+"px"})},i.setModalSize=function(t){var i=this,e=f.width(),o=f.height(),s=x.scrollLeft(),n=x.scrollTop(),a={left:this.$stage.css("left"),right:this.$stage.css("right"),top:this.$stage.css("top"),bottom:this.$stage.css("bottom"),borderLeft:this.$stage.css("border-left-width"),borderRight:this.$stage.css("border-right-width"),borderTop:this.$stage.css("border-top-width"),borderBottom:this.$stage.css("border-bottom-width")},h=t.width+u(a.left)+u(a.right)+u(a.borderLeft)+u(a.borderRight),l=t.height+u(a.top)+u(a.bottom)+u(a.borderTop)+u(a.borderBottom),r=(0'),this.options.initAnimation&&this.$image.hide(),this.$image.attr("src",t),i=t,e=function(t){n.imageData={originalWidth:t.width,originalHeight:t.height},n.isMaximized||n.isOpened&&n.options.fixedModalPos?n.setImageSize(t):n.setModalSize(t),n.$stage.removeClass("stage-ready"),n.$image.removeClass("image-ready")},o=function(){n.$photoviewer.find(h+"-loader").remove()},(s=new Image).onload=function(){e(s)},s.onerror=function(){o(s)},s.src=i,this.options.title&&this.setImgTitle(t)},i.setImgTitle=function(t){var i=this.groupData[this.groupIndex].title?this.groupData[this.groupIndex].title:t.replace(/^.*?\/*([^/?]*)\.[a-z]+(\?.+|$)/gi,"$1");this.$title.html(i)},i.jump=function(t){this.groupIndex=this.groupIndex+t,this.jumpTo(this.groupIndex)},i.jumpTo=function(t){0<=(t%=this.groupData.length)?t%=this.groupData.length:t<0&&(t=(this.groupData.length+t)%this.groupData.length),this.groupIndex=t,this._triggerHook("beforeChange",t),this.loadImg(this.groupData[t].src),this._triggerHook("changed",t)},i.wheel=function(t){t.preventDefault();var i=1;t.originalEvent.deltaY?i=0\n \n ',maximize:'\n \n ',close:'\n \n ',zoomIn:'\n \n ',zoomOut:'\n \n ',prev:'\n \n ',next:'\n \n ',fullscreen:'\n \n ',actualSize:'\n \n ',rotateLeft:'\n \n ',rotateRight:'\n \n '},i18n:{minimize:"minimize",maximize:"maximize",close:"close",zoomIn:"zoom-in(+)",zoomOut:"zoom-out(-)",prev:"prev(←)",next:"next(→)",fullscreen:"fullscreen",actualSize:"actual-size(Ctrl+Alt+0)",rotateLeft:"rotate-left(Ctrl+,)",rotateRight:"rotate-right(Ctrl+.)"},multiInstances:!0,initAnimation:!0,fixedModalPos:!1,zIndex:1090,dragHandle:!1,callbacks:{beforeOpen:$.noop,opened:$.noop,beforeClose:$.noop,closed:$.noop,beforeChange:$.noop,changed:$.noop},index:0};function u(t){var i=t.match(/\d+/g);return parseFloat(i[0])}function b(t,i,e,o){var n=o?t.h:t.w,s=o?t.w:t.h;(s>i.h||n>i.w)&&e.addClass("is-grab"),s<=i.h&&n<=i.w&&e.removeClass("is-grab")}function t(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}var f=$(window),w=$(document),e="click",o="resize",n="keydown",a="wheel mousewheel DOMMouseScroll",z=t()?"touchstart":"mousedown",M=t()?"touchmove":"mousemove",W=t()?"touchend":"mouseup",c="photoviewer",h="."+c,B="."+c,Y={isMoving:!1,isResizing:!1,zIndex:s.zIndex},i={draggable:function(s,t,i){var a=this,h=!1,l=0,r=0,d=0,g=0,e=function(t){if((t=t||window.event).preventDefault(),h&&!Y.isMoving&&!Y.isResizing&&!a.isMaximized){var i="touchmove"===t.type?t.originalEvent.targetTouches[0].pageX:t.clientX,e="touchmove"===t.type?t.originalEvent.targetTouches[0].pageY:t.clientY,o=i-l,n=e-r;$(s).css({left:o+d+"px",top:n+g+"px"})}},o=function t(){w.off(M+B,e).off(W+B,t),h=!1};$(t).on(z+B,function(t){if(t=t||window.event,a.options.multiInstances&&s.css("z-index",++Y.zIndex),$(t.target).closest(i).length)return!0;h=!0,l="touchstart"===t.type?t.originalEvent.targetTouches[0].pageX:t.clientX,r="touchstart"===t.type?t.originalEvent.targetTouches[0].pageY:t.clientY,d=$(s).offset().left,g=$(s).offset().top,w.on(M+B,e).on(W+B,o)})}},H="html,body,."+c+"-modal,."+c+"-stage,."+c+"-button,."+c+"-resizable-handle",l={movable:function(s,h){var l=this,r=!1,d=0,g=0,p=0,c=0,u=0,f=0,m=0,a=function(t){if((t=t||window.event).preventDefault(),r){var i="touchmove"===t.type?t.originalEvent.targetTouches[0].pageX:t.clientX,e="touchmove"===t.type?t.originalEvent.targetTouches[0].pageY:t.clientY,o=i-d,n=e-g,s=o+p,a=n+c;0'),i=$('
'),e=$('
'),o=$('
'),s=$('
'),a=$('
'),h=$('
'),l=$('
'),r={e:t,s:e,se:s,n:o,w:i,nw:l,ne:h,sw:a};$(H).append(t,i,e,o,s,a,h,l);var D=!1,I=0,V=0,R={w:0,h:0,l:0,t:0},S={w:0,h:0,l:0,t:0},d={w:0,h:0,l:0,t:0},k=0,A=0,E=0,O="",g=function(t){if((t=t||window.event).preventDefault(),D&&!y.isMaximized){var i="touchmove"===t.type?t.originalEvent.targetTouches[0].pageX:t.clientX,e="touchmove"===t.type?t.originalEvent.targetTouches[0].pageY:t.clientY,o=i-I,n=e-V,s=(w=O,b=n,z=-(x=o)+R.w>T?x+R.l:R.l+R.w-T,M=-b+R.h>L?b+R.t:R.t+R.h-L,{e:{width:Math.max(x+R.w,T)+"px"},s:{height:Math.max(b+R.h,L)+"px"},se:{width:Math.max(x+R.w,T)+"px",height:Math.max(b+R.h,L)+"px"},w:{width:Math.max(-x+R.w,T)+"px",left:z+"px"},n:{height:Math.max(-b+R.h,L)+"px",top:M+"px"},nw:{width:Math.max(-x+R.w,T)+"px",height:Math.max(-b+R.h,L)+"px",top:M+"px",left:z+"px"},ne:{width:Math.max(x+R.w,T)+"px",height:Math.max(-b+R.h,L)+"px",top:M+"px"},sw:{width:Math.max(-x+R.w,T)+"px",height:Math.max(b+R.h,L)+"px",left:z+"px"}}[w]);$(H).css(s);var a=(h=O,r=n,d=(l=o)+R.w>T?S.w-A+l-k:T-(R.w-S.w)-A-k,g=r+R.h>L?S.h-E+r+k:L-(R.h-S.h)-E+k,p=-l+R.w>T?S.w-A-l-k:T-(R.w-S.w)-A-k,c=-r+R.h>L?S.h-E-r+k:L-(R.h-S.h)-E+k,u=(0':""},i._creatDOM=function(){var t={minimize:'",maximize:'",close:'",zoomIn:'",zoomOut:'",prev:'",next:'",fullscreen:'",actualSize:'",rotateLeft:'",rotateRight:'"};return'
\n
\n
\n
\n '+this._creatBtns(this.options.headToolbar,t)+"\n
\n "+this._creatTitle()+'\n
\n
\n \n
\n \n
\n
"},i.build=function(){var t=this._creatDOM(),i=x(t);this.$photoviewer=i,this.$header=i.find(h+"-header"),this.$headToolbar=i.find(h+"-toolbar-head"),this.$footer=i.find(h+"-footer"),this.$footToolbar=i.find(h+"-toolbar-foot"),this.$stage=i.find(h+"-stage"),this.$title=i.find(h+"-title"),this.$image=i.find(h+"-image"),this.$close=i.find(h+"-button-close"),this.$maximize=i.find(h+"-button-maximize"),this.$minimize=i.find(h+"-button-minimize"),this.$zoomIn=i.find(h+"-button-zoom-in"),this.$zoomOut=i.find(h+"-button-zoom-out"),this.$actualSize=i.find(h+"-button-actual-size"),this.$fullscreen=i.find(h+"-button-fullscreen"),this.$rotateLeft=i.find(h+"-button-rotate-left"),this.$rotateRight=i.find(h+"-button-rotate-right"),this.$prev=i.find(h+"-button-prev"),this.$next=i.find(h+"-button-next"),this.$stage.addClass("stage-ready"),this.$image.addClass("image-ready"),this.$photoviewer.css("z-index",Y.zIndex),this.options.dragHandle&&this.options.dragHandle!==h+"-modal"?this.dragHandle=this.$photoviewer.find(this.options.dragHandle):this.dragHandle=this.$photoviewer},i.open=function(){if(this.options.multiInstances||x(h+"-modal").eq(0).remove(),!x(h+"-modal").length&&this.options.fixedContent&&(x("html").css({overflow:"hidden"}),document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight))){var t=function(){var t=document.createElement("div");t.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(t);var i=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),i}();t&&x("html").css({"padding-right":t})}this.build(),this._triggerHook("beforeOpen",this.$el),x("body").append(this.$photoviewer),this.addEvents(),this.setModalPos(this.$photoviewer),this._triggerHook("opened",this.$el)},i.close=function(){this._triggerHook("beforeClose",this.$el),this.$photoviewer.remove(),this.isOpened=!1,this.isMaximized=!1,this.isRotated=!1,this.rotateAngle=0;var t=!x(h+"-modal").length;t&&this.options.fixedContent&&x("html").css({overflow:"","padding-right":""}),t&&this.options.multiInstances&&(Y.zIndex=this.options.zIndex),x(h+"-modal").length||(w.off(n+B),f.off(o+B)),this._triggerHook("closed",this.$el)},i.setModalPos=function(t){var i=f.width(),e=f.height(),o=w.scrollLeft(),n=w.scrollTop(),s=this.options.modalWidth,a=this.options.modalHeight;this.options.initMaximized?(t.addClass(c+"-maximize"),t.css({width:"100%",height:"100%",left:0,top:0}),this.isOpened=!0,this.isMaximized=!0):t.css({width:s,height:a,left:(i-s)/2+o+"px",top:(e-a)/2+n+"px"})},i.setModalSize=function(t){var i=this,e=f.width(),o=f.height(),n=w.scrollLeft(),s=w.scrollTop(),a={left:this.$stage.css("left"),right:this.$stage.css("right"),top:this.$stage.css("top"),bottom:this.$stage.css("bottom"),borderLeft:this.$stage.css("border-left-width"),borderRight:this.$stage.css("border-right-width"),borderTop:this.$stage.css("border-top-width"),borderBottom:this.$stage.css("border-bottom-width")},h=t.width+u(a.left)+u(a.right)+u(a.borderLeft)+u(a.borderRight),l=t.height+u(a.top)+u(a.bottom)+u(a.borderTop)+u(a.borderBottom),r=(0'),this.options.initAnimation&&this.$image.hide(),this.$image.attr("src",t),i=t,e=function(t){s.img=t,s.imageData={originalWidth:t.width,originalHeight:t.height},s.isMaximized||s.isOpened&&s.options.fixedModalPos?s.setImageSize(t):s.setModalSize(t),s.$stage.removeClass("stage-ready"),s.$image.removeClass("image-ready")},o=function(){s.$photoviewer.find(h+"-loader").remove()},(n=new Image).onload=function(){e(n)},n.onerror=function(){o(n)},n.src=i,this.options.title&&this.setImgTitle(t)},i.setImgTitle=function(t){var i=this.groupData[this.groupIndex].title?this.groupData[this.groupIndex].title:t.replace(/^.*?\/*([^/?]*)\.[a-z]+(\?.+|$)/gi,"$1");this.$title.html(i)},i.jump=function(t){this.groupIndex=this.groupIndex+t,this.jumpTo(this.groupIndex)},i.jumpTo=function(t){0<=(t%=this.groupData.length)?t%=this.groupData.length:t<0&&(t=(this.groupData.length+t)%this.groupData.length),this.groupIndex=t,this._triggerHook("beforeChange",t),this.loadImg(this.groupData[t].src),this._triggerHook("changed",t)},i.wheel=function(t){t.preventDefault();var i=1;t.originalEvent.deltaY?i=0this.options.maxRatio||t", - maximize: "", - close: "", - zoomIn: "", - zoomOut: "", - prev: "", - next: "", - fullscreen: "", - actualSize: "", - rotateLeft: "", - rotateRight: "" + minimize: "\n \n ", + maximize: "\n \n ", + close: "\n \n ", + zoomIn: "\n \n ", + zoomOut: "\n \n ", + prev: "\n \n ", + next: "\n \n ", + fullscreen: "\n \n ", + actualSize: "\n \n ", + rotateLeft: "\n \n ", + rotateRight: "\n \n " }, // Customize language of button title i18n: { @@ -640,6 +640,7 @@ $(modal).css(modalOpts); var imageOpts = getImageOpts(direction, relativeX, relativeY); $(image).css(imageOpts); + self.isDoResize = true; } }; @@ -659,7 +660,15 @@ isDragging = false; PUBLIC_VARS['isResizing'] = false; // Remove resizable cursor - $(ELEMS_WITH_RESIZE_CURSOR).css('cursor', ''); + $(ELEMS_WITH_RESIZE_CURSOR).css('cursor', ''); // Update image initial data + + var scale = self.getImageScaleToStage($(stage).width(), $(stage).height()); + $.extend(self.imageData, { + initWidth: self.img.width * scale, + initHeight: self.img.height * scale, + initLeft: ($(stage).width() - self.img.width * scale) / 2, + initTop: ($(stage).height() - self.img.height * scale) / 2 + }); }; $.each(resizableHandles, function (dir, handle) { @@ -700,7 +709,9 @@ this.isRotated = false; // image rotate angle - this.rotateAngle = 0; // Store image data in every instance + this.rotateAngle = 0; // if modal do resize + + this.isDoResize = false; // Store image data in every instance this.imageData = {}; // Store modal data in every instance @@ -763,7 +774,7 @@ rotateRight: "" }; // photoviewer base HTML - var photoviewerHTML = "
\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
"; + var photoviewerHTML = "
\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
"; return photoviewerHTML; }; @@ -947,20 +958,24 @@ this.isOpened = true; }; - _proto.setImageSize = function setImageSize(img) { - var stageData = { - w: this.$stage.width(), - h: this.$stage.height() - }; // image scale to stage - + _proto.getImageScaleToStage = function getImageScaleToStage(stageWidth, stageHeight) { var scale = 1; if (!this.isRotated) { - scale = Math.min(stageData.w / img.width, stageData.h / img.height, 1); + scale = Math.min(stageWidth / this.img.width, stageHeight / this.img.height, 1); } else { - scale = Math.min(stageData.w / img.height, stageData.h / img.width, 1); + scale = Math.min(stageWidth / this.img.height, stageHeight / this.img.width, 1); } + return scale; + }; + + _proto.setImageSize = function setImageSize(img) { + var stageData = { + w: this.$stage.width(), + h: this.$stage.height() + }; + var scale = this.getImageScaleToStage(stageData.w, stageData.h); this.$image.css({ width: Math.ceil(img.width * scale) + 'px', height: Math.ceil(img.height * scale) + 'px', @@ -969,6 +984,10 @@ }); // Store image initial data $$1.extend(this.imageData, { + initWidth: img.width * scale, + initHeight: img.height * scale, + initLeft: (stageData.w - img.width * scale) / 2, + initTop: (stageData.h - img.height * scale) / 2, width: img.width * scale, height: img.height * scale, left: (stageData.w - img.width * scale) / 2, @@ -1002,7 +1021,9 @@ this.$image.attr('src', imgSrc); preloadImg(imgSrc, function (img) { - // Store original data + // Store HTMLImageElement + self.img = img; // Store original data + self.imageData = { originalWidth: img.width, originalHeight: img.height @@ -1077,18 +1098,18 @@ }; _proto.zoom = function zoom(ratio, origin, e) { - // zoom out & zoom in - ratio = ratio < 0 ? 1 / (1 - ratio) : 1 + ratio; - - if (ratio > 0.95 && ratio < 1.05) { - ratio = 1; - } + // zoom out ratio & zoom in ratio + ratio = ratio < 0 ? 1 / (1 - ratio) : 1 + ratio; // image ratio - ratio = this.$image.width() / this.imageData.originalWidth * ratio; // min image size + ratio = this.$image.width() / this.imageData.originalWidth * ratio; // Fixed digital error + // if (ratio > 0.95 && ratio < 1.05) { + // ratio = 1; + // } - ratio = Math.max(ratio, this.options.minRatio); // max image size + if (ratio > this.options.maxRatio || ratio < this.options.minRatio) { + return; + } - ratio = Math.min(ratio, this.options.maxRatio); this.zoomTo(ratio, origin, e); }; @@ -1111,7 +1132,7 @@ }; var newWidth = this.imageData.originalWidth * ratio, newHeight = this.imageData.originalHeight * ratio, - // Think about it for a while ~~~ + // Think about it for a while newLeft = origin.x - (origin.x - imgData.x) / imgData.w * newWidth, newTop = origin.y - (origin.y - imgData.y) / imgData.h * newHeight; // δ is the difference between image new width and new height @@ -1133,29 +1154,35 @@ newLeft = (stageData.w - newWidth) / 2; } else { newLeft = newLeft > -δ ? -δ : newLeft > offsetX + δ ? newLeft : offsetX + δ; - } + } // if the image scale get to the critical point + + + if (Math.abs(this.imageData.initWidth - newWidth) < this.imageData.initWidth * 0.05) { + this.setImageSize(this.img); + } else { + $image.css({ + width: Math.round(newWidth) + 'px', + height: Math.round(newHeight) + 'px', + left: Math.round(newLeft) + 'px', + top: Math.round(newTop) + 'px' + }); // Set grab cursor + + setGrabCursor({ + w: Math.round(imgNewWidth), + h: Math.round(imgNewHeight) + }, { + w: stageData.w, + h: stageData.h + }, this.$stage); + } // Update image initial data - $image.css({ - width: Math.round(newWidth) + 'px', - height: Math.round(newHeight) + 'px', - left: Math.round(newLeft) + 'px', - top: Math.round(newTop) + 'px' - }); // Update image initial data $$1.extend(this.imageData, { width: newWidth, height: newHeight, left: newLeft, top: newTop - }); // Set grab cursor - - setGrabCursor({ - w: Math.round(imgNewWidth), - h: Math.round(imgNewHeight) - }, { - w: stageData.w, - h: stageData.h - }, this.$stage); + }); }; _proto.rotate = function rotate(angle) { diff --git a/package.json b/package.json index 5dde4cd..5f604d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "photoviewer", - "version": "2.1.2", + "version": "2.1.3", "description": "A JS plugin to view images just like in Windows", "main": "dist/photoviewer.js", "homepage": "https://github.com/nzbin/photoviewer#readme", diff --git a/src/sass/_general.scss b/src/sass/_general.scss index e1e9e82..3724fd3 100644 --- a/src/sass/_general.scss +++ b/src/sass/_general.scss @@ -17,7 +17,7 @@ right: -1px; bottom: -1px; background-color: rgba(255, 255, 255, .85); - box-shadow: 0 2px 10px 2px rgba(0, 0, 0, 0.3); + box-shadow: 0 2px 10px 2px rgba(0, 0, 0, .3); border-radius: 5px; border: 1px solid #666; backdrop-filter: blur(5px); @@ -34,6 +34,7 @@ .photoviewer-inner { border-radius: 0; } + .photoviewer-resizable-handle { display: none; } @@ -43,6 +44,36 @@ font-size: 0; } +.photoviewer-button { + display: inline-block; + width: 40px; + height: 40px; + box-sizing: border-box; + margin: 0; + font-size: 16px; + color: #3d3d3d; + line-height: 1; + text-align: center; + background: none; + border-width: 0; + border-radius: 0; + cursor: pointer; + outline: none; + + &:hover { + color: #111; + } + + svg { + display: inline-block; + font-size: inherit; + width: 1em; + height: 1em; + overflow: visible; + vertical-align: -.125em; + } +} + .photoviewer-header { position: relative; z-index: 2; @@ -51,6 +82,7 @@ .photoviewer-toolbar { float: right; } + .photoviewer-button { height: 30px; @@ -59,6 +91,7 @@ background-color: #eee; } } + .photoviewer-button-close { &:hover { color: #fff; @@ -119,36 +152,6 @@ } } -.photoviewer-button { - display: inline-block; - width: 40px; - height: 40px; - box-sizing: border-box; - margin: 0; - font-size: 16px; - color: #3d3d3d; - line-height: 1; - text-align: center; - background: none; - border-width: 0; - border-radius: 0; - cursor: pointer; - outline: none; - - &:hover { - color: #111; - } - - svg { - display: inline-block; - font-size: inherit; - width: 1em; - height: 1em; - overflow: visible; - vertical-align: -.125em; - } -} - // loader .photoviewer-loader { position: absolute;