{"version":3,"file":"component_controller-L-8_Nq4o.js","sources":["../../../node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js","../../../app/frontend/javascript/app/features/DebugLogger.js","../../../node_modules/cookies-js/dist/cookies.js","../../../app/frontend/javascript/app/features/Tracker.js","../../../app/frontend/javascript/app/features/CampaignTracking.js","../../../app/frontend/javascript/app/features/ConvertedWithTracking.js","../../../node_modules/imgix.js/dist/imgix.js","../../../node_modules/lazysizes/lazysizes.js","../../../node_modules/lazysizes/plugins/print/ls.print.js","../../../app/frontend/javascript/app/features/ImgixHelper.js","../../../app/frontend/javascript/utils/query-params.js","../../../app/components/navbar/component_controller.js"],"sourcesContent":["/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\nconst linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n\nconst buttonClickSelector = {\n selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n exclude: \"form button\"\n};\n\nconst inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n\nconst formSubmitSelector = \"form:not([data-turbo=true])\";\n\nconst formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n\nconst formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n\nconst formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n\nconst fileInputSelector = \"input[name][type=file]:not([disabled])\";\n\nconst linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n\nconst buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n\nlet nonce = null;\n\nconst loadCSPNonce = () => {\n const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n return nonce = metaTag && metaTag.content;\n};\n\nconst cspNonce = () => nonce || loadCSPNonce();\n\nconst m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nconst matches = function(element, selector) {\n if (selector.exclude) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n};\n\nconst EXPANDO = \"_ujsData\";\n\nconst getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n\nconst setData = function(element, key, value) {\n if (!element[EXPANDO]) {\n element[EXPANDO] = {};\n }\n return element[EXPANDO][key] = value;\n};\n\nconst $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n\nconst isContentEditable = function(element) {\n var isEditable = false;\n do {\n if (element.isContentEditable) {\n isEditable = true;\n break;\n }\n element = element.parentElement;\n } while (element);\n return isEditable;\n};\n\nconst csrfToken = () => {\n const meta = document.querySelector(\"meta[name=csrf-token]\");\n return meta && meta.content;\n};\n\nconst csrfParam = () => {\n const meta = document.querySelector(\"meta[name=csrf-param]\");\n return meta && meta.content;\n};\n\nconst CSRFProtection = xhr => {\n const token = csrfToken();\n if (token) {\n return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n }\n};\n\nconst refreshCSRFTokens = () => {\n const token = csrfToken();\n const param = csrfParam();\n if (token && param) {\n return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n }\n};\n\nconst AcceptHeaders = {\n \"*\": \"*/*\",\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\",\n script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n};\n\nconst ajax = options => {\n options = prepareOptions(options);\n var xhr = createXHR(options, (function() {\n const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n }));\n if (options.beforeSend && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n};\n\nvar prepareOptions = function(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === \"GET\" && options.data) {\n if (options.url.indexOf(\"?\") < 0) {\n options.url += \"?\" + options.data;\n } else {\n options.url += \"&\" + options.data;\n }\n }\n if (!(options.dataType in AcceptHeaders)) {\n options.dataType = \"*\";\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== \"*\") {\n options.accept += \", */*; q=0.01\";\n }\n return options;\n};\n\nvar createXHR = function(options, done) {\n const xhr = new XMLHttpRequest;\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader(\"Accept\", options.accept);\n if (typeof options.data === \"string\") {\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n};\n\nvar processResponse = function(response, type) {\n if (typeof response === \"string\" && typeof type === \"string\") {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n const script = document.createElement(\"script\");\n script.setAttribute(\"nonce\", cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n const parser = new DOMParser;\n type = type.replace(/;.+/, \"\");\n try {\n response = parser.parseFromString(response, type);\n } catch (error1) {}\n }\n }\n return response;\n};\n\nconst href = element => element.href;\n\nconst isCrossDomain = function(url) {\n const originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href;\n const urlAnchor = document.createElement(\"a\");\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n } catch (e) {\n return true;\n }\n};\n\nlet preventDefault;\n\nlet {CustomEvent: CustomEvent} = window;\n\nif (typeof CustomEvent !== \"function\") {\n CustomEvent = function(event, params) {\n const evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n ({preventDefault: preventDefault} = CustomEvent.prototype);\n CustomEvent.prototype.preventDefault = function() {\n const result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, \"defaultPrevented\", {\n get() {\n return true;\n }\n });\n }\n return result;\n };\n}\n\nconst fire = (obj, name, data) => {\n const event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n};\n\nconst stopEverything = e => {\n fire(e.target, \"ujs:everythingStopped\");\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n};\n\nconst delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n let {target: target} = e;\n while (!!(target instanceof Element) && !matches(target, selector)) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n}));\n\nconst toArray = e => Array.prototype.slice.call(e);\n\nconst serializeElement = (element, additionalParam) => {\n let inputs = [ element ];\n if (matches(element, \"form\")) {\n inputs = toArray(element.elements);\n }\n const params = [];\n inputs.forEach((function(input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, \"fieldset[disabled] *\")) {\n return;\n }\n if (matches(input, \"select\")) {\n toArray(input.options).forEach((function(option) {\n if (option.selected) {\n params.push({\n name: input.name,\n value: option.value\n });\n }\n }));\n } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n params.push({\n name: input.name,\n value: input.value\n });\n }\n }));\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map((function(param) {\n if (param.name) {\n return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n } else {\n return param;\n }\n })).join(\"&\");\n};\n\nconst formElements = (form, selector) => {\n if (matches(form, \"form\")) {\n return toArray(form.elements).filter((el => matches(el, selector)));\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n};\n\nconst handleConfirmWithRails = rails => function(e) {\n if (!allowAction(this, rails)) {\n stopEverything(e);\n }\n};\n\nconst confirm = (message, element) => window.confirm(message);\n\nvar allowAction = function(element, rails) {\n let callback;\n const message = element.getAttribute(\"data-confirm\");\n if (!message) {\n return true;\n }\n let answer = false;\n if (fire(element, \"confirm\")) {\n try {\n answer = rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, \"confirm:complete\", [ answer ]);\n }\n return answer && callback;\n};\n\nconst handleDisabledElement = function(e) {\n const element = this;\n if (element.disabled) {\n stopEverything(e);\n }\n};\n\nconst enableElement = e => {\n let element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return enableFormElements(element);\n }\n};\n\nconst disableElement = e => {\n const element = e instanceof Event ? e.target : e;\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return disableFormElements(element);\n }\n};\n\nvar disableLinkElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableLinkElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, \"ujs:enable-with\", null);\n }\n element.removeEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n\nvar disableFormElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n if (matches(element, \"button\")) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, \"ujs:enable-with\", element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n\nvar enableFormElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n if (matches(element, \"button\")) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, \"ujs:enable-with\", null);\n }\n element.disabled = false;\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar isXhrRedirect = function(event) {\n const xhr = event.detail ? event.detail[0] : undefined;\n return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n};\n\nconst handleMethodWithRails = rails => function(e) {\n const link = this;\n const method = link.getAttribute(\"data-method\");\n if (!method) {\n return;\n }\n if (isContentEditable(this)) {\n return;\n }\n const href = rails.href(link);\n const csrfToken$1 = csrfToken();\n const csrfParam$1 = csrfParam();\n const form = document.createElement(\"form\");\n let formContent = ``;\n if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n formContent += ``;\n }\n formContent += '';\n form.method = \"post\";\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = \"none\";\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n stopEverything(e);\n};\n\nconst isRemote = function(element) {\n const value = element.getAttribute(\"data-remote\");\n return value != null && value !== \"false\";\n};\n\nconst handleRemoteWithRails = rails => function(e) {\n let data, method, url;\n const element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, \"ajax:before\")) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n if (isContentEditable(element)) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n const withCredentials = element.getAttribute(\"data-with-credentials\");\n const dataType = element.getAttribute(\"data-type\") || \"script\";\n if (matches(element, formSubmitSelector)) {\n const button = getData(element, \"ujs:submit-button\");\n method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n if (method.toUpperCase() === \"GET\") {\n url = url.replace(/\\?.*$/, \"\");\n }\n if (element.enctype === \"multipart/form-data\") {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, \"ujs:submit-button\", null);\n setData(element, \"ujs:submit-button-formmethod\", null);\n setData(element, \"ujs:submit-button-formaction\", null);\n } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n method = element.getAttribute(\"data-method\");\n url = element.getAttribute(\"data-url\");\n data = serializeElement(element, element.getAttribute(\"data-params\"));\n } else {\n method = element.getAttribute(\"data-method\");\n url = rails.href(element);\n data = element.getAttribute(\"data-params\");\n }\n ajax({\n type: method || \"GET\",\n url: url,\n data: data,\n dataType: dataType,\n beforeSend(xhr, options) {\n if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n return fire(element, \"ajax:send\", [ xhr ]);\n } else {\n fire(element, \"ajax:stopped\");\n return false;\n }\n },\n success(...args) {\n return fire(element, \"ajax:success\", args);\n },\n error(...args) {\n return fire(element, \"ajax:error\", args);\n },\n complete(...args) {\n return fire(element, \"ajax:complete\", args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== \"false\"\n });\n stopEverything(e);\n};\n\nconst formSubmitButtonClick = function(e) {\n const button = this;\n const {form: form} = button;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, \"ujs:submit-button\", {\n name: button.name,\n value: button.value\n });\n }\n setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n};\n\nconst preventInsignificantClick = function(e) {\n const link = this;\n const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n const data = link.getAttribute(\"data-params\");\n const metaClick = e.metaKey || e.ctrlKey;\n const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n e.stopImmediatePropagation();\n }\n};\n\nconst Rails = {\n $: $,\n ajax: ajax,\n buttonClickSelector: buttonClickSelector,\n buttonDisableSelector: buttonDisableSelector,\n confirm: confirm,\n cspNonce: cspNonce,\n csrfToken: csrfToken,\n csrfParam: csrfParam,\n CSRFProtection: CSRFProtection,\n delegate: delegate,\n disableElement: disableElement,\n enableElement: enableElement,\n fileInputSelector: fileInputSelector,\n fire: fire,\n formElements: formElements,\n formEnableSelector: formEnableSelector,\n formDisableSelector: formDisableSelector,\n formInputClickSelector: formInputClickSelector,\n formSubmitButtonClick: formSubmitButtonClick,\n formSubmitSelector: formSubmitSelector,\n getData: getData,\n handleDisabledElement: handleDisabledElement,\n href: href,\n inputChangeSelector: inputChangeSelector,\n isCrossDomain: isCrossDomain,\n linkClickSelector: linkClickSelector,\n linkDisableSelector: linkDisableSelector,\n loadCSPNonce: loadCSPNonce,\n matches: matches,\n preventInsignificantClick: preventInsignificantClick,\n refreshCSRFTokens: refreshCSRFTokens,\n serializeElement: serializeElement,\n setData: setData,\n stopEverything: stopEverything\n};\n\nconst handleConfirm = handleConfirmWithRails(Rails);\n\nRails.handleConfirm = handleConfirm;\n\nconst handleMethod = handleMethodWithRails(Rails);\n\nRails.handleMethod = handleMethod;\n\nconst handleRemote = handleRemoteWithRails(Rails);\n\nRails.handleRemote = handleRemote;\n\nconst start = function() {\n if (window._rails_loaded) {\n throw new Error(\"rails-ujs has already been loaded!\");\n }\n window.addEventListener(\"pageshow\", (function() {\n $(formEnableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n $(linkDisableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n }));\n delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n delegate(document, linkClickSelector, \"click\", handleConfirm);\n delegate(document, linkClickSelector, \"click\", disableElement);\n delegate(document, linkClickSelector, \"click\", handleRemote);\n delegate(document, linkClickSelector, \"click\", handleMethod);\n delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n delegate(document, buttonClickSelector, \"click\", handleConfirm);\n delegate(document, buttonClickSelector, \"click\", disableElement);\n delegate(document, buttonClickSelector, \"click\", handleRemote);\n delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n delegate(document, inputChangeSelector, \"change\", handleConfirm);\n delegate(document, inputChangeSelector, \"change\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n delegate(document, formSubmitSelector, \"submit\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n delegate(document, formInputClickSelector, \"click\", handleConfirm);\n delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n return window._rails_loaded = true;\n};\n\nRails.start = start;\n\nif (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n if (jQuery.rails) {\n throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n }));\n}\n\nexport { Rails as default };\n","import CurrentUser from '@frontend/app/features/CurrentUser';\nimport RailsEnv from '@frontend/app/features/RailsEnv';\n\nexport default class DebugLogger {\n constructor(enabled = false) {\n this.enabled = enabled;\n }\n\n log(message, obj) {\n if (this.enabled && (RailsEnv.isDev() || CurrentUser.isAdmin())) {\n let line;\n const stacktrace = new Error().stack.split('\\n');\n if (stacktrace[3].includes('HTMLDocument')) {\n line = stacktrace[2];\n } else {\n line = stacktrace[3];\n }\n const callee = line.trim().split(' ')[1];\n const logMessage = `[debug] ${callee}: ${message}`;\n if (obj) {\n console.log(logMessage, obj);\n } else {\n console.log(logMessage);\n }\n }\n }\n}\n","/*\r\n * Cookies.js - 1.2.3\r\n * https://github.com/ScottHamper/Cookies\r\n *\r\n * This is free and unencumbered software released into the public domain.\r\n */\r\n(function (global, undefined) {\r\n 'use strict';\r\n\r\n var factory = function (window) {\r\n if (typeof window.document !== 'object') {\r\n throw new Error('Cookies.js requires a `window` with a `document` object');\r\n }\r\n\r\n var Cookies = function (key, value, options) {\r\n return arguments.length === 1 ?\r\n Cookies.get(key) : Cookies.set(key, value, options);\r\n };\r\n\r\n // Allows for setter injection in unit tests\r\n Cookies._document = window.document;\r\n\r\n // Used to ensure cookie keys do not collide with\r\n // built-in `Object` properties\r\n Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :)\r\n \r\n Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC');\r\n\r\n Cookies.defaults = {\r\n path: '/',\r\n secure: false\r\n };\r\n\r\n Cookies.get = function (key) {\r\n if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) {\r\n Cookies._renewCache();\r\n }\r\n \r\n var value = Cookies._cache[Cookies._cacheKeyPrefix + key];\r\n\r\n return value === undefined ? undefined : decodeURIComponent(value);\r\n };\r\n\r\n Cookies.set = function (key, value, options) {\r\n options = Cookies._getExtendedOptions(options);\r\n options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires);\r\n\r\n Cookies._document.cookie = Cookies._generateCookieString(key, value, options);\r\n\r\n return Cookies;\r\n };\r\n\r\n Cookies.expire = function (key, options) {\r\n return Cookies.set(key, undefined, options);\r\n };\r\n\r\n Cookies._getExtendedOptions = function (options) {\r\n return {\r\n path: options && options.path || Cookies.defaults.path,\r\n domain: options && options.domain || Cookies.defaults.domain,\r\n expires: options && options.expires || Cookies.defaults.expires,\r\n secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure\r\n };\r\n };\r\n\r\n Cookies._isValidDate = function (date) {\r\n return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime());\r\n };\r\n\r\n Cookies._getExpiresDate = function (expires, now) {\r\n now = now || new Date();\r\n\r\n if (typeof expires === 'number') {\r\n expires = expires === Infinity ?\r\n Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000);\r\n } else if (typeof expires === 'string') {\r\n expires = new Date(expires);\r\n }\r\n\r\n if (expires && !Cookies._isValidDate(expires)) {\r\n throw new Error('`expires` parameter cannot be converted to a valid Date instance');\r\n }\r\n\r\n return expires;\r\n };\r\n\r\n Cookies._generateCookieString = function (key, value, options) {\r\n key = key.replace(/[^#$&+\\^`|]/g, encodeURIComponent);\r\n key = key.replace(/\\(/g, '%28').replace(/\\)/g, '%29');\r\n value = (value + '').replace(/[^!#$&-+\\--:<-\\[\\]-~]/g, encodeURIComponent);\r\n options = options || {};\r\n\r\n var cookieString = key + '=' + value;\r\n cookieString += options.path ? ';path=' + options.path : '';\r\n cookieString += options.domain ? ';domain=' + options.domain : '';\r\n cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : '';\r\n cookieString += options.secure ? ';secure' : '';\r\n\r\n return cookieString;\r\n };\r\n\r\n Cookies._getCacheFromString = function (documentCookie) {\r\n var cookieCache = {};\r\n var cookiesArray = documentCookie ? documentCookie.split('; ') : [];\r\n\r\n for (var i = 0; i < cookiesArray.length; i++) {\r\n var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]);\r\n\r\n if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) {\r\n cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value;\r\n }\r\n }\r\n\r\n return cookieCache;\r\n };\r\n\r\n Cookies._getKeyValuePairFromCookieString = function (cookieString) {\r\n // \"=\" is a valid character in a cookie value according to RFC6265, so cannot `split('=')`\r\n var separatorIndex = cookieString.indexOf('=');\r\n\r\n // IE omits the \"=\" when the cookie value is an empty string\r\n separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex;\r\n\r\n var key = cookieString.substr(0, separatorIndex);\r\n var decodedKey;\r\n try {\r\n decodedKey = decodeURIComponent(key);\r\n } catch (e) {\r\n if (console && typeof console.error === 'function') {\r\n console.error('Could not decode cookie with key \"' + key + '\"', e);\r\n }\r\n }\r\n \r\n return {\r\n key: decodedKey,\r\n value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed\r\n };\r\n };\r\n\r\n Cookies._renewCache = function () {\r\n Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie);\r\n Cookies._cachedDocumentCookie = Cookies._document.cookie;\r\n };\r\n\r\n Cookies._areEnabled = function () {\r\n var testKey = 'cookies.js';\r\n var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1';\r\n Cookies.expire(testKey);\r\n return areEnabled;\r\n };\r\n\r\n Cookies.enabled = Cookies._areEnabled();\r\n\r\n return Cookies;\r\n };\r\n var cookiesExport = (global && typeof global.document === 'object') ? factory(global) : factory;\r\n\r\n // AMD support\r\n if (typeof define === 'function' && define.amd) {\r\n define(function () { return cookiesExport; });\r\n // CommonJS/Node.js support\r\n } else if (typeof exports === 'object') {\r\n // Support Node.js specific `module.exports` (which can be a function)\r\n if (typeof module === 'object' && typeof module.exports === 'object') {\r\n exports = module.exports = cookiesExport;\r\n }\r\n // But always support CommonJS module 1.1.1 spec (`exports` cannot be a function)\r\n exports.Cookies = cookiesExport;\r\n } else {\r\n global.Cookies = cookiesExport;\r\n }\r\n})(typeof window === 'undefined' ? this : window);","import Cookies from 'cookies-js';\n\nexport default class Tracker {\n static store(key, value) {\n this.storeForHours(key, value, this.defaultLifetimeInHours());\n }\n\n static storeForHours(key, value, storeUntilInHours) {\n const now = new Date();\n Cookies.set(key, value, { expires: storeUntilInHours * 60 * 60 });\n Cookies.set(\n `${key}_expiration_info`,\n `Stored at ${now.toISOString()}, for ${storeUntilInHours} hours.`,\n { expires: storeUntilInHours * 60 * 60 }\n );\n }\n\n static defaultLifetimeInHours() {\n return 24;\n }\n\n static get(key) {\n return Cookies.get(key);\n }\n\n static getExpirationInfo(key) {\n return Cookies.get(`${key}_expiration_info`);\n }\n}\n","import DebugLogger from '@frontend/app/features/DebugLogger';\nimport Tracker from '@frontend/app/features/Tracker';\nimport queryString from 'query-string';\n\nexport default class CampaignTracking {\n static init() {\n const trackingRefKey = this.getTrackingRefKey();\n const query = queryString.parse(window.top.location.search);\n const campaignRef = query[trackingRefKey] || false;\n const logger = new DebugLogger(false); // NB: enable logging by setting false => true\n\n if (campaignRef) {\n logger.log(\n `Storing campaign name for ${Tracker.defaultLifetimeInHours()} hours: ${campaignRef}`\n );\n Tracker.store(trackingRefKey, campaignRef);\n } else {\n const currentCampaign = Tracker.get(trackingRefKey);\n if (currentCampaign) {\n const expirationInfo = Tracker.getExpirationInfo(trackingRefKey);\n logger.log(\n `Active campaign: ${currentCampaign}, expiration info: ${expirationInfo}`\n );\n } else {\n logger.log('No campaign name found.');\n }\n }\n }\n\n static getCurrentCampaign() {\n return Tracker.get(this.getTrackingRefKey());\n }\n\n static getTrackingRefKey() {\n return 'utm_campaign';\n }\n}\n","import DebugLogger from '@frontend/app/features/DebugLogger';\nimport Tracker from '@frontend/app/features/Tracker';\nimport CurrentPage from '@frontend/app/features/CurrentPage';\nimport CurrentUser from '@frontend/app/features/CurrentUser';\n\nexport default class ConvertedWithTracking {\n static init() {\n const logger = new DebugLogger(false); // NB: enable logging by setting false => true\n if (CurrentUser.isSubscriber()) {\n return false;\n }\n\n const convertedWith = this.getCurrentPageIdentifier();\n if (convertedWith) {\n logger.log(\n `Storing converted_with for ${Tracker.defaultLifetimeInHours()} hours: ${convertedWith}`\n );\n const value = Tracker.get(this.getTrackingRefKey());\n if (undefined === value) {\n Tracker.store(this.getTrackingRefKey(), convertedWith);\n }\n }\n }\n\n // Returns an identifier for the current page if it is an article page.\n // Example: article-12345-article-title-with-up-to-50-maxchars\n //\n // Also this may include a reference to a ShareUrl-record\n // Example: shared-1-article-12345-article-title-with-up-to-50-maxchars\n //\n // For any other page an empty String is returned.\n static getCurrentPageIdentifier() {\n if (CurrentPage.isArticle()) {\n const pageIdentifierParts = [];\n if (CurrentPage.hasShareUrl()) {\n pageIdentifierParts.push('shared', CurrentPage.getShareUrl().id);\n }\n\n pageIdentifierParts.push(\n 'article',\n CurrentPage.getArticleId(),\n CurrentPage.getArticleUrlSafeTitle()\n );\n return pageIdentifierParts.join('-').substr(0, 50);\n } else {\n const currentConvertedWith = this.getCurrentConvertedWith();\n if (currentConvertedWith.length > 0) {\n return currentConvertedWith;\n }\n\n return ['page', window.top.location.pathname.substring(1)]\n .join('-')\n .replaceAll('/', '-')\n .substr(0, 50);\n }\n }\n\n static getCurrentConvertedWith() {\n return Tracker.get(this.getTrackingRefKey()) || '';\n }\n\n static getTrackingRefKey() {\n return 'converted_with';\n }\n}\n","(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(require,module,exports){\nvar util = require('./util.js'),\n targetWidths = require('./targetWidths.js'),\n autoSize = require('./autoSize');\n\nvar ImgixTag = (function () {\n function ImgixTag(el, opts) {\n this.el = el;\n this.settings = opts || {};\n\n if (!this.el) {\n console.warn('ImgixTag must be passed a DOM element.');\n return;\n }\n\n this.window = this.settings.window ? this.settings.window : null;\n\n if (this.el.hasAttribute('ix-initialized') && !this.settings.force) {\n return;\n }\n\n this.ixPathVal = el.getAttribute(this.settings.pathInputAttribute);\n this.ixParamsVal = el.getAttribute(this.settings.paramsInputAttribute);\n this.ixSrcVal = el.getAttribute(this.settings.srcInputAttribute);\n this.ixHostVal =\n el.getAttribute(this.settings.hostInputAttribute) || this.settings.host;\n\n if (this.ixPathVal && !this.ixHostVal) {\n console.warn(\n 'You must set a value for `imgix.config.host` or specify an `ix-host` attribute to use `ix-path` and `ix-params`.'\n );\n return;\n }\n\n if (typeof this.ixPathVal === 'string' && this.ixPathVal.length == 0) {\n console.warn('`ix-path` cannot accept a value of empty string \"\"');\n return;\n }\n\n if (typeof this.ixSrcVal === 'string' && this.ixSrcVal.length == 0) {\n console.warn('`ix-src` cannot accept a value of empty string \"\"');\n return;\n }\n\n this.baseParams = this._extractBaseParams();\n this.baseUrl = this._buildBaseUrl();\n this.baseUrlWithoutQuery = this.baseUrl.split('?')[0];\n\n //manual override to use sizes, srcset, and src when lazyloading\n if(util.isString(this.el.className)){\n if (this.el.className.includes(\"nolazyload\")){\n this.settings.sizesAttribute = \"sizes\";\n this.settings.srcsetAttribute = \"srcset\";\n this.settings.srcAttribute = \"src\";\n }\n }\n\n if (util.isString(this.settings.sizesAttribute)) {\n this.el.setAttribute(this.settings.sizesAttribute, this.sizes());\n }\n\n if (util.isString(this.settings.srcsetAttribute)) {\n this.el.setAttribute(this.settings.srcsetAttribute, this.srcset());\n }\n\n if (\n util.isString(this.settings.srcAttribute) &&\n this.el.nodeName == 'IMG'\n ) {\n this.el.setAttribute(this.settings.srcAttribute, this.src());\n }\n\n this.el.setAttribute('ix-initialized', 'ix-initialized');\n }\n\n ImgixTag.prototype._extractBaseParams = function () {\n var params = {};\n\n if (\n this.settings.defaultParams &&\n typeof this.settings.defaultParams === 'object' &&\n this.settings.defaultParams !== null\n ) {\n params = Object.assign({}, this.settings.defaultParams);\n }\n\n if (this.ixPathVal) {\n params = Object.assign({}, params, JSON.parse(this.ixParamsVal) || {});\n\n // Encode any passed Base64 variant params\n for (var key in params) {\n if (key.substr(-2) === '64') {\n params[key] = util.encode64(params[key]);\n }\n }\n } else {\n // If the user used `ix-src`, we have to extract the base params\n // from that string URL.\n var lastQuestion = this.ixSrcVal.lastIndexOf('?');\n\n if (lastQuestion > -1) {\n var paramString = this.ixSrcVal.substr(lastQuestion + 1),\n splitParams = paramString.split('&');\n\n for (var i = 0, splitParam; i < splitParams.length; i++) {\n splitParam = splitParams[i].split('=');\n\n params[splitParam[0]] = splitParam[1];\n }\n }\n }\n\n if (this.settings.includeLibraryParam) {\n params.ixlib = 'imgixjs-' + imgix.VERSION;\n }\n\n return params;\n };\n\n ImgixTag.prototype._buildBaseUrl = function () {\n if (this.ixSrcVal) {\n return this.ixSrcVal;\n }\n\n var path = this.ixPathVal,\n protocol = this.settings.useHttps ? 'https' : 'http',\n url = protocol + '://' + this.ixHostVal,\n hostEndsWithSlash = this.ixHostVal.substr(-1) === '/',\n pathStartsWithSlash = path[0] === '/';\n\n // Make sure we don't end up with 2 or 0 slashes between\n // the host and path portions of the generated URL\n if (hostEndsWithSlash && pathStartsWithSlash) {\n url += path.substr(1);\n } else if (!hostEndsWithSlash && !pathStartsWithSlash) {\n url += '/' + path;\n } else {\n url += path;\n }\n\n url += '?';\n var params = [],\n param;\n for (var key in this.baseParams) {\n param = this.baseParams[key];\n if (param == null) {\n continue;\n }\n\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(param));\n }\n\n url += params.join('&');\n\n return url;\n };\n\n ImgixTag.prototype._buildSrcsetPair = function (targetWidth) {\n var clonedParams = util.shallowClone(this.baseParams);\n clonedParams.w = targetWidth;\n\n var url = this.baseUrlWithoutQuery + '?',\n val,\n params = [];\n for (var key in clonedParams) {\n val = clonedParams[key];\n params.push(key + '=' + val);\n }\n\n url += params.join('&');\n\n return url + ' ' + targetWidth + 'w';\n };\n\n ImgixTag.prototype.src = function () {\n return this.baseUrl;\n };\n\n // Returns a comma-separated list of `url widthDescriptor` pairs,\n // scaled appropriately to the same aspect ratio as the base image\n // as appropriate.\n ImgixTag.prototype.srcset = function () {\n var pairs = [];\n\n for (var i = 0; i < targetWidths.length; i++) {\n pairs.push(this._buildSrcsetPair(targetWidths[i]));\n }\n\n return pairs.join(', ');\n };\n\n ImgixTag.prototype.sizes = function () {\n var existingSizes = this.el.getAttribute('sizes');\n var ixSizes = this.el.getAttribute('ix-sizes');\n const el = this.el;\n const _window = this.window;\n\n /**\n *\n * The conditionals bellow decide when to override the value for `sizes` for\n * the given element.\n *\n * - If `sizes` set, we leave the value as is even if `ix-sizes` is `auto`\n * - If `sizes` not set and `ix-sizes` not auto, set `sizes` to `ix-sizes`\n * - If `sizes` not set and `ix-sizes` is auto, set `sizes` automatically\n * - If `sizes` and `ix-sizes` not set, set `sizes` to browser default\n */\n\n if (existingSizes == null && ixSizes !== 'auto') {\n return ixSizes ? ixSizes : '100vw';\n } else if (existingSizes == null && ixSizes === 'auto') {\n return autoSize.updateOnResize({ el, existingSizes, ixSizes, _window });\n } else {\n return existingSizes ? existingSizes : '100vw';\n }\n };\n\n return ImgixTag;\n})();\n\nmodule.exports = ImgixTag;\n\n},{\"./autoSize\":3,\"./targetWidths.js\":6,\"./util.js\":7}],3:[function(require,module,exports){\nconst util = require('./util');\n\nconst WIDTH_MIN_SIZE = 40;\nconst DEBOUNCE_TIMEOUT = 200;\n\n/**\n * Function that returns an element width that's equal to or greater than\n * WIDTH_MIN_SIZE.\n *\n * If the element width is less than the minimum, it will recursively\n * look for first parent element with width greater than WIDTH_MIN_SIZE.\n *\n * As a fallback, if the resulting width is still less than minimum, width\n * is set to WIDTH_MIN_SIZE.\n *\n * We do this to avoid failing to resize when window expands and avoid\n * setting sizes to 0 when el.offsetWidth == 0.\n */\nconst getWidth = function ({ parent, width }) {\n if (width < WIDTH_MIN_SIZE) {\n width = WIDTH_MIN_SIZE;\n\n // TODO: add check and test for parent == null\n let parentWidth = parent.offsetWidth;\n let parentNode = parent.parentNode;\n\n // get the fist parent that has a size over the minimum\n while (parentNode && parentWidth < width) {\n parentWidth = parentNode.offsetWidth;\n\n // set for next loop\n parentNode = parentNode.parentNode;\n }\n\n if (parentWidth > width) {\n width = parentWidth;\n }\n }\n return width;\n};\n\n// Based off of: https://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-with-jquery\n// Determines if the `img` element was rendered on the page\nconst imageLoaded = ({ el }) => {\n // During the onload event, browser identifies any images that\n // weren’t downloaded as not complete. Some Gecko-based browsers\n // report this incorrectly. More here: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-complete\n if (!el.complete) {\n console.warn(\n 'Imgix.js: attempted to set sizes attribute on element with complete evaluating to false'\n );\n return false;\n }\n\n // naturalWidth and naturalHeight give the intrinsic (natural),\n // density-corrected size of the image. If img failed to load,\n // both of these will be zero. More here: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-naturalheight\n if (el.naturalWidth === 0) {\n console.warn(\n 'Imgix.js: attempted to set sizes attribute on element with no naturalWidth'\n );\n return false;\n }\n\n // Otherwise, assume it’s ok.\n return true;\n};\n\n// Returns true if img has sizes attr and the img has loaded.\nconst imgCanBeSized = ({ el, existingSizes, ixSizes, elHasAttributes }) => {\n if (!existingSizes && !ixSizes) {\n console.warn(\n 'Imgix.js: attempted to set sizes attribute on element without existing sizes attribute value'\n );\n return false;\n }\n\n if (!elHasAttributes) {\n console.warn(\n 'Imgix.js: attempted to set sizes attribute on element with no attributes'\n );\n return false;\n }\n\n return imageLoaded({ el });\n};\n\nconst getCurrentSize = ({\n el,\n existingSizes,\n ixSizes,\n elHasAttributes,\n _window,\n}) => {\n // TODO: instead of sizes=\"557px\" do sizes=\"(max-width: currentBrowserWidth + 100) 557px, 100vw\"\n // browserWidth = 1000px, image width = 500px\n // sizes=\"(max-width: currentBrowserWidth + 100) 557px, (imageWidth / browserWidth * 100)vw\" --> 50vw\n\n // If image loaded calc size, otherwise leave as existing\n let currentSize = imgCanBeSized({\n el,\n existingSizes,\n ixSizes,\n elHasAttributes,\n _window,\n })\n ? getWidth({\n el,\n parent: el.parentNode,\n width: el.offsetWidth,\n }) + 'px'\n : existingSizes;\n\n return currentSize;\n};\n\nconst resizeElement = ({\n el,\n existingSizes,\n ixSizes,\n _window,\n elHasAttributes,\n}) => {\n // Run our resize function callback that calcs current size\n // and updates the elements `sizes` to match.\n const currentSize = getCurrentSize({\n el,\n existingSizes,\n ixSizes,\n elHasAttributes,\n _window,\n });\n\n // Only update element attributes if changed\n if (currentSize !== existingSizes) {\n _window.requestAnimationFrame(() => {\n el.setAttribute('sizes', currentSize);\n });\n }\n};\n\n// Function that makes throttled rAF calls to avoid multiple calls in the same frame\nconst updateOnResize = ({ el, existingSizes, ixSizes, _window }) => {\n // debounce fn\n const elHasAttributes = el.hasAttributes();\n\n const requestIdleCallback = util.rICShim(_window);\n const runDebounce = util.debounce(() => {\n requestIdleCallback(() =>\n resizeElement({ el, existingSizes, ixSizes, _window, elHasAttributes })\n );\n }, DEBOUNCE_TIMEOUT);\n // Listen for resize\n _window.addEventListener('resize', runDebounce, false);\n // Return the current size\n return (\n getWidth({\n el,\n parent: el.parentNode,\n width: el.offsetWidth,\n }) + 'px'\n );\n};\n\nconst autoSize = {\n getElementWidth: getWidth,\n imgCanBeSized,\n updateOnResize,\n};\n\nmodule.exports = autoSize;\n\n},{\"./util\":7}],4:[function(require,module,exports){\nmodule.exports = {\n // URL assembly\n host: null,\n useHttps: true,\n includeLibraryParam: true,\n defaultParams: {},\n\n // Output element attributes\n srcAttribute: 'src',\n srcsetAttribute: 'srcset',\n sizesAttribute: 'sizes',\n\n // Input element attributes\n srcInputAttribute: 'ix-src',\n pathInputAttribute: 'ix-path',\n paramsInputAttribute: 'ix-params',\n hostInputAttribute: 'ix-host',\n window: typeof window !== 'undefined' ? window : null,\n};\n\n},{}],5:[function(require,module,exports){\n(function (global){(function (){\nvar ImgixTag = require('./ImgixTag.js'),\n util = require('./util.js'),\n defaultConfig = require('./defaultConfig');\n\nvar VERSION = '4.0.1';\n\nglobal.imgix = {\n init: function (opts) {\n var settings = util.shallowClone(this.config);\n util.extend(settings, opts || {});\n\n var elementQuery = [\n 'img[' + settings.srcInputAttribute + ']',\n 'source[' + settings.srcInputAttribute + ']',\n 'img[' + settings.pathInputAttribute + ']',\n 'source[' + settings.pathInputAttribute + ']',\n ].join(',');\n\n var allImgandSourceTags = document.querySelectorAll(elementQuery);\n\n for (var i = 0, el; i < allImgandSourceTags.length; i++) {\n new ImgixTag(allImgandSourceTags[i], settings);\n }\n },\n config: defaultConfig,\n VERSION: VERSION,\n};\n\nutil.domReady(function () {\n util.objectEach(defaultConfig, function (defaultValue, key) {\n var metaTagValue = util.getMetaTagValue(key);\n\n if (typeof metaTagValue !== 'undefined') {\n var defaultConfigType = typeof defaultConfig[key];\n // Only allow boolean values for boolean configs\n if (defaultConfigType === 'boolean') {\n global.imgix.config[key] = !!metaTagValue;\n } else if (defaultConfigType === 'object' && defaultConfig[key] != null) {\n global.imgix.config[key] = JSON.parse(metaTagValue) || {};\n } else {\n global.imgix.config[key] = metaTagValue;\n }\n }\n });\n\n if (util.getMetaTagValue('autoInit') !== false) {\n global.imgix.init();\n }\n});\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./ImgixTag.js\":2,\"./defaultConfig\":4,\"./util.js\":7}],6:[function(require,module,exports){\nfunction targetWidths() {\n var resolutions = [];\n var prev = 100;\n var INCREMENT_PERCENTAGE = 8;\n var MAX_SIZE = 8192;\n\n function ensureEven(n) {\n return 2 * Math.round(n / 2);\n }\n\n while (prev <= MAX_SIZE) {\n resolutions.push(ensureEven(prev));\n prev *= 1 + (INCREMENT_PERCENTAGE / 100) * 2;\n }\n\n return resolutions;\n}\n\nmodule.exports = targetWidths();\n\n},{}],7:[function(require,module,exports){\nconst _debounce = require('lodash.debounce');\n\nmodule.exports = {\n compact: function (arr) {\n var compactedArr = [];\n\n for (var i = 0; i < arr.length; i++) {\n arr[i] && compactedArr.push(arr[i]);\n }\n\n return compactedArr;\n },\n shallowClone: function (obj) {\n var clone = {};\n\n for (var key in obj) {\n clone[key] = obj[key];\n }\n\n return clone;\n },\n extend: function (dest, source) {\n for (var key in source) {\n dest[key] = source[key];\n }\n\n return dest;\n },\n uniq: function (arr) {\n var n = {},\n r = [],\n i;\n\n for (i = 0; i < arr.length; i++) {\n if (!n[arr[i]]) {\n n[arr[i]] = true;\n r.push(arr[i]);\n }\n }\n\n return r;\n },\n objectEach: function (obj, iterator) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n iterator(obj[key], key);\n }\n }\n },\n isString: function (value) {\n return typeof value === 'string';\n },\n encode64: function (str) {\n var encodedUtf8Str = unescape(encodeURIComponent(str)),\n b64Str = btoa(encodedUtf8Str),\n urlSafeB64Str = b64Str.replace(/\\+/g, '-');\n\n urlSafeB64Str = urlSafeB64Str\n .replace(/\\//g, '_')\n .replace(/\\//g, '_')\n .replace(/\\=+$/, '');\n\n return urlSafeB64Str;\n },\n decode64: function (urlSafeB64Str) {\n var b64Str = urlSafeB64Str.replace(/-/g, '+').replace(/_/g, '/'),\n encodedUtf8Str = atob(b64Str),\n str = decodeURIComponent(escape(encodedUtf8Str));\n\n return str;\n },\n domReady: function (cb) {\n if (document.readyState === 'complete') {\n setTimeout(cb, 0);\n } else if (document.addEventListener) {\n document.addEventListener('DOMContentLoaded', cb, false);\n } else {\n document.attachEvent('onreadystatechange', function () {\n if (document.readyState === 'complete') {\n cb();\n }\n });\n }\n },\n getMetaTagValue: function (propertyName) {\n var metaTag = document.querySelector(\n 'meta[property=\"ix:' + propertyName + '\"]'\n ),\n metaTagContent;\n\n if (!metaTag) {\n return;\n }\n\n metaTagContent = metaTag.getAttribute('content');\n\n if (metaTagContent === 'true') {\n return true;\n } else if (metaTagContent === 'false') {\n return false;\n } else if (metaTagContent === '' || metaTagContent === 'null') {\n return null;\n } else {\n return metaTagContent;\n }\n },\n debounce: _debounce,\n rICShim: function (_window) {\n // from: https://developers.google.com/web/updates/2015/08/using-requestidlecallback#checking_for_requestidlecallback\n return (\n _window.requestIdleCallback ||\n function (cb) {\n var start = Date.now();\n return setTimeout(function () {\n cb({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50 - (Date.now() - start));\n },\n });\n }, 1);\n }\n );\n },\n};\n\n},{\"lodash.debounce\":1}]},{},[5]);\n","(function(window, factory) {\n\tvar lazySizes = factory(window, window.document, Date);\n\twindow.lazySizes = lazySizes;\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = lazySizes;\n\t}\n}(typeof window != 'undefined' ?\n window : {}, \n/**\n * import(\"./types/global\")\n * @typedef { import(\"./types/lazysizes-config\").LazySizesConfigPartial } LazySizesConfigPartial\n */\nfunction l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost\n\t'use strict';\n\t/*jshint eqnull:true */\n\n\tvar lazysizes,\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tlazySizesCfg;\n\n\t(function(){\n\t\tvar prop;\n\n\t\tvar lazySizesDefaults = {\n\t\t\tlazyClass: 'lazyload',\n\t\t\tloadedClass: 'lazyloaded',\n\t\t\tloadingClass: 'lazyloading',\n\t\t\tpreloadClass: 'lazypreload',\n\t\t\terrorClass: 'lazyerror',\n\t\t\t//strictClass: 'lazystrict',\n\t\t\tautosizesClass: 'lazyautosizes',\n\t\t\tfastLoadedClass: 'ls-is-cached',\n\t\t\tiframeLoadMode: 0,\n\t\t\tsrcAttr: 'data-src',\n\t\t\tsrcsetAttr: 'data-srcset',\n\t\t\tsizesAttr: 'data-sizes',\n\t\t\t//preloadAfterLoad: false,\n\t\t\tminSize: 40,\n\t\t\tcustomMedia: {},\n\t\t\tinit: true,\n\t\t\texpFactor: 1.5,\n\t\t\thFac: 0.8,\n\t\t\tloadMode: 2,\n\t\t\tloadHidden: true,\n\t\t\tricTimeout: 0,\n\t\t\tthrottleDelay: 125,\n\t\t};\n\n\t\tlazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n\t\tfor(prop in lazySizesDefaults){\n\t\t\tif(!(prop in lazySizesCfg)){\n\t\t\t\tlazySizesCfg[prop] = lazySizesDefaults[prop];\n\t\t\t}\n\t\t}\n\t})();\n\n\tif (!document || !document.getElementsByClassName) {\n\t\treturn {\n\t\t\tinit: function () {},\n\t\t\t/**\n\t\t\t * @type { LazySizesConfigPartial }\n\t\t\t */\n\t\t\tcfg: lazySizesCfg,\n\t\t\t/**\n\t\t\t * @type { true }\n\t\t\t */\n\t\t\tnoSupport: true,\n\t\t};\n\t}\n\n\tvar docElem = document.documentElement;\n\n\tvar supportPicture = window.HTMLPictureElement;\n\n\tvar _addEventListener = 'addEventListener';\n\n\tvar _getAttribute = 'getAttribute';\n\n\t/**\n\t * Update to bind to window because 'this' becomes null during SSR\n\t * builds.\n\t */\n\tvar addEventListener = window[_addEventListener].bind(window);\n\n\tvar setTimeout = window.setTimeout;\n\n\tvar requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n\tvar requestIdleCallback = window.requestIdleCallback;\n\n\tvar regPicture = /^picture$/i;\n\n\tvar loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n\tvar regClassCache = {};\n\n\tvar forEach = Array.prototype.forEach;\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar hasClass = function(ele, cls) {\n\t\tif(!regClassCache[cls]){\n\t\t\tregClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n\t\t}\n\t\treturn regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar addClass = function(ele, cls) {\n\t\tif (!hasClass(ele, cls)){\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n\t\t}\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar removeClass = function(ele, cls) {\n\t\tvar reg;\n\t\tif ((reg = hasClass(ele,cls))) {\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n\t\t}\n\t};\n\n\tvar addRemoveLoadEvents = function(dom, fn, add){\n\t\tvar action = add ? _addEventListener : 'removeEventListener';\n\t\tif(add){\n\t\t\taddRemoveLoadEvents(dom, fn);\n\t\t}\n\t\tloadEvents.forEach(function(evt){\n\t\t\tdom[action](evt, fn);\n\t\t});\n\t};\n\n\t/**\n\t * @param elem { Element }\n\t * @param name { string }\n\t * @param detail { any }\n\t * @param noBubbles { boolean }\n\t * @param noCancelable { boolean }\n\t * @returns { CustomEvent }\n\t */\n\tvar triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n\t\tvar event = document.createEvent('Event');\n\n\t\tif(!detail){\n\t\t\tdetail = {};\n\t\t}\n\n\t\tdetail.instance = lazysizes;\n\n\t\tevent.initEvent(name, !noBubbles, !noCancelable);\n\n\t\tevent.detail = detail;\n\n\t\telem.dispatchEvent(event);\n\t\treturn event;\n\t};\n\n\tvar updatePolyfill = function (el, full){\n\t\tvar polyfill;\n\t\tif( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n\t\t\tif(full && full.src && !el[_getAttribute]('srcset')){\n\t\t\t\tel.setAttribute('srcset', full.src);\n\t\t\t}\n\t\t\tpolyfill({reevaluate: true, elements: [el]});\n\t\t} else if(full && full.src){\n\t\t\tel.src = full.src;\n\t\t}\n\t};\n\n\tvar getCSS = function (elem, style){\n\t\treturn (getComputedStyle(elem, null) || {})[style];\n\t};\n\n\t/**\n\t *\n\t * @param elem { Element }\n\t * @param parent { Element }\n\t * @param [width] {number}\n\t * @returns {number}\n\t */\n\tvar getWidth = function(elem, parent, width){\n\t\twidth = width || elem.offsetWidth;\n\n\t\twhile(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n\t\t\twidth = parent.offsetWidth;\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tvar rAF = (function(){\n\t\tvar running, waiting;\n\t\tvar firstFns = [];\n\t\tvar secondFns = [];\n\t\tvar fns = firstFns;\n\n\t\tvar run = function(){\n\t\t\tvar runFns = fns;\n\n\t\t\tfns = firstFns.length ? secondFns : firstFns;\n\n\t\t\trunning = true;\n\t\t\twaiting = false;\n\n\t\t\twhile(runFns.length){\n\t\t\t\trunFns.shift()();\n\t\t\t}\n\n\t\t\trunning = false;\n\t\t};\n\n\t\tvar rafBatch = function(fn, queue){\n\t\t\tif(running && !queue){\n\t\t\t\tfn.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tfns.push(fn);\n\n\t\t\t\tif(!waiting){\n\t\t\t\t\twaiting = true;\n\t\t\t\t\t(document.hidden ? setTimeout : requestAnimationFrame)(run);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trafBatch._lsFlush = run;\n\n\t\treturn rafBatch;\n\t})();\n\n\tvar rAFIt = function(fn, simple){\n\t\treturn simple ?\n\t\t\tfunction() {\n\t\t\t\trAF(fn);\n\t\t\t} :\n\t\t\tfunction(){\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\t\t\trAF(function(){\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t});\n\t\t\t}\n\t\t;\n\t};\n\n\tvar throttle = function(fn){\n\t\tvar running;\n\t\tvar lastTime = 0;\n\t\tvar gDelay = lazySizesCfg.throttleDelay;\n\t\tvar rICTimeout = lazySizesCfg.ricTimeout;\n\t\tvar run = function(){\n\t\t\trunning = false;\n\t\t\tlastTime = Date.now();\n\t\t\tfn();\n\t\t};\n\t\tvar idleCallback = requestIdleCallback && rICTimeout > 49 ?\n\t\t\tfunction(){\n\t\t\t\trequestIdleCallback(run, {timeout: rICTimeout});\n\n\t\t\t\tif(rICTimeout !== lazySizesCfg.ricTimeout){\n\t\t\t\t\trICTimeout = lazySizesCfg.ricTimeout;\n\t\t\t\t}\n\t\t\t} :\n\t\t\trAFIt(function(){\n\t\t\t\tsetTimeout(run);\n\t\t\t}, true)\n\t\t;\n\n\t\treturn function(isPriority){\n\t\t\tvar delay;\n\n\t\t\tif((isPriority = isPriority === true)){\n\t\t\t\trICTimeout = 33;\n\t\t\t}\n\n\t\t\tif(running){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trunning = true;\n\n\t\t\tdelay = gDelay - (Date.now() - lastTime);\n\n\t\t\tif(delay < 0){\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif(isPriority || delay < 9){\n\t\t\t\tidleCallback();\n\t\t\t} else {\n\t\t\t\tsetTimeout(idleCallback, delay);\n\t\t\t}\n\t\t};\n\t};\n\n\t//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\tvar debounce = function(func) {\n\t\tvar timeout, timestamp;\n\t\tvar wait = 99;\n\t\tvar run = function(){\n\t\t\ttimeout = null;\n\t\t\tfunc();\n\t\t};\n\t\tvar later = function() {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tsetTimeout(later, wait - last);\n\t\t\t} else {\n\t\t\t\t(requestIdleCallback || run)(run);\n\t\t\t}\n\t\t};\n\n\t\treturn function() {\n\t\t\ttimestamp = Date.now();\n\n\t\t\tif (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar loader = (function(){\n\t\tvar preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n\t\tvar eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n\t\tvar regImg = /^img$/i;\n\t\tvar regIframe = /^iframe$/i;\n\n\t\tvar supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n\t\tvar shrinkExpand = 0;\n\t\tvar currentExpand = 0;\n\n\t\tvar isLoading = 0;\n\t\tvar lowRuns = -1;\n\n\t\tvar resetPreloading = function(e){\n\t\t\tisLoading--;\n\t\t\tif(!e || isLoading < 0 || !e.target){\n\t\t\t\tisLoading = 0;\n\t\t\t}\n\t\t};\n\n\t\tvar isVisible = function (elem) {\n\t\t\tif (isBodyHidden == null) {\n\t\t\t\tisBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n\t\t\t}\n\n\t\t\treturn isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n\t\t};\n\n\t\tvar isNestedVisible = function(elem, elemExpand){\n\t\t\tvar outerRect;\n\t\t\tvar parent = elem;\n\t\t\tvar visible = isVisible(elem);\n\n\t\t\teLtop -= elemExpand;\n\t\t\teLbottom += elemExpand;\n\t\t\teLleft -= elemExpand;\n\t\t\teLright += elemExpand;\n\n\t\t\twhile(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n\t\t\t\tvisible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n\t\t\t\tif(visible && getCSS(parent, 'overflow') != 'visible'){\n\t\t\t\t\touterRect = parent.getBoundingClientRect();\n\t\t\t\t\tvisible = eLright > outerRect.left &&\n\t\t\t\t\t\teLleft < outerRect.right &&\n\t\t\t\t\t\teLbottom > outerRect.top - 1 &&\n\t\t\t\t\t\teLtop < outerRect.bottom + 1\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn visible;\n\t\t};\n\n\t\tvar checkElements = function() {\n\t\t\tvar eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n\t\t\t\tbeforeExpandVal, defaultExpand, preloadExpand, hFac;\n\t\t\tvar lazyloadElems = lazysizes.elements;\n\n\t\t\tif((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n\t\t\t\ti = 0;\n\n\t\t\t\tlowRuns++;\n\n\t\t\t\tfor(; i < eLlen; i++){\n\n\t\t\t\t\tif(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n\t\t\t\t\tif(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n\t\t\t\t\tif(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n\t\t\t\t\t\telemExpand = currentExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!defaultExpand) {\n\t\t\t\t\t\tdefaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n\t\t\t\t\t\t\tdocElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n\t\t\t\t\t\t\tlazySizesCfg.expand;\n\n\t\t\t\t\t\tlazysizes._defEx = defaultExpand;\n\n\t\t\t\t\t\tpreloadExpand = defaultExpand * lazySizesCfg.expFactor;\n\t\t\t\t\t\thFac = lazySizesCfg.hFac;\n\t\t\t\t\t\tisBodyHidden = null;\n\n\t\t\t\t\t\tif(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n\t\t\t\t\t\t\tcurrentExpand = preloadExpand;\n\t\t\t\t\t\t\tlowRuns = 0;\n\t\t\t\t\t\t} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n\t\t\t\t\t\t\tcurrentExpand = defaultExpand;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentExpand = shrinkExpand;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(beforeExpandVal !== elemExpand){\n\t\t\t\t\t\teLvW = innerWidth + (elemExpand * hFac);\n\t\t\t\t\t\telvH = innerHeight + elemExpand;\n\t\t\t\t\t\telemNegativeExpand = elemExpand * -1;\n\t\t\t\t\t\tbeforeExpandVal = elemExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\trect = lazyloadElems[i].getBoundingClientRect();\n\n\t\t\t\t\tif ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n\t\t\t\t\t\t(eLtop = rect.top) <= elvH &&\n\t\t\t\t\t\t(eLright = rect.right) >= elemNegativeExpand * hFac &&\n\t\t\t\t\t\t(eLleft = rect.left) <= eLvW &&\n\t\t\t\t\t\t(eLbottom || eLright || eLleft || eLtop) &&\n\t\t\t\t\t\t(lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n\t\t\t\t\t\t((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n\t\t\t\t\t\tunveilElement(lazyloadElems[i]);\n\t\t\t\t\t\tloadedSomething = true;\n\t\t\t\t\t\tif(isLoading > 9){break;}\n\t\t\t\t\t} else if(!loadedSomething && isCompleted && !autoLoadElem &&\n\t\t\t\t\t\tisLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n\t\t\t\t\t\t(preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n\t\t\t\t\t\t(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n\t\t\t\t\t\tautoLoadElem = preloadElems[0] || lazyloadElems[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(autoLoadElem && !loadedSomething){\n\t\t\t\t\tunveilElement(autoLoadElem);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar throttledCheckElements = throttle(checkElements);\n\n\t\tvar switchLoadingClass = function(e){\n\t\t\tvar elem = e.target;\n\n\t\t\tif (elem._lazyCache) {\n\t\t\t\tdelete elem._lazyCache;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresetPreloading(e);\n\t\t\taddClass(elem, lazySizesCfg.loadedClass);\n\t\t\tremoveClass(elem, lazySizesCfg.loadingClass);\n\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass);\n\t\t\ttriggerEvent(elem, 'lazyloaded');\n\t\t};\n\t\tvar rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\t\tvar rafSwitchLoadingClass = function(e){\n\t\t\trafedSwitchLoadingClass({target: e.target});\n\t\t};\n\n\t\tvar changeIframeSrc = function(elem, src){\n\t\t\tvar loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode;\n\n\t\t\t// loadMode can be also a string!\n\t\t\tif (loadMode == 0) {\n\t\t\t\telem.contentWindow.location.replace(src);\n\t\t\t} else if (loadMode == 1) {\n\t\t\t\telem.src = src;\n\t\t\t}\n\t\t};\n\n\t\tvar handleSources = function(source){\n\t\t\tvar customMedia;\n\n\t\t\tvar sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n\t\t\tif( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n\t\t\t\tsource.setAttribute('media', customMedia);\n\t\t\t}\n\n\t\t\tif(sourceSrcset){\n\t\t\t\tsource.setAttribute('srcset', sourceSrcset);\n\t\t\t}\n\t\t};\n\n\t\tvar lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n\t\t\tvar src, srcset, parent, isPicture, event, firesLoad;\n\n\t\t\tif(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n\t\t\t\tif(sizes){\n\t\t\t\t\tif(isAuto){\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.autosizesClass);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute('sizes', sizes);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsrcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n\t\t\t\tsrc = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n\t\t\t\tif(isImg) {\n\t\t\t\t\tparent = elem.parentNode;\n\t\t\t\t\tisPicture = parent && regPicture.test(parent.nodeName || '');\n\t\t\t\t}\n\n\t\t\t\tfiresLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n\t\t\t\tevent = {target: elem};\n\n\t\t\t\taddClass(elem, lazySizesCfg.loadingClass);\n\n\t\t\t\tif(firesLoad){\n\t\t\t\t\tclearTimeout(resetPreloadingTimer);\n\t\t\t\t\tresetPreloadingTimer = setTimeout(resetPreloading, 2500);\n\t\t\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n\t\t\t\t}\n\n\t\t\t\tif(isPicture){\n\t\t\t\t\tforEach.call(parent.getElementsByTagName('source'), handleSources);\n\t\t\t\t}\n\n\t\t\t\tif(srcset){\n\t\t\t\t\telem.setAttribute('srcset', srcset);\n\t\t\t\t} else if(src && !isPicture){\n\t\t\t\t\tif(regIframe.test(elem.nodeName)){\n\t\t\t\t\t\tchangeIframeSrc(elem, src);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.src = src;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(isImg && (srcset || isPicture)){\n\t\t\t\t\tupdatePolyfill(elem, {src: src});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(elem._lazyRace){\n\t\t\t\tdelete elem._lazyRace;\n\t\t\t}\n\t\t\tremoveClass(elem, lazySizesCfg.lazyClass);\n\n\t\t\trAF(function(){\n\t\t\t\t// Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n\t\t\t\tvar isLoaded = elem.complete && elem.naturalWidth > 1;\n\n\t\t\t\tif( !firesLoad || isLoaded){\n\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.fastLoadedClass);\n\t\t\t\t\t}\n\t\t\t\t\tswitchLoadingClass(event);\n\t\t\t\t\telem._lazyCache = true;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tif ('_lazyCache' in elem) {\n\t\t\t\t\t\t\tdelete elem._lazyCache;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 9);\n\t\t\t\t}\n\t\t\t\tif (elem.loading == 'lazy') {\n\t\t\t\t\tisLoading--;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t});\n\n\t\t/**\n\t\t *\n\t\t * @param elem { Element }\n\t\t */\n\t\tvar unveilElement = function (elem){\n\t\t\tif (elem._lazyRace) {return;}\n\t\t\tvar detail;\n\n\t\t\tvar isImg = regImg.test(elem.nodeName);\n\n\t\t\t//allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\t\t\tvar sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n\t\t\tvar isAuto = sizes == 'auto';\n\n\t\t\tif( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n\t\t\tdetail = triggerEvent(elem, 'lazyunveilread').detail;\n\n\t\t\tif(isAuto){\n\t\t\t\t autoSizer.updateElem(elem, true, elem.offsetWidth);\n\t\t\t}\n\n\t\t\telem._lazyRace = true;\n\t\t\tisLoading++;\n\n\t\t\tlazyUnveil(elem, detail, isAuto, sizes, isImg);\n\t\t};\n\n\t\tvar afterScroll = debounce(function(){\n\t\t\tlazySizesCfg.loadMode = 3;\n\t\t\tthrottledCheckElements();\n\t\t});\n\n\t\tvar altLoadmodeScrollListner = function(){\n\t\t\tif(lazySizesCfg.loadMode == 3){\n\t\t\t\tlazySizesCfg.loadMode = 2;\n\t\t\t}\n\t\t\tafterScroll();\n\t\t};\n\n\t\tvar onload = function(){\n\t\t\tif(isCompleted){return;}\n\t\t\tif(Date.now() - started < 999){\n\t\t\t\tsetTimeout(onload, 999);\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tisCompleted = true;\n\n\t\t\tlazySizesCfg.loadMode = 3;\n\n\t\t\tthrottledCheckElements();\n\n\t\t\taddEventListener('scroll', altLoadmodeScrollListner, true);\n\t\t};\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tstarted = Date.now();\n\n\t\t\t\tlazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n\t\t\t\tpreloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n\t\t\t\taddEventListener('scroll', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('resize', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('pageshow', function (e) {\n\t\t\t\t\tif (e.persisted) {\n\t\t\t\t\t\tvar loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n\t\t\t\t\t\tif (loadingElements.length && loadingElements.forEach) {\n\t\t\t\t\t\t\trequestAnimationFrame(function () {\n\t\t\t\t\t\t\t\tloadingElements.forEach( function (img) {\n\t\t\t\t\t\t\t\t\tif (img.complete) {\n\t\t\t\t\t\t\t\t\t\tunveilElement(img);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(window.MutationObserver){\n\t\t\t\t\tnew MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n\t\t\t\t} else {\n\t\t\t\t\tdocElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\t\t\t\t\tdocElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\t\t\t\t\tsetInterval(throttledCheckElements, 999);\n\t\t\t\t}\n\n\t\t\t\taddEventListener('hashchange', throttledCheckElements, true);\n\n\t\t\t\t//, 'fullscreenchange'\n\t\t\t\t['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n\t\t\t\t\tdocument[_addEventListener](name, throttledCheckElements, true);\n\t\t\t\t});\n\n\t\t\t\tif((/d$|^c/.test(document.readyState))){\n\t\t\t\t\tonload();\n\t\t\t\t} else {\n\t\t\t\t\taddEventListener('load', onload);\n\t\t\t\t\tdocument[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\t\t\t\t\tsetTimeout(onload, 20000);\n\t\t\t\t}\n\n\t\t\t\tif(lazysizes.elements.length){\n\t\t\t\t\tcheckElements();\n\t\t\t\t\trAF._lsFlush();\n\t\t\t\t} else {\n\t\t\t\t\tthrottledCheckElements();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcheckElems: throttledCheckElements,\n\t\t\tunveil: unveilElement,\n\t\t\t_aLSL: altLoadmodeScrollListner,\n\t\t};\n\t})();\n\n\n\tvar autoSizer = (function(){\n\t\tvar autosizesElems;\n\n\t\tvar sizeElement = rAFIt(function(elem, parent, event, width){\n\t\t\tvar sources, i, len;\n\t\t\telem._lazysizesWidth = width;\n\t\t\twidth += 'px';\n\n\t\t\telem.setAttribute('sizes', width);\n\n\t\t\tif(regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tsources[i].setAttribute('sizes', width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!event.detail.dataAttr){\n\t\t\t\tupdatePolyfill(elem, event.detail);\n\t\t\t}\n\t\t});\n\t\t/**\n\t\t *\n\t\t * @param elem {Element}\n\t\t * @param dataAttr\n\t\t * @param [width] { number }\n\t\t */\n\t\tvar getSizeElement = function (elem, dataAttr, width){\n\t\t\tvar event;\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif(parent){\n\t\t\t\twidth = getWidth(elem, parent, width);\n\t\t\t\tevent = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n\t\t\t\tif(!event.defaultPrevented){\n\t\t\t\t\twidth = event.detail.width;\n\n\t\t\t\t\tif(width && width !== elem._lazysizesWidth){\n\t\t\t\t\t\tsizeElement(elem, parent, event, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar updateElementsSizes = function(){\n\t\t\tvar i;\n\t\t\tvar len = autosizesElems.length;\n\t\t\tif(len){\n\t\t\t\ti = 0;\n\n\t\t\t\tfor(; i < len; i++){\n\t\t\t\t\tgetSizeElement(autosizesElems[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tautosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n\t\t\t\taddEventListener('resize', debouncedUpdateElementsSizes);\n\t\t\t},\n\t\t\tcheckElems: debouncedUpdateElementsSizes,\n\t\t\tupdateElem: getSizeElement\n\t\t};\n\t})();\n\n\tvar init = function(){\n\t\tif(!init.i && document.getElementsByClassName){\n\t\t\tinit.i = true;\n\t\t\tautoSizer._();\n\t\t\tloader._();\n\t\t}\n\t};\n\n\tsetTimeout(function(){\n\t\tif(lazySizesCfg.init){\n\t\t\tinit();\n\t\t}\n\t});\n\n\tlazysizes = {\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tcfg: lazySizesCfg,\n\t\tautoSizer: autoSizer,\n\t\tloader: loader,\n\t\tinit: init,\n\t\tuP: updatePolyfill,\n\t\taC: addClass,\n\t\trC: removeClass,\n\t\thC: hasClass,\n\t\tfire: triggerEvent,\n\t\tgW: getWidth,\n\t\trAF: rAF,\n\t};\n\n\treturn lazysizes;\n}\n));\n","/*\nThis lazySizes extension adds better support for print.\nIn case the user starts to print lazysizes will load all images.\n*/\n(function(window, factory) {\n\tvar globalInstall = function(){\n\t\tfactory(window.lazySizes);\n\t\twindow.removeEventListener('lazyunveilread', globalInstall, true);\n\t};\n\n\tfactory = factory.bind(null, window, window.document);\n\n\tif(typeof module == 'object' && module.exports){\n\t\tfactory(require('lazysizes'));\n\t} else if (typeof define == 'function' && define.amd) {\n\t\tdefine(['lazysizes'], factory);\n\t} else if(window.lazySizes) {\n\t\tglobalInstall();\n\t} else {\n\t\twindow.addEventListener('lazyunveilread', globalInstall, true);\n\t}\n}(window, function(window, document, lazySizes) {\n\t/*jshint eqnull:true */\n\t'use strict';\n\tvar config, elements, onprint, printMedia;\n\t// see also: http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/\n\tif(window.addEventListener){\n\t\tconfig = lazySizes && lazySizes.cfg;\n\t\telements = config.lazyClass || 'lazyload';\n\t\tonprint = function(){\n\t\t\tvar i, len;\n\t\t\tif(typeof elements == 'string'){\n\t\t\t\telements = document.getElementsByClassName(elements);\n\t\t\t}\n\n\t\t\tif(lazySizes){\n\t\t\t\tfor(i = 0, len = elements.length; i < len; i++){\n\t\t\t\t\tlazySizes.loader.unveil(elements[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\taddEventListener('beforeprint', onprint, false);\n\n\t\tif(!('onbeforeprint' in window) && window.matchMedia && (printMedia = matchMedia('print')) && printMedia.addListener){\n\t\t\tprintMedia.addListener(function(){\n\t\t\t\tif(printMedia.matches){\n\t\t\t\t\tonprint();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}));\n","import 'imgix.js/dist/imgix.js';\nimport RailsEnv from '@frontend/app/features/RailsEnv';\nimport DebugLogger from '@frontend/app/features/DebugLogger';\n\nimport 'lazysizes';\nimport 'lazysizes/plugins/print/ls.print';\n\nexport default class ImgixHelper {\n static init() {\n this.logger = new DebugLogger(false); // NB: enable logging by setting false => true\n this.imgix.config.includeLibraryParam = false;\n\n // NB: Sometimes the computedWith is larger than necessary :/\n // we hook into the lazybeforesizes-event to check and optionally\n // overwrite the too-large computedWith\n document.addEventListener('lazybeforesizes', (event) => {\n const targetWidth = event.target.width;\n const computedWith = event.detail.width;\n event.detail.width = Math.min(computedWith, targetWidth);\n });\n\n this.refresh();\n }\n\n static get imgix() {\n return window.imgix;\n }\n\n static refresh() {\n this.imgix.init({\n host: window.ENV.imgix.source,\n srcAttribute: 'data-src',\n srcsetAttribute: 'data-srcset',\n sizesAttribute: 'data-ignored-sizes',\n });\n Array.from(\n document.querySelectorAll(\n '[ix-initialized=ix-initialized]:not(.lazyloaded):not([data-lazyload-initialized])'\n )\n ).forEach(\n function (imgTag) {\n imgTag.classList.add('lazyload');\n imgTag.dataset.lazyloadInitialized = true;\n imgTag.classList.remove('kr-lazysizes-placeholder');\n imgTag.onerror = this.getImgixErrorHandlerForEnvironment();\n }.bind(this)\n );\n }\n\n static getImgixErrorHandlerForEnvironment() {\n if (RailsEnv.isDev()) {\n return this.imgixHandlerForDevelopment;\n } else if (RailsEnv.isStaging()) {\n return this.imgixHandlerForStaging;\n }\n }\n\n static imgixHandlerForDevelopment() {\n var imgClone = this.cloneNode(true);\n imgClone.removeAttribute('srcset');\n imgClone.setAttribute('src', imgClone.getAttribute('ix-path'));\n this.parentNode.replaceChild(imgClone, this);\n return true;\n }\n\n static imgixHandlerForStaging() {\n ['src', 'srcSet'].forEach(\n function (attr) {\n this.setAttribute(\n attr,\n this.getAttribute(attr).replace(\n /staging-krautreporter.imgix.net/g,\n 'krautreporter.imgix.net'\n )\n );\n }.bind(this)\n );\n return true;\n }\n}\n","import queryString from 'query-string';\n\nconst apply = function (url, extraQuery) {\n const parsedUrl = queryString.parseUrl(url).url;\n const currentQuery = extract(url);\n const newQuery = Object.assign(currentQuery, extraQuery);\n return `${parsedUrl}?${queryString.stringify(newQuery)}`;\n};\n\nconst extract = (url) => queryString.parseUrl(url).query;\n\nexport { apply, extract };\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [\n 'toggleHamburgerMenuContent',\n 'toggleUserMenuContent',\n 'toggleHamburgerMenuButton',\n ];\n static classes = ['hideButton'];\n\n connect() {\n this.htmlRoot = document.querySelector('html');\n\n if (this.isEmbeddedInWebflow()) {\n const document = window.top.document;\n const style = document.createElement('style');\n // top: -1px because the iframe did not close perfectly with the surrounding window,\n // creating a flickering effect on mobile Safari\n style.textContent = `\n .kr-prevent-scroll { overflow: hidden; }\n .kr-sticky-navbar {\n background: transparent;\n border: none;\n display: block;\n position: sticky;\n top: -1px;\n width: 100%;\n z-index: 99999999999;\n }\n `;\n document.head.appendChild(style);\n\n window.frameElement.id = 'kr-embedded-navbar';\n window.frameElement.classList.add('kr-sticky-navbar');\n window.frameElement.style.height = `${this.element.offsetHeight}px`;\n }\n }\n\n toggle(targets) {\n targets.forEach((target) => (target.hidden = !target.hidden));\n }\n\n togglePreventScrolling() {\n const hamburgerMenuVisible =\n this.getVisible(this.toggleHamburgerMenuContentTargets).length > 0;\n const userMenuVisible =\n this.getVisible(this.toggleUserMenuContentTargets).length > 0;\n\n if (this.isEmbeddedInWebflow()) {\n const preventScrolling = hamburgerMenuVisible || userMenuVisible;\n\n window.top.document\n .querySelector('html')\n .classList.toggle('kr-prevent-scroll', preventScrolling);\n } else {\n const preventScrolling =\n hamburgerMenuVisible || (userMenuVisible && window.innerWidth <= 768);\n\n this.htmlRoot.classList.toggle('prevent-scroll', preventScrolling);\n }\n }\n\n toggleHamburgerMenu() {\n this.toggle(this.getVisible(this.toggleUserMenuContentTargets));\n this.toggle(this.toggleHamburgerMenuContentTargets);\n this.toggleHamburgerMenuButtonTarget.classList.toggle(this.hideButtonClass);\n this.togglePreventScrolling();\n if (this.isEmbeddedInWebflow()) {\n this.toggleIframeFullscreen();\n }\n }\n\n toggleUserMenu() {\n this.toggle(this.getVisible(this.toggleHamburgerMenuContentTargets));\n this.toggle(this.toggleUserMenuContentTargets);\n this.toggleHamburgerMenuButtonTarget.classList.remove(this.hideButtonClass);\n this.togglePreventScrolling();\n if (this.isEmbeddedInWebflow()) {\n this.toggleIframeFullscreen();\n }\n }\n\n getVisible(elements) {\n return elements.filter((target) => target.getAttribute('hidden') == null);\n }\n\n toggleIframeFullscreen() {\n if (window.frameElement.classList.contains('is-fullscreen')) {\n window.frameElement.style.height = `${this.element.offsetHeight}px`;\n window.frameElement.style.position = null;\n window.frameElement.classList.remove('is-fullscreen');\n } else {\n window.frameElement.style.height = '100%';\n window.frameElement.style.position = 'fixed';\n window.frameElement.classList.add('is-fullscreen');\n }\n }\n\n // This Component is used in 2 places.\n // a) This Rails App\n // b) As an iframe embed on our Webflow static pages\n //\n // For b) the code needs to do a bit of tweaking with its environment, so that\n // it is rendered approriately and integrates well into the webflow page.\n isEmbeddedInWebflow() {\n return window.top.__isWebflow == true;\n }\n}\n"],"names":["linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","metaTag","cspNonce","m","matches","element","selector","EXPANDO","getData","key","setData","value","$","isContentEditable","isEditable","csrfToken","meta","csrfParam","CSRFProtection","xhr","token","refreshCSRFTokens","param","input","AcceptHeaders","ajax","options","prepareOptions","createXHR","response","processResponse","done","type","script","parser","href","isCrossDomain","url","originAnchor","urlAnchor","preventDefault","CustomEvent","event","params","evt","result","fire","obj","name","data","stopEverything","e","delegate","eventType","handler","target","toArray","serializeElement","additionalParam","inputs","option","formElements","form","el","handleConfirmWithRails","rails","allowAction","confirm","message","callback","answer","handleDisabledElement","enableElement","isXhrRedirect","enableLinkElement","enableFormElement","enableFormElements","disableElement","disableLinkElement","disableFormElement","disableFormElements","replacement","originalText","handleMethodWithRails","link","method","csrfToken$1","csrfParam$1","formContent","isRemote","handleRemoteWithRails","withCredentials","dataType","button","args","formSubmitButtonClick","preventInsignificantClick","insignificantMetaClick","Rails","handleConfirm","handleMethod","handleRemote","start","originalOptions","DebugLogger","enabled","RailsEnv","CurrentUser","line","stacktrace","logMessage","global","undefined","factory","window","Cookies","date","expires","now","cookieString","documentCookie","cookieCache","cookiesArray","i","cookieKvp","separatorIndex","decodedKey","testKey","areEnabled","cookiesExport","exports","module","this","Tracker","storeUntilInHours","CampaignTracking","trackingRefKey","campaignRef","queryString","logger","currentCampaign","expirationInfo","ConvertedWithTracking","convertedWith","CurrentPage","pageIdentifierParts","currentConvertedWith","r","n","t","f","require","u","a","p","FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","root","objectProto","objectToString","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","toNumber","isObject","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","isObjectLike","isSymbol","other","isBinary","util","targetWidths","autoSize","ImgixTag","opts","lastQuestion","paramString","splitParams","splitParam","path","protocol","hostEndsWithSlash","pathStartsWithSlash","targetWidth","clonedParams","val","pairs","existingSizes","ixSizes","_window","WIDTH_MIN_SIZE","DEBOUNCE_TIMEOUT","getWidth","parent","width","parentWidth","parentNode","imageLoaded","imgCanBeSized","elHasAttributes","getCurrentSize","resizeElement","currentSize","requestIdleCallback","runDebounce","defaultConfig","VERSION","settings","elementQuery","allImgandSourceTags","defaultValue","metaTagValue","defaultConfigType","resolutions","prev","INCREMENT_PERCENTAGE","MAX_SIZE","ensureEven","_debounce","arr","compactedArr","clone","dest","source","iterator","str","encodedUtf8Str","b64Str","urlSafeB64Str","cb","propertyName","metaTagContent","lazySizes","document","Date","lazysizes","lazySizesCfg","prop","lazySizesDefaults","docElem","supportPicture","_addEventListener","_getAttribute","addEventListener","setTimeout","requestAnimationFrame","regPicture","loadEvents","regClassCache","forEach","hasClass","ele","cls","addClass","removeClass","reg","addRemoveLoadEvents","dom","fn","add","action","triggerEvent","elem","detail","noBubbles","noCancelable","updatePolyfill","full","polyfill","getCSS","style","rAF","running","waiting","firstFns","secondFns","fns","run","runFns","rafBatch","queue","rAFIt","simple","that","throttle","lastTime","gDelay","rICTimeout","idleCallback","isPriority","delay","timeout","timestamp","later","last","loader","preloadElems","isCompleted","resetPreloadingTimer","loadMode","started","eLvW","elvH","eLtop","eLleft","eLright","eLbottom","isBodyHidden","regImg","regIframe","supportScroll","shrinkExpand","currentExpand","isLoading","lowRuns","resetPreloading","isVisible","isNestedVisible","elemExpand","outerRect","visible","checkElements","eLlen","rect","autoLoadElem","loadedSomething","elemNegativeExpand","elemExpandVal","beforeExpandVal","defaultExpand","preloadExpand","hFac","lazyloadElems","unveilElement","throttledCheckElements","switchLoadingClass","rafSwitchLoadingClass","rafedSwitchLoadingClass","changeIframeSrc","src","handleSources","customMedia","sourceSrcset","lazyUnveil","isAuto","sizes","isImg","srcset","isPicture","firesLoad","isLoaded","autoSizer","afterScroll","altLoadmodeScrollListner","onload","loadingElements","img","autosizesElems","sizeElement","sources","len","getSizeElement","dataAttr","updateElementsSizes","debouncedUpdateElementsSizes","init","globalInstall","require$$0","config","elements","onprint","printMedia","ImgixHelper","computedWith","imgTag","imgClone","attr","apply","extraQuery","parsedUrl","currentQuery","extract","newQuery","NavbarComponentController","Controller","targets","hamburgerMenuVisible","userMenuVisible","preventScrolling","__publicField"],"mappings":"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","x_google_ignoreList":[0,2,6,7,8]}