{"version":3,"sources":["webpack:/// [synthetic:util/global] ","webpack:/// [synthetic:es6/symbol] ","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.global","window","this","global","p","$jscomp.initSymbol","Symbol","$jscomp.Symbol","$jscomp.symbolCounter_","t","k","$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","toStringTag","value","__webpack_require__.t","mode","__esModule","ns","create","key","bind","n","__webpack_require__.n","getDefault","getModuleExports","__webpack_require__.o","object","property","prototype","hasOwnProperty","s","__webpack_exports__","constructor","LuminousGallery_LuminousGallery","triggers","options","luminousOpts","settings","arrowNavigation","M","_gallery","_arrowNavigation","_constructLuminousInstances","Luminous_Luminous","trigger","destroy","open","close","_handleKeyup","isOpen","isDOMElement","TypeError","namespace","sourceAttribute","caption","openTrigger","closeTrigger","closeWithEscape","closeOnScroll","appendToSelector","onOpen","onClose","includeImgixJSClass","injectBaseStyles","document","querySelector","styleEl","createElement","type","classList","add","appendChild","createTextNode","RULES","head","insertBefore","firstChild","_buildLightbox","_bindEvents","Lightbox_Lightbox","_sizeImgWrapperEl","showNext","showPrevious","_completeOpen","_completeClose","_handleKeydown","a","w","parentEl","B","throwIfMissing","triggerEl","C","u","v","j","currentTrigger","openClasses","_buildClasses","openingClasses","closingClasses","elementBuilt","hasBeenLoaded","obj","HAS_DOM_2","HTMLElement","nodeType","nodeName","addClasses","el","classNames","forEach","className","removeClasses","remove","Error","HAS_ANIMATION","style","b","suffix","classes","push","e","X","_buildElement","innerEl","loaderEl","imgWrapperEl","positionHelperEl","imgEl","captionEl","_setUpGalleryElements","_updateImgSrc","_updateCaption","Y","_buildGalleryButton","O","fn","btn","innerText","addEventListener","stopPropagation","g","width","clientWidth","maxWidth","height","clientHeight","maxHeight","I","captionType","innerHTML","J","imageURL","getAttribute","loadingClasses","onload","this.imgEl.onload","setAttribute","H","LEFT_ARROW","keyCode","RIGHT_ARROW","D","nextTrigger","F","previousTrigger","removeEventListener","A","removeChild","preventDefault","previouslyBuilt","lightbox","_bindCloseEvent","_unbindEvents","f","h","luminousInstances","triggerLen","length","lum","ca","nextTriggerIndex","Array","indexOf","fa","prevTriggerIndex","instance","LuminousGallery","Luminous"],"mappings":"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","file":"luminous.min.js","sourcesContent":[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\";\n\nfunction isDOMElement(obj) {\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\nfunction addClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.add(className);\n });\n}\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\nfunction injectBaseStylesheet() {\n if (document.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 const head = document.head;\n head.insertBefore(styleEl, head.firstChild);\n}\n\n// CONCATENATED MODULE: ./src/js/util/throwIfMissing.js\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\nclass Lightbox_Lightbox {\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\n let {\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 } = options;\n\n this.settings = {\n namespace,\n parentEl,\n triggerEl,\n sourceAttribute,\n caption,\n includeImgixJSClass,\n _gallery,\n _arrowNavigation\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 _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 _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._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 _setUpGalleryElements() {\n this._buildGalleryButton(\"previous\", this.showPrevious);\n this._buildGalleryButton(\"next\", this.showNext);\n }\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 _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 _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 _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 let 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 _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 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 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 open() {\n if (!this.elementBuilt) {\n this._buildElement();\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 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 _completeOpen() {\n this.el.removeEventListener(\"animationend\", this._completeOpen, false);\n\n removeClasses(this.el, this.openingClasses);\n }\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 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\nclass Luminous_Luminous {\n constructor(trigger, options = {}) {\n this.VERSION = \"2.2.1\";\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 // 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 // A selector defining what to append the lightbox element to.\n const appendToSelector = options[\"appendToSelector\"] || \"body\";\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 appendToSelector,\n onOpen,\n onClose,\n includeImgixJSClass,\n injectBaseStyles,\n _gallery,\n _arrowNavigation\n };\n\n if (this.settings.injectBaseStyles) {\n injectBaseStylesheet();\n }\n\n this._buildLightbox();\n this._bindEvents();\n }\n\n open(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n let previouslyBuilt = this.lightbox.elementBuilt;\n\n this.lightbox.open();\n\n if (!previouslyBuilt) {\n this._bindCloseEvent();\n }\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 close(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\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 _buildLightbox() {\n this.lightbox = new Lightbox_Lightbox({\n namespace: this.settings.namespace,\n parentEl: document.querySelector(this.settings.appendToSelector),\n triggerEl: this.trigger,\n sourceAttribute: this.settings.sourceAttribute,\n caption: this.settings.caption,\n includeImgixJSClass: this.settings.includeImgixJSClass,\n _gallery: this.settings._gallery,\n _arrowNavigation: this.settings._arrowNavigation\n });\n }\n\n _bindEvents() {\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 _bindCloseEvent() {\n this.lightbox.el.addEventListener(\n this.settings.closeTrigger,\n this.close,\n false\n );\n }\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 _handleKeyup(e) {\n if (this.isOpen && e.keyCode === 27) {\n this.close();\n }\n }\n\n destroy() {\n this._unbindEvents();\n this.lightbox.destroy();\n }\n}\n\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\n// CONCATENATED MODULE: ./src/js/LuminousGallery.js\n\n\n\nclass LuminousGallery_LuminousGallery {\n constructor(triggers, options = {}, luminousOpts = {}) {\n let { arrowNavigation = true } = options;\n\n this.settings = { arrowNavigation };\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 _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 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 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 destroy() {\n this.luminousInstances.forEach(instance => instance.destroy());\n }\n}\n\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 { isDOMElement, addClasses, removeClasses } from \"./util/dom\";\nimport Luminous from \"./Luminous\";\n\nexport default class LuminousGallery {\n constructor(triggers, options = {}, luminousOpts = {}) {\n let { arrowNavigation = true } = options;\n\n this.settings = { arrowNavigation };\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 _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 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 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 destroy() {\n this.luminousInstances.forEach(instance => instance.destroy());\n }\n}\n\nLuminousGallery.prototype[\"destroy\"] = LuminousGallery.prototype.destroy;\n","import { isDOMElement } from \"./util/dom\";\nimport injectBaseStylesheet from \"./injectBaseStylesheet\";\nimport Lightbox from \"./Lightbox\";\n\nexport default class Luminous {\n constructor(trigger, options = {}) {\n this.VERSION = \"2.2.1\";\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 // 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 // A selector defining what to append the lightbox element to.\n const appendToSelector = options[\"appendToSelector\"] || \"body\";\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 appendToSelector,\n onOpen,\n onClose,\n includeImgixJSClass,\n injectBaseStyles,\n _gallery,\n _arrowNavigation\n };\n\n if (this.settings.injectBaseStyles) {\n injectBaseStylesheet();\n }\n\n this._buildLightbox();\n this._bindEvents();\n }\n\n open(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\n let previouslyBuilt = this.lightbox.elementBuilt;\n\n this.lightbox.open();\n\n if (!previouslyBuilt) {\n this._bindCloseEvent();\n }\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 close(e) {\n if (e && typeof e.preventDefault === \"function\") {\n e.preventDefault();\n }\n\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 _buildLightbox() {\n this.lightbox = new Lightbox({\n namespace: this.settings.namespace,\n parentEl: document.querySelector(this.settings.appendToSelector),\n triggerEl: this.trigger,\n sourceAttribute: this.settings.sourceAttribute,\n caption: this.settings.caption,\n includeImgixJSClass: this.settings.includeImgixJSClass,\n _gallery: this.settings._gallery,\n _arrowNavigation: this.settings._arrowNavigation\n });\n }\n\n _bindEvents() {\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 _bindCloseEvent() {\n this.lightbox.el.addEventListener(\n this.settings.closeTrigger,\n this.close,\n false\n );\n }\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 _handleKeyup(e) {\n if (this.isOpen && e.keyCode === 27) {\n this.close();\n }\n }\n\n destroy() {\n this._unbindEvents();\n this.lightbox.destroy();\n }\n}\n\nLuminous.prototype[\"open\"] = Luminous.prototype.open;\nLuminous.prototype[\"close\"] = Luminous.prototype.close;\nLuminous.prototype[\"destroy\"] = Luminous.prototype.destroy;\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\nexport default function injectBaseStylesheet() {\n if (document.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 const head = document.head;\n head.insertBefore(styleEl, head.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\nexport default class Lightbox {\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\n let {\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 } = options;\n\n this.settings = {\n namespace,\n parentEl,\n triggerEl,\n sourceAttribute,\n caption,\n includeImgixJSClass,\n _gallery,\n _arrowNavigation\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 _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 _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._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 _setUpGalleryElements() {\n this._buildGalleryButton(\"previous\", this.showPrevious);\n this._buildGalleryButton(\"next\", this.showNext);\n }\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 _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 _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 _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 let 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 _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 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 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 open() {\n if (!this.elementBuilt) {\n this._buildElement();\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 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 _completeOpen() {\n this.el.removeEventListener(\"animationend\", this._completeOpen, false);\n\n removeClasses(this.el, this.openingClasses);\n }\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 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\";\n\nexport function isDOMElement(obj) {\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\nexport function addClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.add(className);\n });\n}\n\nexport function removeClasses(el, classNames) {\n classNames.forEach(function(className) {\n el.classList.remove(className);\n });\n}\n","export 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":""}