{"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","boundMethod","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","v","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","u","removeChild","preventDefault","previouslyBuilt","lightbox","_bindCloseEvent","j","_unbindEvents","f","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\n// CONCATENATED MODULE: ./src/js/LuminousGallery.js\n\n\n\nclass LuminousGallery_LuminousGallery {\n constructor(triggers, options = {}, luminousOpts = {}) {\n this.boundMethod = this.boundMethod.bind(this);\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 boundMethod() {}\n\n destroy() {\n this.luminousInstances.forEach(instance => instance.destroy());\n }\n}\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 this.boundMethod = this.boundMethod.bind(this);\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 boundMethod() {}\n\n destroy() {\n this.luminousInstances.forEach(instance => instance.destroy());\n }\n}\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","/* 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":""}