{ "version": 3, "sources": ["../../../../../../node_modules/htmx.org/dist/htmx.js", "../../../../../../node_modules/htmx.org/dist/ext/class-tools.js", "../../../static-src/webui/ts/main.ts"], "sourcesContent": ["// UMD insanity\n// This code sets up support for (in order) AMD, ES6 modules, and globals.\n(function (root, factory) {\n //@ts-ignore\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n //@ts-ignore\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals\n root.htmx = root.htmx || factory();\n }\n}(typeof self !== 'undefined' ? self : this, function () {\nreturn (function () {\n 'use strict';\n\n // Public API\n //** @type {import(\"./htmx\").HtmxApi} */\n // TODO: list all methods in public API\n var htmx = {\n onLoad: onLoadHelper,\n process: processNode,\n on: addEventListenerImpl,\n off: removeEventListenerImpl,\n trigger : triggerEvent,\n ajax : ajaxHelper,\n find : find,\n findAll : findAll,\n closest : closest,\n values : function(elt, type){\n var inputValues = getInputValues(elt, type || \"post\");\n return inputValues.values;\n },\n remove : removeElement,\n addClass : addClassToElement,\n removeClass : removeClassFromElement,\n toggleClass : toggleClassOnElement,\n takeClass : takeClassForElement,\n defineExtension : defineExtension,\n removeExtension : removeExtension,\n logAll : logAll,\n logNone : logNone,\n logger : null,\n config : {\n historyEnabled:true,\n historyCacheSize:10,\n refreshOnHistoryMiss:false,\n defaultSwapStyle:'innerHTML',\n defaultSwapDelay:0,\n defaultSettleDelay:20,\n includeIndicatorStyles:true,\n indicatorClass:'htmx-indicator',\n requestClass:'htmx-request',\n addedClass:'htmx-added',\n settlingClass:'htmx-settling',\n swappingClass:'htmx-swapping',\n allowEval:true,\n allowScriptTags:true,\n inlineScriptNonce:'',\n attributesToSettle:[\"class\", \"style\", \"width\", \"height\"],\n withCredentials:false,\n timeout:0,\n wsReconnectDelay: 'full-jitter',\n wsBinaryType: 'blob',\n disableSelector: \"[hx-disable], [data-hx-disable]\",\n useTemplateFragments: false,\n scrollBehavior: 'smooth',\n defaultFocusScroll: false,\n getCacheBusterParam: false,\n globalViewTransitions: false,\n methodsThatUseUrlParams: [\"get\"],\n selfRequestsOnly: false,\n ignoreTitle: false,\n scrollIntoViewOnBoost: true,\n triggerSpecsCache: null,\n },\n parseInterval:parseInterval,\n _:internalEval,\n createEventSource: function(url){\n return new EventSource(url, {withCredentials:true})\n },\n createWebSocket: function(url){\n var sock = new WebSocket(url, []);\n sock.binaryType = htmx.config.wsBinaryType;\n return sock;\n },\n version: \"1.9.12\"\n };\n\n /** @type {import(\"./htmx\").HtmxInternalApi} */\n var internalAPI = {\n addTriggerHandler: addTriggerHandler,\n bodyContains: bodyContains,\n canAccessLocalStorage: canAccessLocalStorage,\n findThisElement: findThisElement,\n filterValues: filterValues,\n hasAttribute: hasAttribute,\n getAttributeValue: getAttributeValue,\n getClosestAttributeValue: getClosestAttributeValue,\n getClosestMatch: getClosestMatch,\n getExpressionVars: getExpressionVars,\n getHeaders: getHeaders,\n getInputValues: getInputValues,\n getInternalData: getInternalData,\n getSwapSpecification: getSwapSpecification,\n getTriggerSpecs: getTriggerSpecs,\n getTarget: getTarget,\n makeFragment: makeFragment,\n mergeObjects: mergeObjects,\n makeSettleInfo: makeSettleInfo,\n oobSwap: oobSwap,\n querySelectorExt: querySelectorExt,\n selectAndSwap: selectAndSwap,\n settleImmediately: settleImmediately,\n shouldCancel: shouldCancel,\n triggerEvent: triggerEvent,\n triggerErrorEvent: triggerErrorEvent,\n withExtensions: withExtensions,\n }\n\n var VERBS = ['get', 'post', 'put', 'delete', 'patch'];\n var VERB_SELECTOR = VERBS.map(function(verb){\n return \"[hx-\" + verb + \"], [data-hx-\" + verb + \"]\"\n }).join(\", \");\n\n var HEAD_TAG_REGEX = makeTagRegEx('head'),\n TITLE_TAG_REGEX = makeTagRegEx('title'),\n SVG_TAGS_REGEX = makeTagRegEx('svg', true);\n\n //====================================================================\n // Utilities\n //====================================================================\n\n /**\n * @param {string} tag\n * @param {boolean} [global]\n * @returns {RegExp}\n */\n function makeTagRegEx(tag, global) {\n return new RegExp('<' + tag + '(\\\\s[^>]*>|>)([\\\\s\\\\S]*?)<\\\\/' + tag + '>',\n !!global ? 'gim' : 'im')\n }\n\n function parseInterval(str) {\n if (str == undefined) {\n return undefined;\n }\n\n let interval = NaN;\n if (str.slice(-2) == \"ms\") {\n interval = parseFloat(str.slice(0, -2));\n } else if (str.slice(-1) == \"s\") {\n interval = parseFloat(str.slice(0, -1)) * 1000;\n } else if (str.slice(-1) == \"m\") {\n interval = parseFloat(str.slice(0, -1)) * 1000 * 60;\n } else {\n interval = parseFloat(str);\n }\n return isNaN(interval) ? undefined : interval;\n }\n\n /**\n * @param {HTMLElement} elt\n * @param {string} name\n * @returns {(string | null)}\n */\n function getRawAttribute(elt, name) {\n return elt.getAttribute && elt.getAttribute(name);\n }\n\n // resolve with both hx and data-hx prefixes\n function hasAttribute(elt, qualifiedName) {\n return elt.hasAttribute && (elt.hasAttribute(qualifiedName) ||\n elt.hasAttribute(\"data-\" + qualifiedName));\n }\n\n /**\n *\n * @param {HTMLElement} elt\n * @param {string} qualifiedName\n * @returns {(string | null)}\n */\n function getAttributeValue(elt, qualifiedName) {\n return getRawAttribute(elt, qualifiedName) || getRawAttribute(elt, \"data-\" + qualifiedName);\n }\n\n /**\n * @param {HTMLElement} elt\n * @returns {HTMLElement | null}\n */\n function parentElt(elt) {\n return elt.parentElement;\n }\n\n /**\n * @returns {Document}\n */\n function getDocument() {\n return document;\n }\n\n /**\n * @param {HTMLElement} elt\n * @param {(e:HTMLElement) => boolean} condition\n * @returns {HTMLElement | null}\n */\n function getClosestMatch(elt, condition) {\n while (elt && !condition(elt)) {\n elt = parentElt(elt);\n }\n\n return elt ? elt : null;\n }\n\n function getAttributeValueWithDisinheritance(initialElement, ancestor, attributeName){\n var attributeValue = getAttributeValue(ancestor, attributeName);\n var disinherit = getAttributeValue(ancestor, \"hx-disinherit\");\n if (initialElement !== ancestor && disinherit && (disinherit === \"*\" || disinherit.split(\" \").indexOf(attributeName) >= 0)) {\n return \"unset\";\n } else {\n return attributeValue\n }\n }\n\n /**\n * @param {HTMLElement} elt\n * @param {string} attributeName\n * @returns {string | null}\n */\n function getClosestAttributeValue(elt, attributeName) {\n var closestAttr = null;\n getClosestMatch(elt, function (e) {\n return closestAttr = getAttributeValueWithDisinheritance(elt, e, attributeName);\n });\n if (closestAttr !== \"unset\") {\n return closestAttr;\n }\n }\n\n /**\n * @param {HTMLElement} elt\n * @param {string} selector\n * @returns {boolean}\n */\n function matches(elt, selector) {\n // @ts-ignore: non-standard properties for browser compatibility\n // noinspection JSUnresolvedVariable\n var matchesFunction = elt.matches || elt.matchesSelector || elt.msMatchesSelector || elt.mozMatchesSelector || elt.webkitMatchesSelector || elt.oMatchesSelector;\n return matchesFunction && matchesFunction.call(elt, selector);\n }\n\n /**\n * @param {string} str\n * @returns {string}\n */\n function getStartTag(str) {\n var tagMatcher = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i\n var match = tagMatcher.exec( str );\n if (match) {\n return match[1].toLowerCase();\n } else {\n return \"\";\n }\n }\n\n /**\n *\n * @param {string} resp\n * @param {number} depth\n * @returns {Element}\n */\n function parseHTML(resp, depth) {\n var parser = new DOMParser();\n var responseDoc = parser.parseFromString(resp, \"text/html\");\n\n /** @type {Element} */\n var responseNode = responseDoc.body;\n while (depth > 0) {\n depth--;\n // @ts-ignore\n responseNode = responseNode.firstChild;\n }\n if (responseNode == null) {\n // @ts-ignore\n responseNode = getDocument().createDocumentFragment();\n }\n return responseNode;\n }\n\n function aFullPageResponse(resp) {\n return /\", 0);\n // @ts-ignore type mismatch between DocumentFragment and Element.\n // TODO: Are these close enough for htmx to use interchangeably?\n var fragmentContent = fragment.querySelector('template').content;\n if (htmx.config.allowScriptTags) {\n // if there is a nonce set up, set it on the new script tags\n forEach(fragmentContent.querySelectorAll(\"script\"), function (script) {\n if (htmx.config.inlineScriptNonce) {\n script.nonce = htmx.config.inlineScriptNonce;\n }\n // mark as executed due to template insertion semantics on all browsers except firefox fml\n script.htmxExecuted = navigator.userAgent.indexOf(\"Firefox\") === -1;\n })\n } else {\n forEach(fragmentContent.querySelectorAll(\"script\"), function (script) {\n // remove all script tags if scripts are disabled\n removeElement(script);\n })\n }\n return fragmentContent;\n }\n switch (startTag) {\n case \"thead\":\n case \"tbody\":\n case \"tfoot\":\n case \"colgroup\":\n case \"caption\":\n return parseHTML(\"\" + content + \"
\", 1);\n case \"col\":\n return parseHTML(\"\" + content + \"
\", 2);\n case \"tr\":\n return parseHTML(\"\" + content + \"
\", 2);\n case \"td\":\n case \"th\":\n return parseHTML(\"\" + content + \"
\", 3);\n case \"script\":\n case \"style\":\n return parseHTML(\"
\" + content + \"
\", 1);\n default:\n return parseHTML(content, 0);\n }\n }\n\n /**\n * @param {Function} func\n */\n function maybeCall(func){\n if(func) {\n func();\n }\n }\n\n /**\n * @param {any} o\n * @param {string} type\n * @returns\n */\n function isType(o, type) {\n return Object.prototype.toString.call(o) === \"[object \" + type + \"]\";\n }\n\n /**\n * @param {*} o\n * @returns {o is Function}\n */\n function isFunction(o) {\n return isType(o, \"Function\");\n }\n\n /**\n * @param {*} o\n * @returns {o is Object}\n */\n function isRawObject(o) {\n return isType(o, \"Object\");\n }\n\n /**\n * getInternalData retrieves \"private\" data stored by htmx within an element\n * @param {HTMLElement} elt\n * @returns {*}\n */\n function getInternalData(elt) {\n var dataProp = 'htmx-internal-data';\n var data = elt[dataProp];\n if (!data) {\n data = elt[dataProp] = {};\n }\n return data;\n }\n\n /**\n * toArray converts an ArrayLike object into a real array.\n * @param {ArrayLike} arr\n * @returns {any[]}\n */\n function toArray(arr) {\n var returnArr = [];\n if (arr) {\n for (var i = 0; i < arr.length; i++) {\n returnArr.push(arr[i]);\n }\n }\n return returnArr\n }\n\n function forEach(arr, func) {\n if (arr) {\n for (var i = 0; i < arr.length; i++) {\n func(arr[i]);\n }\n }\n }\n\n function isScrolledIntoView(el) {\n var rect = el.getBoundingClientRect();\n var elemTop = rect.top;\n var elemBottom = rect.bottom;\n return elemTop < window.innerHeight && elemBottom >= 0;\n }\n\n function bodyContains(elt) {\n // IE Fix\n if (elt.getRootNode && elt.getRootNode() instanceof window.ShadowRoot) {\n return getDocument().body.contains(elt.getRootNode().host);\n } else {\n return getDocument().body.contains(elt);\n }\n }\n\n function splitOnWhitespace(trigger) {\n return trigger.trim().split(/\\s+/);\n }\n\n /**\n * mergeObjects takes all of the keys from\n * obj2 and duplicates them into obj1\n * @param {Object} obj1\n * @param {Object} obj2\n * @returns {Object}\n */\n function mergeObjects(obj1, obj2) {\n for (var key in obj2) {\n if (obj2.hasOwnProperty(key)) {\n obj1[key] = obj2[key];\n }\n }\n return obj1;\n }\n\n function parseJSON(jString) {\n try {\n return JSON.parse(jString);\n } catch(error) {\n logError(error);\n return null;\n }\n }\n\n function canAccessLocalStorage() {\n var test = 'htmx:localStorageTest';\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch(e) {\n return false;\n }\n }\n\n function normalizePath(path) {\n try {\n var url = new URL(path);\n if (url) {\n path = url.pathname + url.search;\n }\n // remove trailing slash, unless index page\n if (!(/^\\/$/.test(path))) {\n path = path.replace(/\\/+$/, '');\n }\n return path;\n } catch (e) {\n // be kind to IE11, which doesn't support URL()\n return path;\n }\n }\n\n //==========================================================================================\n // public API\n //==========================================================================================\n\n function internalEval(str){\n return maybeEval(getDocument().body, function () {\n return eval(str);\n });\n }\n\n function onLoadHelper(callback) {\n var value = htmx.on(\"htmx:load\", function(evt) {\n callback(evt.detail.elt);\n });\n return value;\n }\n\n function logAll(){\n htmx.logger = function(elt, event, data) {\n if(console) {\n console.log(event, elt, data);\n }\n }\n }\n\n function logNone() {\n htmx.logger = null\n }\n\n function find(eltOrSelector, selector) {\n if (selector) {\n return eltOrSelector.querySelector(selector);\n } else {\n return find(getDocument(), eltOrSelector);\n }\n }\n\n function findAll(eltOrSelector, selector) {\n if (selector) {\n return eltOrSelector.querySelectorAll(selector);\n } else {\n return findAll(getDocument(), eltOrSelector);\n }\n }\n\n function removeElement(elt, delay) {\n elt = resolveTarget(elt);\n if (delay) {\n setTimeout(function(){\n removeElement(elt);\n elt = null;\n }, delay);\n } else {\n elt.parentElement.removeChild(elt);\n }\n }\n\n function addClassToElement(elt, clazz, delay) {\n elt = resolveTarget(elt);\n if (delay) {\n setTimeout(function(){\n addClassToElement(elt, clazz);\n elt = null;\n }, delay);\n } else {\n elt.classList && elt.classList.add(clazz);\n }\n }\n\n function removeClassFromElement(elt, clazz, delay) {\n elt = resolveTarget(elt);\n if (delay) {\n setTimeout(function(){\n removeClassFromElement(elt, clazz);\n elt = null;\n }, delay);\n } else {\n if (elt.classList) {\n elt.classList.remove(clazz);\n // if there are no classes left, remove the class attribute\n if (elt.classList.length === 0) {\n elt.removeAttribute(\"class\");\n }\n }\n }\n }\n\n function toggleClassOnElement(elt, clazz) {\n elt = resolveTarget(elt);\n elt.classList.toggle(clazz);\n }\n\n function takeClassForElement(elt, clazz) {\n elt = resolveTarget(elt);\n forEach(elt.parentElement.children, function(child){\n removeClassFromElement(child, clazz);\n })\n addClassToElement(elt, clazz);\n }\n\n function closest(elt, selector) {\n elt = resolveTarget(elt);\n if (elt.closest) {\n return elt.closest(selector);\n } else {\n // TODO remove when IE goes away\n do{\n if (elt == null || matches(elt, selector)){\n return elt;\n }\n }\n while (elt = elt && parentElt(elt));\n return null;\n }\n }\n\n function startsWith(str, prefix) {\n return str.substring(0, prefix.length) === prefix\n }\n\n function endsWith(str, suffix) {\n return str.substring(str.length - suffix.length) === suffix\n }\n\n function normalizeSelector(selector) {\n var trimmedSelector = selector.trim();\n if (startsWith(trimmedSelector, \"<\") && endsWith(trimmedSelector, \"/>\")) {\n return trimmedSelector.substring(1, trimmedSelector.length - 2);\n } else {\n return trimmedSelector;\n }\n }\n\n function querySelectorAllExt(elt, selector) {\n if (selector.indexOf(\"closest \") === 0) {\n return [closest(elt, normalizeSelector(selector.substr(8)))];\n } else if (selector.indexOf(\"find \") === 0) {\n return [find(elt, normalizeSelector(selector.substr(5)))];\n } else if (selector === \"next\") {\n return [elt.nextElementSibling]\n } else if (selector.indexOf(\"next \") === 0) {\n return [scanForwardQuery(elt, normalizeSelector(selector.substr(5)))];\n } else if (selector === \"previous\") {\n return [elt.previousElementSibling]\n } else if (selector.indexOf(\"previous \") === 0) {\n return [scanBackwardsQuery(elt, normalizeSelector(selector.substr(9)))];\n } else if (selector === 'document') {\n return [document];\n } else if (selector === 'window') {\n return [window];\n } else if (selector === 'body') {\n return [document.body];\n } else {\n return getDocument().querySelectorAll(normalizeSelector(selector));\n }\n }\n\n var scanForwardQuery = function(start, match) {\n var results = getDocument().querySelectorAll(match);\n for (var i = 0; i < results.length; i++) {\n var elt = results[i];\n if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_PRECEDING) {\n return elt;\n }\n }\n }\n\n var scanBackwardsQuery = function(start, match) {\n var results = getDocument().querySelectorAll(match);\n for (var i = results.length - 1; i >= 0; i--) {\n var elt = results[i];\n if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_FOLLOWING) {\n return elt;\n }\n }\n }\n\n function querySelectorExt(eltOrSelector, selector) {\n if (selector) {\n return querySelectorAllExt(eltOrSelector, selector)[0];\n } else {\n return querySelectorAllExt(getDocument().body, eltOrSelector)[0];\n }\n }\n\n function resolveTarget(arg2) {\n if (isType(arg2, 'String')) {\n return find(arg2);\n } else {\n return arg2;\n }\n }\n\n function processEventArgs(arg1, arg2, arg3) {\n if (isFunction(arg2)) {\n return {\n target: getDocument().body,\n event: arg1,\n listener: arg2\n }\n } else {\n return {\n target: resolveTarget(arg1),\n event: arg2,\n listener: arg3\n }\n }\n\n }\n\n function addEventListenerImpl(arg1, arg2, arg3) {\n ready(function(){\n var eventArgs = processEventArgs(arg1, arg2, arg3);\n eventArgs.target.addEventListener(eventArgs.event, eventArgs.listener);\n })\n var b = isFunction(arg2);\n return b ? arg2 : arg3;\n }\n\n function removeEventListenerImpl(arg1, arg2, arg3) {\n ready(function(){\n var eventArgs = processEventArgs(arg1, arg2, arg3);\n eventArgs.target.removeEventListener(eventArgs.event, eventArgs.listener);\n })\n return isFunction(arg2) ? arg2 : arg3;\n }\n\n //====================================================================\n // Node processing\n //====================================================================\n\n var DUMMY_ELT = getDocument().createElement(\"output\"); // dummy element for bad selectors\n function findAttributeTargets(elt, attrName) {\n var attrTarget = getClosestAttributeValue(elt, attrName);\n if (attrTarget) {\n if (attrTarget === \"this\") {\n return [findThisElement(elt, attrName)];\n } else {\n var result = querySelectorAllExt(elt, attrTarget);\n if (result.length === 0) {\n logError('The selector \"' + attrTarget + '\" on ' + attrName + \" returned no matches!\");\n return [DUMMY_ELT]\n } else {\n return result;\n }\n }\n }\n }\n\n function findThisElement(elt, attribute){\n return getClosestMatch(elt, function (elt) {\n return getAttributeValue(elt, attribute) != null;\n })\n }\n\n function getTarget(elt) {\n var targetStr = getClosestAttributeValue(elt, \"hx-target\");\n if (targetStr) {\n if (targetStr === \"this\") {\n return findThisElement(elt,'hx-target');\n } else {\n return querySelectorExt(elt, targetStr)\n }\n } else {\n var data = getInternalData(elt);\n if (data.boosted) {\n return getDocument().body;\n } else {\n return elt;\n }\n }\n }\n\n function shouldSettleAttribute(name) {\n var attributesToSettle = htmx.config.attributesToSettle;\n for (var i = 0; i < attributesToSettle.length; i++) {\n if (name === attributesToSettle[i]) {\n return true;\n }\n }\n return false;\n }\n\n function cloneAttributes(mergeTo, mergeFrom) {\n forEach(mergeTo.attributes, function (attr) {\n if (!mergeFrom.hasAttribute(attr.name) && shouldSettleAttribute(attr.name)) {\n mergeTo.removeAttribute(attr.name)\n }\n });\n forEach(mergeFrom.attributes, function (attr) {\n if (shouldSettleAttribute(attr.name)) {\n mergeTo.setAttribute(attr.name, attr.value);\n }\n });\n }\n\n function isInlineSwap(swapStyle, target) {\n var extensions = getExtensions(target);\n for (var i = 0; i < extensions.length; i++) {\n var extension = extensions[i];\n try {\n if (extension.isInlineSwap(swapStyle)) {\n return true;\n }\n } catch(e) {\n logError(e);\n }\n }\n return swapStyle === \"outerHTML\";\n }\n\n /**\n *\n * @param {string} oobValue\n * @param {HTMLElement} oobElement\n * @param {*} settleInfo\n * @returns\n */\n function oobSwap(oobValue, oobElement, settleInfo) {\n var selector = \"#\" + getRawAttribute(oobElement, \"id\");\n var swapStyle = \"outerHTML\";\n if (oobValue === \"true\") {\n // do nothing\n } else if (oobValue.indexOf(\":\") > 0) {\n swapStyle = oobValue.substr(0, oobValue.indexOf(\":\"));\n selector = oobValue.substr(oobValue.indexOf(\":\") + 1, oobValue.length);\n } else {\n swapStyle = oobValue;\n }\n\n var targets = getDocument().querySelectorAll(selector);\n if (targets) {\n forEach(\n targets,\n function (target) {\n var fragment;\n var oobElementClone = oobElement.cloneNode(true);\n fragment = getDocument().createDocumentFragment();\n fragment.appendChild(oobElementClone);\n if (!isInlineSwap(swapStyle, target)) {\n fragment = oobElementClone; // if this is not an inline swap, we use the content of the node, not the node itself\n }\n\n var beforeSwapDetails = {shouldSwap: true, target: target, fragment:fragment };\n if (!triggerEvent(target, 'htmx:oobBeforeSwap', beforeSwapDetails)) return;\n\n target = beforeSwapDetails.target; // allow re-targeting\n if (beforeSwapDetails['shouldSwap']){\n swap(swapStyle, target, target, fragment, settleInfo);\n }\n forEach(settleInfo.elts, function (elt) {\n triggerEvent(elt, 'htmx:oobAfterSwap', beforeSwapDetails);\n });\n }\n );\n oobElement.parentNode.removeChild(oobElement);\n } else {\n oobElement.parentNode.removeChild(oobElement);\n triggerErrorEvent(getDocument().body, \"htmx:oobErrorNoTarget\", {content: oobElement});\n }\n return oobValue;\n }\n\n function handleOutOfBandSwaps(elt, fragment, settleInfo) {\n var oobSelects = getClosestAttributeValue(elt, \"hx-select-oob\");\n if (oobSelects) {\n var oobSelectValues = oobSelects.split(\",\");\n for (var i = 0; i < oobSelectValues.length; i++) {\n var oobSelectValue = oobSelectValues[i].split(\":\", 2);\n var id = oobSelectValue[0].trim();\n if (id.indexOf(\"#\") === 0) {\n id = id.substring(1);\n }\n var oobValue = oobSelectValue[1] || \"true\";\n var oobElement = fragment.querySelector(\"#\" + id);\n if (oobElement) {\n oobSwap(oobValue, oobElement, settleInfo);\n }\n }\n }\n forEach(findAll(fragment, '[hx-swap-oob], [data-hx-swap-oob]'), function (oobElement) {\n var oobValue = getAttributeValue(oobElement, \"hx-swap-oob\");\n if (oobValue != null) {\n oobSwap(oobValue, oobElement, settleInfo);\n }\n });\n }\n\n function handlePreservedElements(fragment) {\n forEach(findAll(fragment, '[hx-preserve], [data-hx-preserve]'), function (preservedElt) {\n var id = getAttributeValue(preservedElt, \"id\");\n var oldElt = getDocument().getElementById(id);\n if (oldElt != null) {\n preservedElt.parentNode.replaceChild(oldElt, preservedElt);\n }\n });\n }\n\n function handleAttributes(parentNode, fragment, settleInfo) {\n forEach(fragment.querySelectorAll(\"[id]\"), function (newNode) {\n var id = getRawAttribute(newNode, \"id\")\n if (id && id.length > 0) {\n var normalizedId = id.replace(\"'\", \"\\\\'\");\n var normalizedTag = newNode.tagName.replace(':', '\\\\:');\n var oldNode = parentNode.querySelector(normalizedTag + \"[id='\" + normalizedId + \"']\");\n if (oldNode && oldNode !== parentNode) {\n var newAttributes = newNode.cloneNode();\n cloneAttributes(newNode, oldNode);\n settleInfo.tasks.push(function () {\n cloneAttributes(newNode, newAttributes);\n });\n }\n }\n });\n }\n\n function makeAjaxLoadTask(child) {\n return function () {\n removeClassFromElement(child, htmx.config.addedClass);\n processNode(child);\n processScripts(child);\n processFocus(child)\n triggerEvent(child, 'htmx:load');\n };\n }\n\n function processFocus(child) {\n var autofocus = \"[autofocus]\";\n var autoFocusedElt = matches(child, autofocus) ? child : child.querySelector(autofocus)\n if (autoFocusedElt != null) {\n autoFocusedElt.focus();\n }\n }\n\n function insertNodesBefore(parentNode, insertBefore, fragment, settleInfo) {\n handleAttributes(parentNode, fragment, settleInfo);\n while(fragment.childNodes.length > 0){\n var child = fragment.firstChild;\n addClassToElement(child, htmx.config.addedClass);\n parentNode.insertBefore(child, insertBefore);\n if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) {\n settleInfo.tasks.push(makeAjaxLoadTask(child));\n }\n }\n }\n\n // based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0,\n // derived from Java's string hashcode implementation\n function stringHash(string, hash) {\n var char = 0;\n while (char < string.length){\n hash = (hash << 5) - hash + string.charCodeAt(char++) | 0; // bitwise or ensures we have a 32-bit int\n }\n return hash;\n }\n\n function attributeHash(elt) {\n var hash = 0;\n // IE fix\n if (elt.attributes) {\n for (var i = 0; i < elt.attributes.length; i++) {\n var attribute = elt.attributes[i];\n if(attribute.value){ // only include attributes w/ actual values (empty is same as non-existent)\n hash = stringHash(attribute.name, hash);\n hash = stringHash(attribute.value, hash);\n }\n }\n }\n return hash;\n }\n\n function deInitOnHandlers(elt) {\n var internalData = getInternalData(elt);\n if (internalData.onHandlers) {\n for (var i = 0; i < internalData.onHandlers.length; i++) {\n const handlerInfo = internalData.onHandlers[i];\n elt.removeEventListener(handlerInfo.event, handlerInfo.listener);\n }\n delete internalData.onHandlers\n }\n }\n\n function deInitNode(element) {\n var internalData = getInternalData(element);\n if (internalData.timeout) {\n clearTimeout(internalData.timeout);\n }\n if (internalData.webSocket) {\n internalData.webSocket.close();\n }\n if (internalData.sseEventSource) {\n internalData.sseEventSource.close();\n }\n if (internalData.listenerInfos) {\n forEach(internalData.listenerInfos, function (info) {\n if (info.on) {\n info.on.removeEventListener(info.trigger, info.listener);\n }\n });\n }\n deInitOnHandlers(element);\n forEach(Object.keys(internalData), function(key) { delete internalData[key] });\n }\n\n function cleanUpElement(element) {\n triggerEvent(element, \"htmx:beforeCleanupElement\")\n deInitNode(element);\n if (element.children) { // IE\n forEach(element.children, function(child) { cleanUpElement(child) });\n }\n }\n\n function swapOuterHTML(target, fragment, settleInfo) {\n if (target.tagName === \"BODY\") {\n return swapInnerHTML(target, fragment, settleInfo);\n } else {\n // @type {HTMLElement}\n var newElt\n var eltBeforeNewContent = target.previousSibling;\n insertNodesBefore(parentElt(target), target, fragment, settleInfo);\n if (eltBeforeNewContent == null) {\n newElt = parentElt(target).firstChild;\n } else {\n newElt = eltBeforeNewContent.nextSibling;\n }\n settleInfo.elts = settleInfo.elts.filter(function(e) { return e != target });\n while(newElt && newElt !== target) {\n if (newElt.nodeType === Node.ELEMENT_NODE) {\n settleInfo.elts.push(newElt);\n }\n newElt = newElt.nextElementSibling;\n }\n cleanUpElement(target);\n parentElt(target).removeChild(target);\n }\n }\n\n function swapAfterBegin(target, fragment, settleInfo) {\n return insertNodesBefore(target, target.firstChild, fragment, settleInfo);\n }\n\n function swapBeforeBegin(target, fragment, settleInfo) {\n return insertNodesBefore(parentElt(target), target, fragment, settleInfo);\n }\n\n function swapBeforeEnd(target, fragment, settleInfo) {\n return insertNodesBefore(target, null, fragment, settleInfo);\n }\n\n function swapAfterEnd(target, fragment, settleInfo) {\n return insertNodesBefore(parentElt(target), target.nextSibling, fragment, settleInfo);\n }\n function swapDelete(target, fragment, settleInfo) {\n cleanUpElement(target);\n return parentElt(target).removeChild(target);\n }\n\n function swapInnerHTML(target, fragment, settleInfo) {\n var firstChild = target.firstChild;\n insertNodesBefore(target, firstChild, fragment, settleInfo);\n if (firstChild) {\n while (firstChild.nextSibling) {\n cleanUpElement(firstChild.nextSibling)\n target.removeChild(firstChild.nextSibling);\n }\n cleanUpElement(firstChild)\n target.removeChild(firstChild);\n }\n }\n\n function maybeSelectFromResponse(elt, fragment, selectOverride) {\n var selector = selectOverride || getClosestAttributeValue(elt, \"hx-select\");\n if (selector) {\n var newFragment = getDocument().createDocumentFragment();\n forEach(fragment.querySelectorAll(selector), function (node) {\n newFragment.appendChild(node);\n });\n fragment = newFragment;\n }\n return fragment;\n }\n\n function swap(swapStyle, elt, target, fragment, settleInfo) {\n switch (swapStyle) {\n case \"none\":\n return;\n case \"outerHTML\":\n swapOuterHTML(target, fragment, settleInfo);\n return;\n case \"afterbegin\":\n swapAfterBegin(target, fragment, settleInfo);\n return;\n case \"beforebegin\":\n swapBeforeBegin(target, fragment, settleInfo);\n return;\n case \"beforeend\":\n swapBeforeEnd(target, fragment, settleInfo);\n return;\n case \"afterend\":\n swapAfterEnd(target, fragment, settleInfo);\n return;\n case \"delete\":\n swapDelete(target, fragment, settleInfo);\n return;\n default:\n var extensions = getExtensions(elt);\n for (var i = 0; i < extensions.length; i++) {\n var ext = extensions[i];\n try {\n var newElements = ext.handleSwap(swapStyle, target, fragment, settleInfo);\n if (newElements) {\n if (typeof newElements.length !== 'undefined') {\n // if handleSwap returns an array (like) of elements, we handle them\n for (var j = 0; j < newElements.length; j++) {\n var child = newElements[j];\n if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) {\n settleInfo.tasks.push(makeAjaxLoadTask(child));\n }\n }\n }\n return;\n }\n } catch (e) {\n logError(e);\n }\n }\n if (swapStyle === \"innerHTML\") {\n swapInnerHTML(target, fragment, settleInfo);\n } else {\n swap(htmx.config.defaultSwapStyle, elt, target, fragment, settleInfo);\n }\n }\n }\n\n function findTitle(content) {\n if (content.indexOf(' -1) {\n var contentWithSvgsRemoved = content.replace(SVG_TAGS_REGEX, '');\n var result = contentWithSvgsRemoved.match(TITLE_TAG_REGEX);\n if (result) {\n return result[2];\n }\n }\n }\n\n function selectAndSwap(swapStyle, target, elt, responseText, settleInfo, selectOverride) {\n settleInfo.title = findTitle(responseText);\n var fragment = makeFragment(responseText);\n if (fragment) {\n handleOutOfBandSwaps(elt, fragment, settleInfo);\n fragment = maybeSelectFromResponse(elt, fragment, selectOverride);\n handlePreservedElements(fragment);\n return swap(swapStyle, elt, target, fragment, settleInfo);\n }\n }\n\n function handleTrigger(xhr, header, elt) {\n var triggerBody = xhr.getResponseHeader(header);\n if (triggerBody.indexOf(\"{\") === 0) {\n var triggers = parseJSON(triggerBody);\n for (var eventName in triggers) {\n if (triggers.hasOwnProperty(eventName)) {\n var detail = triggers[eventName];\n if (!isRawObject(detail)) {\n detail = {\"value\": detail}\n }\n triggerEvent(elt, eventName, detail);\n }\n }\n } else {\n var eventNames = triggerBody.split(\",\")\n for (var i = 0; i < eventNames.length; i++) {\n triggerEvent(elt, eventNames[i].trim(), []);\n }\n }\n }\n\n var WHITESPACE = /\\s/;\n var WHITESPACE_OR_COMMA = /[\\s,]/;\n var SYMBOL_START = /[_$a-zA-Z]/;\n var SYMBOL_CONT = /[_$a-zA-Z0-9]/;\n var STRINGISH_START = ['\"', \"'\", \"/\"];\n var NOT_WHITESPACE = /[^\\s]/;\n var COMBINED_SELECTOR_START = /[{(]/;\n var COMBINED_SELECTOR_END = /[})]/;\n function tokenizeString(str) {\n var tokens = [];\n var position = 0;\n while (position < str.length) {\n if(SYMBOL_START.exec(str.charAt(position))) {\n var startPosition = position;\n while (SYMBOL_CONT.exec(str.charAt(position + 1))) {\n position++;\n }\n tokens.push(str.substr(startPosition, position - startPosition + 1));\n } else if (STRINGISH_START.indexOf(str.charAt(position)) !== -1) {\n var startChar = str.charAt(position);\n var startPosition = position;\n position++;\n while (position < str.length && str.charAt(position) !== startChar ) {\n if (str.charAt(position) === \"\\\\\") {\n position++;\n }\n position++;\n }\n tokens.push(str.substr(startPosition, position - startPosition + 1));\n } else {\n var symbol = str.charAt(position);\n tokens.push(symbol);\n }\n position++;\n }\n return tokens;\n }\n\n function isPossibleRelativeReference(token, last, paramName) {\n return SYMBOL_START.exec(token.charAt(0)) &&\n token !== \"true\" &&\n token !== \"false\" &&\n token !== \"this\" &&\n token !== paramName &&\n last !== \".\";\n }\n\n function maybeGenerateConditional(elt, tokens, paramName) {\n if (tokens[0] === '[') {\n tokens.shift();\n var bracketCount = 1;\n var conditionalSource = \" return (function(\" + paramName + \"){ return (\";\n var last = null;\n while (tokens.length > 0) {\n var token = tokens[0];\n if (token === \"]\") {\n bracketCount--;\n if (bracketCount === 0) {\n if (last === null) {\n conditionalSource = conditionalSource + \"true\";\n }\n tokens.shift();\n conditionalSource += \")})\";\n try {\n var conditionFunction = maybeEval(elt,function () {\n return Function(conditionalSource)();\n },\n function(){return true})\n conditionFunction.source = conditionalSource;\n return conditionFunction;\n } catch (e) {\n triggerErrorEvent(getDocument().body, \"htmx:syntax:error\", {error:e, source:conditionalSource})\n return null;\n }\n }\n } else if (token === \"[\") {\n bracketCount++;\n }\n if (isPossibleRelativeReference(token, last, paramName)) {\n conditionalSource += \"((\" + paramName + \".\" + token + \") ? (\" + paramName + \".\" + token + \") : (window.\" + token + \"))\";\n } else {\n conditionalSource = conditionalSource + token;\n }\n last = tokens.shift();\n }\n }\n }\n\n function consumeUntil(tokens, match) {\n var result = \"\";\n while (tokens.length > 0 && !match.test(tokens[0])) {\n result += tokens.shift();\n }\n return result;\n }\n\n function consumeCSSSelector(tokens) {\n var result;\n if (tokens.length > 0 && COMBINED_SELECTOR_START.test(tokens[0])) {\n tokens.shift();\n result = consumeUntil(tokens, COMBINED_SELECTOR_END).trim();\n tokens.shift();\n } else {\n result = consumeUntil(tokens, WHITESPACE_OR_COMMA);\n }\n return result;\n }\n\n var INPUT_SELECTOR = 'input, textarea, select';\n\n /**\n * @param {HTMLElement} elt\n * @param {string} explicitTrigger\n * @param {cache} cache for trigger specs\n * @returns {import(\"./htmx\").HtmxTriggerSpecification[]}\n */\n function parseAndCacheTrigger(elt, explicitTrigger, cache) {\n var triggerSpecs = [];\n var tokens = tokenizeString(explicitTrigger);\n do {\n consumeUntil(tokens, NOT_WHITESPACE);\n var initialLength = tokens.length;\n var trigger = consumeUntil(tokens, /[,\\[\\s]/);\n if (trigger !== \"\") {\n if (trigger === \"every\") {\n var every = {trigger: 'every'};\n consumeUntil(tokens, NOT_WHITESPACE);\n every.pollInterval = parseInterval(consumeUntil(tokens, /[,\\[\\s]/));\n consumeUntil(tokens, NOT_WHITESPACE);\n var eventFilter = maybeGenerateConditional(elt, tokens, \"event\");\n if (eventFilter) {\n every.eventFilter = eventFilter;\n }\n triggerSpecs.push(every);\n } else if (trigger.indexOf(\"sse:\") === 0) {\n triggerSpecs.push({trigger: 'sse', sseEvent: trigger.substr(4)});\n } else {\n var triggerSpec = {trigger: trigger};\n var eventFilter = maybeGenerateConditional(elt, tokens, \"event\");\n if (eventFilter) {\n triggerSpec.eventFilter = eventFilter;\n }\n while (tokens.length > 0 && tokens[0] !== \",\") {\n consumeUntil(tokens, NOT_WHITESPACE)\n var token = tokens.shift();\n if (token === \"changed\") {\n triggerSpec.changed = true;\n } else if (token === \"once\") {\n triggerSpec.once = true;\n } else if (token === \"consume\") {\n triggerSpec.consume = true;\n } else if (token === \"delay\" && tokens[0] === \":\") {\n tokens.shift();\n triggerSpec.delay = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA));\n } else if (token === \"from\" && tokens[0] === \":\") {\n tokens.shift();\n if (COMBINED_SELECTOR_START.test(tokens[0])) {\n var from_arg = consumeCSSSelector(tokens);\n } else {\n var from_arg = consumeUntil(tokens, WHITESPACE_OR_COMMA);\n if (from_arg === \"closest\" || from_arg === \"find\" || from_arg === \"next\" || from_arg === \"previous\") {\n tokens.shift();\n var selector = consumeCSSSelector(tokens);\n // `next` and `previous` allow a selector-less syntax\n if (selector.length > 0) {\n from_arg += \" \" + selector;\n }\n }\n }\n triggerSpec.from = from_arg;\n } else if (token === \"target\" && tokens[0] === \":\") {\n tokens.shift();\n triggerSpec.target = consumeCSSSelector(tokens);\n } else if (token === \"throttle\" && tokens[0] === \":\") {\n tokens.shift();\n triggerSpec.throttle = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA));\n } else if (token === \"queue\" && tokens[0] === \":\") {\n tokens.shift();\n triggerSpec.queue = consumeUntil(tokens, WHITESPACE_OR_COMMA);\n } else if (token === \"root\" && tokens[0] === \":\") {\n tokens.shift();\n triggerSpec[token] = consumeCSSSelector(tokens);\n } else if (token === \"threshold\" && tokens[0] === \":\") {\n tokens.shift();\n triggerSpec[token] = consumeUntil(tokens, WHITESPACE_OR_COMMA);\n } else {\n triggerErrorEvent(elt, \"htmx:syntax:error\", {token:tokens.shift()});\n }\n }\n triggerSpecs.push(triggerSpec);\n }\n }\n if (tokens.length === initialLength) {\n triggerErrorEvent(elt, \"htmx:syntax:error\", {token:tokens.shift()});\n }\n consumeUntil(tokens, NOT_WHITESPACE);\n } while (tokens[0] === \",\" && tokens.shift())\n if (cache) {\n cache[explicitTrigger] = triggerSpecs\n }\n return triggerSpecs\n }\n\n /**\n * @param {HTMLElement} elt\n * @returns {import(\"./htmx\").HtmxTriggerSpecification[]}\n */\n function getTriggerSpecs(elt) {\n var explicitTrigger = getAttributeValue(elt, 'hx-trigger');\n var triggerSpecs = [];\n if (explicitTrigger) {\n var cache = htmx.config.triggerSpecsCache\n triggerSpecs = (cache && cache[explicitTrigger]) || parseAndCacheTrigger(elt, explicitTrigger, cache)\n }\n\n if (triggerSpecs.length > 0) {\n return triggerSpecs;\n } else if (matches(elt, 'form')) {\n return [{trigger: 'submit'}];\n } else if (matches(elt, 'input[type=\"button\"], input[type=\"submit\"]')){\n return [{trigger: 'click'}];\n } else if (matches(elt, INPUT_SELECTOR)) {\n return [{trigger: 'change'}];\n } else {\n return [{trigger: 'click'}];\n }\n }\n\n function cancelPolling(elt) {\n getInternalData(elt).cancelled = true;\n }\n\n function processPolling(elt, handler, spec) {\n var nodeData = getInternalData(elt);\n nodeData.timeout = setTimeout(function () {\n if (bodyContains(elt) && nodeData.cancelled !== true) {\n if (!maybeFilterEvent(spec, elt, makeEvent('hx:poll:trigger', {\n triggerSpec: spec,\n target: elt\n }))) {\n handler(elt);\n }\n processPolling(elt, handler, spec);\n }\n }, spec.pollInterval);\n }\n\n function isLocalLink(elt) {\n return location.hostname === elt.hostname &&\n getRawAttribute(elt,'href') &&\n getRawAttribute(elt,'href').indexOf(\"#\") !== 0;\n }\n\n function boostElement(elt, nodeData, triggerSpecs) {\n if ((elt.tagName === \"A\" && isLocalLink(elt) && (elt.target === \"\" || elt.target === \"_self\")) || elt.tagName === \"FORM\") {\n nodeData.boosted = true;\n var verb, path;\n if (elt.tagName === \"A\") {\n verb = \"get\";\n path = getRawAttribute(elt, 'href')\n } else {\n var rawAttribute = getRawAttribute(elt, \"method\");\n verb = rawAttribute ? rawAttribute.toLowerCase() : \"get\";\n if (verb === \"get\") {\n }\n path = getRawAttribute(elt, 'action');\n }\n triggerSpecs.forEach(function(triggerSpec) {\n addEventListener(elt, function(elt, evt) {\n if (closest(elt, htmx.config.disableSelector)) {\n cleanUpElement(elt)\n return\n }\n issueAjaxRequest(verb, path, elt, evt)\n }, nodeData, triggerSpec, true);\n });\n }\n }\n\n /**\n *\n * @param {Event} evt\n * @param {HTMLElement} elt\n * @returns\n */\n function shouldCancel(evt, elt) {\n if (evt.type === \"submit\" || evt.type === \"click\") {\n if (elt.tagName === \"FORM\") {\n return true;\n }\n if (matches(elt, 'input[type=\"submit\"], button') && closest(elt, 'form') !== null) {\n return true;\n }\n if (elt.tagName === \"A\" && elt.href &&\n (elt.getAttribute('href') === '#' || elt.getAttribute('href').indexOf(\"#\") !== 0)) {\n return true;\n }\n }\n return false;\n }\n\n function ignoreBoostedAnchorCtrlClick(elt, evt) {\n return getInternalData(elt).boosted && elt.tagName === \"A\" && evt.type === \"click\" && (evt.ctrlKey || evt.metaKey);\n }\n\n function maybeFilterEvent(triggerSpec, elt, evt) {\n var eventFilter = triggerSpec.eventFilter;\n if(eventFilter){\n try {\n return eventFilter.call(elt, evt) !== true;\n } catch(e) {\n triggerErrorEvent(getDocument().body, \"htmx:eventFilter:error\", {error: e, source:eventFilter.source});\n return true;\n }\n }\n return false;\n }\n\n function addEventListener(elt, handler, nodeData, triggerSpec, explicitCancel) {\n var elementData = getInternalData(elt);\n var eltsToListenOn;\n if (triggerSpec.from) {\n eltsToListenOn = querySelectorAllExt(elt, triggerSpec.from);\n } else {\n eltsToListenOn = [elt];\n }\n // store the initial values of the elements, so we can tell if they change\n if (triggerSpec.changed) {\n eltsToListenOn.forEach(function (eltToListenOn) {\n var eltToListenOnData = getInternalData(eltToListenOn);\n eltToListenOnData.lastValue = eltToListenOn.value;\n })\n }\n forEach(eltsToListenOn, function (eltToListenOn) {\n var eventListener = function (evt) {\n if (!bodyContains(elt)) {\n eltToListenOn.removeEventListener(triggerSpec.trigger, eventListener);\n return;\n }\n if (ignoreBoostedAnchorCtrlClick(elt, evt)) {\n return;\n }\n if (explicitCancel || shouldCancel(evt, elt)) {\n evt.preventDefault();\n }\n if (maybeFilterEvent(triggerSpec, elt, evt)) {\n return;\n }\n var eventData = getInternalData(evt);\n eventData.triggerSpec = triggerSpec;\n if (eventData.handledFor == null) {\n eventData.handledFor = [];\n }\n if (eventData.handledFor.indexOf(elt) < 0) {\n eventData.handledFor.push(elt);\n if (triggerSpec.consume) {\n evt.stopPropagation();\n }\n if (triggerSpec.target && evt.target) {\n if (!matches(evt.target, triggerSpec.target)) {\n return;\n }\n }\n if (triggerSpec.once) {\n if (elementData.triggeredOnce) {\n return;\n } else {\n elementData.triggeredOnce = true;\n }\n }\n if (triggerSpec.changed) {\n var eltToListenOnData = getInternalData(eltToListenOn)\n if (eltToListenOnData.lastValue === eltToListenOn.value) {\n return;\n }\n eltToListenOnData.lastValue = eltToListenOn.value\n }\n if (elementData.delayed) {\n clearTimeout(elementData.delayed);\n }\n if (elementData.throttle) {\n return;\n }\n\n if (triggerSpec.throttle > 0) {\n if (!elementData.throttle) {\n handler(elt, evt);\n elementData.throttle = setTimeout(function () {\n elementData.throttle = null;\n }, triggerSpec.throttle);\n }\n } else if (triggerSpec.delay > 0) {\n elementData.delayed = setTimeout(function() { handler(elt, evt) }, triggerSpec.delay);\n } else {\n triggerEvent(elt, 'htmx:trigger')\n handler(elt, evt);\n }\n }\n };\n if (nodeData.listenerInfos == null) {\n nodeData.listenerInfos = [];\n }\n nodeData.listenerInfos.push({\n trigger: triggerSpec.trigger,\n listener: eventListener,\n on: eltToListenOn\n })\n eltToListenOn.addEventListener(triggerSpec.trigger, eventListener);\n });\n }\n\n var windowIsScrolling = false // used by initScrollHandler\n var scrollHandler = null;\n function initScrollHandler() {\n if (!scrollHandler) {\n scrollHandler = function() {\n windowIsScrolling = true\n };\n window.addEventListener(\"scroll\", scrollHandler)\n setInterval(function() {\n if (windowIsScrolling) {\n windowIsScrolling = false;\n forEach(getDocument().querySelectorAll(\"[hx-trigger='revealed'],[data-hx-trigger='revealed']\"), function (elt) {\n maybeReveal(elt);\n })\n }\n }, 200);\n }\n }\n\n function maybeReveal(elt) {\n if (!hasAttribute(elt,'data-hx-revealed') && isScrolledIntoView(elt)) {\n elt.setAttribute('data-hx-revealed', 'true');\n var nodeData = getInternalData(elt);\n if (nodeData.initHash) {\n triggerEvent(elt, 'revealed');\n } else {\n // if the node isn't initialized, wait for it before triggering the request\n elt.addEventListener(\"htmx:afterProcessNode\", function(evt) { triggerEvent(elt, 'revealed') }, {once: true});\n }\n }\n }\n\n //====================================================================\n // Web Sockets\n //====================================================================\n\n function processWebSocketInfo(elt, nodeData, info) {\n var values = splitOnWhitespace(info);\n for (var i = 0; i < values.length; i++) {\n var value = values[i].split(/:(.+)/);\n if (value[0] === \"connect\") {\n ensureWebSocket(elt, value[1], 0);\n }\n if (value[0] === \"send\") {\n processWebSocketSend(elt);\n }\n }\n }\n\n function ensureWebSocket(elt, wssSource, retryCount) {\n if (!bodyContains(elt)) {\n return; // stop ensuring websocket connection when socket bearing element ceases to exist\n }\n\n if (wssSource.indexOf(\"/\") == 0) { // complete absolute paths only\n var base_part = location.hostname + (location.port ? ':'+location.port: '');\n if (location.protocol == 'https:') {\n wssSource = \"wss://\" + base_part + wssSource;\n } else if (location.protocol == 'http:') {\n wssSource = \"ws://\" + base_part + wssSource;\n }\n }\n var socket = htmx.createWebSocket(wssSource);\n socket.onerror = function (e) {\n triggerErrorEvent(elt, \"htmx:wsError\", {error:e, socket:socket});\n maybeCloseWebSocketSource(elt);\n };\n\n socket.onclose = function (e) {\n if ([1006, 1012, 1013].indexOf(e.code) >= 0) { // Abnormal Closure/Service Restart/Try Again Later\n var delay = getWebSocketReconnectDelay(retryCount);\n setTimeout(function() {\n ensureWebSocket(elt, wssSource, retryCount+1); // creates a websocket with a new timeout\n }, delay);\n }\n };\n socket.onopen = function (e) {\n retryCount = 0;\n }\n\n getInternalData(elt).webSocket = socket;\n socket.addEventListener('message', function (event) {\n if (maybeCloseWebSocketSource(elt)) {\n return;\n }\n\n var response = event.data;\n withExtensions(elt, function(extension){\n response = extension.transformResponse(response, null, elt);\n });\n\n var settleInfo = makeSettleInfo(elt);\n var fragment = makeFragment(response);\n var children = toArray(fragment.children);\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n oobSwap(getAttributeValue(child, \"hx-swap-oob\") || \"true\", child, settleInfo);\n }\n\n settleImmediately(settleInfo.tasks);\n });\n }\n\n function maybeCloseWebSocketSource(elt) {\n if (!bodyContains(elt)) {\n getInternalData(elt).webSocket.close();\n return true;\n }\n }\n\n function processWebSocketSend(elt) {\n var webSocketSourceElt = getClosestMatch(elt, function (parent) {\n return getInternalData(parent).webSocket != null;\n });\n if (webSocketSourceElt) {\n elt.addEventListener(getTriggerSpecs(elt)[0].trigger, function (evt) {\n var webSocket = getInternalData(webSocketSourceElt).webSocket;\n var headers = getHeaders(elt, webSocketSourceElt);\n var results = getInputValues(elt, 'post');\n var errors = results.errors;\n var rawParameters = results.values;\n var expressionVars = getExpressionVars(elt);\n var allParameters = mergeObjects(rawParameters, expressionVars);\n var filteredParameters = filterValues(allParameters, elt);\n filteredParameters['HEADERS'] = headers;\n if (errors && errors.length > 0) {\n triggerEvent(elt, 'htmx:validation:halted', errors);\n return;\n }\n webSocket.send(JSON.stringify(filteredParameters));\n if(shouldCancel(evt, elt)){\n evt.preventDefault();\n }\n });\n } else {\n triggerErrorEvent(elt, \"htmx:noWebSocketSourceError\");\n }\n }\n\n function getWebSocketReconnectDelay(retryCount) {\n var delay = htmx.config.wsReconnectDelay;\n if (typeof delay === 'function') {\n // @ts-ignore\n return delay(retryCount);\n }\n if (delay === 'full-jitter') {\n var exp = Math.min(retryCount, 6);\n var maxDelay = 1000 * Math.pow(2, exp);\n return maxDelay * Math.random();\n }\n logError('htmx.config.wsReconnectDelay must either be a function or the string \"full-jitter\"');\n }\n\n //====================================================================\n // Server Sent Events\n //====================================================================\n\n function processSSEInfo(elt, nodeData, info) {\n var values = splitOnWhitespace(info);\n for (var i = 0; i < values.length; i++) {\n var value = values[i].split(/:(.+)/);\n if (value[0] === \"connect\") {\n processSSESource(elt, value[1]);\n }\n\n if ((value[0] === \"swap\")) {\n processSSESwap(elt, value[1])\n }\n }\n }\n\n function processSSESource(elt, sseSrc) {\n var source = htmx.createEventSource(sseSrc);\n source.onerror = function (e) {\n triggerErrorEvent(elt, \"htmx:sseError\", {error:e, source:source});\n maybeCloseSSESource(elt);\n };\n getInternalData(elt).sseEventSource = source;\n }\n\n function processSSESwap(elt, sseEventName) {\n var sseSourceElt = getClosestMatch(elt, hasEventSource);\n if (sseSourceElt) {\n var sseEventSource = getInternalData(sseSourceElt).sseEventSource;\n var sseListener = function (event) {\n if (maybeCloseSSESource(sseSourceElt)) {\n return;\n }\n if (!bodyContains(elt)) {\n sseEventSource.removeEventListener(sseEventName, sseListener);\n return;\n }\n\n ///////////////////////////\n // TODO: merge this code with AJAX and WebSockets code in the future.\n\n var response = event.data;\n withExtensions(elt, function(extension){\n response = extension.transformResponse(response, null, elt);\n });\n\n var swapSpec = getSwapSpecification(elt)\n var target = getTarget(elt)\n var settleInfo = makeSettleInfo(elt);\n\n selectAndSwap(swapSpec.swapStyle, target, elt, response, settleInfo)\n settleImmediately(settleInfo.tasks)\n triggerEvent(elt, \"htmx:sseMessage\", event)\n };\n\n getInternalData(elt).sseListener = sseListener;\n sseEventSource.addEventListener(sseEventName, sseListener);\n } else {\n triggerErrorEvent(elt, \"htmx:noSSESourceError\");\n }\n }\n\n function processSSETrigger(elt, handler, sseEventName) {\n var sseSourceElt = getClosestMatch(elt, hasEventSource);\n if (sseSourceElt) {\n var sseEventSource = getInternalData(sseSourceElt).sseEventSource;\n var sseListener = function () {\n if (!maybeCloseSSESource(sseSourceElt)) {\n if (bodyContains(elt)) {\n handler(elt);\n } else {\n sseEventSource.removeEventListener(sseEventName, sseListener);\n }\n }\n };\n getInternalData(elt).sseListener = sseListener;\n sseEventSource.addEventListener(sseEventName, sseListener);\n } else {\n triggerErrorEvent(elt, \"htmx:noSSESourceError\");\n }\n }\n\n function maybeCloseSSESource(elt) {\n if (!bodyContains(elt)) {\n getInternalData(elt).sseEventSource.close();\n return true;\n }\n }\n\n function hasEventSource(node) {\n return getInternalData(node).sseEventSource != null;\n }\n\n //====================================================================\n\n function loadImmediately(elt, handler, nodeData, delay) {\n var load = function(){\n if (!nodeData.loaded) {\n nodeData.loaded = true;\n handler(elt);\n }\n }\n if (delay > 0) {\n setTimeout(load, delay);\n } else {\n load();\n }\n }\n\n function processVerbs(elt, nodeData, triggerSpecs) {\n var explicitAction = false;\n forEach(VERBS, function (verb) {\n if (hasAttribute(elt,'hx-' + verb)) {\n var path = getAttributeValue(elt, 'hx-' + verb);\n explicitAction = true;\n nodeData.path = path;\n nodeData.verb = verb;\n triggerSpecs.forEach(function(triggerSpec) {\n addTriggerHandler(elt, triggerSpec, nodeData, function (elt, evt) {\n if (closest(elt, htmx.config.disableSelector)) {\n cleanUpElement(elt)\n return\n }\n issueAjaxRequest(verb, path, elt, evt)\n })\n });\n }\n });\n return explicitAction;\n }\n\n function addTriggerHandler(elt, triggerSpec, nodeData, handler) {\n if (triggerSpec.sseEvent) {\n processSSETrigger(elt, handler, triggerSpec.sseEvent);\n } else if (triggerSpec.trigger === \"revealed\") {\n initScrollHandler();\n addEventListener(elt, handler, nodeData, triggerSpec);\n maybeReveal(elt);\n } else if (triggerSpec.trigger === \"intersect\") {\n var observerOptions = {};\n if (triggerSpec.root) {\n observerOptions.root = querySelectorExt(elt, triggerSpec.root)\n }\n if (triggerSpec.threshold) {\n observerOptions.threshold = parseFloat(triggerSpec.threshold);\n }\n var observer = new IntersectionObserver(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i];\n if (entry.isIntersecting) {\n triggerEvent(elt, \"intersect\");\n break;\n }\n }\n }, observerOptions);\n observer.observe(elt);\n addEventListener(elt, handler, nodeData, triggerSpec);\n } else if (triggerSpec.trigger === \"load\") {\n if (!maybeFilterEvent(triggerSpec, elt, makeEvent(\"load\", {elt: elt}))) {\n loadImmediately(elt, handler, nodeData, triggerSpec.delay);\n }\n } else if (triggerSpec.pollInterval > 0) {\n nodeData.polling = true;\n processPolling(elt, handler, triggerSpec);\n } else {\n addEventListener(elt, handler, nodeData, triggerSpec);\n }\n }\n\n function evalScript(script) {\n if (!script.htmxExecuted && htmx.config.allowScriptTags &&\n (script.type === \"text/javascript\" || script.type === \"module\" || script.type === \"\") ) {\n var newScript = getDocument().createElement(\"script\");\n forEach(script.attributes, function (attr) {\n newScript.setAttribute(attr.name, attr.value);\n });\n newScript.textContent = script.textContent;\n newScript.async = false;\n if (htmx.config.inlineScriptNonce) {\n newScript.nonce = htmx.config.inlineScriptNonce;\n }\n var parent = script.parentElement;\n\n try {\n parent.insertBefore(newScript, script);\n } catch (e) {\n logError(e);\n } finally {\n // remove old script element, but only if it is still in DOM\n if (script.parentElement) {\n script.parentElement.removeChild(script);\n }\n }\n }\n }\n\n function processScripts(elt) {\n if (matches(elt, \"script\")) {\n evalScript(elt);\n }\n forEach(findAll(elt, \"script\"), function (script) {\n evalScript(script);\n });\n }\n\n function shouldProcessHxOn(elt) {\n var attributes = elt.attributes\n if (!attributes) {\n return false\n }\n for (var j = 0; j < attributes.length; j++) {\n var attrName = attributes[j].name\n if (startsWith(attrName, \"hx-on:\") || startsWith(attrName, \"data-hx-on:\") ||\n startsWith(attrName, \"hx-on-\") || startsWith(attrName, \"data-hx-on-\")) {\n return true\n }\n }\n return false\n }\n\n function findHxOnWildcardElements(elt) {\n var node = null\n var elements = []\n\n if (shouldProcessHxOn(elt)) {\n elements.push(elt)\n }\n\n if (document.evaluate) {\n var iter = document.evaluate('.//*[@*[ starts-with(name(), \"hx-on:\") or starts-with(name(), \"data-hx-on:\") or' +\n ' starts-with(name(), \"hx-on-\") or starts-with(name(), \"data-hx-on-\") ]]', elt)\n while (node = iter.iterateNext()) elements.push(node)\n } else if (typeof elt.getElementsByTagName === \"function\") {\n var allElements = elt.getElementsByTagName(\"*\")\n for (var i = 0; i < allElements.length; i++) {\n if (shouldProcessHxOn(allElements[i])) {\n elements.push(allElements[i])\n }\n }\n }\n\n return elements\n }\n\n function findElementsToProcess(elt) {\n if (elt.querySelectorAll) {\n var boostedSelector = \", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]\";\n var results = elt.querySelectorAll(VERB_SELECTOR + boostedSelector + \", form, [type='submit'], [hx-sse], [data-hx-sse], [hx-ws],\" +\n \" [data-hx-ws], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger], [hx-on], [data-hx-on]\");\n return results;\n } else {\n return [];\n }\n }\n\n // Handle submit buttons/inputs that have the form attribute set\n // see https://developer.mozilla.org/docs/Web/HTML/Element/button\n function maybeSetLastButtonClicked(evt) {\n var elt = closest(evt.target, \"button, input[type='submit']\");\n var internalData = getRelatedFormData(evt)\n if (internalData) {\n internalData.lastButtonClicked = elt;\n }\n };\n function maybeUnsetLastButtonClicked(evt){\n var internalData = getRelatedFormData(evt)\n if (internalData) {\n internalData.lastButtonClicked = null;\n }\n }\n function getRelatedFormData(evt) {\n var elt = closest(evt.target, \"button, input[type='submit']\");\n if (!elt) {\n return;\n }\n var form = resolveTarget('#' + getRawAttribute(elt, 'form')) || closest(elt, 'form');\n if (!form) {\n return;\n }\n return getInternalData(form);\n }\n function initButtonTracking(elt) {\n // need to handle both click and focus in:\n // focusin - in case someone tabs in to a button and hits the space bar\n // click - on OSX buttons do not focus on click see https://bugs.webkit.org/show_bug.cgi?id=13724\n elt.addEventListener('click', maybeSetLastButtonClicked)\n elt.addEventListener('focusin', maybeSetLastButtonClicked)\n elt.addEventListener('focusout', maybeUnsetLastButtonClicked)\n }\n\n function countCurlies(line) {\n var tokens = tokenizeString(line);\n var netCurlies = 0;\n for (var i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token === \"{\") {\n netCurlies++;\n } else if (token === \"}\") {\n netCurlies--;\n }\n }\n return netCurlies;\n }\n\n function addHxOnEventHandler(elt, eventName, code) {\n var nodeData = getInternalData(elt);\n if (!Array.isArray(nodeData.onHandlers)) {\n nodeData.onHandlers = [];\n }\n var func;\n var listener = function (e) {\n return maybeEval(elt, function() {\n if (!func) {\n func = new Function(\"event\", code);\n }\n func.call(elt, e);\n });\n };\n elt.addEventListener(eventName, listener);\n nodeData.onHandlers.push({event:eventName, listener:listener});\n }\n\n function processHxOn(elt) {\n var hxOnValue = getAttributeValue(elt, 'hx-on');\n if (hxOnValue) {\n var handlers = {}\n var lines = hxOnValue.split(\"\\n\");\n var currentEvent = null;\n var curlyCount = 0;\n while (lines.length > 0) {\n var line = lines.shift();\n var match = line.match(/^\\s*([a-zA-Z:\\-\\.]+:)(.*)/);\n if (curlyCount === 0 && match) {\n line.split(\":\")\n currentEvent = match[1].slice(0, -1); // strip last colon\n handlers[currentEvent] = match[2];\n } else {\n handlers[currentEvent] += line;\n }\n curlyCount += countCurlies(line);\n }\n\n for (var eventName in handlers) {\n addHxOnEventHandler(elt, eventName, handlers[eventName]);\n }\n }\n }\n\n function processHxOnWildcard(elt) {\n // wipe any previous on handlers so that this function takes precedence\n deInitOnHandlers(elt)\n\n for (var i = 0; i < elt.attributes.length; i++) {\n var name = elt.attributes[i].name\n var value = elt.attributes[i].value\n if (startsWith(name, \"hx-on\") || startsWith(name, \"data-hx-on\")) {\n var afterOnPosition = name.indexOf(\"-on\") + 3;\n var nextChar = name.slice(afterOnPosition, afterOnPosition + 1);\n if (nextChar === \"-\" || nextChar === \":\") {\n var eventName = name.slice(afterOnPosition + 1);\n // if the eventName starts with a colon or dash, prepend \"htmx\" for shorthand support\n if (startsWith(eventName, \":\")) {\n eventName = \"htmx\" + eventName\n } else if (startsWith(eventName, \"-\")) {\n eventName = \"htmx:\" + eventName.slice(1);\n } else if (startsWith(eventName, \"htmx-\")) {\n eventName = \"htmx:\" + eventName.slice(5);\n }\n\n addHxOnEventHandler(elt, eventName, value)\n }\n }\n }\n }\n\n function initNode(elt) {\n if (closest(elt, htmx.config.disableSelector)) {\n cleanUpElement(elt)\n return;\n }\n var nodeData = getInternalData(elt);\n if (nodeData.initHash !== attributeHash(elt)) {\n // clean up any previously processed info\n deInitNode(elt);\n\n nodeData.initHash = attributeHash(elt);\n\n processHxOn(elt);\n\n triggerEvent(elt, \"htmx:beforeProcessNode\")\n\n if (elt.value) {\n nodeData.lastValue = elt.value;\n }\n\n var triggerSpecs = getTriggerSpecs(elt);\n var hasExplicitHttpAction = processVerbs(elt, nodeData, triggerSpecs);\n\n if (!hasExplicitHttpAction) {\n if (getClosestAttributeValue(elt, \"hx-boost\") === \"true\") {\n boostElement(elt, nodeData, triggerSpecs);\n } else if (hasAttribute(elt, 'hx-trigger')) {\n triggerSpecs.forEach(function (triggerSpec) {\n // For \"naked\" triggers, don't do anything at all\n addTriggerHandler(elt, triggerSpec, nodeData, function () {\n })\n })\n }\n }\n\n // Handle submit buttons/inputs that have the form attribute set\n // see https://developer.mozilla.org/docs/Web/HTML/Element/button\n if (elt.tagName === \"FORM\" || (getRawAttribute(elt, \"type\") === \"submit\" && hasAttribute(elt, \"form\"))) {\n initButtonTracking(elt)\n }\n\n var sseInfo = getAttributeValue(elt, 'hx-sse');\n if (sseInfo) {\n processSSEInfo(elt, nodeData, sseInfo);\n }\n\n var wsInfo = getAttributeValue(elt, 'hx-ws');\n if (wsInfo) {\n processWebSocketInfo(elt, nodeData, wsInfo);\n }\n triggerEvent(elt, \"htmx:afterProcessNode\");\n }\n }\n\n function processNode(elt) {\n elt = resolveTarget(elt);\n if (closest(elt, htmx.config.disableSelector)) {\n cleanUpElement(elt)\n return;\n }\n initNode(elt);\n forEach(findElementsToProcess(elt), function(child) { initNode(child) });\n // Because it happens second, the new way of adding onHandlers superseeds the old one\n // i.e. if there are any hx-on:eventName attributes, the hx-on attribute will be ignored\n forEach(findHxOnWildcardElements(elt), processHxOnWildcard);\n }\n\n //====================================================================\n // Event/Log Support\n //====================================================================\n\n function kebabEventName(str) {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n }\n\n function makeEvent(eventName, detail) {\n var evt;\n if (window.CustomEvent && typeof window.CustomEvent === 'function') {\n evt = new CustomEvent(eventName, {bubbles: true, cancelable: true, detail: detail});\n } else {\n evt = getDocument().createEvent('CustomEvent');\n evt.initCustomEvent(eventName, true, true, detail);\n }\n return evt;\n }\n\n function triggerErrorEvent(elt, eventName, detail) {\n triggerEvent(elt, eventName, mergeObjects({error:eventName}, detail));\n }\n\n function ignoreEventForLogging(eventName) {\n return eventName === \"htmx:afterProcessNode\"\n }\n\n /**\n * `withExtensions` locates all active extensions for a provided element, then\n * executes the provided function using each of the active extensions. It should\n * be called internally at every extendable execution point in htmx.\n *\n * @param {HTMLElement} elt\n * @param {(extension:import(\"./htmx\").HtmxExtension) => void} toDo\n * @returns void\n */\n function withExtensions(elt, toDo) {\n forEach(getExtensions(elt), function(extension){\n try {\n toDo(extension);\n } catch (e) {\n logError(e);\n }\n });\n }\n\n function logError(msg) {\n if(console.error) {\n console.error(msg);\n } else if (console.log) {\n console.log(\"ERROR: \", msg);\n }\n }\n\n function triggerEvent(elt, eventName, detail) {\n elt = resolveTarget(elt);\n if (detail == null) {\n detail = {};\n }\n detail[\"elt\"] = elt;\n var event = makeEvent(eventName, detail);\n if (htmx.logger && !ignoreEventForLogging(eventName)) {\n htmx.logger(elt, eventName, detail);\n }\n if (detail.error) {\n logError(detail.error);\n triggerEvent(elt, \"htmx:error\", {errorInfo:detail})\n }\n var eventResult = elt.dispatchEvent(event);\n var kebabName = kebabEventName(eventName);\n if (eventResult && kebabName !== eventName) {\n var kebabedEvent = makeEvent(kebabName, event.detail);\n eventResult = eventResult && elt.dispatchEvent(kebabedEvent)\n }\n withExtensions(elt, function (extension) {\n eventResult = eventResult && (extension.onEvent(eventName, event) !== false && !event.defaultPrevented)\n });\n return eventResult;\n }\n\n //====================================================================\n // History Support\n //====================================================================\n var currentPathForHistory = location.pathname+location.search;\n\n function getHistoryElement() {\n var historyElt = getDocument().querySelector('[hx-history-elt],[data-hx-history-elt]');\n return historyElt || getDocument().body;\n }\n\n function saveToHistoryCache(url, content, title, scroll) {\n if (!canAccessLocalStorage()) {\n return;\n }\n\n if (htmx.config.historyCacheSize <= 0) {\n // make sure that an eventually already existing cache is purged\n localStorage.removeItem(\"htmx-history-cache\");\n return;\n }\n\n url = normalizePath(url);\n\n var historyCache = parseJSON(localStorage.getItem(\"htmx-history-cache\")) || [];\n for (var i = 0; i < historyCache.length; i++) {\n if (historyCache[i].url === url) {\n historyCache.splice(i, 1);\n break;\n }\n }\n var newHistoryItem = {url:url, content: content, title:title, scroll:scroll};\n triggerEvent(getDocument().body, \"htmx:historyItemCreated\", {item:newHistoryItem, cache: historyCache})\n historyCache.push(newHistoryItem)\n while (historyCache.length > htmx.config.historyCacheSize) {\n historyCache.shift();\n }\n while(historyCache.length > 0){\n try {\n localStorage.setItem(\"htmx-history-cache\", JSON.stringify(historyCache));\n break;\n } catch (e) {\n triggerErrorEvent(getDocument().body, \"htmx:historyCacheError\", {cause:e, cache: historyCache})\n historyCache.shift(); // shrink the cache and retry\n }\n }\n }\n\n function getCachedHistory(url) {\n if (!canAccessLocalStorage()) {\n return null;\n }\n\n url = normalizePath(url);\n\n var historyCache = parseJSON(localStorage.getItem(\"htmx-history-cache\")) || [];\n for (var i = 0; i < historyCache.length; i++) {\n if (historyCache[i].url === url) {\n return historyCache[i];\n }\n }\n return null;\n }\n\n function cleanInnerHtmlForHistory(elt) {\n var className = htmx.config.requestClass;\n var clone = elt.cloneNode(true);\n forEach(findAll(clone, \".\" + className), function(child){\n removeClassFromElement(child, className);\n });\n return clone.innerHTML;\n }\n\n function saveCurrentPageToHistory() {\n var elt = getHistoryElement();\n var path = currentPathForHistory || location.pathname+location.search;\n\n // Allow history snapshot feature to be disabled where hx-history=\"false\"\n // is present *anywhere* in the current document we're about to save,\n // so we can prevent privileged data entering the cache.\n // The page will still be reachable as a history entry, but htmx will fetch it\n // live from the server onpopstate rather than look in the localStorage cache\n var disableHistoryCache\n try {\n disableHistoryCache = getDocument().querySelector('[hx-history=\"false\" i],[data-hx-history=\"false\" i]')\n } catch (e) {\n // IE11: insensitive modifier not supported so fallback to case sensitive selector\n disableHistoryCache = getDocument().querySelector('[hx-history=\"false\"],[data-hx-history=\"false\"]')\n }\n if (!disableHistoryCache) {\n triggerEvent(getDocument().body, \"htmx:beforeHistorySave\", {path: path, historyElt: elt});\n saveToHistoryCache(path, cleanInnerHtmlForHistory(elt), getDocument().title, window.scrollY);\n }\n\n if (htmx.config.historyEnabled) history.replaceState({htmx: true}, getDocument().title, window.location.href);\n }\n\n function pushUrlIntoHistory(path) {\n // remove the cache buster parameter, if any\n if (htmx.config.getCacheBusterParam) {\n path = path.replace(/org\\.htmx\\.cache-buster=[^&]*&?/, '')\n if (endsWith(path, '&') || endsWith(path, \"?\")) {\n path = path.slice(0, -1);\n }\n }\n if(htmx.config.historyEnabled) {\n history.pushState({htmx:true}, \"\", path);\n }\n currentPathForHistory = path;\n }\n\n function replaceUrlInHistory(path) {\n if(htmx.config.historyEnabled) history.replaceState({htmx:true}, \"\", path);\n currentPathForHistory = path;\n }\n\n function settleImmediately(tasks) {\n forEach(tasks, function (task) {\n task.call();\n });\n }\n\n function loadHistoryFromServer(path) {\n var request = new XMLHttpRequest();\n var details = {path: path, xhr:request};\n triggerEvent(getDocument().body, \"htmx:historyCacheMiss\", details);\n request.open('GET', path, true);\n request.setRequestHeader(\"HX-Request\", \"true\");\n request.setRequestHeader(\"HX-History-Restore-Request\", \"true\");\n request.setRequestHeader(\"HX-Current-URL\", getDocument().location.href);\n request.onload = function () {\n if (this.status >= 200 && this.status < 400) {\n triggerEvent(getDocument().body, \"htmx:historyCacheMissLoad\", details);\n var fragment = makeFragment(this.response);\n // @ts-ignore\n fragment = fragment.querySelector('[hx-history-elt],[data-hx-history-elt]') || fragment;\n var historyElement = getHistoryElement();\n var settleInfo = makeSettleInfo(historyElement);\n var title = findTitle(this.response);\n if (title) {\n var titleElt = find(\"title\");\n if (titleElt) {\n titleElt.innerHTML = title;\n } else {\n window.document.title = title;\n }\n }\n // @ts-ignore\n swapInnerHTML(historyElement, fragment, settleInfo)\n settleImmediately(settleInfo.tasks);\n currentPathForHistory = path;\n triggerEvent(getDocument().body, \"htmx:historyRestore\", {path: path, cacheMiss:true, serverResponse:this.response});\n } else {\n triggerErrorEvent(getDocument().body, \"htmx:historyCacheMissLoadError\", details);\n }\n };\n request.send();\n }\n\n function restoreHistory(path) {\n saveCurrentPageToHistory();\n path = path || location.pathname+location.search;\n var cached = getCachedHistory(path);\n if (cached) {\n var fragment = makeFragment(cached.content);\n var historyElement = getHistoryElement();\n var settleInfo = makeSettleInfo(historyElement);\n swapInnerHTML(historyElement, fragment, settleInfo)\n settleImmediately(settleInfo.tasks);\n document.title = cached.title;\n setTimeout(function () {\n window.scrollTo(0, cached.scroll);\n }, 0); // next 'tick', so browser has time to render layout\n currentPathForHistory = path;\n triggerEvent(getDocument().body, \"htmx:historyRestore\", {path:path, item:cached});\n } else {\n if (htmx.config.refreshOnHistoryMiss) {\n\n // @ts-ignore: optional parameter in reload() function throws error\n window.location.reload(true);\n } else {\n loadHistoryFromServer(path);\n }\n }\n }\n\n function addRequestIndicatorClasses(elt) {\n var indicators = findAttributeTargets(elt, 'hx-indicator');\n if (indicators == null) {\n indicators = [elt];\n }\n forEach(indicators, function (ic) {\n var internalData = getInternalData(ic);\n internalData.requestCount = (internalData.requestCount || 0) + 1;\n ic.classList[\"add\"].call(ic.classList, htmx.config.requestClass);\n });\n return indicators;\n }\n\n function disableElements(elt) {\n var disabledElts = findAttributeTargets(elt, 'hx-disabled-elt');\n if (disabledElts == null) {\n disabledElts = [];\n }\n forEach(disabledElts, function (disabledElement) {\n var internalData = getInternalData(disabledElement);\n internalData.requestCount = (internalData.requestCount || 0) + 1;\n disabledElement.setAttribute(\"disabled\", \"\");\n });\n return disabledElts;\n }\n\n function removeRequestIndicators(indicators, disabled) {\n forEach(indicators, function (ic) {\n var internalData = getInternalData(ic);\n internalData.requestCount = (internalData.requestCount || 0) - 1;\n if (internalData.requestCount === 0) {\n ic.classList[\"remove\"].call(ic.classList, htmx.config.requestClass);\n }\n });\n forEach(disabled, function (disabledElement) {\n var internalData = getInternalData(disabledElement);\n internalData.requestCount = (internalData.requestCount || 0) - 1;\n if (internalData.requestCount === 0) {\n disabledElement.removeAttribute('disabled');\n }\n });\n }\n\n //====================================================================\n // Input Value Processing\n //====================================================================\n\n function haveSeenNode(processed, elt) {\n for (var i = 0; i < processed.length; i++) {\n var node = processed[i];\n if (node.isSameNode(elt)) {\n return true;\n }\n }\n return false;\n }\n\n function shouldInclude(elt) {\n if(elt.name === \"\" || elt.name == null || elt.disabled || closest(elt, \"fieldset[disabled]\")) {\n return false;\n }\n // ignore \"submitter\" types (see jQuery src/serialize.js)\n if (elt.type === \"button\" || elt.type === \"submit\" || elt.tagName === \"image\" || elt.tagName === \"reset\" || elt.tagName === \"file\" ) {\n return false;\n }\n if (elt.type === \"checkbox\" || elt.type === \"radio\" ) {\n return elt.checked;\n }\n return true;\n }\n\n function addValueToValues(name, value, values) {\n // This is a little ugly because both the current value of the named value in the form\n // and the new value could be arrays, so we have to handle all four cases :/\n if (name != null && value != null) {\n var current = values[name];\n if (current === undefined) {\n values[name] = value;\n } else if (Array.isArray(current)) {\n if (Array.isArray(value)) {\n values[name] = current.concat(value);\n } else {\n current.push(value);\n }\n } else {\n if (Array.isArray(value)) {\n values[name] = [current].concat(value);\n } else {\n values[name] = [current, value];\n }\n }\n }\n }\n\n function processInputValue(processed, values, errors, elt, validate) {\n if (elt == null || haveSeenNode(processed, elt)) {\n return;\n } else {\n processed.push(elt);\n }\n if (shouldInclude(elt)) {\n var name = getRawAttribute(elt,\"name\");\n var value = elt.value;\n if (elt.multiple && elt.tagName === \"SELECT\") {\n value = toArray(elt.querySelectorAll(\"option:checked\")).map(function (e) { return e.value });\n }\n // include file inputs\n if (elt.files) {\n value = toArray(elt.files);\n }\n addValueToValues(name, value, values);\n if (validate) {\n validateElement(elt, errors);\n }\n }\n if (matches(elt, 'form')) {\n var inputs = elt.elements;\n forEach(inputs, function(input) {\n processInputValue(processed, values, errors, input, validate);\n });\n }\n }\n\n function validateElement(element, errors) {\n if (element.willValidate) {\n triggerEvent(element, \"htmx:validation:validate\")\n if (!element.checkValidity()) {\n errors.push({elt: element, message:element.validationMessage, validity:element.validity});\n triggerEvent(element, \"htmx:validation:failed\", {message:element.validationMessage, validity:element.validity})\n }\n }\n }\n\n /**\n * @param {HTMLElement} elt\n * @param {string} verb\n */\n function getInputValues(elt, verb) {\n var processed = [];\n var values = {};\n var formValues = {};\n var errors = [];\n var internalData = getInternalData(elt);\n if (internalData.lastButtonClicked && !bodyContains(internalData.lastButtonClicked)) {\n internalData.lastButtonClicked = null\n }\n\n // only validate when form is directly submitted and novalidate or formnovalidate are not set\n // or if the element has an explicit hx-validate=\"true\" on it\n var validate = (matches(elt, 'form') && elt.noValidate !== true) || getAttributeValue(elt, \"hx-validate\") === \"true\";\n if (internalData.lastButtonClicked) {\n validate = validate && internalData.lastButtonClicked.formNoValidate !== true;\n }\n\n // for a non-GET include the closest form\n if (verb !== 'get') {\n processInputValue(processed, formValues, errors, closest(elt, 'form'), validate);\n }\n\n // include the element itself\n processInputValue(processed, values, errors, elt, validate);\n\n // if a button or submit was clicked last, include its value\n if (internalData.lastButtonClicked || elt.tagName === \"BUTTON\" ||\n (elt.tagName === \"INPUT\" && getRawAttribute(elt, \"type\") === \"submit\")) {\n var button = internalData.lastButtonClicked || elt\n var name = getRawAttribute(button, \"name\")\n addValueToValues(name, button.value, formValues)\n }\n\n // include any explicit includes\n var includes = findAttributeTargets(elt, \"hx-include\");\n forEach(includes, function(node) {\n processInputValue(processed, values, errors, node, validate);\n // if a non-form is included, include any input values within it\n if (!matches(node, 'form')) {\n forEach(node.querySelectorAll(INPUT_SELECTOR), function (descendant) {\n processInputValue(processed, values, errors, descendant, validate);\n })\n }\n });\n\n // form values take precedence, overriding the regular values\n values = mergeObjects(values, formValues);\n\n return {errors:errors, values:values};\n }\n\n function appendParam(returnStr, name, realValue) {\n if (returnStr !== \"\") {\n returnStr += \"&\";\n }\n if (String(realValue) === \"[object Object]\") {\n realValue = JSON.stringify(realValue);\n }\n var s = encodeURIComponent(realValue);\n returnStr += encodeURIComponent(name) + \"=\" + s;\n return returnStr;\n }\n\n function urlEncode(values) {\n var returnStr = \"\";\n for (var name in values) {\n if (values.hasOwnProperty(name)) {\n var value = values[name];\n if (Array.isArray(value)) {\n forEach(value, function(v) {\n returnStr = appendParam(returnStr, name, v);\n });\n } else {\n returnStr = appendParam(returnStr, name, value);\n }\n }\n }\n return returnStr;\n }\n\n function makeFormData(values) {\n var formData = new FormData();\n for (var name in values) {\n if (values.hasOwnProperty(name)) {\n var value = values[name];\n if (Array.isArray(value)) {\n forEach(value, function(v) {\n formData.append(name, v);\n });\n } else {\n formData.append(name, value);\n }\n }\n }\n return formData;\n }\n\n //====================================================================\n // Ajax\n //====================================================================\n\n /**\n * @param {HTMLElement} elt\n * @param {HTMLElement} target\n * @param {string} prompt\n * @returns {Object} // TODO: Define/Improve HtmxHeaderSpecification\n */\n function getHeaders(elt, target, prompt) {\n var headers = {\n \"HX-Request\" : \"true\",\n \"HX-Trigger\" : getRawAttribute(elt, \"id\"),\n \"HX-Trigger-Name\" : getRawAttribute(elt, \"name\"),\n \"HX-Target\" : getAttributeValue(target, \"id\"),\n \"HX-Current-URL\" : getDocument().location.href,\n }\n getValuesForElement(elt, \"hx-headers\", false, headers)\n if (prompt !== undefined) {\n headers[\"HX-Prompt\"] = prompt;\n }\n if (getInternalData(elt).boosted) {\n headers[\"HX-Boosted\"] = \"true\";\n }\n return headers;\n }\n\n /**\n * filterValues takes an object containing form input values\n * and returns a new object that only contains keys that are\n * specified by the closest \"hx-params\" attribute\n * @param {Object} inputValues\n * @param {HTMLElement} elt\n * @returns {Object}\n */\n function filterValues(inputValues, elt) {\n var paramsValue = getClosestAttributeValue(elt, \"hx-params\");\n if (paramsValue) {\n if (paramsValue === \"none\") {\n return {};\n } else if (paramsValue === \"*\") {\n return inputValues;\n } else if(paramsValue.indexOf(\"not \") === 0) {\n forEach(paramsValue.substr(4).split(\",\"), function (name) {\n name = name.trim();\n delete inputValues[name];\n });\n return inputValues;\n } else {\n var newValues = {}\n forEach(paramsValue.split(\",\"), function (name) {\n name = name.trim();\n newValues[name] = inputValues[name];\n });\n return newValues;\n }\n } else {\n return inputValues;\n }\n }\n\n function isAnchorLink(elt) {\n return getRawAttribute(elt, 'href') && getRawAttribute(elt, 'href').indexOf(\"#\") >=0\n }\n\n /**\n *\n * @param {HTMLElement} elt\n * @param {string} swapInfoOverride\n * @returns {import(\"./htmx\").HtmxSwapSpecification}\n */\n function getSwapSpecification(elt, swapInfoOverride) {\n var swapInfo = swapInfoOverride ? swapInfoOverride : getClosestAttributeValue(elt, \"hx-swap\");\n var swapSpec = {\n \"swapStyle\" : getInternalData(elt).boosted ? 'innerHTML' : htmx.config.defaultSwapStyle,\n \"swapDelay\" : htmx.config.defaultSwapDelay,\n \"settleDelay\" : htmx.config.defaultSettleDelay\n }\n if (htmx.config.scrollIntoViewOnBoost && getInternalData(elt).boosted && !isAnchorLink(elt)) {\n swapSpec[\"show\"] = \"top\"\n }\n if (swapInfo) {\n var split = splitOnWhitespace(swapInfo);\n if (split.length > 0) {\n for (var i = 0; i < split.length; i++) {\n var value = split[i];\n if (value.indexOf(\"swap:\") === 0) {\n swapSpec[\"swapDelay\"] = parseInterval(value.substr(5));\n } else if (value.indexOf(\"settle:\") === 0) {\n swapSpec[\"settleDelay\"] = parseInterval(value.substr(7));\n } else if (value.indexOf(\"transition:\") === 0) {\n swapSpec[\"transition\"] = value.substr(11) === \"true\";\n } else if (value.indexOf(\"ignoreTitle:\") === 0) {\n swapSpec[\"ignoreTitle\"] = value.substr(12) === \"true\";\n } else if (value.indexOf(\"scroll:\") === 0) {\n var scrollSpec = value.substr(7);\n var splitSpec = scrollSpec.split(\":\");\n var scrollVal = splitSpec.pop();\n var selectorVal = splitSpec.length > 0 ? splitSpec.join(\":\") : null;\n swapSpec[\"scroll\"] = scrollVal;\n swapSpec[\"scrollTarget\"] = selectorVal;\n } else if (value.indexOf(\"show:\") === 0) {\n var showSpec = value.substr(5);\n var splitSpec = showSpec.split(\":\");\n var showVal = splitSpec.pop();\n var selectorVal = splitSpec.length > 0 ? splitSpec.join(\":\") : null;\n swapSpec[\"show\"] = showVal;\n swapSpec[\"showTarget\"] = selectorVal;\n } else if (value.indexOf(\"focus-scroll:\") === 0) {\n var focusScrollVal = value.substr(\"focus-scroll:\".length);\n swapSpec[\"focusScroll\"] = focusScrollVal == \"true\";\n } else if (i == 0) {\n swapSpec[\"swapStyle\"] = value;\n } else {\n logError('Unknown modifier in hx-swap: ' + value);\n }\n }\n }\n }\n return swapSpec;\n }\n\n function usesFormData(elt) {\n return getClosestAttributeValue(elt, \"hx-encoding\") === \"multipart/form-data\" ||\n (matches(elt, \"form\") && getRawAttribute(elt, 'enctype') === \"multipart/form-data\");\n }\n\n function encodeParamsForBody(xhr, elt, filteredParameters) {\n var encodedParameters = null;\n withExtensions(elt, function (extension) {\n if (encodedParameters == null) {\n encodedParameters = extension.encodeParameters(xhr, filteredParameters, elt);\n }\n });\n if (encodedParameters != null) {\n return encodedParameters;\n } else {\n if (usesFormData(elt)) {\n return makeFormData(filteredParameters);\n } else {\n return urlEncode(filteredParameters);\n }\n }\n }\n\n /**\n *\n * @param {Element} target\n * @returns {import(\"./htmx\").HtmxSettleInfo}\n */\n function makeSettleInfo(target) {\n return {tasks: [], elts: [target]};\n }\n\n function updateScrollState(content, swapSpec) {\n var first = content[0];\n var last = content[content.length - 1];\n if (swapSpec.scroll) {\n var target = null;\n if (swapSpec.scrollTarget) {\n target = querySelectorExt(first, swapSpec.scrollTarget);\n }\n if (swapSpec.scroll === \"top\" && (first || target)) {\n target = target || first;\n target.scrollTop = 0;\n }\n if (swapSpec.scroll === \"bottom\" && (last || target)) {\n target = target || last;\n target.scrollTop = target.scrollHeight;\n }\n }\n if (swapSpec.show) {\n var target = null;\n if (swapSpec.showTarget) {\n var targetStr = swapSpec.showTarget;\n if (swapSpec.showTarget === \"window\") {\n targetStr = \"body\";\n }\n target = querySelectorExt(first, targetStr);\n }\n if (swapSpec.show === \"top\" && (first || target)) {\n target = target || first;\n target.scrollIntoView({block:'start', behavior: htmx.config.scrollBehavior});\n }\n if (swapSpec.show === \"bottom\" && (last || target)) {\n target = target || last;\n target.scrollIntoView({block:'end', behavior: htmx.config.scrollBehavior});\n }\n }\n }\n\n /**\n * @param {HTMLElement} elt\n * @param {string} attr\n * @param {boolean=} evalAsDefault\n * @param {Object=} values\n * @returns {Object}\n */\n function getValuesForElement(elt, attr, evalAsDefault, values) {\n if (values == null) {\n values = {};\n }\n if (elt == null) {\n return values;\n }\n var attributeValue = getAttributeValue(elt, attr);\n if (attributeValue) {\n var str = attributeValue.trim();\n var evaluateValue = evalAsDefault;\n if (str === \"unset\") {\n return null;\n }\n if (str.indexOf(\"javascript:\") === 0) {\n str = str.substr(11);\n evaluateValue = true;\n } else if (str.indexOf(\"js:\") === 0) {\n str = str.substr(3);\n evaluateValue = true;\n }\n if (str.indexOf('{') !== 0) {\n str = \"{\" + str + \"}\";\n }\n var varsValues;\n if (evaluateValue) {\n varsValues = maybeEval(elt,function () {return Function(\"return (\" + str + \")\")();}, {});\n } else {\n varsValues = parseJSON(str);\n }\n for (var key in varsValues) {\n if (varsValues.hasOwnProperty(key)) {\n if (values[key] == null) {\n values[key] = varsValues[key];\n }\n }\n }\n }\n return getValuesForElement(parentElt(elt), attr, evalAsDefault, values);\n }\n\n function maybeEval(elt, toEval, defaultVal) {\n if (htmx.config.allowEval) {\n return toEval();\n } else {\n triggerErrorEvent(elt, 'htmx:evalDisallowedError');\n return defaultVal;\n }\n }\n\n /**\n * @param {HTMLElement} elt\n * @param {*} expressionVars\n * @returns\n */\n function getHXVarsForElement(elt, expressionVars) {\n return getValuesForElement(elt, \"hx-vars\", true, expressionVars);\n }\n\n /**\n * @param {HTMLElement} elt\n * @param {*} expressionVars\n * @returns\n */\n function getHXValsForElement(elt, expressionVars) {\n return getValuesForElement(elt, \"hx-vals\", false, expressionVars);\n }\n\n /**\n * @param {HTMLElement} elt\n * @returns {Object}\n */\n function getExpressionVars(elt) {\n return mergeObjects(getHXVarsForElement(elt), getHXValsForElement(elt));\n }\n\n function safelySetHeaderValue(xhr, header, headerValue) {\n if (headerValue !== null) {\n try {\n xhr.setRequestHeader(header, headerValue);\n } catch (e) {\n // On an exception, try to set the header URI encoded instead\n xhr.setRequestHeader(header, encodeURIComponent(headerValue));\n xhr.setRequestHeader(header + \"-URI-AutoEncoded\", \"true\");\n }\n }\n }\n\n function getPathFromResponse(xhr) {\n // NB: IE11 does not support this stuff\n if (xhr.responseURL && typeof(URL) !== \"undefined\") {\n try {\n var url = new URL(xhr.responseURL);\n return url.pathname + url.search;\n } catch (e) {\n triggerErrorEvent(getDocument().body, \"htmx:badResponseUrl\", {url: xhr.responseURL});\n }\n }\n }\n\n function hasHeader(xhr, regexp) {\n return regexp.test(xhr.getAllResponseHeaders())\n }\n\n function ajaxHelper(verb, path, context) {\n verb = verb.toLowerCase();\n if (context) {\n if (context instanceof Element || isType(context, 'String')) {\n return issueAjaxRequest(verb, path, null, null, {\n targetOverride: resolveTarget(context),\n returnPromise: true\n });\n } else {\n return issueAjaxRequest(verb, path, resolveTarget(context.source), context.event,\n {\n handler : context.handler,\n headers : context.headers,\n values : context.values,\n targetOverride: resolveTarget(context.target),\n swapOverride: context.swap,\n select: context.select,\n returnPromise: true\n });\n }\n } else {\n return issueAjaxRequest(verb, path, null, null, {\n returnPromise: true\n });\n }\n }\n\n function hierarchyForElt(elt) {\n var arr = [];\n while (elt) {\n arr.push(elt);\n elt = elt.parentElement;\n }\n return arr;\n }\n\n function verifyPath(elt, path, requestConfig) {\n var sameHost\n var url\n if (typeof URL === \"function\") {\n url = new URL(path, document.location.href);\n var origin = document.location.origin;\n sameHost = origin === url.origin;\n } else {\n // IE11 doesn't support URL\n url = path\n sameHost = startsWith(path, document.location.origin)\n }\n\n if (htmx.config.selfRequestsOnly) {\n if (!sameHost) {\n return false;\n }\n }\n return triggerEvent(elt, \"htmx:validateUrl\", mergeObjects({url: url, sameHost: sameHost}, requestConfig));\n }\n\n function issueAjaxRequest(verb, path, elt, event, etc, confirmed) {\n var resolve = null;\n var reject = null;\n etc = etc != null ? etc : {};\n if(etc.returnPromise && typeof Promise !== \"undefined\"){\n var promise = new Promise(function (_resolve, _reject) {\n resolve = _resolve;\n reject = _reject;\n });\n }\n if(elt == null) {\n elt = getDocument().body;\n }\n var responseHandler = etc.handler || handleAjaxResponse;\n var select = etc.select || null;\n\n if (!bodyContains(elt)) {\n // do not issue requests for elements removed from the DOM\n maybeCall(resolve);\n return promise;\n }\n var target = etc.targetOverride || getTarget(elt);\n if (target == null || target == DUMMY_ELT) {\n triggerErrorEvent(elt, 'htmx:targetError', {target: getAttributeValue(elt, \"hx-target\")});\n maybeCall(reject);\n return promise;\n }\n\n var eltData = getInternalData(elt);\n var submitter = eltData.lastButtonClicked;\n\n if (submitter) {\n var buttonPath = getRawAttribute(submitter, \"formaction\");\n if (buttonPath != null) {\n path = buttonPath;\n }\n\n var buttonVerb = getRawAttribute(submitter, \"formmethod\")\n if (buttonVerb != null) {\n // ignore buttons with formmethod=\"dialog\"\n if (buttonVerb.toLowerCase() !== \"dialog\") {\n verb = buttonVerb;\n }\n }\n }\n\n var confirmQuestion = getClosestAttributeValue(elt, \"hx-confirm\");\n // allow event-based confirmation w/ a callback\n if (confirmed === undefined) {\n var issueRequest = function(skipConfirmation) {\n return issueAjaxRequest(verb, path, elt, event, etc, !!skipConfirmation);\n }\n var confirmDetails = {target: target, elt: elt, path: path, verb: verb, triggeringEvent: event, etc: etc, issueRequest: issueRequest, question: confirmQuestion};\n if (triggerEvent(elt, 'htmx:confirm', confirmDetails) === false) {\n maybeCall(resolve);\n return promise;\n }\n }\n\n var syncElt = elt;\n var syncStrategy = getClosestAttributeValue(elt, \"hx-sync\");\n var queueStrategy = null;\n var abortable = false;\n if (syncStrategy) {\n var syncStrings = syncStrategy.split(\":\");\n var selector = syncStrings[0].trim();\n if (selector === \"this\") {\n syncElt = findThisElement(elt, 'hx-sync');\n } else {\n syncElt = querySelectorExt(elt, selector);\n }\n // default to the drop strategy\n syncStrategy = (syncStrings[1] || 'drop').trim();\n eltData = getInternalData(syncElt);\n if (syncStrategy === \"drop\" && eltData.xhr && eltData.abortable !== true) {\n maybeCall(resolve);\n return promise;\n } else if (syncStrategy === \"abort\") {\n if (eltData.xhr) {\n maybeCall(resolve);\n return promise;\n } else {\n abortable = true;\n }\n } else if (syncStrategy === \"replace\") {\n triggerEvent(syncElt, 'htmx:abort'); // abort the current request and continue\n } else if (syncStrategy.indexOf(\"queue\") === 0) {\n var queueStrArray = syncStrategy.split(\" \");\n queueStrategy = (queueStrArray[1] || \"last\").trim();\n }\n }\n\n if (eltData.xhr) {\n if (eltData.abortable) {\n triggerEvent(syncElt, 'htmx:abort'); // abort the current request and continue\n } else {\n if(queueStrategy == null){\n if (event) {\n var eventData = getInternalData(event);\n if (eventData && eventData.triggerSpec && eventData.triggerSpec.queue) {\n queueStrategy = eventData.triggerSpec.queue;\n }\n }\n if (queueStrategy == null) {\n queueStrategy = \"last\";\n }\n }\n if (eltData.queuedRequests == null) {\n eltData.queuedRequests = [];\n }\n if (queueStrategy === \"first\" && eltData.queuedRequests.length === 0) {\n eltData.queuedRequests.push(function () {\n issueAjaxRequest(verb, path, elt, event, etc)\n });\n } else if (queueStrategy === \"all\") {\n eltData.queuedRequests.push(function () {\n issueAjaxRequest(verb, path, elt, event, etc)\n });\n } else if (queueStrategy === \"last\") {\n eltData.queuedRequests = []; // dump existing queue\n eltData.queuedRequests.push(function () {\n issueAjaxRequest(verb, path, elt, event, etc)\n });\n }\n maybeCall(resolve);\n return promise;\n }\n }\n\n var xhr = new XMLHttpRequest();\n eltData.xhr = xhr;\n eltData.abortable = abortable;\n var endRequestLock = function(){\n eltData.xhr = null;\n eltData.abortable = false;\n if (eltData.queuedRequests != null &&\n eltData.queuedRequests.length > 0) {\n var queuedRequest = eltData.queuedRequests.shift();\n queuedRequest();\n }\n }\n var promptQuestion = getClosestAttributeValue(elt, \"hx-prompt\");\n if (promptQuestion) {\n var promptResponse = prompt(promptQuestion);\n // prompt returns null if cancelled and empty string if accepted with no entry\n if (promptResponse === null ||\n !triggerEvent(elt, 'htmx:prompt', {prompt: promptResponse, target:target})) {\n maybeCall(resolve);\n endRequestLock();\n return promise;\n }\n }\n\n if (confirmQuestion && !confirmed) {\n if(!confirm(confirmQuestion)) {\n maybeCall(resolve);\n endRequestLock()\n return promise;\n }\n }\n\n\n var headers = getHeaders(elt, target, promptResponse);\n\n if (verb !== 'get' && !usesFormData(elt)) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n }\n\n if (etc.headers) {\n headers = mergeObjects(headers, etc.headers);\n }\n var results = getInputValues(elt, verb);\n var errors = results.errors;\n var rawParameters = results.values;\n if (etc.values) {\n rawParameters = mergeObjects(rawParameters, etc.values);\n }\n var expressionVars = getExpressionVars(elt);\n var allParameters = mergeObjects(rawParameters, expressionVars);\n var filteredParameters = filterValues(allParameters, elt);\n\n if (htmx.config.getCacheBusterParam && verb === 'get') {\n filteredParameters['org.htmx.cache-buster'] = getRawAttribute(target, \"id\") || \"true\";\n }\n\n // behavior of anchors w/ empty href is to use the current URL\n if (path == null || path === \"\") {\n path = getDocument().location.href;\n }\n\n\n var requestAttrValues = getValuesForElement(elt, 'hx-request');\n\n var eltIsBoosted = getInternalData(elt).boosted;\n\n var useUrlParams = htmx.config.methodsThatUseUrlParams.indexOf(verb) >= 0\n\n var requestConfig = {\n boosted: eltIsBoosted,\n useUrlParams: useUrlParams,\n parameters: filteredParameters,\n unfilteredParameters: allParameters,\n headers:headers,\n target:target,\n verb:verb,\n errors:errors,\n withCredentials: etc.credentials || requestAttrValues.credentials || htmx.config.withCredentials,\n timeout: etc.timeout || requestAttrValues.timeout || htmx.config.timeout,\n path:path,\n triggeringEvent:event\n };\n\n if(!triggerEvent(elt, 'htmx:configRequest', requestConfig)){\n maybeCall(resolve);\n endRequestLock();\n return promise;\n }\n\n // copy out in case the object was overwritten\n path = requestConfig.path;\n verb = requestConfig.verb;\n headers = requestConfig.headers;\n filteredParameters = requestConfig.parameters;\n errors = requestConfig.errors;\n useUrlParams = requestConfig.useUrlParams;\n\n if(errors && errors.length > 0){\n triggerEvent(elt, 'htmx:validation:halted', requestConfig)\n maybeCall(resolve);\n endRequestLock();\n return promise;\n }\n\n var splitPath = path.split(\"#\");\n var pathNoAnchor = splitPath[0];\n var anchor = splitPath[1];\n\n var finalPath = path\n if (useUrlParams) {\n finalPath = pathNoAnchor;\n var values = Object.keys(filteredParameters).length !== 0;\n if (values) {\n if (finalPath.indexOf(\"?\") < 0) {\n finalPath += \"?\";\n } else {\n finalPath += \"&\";\n }\n finalPath += urlEncode(filteredParameters);\n if (anchor) {\n finalPath += \"#\" + anchor;\n }\n }\n }\n\n if (!verifyPath(elt, finalPath, requestConfig)) {\n triggerErrorEvent(elt, 'htmx:invalidPath', requestConfig)\n maybeCall(reject);\n return promise;\n };\n\n xhr.open(verb.toUpperCase(), finalPath, true);\n xhr.overrideMimeType(\"text/html\");\n xhr.withCredentials = requestConfig.withCredentials;\n xhr.timeout = requestConfig.timeout;\n\n // request headers\n if (requestAttrValues.noHeaders) {\n // ignore all headers\n } else {\n for (var header in headers) {\n if (headers.hasOwnProperty(header)) {\n var headerValue = headers[header];\n safelySetHeaderValue(xhr, header, headerValue);\n }\n }\n }\n\n var responseInfo = {\n xhr: xhr, target: target, requestConfig: requestConfig, etc: etc, boosted: eltIsBoosted, select: select,\n pathInfo: {\n requestPath: path,\n finalRequestPath: finalPath,\n anchor: anchor\n }\n };\n\n xhr.onload = function () {\n try {\n var hierarchy = hierarchyForElt(elt);\n responseInfo.pathInfo.responsePath = getPathFromResponse(xhr);\n responseHandler(elt, responseInfo);\n removeRequestIndicators(indicators, disableElts);\n triggerEvent(elt, 'htmx:afterRequest', responseInfo);\n triggerEvent(elt, 'htmx:afterOnLoad', responseInfo);\n // if the body no longer contains the element, trigger the event on the closest parent\n // remaining in the DOM\n if (!bodyContains(elt)) {\n var secondaryTriggerElt = null;\n while (hierarchy.length > 0 && secondaryTriggerElt == null) {\n var parentEltInHierarchy = hierarchy.shift();\n if (bodyContains(parentEltInHierarchy)) {\n secondaryTriggerElt = parentEltInHierarchy;\n }\n }\n if (secondaryTriggerElt) {\n triggerEvent(secondaryTriggerElt, 'htmx:afterRequest', responseInfo);\n triggerEvent(secondaryTriggerElt, 'htmx:afterOnLoad', responseInfo);\n }\n }\n maybeCall(resolve);\n endRequestLock();\n } catch (e) {\n triggerErrorEvent(elt, 'htmx:onLoadError', mergeObjects({error:e}, responseInfo));\n throw e;\n }\n }\n xhr.onerror = function () {\n removeRequestIndicators(indicators, disableElts);\n triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo);\n triggerErrorEvent(elt, 'htmx:sendError', responseInfo);\n maybeCall(reject);\n endRequestLock();\n }\n xhr.onabort = function() {\n removeRequestIndicators(indicators, disableElts);\n triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo);\n triggerErrorEvent(elt, 'htmx:sendAbort', responseInfo);\n maybeCall(reject);\n endRequestLock();\n }\n xhr.ontimeout = function() {\n removeRequestIndicators(indicators, disableElts);\n triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo);\n triggerErrorEvent(elt, 'htmx:timeout', responseInfo);\n maybeCall(reject);\n endRequestLock();\n }\n if(!triggerEvent(elt, 'htmx:beforeRequest', responseInfo)){\n maybeCall(resolve);\n endRequestLock()\n return promise\n }\n var indicators = addRequestIndicatorClasses(elt);\n var disableElts = disableElements(elt);\n\n forEach(['loadstart', 'loadend', 'progress', 'abort'], function(eventName) {\n forEach([xhr, xhr.upload], function (target) {\n target.addEventListener(eventName, function(event){\n triggerEvent(elt, \"htmx:xhr:\" + eventName, {\n lengthComputable:event.lengthComputable,\n loaded:event.loaded,\n total:event.total\n });\n })\n });\n });\n triggerEvent(elt, 'htmx:beforeSend', responseInfo);\n var params = useUrlParams ? null : encodeParamsForBody(xhr, elt, filteredParameters)\n xhr.send(params);\n return promise;\n }\n\n function determineHistoryUpdates(elt, responseInfo) {\n\n var xhr = responseInfo.xhr;\n\n //===========================================\n // First consult response headers\n //===========================================\n var pathFromHeaders = null;\n var typeFromHeaders = null;\n if (hasHeader(xhr,/HX-Push:/i)) {\n pathFromHeaders = xhr.getResponseHeader(\"HX-Push\");\n typeFromHeaders = \"push\";\n } else if (hasHeader(xhr,/HX-Push-Url:/i)) {\n pathFromHeaders = xhr.getResponseHeader(\"HX-Push-Url\");\n typeFromHeaders = \"push\";\n } else if (hasHeader(xhr,/HX-Replace-Url:/i)) {\n pathFromHeaders = xhr.getResponseHeader(\"HX-Replace-Url\");\n typeFromHeaders = \"replace\";\n }\n\n // if there was a response header, that has priority\n if (pathFromHeaders) {\n if (pathFromHeaders === \"false\") {\n return {}\n } else {\n return {\n type: typeFromHeaders,\n path : pathFromHeaders\n }\n }\n }\n\n //===========================================\n // Next resolve via DOM values\n //===========================================\n var requestPath = responseInfo.pathInfo.finalRequestPath;\n var responsePath = responseInfo.pathInfo.responsePath;\n\n var pushUrl = getClosestAttributeValue(elt, \"hx-push-url\");\n var replaceUrl = getClosestAttributeValue(elt, \"hx-replace-url\");\n var elementIsBoosted = getInternalData(elt).boosted;\n\n var saveType = null;\n var path = null;\n\n if (pushUrl) {\n saveType = \"push\";\n path = pushUrl;\n } else if (replaceUrl) {\n saveType = \"replace\";\n path = replaceUrl;\n } else if (elementIsBoosted) {\n saveType = \"push\";\n path = responsePath || requestPath; // if there is no response path, go with the original request path\n }\n\n if (path) {\n // false indicates no push, return empty object\n if (path === \"false\") {\n return {};\n }\n\n // true indicates we want to follow wherever the server ended up sending us\n if (path === \"true\") {\n path = responsePath || requestPath; // if there is no response path, go with the original request path\n }\n\n // restore any anchor associated with the request\n if (responseInfo.pathInfo.anchor &&\n path.indexOf(\"#\") === -1) {\n path = path + \"#\" + responseInfo.pathInfo.anchor;\n }\n\n return {\n type:saveType,\n path: path\n }\n } else {\n return {};\n }\n }\n\n function handleAjaxResponse(elt, responseInfo) {\n var xhr = responseInfo.xhr;\n var target = responseInfo.target;\n var etc = responseInfo.etc;\n var requestConfig = responseInfo.requestConfig;\n var select = responseInfo.select;\n\n if (!triggerEvent(elt, 'htmx:beforeOnLoad', responseInfo)) return;\n\n if (hasHeader(xhr, /HX-Trigger:/i)) {\n handleTrigger(xhr, \"HX-Trigger\", elt);\n }\n\n if (hasHeader(xhr, /HX-Location:/i)) {\n saveCurrentPageToHistory();\n var redirectPath = xhr.getResponseHeader(\"HX-Location\");\n var swapSpec;\n if (redirectPath.indexOf(\"{\") === 0) {\n swapSpec = parseJSON(redirectPath);\n // what's the best way to throw an error if the user didn't include this\n redirectPath = swapSpec['path'];\n delete swapSpec['path'];\n }\n ajaxHelper('GET', redirectPath, swapSpec).then(function(){\n pushUrlIntoHistory(redirectPath);\n });\n return;\n }\n\n var shouldRefresh = hasHeader(xhr, /HX-Refresh:/i) && \"true\" === xhr.getResponseHeader(\"HX-Refresh\");\n\n if (hasHeader(xhr, /HX-Redirect:/i)) {\n location.href = xhr.getResponseHeader(\"HX-Redirect\");\n shouldRefresh && location.reload();\n return;\n }\n\n if (shouldRefresh) {\n location.reload();\n return;\n }\n\n if (hasHeader(xhr,/HX-Retarget:/i)) {\n if (xhr.getResponseHeader(\"HX-Retarget\") === \"this\") {\n responseInfo.target = elt;\n } else {\n responseInfo.target = querySelectorExt(elt, xhr.getResponseHeader(\"HX-Retarget\"));\n }\n }\n\n var historyUpdate = determineHistoryUpdates(elt, responseInfo);\n\n // by default htmx only swaps on 200 return codes and does not swap\n // on 204 'No Content'\n // this can be ovverriden by responding to the htmx:beforeSwap event and\n // overriding the detail.shouldSwap property\n var shouldSwap = xhr.status >= 200 && xhr.status < 400 && xhr.status !== 204;\n var serverResponse = xhr.response;\n var isError = xhr.status >= 400;\n var ignoreTitle = htmx.config.ignoreTitle\n var beforeSwapDetails = mergeObjects({shouldSwap: shouldSwap, serverResponse:serverResponse, isError:isError, ignoreTitle:ignoreTitle }, responseInfo);\n if (!triggerEvent(target, 'htmx:beforeSwap', beforeSwapDetails)) return;\n\n target = beforeSwapDetails.target; // allow re-targeting\n serverResponse = beforeSwapDetails.serverResponse; // allow updating content\n isError = beforeSwapDetails.isError; // allow updating error\n ignoreTitle = beforeSwapDetails.ignoreTitle; // allow updating ignoring title\n\n responseInfo.target = target; // Make updated target available to response events\n responseInfo.failed = isError; // Make failed property available to response events\n responseInfo.successful = !isError; // Make successful property available to response events\n\n if (beforeSwapDetails.shouldSwap) {\n if (xhr.status === 286) {\n cancelPolling(elt);\n }\n\n withExtensions(elt, function (extension) {\n serverResponse = extension.transformResponse(serverResponse, xhr, elt);\n });\n\n // Save current page if there will be a history update\n if (historyUpdate.type) {\n saveCurrentPageToHistory();\n }\n\n var swapOverride = etc.swapOverride;\n if (hasHeader(xhr,/HX-Reswap:/i)) {\n swapOverride = xhr.getResponseHeader(\"HX-Reswap\");\n }\n var swapSpec = getSwapSpecification(elt, swapOverride);\n\n if (swapSpec.hasOwnProperty('ignoreTitle')) {\n ignoreTitle = swapSpec.ignoreTitle;\n }\n\n target.classList.add(htmx.config.swappingClass);\n\n // optional transition API promise callbacks\n var settleResolve = null;\n var settleReject = null;\n\n var doSwap = function () {\n try {\n var activeElt = document.activeElement;\n var selectionInfo = {};\n try {\n selectionInfo = {\n elt: activeElt,\n // @ts-ignore\n start: activeElt ? activeElt.selectionStart : null,\n // @ts-ignore\n end: activeElt ? activeElt.selectionEnd : null\n };\n } catch (e) {\n // safari issue - see https://github.com/microsoft/playwright/issues/5894\n }\n\n var selectOverride;\n if (select) {\n selectOverride = select;\n }\n\n if (hasHeader(xhr, /HX-Reselect:/i)) {\n selectOverride = xhr.getResponseHeader(\"HX-Reselect\");\n }\n\n // if we need to save history, do so, before swapping so that relative resources have the correct base URL\n if (historyUpdate.type) {\n triggerEvent(getDocument().body, 'htmx:beforeHistoryUpdate', mergeObjects({ history: historyUpdate }, responseInfo));\n if (historyUpdate.type === \"push\") {\n pushUrlIntoHistory(historyUpdate.path);\n triggerEvent(getDocument().body, 'htmx:pushedIntoHistory', {path: historyUpdate.path});\n } else {\n replaceUrlInHistory(historyUpdate.path);\n triggerEvent(getDocument().body, 'htmx:replacedInHistory', {path: historyUpdate.path});\n }\n }\n\n var settleInfo = makeSettleInfo(target);\n selectAndSwap(swapSpec.swapStyle, target, elt, serverResponse, settleInfo, selectOverride);\n\n if (selectionInfo.elt &&\n !bodyContains(selectionInfo.elt) &&\n getRawAttribute(selectionInfo.elt, \"id\")) {\n var newActiveElt = document.getElementById(getRawAttribute(selectionInfo.elt, \"id\"));\n var focusOptions = { preventScroll: swapSpec.focusScroll !== undefined ? !swapSpec.focusScroll : !htmx.config.defaultFocusScroll };\n if (newActiveElt) {\n // @ts-ignore\n if (selectionInfo.start && newActiveElt.setSelectionRange) {\n // @ts-ignore\n try {\n newActiveElt.setSelectionRange(selectionInfo.start, selectionInfo.end);\n } catch (e) {\n // the setSelectionRange method is present on fields that don't support it, so just let this fail\n }\n }\n newActiveElt.focus(focusOptions);\n }\n }\n\n target.classList.remove(htmx.config.swappingClass);\n forEach(settleInfo.elts, function (elt) {\n if (elt.classList) {\n elt.classList.add(htmx.config.settlingClass);\n }\n triggerEvent(elt, 'htmx:afterSwap', responseInfo);\n });\n\n if (hasHeader(xhr, /HX-Trigger-After-Swap:/i)) {\n var finalElt = elt;\n if (!bodyContains(elt)) {\n finalElt = getDocument().body;\n }\n handleTrigger(xhr, \"HX-Trigger-After-Swap\", finalElt);\n }\n\n var doSettle = function () {\n forEach(settleInfo.tasks, function (task) {\n task.call();\n });\n forEach(settleInfo.elts, function (elt) {\n if (elt.classList) {\n elt.classList.remove(htmx.config.settlingClass);\n }\n triggerEvent(elt, 'htmx:afterSettle', responseInfo);\n });\n\n if (responseInfo.pathInfo.anchor) {\n var anchorTarget = getDocument().getElementById(responseInfo.pathInfo.anchor);\n if(anchorTarget) {\n anchorTarget.scrollIntoView({block:'start', behavior: \"auto\"});\n }\n }\n\n if(settleInfo.title && !ignoreTitle) {\n var titleElt = find(\"title\");\n if(titleElt) {\n titleElt.innerHTML = settleInfo.title;\n } else {\n window.document.title = settleInfo.title;\n }\n }\n\n updateScrollState(settleInfo.elts, swapSpec);\n\n if (hasHeader(xhr, /HX-Trigger-After-Settle:/i)) {\n var finalElt = elt;\n if (!bodyContains(elt)) {\n finalElt = getDocument().body;\n }\n handleTrigger(xhr, \"HX-Trigger-After-Settle\", finalElt);\n }\n maybeCall(settleResolve);\n }\n\n if (swapSpec.settleDelay > 0) {\n setTimeout(doSettle, swapSpec.settleDelay)\n } else {\n doSettle();\n }\n } catch (e) {\n triggerErrorEvent(elt, 'htmx:swapError', responseInfo);\n maybeCall(settleReject);\n throw e;\n }\n };\n\n var shouldTransition = htmx.config.globalViewTransitions\n if(swapSpec.hasOwnProperty('transition')){\n shouldTransition = swapSpec.transition;\n }\n\n if(shouldTransition &&\n triggerEvent(elt, 'htmx:beforeTransition', responseInfo) &&\n typeof Promise !== \"undefined\" && document.startViewTransition){\n var settlePromise = new Promise(function (_resolve, _reject) {\n settleResolve = _resolve;\n settleReject = _reject;\n });\n // wrap the original doSwap() in a call to startViewTransition()\n var innerDoSwap = doSwap;\n doSwap = function() {\n document.startViewTransition(function () {\n innerDoSwap();\n return settlePromise;\n });\n }\n }\n\n\n if (swapSpec.swapDelay > 0) {\n setTimeout(doSwap, swapSpec.swapDelay)\n } else {\n doSwap();\n }\n }\n if (isError) {\n triggerErrorEvent(elt, 'htmx:responseError', mergeObjects({error: \"Response Status Error Code \" + xhr.status + \" from \" + responseInfo.pathInfo.requestPath}, responseInfo));\n }\n }\n\n //====================================================================\n // Extensions API\n //====================================================================\n\n /** @type {Object} */\n var extensions = {};\n\n /**\n * extensionBase defines the default functions for all extensions.\n * @returns {import(\"./htmx\").HtmxExtension}\n */\n function extensionBase() {\n return {\n init: function(api) {return null;},\n onEvent : function(name, evt) {return true;},\n transformResponse : function(text, xhr, elt) {return text;},\n isInlineSwap : function(swapStyle) {return false;},\n handleSwap : function(swapStyle, target, fragment, settleInfo) {return false;},\n encodeParameters : function(xhr, parameters, elt) {return null;}\n }\n }\n\n /**\n * defineExtension initializes the extension and adds it to the htmx registry\n *\n * @param {string} name\n * @param {import(\"./htmx\").HtmxExtension} extension\n */\n function defineExtension(name, extension) {\n if(extension.init) {\n extension.init(internalAPI)\n }\n extensions[name] = mergeObjects(extensionBase(), extension);\n }\n\n /**\n * removeExtension removes an extension from the htmx registry\n *\n * @param {string} name\n */\n function removeExtension(name) {\n delete extensions[name];\n }\n\n /**\n * getExtensions searches up the DOM tree to return all extensions that can be applied to a given element\n *\n * @param {HTMLElement} elt\n * @param {import(\"./htmx\").HtmxExtension[]=} extensionsToReturn\n * @param {import(\"./htmx\").HtmxExtension[]=} extensionsToIgnore\n */\n function getExtensions(elt, extensionsToReturn, extensionsToIgnore) {\n\n if (elt == undefined) {\n return extensionsToReturn;\n }\n if (extensionsToReturn == undefined) {\n extensionsToReturn = [];\n }\n if (extensionsToIgnore == undefined) {\n extensionsToIgnore = [];\n }\n var extensionsForElement = getAttributeValue(elt, \"hx-ext\");\n if (extensionsForElement) {\n forEach(extensionsForElement.split(\",\"), function(extensionName){\n extensionName = extensionName.replace(/ /g, '');\n if (extensionName.slice(0, 7) == \"ignore:\") {\n extensionsToIgnore.push(extensionName.slice(7));\n return;\n }\n if (extensionsToIgnore.indexOf(extensionName) < 0) {\n var extension = extensions[extensionName];\n if (extension && extensionsToReturn.indexOf(extension) < 0) {\n extensionsToReturn.push(extension);\n }\n }\n });\n }\n return getExtensions(parentElt(elt), extensionsToReturn, extensionsToIgnore);\n }\n\n //====================================================================\n // Initialization\n //====================================================================\n var isReady = false\n getDocument().addEventListener('DOMContentLoaded', function() {\n isReady = true\n })\n\n /**\n * Execute a function now if DOMContentLoaded has fired, otherwise listen for it.\n *\n * This function uses isReady because there is no realiable way to ask the browswer whether\n * the DOMContentLoaded event has already been fired; there's a gap between DOMContentLoaded\n * firing and readystate=complete.\n */\n function ready(fn) {\n // Checking readyState here is a failsafe in case the htmx script tag entered the DOM by\n // some means other than the initial page load.\n if (isReady || getDocument().readyState === 'complete') {\n fn();\n } else {\n getDocument().addEventListener('DOMContentLoaded', fn);\n }\n }\n\n function insertIndicatorStyles() {\n if (htmx.config.includeIndicatorStyles !== false) {\n getDocument().head.insertAdjacentHTML(\"beforeend\",\n \"\");\n }\n }\n\n function getMetaConfig() {\n var element = getDocument().querySelector('meta[name=\"htmx-config\"]');\n if (element) {\n // @ts-ignore\n return parseJSON(element.content);\n } else {\n return null;\n }\n }\n\n function mergeMetaConfig() {\n var metaConfig = getMetaConfig();\n if (metaConfig) {\n htmx.config = mergeObjects(htmx.config , metaConfig)\n }\n }\n\n // initialize the document\n ready(function () {\n mergeMetaConfig();\n insertIndicatorStyles();\n var body = getDocument().body;\n processNode(body);\n var restoredElts = getDocument().querySelectorAll(\n \"[hx-trigger='restored'],[data-hx-trigger='restored']\"\n );\n body.addEventListener(\"htmx:abort\", function (evt) {\n var target = evt.target;\n var internalData = getInternalData(target);\n if (internalData && internalData.xhr) {\n internalData.xhr.abort();\n }\n });\n /** @type {(ev: PopStateEvent) => any} */\n const originalPopstate = window.onpopstate ? window.onpopstate.bind(window) : null;\n /** @type {(ev: PopStateEvent) => any} */\n window.onpopstate = function (event) {\n if (event.state && event.state.htmx) {\n restoreHistory();\n forEach(restoredElts, function(elt){\n triggerEvent(elt, 'htmx:restored', {\n 'document': getDocument(),\n 'triggerEvent': triggerEvent\n });\n });\n } else {\n if (originalPopstate) {\n originalPopstate(event);\n }\n }\n };\n setTimeout(function () {\n triggerEvent(body, 'htmx:load', {}); // give ready handlers a chance to load up before firing this event\n body = null; // kill reference for gc\n }, 0);\n })\n\n return htmx;\n }\n)()\n}));\n", "(function () {\n\n function splitOnWhitespace(trigger) {\n return trigger.split(/\\s+/);\n }\n\n function parseClassOperation(trimmedValue) {\n var split = splitOnWhitespace(trimmedValue);\n if (split.length > 1) {\n var operation = split[0];\n var classDef = split[1].trim();\n var cssClass;\n var delay;\n if (classDef.indexOf(\":\") > 0) {\n var splitCssClass = classDef.split(':');\n cssClass = splitCssClass[0];\n delay = htmx.parseInterval(splitCssClass[1]);\n } else {\n cssClass = classDef;\n delay = 100;\n }\n return {\n operation: operation,\n cssClass: cssClass,\n delay: delay\n }\n } else {\n return null;\n }\n }\n\n function performOperation(elt, classOperation, classList, currentRunTime) {\n setTimeout(function () {\n elt.classList[classOperation.operation].call(elt.classList, classOperation.cssClass);\n }, currentRunTime)\n }\n\n function toggleOperation(elt, classOperation, classList, currentRunTime) {\n setTimeout(function () {\n setInterval(function () {\n elt.classList[classOperation.operation].call(elt.classList, classOperation.cssClass);\n }, classOperation.delay);\n }, currentRunTime)\n }\n\n function processClassList(elt, classList) {\n var runs = classList.split(\"&\");\n for (var i = 0; i < runs.length; i++) {\n var run = runs[i];\n var currentRunTime = 0;\n var classOperations = run.split(\",\");\n for (var j = 0; j < classOperations.length; j++) {\n var value = classOperations[j];\n var trimmedValue = value.trim();\n var classOperation = parseClassOperation(trimmedValue);\n if (classOperation) {\n if (classOperation.operation === \"toggle\") {\n toggleOperation(elt, classOperation, classList, currentRunTime);\n currentRunTime = currentRunTime + classOperation.delay;\n } else {\n currentRunTime = currentRunTime + classOperation.delay;\n performOperation(elt, classOperation, classList, currentRunTime);\n }\n }\n }\n }\n }\n\n function maybeProcessClasses(elt) {\n if (elt.getAttribute) {\n var classList = elt.getAttribute(\"classes\") || elt.getAttribute(\"data-classes\");\n if (classList) {\n processClassList(elt, classList);\n }\n }\n }\n\n htmx.defineExtension('class-tools', {\n onEvent: function (name, evt) {\n if (name === \"htmx:afterProcessNode\") {\n var elt = evt.detail.elt;\n maybeProcessClasses(elt);\n if (elt.querySelectorAll) {\n var children = elt.querySelectorAll(\"[classes], [data-classes]\");\n for (var i = 0; i < children.length; i++) {\n maybeProcessClasses(children[i]);\n }\n }\n }\n }\n });\n})();", "import * as htmx from \"htmx.org/dist/htmx.js\"\n\n// @ts-ignore\nwindow.htmx = htmx\n\n// import \"htmx.org/dist/ext/remove-me.js\"\nimport(\"htmx.org/dist/ext/class-tools.js\").catch(console.error)\n\n// We want the page to be refreshed when the user comes back to it after a long time.\n// This is to make sure that if they come back the day after they won, they see the\n// new challenge right away without having to interact with the game first.\n\nconst DOCUMENT_WAS_INVISIBLE_TRIGGERS_PAGE_REFRESH_THRESHOLD = 60 * 60 * 1_000 // 1 hour\n\nlet lastTimeDocumentWasVisible = Date.now()\n\ndocument.addEventListener(\"visibilitychange\", onDocumentVisibilityChange)\n\nfunction onDocumentVisibilityChange() {\n if (document.hidden) {\n // We're only interested in the \"visible\" state here\n return\n }\n\n const now = Date.now()\n const timeSinceLastVisibility = now - lastTimeDocumentWasVisible\n if (timeSinceLastVisibility > DOCUMENT_WAS_INVISIBLE_TRIGGERS_PAGE_REFRESH_THRESHOLD) {\n // Let's refresh the page to make sure the user sees the new challenge!\n // (even though we're not sure if there's a new challenge yet - that could be\n // achieved by sending that data as a HTML attribute in the response of the server,\n // but we haven't implemented such a thing yet)\n console.info(\"Reloading the page to make sure the user sees the new challenge, if there's one\")\n location.reload()\n } else {\n // Right, let's just reset the last time the document was visible\n lastTimeDocumentWasVisible = Date.now()\n }\n}\n"], "mappings": "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", "names": ["require_htmx", "__commonJSMin", "root", "factory", "elt", "type", "inputValues", "url", "sock", "verb", "tag", "global", "str", "interval", "name", "qualifiedName", "condition", "initialElement", "ancestor", "attributeName", "attributeValue", "disinherit", "closestAttr", "e", "selector", "matchesFunction", "tagMatcher", "match", "resp", "depth", "parser", "responseDoc", "responseNode", "response", "partialResponse", "startTag", "content", "fragment", "fragmentContent", "script", "func", "o", "dataProp", "data", "arr", "returnArr", "i", "el", "rect", "elemTop", "elemBottom", "trigger", "obj1", "obj2", "key", "jString", "error", "test", "path", "callback", "value", "evt", "event", "eltOrSelector", "delay", "clazz", "child", "prefix", "suffix", "trimmedSelector", "start", "results", "arg2", "arg1", "arg3", "eventArgs", "b", "attrName", "attrTarget", "result", "attribute", "targetStr", "attributesToSettle", "mergeTo", "mergeFrom", "attr", "swapStyle", "target", "extensions", "extension", "oobValue", "oobElement", "settleInfo", "targets", "oobElementClone", "beforeSwapDetails", "oobSelects", "oobSelectValues", "oobSelectValue", "id", "preservedElt", "oldElt", "parentNode", "newNode", "normalizedId", "normalizedTag", "oldNode", "newAttributes", "autofocus", "autoFocusedElt", "insertBefore", "string", "hash", "char", "internalData", "handlerInfo", "element", "info", "newElt", "eltBeforeNewContent", "firstChild", "selectOverride", "newFragment", "node", "ext", "newElements", "j", "contentWithSvgsRemoved", "responseText", "xhr", "header", "triggerBody", "triggers", "eventName", "detail", "eventNames", "tokens", "position", "startPosition", "startChar", "symbol", "token", "last", "paramName", "bracketCount", "conditionalSource", "conditionFunction", "explicitTrigger", "cache", "triggerSpecs", "initialLength", "every", "eventFilter", "triggerSpec", "from_arg", "handler", "spec", "nodeData", "rawAttribute", "explicitCancel", "elementData", "eltsToListenOn", "eltToListenOn", "eltToListenOnData", "eventListener", "eventData", "values", "wssSource", "retryCount", "base_part", "socket", "children", "webSocketSourceElt", "parent", "webSocket", "headers", "errors", "rawParameters", "expressionVars", "allParameters", "filteredParameters", "exp", "maxDelay", "sseSrc", "source", "sseEventName", "sseSourceElt", "sseEventSource", "sseListener", "swapSpec", "load", "explicitAction", "observerOptions", "observer", "entries", "entry", "newScript", "attributes", "elements", "iter", "allElements", "boostedSelector", "form", "line", "netCurlies", "code", "listener", "hxOnValue", "handlers", "lines", "currentEvent", "curlyCount", "afterOnPosition", "nextChar", "hasExplicitHttpAction", "sseInfo", "wsInfo", "toDo", "msg", "eventResult", "kebabName", "kebabedEvent", "historyElt", "title", "scroll", "historyCache", "newHistoryItem", "className", "clone", "disableHistoryCache", "tasks", "task", "request", "details", "historyElement", "titleElt", "cached", "indicators", "ic", "disabledElts", "disabledElement", "disabled", "processed", "current", "validate", "inputs", "input", "formValues", "button", "includes", "descendant", "returnStr", "realValue", "s", "v", "formData", "prompt", "paramsValue", "newValues", "swapInfoOverride", "swapInfo", "split", "scrollSpec", "splitSpec", "scrollVal", "selectorVal", "showSpec", "showVal", "focusScrollVal", "encodedParameters", "first", "evalAsDefault", "evaluateValue", "varsValues", "toEval", "defaultVal", "headerValue", "regexp", "context", "requestConfig", "sameHost", "origin", "etc", "confirmed", "resolve", "reject", "promise", "_resolve", "_reject", "responseHandler", "select", "eltData", "submitter", "buttonPath", "buttonVerb", "confirmQuestion", "issueRequest", "skipConfirmation", "confirmDetails", "syncElt", "syncStrategy", "queueStrategy", "abortable", "syncStrings", "queueStrArray", "endRequestLock", "queuedRequest", "promptQuestion", "promptResponse", "requestAttrValues", "eltIsBoosted", "useUrlParams", "splitPath", "pathNoAnchor", "anchor", "finalPath", "responseInfo", "hierarchy", "disableElts", "secondaryTriggerElt", "parentEltInHierarchy", "params", "pathFromHeaders", "typeFromHeaders", "requestPath", "responsePath", "pushUrl", "replaceUrl", "elementIsBoosted", "saveType", "redirectPath", "shouldRefresh", "historyUpdate", "shouldSwap", "serverResponse", "isError", "ignoreTitle", "swapOverride", "settleResolve", "settleReject", "doSwap", "activeElt", "selectionInfo", "newActiveElt", "focusOptions", "finalElt", "doSettle", "anchorTarget", "shouldTransition", "settlePromise", "innerDoSwap", "api", "text", "parameters", "extensionsToReturn", "extensionsToIgnore", "extensionsForElement", "extensionName", "fn", "metaConfig", "body", "restoredElts", "originalPopstate", "require_class_tools", "__commonJSMin", "splitOnWhitespace", "trigger", "parseClassOperation", "trimmedValue", "split", "operation", "classDef", "cssClass", "delay", "splitCssClass", "performOperation", "elt", "classOperation", "classList", "currentRunTime", "toggleOperation", "processClassList", "runs", "i", "run", "classOperations", "j", "value", "maybeProcessClasses", "name", "evt", "children", "htmx", "DOCUMENT_WAS_INVISIBLE_TRIGGERS_PAGE_REFRESH_THRESHOLD", "lastTimeDocumentWasVisible", "onDocumentVisibilityChange"] }