{"version":3,"sources":["overlay.js"],"names":["window","$","undefined","Lightbox","MOBILE_REGEX","test","navigator","userAgent","Overlay","html","options","_this","this","_classCallCheck","backdrop","body","document","element","onClose","onOpen","touchStart","onScroll","event","stopPropagation","deltaY","scrollTop","Math","ceil","prop","Boolean","preventDefault","clientHeight","scrollHeight","scrollBottom","isMobile","bind","onTouchStart","Object","assign","defaultOptions","createElement","createBackdrop","append","classList","_createClass","key","value","requestAnimationFrame","_this2","addClass","restoreBodyScroll","on","addEventListener","onTouchMove","_this3","length","removeClass","clickOutsideToClose","close","disableBodyScroll","_event$touches","_slicedToArray","touches","touch","deltaX","pageX","pageY","_ref","_ref$touches","parent","removeEventListener","get","_Overlay","_this4","css","paddingTop","aspectRatio","_inherits","remove","find","_get","prototype","__proto__","getPrototypeOf","jQuery"],"mappings":"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","file":"overlay.min.js","sourcesContent":["(function (window, $, undefined) {\r\n const MOBILE_REGEX = /Android|iPhone|iPad|iPod/i;\r\n\r\n class Overlay {\r\n\r\n backdrop = null;\r\n body = $(document.body);\r\n element = null;\r\n onClose = () => {};\r\n onOpen = () => {};\r\n options = null;\r\n touchStart = {};\r\n\r\n constructor(html, options) {\r\n this.onTouchMove = this.onTouchMove.bind(this);\r\n this.onTouchStart = this.onTouchStart.bind(this);\r\n\r\n this.options = Object.assign(this.defaultOptions, options);\r\n this.element = this.createElement(html);\r\n this.backdrop = this.createBackdrop();\r\n\r\n this.backdrop.append(this.element);\r\n\r\n if (this.options.classList) {\r\n this.element.addClass(this.options.classList);\r\n }\r\n\r\n this.body.append(this.backdrop);\r\n }\r\n\r\n get defaultOptions() {\r\n return {\r\n classList: '',\r\n clickOutsideToClose: true\r\n };\r\n }\r\n\r\n close() {\r\n requestAnimationFrame(() => {\r\n this.backdrop.removeClass('backdrop-visible');\r\n this.backdrop.addClass('backdrop-hidden');\r\n });\r\n\r\n this.restoreBodyScroll();\r\n\r\n if ('onanimationend' in window) {\r\n this.backdrop.one('animationend', () => this.onClose());\r\n } else {\r\n this.onClose();\r\n }\r\n }\r\n\r\n createBackdrop() {\r\n return $('
');\r\n }\r\n\r\n createElement(html) {\r\n const element = $('
');\r\n\r\n return element.append(html).on('click', (event) => {\r\n event.stopPropagation();\r\n });\r\n }\r\n\r\n disableBodyScroll() {\r\n if (isMobile()) {\r\n this.body.on('touchmove', (event) => event.preventDefault());\r\n this.element[0].addEventListener('touchstart', this.onTouchStart);\r\n this.element[0].addEventListener('touchmove', this.onTouchMove);\r\n } else {\r\n this.body.on('wheel', (event) => event.preventDefault());\r\n this.element[0].addEventListener('wheel', this.onScroll);\r\n }\r\n }\r\n\r\n open() {\r\n if (this.backdrop.parent().length === 0) {\r\n this.body.append(this.backdrop);\r\n }\r\n\r\n if (this.options.clickOutsideToClose) {\r\n this.backdrop.one('click', this.close.bind(this));\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n this.backdrop.removeClass('backdrop-hidden');\r\n this.backdrop.addClass('backdrop-visible');\r\n });\r\n\r\n this.disableBodyScroll();\r\n this.onOpen();\r\n }\r\n\r\n onScroll = (event) => {\r\n event.stopPropagation();\r\n\r\n const {deltaY} = event;\r\n const scrollTop = Math.ceil(this.element.prop('scrollTop'));\r\n\r\n if (deltaY < 0 && scrollTop === 0) {\r\n return Boolean(event.preventDefault());\r\n }\r\n \r\n const clientHeight = this.element.prop('clientHeight');\r\n const scrollHeight = this.element.prop('scrollHeight');\r\n const scrollBottom = scrollHeight - clientHeight - scrollTop;\r\n\r\n // scrollBottom might be less than 0 due to rounding\r\n if (deltaY > 0 && scrollBottom <= 0) {\r\n return Boolean(event.preventDefault());\r\n }\r\n }\r\n\r\n onTouchMove(event) {\r\n const {touches: [touch]} = event;\r\n\r\n event.deltaX = this.touchStart.pageX - touch.pageX;\r\n event.deltaY = this.touchStart.pageY - touch.pageY;\r\n\r\n // update touch start\r\n this.onTouchStart(event);\r\n\r\n return this.onScroll(event);\r\n }\r\n\r\n onTouchStart({touches: [touch]}) {\r\n this.touchStart.pageX = touch.pageX;\r\n this.touchStart.pageY = touch.pageY;\r\n }\r\n\r\n remove() {\r\n this.backdrop.remove();\r\n }\r\n\r\n restoreBodyScroll() {\r\n if (isMobile()) {\r\n this.body.off('touchmove');\r\n this.element[0].removeEventListener('touchstart', this.onTouchStart);\r\n this.element[0].removeEventListener('touchmove', this.onTouchMove);\r\n } else {\r\n this.body.off('wheel');\r\n this.element[0].removeEventListener('wheel', this.onScroll);\r\n }\r\n }\r\n }\r\n\r\n class Lightbox extends Overlay {\r\n\r\n constructor(html, options) {\r\n super(html, options);\r\n\r\n // the max width of the lightbox is 80%\r\n this.element.find('.media-content').css({\r\n paddingTop: `${100 / this.options.aspectRatio * 0.8}%`\r\n });\r\n }\r\n\r\n get defaultOptions() {\r\n return Object.assign(super.defaultOptions, {\r\n aspectRatio: 16 / 9\r\n });\r\n }\r\n\r\n createBackdrop() {\r\n return $('
');\r\n }\r\n\r\n createElement(html) {\r\n const element = $(`\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n `);\r\n\r\n element.find('.media-content').append(html);\r\n\r\n return element;\r\n }\r\n\r\n disableBodyScroll() {\r\n // iframes capture mouse events\r\n }\r\n\r\n restoreBodyScroll() {\r\n // iframes capture mouse events\r\n }\r\n }\r\n\r\n window.Overlay = Overlay;\r\n window.Lightbox = Lightbox;\r\n\r\n function isMobile() {\r\n return MOBILE_REGEX.test(navigator.userAgent);\r\n }\r\n\r\n})(window, jQuery);\r\n"]}