diff --git a/CHANGELOG.md b/CHANGELOG.md index c4ef3479..b3ef3a48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,14 @@ -# Change Log +# Changelog All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [2.3.3](https://github.com/imgix/luminous/compare/v2.3.2...v2.3.3) (2020-11-02) + + +### Bug Fixes + +* allow "closeWithEscape" and "injectBaseStyles" to be overriden when initializing ([fd7dde8](https://github.com/imgix/luminous/commit/fd7dde8aacdbc33771f36b2f2c3485e42b6d9fdc)) + ## [2.3.2](https://github.com/imgix/luminous/compare/v2.3.1...v2.3.2) (2018-12-02) diff --git a/bower.json b/bower.json index e942619b..bcb772c1 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "luminous", - "version": "2.3.2", + "version": "2.3.3", "description": "A simple, lightweight, no-dependencies JavaScript image lightbox.", "main": [ "dist/Luminous.min.js", diff --git a/dist/Luminous.js b/dist/Luminous.js index f3196994..2e80e304 100644 --- a/dist/Luminous.js +++ b/dist/Luminous.js @@ -1,2 +1,2 @@ -var l="function"==typeof Object.defineProperties?Object.defineProperty:function(t,i,e){t!=Array.prototype&&t!=Object.prototype&&(t[i]=e.value)},n="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this;function p(){p=function(){},n.Symbol||(n.Symbol=q)}var r=0;function q(t){return"jscomp_symbol_"+(t||"")+r++}for(var t=n,u=["Object","assign"],v=0;v=this.a.length?this.a[0]:this.a[t]},n.prototype.ja=function(t){return 0>(t=Array.prototype.indexOf.call(this.a,t)-1)?this.a[this.a.length-1]:this.a[t]},n.prototype.j=function(){this.f.forEach(function(t){return t.j()})},n.prototype.destroy=n.prototype.j,window.LuminousGallery=n,window.Luminous=o}]); +var l="function"==typeof Object.defineProperties?Object.defineProperty:function(t,i,e){t!=Array.prototype&&t!=Object.prototype&&(t[i]=e.value)},n="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this;function p(){p=function(){},n.Symbol||(n.Symbol=q)}var r=0;function q(t){return"jscomp_symbol_"+(t||"")+r++}for(var t=n,u=["Object","assign"],v=0;v=this.a.length?this.a[0]:this.a[t]},n.prototype.ja=function(t){return 0>(t=Array.prototype.indexOf.call(this.a,t)-1)?this.a[this.a.length-1]:this.a[t]},n.prototype.j=function(){this.f.forEach((function(t){return t.j()}))},n.prototype.destroy=n.prototype.j,window.LuminousGallery=n,window.Luminous=o}]); //# sourceMappingURL=luminous.min.js.map \ No newline at end of file diff --git a/dist/Luminous.min.js b/dist/Luminous.min.js index f3196994..2e80e304 100644 --- a/dist/Luminous.min.js +++ b/dist/Luminous.min.js @@ -1,2 +1,2 @@ -var l="function"==typeof Object.defineProperties?Object.defineProperty:function(t,i,e){t!=Array.prototype&&t!=Object.prototype&&(t[i]=e.value)},n="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this;function p(){p=function(){},n.Symbol||(n.Symbol=q)}var r=0;function q(t){return"jscomp_symbol_"+(t||"")+r++}for(var t=n,u=["Object","assign"],v=0;v=this.a.length?this.a[0]:this.a[t]},n.prototype.ja=function(t){return 0>(t=Array.prototype.indexOf.call(this.a,t)-1)?this.a[this.a.length-1]:this.a[t]},n.prototype.j=function(){this.f.forEach(function(t){return t.j()})},n.prototype.destroy=n.prototype.j,window.LuminousGallery=n,window.Luminous=o}]); +var l="function"==typeof Object.defineProperties?Object.defineProperty:function(t,i,e){t!=Array.prototype&&t!=Object.prototype&&(t[i]=e.value)},n="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this;function p(){p=function(){},n.Symbol||(n.Symbol=q)}var r=0;function q(t){return"jscomp_symbol_"+(t||"")+r++}for(var t=n,u=["Object","assign"],v=0;v=this.a.length?this.a[0]:this.a[t]},n.prototype.ja=function(t){return 0>(t=Array.prototype.indexOf.call(this.a,t)-1)?this.a[this.a.length-1]:this.a[t]},n.prototype.j=function(){this.f.forEach((function(t){return t.j()}))},n.prototype.destroy=n.prototype.j,window.LuminousGallery=n,window.Luminous=o}]); //# sourceMappingURL=luminous.min.js.map \ No newline at end of file diff --git a/dist/luminous.min.js.map b/dist/luminous.min.js.map index 09186c90..4c50927d 100644 --- a/dist/luminous.min.js.map +++ b/dist/luminous.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:/// [synthetic:util/defineproperty] ","webpack:/// [synthetic:util/global] ","webpack:/// [synthetic:es6/symbol] ","webpack:/// [synthetic:util/polyfill] ","webpack:/// [synthetic:es6/object/assign] ","webpack:/// [synthetic:util/owns] ","webpack:///webpack/bootstrap","webpack:///luminous.min.js","webpack:///./src/js/LuminousGallery.js","webpack:///./src/js/Luminous.js","webpack:///./src/js/injectBaseStylesheet.js","webpack:///./src/js/Lightbox.js","webpack:///./src/js/util/dom.js","webpack:///./src/js/util/throwIfMissing.js","webpack:///./src/js/lum-browser.js"],"names":["$jscomp.defineProperty","Object","defineProperties","defineProperty","g","f","k","Array","prototype","value","$jscomp.global","window","this","global","p","$jscomp.initSymbol","Symbol","$jscomp.Symbol","$jscomp.symbolCounter_","q","$jscomp.SYMBOL_PREFIX","t","u","v","length","x","A","B","C","arguments","c","d","hasOwnProperty","call","configurable","writable","modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","m","__webpack_require__.d","name","getter","o","enumerable","get","r","__webpack_require__.r","toStringTag","__webpack_require__.t","mode","__esModule","ns","create","key","bind","n","__webpack_require__.n","getDefault","getModuleExports","__webpack_require__.o","object","property","s","__webpack_exports__","constructor","LuminousGallery_LuminousGallery","triggers","options","luminousOpts","settings","assign","optionsDefaults","arrowNavigation","_gallery","_arrowNavigation","_constructLuminousInstances","Luminous_Luminous","trigger","destroy","open","close","_handleKeyup","isOpen","isDOMElement","TypeError","rootNode","document","getRootNode","appendToNode","body","namespace","sourceAttribute","caption","openTrigger","closeTrigger","closeWithEscape","closeOnScroll","closeButtonEnabled","showCloseButton","appendToSelector","onOpen","onClose","includeImgixJSClass","injectBaseStyles","injectionRoot","node","head","querySelector","styleEl","createElement","type","classList","add","appendChild","createTextNode","RULES","insertBefore","firstChild","_buildLightbox","_bindEventListeners","Lightbox_Lightbox","_sizeImgWrapperEl","showNext","showPrevious","_completeOpen","_completeClose","_handleKeydown","_handleClose","b","parentEl","throwIfMissing","triggerEl","F","w","currentTrigger","openClasses","_buildClasses","openingClasses","closingClasses","elementBuilt","hasBeenLoaded","obj","HAS_SHADOW","ShadowRoot","HAS_DOM_2","HTMLElement","nodeType","nodeName","addClasses","el","classNames","forEach","className","removeClasses","remove","Error","HAS_ANIMATION","style","e","M","preventDefault","aa","addEventListener","closeButtonEl","suffix","classes","push","ba","_buildElement","innerEl","loaderEl","imgWrapperEl","positionHelperEl","imgEl","captionEl","_setUpGalleryElements","_updateImgSrc","_updateCaption","ca","_buildGalleryButton","S","fn","btn","innerText","stopPropagation","width","clientWidth","maxWidth","height","clientHeight","maxHeight","O","captionType","innerHTML","P","a","imageURL","getAttribute","loadingClasses","onload","this.imgEl.onload","setAttribute","N","LEFT_ARROW","keyCode","RIGHT_ARROW","I","nextTrigger","J","previousTrigger","removeEventListener","L","j","removeChild","lightbox","_unbindEvents","h","luminousInstances","triggerLen","lum","ha","nextTriggerIndex","indexOf","ja","prevTriggerIndex","instance","LuminousGallery","Luminous"],"mappings":"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","file":"luminous.min.js","sourcesContent":[null,null,null,null,null,null," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/js/util/dom.js\n// This is not really a perfect check, but works fine.\n// From http://stackoverflow.com/questions/384286\nconst HAS_DOM_2 = typeof HTMLElement === \"object\";\nconst HAS_SHADOW = typeof ShadowRoot !== \"undefined\";\n\n/**\n * Determines whether an object is a DOM element or not.\n * @param {!Object} obj Object to check\n * @return {boolean} True if object is an element\n */\nfunction isDOMElement(obj) {\n if (HAS_SHADOW && obj instanceof ShadowRoot) {\n return true;\n }\n return HAS_DOM_2\n ? obj instanceof HTMLElement\n : obj &&\n typeof obj === \"object\" &&\n obj !== null &&\n obj.nodeType === 1 &&\n typeof obj.nodeName === \"string\";\n}\n\n/**\n * Adds an array of classes to an element\n * @param {!Element} el Element to add classes to\n * @param {!Array} classNames Class names to add\n * @return {void}\n */\nfunction addClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.add(className);\n });\n}\n\n/**\n * Removes an array of classes from an element\n * @param {!Element} el Element to remove classes from\n * @param {!Array} classNames Classes to remove\n * @return {void}\n */\nfunction removeClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.remove(className);\n });\n}\n\n// CONCATENATED MODULE: ./src/js/injectBaseStylesheet.js\n/* UNMINIFIED RULES\n\n@keyframes lum-noop {\n 0% { zoom: 1; }\n}\n\n.lum-lightbox {\n position: fixed;\n display: none;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n.lum-lightbox.lum-open {\n display: block;\n}\n\n.lum-lightbox.lum-opening, .lum-lightbox.lum-closing {\n animation: lum-noop 1ms;\n}\n\n.lum-lightbox-inner {\n position: absolute;\n top: 0%;\n right: 0%;\n bottom: 0%;\n left: 0%;\n\n overflow: hidden;\n}\n\n.lum-lightbox-loader {\n display: none;\n}\n\n.lum-lightbox-inner img {\n max-width: 100%;\n max-height: 100%;\n}\n\n.lum-lightbox-image-wrapper {\n vertical-align: middle;\n display: table-cell;\n text-align: center;\n}\n*/\n\nconst RULES = `@keyframes lum-noop{0%{zoom:1}}.lum-lightbox{position:fixed;display:none;top:0;right:0;bottom:0;left:0}.lum-lightbox.lum-open{display:block}.lum-lightbox.lum-closing,.lum-lightbox.lum-opening{animation:lum-noop 1ms}.lum-lightbox-inner{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.lum-lightbox-loader{display:none}.lum-lightbox-inner img{max-width:100%;max-height:100%}.lum-lightbox-image-wrapper{vertical-align:middle;display:table-cell;text-align:center}`;\n\n/**\n * Injects the base stylesheet needed to display the lightbox\n * element.\n * If `node` is the document, the stylesheet will be appended to ``.\n * @param {!Node} node Node to append stylesheet to\n * @return {void}\n */\nfunction injectBaseStylesheet(node) {\n if (!node || node === document) {\n node = document.head;\n }\n\n if (node.querySelector(\".lum-base-styles\")) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.type = \"text/css\";\n styleEl.classList.add(\"lum-base-styles\");\n\n styleEl.appendChild(document.createTextNode(RULES));\n\n node.insertBefore(styleEl, node.firstChild);\n}\n\n// CONCATENATED MODULE: ./src/js/util/throwIfMissing.js\n/**\n * Throws a missing parameter error\n */\nfunction throwIfMissing() {\n throw new Error(\"Missing parameter\");\n}\n\n// CONCATENATED MODULE: ./src/js/Lightbox.js\n\n\n\nconst LEFT_ARROW = 37;\nconst RIGHT_ARROW = 39;\n\n// All officially-supported browsers have this, but it's easy to\n// account for, just in case.\nconst HAS_ANIMATION =\n typeof document === \"undefined\"\n ? false\n : \"animation\" in document.createElement(\"div\").style;\n\n/**\n * Represents the default lightbox implementation\n */\nclass Lightbox_Lightbox {\n /**\n * Constructor\n * @param {Object=} options Lightbox options\n */\n constructor(options = {}) {\n this._sizeImgWrapperEl = this._sizeImgWrapperEl.bind(this);\n this.showNext = this.showNext.bind(this);\n this.showPrevious = this.showPrevious.bind(this);\n this._completeOpen = this._completeOpen.bind(this);\n this._completeClose = this._completeClose.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleClose = this._handleClose.bind(this);\n\n const {\n namespace = null,\n parentEl = throwIfMissing(),\n triggerEl = throwIfMissing(),\n sourceAttribute = throwIfMissing(),\n caption = null,\n includeImgixJSClass = false,\n _gallery = null,\n _arrowNavigation = null,\n closeButtonEnabled = true,\n closeTrigger = \"click\"\n } = options;\n\n this.settings = {\n namespace,\n parentEl,\n triggerEl,\n sourceAttribute,\n caption,\n includeImgixJSClass,\n _gallery,\n _arrowNavigation,\n closeButtonEnabled,\n onClose: options.onClose,\n closeTrigger\n };\n\n if (!isDOMElement(this.settings.parentEl)) {\n throw new TypeError(\n \"`new Lightbox` requires a DOM element passed as `parentEl`.\"\n );\n }\n\n this.currentTrigger = this.settings.triggerEl;\n\n this.openClasses = this._buildClasses(\"open\");\n this.openingClasses = this._buildClasses(\"opening\");\n this.closingClasses = this._buildClasses(\"closing\");\n\n this.hasBeenLoaded = false;\n this.elementBuilt = false;\n }\n\n /**\n * Handles closing of the lightbox\n * @param {!Event} e Event that triggered closing\n * @return {void}\n * @protected\n */\n _handleClose(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n const onClose = this.settings.onClose;\n if (onClose && typeof onClose === \"function\") {\n onClose();\n }\n }\n\n /**\n * Binds event listeners to the trigger element\n * @return {void}\n * @protected\n */\n _bindEventListeners() {\n this.el.addEventListener(this.settings.closeTrigger, this._handleClose);\n if (this.closeButtonEl) {\n this.closeButtonEl.addEventListener(\"click\", this._handleClose);\n }\n }\n\n /**\n * Builds a class list using the namespace and suffix, if any.\n * @param {string} suffix Suffix to add to each class\n * @return {!Array} Class list\n * @protected\n */\n _buildClasses(suffix) {\n const classes = [`lum-${suffix}`];\n\n const ns = this.settings.namespace;\n if (ns) {\n classes.push(`${ns}-${suffix}`);\n }\n\n return classes;\n }\n\n /**\n * Creates the lightbox element\n * @return {void}\n * @protected\n */\n _buildElement() {\n this.el = document.createElement(\"div\");\n addClasses(this.el, this._buildClasses(\"lightbox\"));\n\n this.innerEl = document.createElement(\"div\");\n addClasses(this.innerEl, this._buildClasses(\"lightbox-inner\"));\n this.el.appendChild(this.innerEl);\n\n const loaderEl = document.createElement(\"div\");\n addClasses(loaderEl, this._buildClasses(\"lightbox-loader\"));\n this.innerEl.appendChild(loaderEl);\n\n this.imgWrapperEl = document.createElement(\"div\");\n addClasses(this.imgWrapperEl, this._buildClasses(\"lightbox-image-wrapper\"));\n this.innerEl.appendChild(this.imgWrapperEl);\n\n const positionHelperEl = document.createElement(\"span\");\n addClasses(\n positionHelperEl,\n this._buildClasses(\"lightbox-position-helper\")\n );\n this.imgWrapperEl.appendChild(positionHelperEl);\n\n this.imgEl = document.createElement(\"img\");\n addClasses(this.imgEl, this._buildClasses(\"img\"));\n positionHelperEl.appendChild(this.imgEl);\n\n this.captionEl = document.createElement(\"p\");\n addClasses(this.captionEl, this._buildClasses(\"lightbox-caption\"));\n positionHelperEl.appendChild(this.captionEl);\n\n if (this.settings.closeButtonEnabled) {\n this.closeButtonEl = document.createElement(\"div\");\n addClasses(this.closeButtonEl, this._buildClasses(\"close-button\"));\n this.el.appendChild(this.closeButtonEl);\n }\n\n if (this.settings._gallery) {\n this._setUpGalleryElements();\n }\n\n this.settings.parentEl.appendChild(this.el);\n\n this._updateImgSrc();\n this._updateCaption();\n\n if (this.settings.includeImgixJSClass) {\n this.imgEl.classList.add(\"imgix-fluid\");\n }\n }\n\n /**\n * Creates gallery elements such as previous/next buttons\n * @return {void}\n * @protected\n */\n _setUpGalleryElements() {\n this._buildGalleryButton(\"previous\", this.showPrevious);\n this._buildGalleryButton(\"next\", this.showNext);\n }\n\n /**\n * Creates a gallery button\n * @param {string} name Name of button\n * @param {!Function} fn Click handler\n * @return {void}\n * @protected\n */\n _buildGalleryButton(name, fn) {\n const btn = document.createElement(\"button\");\n this[`${name}Button`] = btn;\n\n btn.innerText = name;\n addClasses(btn, this._buildClasses(`${name}-button`));\n addClasses(btn, this._buildClasses(\"gallery-button\"));\n this.innerEl.appendChild(btn);\n\n btn.addEventListener(\n \"click\",\n e => {\n e.stopPropagation();\n\n fn();\n },\n false\n );\n }\n\n /**\n * Sizes the image wrapper\n * @return {void}\n * @protected\n */\n _sizeImgWrapperEl() {\n const style = this.imgWrapperEl.style;\n style.width = `${this.innerEl.clientWidth}px`;\n style.maxWidth = `${this.innerEl.clientWidth}px`;\n style.height = `${this.innerEl.clientHeight -\n this.captionEl.clientHeight}px`;\n style.maxHeight = `${this.innerEl.clientHeight -\n this.captionEl.clientHeight}px`;\n }\n\n /**\n * Updates caption from settings\n * @return {void}\n * @protected\n */\n _updateCaption() {\n const captionType = typeof this.settings.caption;\n let caption = \"\";\n\n if (captionType === \"string\") {\n caption = this.settings.caption;\n } else if (captionType === \"function\") {\n caption = this.settings.caption(this.currentTrigger);\n }\n\n this.captionEl.innerHTML = caption;\n }\n\n /**\n * Updates image element from the trigger element's attributes\n * @return {void}\n * @protected\n */\n _updateImgSrc() {\n const imageURL = this.currentTrigger.getAttribute(\n this.settings.sourceAttribute\n );\n\n if (!imageURL) {\n throw new Error(\n `No image URL was found in the ${\n this.settings.sourceAttribute\n } attribute of the trigger.`\n );\n }\n\n const loadingClasses = this._buildClasses(\"loading\");\n\n if (!this.hasBeenLoaded) {\n addClasses(this.el, loadingClasses);\n }\n\n this.imgEl.onload = () => {\n removeClasses(this.el, loadingClasses);\n this.hasBeenLoaded = true;\n };\n\n this.imgEl.setAttribute(\"src\", imageURL);\n }\n\n /**\n * Handles key up/down events for moving between items\n * @param {!Event} e Keyboard event\n * @return {void}\n * @protected\n */\n _handleKeydown(e) {\n if (e.keyCode == LEFT_ARROW) {\n this.showPrevious();\n } else if (e.keyCode == RIGHT_ARROW) {\n this.showNext();\n }\n }\n\n /**\n * Shows the next item if in a gallery\n * @return {void}\n */\n showNext() {\n if (!this.settings._gallery) {\n return;\n }\n\n this.currentTrigger = this.settings._gallery.nextTrigger(\n this.currentTrigger\n );\n this._updateImgSrc();\n this._updateCaption();\n this._sizeImgWrapperEl();\n }\n\n /**\n * Shows the previous item if in a gallery\n * @return {void}\n */\n showPrevious() {\n if (!this.settings._gallery) {\n return;\n }\n\n this.currentTrigger = this.settings._gallery.previousTrigger(\n this.currentTrigger\n );\n this._updateImgSrc();\n this._updateCaption();\n this._sizeImgWrapperEl();\n }\n\n /**\n * Opens the lightbox\n * @return {void}\n */\n open() {\n if (!this.elementBuilt) {\n this._buildElement();\n this._bindEventListeners();\n this.elementBuilt = true;\n }\n\n // When opening, always reset to the trigger we were passed\n this.currentTrigger = this.settings.triggerEl;\n\n // Make sure to re-set the `img` `src`, in case it's been changed\n // by someone/something else.\n this._updateImgSrc();\n this._updateCaption();\n\n addClasses(this.el, this.openClasses);\n\n this._sizeImgWrapperEl();\n window.addEventListener(\"resize\", this._sizeImgWrapperEl, false);\n\n if (this.settings._arrowNavigation) {\n window.addEventListener(\"keydown\", this._handleKeydown, false);\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeOpen, false);\n addClasses(this.el, this.openingClasses);\n }\n }\n\n /**\n * Closes the lightbox\n * @return {void}\n */\n close() {\n window.removeEventListener(\"resize\", this._sizeImgWrapperEl, false);\n\n if (this.settings._arrowNavigation) {\n window.removeEventListener(\"keydown\", this._handleKeydown, false);\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeClose, false);\n addClasses(this.el, this.closingClasses);\n } else {\n removeClasses(this.el, this.openClasses);\n }\n }\n\n /**\n * Handles animations on completion of opening the lightbox\n * @return {void}\n * @protected\n */\n _completeOpen() {\n this.el.removeEventListener(\"animationend\", this._completeOpen, false);\n\n removeClasses(this.el, this.openingClasses);\n }\n\n /**\n * Handles animations on completion of closing the lightbox\n * @return {void}\n * @protected\n */\n _completeClose() {\n this.el.removeEventListener(\"animationend\", this._completeClose, false);\n\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.closingClasses);\n }\n\n /**\n * Destroys the lightbox\n * @return {void}\n */\n destroy() {\n if (this.el) {\n this.settings.parentEl.removeChild(this.el);\n }\n }\n}\n\n// CONCATENATED MODULE: ./src/js/Luminous.js\n\n\n\n\n/**\n * Represents the default luminous lightbox\n */\nclass Luminous_Luminous {\n /**\n * Constructor\n * @param {!Element} trigger Trigger element to open lightbox\n * @param {Object=} options Luminous options\n */\n constructor(trigger, options = {}) {\n this.VERSION = \"2.3.2\";\n this.destroy = this.destroy.bind(this);\n this.open = this.open.bind(this);\n this.close = this.close.bind(this);\n this._handleKeyup = this._handleKeyup.bind(this);\n\n this.isOpen = false;\n\n this.trigger = trigger;\n\n if (!isDOMElement(this.trigger)) {\n throw new TypeError(\n \"`new Luminous` requires a DOM element as its first argument.\"\n );\n }\n\n let rootNode = document;\n if (\"getRootNode\" in this.trigger) {\n rootNode = this.trigger.getRootNode();\n }\n // Prefix for generated element class names (e.g. `my-ns` will\n // result in classes such as `my-ns-lightbox`. Default `lum-`\n // prefixed classes will always be added as well.\n const namespace = options[\"namespace\"] || null;\n // Which attribute to pull the lightbox image source from.\n const sourceAttribute = options[\"sourceAttribute\"] || \"href\";\n // Captions can be a literal string, or a function that receives the Luminous instance's trigger element as an argument and returns a string. Supports HTML, so use caution when dealing with user input.\n const caption = options[\"caption\"] || null;\n // The event to listen to on the _trigger_ element: triggers opening.\n const openTrigger = options[\"openTrigger\"] || \"click\";\n // The event to listen to on the _lightbox_ element: triggers closing.\n const closeTrigger = options[\"closeTrigger\"] || \"click\";\n // Allow closing by pressing escape.\n const closeWithEscape = options[\"closeWithEscape\"] || true;\n // Automatically close when the page is scrolled.\n const closeOnScroll = options[\"closeOnScroll\"] || false;\n const closeButtonEnabled =\n options[\"showCloseButton\"] != null ? options[\"showCloseButton\"] : true;\n const appendToNode =\n options[\"appendToNode\"] ||\n (rootNode === document ? document.body : rootNode);\n // A selector defining what to append the lightbox element to.\n const appendToSelector = options[\"appendToSelector\"] || null;\n // If present (and a function), this will be called\n // whenever the lightbox is opened.\n const onOpen = options[\"onOpen\"] || null;\n // If present (and a function), this will be called\n // whenever the lightbox is closed.\n const onClose = options[\"onClose\"] || null;\n // When true, adds the `imgix-fluid` class to the `img`\n // inside the lightbox. See https://github.com/imgix/imgix.js\n // for more information.\n const includeImgixJSClass = options[\"includeImgixJSClass\"] || false;\n // Add base styles to the page. See the \"Theming\"\n // section of README.md for more information.\n const injectBaseStyles = options[\"injectBaseStyles\"] || true;\n // Internal use only!\n const _gallery = options[\"_gallery\"] || null;\n const _arrowNavigation = options[\"_arrowNavigation\"] || null;\n\n this.settings = {\n namespace,\n sourceAttribute,\n caption,\n openTrigger,\n closeTrigger,\n closeWithEscape,\n closeOnScroll,\n closeButtonEnabled,\n appendToNode,\n appendToSelector,\n onOpen,\n onClose,\n includeImgixJSClass,\n injectBaseStyles,\n _gallery,\n _arrowNavigation\n };\n\n let injectionRoot = document.body;\n if (appendToNode && \"getRootNode\" in appendToNode) {\n injectionRoot = appendToNode.getRootNode();\n }\n\n if (this.settings.injectBaseStyles) {\n injectBaseStylesheet(injectionRoot);\n }\n\n this._buildLightbox();\n this._bindEventListeners();\n }\n\n /**\n * Opens the lightbox\n * @param {Event=} e Event which triggered opening\n * @return {void}\n */\n open(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n this.lightbox.open();\n\n if (this.settings.closeOnScroll) {\n window.addEventListener(\"scroll\", this.close, false);\n }\n\n const onOpen = this.settings.onOpen;\n if (onOpen && typeof onOpen === \"function\") {\n onOpen();\n }\n\n this.isOpen = true;\n }\n\n /**\n * Closes the lightbox\n * @param {Event=} e Event which triggered closing\n * @return {void}\n */\n close(e) {\n if (this.settings.closeOnScroll) {\n window.removeEventListener(\"scroll\", this.close, false);\n }\n\n this.lightbox.close();\n\n const onClose = this.settings.onClose;\n if (onClose && typeof onClose === \"function\") {\n onClose();\n }\n\n this.isOpen = false;\n }\n\n /**\n * Builds the internal lightbox instance\n * @protected\n * @return {void}\n */\n _buildLightbox() {\n let parentEl = this.settings.appendToNode;\n\n if (this.settings.appendToSelector) {\n parentEl = document.querySelector(this.settings.appendToSelector);\n }\n\n this.lightbox = new Lightbox_Lightbox({\n namespace: this.settings.namespace,\n parentEl: parentEl,\n triggerEl: this.trigger,\n sourceAttribute: this.settings.sourceAttribute,\n caption: this.settings.caption,\n includeImgixJSClass: this.settings.includeImgixJSClass,\n closeButtonEnabled: this.settings.closeButtonEnabled,\n _gallery: this.settings._gallery,\n _arrowNavigation: this.settings._arrowNavigation,\n closeTrigger: this.settings.closeTrigger,\n onClose: this.close\n });\n }\n\n /**\n * Binds lightbox events to the trigger element\n * @protected\n * @return {void}\n */\n _bindEventListeners() {\n this.trigger.addEventListener(this.settings.openTrigger, this.open, false);\n\n if (this.settings.closeWithEscape) {\n window.addEventListener(\"keyup\", this._handleKeyup, false);\n }\n }\n\n /**\n * Unbinds all events\n * @protected\n * @return {void}\n */\n _unbindEvents() {\n this.trigger.removeEventListener(\n this.settings.openTrigger,\n this.open,\n false\n );\n if (this.lightbox.el) {\n this.lightbox.el.removeEventListener(\n this.settings.closeTrigger,\n this.close,\n false\n );\n }\n\n if (this.settings.closeWithEscape) {\n window.removeEventListener(\"keyup\", this._handleKeyup, false);\n }\n }\n\n /**\n * Handles key up events and closes lightbox when esc is pressed\n * @param {!Event} e Keyboard event\n * @return {void}\n * @protected\n */\n _handleKeyup(e) {\n if (this.isOpen && e.keyCode === 27) {\n this.close();\n }\n }\n\n /**\n * Destroys internal lightbox and unbinds events\n * @return {void}\n */\n destroy() {\n this._unbindEvents();\n this.lightbox.destroy();\n }\n}\n\n/* eslint-disable no-self-assign */\nLuminous_Luminous.prototype[\"open\"] = Luminous_Luminous.prototype.open;\nLuminous_Luminous.prototype[\"close\"] = Luminous_Luminous.prototype.close;\nLuminous_Luminous.prototype[\"destroy\"] = Luminous_Luminous.prototype.destroy;\n/* eslint-enable no-self-assign */\n\n// CONCATENATED MODULE: ./src/js/LuminousGallery.js\n\n\n/**\n * Represents a gallery-style lightbox\n */\nclass LuminousGallery_LuminousGallery {\n /**\n * Constructor\n * @param {!Array} triggers Array of trigger elements\n * @param {Object=} options Gallery options\n * @param {Object=} luminousOpts Luminous options\n */\n constructor(triggers, options = {}, luminousOpts = {}) {\n const optionsDefaults = {\n arrowNavigation: true\n };\n\n this.settings = Object.assign({}, optionsDefaults, options);\n\n this.triggers = triggers;\n this.luminousOpts = luminousOpts;\n this.luminousOpts[\"_gallery\"] = this;\n this.luminousOpts[\"_arrowNavigation\"] = this.settings[\"arrowNavigation\"];\n this._constructLuminousInstances();\n }\n\n /**\n * Creates internal luminous instances\n * @protected\n * @return {void}\n */\n _constructLuminousInstances() {\n this.luminousInstances = [];\n\n const triggerLen = this.triggers.length;\n for (let i = 0; i < triggerLen; i++) {\n const trigger = this.triggers[i];\n const lum = new Luminous_Luminous(trigger, this.luminousOpts);\n this.luminousInstances.push(lum);\n }\n }\n\n /**\n * Determines the next trigger element\n * @param {!Element} trigger Current trigger element\n * @return {!Element}\n */\n nextTrigger(trigger) {\n const nextTriggerIndex =\n Array.prototype.indexOf.call(this.triggers, trigger) + 1;\n\n return nextTriggerIndex >= this.triggers.length\n ? this.triggers[0]\n : this.triggers[nextTriggerIndex];\n }\n\n /**\n * Determines the previous trigger element\n * @param {!Element} trigger Current trigger element\n * @return {!Element}\n */\n previousTrigger(trigger) {\n const prevTriggerIndex =\n Array.prototype.indexOf.call(this.triggers, trigger) - 1;\n\n return prevTriggerIndex < 0\n ? this.triggers[this.triggers.length - 1]\n : this.triggers[prevTriggerIndex];\n }\n\n /**\n * Destroys the internal luminous instances\n * @return {void}\n */\n destroy() {\n this.luminousInstances.forEach(instance => instance.destroy());\n }\n}\n\n/* eslint-disable-next-line no-self-assign */\nLuminousGallery_LuminousGallery.prototype[\"destroy\"] = LuminousGallery_LuminousGallery.prototype.destroy;\n\n// CONCATENATED MODULE: ./src/js/lum-browser.js\n// This file is used for the standalone browser build\n\n\n\n\nwindow[\"LuminousGallery\"] = LuminousGallery_LuminousGallery;\nwindow[\"Luminous\"] = Luminous_Luminous;\n\n\n/***/ })\n/******/ ]);","import Luminous from \"./Luminous\";\n\n/**\n * Represents a gallery-style lightbox\n */\nexport default class LuminousGallery {\n /**\n * Constructor\n * @param {!Array} triggers Array of trigger elements\n * @param {Object=} options Gallery options\n * @param {Object=} luminousOpts Luminous options\n */\n constructor(triggers, options = {}, luminousOpts = {}) {\n const optionsDefaults = {\n arrowNavigation: true\n };\n\n this.settings = Object.assign({}, optionsDefaults, options);\n\n this.triggers = triggers;\n this.luminousOpts = luminousOpts;\n this.luminousOpts[\"_gallery\"] = this;\n this.luminousOpts[\"_arrowNavigation\"] = this.settings[\"arrowNavigation\"];\n this._constructLuminousInstances();\n }\n\n /**\n * Creates internal luminous instances\n * @protected\n * @return {void}\n */\n _constructLuminousInstances() {\n this.luminousInstances = [];\n\n const triggerLen = this.triggers.length;\n for (let i = 0; i < triggerLen; i++) {\n const trigger = this.triggers[i];\n const lum = new Luminous(trigger, this.luminousOpts);\n this.luminousInstances.push(lum);\n }\n }\n\n /**\n * Determines the next trigger element\n * @param {!Element} trigger Current trigger element\n * @return {!Element}\n */\n nextTrigger(trigger) {\n const nextTriggerIndex =\n Array.prototype.indexOf.call(this.triggers, trigger) + 1;\n\n return nextTriggerIndex >= this.triggers.length\n ? this.triggers[0]\n : this.triggers[nextTriggerIndex];\n }\n\n /**\n * Determines the previous trigger element\n * @param {!Element} trigger Current trigger element\n * @return {!Element}\n */\n previousTrigger(trigger) {\n const prevTriggerIndex =\n Array.prototype.indexOf.call(this.triggers, trigger) - 1;\n\n return prevTriggerIndex < 0\n ? this.triggers[this.triggers.length - 1]\n : this.triggers[prevTriggerIndex];\n }\n\n /**\n * Destroys the internal luminous instances\n * @return {void}\n */\n destroy() {\n this.luminousInstances.forEach(instance => instance.destroy());\n }\n}\n\n/* eslint-disable-next-line no-self-assign */\nLuminousGallery.prototype[\"destroy\"] = LuminousGallery.prototype.destroy;\n","import { isDOMElement } from \"./util/dom\";\nimport injectBaseStylesheet from \"./injectBaseStylesheet\";\nimport Lightbox from \"./Lightbox\";\n\n/**\n * Represents the default luminous lightbox\n */\nexport default class Luminous {\n /**\n * Constructor\n * @param {!Element} trigger Trigger element to open lightbox\n * @param {Object=} options Luminous options\n */\n constructor(trigger, options = {}) {\n this.VERSION = \"2.3.2\";\n this.destroy = this.destroy.bind(this);\n this.open = this.open.bind(this);\n this.close = this.close.bind(this);\n this._handleKeyup = this._handleKeyup.bind(this);\n\n this.isOpen = false;\n\n this.trigger = trigger;\n\n if (!isDOMElement(this.trigger)) {\n throw new TypeError(\n \"`new Luminous` requires a DOM element as its first argument.\"\n );\n }\n\n let rootNode = document;\n if (\"getRootNode\" in this.trigger) {\n rootNode = this.trigger.getRootNode();\n }\n // Prefix for generated element class names (e.g. `my-ns` will\n // result in classes such as `my-ns-lightbox`. Default `lum-`\n // prefixed classes will always be added as well.\n const namespace = options[\"namespace\"] || null;\n // Which attribute to pull the lightbox image source from.\n const sourceAttribute = options[\"sourceAttribute\"] || \"href\";\n // Captions can be a literal string, or a function that receives the Luminous instance's trigger element as an argument and returns a string. Supports HTML, so use caution when dealing with user input.\n const caption = options[\"caption\"] || null;\n // The event to listen to on the _trigger_ element: triggers opening.\n const openTrigger = options[\"openTrigger\"] || \"click\";\n // The event to listen to on the _lightbox_ element: triggers closing.\n const closeTrigger = options[\"closeTrigger\"] || \"click\";\n // Allow closing by pressing escape.\n const closeWithEscape = options[\"closeWithEscape\"] || true;\n // Automatically close when the page is scrolled.\n const closeOnScroll = options[\"closeOnScroll\"] || false;\n const closeButtonEnabled =\n options[\"showCloseButton\"] != null ? options[\"showCloseButton\"] : true;\n const appendToNode =\n options[\"appendToNode\"] ||\n (rootNode === document ? document.body : rootNode);\n // A selector defining what to append the lightbox element to.\n const appendToSelector = options[\"appendToSelector\"] || null;\n // If present (and a function), this will be called\n // whenever the lightbox is opened.\n const onOpen = options[\"onOpen\"] || null;\n // If present (and a function), this will be called\n // whenever the lightbox is closed.\n const onClose = options[\"onClose\"] || null;\n // When true, adds the `imgix-fluid` class to the `img`\n // inside the lightbox. See https://github.com/imgix/imgix.js\n // for more information.\n const includeImgixJSClass = options[\"includeImgixJSClass\"] || false;\n // Add base styles to the page. See the \"Theming\"\n // section of README.md for more information.\n const injectBaseStyles = options[\"injectBaseStyles\"] || true;\n // Internal use only!\n const _gallery = options[\"_gallery\"] || null;\n const _arrowNavigation = options[\"_arrowNavigation\"] || null;\n\n this.settings = {\n namespace,\n sourceAttribute,\n caption,\n openTrigger,\n closeTrigger,\n closeWithEscape,\n closeOnScroll,\n closeButtonEnabled,\n appendToNode,\n appendToSelector,\n onOpen,\n onClose,\n includeImgixJSClass,\n injectBaseStyles,\n _gallery,\n _arrowNavigation\n };\n\n let injectionRoot = document.body;\n if (appendToNode && \"getRootNode\" in appendToNode) {\n injectionRoot = appendToNode.getRootNode();\n }\n\n if (this.settings.injectBaseStyles) {\n injectBaseStylesheet(injectionRoot);\n }\n\n this._buildLightbox();\n this._bindEventListeners();\n }\n\n /**\n * Opens the lightbox\n * @param {Event=} e Event which triggered opening\n * @return {void}\n */\n open(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n this.lightbox.open();\n\n if (this.settings.closeOnScroll) {\n window.addEventListener(\"scroll\", this.close, false);\n }\n\n const onOpen = this.settings.onOpen;\n if (onOpen && typeof onOpen === \"function\") {\n onOpen();\n }\n\n this.isOpen = true;\n }\n\n /**\n * Closes the lightbox\n * @param {Event=} e Event which triggered closing\n * @return {void}\n */\n close(e) {\n if (this.settings.closeOnScroll) {\n window.removeEventListener(\"scroll\", this.close, false);\n }\n\n this.lightbox.close();\n\n const onClose = this.settings.onClose;\n if (onClose && typeof onClose === \"function\") {\n onClose();\n }\n\n this.isOpen = false;\n }\n\n /**\n * Builds the internal lightbox instance\n * @protected\n * @return {void}\n */\n _buildLightbox() {\n let parentEl = this.settings.appendToNode;\n\n if (this.settings.appendToSelector) {\n parentEl = document.querySelector(this.settings.appendToSelector);\n }\n\n this.lightbox = new Lightbox({\n namespace: this.settings.namespace,\n parentEl: parentEl,\n triggerEl: this.trigger,\n sourceAttribute: this.settings.sourceAttribute,\n caption: this.settings.caption,\n includeImgixJSClass: this.settings.includeImgixJSClass,\n closeButtonEnabled: this.settings.closeButtonEnabled,\n _gallery: this.settings._gallery,\n _arrowNavigation: this.settings._arrowNavigation,\n closeTrigger: this.settings.closeTrigger,\n onClose: this.close\n });\n }\n\n /**\n * Binds lightbox events to the trigger element\n * @protected\n * @return {void}\n */\n _bindEventListeners() {\n this.trigger.addEventListener(this.settings.openTrigger, this.open, false);\n\n if (this.settings.closeWithEscape) {\n window.addEventListener(\"keyup\", this._handleKeyup, false);\n }\n }\n\n /**\n * Unbinds all events\n * @protected\n * @return {void}\n */\n _unbindEvents() {\n this.trigger.removeEventListener(\n this.settings.openTrigger,\n this.open,\n false\n );\n if (this.lightbox.el) {\n this.lightbox.el.removeEventListener(\n this.settings.closeTrigger,\n this.close,\n false\n );\n }\n\n if (this.settings.closeWithEscape) {\n window.removeEventListener(\"keyup\", this._handleKeyup, false);\n }\n }\n\n /**\n * Handles key up events and closes lightbox when esc is pressed\n * @param {!Event} e Keyboard event\n * @return {void}\n * @protected\n */\n _handleKeyup(e) {\n if (this.isOpen && e.keyCode === 27) {\n this.close();\n }\n }\n\n /**\n * Destroys internal lightbox and unbinds events\n * @return {void}\n */\n destroy() {\n this._unbindEvents();\n this.lightbox.destroy();\n }\n}\n\n/* eslint-disable no-self-assign */\nLuminous.prototype[\"open\"] = Luminous.prototype.open;\nLuminous.prototype[\"close\"] = Luminous.prototype.close;\nLuminous.prototype[\"destroy\"] = Luminous.prototype.destroy;\n/* eslint-enable no-self-assign */\n","/* UNMINIFIED RULES\n\n@keyframes lum-noop {\n 0% { zoom: 1; }\n}\n\n.lum-lightbox {\n position: fixed;\n display: none;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n.lum-lightbox.lum-open {\n display: block;\n}\n\n.lum-lightbox.lum-opening, .lum-lightbox.lum-closing {\n animation: lum-noop 1ms;\n}\n\n.lum-lightbox-inner {\n position: absolute;\n top: 0%;\n right: 0%;\n bottom: 0%;\n left: 0%;\n\n overflow: hidden;\n}\n\n.lum-lightbox-loader {\n display: none;\n}\n\n.lum-lightbox-inner img {\n max-width: 100%;\n max-height: 100%;\n}\n\n.lum-lightbox-image-wrapper {\n vertical-align: middle;\n display: table-cell;\n text-align: center;\n}\n*/\n\nconst RULES = `@keyframes lum-noop{0%{zoom:1}}.lum-lightbox{position:fixed;display:none;top:0;right:0;bottom:0;left:0}.lum-lightbox.lum-open{display:block}.lum-lightbox.lum-closing,.lum-lightbox.lum-opening{animation:lum-noop 1ms}.lum-lightbox-inner{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.lum-lightbox-loader{display:none}.lum-lightbox-inner img{max-width:100%;max-height:100%}.lum-lightbox-image-wrapper{vertical-align:middle;display:table-cell;text-align:center}`;\n\n/**\n * Injects the base stylesheet needed to display the lightbox\n * element.\n * If `node` is the document, the stylesheet will be appended to ``.\n * @param {!Node} node Node to append stylesheet to\n * @return {void}\n */\nexport default function injectBaseStylesheet(node) {\n if (!node || node === document) {\n node = document.head;\n }\n\n if (node.querySelector(\".lum-base-styles\")) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.type = \"text/css\";\n styleEl.classList.add(\"lum-base-styles\");\n\n styleEl.appendChild(document.createTextNode(RULES));\n\n node.insertBefore(styleEl, node.firstChild);\n}\n","import { isDOMElement, addClasses, removeClasses } from \"./util/dom\";\nimport throwIfMissing from \"./util/throwIfMissing\";\n\nconst LEFT_ARROW = 37;\nconst RIGHT_ARROW = 39;\n\n// All officially-supported browsers have this, but it's easy to\n// account for, just in case.\nconst HAS_ANIMATION =\n typeof document === \"undefined\"\n ? false\n : \"animation\" in document.createElement(\"div\").style;\n\n/**\n * Represents the default lightbox implementation\n */\nexport default class Lightbox {\n /**\n * Constructor\n * @param {Object=} options Lightbox options\n */\n constructor(options = {}) {\n this._sizeImgWrapperEl = this._sizeImgWrapperEl.bind(this);\n this.showNext = this.showNext.bind(this);\n this.showPrevious = this.showPrevious.bind(this);\n this._completeOpen = this._completeOpen.bind(this);\n this._completeClose = this._completeClose.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleClose = this._handleClose.bind(this);\n\n const {\n namespace = null,\n parentEl = throwIfMissing(),\n triggerEl = throwIfMissing(),\n sourceAttribute = throwIfMissing(),\n caption = null,\n includeImgixJSClass = false,\n _gallery = null,\n _arrowNavigation = null,\n closeButtonEnabled = true,\n closeTrigger = \"click\"\n } = options;\n\n this.settings = {\n namespace,\n parentEl,\n triggerEl,\n sourceAttribute,\n caption,\n includeImgixJSClass,\n _gallery,\n _arrowNavigation,\n closeButtonEnabled,\n onClose: options.onClose,\n closeTrigger\n };\n\n if (!isDOMElement(this.settings.parentEl)) {\n throw new TypeError(\n \"`new Lightbox` requires a DOM element passed as `parentEl`.\"\n );\n }\n\n this.currentTrigger = this.settings.triggerEl;\n\n this.openClasses = this._buildClasses(\"open\");\n this.openingClasses = this._buildClasses(\"opening\");\n this.closingClasses = this._buildClasses(\"closing\");\n\n this.hasBeenLoaded = false;\n this.elementBuilt = false;\n }\n\n /**\n * Handles closing of the lightbox\n * @param {!Event} e Event that triggered closing\n * @return {void}\n * @protected\n */\n _handleClose(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n const onClose = this.settings.onClose;\n if (onClose && typeof onClose === \"function\") {\n onClose();\n }\n }\n\n /**\n * Binds event listeners to the trigger element\n * @return {void}\n * @protected\n */\n _bindEventListeners() {\n this.el.addEventListener(this.settings.closeTrigger, this._handleClose);\n if (this.closeButtonEl) {\n this.closeButtonEl.addEventListener(\"click\", this._handleClose);\n }\n }\n\n /**\n * Builds a class list using the namespace and suffix, if any.\n * @param {string} suffix Suffix to add to each class\n * @return {!Array} Class list\n * @protected\n */\n _buildClasses(suffix) {\n const classes = [`lum-${suffix}`];\n\n const ns = this.settings.namespace;\n if (ns) {\n classes.push(`${ns}-${suffix}`);\n }\n\n return classes;\n }\n\n /**\n * Creates the lightbox element\n * @return {void}\n * @protected\n */\n _buildElement() {\n this.el = document.createElement(\"div\");\n addClasses(this.el, this._buildClasses(\"lightbox\"));\n\n this.innerEl = document.createElement(\"div\");\n addClasses(this.innerEl, this._buildClasses(\"lightbox-inner\"));\n this.el.appendChild(this.innerEl);\n\n const loaderEl = document.createElement(\"div\");\n addClasses(loaderEl, this._buildClasses(\"lightbox-loader\"));\n this.innerEl.appendChild(loaderEl);\n\n this.imgWrapperEl = document.createElement(\"div\");\n addClasses(this.imgWrapperEl, this._buildClasses(\"lightbox-image-wrapper\"));\n this.innerEl.appendChild(this.imgWrapperEl);\n\n const positionHelperEl = document.createElement(\"span\");\n addClasses(\n positionHelperEl,\n this._buildClasses(\"lightbox-position-helper\")\n );\n this.imgWrapperEl.appendChild(positionHelperEl);\n\n this.imgEl = document.createElement(\"img\");\n addClasses(this.imgEl, this._buildClasses(\"img\"));\n positionHelperEl.appendChild(this.imgEl);\n\n this.captionEl = document.createElement(\"p\");\n addClasses(this.captionEl, this._buildClasses(\"lightbox-caption\"));\n positionHelperEl.appendChild(this.captionEl);\n\n if (this.settings.closeButtonEnabled) {\n this.closeButtonEl = document.createElement(\"div\");\n addClasses(this.closeButtonEl, this._buildClasses(\"close-button\"));\n this.el.appendChild(this.closeButtonEl);\n }\n\n if (this.settings._gallery) {\n this._setUpGalleryElements();\n }\n\n this.settings.parentEl.appendChild(this.el);\n\n this._updateImgSrc();\n this._updateCaption();\n\n if (this.settings.includeImgixJSClass) {\n this.imgEl.classList.add(\"imgix-fluid\");\n }\n }\n\n /**\n * Creates gallery elements such as previous/next buttons\n * @return {void}\n * @protected\n */\n _setUpGalleryElements() {\n this._buildGalleryButton(\"previous\", this.showPrevious);\n this._buildGalleryButton(\"next\", this.showNext);\n }\n\n /**\n * Creates a gallery button\n * @param {string} name Name of button\n * @param {!Function} fn Click handler\n * @return {void}\n * @protected\n */\n _buildGalleryButton(name, fn) {\n const btn = document.createElement(\"button\");\n this[`${name}Button`] = btn;\n\n btn.innerText = name;\n addClasses(btn, this._buildClasses(`${name}-button`));\n addClasses(btn, this._buildClasses(\"gallery-button\"));\n this.innerEl.appendChild(btn);\n\n btn.addEventListener(\n \"click\",\n e => {\n e.stopPropagation();\n\n fn();\n },\n false\n );\n }\n\n /**\n * Sizes the image wrapper\n * @return {void}\n * @protected\n */\n _sizeImgWrapperEl() {\n const style = this.imgWrapperEl.style;\n style.width = `${this.innerEl.clientWidth}px`;\n style.maxWidth = `${this.innerEl.clientWidth}px`;\n style.height = `${this.innerEl.clientHeight -\n this.captionEl.clientHeight}px`;\n style.maxHeight = `${this.innerEl.clientHeight -\n this.captionEl.clientHeight}px`;\n }\n\n /**\n * Updates caption from settings\n * @return {void}\n * @protected\n */\n _updateCaption() {\n const captionType = typeof this.settings.caption;\n let caption = \"\";\n\n if (captionType === \"string\") {\n caption = this.settings.caption;\n } else if (captionType === \"function\") {\n caption = this.settings.caption(this.currentTrigger);\n }\n\n this.captionEl.innerHTML = caption;\n }\n\n /**\n * Updates image element from the trigger element's attributes\n * @return {void}\n * @protected\n */\n _updateImgSrc() {\n const imageURL = this.currentTrigger.getAttribute(\n this.settings.sourceAttribute\n );\n\n if (!imageURL) {\n throw new Error(\n `No image URL was found in the ${\n this.settings.sourceAttribute\n } attribute of the trigger.`\n );\n }\n\n const loadingClasses = this._buildClasses(\"loading\");\n\n if (!this.hasBeenLoaded) {\n addClasses(this.el, loadingClasses);\n }\n\n this.imgEl.onload = () => {\n removeClasses(this.el, loadingClasses);\n this.hasBeenLoaded = true;\n };\n\n this.imgEl.setAttribute(\"src\", imageURL);\n }\n\n /**\n * Handles key up/down events for moving between items\n * @param {!Event} e Keyboard event\n * @return {void}\n * @protected\n */\n _handleKeydown(e) {\n if (e.keyCode == LEFT_ARROW) {\n this.showPrevious();\n } else if (e.keyCode == RIGHT_ARROW) {\n this.showNext();\n }\n }\n\n /**\n * Shows the next item if in a gallery\n * @return {void}\n */\n showNext() {\n if (!this.settings._gallery) {\n return;\n }\n\n this.currentTrigger = this.settings._gallery.nextTrigger(\n this.currentTrigger\n );\n this._updateImgSrc();\n this._updateCaption();\n this._sizeImgWrapperEl();\n }\n\n /**\n * Shows the previous item if in a gallery\n * @return {void}\n */\n showPrevious() {\n if (!this.settings._gallery) {\n return;\n }\n\n this.currentTrigger = this.settings._gallery.previousTrigger(\n this.currentTrigger\n );\n this._updateImgSrc();\n this._updateCaption();\n this._sizeImgWrapperEl();\n }\n\n /**\n * Opens the lightbox\n * @return {void}\n */\n open() {\n if (!this.elementBuilt) {\n this._buildElement();\n this._bindEventListeners();\n this.elementBuilt = true;\n }\n\n // When opening, always reset to the trigger we were passed\n this.currentTrigger = this.settings.triggerEl;\n\n // Make sure to re-set the `img` `src`, in case it's been changed\n // by someone/something else.\n this._updateImgSrc();\n this._updateCaption();\n\n addClasses(this.el, this.openClasses);\n\n this._sizeImgWrapperEl();\n window.addEventListener(\"resize\", this._sizeImgWrapperEl, false);\n\n if (this.settings._arrowNavigation) {\n window.addEventListener(\"keydown\", this._handleKeydown, false);\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeOpen, false);\n addClasses(this.el, this.openingClasses);\n }\n }\n\n /**\n * Closes the lightbox\n * @return {void}\n */\n close() {\n window.removeEventListener(\"resize\", this._sizeImgWrapperEl, false);\n\n if (this.settings._arrowNavigation) {\n window.removeEventListener(\"keydown\", this._handleKeydown, false);\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeClose, false);\n addClasses(this.el, this.closingClasses);\n } else {\n removeClasses(this.el, this.openClasses);\n }\n }\n\n /**\n * Handles animations on completion of opening the lightbox\n * @return {void}\n * @protected\n */\n _completeOpen() {\n this.el.removeEventListener(\"animationend\", this._completeOpen, false);\n\n removeClasses(this.el, this.openingClasses);\n }\n\n /**\n * Handles animations on completion of closing the lightbox\n * @return {void}\n * @protected\n */\n _completeClose() {\n this.el.removeEventListener(\"animationend\", this._completeClose, false);\n\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.closingClasses);\n }\n\n /**\n * Destroys the lightbox\n * @return {void}\n */\n destroy() {\n if (this.el) {\n this.settings.parentEl.removeChild(this.el);\n }\n }\n}\n","// This is not really a perfect check, but works fine.\n// From http://stackoverflow.com/questions/384286\nconst HAS_DOM_2 = typeof HTMLElement === \"object\";\nconst HAS_SHADOW = typeof ShadowRoot !== \"undefined\";\n\n/**\n * Determines whether an object is a DOM element or not.\n * @param {!Object} obj Object to check\n * @return {boolean} True if object is an element\n */\nexport function isDOMElement(obj) {\n if (HAS_SHADOW && obj instanceof ShadowRoot) {\n return true;\n }\n return HAS_DOM_2\n ? obj instanceof HTMLElement\n : obj &&\n typeof obj === \"object\" &&\n obj !== null &&\n obj.nodeType === 1 &&\n typeof obj.nodeName === \"string\";\n}\n\n/**\n * Adds an array of classes to an element\n * @param {!Element} el Element to add classes to\n * @param {!Array} classNames Class names to add\n * @return {void}\n */\nexport function addClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.add(className);\n });\n}\n\n/**\n * Removes an array of classes from an element\n * @param {!Element} el Element to remove classes from\n * @param {!Array} classNames Classes to remove\n * @return {void}\n */\nexport function removeClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.remove(className);\n });\n}\n","/**\n * Throws a missing parameter error\n */\nexport default function throwIfMissing() {\n throw new Error(\"Missing parameter\");\n}\n","// This file is used for the standalone browser build\n\nimport Luminous from \"./Luminous\";\nimport LuminousGallery from \"./LuminousGallery\";\n\nwindow[\"LuminousGallery\"] = LuminousGallery;\nwindow[\"Luminous\"] = Luminous;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:/// [synthetic:util/defineproperty] ","webpack:/// [synthetic:util/global] ","webpack:/// [synthetic:es6/symbol] ","webpack:/// [synthetic:util/polyfill] ","webpack:/// [synthetic:es6/object/assign] ","webpack:/// [synthetic:util/owns] ","webpack:///luminous.min.js","webpack:///webpack/bootstrap","webpack:///./src/js/LuminousGallery.js","webpack:///./src/js/Luminous.js","webpack:///./src/js/injectBaseStylesheet.js","webpack:///./src/js/Lightbox.js","webpack:///./src/js/util/dom.js","webpack:///./src/js/util/throwIfMissing.js","webpack:///./src/js/lum-browser.js"],"names":["$jscomp.defineProperty","$jscomp.global","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.symbolCounter_","$jscomp.SYMBOL_PREFIX","modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","__webpack_require__.d","name","getter","o","Object","defineProperty","enumerable","get","r","__webpack_require__.r","Symbol","toStringTag","value","t","__webpack_require__.t","mode","__esModule","ns","create","key","bind","n","__webpack_require__.n","getDefault","getModuleExports","__webpack_require__.o","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","constructor","LuminousGallery_LuminousGallery","triggers","options","luminousOpts","settings","assign","optionsDefaults","arrowNavigation","_constructLuminousInstances","Luminous_Luminous","trigger","destroy","open","close","_handleKeyup","isOpen","isDOMElement","TypeError","rootNode","document","getRootNode","appendToNode","body","namespace","sourceAttribute","caption","openTrigger","closeTrigger","closeWithEscape","closeOnScroll","closeButtonEnabled","appendToSelector","onOpen","onClose","includeImgixJSClass","injectBaseStyles","_gallery","_arrowNavigation","injectionRoot","node","head","querySelector","styleEl","createElement","type","classList","add","appendChild","createTextNode","RULES","insertBefore","firstChild","_buildLightbox","_bindEventListeners","Lightbox_Lightbox","_sizeImgWrapperEl","showNext","showPrevious","_completeOpen","_completeClose","_handleKeydown","_handleClose","parentEl","throwIfMissing","triggerEl","currentTrigger","openClasses","_buildClasses","openingClasses","closingClasses","elementBuilt","hasBeenLoaded","obj","HAS_SHADOW","ShadowRoot","HAS_DOM_2","HTMLElement","nodeType","nodeName","addClasses","el","classNames","forEach","className","removeClasses","remove","Error","HAS_ANIMATION","style","e","preventDefault","addEventListener","closeButtonEl","suffix","classes","push","_buildElement","innerEl","loaderEl","imgWrapperEl","positionHelperEl","imgEl","captionEl","_setUpGalleryElements","_updateImgSrc","_updateCaption","_buildGalleryButton","fn","btn","innerText","stopPropagation","width","this","clientWidth","maxWidth","height","clientHeight","maxHeight","captionType","innerHTML","imageURL","getAttribute","loadingClasses","onload","this.imgEl.onload","setAttribute","LEFT_ARROW","keyCode","RIGHT_ARROW","nextTrigger","previousTrigger","window","removeEventListener","removeChild","lightbox","_unbindEvents","luminousInstances","triggerLen","length","lum","nextTriggerIndex","Array","indexOf","prevTriggerIndex","instance"],"mappings":"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","file":"luminous.min.js","sourcesContent":[null,null,null,null,null,null,"/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/js/util/dom.js\n// This is not really a perfect check, but works fine.\n// From http://stackoverflow.com/questions/384286\nconst HAS_DOM_2 = typeof HTMLElement === \"object\";\nconst HAS_SHADOW = typeof ShadowRoot !== \"undefined\";\n\n/**\n * Determines whether an object is a DOM element or not.\n * @param {!Object} obj Object to check\n * @return {boolean} True if object is an element\n */\nfunction isDOMElement(obj) {\n if (HAS_SHADOW && obj instanceof ShadowRoot) {\n return true;\n }\n return HAS_DOM_2\n ? obj instanceof HTMLElement\n : obj &&\n typeof obj === \"object\" &&\n obj !== null &&\n obj.nodeType === 1 &&\n typeof obj.nodeName === \"string\";\n}\n\n/**\n * Adds an array of classes to an element\n * @param {!Element} el Element to add classes to\n * @param {!Array} classNames Class names to add\n * @return {void}\n */\nfunction addClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.add(className);\n });\n}\n\n/**\n * Removes an array of classes from an element\n * @param {!Element} el Element to remove classes from\n * @param {!Array} classNames Classes to remove\n * @return {void}\n */\nfunction removeClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.remove(className);\n });\n}\n\n// CONCATENATED MODULE: ./src/js/injectBaseStylesheet.js\n/* UNMINIFIED RULES\n\n@keyframes lum-noop {\n 0% { zoom: 1; }\n}\n\n.lum-lightbox {\n position: fixed;\n display: none;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n.lum-lightbox.lum-open {\n display: block;\n}\n\n.lum-lightbox.lum-opening, .lum-lightbox.lum-closing {\n animation: lum-noop 1ms;\n}\n\n.lum-lightbox-inner {\n position: absolute;\n top: 0%;\n right: 0%;\n bottom: 0%;\n left: 0%;\n\n overflow: hidden;\n}\n\n.lum-lightbox-loader {\n display: none;\n}\n\n.lum-lightbox-inner img {\n max-width: 100%;\n max-height: 100%;\n}\n\n.lum-lightbox-image-wrapper {\n vertical-align: middle;\n display: table-cell;\n text-align: center;\n}\n*/\n\nconst RULES = `@keyframes lum-noop{0%{zoom:1}}.lum-lightbox{position:fixed;display:none;top:0;right:0;bottom:0;left:0}.lum-lightbox.lum-open{display:block}.lum-lightbox.lum-closing,.lum-lightbox.lum-opening{animation:lum-noop 1ms}.lum-lightbox-inner{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.lum-lightbox-loader{display:none}.lum-lightbox-inner img{max-width:100%;max-height:100%}.lum-lightbox-image-wrapper{vertical-align:middle;display:table-cell;text-align:center}`;\n\n/**\n * Injects the base stylesheet needed to display the lightbox\n * element.\n * If `node` is the document, the stylesheet will be appended to ``.\n * @param {!Node} node Node to append stylesheet to\n * @return {void}\n */\nfunction injectBaseStylesheet(node) {\n if (!node || node === document) {\n node = document.head;\n }\n\n if (node.querySelector(\".lum-base-styles\")) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.type = \"text/css\";\n styleEl.classList.add(\"lum-base-styles\");\n\n styleEl.appendChild(document.createTextNode(RULES));\n\n node.insertBefore(styleEl, node.firstChild);\n}\n\n// CONCATENATED MODULE: ./src/js/util/throwIfMissing.js\n/**\n * Throws a missing parameter error\n */\nfunction throwIfMissing() {\n throw new Error(\"Missing parameter\");\n}\n\n// CONCATENATED MODULE: ./src/js/Lightbox.js\n\n\n\nconst LEFT_ARROW = 37;\nconst RIGHT_ARROW = 39;\n\n// All officially-supported browsers have this, but it's easy to\n// account for, just in case.\nconst HAS_ANIMATION =\n typeof document === \"undefined\"\n ? false\n : \"animation\" in document.createElement(\"div\").style;\n\n/**\n * Represents the default lightbox implementation\n */\nclass Lightbox_Lightbox {\n /**\n * Constructor\n * @param {Object=} options Lightbox options\n */\n constructor(options = {}) {\n this._sizeImgWrapperEl = this._sizeImgWrapperEl.bind(this);\n this.showNext = this.showNext.bind(this);\n this.showPrevious = this.showPrevious.bind(this);\n this._completeOpen = this._completeOpen.bind(this);\n this._completeClose = this._completeClose.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleClose = this._handleClose.bind(this);\n\n const {\n namespace = null,\n parentEl = throwIfMissing(),\n triggerEl = throwIfMissing(),\n sourceAttribute = throwIfMissing(),\n caption = null,\n includeImgixJSClass = false,\n _gallery = null,\n _arrowNavigation = null,\n closeButtonEnabled = true,\n closeTrigger = \"click\"\n } = options;\n\n this.settings = {\n namespace,\n parentEl,\n triggerEl,\n sourceAttribute,\n caption,\n includeImgixJSClass,\n _gallery,\n _arrowNavigation,\n closeButtonEnabled,\n onClose: options.onClose,\n closeTrigger\n };\n\n if (!isDOMElement(this.settings.parentEl)) {\n throw new TypeError(\n \"`new Lightbox` requires a DOM element passed as `parentEl`.\"\n );\n }\n\n this.currentTrigger = this.settings.triggerEl;\n\n this.openClasses = this._buildClasses(\"open\");\n this.openingClasses = this._buildClasses(\"opening\");\n this.closingClasses = this._buildClasses(\"closing\");\n\n this.hasBeenLoaded = false;\n this.elementBuilt = false;\n }\n\n /**\n * Handles closing of the lightbox\n * @param {!Event} e Event that triggered closing\n * @return {void}\n * @protected\n */\n _handleClose(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n const onClose = this.settings.onClose;\n if (onClose && typeof onClose === \"function\") {\n onClose();\n }\n }\n\n /**\n * Binds event listeners to the trigger element\n * @return {void}\n * @protected\n */\n _bindEventListeners() {\n this.el.addEventListener(this.settings.closeTrigger, this._handleClose);\n if (this.closeButtonEl) {\n this.closeButtonEl.addEventListener(\"click\", this._handleClose);\n }\n }\n\n /**\n * Builds a class list using the namespace and suffix, if any.\n * @param {string} suffix Suffix to add to each class\n * @return {!Array} Class list\n * @protected\n */\n _buildClasses(suffix) {\n const classes = [`lum-${suffix}`];\n\n const ns = this.settings.namespace;\n if (ns) {\n classes.push(`${ns}-${suffix}`);\n }\n\n return classes;\n }\n\n /**\n * Creates the lightbox element\n * @return {void}\n * @protected\n */\n _buildElement() {\n this.el = document.createElement(\"div\");\n addClasses(this.el, this._buildClasses(\"lightbox\"));\n\n this.innerEl = document.createElement(\"div\");\n addClasses(this.innerEl, this._buildClasses(\"lightbox-inner\"));\n this.el.appendChild(this.innerEl);\n\n const loaderEl = document.createElement(\"div\");\n addClasses(loaderEl, this._buildClasses(\"lightbox-loader\"));\n this.innerEl.appendChild(loaderEl);\n\n this.imgWrapperEl = document.createElement(\"div\");\n addClasses(this.imgWrapperEl, this._buildClasses(\"lightbox-image-wrapper\"));\n this.innerEl.appendChild(this.imgWrapperEl);\n\n const positionHelperEl = document.createElement(\"span\");\n addClasses(\n positionHelperEl,\n this._buildClasses(\"lightbox-position-helper\")\n );\n this.imgWrapperEl.appendChild(positionHelperEl);\n\n this.imgEl = document.createElement(\"img\");\n addClasses(this.imgEl, this._buildClasses(\"img\"));\n positionHelperEl.appendChild(this.imgEl);\n\n this.captionEl = document.createElement(\"p\");\n addClasses(this.captionEl, this._buildClasses(\"lightbox-caption\"));\n positionHelperEl.appendChild(this.captionEl);\n\n if (this.settings.closeButtonEnabled) {\n this.closeButtonEl = document.createElement(\"div\");\n addClasses(this.closeButtonEl, this._buildClasses(\"close-button\"));\n this.el.appendChild(this.closeButtonEl);\n }\n\n if (this.settings._gallery) {\n this._setUpGalleryElements();\n }\n\n this.settings.parentEl.appendChild(this.el);\n\n this._updateImgSrc();\n this._updateCaption();\n\n if (this.settings.includeImgixJSClass) {\n this.imgEl.classList.add(\"imgix-fluid\");\n }\n }\n\n /**\n * Creates gallery elements such as previous/next buttons\n * @return {void}\n * @protected\n */\n _setUpGalleryElements() {\n this._buildGalleryButton(\"previous\", this.showPrevious);\n this._buildGalleryButton(\"next\", this.showNext);\n }\n\n /**\n * Creates a gallery button\n * @param {string} name Name of button\n * @param {!Function} fn Click handler\n * @return {void}\n * @protected\n */\n _buildGalleryButton(name, fn) {\n const btn = document.createElement(\"button\");\n this[`${name}Button`] = btn;\n\n btn.innerText = name;\n addClasses(btn, this._buildClasses(`${name}-button`));\n addClasses(btn, this._buildClasses(\"gallery-button\"));\n this.innerEl.appendChild(btn);\n\n btn.addEventListener(\n \"click\",\n e => {\n e.stopPropagation();\n\n fn();\n },\n false\n );\n }\n\n /**\n * Sizes the image wrapper\n * @return {void}\n * @protected\n */\n _sizeImgWrapperEl() {\n const style = this.imgWrapperEl.style;\n style.width = `${this.innerEl.clientWidth}px`;\n style.maxWidth = `${this.innerEl.clientWidth}px`;\n style.height = `${this.innerEl.clientHeight -\n this.captionEl.clientHeight}px`;\n style.maxHeight = `${this.innerEl.clientHeight -\n this.captionEl.clientHeight}px`;\n }\n\n /**\n * Updates caption from settings\n * @return {void}\n * @protected\n */\n _updateCaption() {\n const captionType = typeof this.settings.caption;\n let caption = \"\";\n\n if (captionType === \"string\") {\n caption = this.settings.caption;\n } else if (captionType === \"function\") {\n caption = this.settings.caption(this.currentTrigger);\n }\n\n this.captionEl.innerHTML = caption;\n }\n\n /**\n * Updates image element from the trigger element's attributes\n * @return {void}\n * @protected\n */\n _updateImgSrc() {\n const imageURL = this.currentTrigger.getAttribute(\n this.settings.sourceAttribute\n );\n\n if (!imageURL) {\n throw new Error(\n `No image URL was found in the ${\n this.settings.sourceAttribute\n } attribute of the trigger.`\n );\n }\n\n const loadingClasses = this._buildClasses(\"loading\");\n\n if (!this.hasBeenLoaded) {\n addClasses(this.el, loadingClasses);\n }\n\n this.imgEl.onload = () => {\n removeClasses(this.el, loadingClasses);\n this.hasBeenLoaded = true;\n };\n\n this.imgEl.setAttribute(\"src\", imageURL);\n }\n\n /**\n * Handles key up/down events for moving between items\n * @param {!Event} e Keyboard event\n * @return {void}\n * @protected\n */\n _handleKeydown(e) {\n if (e.keyCode == LEFT_ARROW) {\n this.showPrevious();\n } else if (e.keyCode == RIGHT_ARROW) {\n this.showNext();\n }\n }\n\n /**\n * Shows the next item if in a gallery\n * @return {void}\n */\n showNext() {\n if (!this.settings._gallery) {\n return;\n }\n\n this.currentTrigger = this.settings._gallery.nextTrigger(\n this.currentTrigger\n );\n this._updateImgSrc();\n this._updateCaption();\n this._sizeImgWrapperEl();\n }\n\n /**\n * Shows the previous item if in a gallery\n * @return {void}\n */\n showPrevious() {\n if (!this.settings._gallery) {\n return;\n }\n\n this.currentTrigger = this.settings._gallery.previousTrigger(\n this.currentTrigger\n );\n this._updateImgSrc();\n this._updateCaption();\n this._sizeImgWrapperEl();\n }\n\n /**\n * Opens the lightbox\n * @return {void}\n */\n open() {\n if (!this.elementBuilt) {\n this._buildElement();\n this._bindEventListeners();\n this.elementBuilt = true;\n }\n\n // When opening, always reset to the trigger we were passed\n this.currentTrigger = this.settings.triggerEl;\n\n // Make sure to re-set the `img` `src`, in case it's been changed\n // by someone/something else.\n this._updateImgSrc();\n this._updateCaption();\n\n addClasses(this.el, this.openClasses);\n\n this._sizeImgWrapperEl();\n window.addEventListener(\"resize\", this._sizeImgWrapperEl, false);\n\n if (this.settings._arrowNavigation) {\n window.addEventListener(\"keydown\", this._handleKeydown, false);\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeOpen, false);\n addClasses(this.el, this.openingClasses);\n }\n }\n\n /**\n * Closes the lightbox\n * @return {void}\n */\n close() {\n window.removeEventListener(\"resize\", this._sizeImgWrapperEl, false);\n\n if (this.settings._arrowNavigation) {\n window.removeEventListener(\"keydown\", this._handleKeydown, false);\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeClose, false);\n addClasses(this.el, this.closingClasses);\n } else {\n removeClasses(this.el, this.openClasses);\n }\n }\n\n /**\n * Handles animations on completion of opening the lightbox\n * @return {void}\n * @protected\n */\n _completeOpen() {\n this.el.removeEventListener(\"animationend\", this._completeOpen, false);\n\n removeClasses(this.el, this.openingClasses);\n }\n\n /**\n * Handles animations on completion of closing the lightbox\n * @return {void}\n * @protected\n */\n _completeClose() {\n this.el.removeEventListener(\"animationend\", this._completeClose, false);\n\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.closingClasses);\n }\n\n /**\n * Destroys the lightbox\n * @return {void}\n */\n destroy() {\n if (this.el) {\n this.settings.parentEl.removeChild(this.el);\n }\n }\n}\n\n// CONCATENATED MODULE: ./src/js/Luminous.js\n\n\n\n\n/**\n * Represents the default luminous lightbox\n */\nclass Luminous_Luminous {\n /**\n * Constructor\n * @param {!Element} trigger Trigger element to open lightbox\n * @param {Object=} options Luminous options\n */\n constructor(trigger, options = {}) {\n this.VERSION = \"2.3.3\";\n this.destroy = this.destroy.bind(this);\n this.open = this.open.bind(this);\n this.close = this.close.bind(this);\n this._handleKeyup = this._handleKeyup.bind(this);\n\n this.isOpen = false;\n\n this.trigger = trigger;\n\n if (!isDOMElement(this.trigger)) {\n throw new TypeError(\n \"`new Luminous` requires a DOM element as its first argument.\"\n );\n }\n\n let rootNode = document;\n if (\"getRootNode\" in this.trigger) {\n rootNode = this.trigger.getRootNode();\n }\n // Prefix for generated element class names (e.g. `my-ns` will\n // result in classes such as `my-ns-lightbox`. Default `lum-`\n // prefixed classes will always be added as well.\n const namespace = options[\"namespace\"] || null;\n // Which attribute to pull the lightbox image source from.\n const sourceAttribute = options[\"sourceAttribute\"] || \"href\";\n // Captions can be a literal string, or a function that receives the Luminous instance's trigger element as an argument and returns a string. Supports HTML, so use caution when dealing with user input.\n const caption = options[\"caption\"] || null;\n // The event to listen to on the _trigger_ element: triggers opening.\n const openTrigger = options[\"openTrigger\"] || \"click\";\n // The event to listen to on the _lightbox_ element: triggers closing.\n const closeTrigger = options[\"closeTrigger\"] || \"click\";\n // Allow closing by pressing escape.\n const closeWithEscape = \"closeWithEscape\" in options ? !!options[\"closeWithEscape\"] : true;\n // Automatically close when the page is scrolled.\n const closeOnScroll = options[\"closeOnScroll\"] || false;\n const closeButtonEnabled =\n options[\"showCloseButton\"] != null ? options[\"showCloseButton\"] : true;\n const appendToNode =\n options[\"appendToNode\"] ||\n (rootNode === document ? document.body : rootNode);\n // A selector defining what to append the lightbox element to.\n const appendToSelector = options[\"appendToSelector\"] || null;\n // If present (and a function), this will be called\n // whenever the lightbox is opened.\n const onOpen = options[\"onOpen\"] || null;\n // If present (and a function), this will be called\n // whenever the lightbox is closed.\n const onClose = options[\"onClose\"] || null;\n // When true, adds the `imgix-fluid` class to the `img`\n // inside the lightbox. See https://github.com/imgix/imgix.js\n // for more information.\n const includeImgixJSClass = options[\"includeImgixJSClass\"] || false;\n // Add base styles to the page. See the \"Theming\"\n // section of README.md for more information.\n const injectBaseStyles = \"injectBaseStyles\" in options ? !!options[\"injectBaseStyles\"] : true;\n // Internal use only!\n const _gallery = options[\"_gallery\"] || null;\n const _arrowNavigation = options[\"_arrowNavigation\"] || null;\n\n this.settings = {\n namespace,\n sourceAttribute,\n caption,\n openTrigger,\n closeTrigger,\n closeWithEscape,\n closeOnScroll,\n closeButtonEnabled,\n appendToNode,\n appendToSelector,\n onOpen,\n onClose,\n includeImgixJSClass,\n injectBaseStyles,\n _gallery,\n _arrowNavigation\n };\n\n let injectionRoot = document.body;\n if (appendToNode && \"getRootNode\" in appendToNode) {\n injectionRoot = appendToNode.getRootNode();\n }\n\n if (this.settings.injectBaseStyles) {\n injectBaseStylesheet(injectionRoot);\n }\n\n this._buildLightbox();\n this._bindEventListeners();\n }\n\n /**\n * Opens the lightbox\n * @param {Event=} e Event which triggered opening\n * @return {void}\n */\n open(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n this.lightbox.open();\n\n if (this.settings.closeOnScroll) {\n window.addEventListener(\"scroll\", this.close, false);\n }\n\n const onOpen = this.settings.onOpen;\n if (onOpen && typeof onOpen === \"function\") {\n onOpen();\n }\n\n this.isOpen = true;\n }\n\n /**\n * Closes the lightbox\n * @param {Event=} e Event which triggered closing\n * @return {void}\n */\n close(e) {\n if (this.settings.closeOnScroll) {\n window.removeEventListener(\"scroll\", this.close, false);\n }\n\n this.lightbox.close();\n\n const onClose = this.settings.onClose;\n if (onClose && typeof onClose === \"function\") {\n onClose();\n }\n\n this.isOpen = false;\n }\n\n /**\n * Builds the internal lightbox instance\n * @protected\n * @return {void}\n */\n _buildLightbox() {\n let parentEl = this.settings.appendToNode;\n\n if (this.settings.appendToSelector) {\n parentEl = document.querySelector(this.settings.appendToSelector);\n }\n\n this.lightbox = new Lightbox_Lightbox({\n namespace: this.settings.namespace,\n parentEl: parentEl,\n triggerEl: this.trigger,\n sourceAttribute: this.settings.sourceAttribute,\n caption: this.settings.caption,\n includeImgixJSClass: this.settings.includeImgixJSClass,\n closeButtonEnabled: this.settings.closeButtonEnabled,\n _gallery: this.settings._gallery,\n _arrowNavigation: this.settings._arrowNavigation,\n closeTrigger: this.settings.closeTrigger,\n onClose: this.close\n });\n }\n\n /**\n * Binds lightbox events to the trigger element\n * @protected\n * @return {void}\n */\n _bindEventListeners() {\n this.trigger.addEventListener(this.settings.openTrigger, this.open, false);\n\n if (this.settings.closeWithEscape) {\n window.addEventListener(\"keyup\", this._handleKeyup, false);\n }\n }\n\n /**\n * Unbinds all events\n * @protected\n * @return {void}\n */\n _unbindEvents() {\n this.trigger.removeEventListener(\n this.settings.openTrigger,\n this.open,\n false\n );\n if (this.lightbox.el) {\n this.lightbox.el.removeEventListener(\n this.settings.closeTrigger,\n this.close,\n false\n );\n }\n\n if (this.settings.closeWithEscape) {\n window.removeEventListener(\"keyup\", this._handleKeyup, false);\n }\n }\n\n /**\n * Handles key up events and closes lightbox when esc is pressed\n * @param {!Event} e Keyboard event\n * @return {void}\n * @protected\n */\n _handleKeyup(e) {\n if (this.isOpen && e.keyCode === 27) {\n this.close();\n }\n }\n\n /**\n * Destroys internal lightbox and unbinds events\n * @return {void}\n */\n destroy() {\n this._unbindEvents();\n this.lightbox.destroy();\n }\n}\n\n/* eslint-disable no-self-assign */\nLuminous_Luminous.prototype[\"open\"] = Luminous_Luminous.prototype.open;\nLuminous_Luminous.prototype[\"close\"] = Luminous_Luminous.prototype.close;\nLuminous_Luminous.prototype[\"destroy\"] = Luminous_Luminous.prototype.destroy;\n/* eslint-enable no-self-assign */\n\n// CONCATENATED MODULE: ./src/js/LuminousGallery.js\n\n\n/**\n * Represents a gallery-style lightbox\n */\nclass LuminousGallery_LuminousGallery {\n /**\n * Constructor\n * @param {!Array} triggers Array of trigger elements\n * @param {Object=} options Gallery options\n * @param {Object=} luminousOpts Luminous options\n */\n constructor(triggers, options = {}, luminousOpts = {}) {\n const optionsDefaults = {\n arrowNavigation: true\n };\n\n this.settings = Object.assign({}, optionsDefaults, options);\n\n this.triggers = triggers;\n this.luminousOpts = luminousOpts;\n this.luminousOpts[\"_gallery\"] = this;\n this.luminousOpts[\"_arrowNavigation\"] = this.settings[\"arrowNavigation\"];\n this._constructLuminousInstances();\n }\n\n /**\n * Creates internal luminous instances\n * @protected\n * @return {void}\n */\n _constructLuminousInstances() {\n this.luminousInstances = [];\n\n const triggerLen = this.triggers.length;\n for (let i = 0; i < triggerLen; i++) {\n const trigger = this.triggers[i];\n const lum = new Luminous_Luminous(trigger, this.luminousOpts);\n this.luminousInstances.push(lum);\n }\n }\n\n /**\n * Determines the next trigger element\n * @param {!Element} trigger Current trigger element\n * @return {!Element}\n */\n nextTrigger(trigger) {\n const nextTriggerIndex =\n Array.prototype.indexOf.call(this.triggers, trigger) + 1;\n\n return nextTriggerIndex >= this.triggers.length\n ? this.triggers[0]\n : this.triggers[nextTriggerIndex];\n }\n\n /**\n * Determines the previous trigger element\n * @param {!Element} trigger Current trigger element\n * @return {!Element}\n */\n previousTrigger(trigger) {\n const prevTriggerIndex =\n Array.prototype.indexOf.call(this.triggers, trigger) - 1;\n\n return prevTriggerIndex < 0\n ? this.triggers[this.triggers.length - 1]\n : this.triggers[prevTriggerIndex];\n }\n\n /**\n * Destroys the internal luminous instances\n * @return {void}\n */\n destroy() {\n this.luminousInstances.forEach(instance => instance.destroy());\n }\n}\n\n/* eslint-disable-next-line no-self-assign */\nLuminousGallery_LuminousGallery.prototype[\"destroy\"] = LuminousGallery_LuminousGallery.prototype.destroy;\n\n// CONCATENATED MODULE: ./src/js/lum-browser.js\n// This file is used for the standalone browser build\n\n\n\n\nwindow[\"LuminousGallery\"] = LuminousGallery_LuminousGallery;\nwindow[\"Luminous\"] = Luminous_Luminous;\n\n\n/***/ })\n/******/ ]);"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import Luminous from \"./Luminous\";\n\n/**\n * Represents a gallery-style lightbox\n */\nexport default class LuminousGallery {\n /**\n * Constructor\n * @param {!Array} triggers Array of trigger elements\n * @param {Object=} options Gallery options\n * @param {Object=} luminousOpts Luminous options\n */\n constructor(triggers, options = {}, luminousOpts = {}) {\n const optionsDefaults = {\n arrowNavigation: true\n };\n\n this.settings = Object.assign({}, optionsDefaults, options);\n\n this.triggers = triggers;\n this.luminousOpts = luminousOpts;\n this.luminousOpts[\"_gallery\"] = this;\n this.luminousOpts[\"_arrowNavigation\"] = this.settings[\"arrowNavigation\"];\n this._constructLuminousInstances();\n }\n\n /**\n * Creates internal luminous instances\n * @protected\n * @return {void}\n */\n _constructLuminousInstances() {\n this.luminousInstances = [];\n\n const triggerLen = this.triggers.length;\n for (let i = 0; i < triggerLen; i++) {\n const trigger = this.triggers[i];\n const lum = new Luminous(trigger, this.luminousOpts);\n this.luminousInstances.push(lum);\n }\n }\n\n /**\n * Determines the next trigger element\n * @param {!Element} trigger Current trigger element\n * @return {!Element}\n */\n nextTrigger(trigger) {\n const nextTriggerIndex =\n Array.prototype.indexOf.call(this.triggers, trigger) + 1;\n\n return nextTriggerIndex >= this.triggers.length\n ? this.triggers[0]\n : this.triggers[nextTriggerIndex];\n }\n\n /**\n * Determines the previous trigger element\n * @param {!Element} trigger Current trigger element\n * @return {!Element}\n */\n previousTrigger(trigger) {\n const prevTriggerIndex =\n Array.prototype.indexOf.call(this.triggers, trigger) - 1;\n\n return prevTriggerIndex < 0\n ? this.triggers[this.triggers.length - 1]\n : this.triggers[prevTriggerIndex];\n }\n\n /**\n * Destroys the internal luminous instances\n * @return {void}\n */\n destroy() {\n this.luminousInstances.forEach(instance => instance.destroy());\n }\n}\n\n/* eslint-disable-next-line no-self-assign */\nLuminousGallery.prototype[\"destroy\"] = LuminousGallery.prototype.destroy;\n","import { isDOMElement } from \"./util/dom\";\nimport injectBaseStylesheet from \"./injectBaseStylesheet\";\nimport Lightbox from \"./Lightbox\";\n\n/**\n * Represents the default luminous lightbox\n */\nexport default class Luminous {\n /**\n * Constructor\n * @param {!Element} trigger Trigger element to open lightbox\n * @param {Object=} options Luminous options\n */\n constructor(trigger, options = {}) {\n this.VERSION = \"2.3.3\";\n this.destroy = this.destroy.bind(this);\n this.open = this.open.bind(this);\n this.close = this.close.bind(this);\n this._handleKeyup = this._handleKeyup.bind(this);\n\n this.isOpen = false;\n\n this.trigger = trigger;\n\n if (!isDOMElement(this.trigger)) {\n throw new TypeError(\n \"`new Luminous` requires a DOM element as its first argument.\"\n );\n }\n\n let rootNode = document;\n if (\"getRootNode\" in this.trigger) {\n rootNode = this.trigger.getRootNode();\n }\n // Prefix for generated element class names (e.g. `my-ns` will\n // result in classes such as `my-ns-lightbox`. Default `lum-`\n // prefixed classes will always be added as well.\n const namespace = options[\"namespace\"] || null;\n // Which attribute to pull the lightbox image source from.\n const sourceAttribute = options[\"sourceAttribute\"] || \"href\";\n // Captions can be a literal string, or a function that receives the Luminous instance's trigger element as an argument and returns a string. Supports HTML, so use caution when dealing with user input.\n const caption = options[\"caption\"] || null;\n // The event to listen to on the _trigger_ element: triggers opening.\n const openTrigger = options[\"openTrigger\"] || \"click\";\n // The event to listen to on the _lightbox_ element: triggers closing.\n const closeTrigger = options[\"closeTrigger\"] || \"click\";\n // Allow closing by pressing escape.\n const closeWithEscape = \"closeWithEscape\" in options ? !!options[\"closeWithEscape\"] : true;\n // Automatically close when the page is scrolled.\n const closeOnScroll = options[\"closeOnScroll\"] || false;\n const closeButtonEnabled =\n options[\"showCloseButton\"] != null ? options[\"showCloseButton\"] : true;\n const appendToNode =\n options[\"appendToNode\"] ||\n (rootNode === document ? document.body : rootNode);\n // A selector defining what to append the lightbox element to.\n const appendToSelector = options[\"appendToSelector\"] || null;\n // If present (and a function), this will be called\n // whenever the lightbox is opened.\n const onOpen = options[\"onOpen\"] || null;\n // If present (and a function), this will be called\n // whenever the lightbox is closed.\n const onClose = options[\"onClose\"] || null;\n // When true, adds the `imgix-fluid` class to the `img`\n // inside the lightbox. See https://github.com/imgix/imgix.js\n // for more information.\n const includeImgixJSClass = options[\"includeImgixJSClass\"] || false;\n // Add base styles to the page. See the \"Theming\"\n // section of README.md for more information.\n const injectBaseStyles = \"injectBaseStyles\" in options ? !!options[\"injectBaseStyles\"] : true;\n // Internal use only!\n const _gallery = options[\"_gallery\"] || null;\n const _arrowNavigation = options[\"_arrowNavigation\"] || null;\n\n this.settings = {\n namespace,\n sourceAttribute,\n caption,\n openTrigger,\n closeTrigger,\n closeWithEscape,\n closeOnScroll,\n closeButtonEnabled,\n appendToNode,\n appendToSelector,\n onOpen,\n onClose,\n includeImgixJSClass,\n injectBaseStyles,\n _gallery,\n _arrowNavigation\n };\n\n let injectionRoot = document.body;\n if (appendToNode && \"getRootNode\" in appendToNode) {\n injectionRoot = appendToNode.getRootNode();\n }\n\n if (this.settings.injectBaseStyles) {\n injectBaseStylesheet(injectionRoot);\n }\n\n this._buildLightbox();\n this._bindEventListeners();\n }\n\n /**\n * Opens the lightbox\n * @param {Event=} e Event which triggered opening\n * @return {void}\n */\n open(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n this.lightbox.open();\n\n if (this.settings.closeOnScroll) {\n window.addEventListener(\"scroll\", this.close, false);\n }\n\n const onOpen = this.settings.onOpen;\n if (onOpen && typeof onOpen === \"function\") {\n onOpen();\n }\n\n this.isOpen = true;\n }\n\n /**\n * Closes the lightbox\n * @param {Event=} e Event which triggered closing\n * @return {void}\n */\n close(e) {\n if (this.settings.closeOnScroll) {\n window.removeEventListener(\"scroll\", this.close, false);\n }\n\n this.lightbox.close();\n\n const onClose = this.settings.onClose;\n if (onClose && typeof onClose === \"function\") {\n onClose();\n }\n\n this.isOpen = false;\n }\n\n /**\n * Builds the internal lightbox instance\n * @protected\n * @return {void}\n */\n _buildLightbox() {\n let parentEl = this.settings.appendToNode;\n\n if (this.settings.appendToSelector) {\n parentEl = document.querySelector(this.settings.appendToSelector);\n }\n\n this.lightbox = new Lightbox({\n namespace: this.settings.namespace,\n parentEl: parentEl,\n triggerEl: this.trigger,\n sourceAttribute: this.settings.sourceAttribute,\n caption: this.settings.caption,\n includeImgixJSClass: this.settings.includeImgixJSClass,\n closeButtonEnabled: this.settings.closeButtonEnabled,\n _gallery: this.settings._gallery,\n _arrowNavigation: this.settings._arrowNavigation,\n closeTrigger: this.settings.closeTrigger,\n onClose: this.close\n });\n }\n\n /**\n * Binds lightbox events to the trigger element\n * @protected\n * @return {void}\n */\n _bindEventListeners() {\n this.trigger.addEventListener(this.settings.openTrigger, this.open, false);\n\n if (this.settings.closeWithEscape) {\n window.addEventListener(\"keyup\", this._handleKeyup, false);\n }\n }\n\n /**\n * Unbinds all events\n * @protected\n * @return {void}\n */\n _unbindEvents() {\n this.trigger.removeEventListener(\n this.settings.openTrigger,\n this.open,\n false\n );\n if (this.lightbox.el) {\n this.lightbox.el.removeEventListener(\n this.settings.closeTrigger,\n this.close,\n false\n );\n }\n\n if (this.settings.closeWithEscape) {\n window.removeEventListener(\"keyup\", this._handleKeyup, false);\n }\n }\n\n /**\n * Handles key up events and closes lightbox when esc is pressed\n * @param {!Event} e Keyboard event\n * @return {void}\n * @protected\n */\n _handleKeyup(e) {\n if (this.isOpen && e.keyCode === 27) {\n this.close();\n }\n }\n\n /**\n * Destroys internal lightbox and unbinds events\n * @return {void}\n */\n destroy() {\n this._unbindEvents();\n this.lightbox.destroy();\n }\n}\n\n/* eslint-disable no-self-assign */\nLuminous.prototype[\"open\"] = Luminous.prototype.open;\nLuminous.prototype[\"close\"] = Luminous.prototype.close;\nLuminous.prototype[\"destroy\"] = Luminous.prototype.destroy;\n/* eslint-enable no-self-assign */\n","/* UNMINIFIED RULES\n\n@keyframes lum-noop {\n 0% { zoom: 1; }\n}\n\n.lum-lightbox {\n position: fixed;\n display: none;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n.lum-lightbox.lum-open {\n display: block;\n}\n\n.lum-lightbox.lum-opening, .lum-lightbox.lum-closing {\n animation: lum-noop 1ms;\n}\n\n.lum-lightbox-inner {\n position: absolute;\n top: 0%;\n right: 0%;\n bottom: 0%;\n left: 0%;\n\n overflow: hidden;\n}\n\n.lum-lightbox-loader {\n display: none;\n}\n\n.lum-lightbox-inner img {\n max-width: 100%;\n max-height: 100%;\n}\n\n.lum-lightbox-image-wrapper {\n vertical-align: middle;\n display: table-cell;\n text-align: center;\n}\n*/\n\nconst RULES = `@keyframes lum-noop{0%{zoom:1}}.lum-lightbox{position:fixed;display:none;top:0;right:0;bottom:0;left:0}.lum-lightbox.lum-open{display:block}.lum-lightbox.lum-closing,.lum-lightbox.lum-opening{animation:lum-noop 1ms}.lum-lightbox-inner{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.lum-lightbox-loader{display:none}.lum-lightbox-inner img{max-width:100%;max-height:100%}.lum-lightbox-image-wrapper{vertical-align:middle;display:table-cell;text-align:center}`;\n\n/**\n * Injects the base stylesheet needed to display the lightbox\n * element.\n * If `node` is the document, the stylesheet will be appended to ``.\n * @param {!Node} node Node to append stylesheet to\n * @return {void}\n */\nexport default function injectBaseStylesheet(node) {\n if (!node || node === document) {\n node = document.head;\n }\n\n if (node.querySelector(\".lum-base-styles\")) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.type = \"text/css\";\n styleEl.classList.add(\"lum-base-styles\");\n\n styleEl.appendChild(document.createTextNode(RULES));\n\n node.insertBefore(styleEl, node.firstChild);\n}\n","import { isDOMElement, addClasses, removeClasses } from \"./util/dom\";\nimport throwIfMissing from \"./util/throwIfMissing\";\n\nconst LEFT_ARROW = 37;\nconst RIGHT_ARROW = 39;\n\n// All officially-supported browsers have this, but it's easy to\n// account for, just in case.\nconst HAS_ANIMATION =\n typeof document === \"undefined\"\n ? false\n : \"animation\" in document.createElement(\"div\").style;\n\n/**\n * Represents the default lightbox implementation\n */\nexport default class Lightbox {\n /**\n * Constructor\n * @param {Object=} options Lightbox options\n */\n constructor(options = {}) {\n this._sizeImgWrapperEl = this._sizeImgWrapperEl.bind(this);\n this.showNext = this.showNext.bind(this);\n this.showPrevious = this.showPrevious.bind(this);\n this._completeOpen = this._completeOpen.bind(this);\n this._completeClose = this._completeClose.bind(this);\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleClose = this._handleClose.bind(this);\n\n const {\n namespace = null,\n parentEl = throwIfMissing(),\n triggerEl = throwIfMissing(),\n sourceAttribute = throwIfMissing(),\n caption = null,\n includeImgixJSClass = false,\n _gallery = null,\n _arrowNavigation = null,\n closeButtonEnabled = true,\n closeTrigger = \"click\"\n } = options;\n\n this.settings = {\n namespace,\n parentEl,\n triggerEl,\n sourceAttribute,\n caption,\n includeImgixJSClass,\n _gallery,\n _arrowNavigation,\n closeButtonEnabled,\n onClose: options.onClose,\n closeTrigger\n };\n\n if (!isDOMElement(this.settings.parentEl)) {\n throw new TypeError(\n \"`new Lightbox` requires a DOM element passed as `parentEl`.\"\n );\n }\n\n this.currentTrigger = this.settings.triggerEl;\n\n this.openClasses = this._buildClasses(\"open\");\n this.openingClasses = this._buildClasses(\"opening\");\n this.closingClasses = this._buildClasses(\"closing\");\n\n this.hasBeenLoaded = false;\n this.elementBuilt = false;\n }\n\n /**\n * Handles closing of the lightbox\n * @param {!Event} e Event that triggered closing\n * @return {void}\n * @protected\n */\n _handleClose(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n const onClose = this.settings.onClose;\n if (onClose && typeof onClose === \"function\") {\n onClose();\n }\n }\n\n /**\n * Binds event listeners to the trigger element\n * @return {void}\n * @protected\n */\n _bindEventListeners() {\n this.el.addEventListener(this.settings.closeTrigger, this._handleClose);\n if (this.closeButtonEl) {\n this.closeButtonEl.addEventListener(\"click\", this._handleClose);\n }\n }\n\n /**\n * Builds a class list using the namespace and suffix, if any.\n * @param {string} suffix Suffix to add to each class\n * @return {!Array} Class list\n * @protected\n */\n _buildClasses(suffix) {\n const classes = [`lum-${suffix}`];\n\n const ns = this.settings.namespace;\n if (ns) {\n classes.push(`${ns}-${suffix}`);\n }\n\n return classes;\n }\n\n /**\n * Creates the lightbox element\n * @return {void}\n * @protected\n */\n _buildElement() {\n this.el = document.createElement(\"div\");\n addClasses(this.el, this._buildClasses(\"lightbox\"));\n\n this.innerEl = document.createElement(\"div\");\n addClasses(this.innerEl, this._buildClasses(\"lightbox-inner\"));\n this.el.appendChild(this.innerEl);\n\n const loaderEl = document.createElement(\"div\");\n addClasses(loaderEl, this._buildClasses(\"lightbox-loader\"));\n this.innerEl.appendChild(loaderEl);\n\n this.imgWrapperEl = document.createElement(\"div\");\n addClasses(this.imgWrapperEl, this._buildClasses(\"lightbox-image-wrapper\"));\n this.innerEl.appendChild(this.imgWrapperEl);\n\n const positionHelperEl = document.createElement(\"span\");\n addClasses(\n positionHelperEl,\n this._buildClasses(\"lightbox-position-helper\")\n );\n this.imgWrapperEl.appendChild(positionHelperEl);\n\n this.imgEl = document.createElement(\"img\");\n addClasses(this.imgEl, this._buildClasses(\"img\"));\n positionHelperEl.appendChild(this.imgEl);\n\n this.captionEl = document.createElement(\"p\");\n addClasses(this.captionEl, this._buildClasses(\"lightbox-caption\"));\n positionHelperEl.appendChild(this.captionEl);\n\n if (this.settings.closeButtonEnabled) {\n this.closeButtonEl = document.createElement(\"div\");\n addClasses(this.closeButtonEl, this._buildClasses(\"close-button\"));\n this.el.appendChild(this.closeButtonEl);\n }\n\n if (this.settings._gallery) {\n this._setUpGalleryElements();\n }\n\n this.settings.parentEl.appendChild(this.el);\n\n this._updateImgSrc();\n this._updateCaption();\n\n if (this.settings.includeImgixJSClass) {\n this.imgEl.classList.add(\"imgix-fluid\");\n }\n }\n\n /**\n * Creates gallery elements such as previous/next buttons\n * @return {void}\n * @protected\n */\n _setUpGalleryElements() {\n this._buildGalleryButton(\"previous\", this.showPrevious);\n this._buildGalleryButton(\"next\", this.showNext);\n }\n\n /**\n * Creates a gallery button\n * @param {string} name Name of button\n * @param {!Function} fn Click handler\n * @return {void}\n * @protected\n */\n _buildGalleryButton(name, fn) {\n const btn = document.createElement(\"button\");\n this[`${name}Button`] = btn;\n\n btn.innerText = name;\n addClasses(btn, this._buildClasses(`${name}-button`));\n addClasses(btn, this._buildClasses(\"gallery-button\"));\n this.innerEl.appendChild(btn);\n\n btn.addEventListener(\n \"click\",\n e => {\n e.stopPropagation();\n\n fn();\n },\n false\n );\n }\n\n /**\n * Sizes the image wrapper\n * @return {void}\n * @protected\n */\n _sizeImgWrapperEl() {\n const style = this.imgWrapperEl.style;\n style.width = `${this.innerEl.clientWidth}px`;\n style.maxWidth = `${this.innerEl.clientWidth}px`;\n style.height = `${this.innerEl.clientHeight -\n this.captionEl.clientHeight}px`;\n style.maxHeight = `${this.innerEl.clientHeight -\n this.captionEl.clientHeight}px`;\n }\n\n /**\n * Updates caption from settings\n * @return {void}\n * @protected\n */\n _updateCaption() {\n const captionType = typeof this.settings.caption;\n let caption = \"\";\n\n if (captionType === \"string\") {\n caption = this.settings.caption;\n } else if (captionType === \"function\") {\n caption = this.settings.caption(this.currentTrigger);\n }\n\n this.captionEl.innerHTML = caption;\n }\n\n /**\n * Updates image element from the trigger element's attributes\n * @return {void}\n * @protected\n */\n _updateImgSrc() {\n const imageURL = this.currentTrigger.getAttribute(\n this.settings.sourceAttribute\n );\n\n if (!imageURL) {\n throw new Error(\n `No image URL was found in the ${\n this.settings.sourceAttribute\n } attribute of the trigger.`\n );\n }\n\n const loadingClasses = this._buildClasses(\"loading\");\n\n if (!this.hasBeenLoaded) {\n addClasses(this.el, loadingClasses);\n }\n\n this.imgEl.onload = () => {\n removeClasses(this.el, loadingClasses);\n this.hasBeenLoaded = true;\n };\n\n this.imgEl.setAttribute(\"src\", imageURL);\n }\n\n /**\n * Handles key up/down events for moving between items\n * @param {!Event} e Keyboard event\n * @return {void}\n * @protected\n */\n _handleKeydown(e) {\n if (e.keyCode == LEFT_ARROW) {\n this.showPrevious();\n } else if (e.keyCode == RIGHT_ARROW) {\n this.showNext();\n }\n }\n\n /**\n * Shows the next item if in a gallery\n * @return {void}\n */\n showNext() {\n if (!this.settings._gallery) {\n return;\n }\n\n this.currentTrigger = this.settings._gallery.nextTrigger(\n this.currentTrigger\n );\n this._updateImgSrc();\n this._updateCaption();\n this._sizeImgWrapperEl();\n }\n\n /**\n * Shows the previous item if in a gallery\n * @return {void}\n */\n showPrevious() {\n if (!this.settings._gallery) {\n return;\n }\n\n this.currentTrigger = this.settings._gallery.previousTrigger(\n this.currentTrigger\n );\n this._updateImgSrc();\n this._updateCaption();\n this._sizeImgWrapperEl();\n }\n\n /**\n * Opens the lightbox\n * @return {void}\n */\n open() {\n if (!this.elementBuilt) {\n this._buildElement();\n this._bindEventListeners();\n this.elementBuilt = true;\n }\n\n // When opening, always reset to the trigger we were passed\n this.currentTrigger = this.settings.triggerEl;\n\n // Make sure to re-set the `img` `src`, in case it's been changed\n // by someone/something else.\n this._updateImgSrc();\n this._updateCaption();\n\n addClasses(this.el, this.openClasses);\n\n this._sizeImgWrapperEl();\n window.addEventListener(\"resize\", this._sizeImgWrapperEl, false);\n\n if (this.settings._arrowNavigation) {\n window.addEventListener(\"keydown\", this._handleKeydown, false);\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeOpen, false);\n addClasses(this.el, this.openingClasses);\n }\n }\n\n /**\n * Closes the lightbox\n * @return {void}\n */\n close() {\n window.removeEventListener(\"resize\", this._sizeImgWrapperEl, false);\n\n if (this.settings._arrowNavigation) {\n window.removeEventListener(\"keydown\", this._handleKeydown, false);\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeClose, false);\n addClasses(this.el, this.closingClasses);\n } else {\n removeClasses(this.el, this.openClasses);\n }\n }\n\n /**\n * Handles animations on completion of opening the lightbox\n * @return {void}\n * @protected\n */\n _completeOpen() {\n this.el.removeEventListener(\"animationend\", this._completeOpen, false);\n\n removeClasses(this.el, this.openingClasses);\n }\n\n /**\n * Handles animations on completion of closing the lightbox\n * @return {void}\n * @protected\n */\n _completeClose() {\n this.el.removeEventListener(\"animationend\", this._completeClose, false);\n\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.closingClasses);\n }\n\n /**\n * Destroys the lightbox\n * @return {void}\n */\n destroy() {\n if (this.el) {\n this.settings.parentEl.removeChild(this.el);\n }\n }\n}\n","// This is not really a perfect check, but works fine.\n// From http://stackoverflow.com/questions/384286\nconst HAS_DOM_2 = typeof HTMLElement === \"object\";\nconst HAS_SHADOW = typeof ShadowRoot !== \"undefined\";\n\n/**\n * Determines whether an object is a DOM element or not.\n * @param {!Object} obj Object to check\n * @return {boolean} True if object is an element\n */\nexport function isDOMElement(obj) {\n if (HAS_SHADOW && obj instanceof ShadowRoot) {\n return true;\n }\n return HAS_DOM_2\n ? obj instanceof HTMLElement\n : obj &&\n typeof obj === \"object\" &&\n obj !== null &&\n obj.nodeType === 1 &&\n typeof obj.nodeName === \"string\";\n}\n\n/**\n * Adds an array of classes to an element\n * @param {!Element} el Element to add classes to\n * @param {!Array} classNames Class names to add\n * @return {void}\n */\nexport function addClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.add(className);\n });\n}\n\n/**\n * Removes an array of classes from an element\n * @param {!Element} el Element to remove classes from\n * @param {!Array} classNames Classes to remove\n * @return {void}\n */\nexport function removeClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.remove(className);\n });\n}\n","/**\n * Throws a missing parameter error\n */\nexport default function throwIfMissing() {\n throw new Error(\"Missing parameter\");\n}\n","// This file is used for the standalone browser build\n\nimport Luminous from \"./Luminous\";\nimport LuminousGallery from \"./LuminousGallery\";\n\nwindow[\"LuminousGallery\"] = LuminousGallery;\nwindow[\"Luminous\"] = Luminous;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8ae6768b..6f8726a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "luminous-lightbox", - "version": "2.3.2", + "version": "2.3.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8a4110ac..5cdc8cab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "luminous-lightbox", - "version": "2.3.2", + "version": "2.3.3", "description": "A simple, lightweight, no-dependencies JavaScript image lightbox.", "repository": { "type": "git", diff --git a/src/js/Luminous.js b/src/js/Luminous.js index 77d0d736..f8f7da03 100644 --- a/src/js/Luminous.js +++ b/src/js/Luminous.js @@ -12,7 +12,7 @@ export default class Luminous { * @param {Object=} options Luminous options */ constructor(trigger, options = {}) { - this.VERSION = "2.3.2"; + this.VERSION = "2.3.3"; this.destroy = this.destroy.bind(this); this.open = this.open.bind(this); this.close = this.close.bind(this);