{"mappings":"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","sources":["node_modules/htmx.org/dist/htmx.js"],"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 },\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.5\"\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 //====================================================================\n // Utilities\n //====================================================================\n\n function parseInterval(str) {\n if (str == undefined) {\n return undefined\n }\n if (str.slice(-2) == \"ms\") {\n return parseFloat(str.slice(0,-2)) || undefined\n }\n if (str.slice(-1) == \"s\") {\n return (parseFloat(str.slice(0,-1)) * 1000) || undefined\n }\n if (str.slice(-1) == \"m\") {\n return (parseFloat(str.slice(0,-1)) * 1000 * 60) || undefined\n }\n return parseFloat(str) || undefined\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 resp.match(/\", 0);\n // @ts-ignore type mismatch between DocumentFragment and Element.\n // TODO: Are these close enough for htmx to use interchangeably?\n return documentFragment.querySelector('template').content;\n } else {\n var startTag = getStartTag(resp);\n switch (startTag) {\n case \"thead\":\n case \"tbody\":\n case \"tfoot\":\n case \"colgroup\":\n case \"caption\":\n return parseHTML(\"\" + resp + \"
\", 1);\n case \"col\":\n return parseHTML(\"\" + resp + \"
\", 2);\n case \"tr\":\n return parseHTML(\"\" + resp + \"
\", 2);\n case \"td\":\n case \"th\":\n return parseHTML(\"\" + resp + \"
\", 3);\n case \"script\":\n return parseHTML(\"
\" + resp + \"
\", 1);\n default:\n return parseHTML(resp, 0);\n }\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 (!path.match('^/$')) {\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 normalizeSelector(selector) {\n var trimmedSelector = selector.trim();\n if (trimmedSelector.startsWith(\"<\") && trimmedSelector.endsWith(\"/>\")) {\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.indexOf(\"next \") === 0) {\n return [scanForwardQuery(elt, normalizeSelector(selector.substr(5)))];\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 (let 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 (let 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 if (internalData.initHash) {\n internalData.initHash = null\n }\n deInitOnHandlers(element);\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 getInternalData(target).replacedWith = newElt; // tuck away so we can fire events on it later\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(/]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n var result = contentWithSvgsRemoved.match(/]*>|>)([\\s\\S]*?)<\\/title>/im);\n\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 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 && !tokens[0].match(match)) {\n result += tokens.shift();\n }\n return result;\n }\n\n var INPUT_SELECTOR = 'input, textarea, select';\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 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 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 from_arg +=\n \" \" +\n consumeUntil(\n tokens,\n WHITESPACE_OR_COMMA\n );\n }\n triggerSpec.from = from_arg;\n } else if (token === \"target\" && tokens[0] === \":\") {\n tokens.shift();\n triggerSpec.target = consumeUntil(tokens, WHITESPACE_OR_COMMA);\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\" || 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 }\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 = elt.href; // DOM property gives the fully resolved href of a relative link\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) {\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) {\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) {\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) {\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 (htmx.config.allowScriptTags && (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 hasChanceOfBeingBoosted() {\n return document.querySelector(\"[hx-boost], [data-hx-boost]\");\n }\n\n function findHxOnWildcardElements(elt) {\n if (!document.evaluate) return []\n\n let node = null\n const elements = []\n const iter = document.evaluate('//*[@*[ starts-with(name(), \"hx-on:\") or starts-with(name(), \"data-hx-on:\") ]]', elt)\n while (node = iter.iterateNext()) elements.push(node)\n return elements\n }\n\n function findElementsToProcess(elt) {\n if (elt.querySelectorAll) {\n var boostedElts = hasChanceOfBeingBoosted() ? \", a\" : \"\";\n var results = elt.querySelectorAll(VERB_SELECTOR + boostedElts + \", 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 function initButtonTracking(elt) {\n // Handle submit buttons/inputs that have the form attribute set\n // see https://developer.mozilla.org/docs/Web/HTML/Element/button\n var form = resolveTarget(\"#\" + getRawAttribute(elt, \"form\")) || closest(elt, \"form\")\n if (!form) {\n return\n }\n\n var maybeSetLastButtonClicked = function (evt) {\n var elt = closest(evt.target, \"button, input[type='submit']\");\n if (elt !== null) {\n var internalData = getInternalData(form);\n internalData.lastButtonClicked = elt;\n }\n };\n\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\n elt.addEventListener('click', maybeSetLastButtonClicked)\n elt.addEventListener('focusin', maybeSetLastButtonClicked)\n elt.addEventListener('focusout', function(evt){\n var internalData = getInternalData(form);\n internalData.lastButtonClicked = null;\n })\n }\n\n function countCurlies(line) {\n var tokens = tokenizeString(line);\n var netCurlies = 0;\n for (let 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 nodeData.onHandlers = [];\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 (name.startsWith(\"hx-on:\") || name.startsWith(\"data-hx-on:\")) {\n let eventName = name.slice(name.indexOf(\":\") + 1)\n // if the eventName starts with a colon, prepend \"htmx\" for shorthand support\n if (eventName.startsWith(\":\")) eventName = \"htmx\" + eventName\n\n addHxOnEventHandler(elt, eventName, value)\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)\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 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 = getDocument().querySelector('[hx-history=\"false\" i],[data-hx-history=\"false\" i]');\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 (path.endsWith('&') || path.endsWith(\"?\")) {\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-History-Restore-Request\", \"true\");\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 removeRequestIndicatorClasses(indicators) {\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 }\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) {\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) {\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\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 (getInternalData(elt).boosted && !isAnchorLink(elt)) {\n swapSpec[\"show\"] = \"top\"\n }\n if (swapInfo) {\n var split = splitOnWhitespace(swapInfo);\n if (split.length > 0) {\n swapSpec[\"swapStyle\"] = split[0];\n for (var i = 1; i < split.length; i++) {\n var modifier = split[i];\n if (modifier.indexOf(\"swap:\") === 0) {\n swapSpec[\"swapDelay\"] = parseInterval(modifier.substr(5));\n }\n if (modifier.indexOf(\"settle:\") === 0) {\n swapSpec[\"settleDelay\"] = parseInterval(modifier.substr(7));\n }\n if (modifier.indexOf(\"transition:\") === 0) {\n swapSpec[\"transition\"] = modifier.substr(11) === \"true\";\n }\n if (modifier.indexOf(\"scroll:\") === 0) {\n var scrollSpec = modifier.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 }\n if (modifier.indexOf(\"show:\") === 0) {\n var showSpec = modifier.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 }\n if (modifier.indexOf(\"focus-scroll:\") === 0) {\n var focusScrollVal = modifier.substr(\"focus-scroll:\".length);\n swapSpec[\"focusScroll\"] = focusScrollVal == \"true\";\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 xhr.getAllResponseHeaders().match(regexp);\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 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 url = new URL(path, document.location.href);\n var origin = document.location.origin;\n var sameHost = origin === url.origin;\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\n if (!bodyContains(elt)) {\n return; // do not issue requests for elements removed from the DOM\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 return;\n }\n\n // allow event-based confirmation w/ a callback\n if (!confirmed) {\n var issueRequest = function() {\n return issueAjaxRequest(verb, path, elt, event, etc, true);\n }\n var confirmDetails = {target: target, elt: elt, path: path, verb: verb, triggeringEvent: event, etc: etc, issueRequest: issueRequest};\n if (triggerEvent(elt, 'htmx:confirm', confirmDetails) === false) {\n return;\n }\n }\n\n var syncElt = elt;\n var eltData = getInternalData(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 return;\n } else if (syncStrategy === \"abort\") {\n if (eltData.xhr) {\n return;\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 return;\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 var confirmQuestion = getClosestAttributeValue(elt, \"hx-confirm\");\n if (confirmQuestion) {\n if(!confirm(confirmQuestion)) {\n maybeCall(resolve);\n endRequestLock()\n return promise;\n }\n }\n\n\n var headers = getHeaders(elt, target, promptResponse);\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 (verb !== 'get' && !usesFormData(elt)) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n }\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 return;\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,\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 removeRequestIndicatorClasses(indicators);\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 removeRequestIndicatorClasses(indicators);\n triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo);\n triggerErrorEvent(elt, 'htmx:sendError', responseInfo);\n maybeCall(reject);\n endRequestLock();\n }\n xhr.onabort = function() {\n removeRequestIndicatorClasses(indicators);\n triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo);\n triggerErrorEvent(elt, 'htmx:sendAbort', responseInfo);\n maybeCall(reject);\n endRequestLock();\n }\n xhr.ontimeout = function() {\n removeRequestIndicatorClasses(indicators);\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\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\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 if (hasHeader(xhr, /HX-Redirect:/i)) {\n location.href = xhr.getResponseHeader(\"HX-Redirect\");\n return;\n }\n\n if (hasHeader(xhr,/HX-Refresh:/i)) {\n if (\"true\" === xhr.getResponseHeader(\"HX-Refresh\")) {\n location.reload();\n return;\n }\n }\n\n if (hasHeader(xhr,/HX-Retarget:/i)) {\n responseInfo.target = getDocument().querySelector(xhr.getResponseHeader(\"HX-Retarget\"));\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 beforeSwapDetails = mergeObjects({shouldSwap: shouldSwap, serverResponse:serverResponse, isError:isError}, 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\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 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 (hasHeader(xhr, /HX-Reselect:/i)) {\n selectOverride = xhr.getResponseHeader(\"HX-Reselect\");\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 we need to save history, do so\n if (historyUpdate.type) {\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 if (responseInfo.pathInfo.anchor) {\n var anchorTarget = find(\"#\" + responseInfo.pathInfo.anchor);\n if(anchorTarget) {\n anchorTarget.scrollIntoView({block:'start', behavior: \"auto\"});\n }\n }\n\n if(settleInfo.title) {\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 var originalPopstate = window.onpopstate;\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"],"names":["root","factory","define","amd","module","exports","htmx","self","this","onLoad","onLoadHelper","process","processNode","on","addEventListenerImpl","off","removeEventListenerImpl","trigger","triggerEvent","ajax","ajaxHelper","find","findAll","closest","values","elt","type","getInputValues","remove","removeElement","addClass","addClassToElement","removeClass","removeClassFromElement","toggleClass","toggleClassOnElement","takeClass","takeClassForElement","defineExtension","removeExtension","logAll","logNone","logger","config","historyEnabled","historyCacheSize","refreshOnHistoryMiss","defaultSwapStyle","defaultSwapDelay","defaultSettleDelay","includeIndicatorStyles","indicatorClass","requestClass","addedClass","settlingClass","swappingClass","allowEval","allowScriptTags","inlineScriptNonce","attributesToSettle","withCredentials","timeout","wsReconnectDelay","wsBinaryType","disableSelector","useTemplateFragments","scrollBehavior","defaultFocusScroll","getCacheBusterParam","globalViewTransitions","methodsThatUseUrlParams","selfRequestsOnly","parseInterval","_","internalEval","createEventSource","url","EventSource","createWebSocket","sock","WebSocket","binaryType","version","internalAPI","addTriggerHandler","bodyContains","canAccessLocalStorage","findThisElement","filterValues","hasAttribute","getAttributeValue","getClosestAttributeValue","getClosestMatch","getExpressionVars","getHeaders","getInternalData","getSwapSpecification","getTriggerSpecs","getTarget","makeFragment","mergeObjects","makeSettleInfo","oobSwap","querySelectorExt","selectAndSwap","settleImmediately","shouldCancel","triggerErrorEvent","withExtensions","VERBS","VERB_SELECTOR","map","verb","join","str","undefined","slice","parseFloat","getRawAttribute","name","getAttribute","qualifiedName","parentElt","parentElement","getDocument","document","condition","getAttributeValueWithDisinheritance","initialElement","ancestor","attributeName","attributeValue","disinherit","split","indexOf","closestAttr","e","matches","selector","matchesFunction","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","call","getStartTag","match","exec","toLowerCase","parseHTML","resp","depth","responseNode","DOMParser","parseFromString","body","firstChild","createDocumentFragment","aFullPageResponse","partialResponse","querySelector","content","maybeCall","func","isType","o","Object","prototype","toString","isFunction","isRawObject","dataProp","data","toArray","arr","returnArr","i","length","push","forEach","isScrolledIntoView","el","rect","getBoundingClientRect","elemTop","top","elemBottom","bottom","window","innerHeight","getRootNode","ShadowRoot","contains","host","splitOnWhitespace","trim","obj1","obj2","key","hasOwnProperty","parseJSON","jString","JSON","parse","error","logError","test","localStorage","setItem","removeItem","normalizePath","path","URL","pathname","search","replace","maybeEval","eval","callback","evt","detail","event","console","log","eltOrSelector","querySelectorAll","delay","resolveTarget","setTimeout","removeChild","clazz","classList","add","removeAttribute","toggle","children","child","normalizeSelector","trimmedSelector","startsWith","endsWith","substring","querySelectorAllExt","substr","scanForwardQuery","scanBackwardsQuery","start","results","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_FOLLOWING","arg2","processEventArgs","arg1","arg3","target","listener","ready","eventArgs","addEventListener","removeEventListener","DUMMY_ELT","createElement","findAttributeTargets","attrName","attrTarget","result","attribute","targetStr","boosted","shouldSettleAttribute","cloneAttributes","mergeTo","mergeFrom","attributes","attr","setAttribute","value","isInlineSwap","swapStyle","extensions","getExtensions","extension","oobValue","oobElement","settleInfo","targets","fragment","oobElementClone","cloneNode","appendChild","beforeSwapDetails","shouldSwap","swap","elts","parentNode","handleOutOfBandSwaps","oobSelects","oobSelectValues","oobSelectValue","id","handlePreservedElements","preservedElt","oldElt","getElementById","replaceChild","handleAttributes","newNode","normalizedId","normalizedTag","tagName","oldNode","newAttributes","tasks","makeAjaxLoadTask","processScripts","processFocus","autofocus","autoFocusedElt","focus","insertNodesBefore","insertBefore","childNodes","nodeType","TEXT_NODE","COMMENT_NODE","stringHash","string","hash","char","charCodeAt","attributeHash","deInitOnHandlers","internalData","onHandlers","handlerInfo","deInitNode","element","clearTimeout","webSocket","close","sseEventSource","listenerInfos","info","initHash","cleanUpElement","swapOuterHTML","swapInnerHTML","newElt","eltBeforeNewContent","previousSibling","nextSibling","replacedWith","filter","ELEMENT_NODE","nextElementSibling","swapAfterBegin","swapBeforeBegin","swapBeforeEnd","swapAfterEnd","swapDelete","maybeSelectFromResponse","selectOverride","newFragment","node","ext","newElements","handleSwap","j","findTitle","responseText","title","handleTrigger","xhr","header","triggerBody","getResponseHeader","triggers","eventName","eventNames","WHITESPACE","WHITESPACE_OR_COMMA","SYMBOL_START","SYMBOL_CONT","STRINGISH_START","NOT_WHITESPACE","tokenizeString","tokens","position","charAt","startPosition","startChar","symbol","isPossibleRelativeReference","token","last","paramName","maybeGenerateConditional","shift","bracketCount","conditionalSource","conditionFunction","Function","source","consumeUntil","INPUT_SELECTOR","explicitTrigger","triggerSpecs","initialLength","every","pollInterval","eventFilter","sseEvent","triggerSpec","changed","once","consume","from_arg","from","throttle","queue","cancelPolling","cancelled","processPolling","handler","spec","nodeData","maybeFilterEvent","makeEvent","isLocalLink","location","hostname","boostElement","href","rawAttribute","issueAjaxRequest","ignoreBoostedAnchorCtrlClick","ctrlKey","metaKey","explicitCancel","eltsToListenOn","elementData","eltToListenOn","lastValue","eventListener","preventDefault","eventData","handledFor","stopPropagation","triggeredOnce","eltToListenOnData","delayed","windowIsScrolling","scrollHandler","initScrollHandler","setInterval","maybeReveal","processWebSocketInfo","ensureWebSocket","processWebSocketSend","wssSource","retryCount","base_part","port","protocol","socket","onerror","maybeCloseWebSocketSource","onclose","code","getWebSocketReconnectDelay","onopen","response","transformResponse","webSocketSourceElt","parent","headers","errors","filteredParameters","send","stringify","exp","Math","min","pow","random","processSSEInfo","processSSESource","processSSESwap","sseSrc","maybeCloseSSESource","sseEventName","sseSourceElt","hasEventSource","sseListener","swapSpec","processSSETrigger","loadImmediately","load","loaded","processVerbs","explicitAction","observerOptions","threshold","IntersectionObserver","entries","isIntersecting","observe","polling","evalScript","script","newScript","textContent","async","nonce","hasChanceOfBeingBoosted","findHxOnWildcardElements","evaluate","elements","iter","iterateNext","findElementsToProcess","boostedElts","initButtonTracking","form","maybeSetLastButtonClicked","lastButtonClicked","countCurlies","line","netCurlies","addHxOnEventHandler","processHxOn","hxOnValue","handlers","lines","currentEvent","curlyCount","processHxOnWildcard","initNode","sseInfo","wsInfo","kebabEventName","CustomEvent","bubbles","cancelable","createEvent","initCustomEvent","ignoreEventForLogging","toDo","msg","errorInfo","eventResult","dispatchEvent","kebabName","kebabedEvent","onEvent","currentPathForHistory","getHistoryElement","saveToHistoryCache","scroll","historyCache","getItem","splice","newHistoryItem","item","cache","cause","getCachedHistory","cleanInnerHtmlForHistory","className","clone","innerHTML","saveCurrentPageToHistory","historyElt","scrollY","history","replaceState","pushUrlIntoHistory","pushState","replaceUrlInHistory","task","loadHistoryFromServer","request","XMLHttpRequest","details","open","setRequestHeader","onload","status","historyElement","titleElt","cacheMiss","serverResponse","restoreHistory","cached","scrollTo","reload","addRequestIndicatorClasses","indicators","ic","requestCount","removeRequestIndicatorClasses","haveSeenNode","processed","isSameNode","shouldInclude","disabled","checked","addValueToValues","current","Array","isArray","concat","processInputValue","validate","multiple","files","validateElement","input","willValidate","checkValidity","message","validationMessage","validity","formValues","noValidate","formNoValidate","button","descendant","appendParam","returnStr","realValue","String","s","encodeURIComponent","urlEncode","v","makeFormData","formData","FormData","append","prompt1","getValuesForElement","inputValues","paramsValue","newValues","isAnchorLink","swapInfoOverride","swapInfo","swapDelay","settleDelay","modifier","scrollVal","splitSpec","pop","selectorVal","showVal","focusScrollVal","usesFormData","encodeParamsForBody","encodedParameters","encodeParameters","updateScrollState","first","scrollTarget","scrollTop","scrollHeight","show","showTarget","scrollIntoView","block","behavior","evalAsDefault","varsValues","evaluateValue","toEval","defaultVal","getHXVarsForElement","expressionVars","getHXValsForElement","safelySetHeaderValue","headerValue","getPathFromResponse","responseURL","hasHeader","regexp","getAllResponseHeaders","context","Element","targetOverride","returnPromise","swapOverride","hierarchyForElt","verifyPath","requestConfig","sameHost","origin","etc","confirmed","resolve","reject","Promise","promise","_resolve","_reject","responseHandler","handleAjaxResponse","triggeringEvent","issueRequest","syncElt","eltData","syncStrategy","queueStrategy","abortable","syncStrings","queuedRequests","endRequestLock","queuedRequest","promptQuestion","promptResponse","prompt","confirmQuestion","confirm","rawParameters","allParameters","requestAttrValues","eltIsBoosted","useUrlParams","parameters","unfilteredParameters","credentials","splitPath","pathNoAnchor","anchor","finalPath","keys","toUpperCase","overrideMimeType","noHeaders","responseInfo","pathInfo","requestPath","finalRequestPath","hierarchy","responsePath","secondaryTriggerElt","parentEltInHierarchy","onabort","ontimeout","upload","lengthComputable","total","params","determineHistoryUpdates","pathFromHeaders","typeFromHeaders","pushUrl","replaceUrl","elementIsBoosted","saveType","redirectPath","then","historyUpdate","isError","failed","successful","settleResolve","settleReject","doSwap","activeElt","activeElement","selectionInfo","selectionStart","end","selectionEnd","newActiveElt","focusOptions","preventScroll","focusScroll","setSelectionRange","finalElt","doSettle","anchorTarget","shouldTransition","transition","startViewTransition","settlePromise","innerDoSwap","extensionBase","init","api","text","extensionsToReturn","extensionsToIgnore","extensionsForElement","extensionName","isReady","fn","readyState","insertIndicatorStyles","head","insertAdjacentHTML","getMetaConfig","mergeMetaConfig","metaConfig","restoredElts","abort","originalPopstate","onpopstate","state"],"version":3,"file":"index.a8a05f82.js.map"}