UNPKG

82.3 kBSource Map (JSON)View Raw
1{"version":3,"file":"lg-zoom.es5.js","sources":["../../../src/plugins/zoom/lg-zoom-settings.ts","../../../src/lg-events.ts","../../../src/plugins/zoom/lg-zoom.ts"],"sourcesContent":["export interface ActualSizeIcons {\n zoomIn: 'lg-zoom-in' | 'lg-actual-size';\n zoomOut: 'lg-zoom-out' | 'lg-actual-size';\n}\n\nexport interface ZoomStrings {\n zoomIn: string;\n zoomOut: string;\n viewActualSize: string;\n}\n\nexport interface ZoomSettings {\n /**\n * Value of zoom should be incremented/decremented\n */\n scale: number;\n\n /**\n * Enable/Disable zoom option\n */\n zoom: boolean;\n\n /**\n * Enable actual size icon.\n */\n actualSize: boolean;\n\n /**\n * Once the slide transition is completed, how much time should take zoom plugin to activate\n * @description Some css styles will be added to the images if zoom is enabled.\n * So it might conflict if you add any custom styles to the images such as the initial transition while opening the gallery.\n * So you can delay adding zoom related styles to the images by changing the value of enableZoomAfter.\n */\n enableZoomAfter: number;\n\n /**\n * Show zoom in, zoom out icons\n */\n showZoomInOutIcons: boolean;\n\n /**\n * Actual size icons classnames.\n * Specify classnames for both ZoomIn and ZoomOut states\n * You can use `actualSizeIcons: { zoomIn: 'lg-actual-size', zoomOut: 'lg-zoom-out' }`\n * to show actual size icons instead of zoom in and zoom out icons.\n */\n actualSizeIcons: ActualSizeIcons;\n\n /**\n * Custom translation strings for aria-labels\n */\n zoomPluginStrings: ZoomStrings;\n}\n\nexport const zoomSettings: ZoomSettings = {\n scale: 1,\n zoom: true,\n actualSize: true,\n showZoomInOutIcons: false,\n actualSizeIcons: {\n zoomIn: 'lg-zoom-in',\n zoomOut: 'lg-zoom-out',\n } as ActualSizeIcons,\n enableZoomAfter: 300,\n zoomPluginStrings: {\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n viewActualSize: 'View actual size',\n } as ZoomStrings,\n};\n","import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see <a href=\"/docs/methods\">Methods<a>\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n * <p>\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n * </p>\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n","import { ZoomSettings, zoomSettings } from './lg-zoom-settings';\nimport { LgQuery, lgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { lGEvents } from '../../lg-events';\n\ninterface Coords {\n x: number;\n y: number;\n}\n\ninterface DragAllowedAxises {\n allowX: boolean;\n allowY: boolean;\n}\ninterface ZoomTouchEvent {\n pageX: number;\n touches: { pageY: number; pageX: number }[];\n pageY: number;\n}\ninterface PossibleCords {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n}\n\nconst ZOOM_TRANSITION_DURATION = 500;\n\nexport default class Zoom {\n private core: LightGallery;\n private settings: ZoomSettings;\n private $LG!: LgQuery;\n private imageReset!: number | boolean;\n zoomableTimeout: any;\n positionChanged!: boolean;\n pageX!: number;\n pageY!: number;\n scale!: number;\n\n containerRect!: ClientRect;\n dragAllowedAxises!: DragAllowedAxises;\n top!: number;\n left!: number;\n scrollTop!: number;\n constructor(instance: LightGallery, $LG: LgQuery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.$LG = $LG;\n\n this.settings = { ...zoomSettings, ...this.core.settings };\n\n return this;\n }\n\n // Append Zoom controls. Actual size, Zoom-in, Zoom-out\n buildTemplates(): void {\n let zoomIcons = this.settings.showZoomInOutIcons\n ? `<button id=\"${this.core.getIdName(\n 'lg-zoom-in',\n )}\" type=\"button\" aria-label=\"${\n this.settings.zoomPluginStrings['zoomIn']\n }\" class=\"lg-zoom-in lg-icon\"></button><button id=\"${this.core.getIdName(\n 'lg-zoom-out',\n )}\" type=\"button\" aria-label=\"${\n this.settings.zoomPluginStrings['zoomIn']\n }\" class=\"lg-zoom-out lg-icon\"></button>`\n : '';\n\n if (this.settings.actualSize) {\n zoomIcons += `<button id=\"${this.core.getIdName(\n 'lg-actual-size',\n )}\" type=\"button\" aria-label=\"${\n this.settings.zoomPluginStrings['viewActualSize']\n }\" class=\"${\n this.settings.actualSizeIcons.zoomIn\n } lg-icon\"></button>`;\n }\n\n this.core.outer.addClass('lg-use-transition-for-zoom');\n\n this.core.$toolbar.first().append(zoomIcons);\n }\n\n /**\n * @desc Enable zoom option only once the image is completely loaded\n * If zoomFromOrigin is true, Zoom is enabled once the dummy image has been inserted\n *\n * Zoom styles are defined under lg-zoomable CSS class.\n */\n enableZoom(event: CustomEvent): void {\n // delay will be 0 except first time\n let _speed = this.settings.enableZoomAfter + event.detail.delay;\n\n // set _speed value 0 if gallery opened from direct url and if it is first slide\n if (\n this.$LG('body').first().hasClass('lg-from-hash') &&\n event.detail.delay\n ) {\n // will execute only once\n _speed = 0;\n } else {\n // Remove lg-from-hash to enable starting animation.\n this.$LG('body').first().removeClass('lg-from-hash');\n }\n\n this.zoomableTimeout = setTimeout(() => {\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n this.core.getSlideItem(event.detail.index).addClass('lg-zoomable');\n if (event.detail.index === this.core.index) {\n this.setZoomEssentials();\n }\n }, _speed + 30);\n }\n\n enableZoomOnSlideItemLoad(): void {\n // Add zoomable class\n this.core.LGel.on(\n `${lGEvents.slideItemLoad}.zoom`,\n this.enableZoom.bind(this),\n );\n }\n\n getDragCords(e: MouseEvent): Coords {\n return {\n x: e.pageX,\n y: e.pageY,\n };\n }\n getSwipeCords(e: TouchEvent): Coords {\n const x = e.touches[0].pageX;\n const y = e.touches[0].pageY;\n return {\n x,\n y,\n };\n }\n\n getDragAllowedAxises(scale: number, scaleDiff?: number): DragAllowedAxises {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first()\n .get();\n\n let height = 0;\n let width = 0;\n const rect = $image.getBoundingClientRect();\n if (scale) {\n height = $image.offsetHeight * scale;\n width = $image.offsetWidth * scale;\n } else if (scaleDiff) {\n height = rect.height + scaleDiff * rect.height;\n width = rect.width + scaleDiff * rect.width;\n } else {\n height = rect.height;\n width = rect.width;\n }\n const allowY = height > this.containerRect.height;\n const allowX = width > this.containerRect.width;\n return {\n allowX,\n allowY,\n };\n }\n\n setZoomEssentials(): void {\n this.containerRect = this.core.$content.get().getBoundingClientRect();\n }\n\n /**\n * @desc Image zoom\n * Translate the wrap and scale the image to get better user experience\n *\n * @param {String} scale - Zoom decrement/increment value\n */\n zoomImage(\n scale: number,\n scaleDiff: number,\n reposition: boolean,\n resetToMax: boolean,\n ): void {\n if (Math.abs(scaleDiff) <= 0) return;\n\n const offsetX = this.containerRect.width / 2 + this.containerRect.left;\n\n const offsetY =\n this.containerRect.height / 2 +\n this.containerRect.top +\n this.scrollTop;\n\n let originalX;\n let originalY;\n\n if (scale === 1) {\n this.positionChanged = false;\n }\n\n const dragAllowedAxises = this.getDragAllowedAxises(0, scaleDiff);\n\n const { allowY, allowX } = dragAllowedAxises;\n if (this.positionChanged) {\n originalX = this.left / (this.scale - scaleDiff);\n originalY = this.top / (this.scale - scaleDiff);\n this.pageX = offsetX - originalX;\n this.pageY = offsetY - originalY;\n\n this.positionChanged = false;\n }\n\n const possibleSwipeCords = this.getPossibleSwipeDragCords(scaleDiff);\n\n let x;\n let y;\n let _x = offsetX - this.pageX;\n let _y = offsetY - this.pageY;\n\n if (scale - scaleDiff > 1) {\n const scaleVal = (scale - scaleDiff) / Math.abs(scaleDiff);\n _x =\n (scaleDiff < 0 ? -_x : _x) +\n this.left * (scaleVal + (scaleDiff < 0 ? -1 : 1));\n _y =\n (scaleDiff < 0 ? -_y : _y) +\n this.top * (scaleVal + (scaleDiff < 0 ? -1 : 1));\n x = _x / scaleVal;\n y = _y / scaleVal;\n } else {\n const scaleVal = (scale - scaleDiff) * scaleDiff;\n x = _x * scaleVal;\n y = _y * scaleVal;\n }\n\n if (reposition) {\n if (allowX) {\n if (this.isBeyondPossibleLeft(x, possibleSwipeCords.minX)) {\n x = possibleSwipeCords.minX;\n } else if (\n this.isBeyondPossibleRight(x, possibleSwipeCords.maxX)\n ) {\n x = possibleSwipeCords.maxX;\n }\n } else {\n if (scale > 1) {\n if (x < possibleSwipeCords.minX) {\n x = possibleSwipeCords.minX;\n } else if (x > possibleSwipeCords.maxX) {\n x = possibleSwipeCords.maxX;\n }\n }\n }\n // @todo fix this\n if (allowY) {\n if (this.isBeyondPossibleTop(y, possibleSwipeCords.minY)) {\n y = possibleSwipeCords.minY;\n } else if (\n this.isBeyondPossibleBottom(y, possibleSwipeCords.maxY)\n ) {\n y = possibleSwipeCords.maxY;\n }\n } else {\n // If the translate value based on index of beyond the viewport, utilize the available space to prevent image being cut out\n if (scale > 1) {\n //If image goes beyond viewport top, use the minim possible translate value\n if (y < possibleSwipeCords.minY) {\n y = possibleSwipeCords.minY;\n } else if (y > possibleSwipeCords.maxY) {\n y = possibleSwipeCords.maxY;\n }\n }\n }\n }\n\n this.setZoomStyles({\n x: x,\n y: y,\n scale,\n });\n\n this.left = x;\n this.top = y;\n\n if (resetToMax) {\n this.setZoomImageSize();\n }\n }\n\n resetImageTranslate(index: number): void {\n if (!this.isImageSlide(index)) {\n return;\n }\n const $image = this.core.getSlideItem(index).find('.lg-image').first();\n this.imageReset = false;\n $image.removeClass(\n 'reset-transition reset-transition-y reset-transition-x',\n );\n this.core.outer.removeClass('lg-actual-size');\n $image.css('width', 'auto').css('height', 'auto');\n setTimeout(() => {\n $image.removeClass('no-transition');\n }, 10);\n }\n\n setZoomImageSize(): void {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n\n setTimeout(() => {\n const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n if (this.scale >= actualSizeScale) {\n $image.addClass('no-transition');\n this.imageReset = true;\n }\n }, ZOOM_TRANSITION_DURATION);\n\n setTimeout(() => {\n const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n if (this.scale >= actualSizeScale) {\n const dragAllowedAxises = this.getDragAllowedAxises(this.scale);\n\n $image\n .css(\n 'width',\n ($image.get() as HTMLImageElement).naturalWidth + 'px',\n )\n .css(\n 'height',\n ($image.get() as HTMLImageElement).naturalHeight + 'px',\n );\n\n this.core.outer.addClass('lg-actual-size');\n\n if (dragAllowedAxises.allowX && dragAllowedAxises.allowY) {\n $image.addClass('reset-transition');\n } else if (\n dragAllowedAxises.allowX &&\n !dragAllowedAxises.allowY\n ) {\n $image.addClass('reset-transition-x');\n } else if (\n !dragAllowedAxises.allowX &&\n dragAllowedAxises.allowY\n ) {\n $image.addClass('reset-transition-y');\n }\n }\n }, ZOOM_TRANSITION_DURATION + 50);\n }\n\n /**\n * @desc apply scale3d to image and translate to image wrap\n * @param {style} X,Y and scale\n */\n setZoomStyles(style: { x: number; y: number; scale: number }): void {\n const $imageWrap = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n const $dummyImage = this.core.outer\n .find('.lg-current .lg-dummy-img')\n .first();\n this.scale = style.scale;\n $image.css(\n 'transform',\n 'scale3d(' + style.scale + ', ' + style.scale + ', 1)',\n );\n\n $dummyImage.css(\n 'transform',\n 'scale3d(' + style.scale + ', ' + style.scale + ', 1)',\n );\n\n const transform =\n 'translate3d(' + style.x + 'px, ' + style.y + 'px, 0)';\n $imageWrap.css('transform', transform);\n }\n\n /**\n * @param index - Index of the current slide\n * @param event - event will be available only if the function is called on clicking/taping the imags\n */\n setActualSize(index: number, event?: ZoomTouchEvent): void {\n const currentItem = this.core.galleryItems[this.core.index];\n this.resetImageTranslate(index);\n setTimeout(() => {\n // Allow zoom only on image\n if (\n !currentItem.src ||\n this.core.outer.hasClass('lg-first-slide-loading')\n ) {\n return;\n }\n const scale = this.getCurrentImageActualSizeScale();\n const prevScale = this.scale;\n if (this.core.outer.hasClass('lg-zoomed')) {\n this.scale = 1;\n } else {\n this.scale = this.getScale(scale);\n }\n this.setPageCords(event);\n\n this.beginZoom(this.scale);\n this.zoomImage(this.scale, this.scale - prevScale, true, true);\n\n setTimeout(() => {\n this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\n }, 10);\n }, 50);\n }\n\n getNaturalWidth(index: number): number {\n const $image = this.core.getSlideItem(index).find('.lg-image').first();\n\n const naturalWidth = this.core.galleryItems[index].width;\n return naturalWidth\n ? parseFloat(naturalWidth)\n : undefined || ($image.get() as any).naturalWidth;\n }\n\n getActualSizeScale(naturalWidth: number, width: number): number {\n let _scale;\n let scale;\n if (naturalWidth >= width) {\n _scale = naturalWidth / width;\n scale = _scale || 2;\n } else {\n scale = 1;\n }\n return scale;\n }\n\n getCurrentImageActualSizeScale(): number {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n const width = $image.get().offsetWidth;\n const naturalWidth = this.getNaturalWidth(this.core.index) || width;\n return this.getActualSizeScale(naturalWidth, width);\n }\n\n getPageCords(event?: ZoomTouchEvent): Coords {\n const cords: Coords = {} as Coords;\n if (event) {\n cords.x = event.pageX || event.touches[0].pageX;\n cords.y = event.pageY || event.touches[0].pageY;\n } else {\n const containerRect = this.core.$content\n .get()\n .getBoundingClientRect();\n cords.x = containerRect.width / 2 + containerRect.left;\n cords.y =\n containerRect.height / 2 + this.scrollTop + containerRect.top;\n }\n return cords;\n }\n\n setPageCords(event?: ZoomTouchEvent): void {\n const pageCords = this.getPageCords(event);\n\n this.pageX = pageCords.x;\n this.pageY = pageCords.y;\n }\n\n manageActualPixelClassNames(): void {\n const $actualSize = this.core.getElementById('lg-actual-size');\n $actualSize\n .removeClass(this.settings.actualSizeIcons.zoomIn)\n .addClass(this.settings.actualSizeIcons.zoomOut);\n }\n\n // If true, zoomed - in else zoomed out\n beginZoom(scale: number): boolean {\n this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\n if (scale > 1) {\n this.core.outer.addClass('lg-zoomed');\n this.manageActualPixelClassNames();\n } else {\n this.resetZoom();\n }\n return scale > 1;\n }\n\n getScale(scale: number): number {\n const actualSizeScale = this.getCurrentImageActualSizeScale();\n if (scale < 1) {\n scale = 1;\n } else if (scale > actualSizeScale) {\n scale = actualSizeScale;\n }\n return scale;\n }\n\n init(): void {\n if (!this.settings.zoom) {\n return;\n }\n this.buildTemplates();\n this.enableZoomOnSlideItemLoad();\n\n let tapped: ReturnType<typeof setTimeout> | null = null;\n\n this.core.outer.on('dblclick.lg', (event) => {\n if (!this.$LG(event.target).hasClass('lg-image')) {\n return;\n }\n this.setActualSize(this.core.index, event);\n });\n\n this.core.outer.on('touchstart.lg', (event) => {\n const $target = this.$LG(event.target);\n if (event.touches.length === 1 && $target.hasClass('lg-image')) {\n if (!tapped) {\n tapped = setTimeout(() => {\n tapped = null;\n }, 300);\n } else {\n clearTimeout(tapped);\n tapped = null;\n event.preventDefault();\n this.setActualSize(this.core.index, event);\n }\n }\n });\n\n this.core.LGel.on(\n `${lGEvents.containerResize}.zoom ${lGEvents.rotateRight}.zoom ${lGEvents.rotateLeft}.zoom ${lGEvents.flipHorizontal}.zoom ${lGEvents.flipVertical}.zoom`,\n () => {\n if (\n !this.core.lgOpened ||\n !this.isImageSlide(this.core.index) ||\n this.core.touchAction\n ) {\n return;\n }\n const _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n this.top = 0;\n this.left = 0;\n this.setZoomEssentials();\n this.setZoomSwipeStyles(_LGel, { x: 0, y: 0 });\n this.positionChanged = true;\n },\n );\n // Update zoom on resize and orientationchange\n this.$LG(window).on(`scroll.lg.zoom.global${this.core.lgId}`, () => {\n if (!this.core.lgOpened) return;\n this.scrollTop = this.$LG(window).scrollTop();\n });\n\n this.core.getElementById('lg-zoom-out').on('click.lg', () => {\n // Allow zoom only on image\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n\n let timeout = 0;\n if (this.imageReset) {\n this.resetImageTranslate(this.core.index);\n timeout = 50;\n }\n setTimeout(() => {\n let scale = this.scale - this.settings.scale;\n\n if (scale < 1) {\n scale = 1;\n }\n this.beginZoom(scale);\n this.zoomImage(scale, -this.settings.scale, true, true);\n }, timeout);\n });\n\n this.core.getElementById('lg-zoom-in').on('click.lg', () => {\n this.zoomIn();\n });\n\n this.core.getElementById('lg-actual-size').on('click.lg', () => {\n this.setActualSize(this.core.index);\n });\n\n this.core.LGel.on(`${lGEvents.beforeOpen}.zoom`, () => {\n this.core.outer.find('.lg-item').removeClass('lg-zoomable');\n });\n this.core.LGel.on(`${lGEvents.afterOpen}.zoom`, () => {\n this.scrollTop = this.$LG(window).scrollTop();\n\n // Set the initial value center\n this.pageX = this.core.outer.width() / 2;\n this.pageY = this.core.outer.height() / 2 + this.scrollTop;\n\n this.scale = 1;\n });\n\n // Reset zoom on slide change\n this.core.LGel.on(\n `${lGEvents.afterSlide}.zoom`,\n (event: CustomEvent) => {\n const { prevIndex } = event.detail;\n this.scale = 1;\n this.positionChanged = false;\n this.resetZoom(prevIndex);\n this.resetImageTranslate(prevIndex);\n if (this.isImageSlide(this.core.index)) {\n this.setZoomEssentials();\n }\n },\n );\n\n // Drag option after zoom\n this.zoomDrag();\n\n this.pinchZoom();\n\n this.zoomSwipe();\n\n // Store the zoomable timeout value just to clear it while closing\n this.zoomableTimeout = false;\n this.positionChanged = false;\n }\n\n zoomIn(): void {\n // Allow zoom only on image\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n\n let scale = this.scale + this.settings.scale;\n\n scale = this.getScale(scale);\n this.beginZoom(scale);\n this.zoomImage(\n scale,\n Math.min(this.settings.scale, scale - this.scale),\n true,\n true,\n );\n }\n\n // Reset zoom effect\n resetZoom(index?: number): void {\n this.core.outer.removeClass('lg-zoomed lg-zoom-drag-transition');\n const $actualSize = this.core.getElementById('lg-actual-size');\n const $item = this.core.getSlideItem(\n index !== undefined ? index : this.core.index,\n );\n $actualSize\n .removeClass(this.settings.actualSizeIcons.zoomOut)\n .addClass(this.settings.actualSizeIcons.zoomIn);\n $item.find('.lg-img-wrap').first().removeAttr('style');\n $item.find('.lg-image').first().removeAttr('style');\n this.scale = 1;\n this.left = 0;\n this.top = 0;\n\n // Reset pagx pagy values to center\n this.setPageCords();\n }\n\n getTouchDistance(e: TouchEvent): number {\n return Math.sqrt(\n (e.touches[0].pageX - e.touches[1].pageX) *\n (e.touches[0].pageX - e.touches[1].pageX) +\n (e.touches[0].pageY - e.touches[1].pageY) *\n (e.touches[0].pageY - e.touches[1].pageY),\n );\n }\n\n pinchZoom(): void {\n let startDist = 0;\n let pinchStarted = false;\n let initScale = 1;\n let prevScale = 0;\n\n let $item = this.core.getSlideItem(this.core.index);\n\n this.core.outer.on('touchstart.lg', (e) => {\n $item = this.core.getSlideItem(this.core.index);\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n if (e.touches.length === 2) {\n e.preventDefault();\n if (this.core.outer.hasClass('lg-first-slide-loading')) {\n return;\n }\n initScale = this.scale || 1;\n this.core.outer.removeClass(\n 'lg-zoom-drag-transition lg-zoom-dragging',\n );\n\n this.setPageCords(e);\n this.resetImageTranslate(this.core.index);\n\n this.core.touchAction = 'pinch';\n\n startDist = this.getTouchDistance(e);\n }\n });\n\n this.core.$inner.on('touchmove.lg', (e) => {\n if (\n e.touches.length === 2 &&\n this.core.touchAction === 'pinch' &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n e.preventDefault();\n const endDist = this.getTouchDistance(e);\n\n const distance = startDist - endDist;\n if (!pinchStarted && Math.abs(distance) > 5) {\n pinchStarted = true;\n }\n if (pinchStarted) {\n prevScale = this.scale;\n const _scale = Math.max(1, initScale + -distance * 0.02);\n this.scale =\n Math.round((_scale + Number.EPSILON) * 100) / 100;\n const diff = this.scale - prevScale;\n this.zoomImage(\n this.scale,\n Math.round((diff + Number.EPSILON) * 100) / 100,\n false,\n false,\n );\n }\n }\n });\n\n this.core.$inner.on('touchend.lg', (e) => {\n if (\n this.core.touchAction === 'pinch' &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n pinchStarted = false;\n startDist = 0;\n if (this.scale <= 1) {\n this.resetZoom();\n } else {\n const actualSizeScale = this.getCurrentImageActualSizeScale();\n\n if (this.scale >= actualSizeScale) {\n let scaleDiff = actualSizeScale - this.scale;\n if (scaleDiff === 0) {\n scaleDiff = 0.01;\n }\n this.zoomImage(actualSizeScale, scaleDiff, false, true);\n }\n this.manageActualPixelClassNames();\n\n this.core.outer.addClass('lg-zoomed');\n }\n this.core.touchAction = undefined;\n }\n });\n }\n\n touchendZoom(\n startCoords: Coords,\n endCoords: Coords,\n allowX: boolean,\n allowY: boolean,\n touchDuration: number,\n ): void {\n let distanceXnew = endCoords.x - startCoords.x;\n let distanceYnew = endCoords.y - startCoords.y;\n\n let speedX = Math.abs(distanceXnew) / touchDuration + 1;\n let speedY = Math.abs(distanceYnew) / touchDuration + 1;\n\n if (speedX > 2) {\n speedX += 1;\n }\n\n if (speedY > 2) {\n speedY += 1;\n }\n\n distanceXnew = distanceXnew * speedX;\n distanceYnew = distanceYnew * speedY;\n\n const _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n const distance: Coords = {} as Coords;\n\n distance.x = this.left + distanceXnew;\n distance.y = this.top + distanceYnew;\n\n const possibleSwipeCords = this.getPossibleSwipeDragCords();\n\n if (Math.abs(distanceXnew) > 15 || Math.abs(distanceYnew) > 15) {\n if (allowY) {\n if (\n this.isBeyondPossibleTop(\n distance.y,\n possibleSwipeCords.minY,\n )\n ) {\n distance.y = possibleSwipeCords.minY;\n } else if (\n this.isBeyondPossibleBottom(\n distance.y,\n possibleSwipeCords.maxY,\n )\n ) {\n distance.y = possibleSwipeCords.maxY;\n }\n }\n\n if (allowX) {\n if (\n this.isBeyondPossibleLeft(\n distance.x,\n possibleSwipeCords.minX,\n )\n ) {\n distance.x = possibleSwipeCords.minX;\n } else if (\n this.isBeyondPossibleRight(\n distance.x,\n possibleSwipeCords.maxX,\n )\n ) {\n distance.x = possibleSwipeCords.maxX;\n }\n }\n\n if (allowY) {\n this.top = distance.y;\n } else {\n distance.y = this.top;\n }\n\n if (allowX) {\n this.left = distance.x;\n } else {\n distance.x = this.left;\n }\n\n this.setZoomSwipeStyles(_LGel, distance);\n\n this.positionChanged = true;\n }\n }\n\n getZoomSwipeCords(\n startCoords: Coords,\n endCoords: Coords,\n allowX: boolean,\n allowY: boolean,\n possibleSwipeCords: PossibleCords,\n ): Coords {\n const distance: Coords = {} as Coords;\n if (allowY) {\n distance.y = this.top + (endCoords.y - startCoords.y);\n if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\n const diffMinY = possibleSwipeCords.minY - distance.y;\n distance.y = possibleSwipeCords.minY - diffMinY / 6;\n } else if (\n this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)\n ) {\n const diffMaxY = distance.y - possibleSwipeCords.maxY;\n distance.y = possibleSwipeCords.maxY + diffMaxY / 6;\n }\n } else {\n distance.y = this.top;\n }\n\n if (allowX) {\n distance.x = this.left + (endCoords.x - startCoords.x);\n if (\n this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)\n ) {\n const diffMinX = possibleSwipeCords.minX - distance.x;\n distance.x = possibleSwipeCords.minX - diffMinX / 6;\n } else if (\n this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)\n ) {\n const difMaxX = distance.x - possibleSwipeCords.maxX;\n distance.x = possibleSwipeCords.maxX + difMaxX / 6;\n }\n } else {\n distance.x = this.left;\n }\n\n return distance;\n }\n\n private isBeyondPossibleLeft(x: number, minX: number) {\n return x >= minX;\n }\n private isBeyondPossibleRight(x: number, maxX: number) {\n return x <= maxX;\n }\n private isBeyondPossibleTop(y: number, minY: number) {\n return y >= minY;\n }\n private isBeyondPossibleBottom(y: number, maxY: number) {\n return y <= maxY;\n }\n\n isImageSlide(index: number): boolean {\n const currentItem = this.core.galleryItems[index];\n return this.core.getSlideType(currentItem) === 'image';\n }\n\n getPossibleSwipeDragCords(scale?: number): PossibleCords {\n const $image = this.core\n .getSlideItem(this.core.index)\n .find('.lg-image')\n .first();\n\n const { bottom } = this.core.mediaContainerPosition;\n\n const imgRect = $image.get().getBoundingClientRect();\n\n let imageHeight = imgRect.height;\n let imageWidth = imgRect.width;\n\n if (scale) {\n imageHeight = imageHeight + scale * imageHeight;\n imageWidth = imageWidth + scale * imageWidth;\n }\n\n const minY = (imageHeight - this.containerRect.height) / 2;\n const maxY = (this.containerRect.height - imageHeight) / 2 + bottom;\n\n const minX = (imageWidth - this.containerRect.width) / 2;\n\n const maxX = (this.containerRect.width - imageWidth) / 2;\n\n const possibleSwipeCords = {\n minY: minY,\n maxY: maxY,\n minX: minX,\n maxX: maxX,\n };\n return possibleSwipeCords;\n }\n\n setZoomSwipeStyles(\n LGel: lgQuery,\n distance: { x: number; y: number },\n ): void {\n LGel.css(\n 'transform',\n 'translate3d(' + distance.x + 'px, ' + distance.y + 'px, 0)',\n );\n }\n\n zoomSwipe(): void {\n let startCoords = {} as Coords;\n let endCoords = {} as Coords;\n let isMoved = false;\n\n // Allow x direction drag\n let allowX = false;\n\n // Allow Y direction drag\n let allowY = false;\n\n let startTime: Date = new Date();\n let endTime: Date = new Date();\n let possibleSwipeCords: PossibleCords;\n\n let _LGel: lgQuery;\n\n let $item = this.core.getSlideItem(this.core.index);\n\n this.core.$inner.on('touchstart.lg', (e) => {\n // Allow zoom only on image\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n $item = this.core.getSlideItem(this.core.index);\n if (\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)) &&\n e.touches.length === 1 &&\n this.core.outer.hasClass('lg-zoomed')\n ) {\n e.preventDefault();\n startTime = new Date();\n this.core.touchAction = 'zoomSwipe';\n _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n\n const dragAllowedAxises = this.getDragAllowedAxises(0);\n\n allowY = dragAllowedAxises.allowY;\n allowX = dragAllowedAxises.allowX;\n if (allowX || allowY) {\n startCoords = this.getSwipeCords(e);\n }\n\n possibleSwipeCords = this.getPossibleSwipeDragCords();\n\n // reset opacity and transition duration\n this.core.outer.addClass(\n 'lg-zoom-dragging lg-zoom-drag-transition',\n );\n }\n });\n\n this.core.$inner.on('touchmove.lg', (e) => {\n if (\n e.touches.length === 1 &&\n this.core.touchAction === 'zoomSwipe' &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n e.preventDefault();\n this.core.touchAction = 'zoomSwipe';\n\n endCoords = this.getSwipeCords(e);\n\n const distance = this.getZoomSwipeCords(\n startCoords,\n endCoords,\n allowX,\n allowY,\n possibleSwipeCords,\n );\n\n if (\n Math.abs(endCoords.x - startCoords.x) > 15 ||\n Math.abs(endCoords.y - startCoords.y) > 15\n ) {\n isMoved = true;\n this.setZoomSwipeStyles(_LGel, distance);\n }\n }\n });\n\n this.core.$inner.on('touchend.lg', (e) => {\n if (\n this.core.touchAction === 'zoomSwipe' &&\n (this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target))\n ) {\n e.preventDefault();\n this.core.touchAction = undefined;\n this.core.outer.removeClass('lg-zoom-dragging');\n if (!isMoved) {\n return;\n }\n isMoved = false;\n endTime = new Date();\n const touchDuration = endTime.valueOf() - startTime.valueOf();\n this.touchendZoom(\n startCoords,\n endCoords,\n allowX,\n allowY,\n touchDuration,\n );\n }\n });\n }\n\n zoomDrag(): void {\n let startCoords: Coords = {} as Coords;\n let endCoords: Coords = {} as Coords;\n let isDragging = false;\n let isMoved = false;\n\n // Allow x direction drag\n let allowX = false;\n\n // Allow Y direction drag\n let allowY = false;\n\n let startTime: number | Date;\n let endTime;\n\n let possibleSwipeCords: PossibleCords;\n\n let _LGel: lgQuery;\n\n this.core.outer.on('mousedown.lg.zoom', (e) => {\n // Allow zoom only on image\n if (!this.isImageSlide(this.core.index)) {\n return;\n }\n const $item = this.core.getSlideItem(this.core.index);\n if (\n this.$LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)\n ) {\n startTime = new Date();\n _LGel = this.core\n .getSlideItem(this.core.index)\n .find('.lg-img-wrap')\n .first();\n\n const dragAllowedAxises = this.getDragAllowedAxises(0);\n\n allowY = dragAllowedAxises.allowY;\n allowX = dragAllowedAxises.allowX;\n\n if (this.core.outer.hasClass('lg-zoomed')) {\n if (\n this.$LG(e.target).hasClass('lg-object') &&\n (allowX || allowY)\n ) {\n e.preventDefault();\n startCoords = this.getDragCords(e);\n\n possibleSwipeCords = this.getPossibleSwipeDragCords();\n\n isDragging = true;\n\n this.core.outer\n .removeClass('lg-grab')\n .addClass(\n 'lg-grabbing lg-zoom-drag-transition lg-zoom-dragging',\n );\n // reset opacity and transition duration\n }\n }\n }\n });\n\n this.$LG(window).on(\n `mousemove.lg.zoom.global${this.core.lgId}`,\n (e) => {\n if (isDragging) {\n isMoved = true;\n endCoords = this.getDragCords(e);\n\n const distance = this.getZoomSwipeCords(\n startCoords,\n endCoords,\n allowX,\n allowY,\n possibleSwipeCords,\n );\n\n this.setZoomSwipeStyles(_LGel, distance);\n }\n },\n );\n\n this.$LG(window).on(`mouseup.lg.zoom.global${this.core.lgId}`, (e) => {\n if (isDragging) {\n endTime = new Date();\n isDragging = false;\n this.core.outer.removeClass('lg-zoom-dragging');\n\n // Fix for chrome mouse move on click\n if (\n isMoved &&\n (startCoords.x !== endCoords.x ||\n startCoords.y !== endCoords.y)\n ) {\n endCoords = this.getDragCords(e);\n\n const touchDuration =\n endTime.valueOf() - startTime.valueOf();\n this.touchendZoom(\n startCoords,\n endCoords,\n allowX,\n allowY,\n touchDuration,\n );\n }\n\n isMoved = false;\n }\n\n this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\n });\n }\n\n closeGallery(): void {\n this.resetZoom();\n }\n\n destroy(): void {\n // Unbind all events added by lightGallery zoom plugin\n this.$LG(window).off(`.lg.zoom.global${this.core.lgId}`);\n this.core.LGel.off('.lg.zoom');\n this.core.LGel.off('.zoom');\n clearTimeout(this.zoomableTimeout);\n this.zoomableTimeout = false;\n }\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file