{ "version": 3, "sources": ["heat_search_controller-4acbb17360b69845fee74315157805ed57c62bf4a722cb43ba5e02b45e7e4cdb.js"], "sourcesContent": ["import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"heat-search\"\nexport default class extends Controller {\n static targets = [\"input\", \"nav\"];\n\n keydown = event => {\n if (event.key == \"ArrowRight\") {\n let link = document.querySelector(\"div[rel=next]\");\n if (link) link.click();\n } else if (event.key == \"ArrowLeft\") {\n let link = document.querySelector(\"div[rel=prev]\");\n if (link) link.click();\n }\n };\n\n disconnect() {\n document.body.removeEventListener(\"keydown\", this.keydown);\n }\n\n connect() {\n document.body.addEventListener(\"keydown\", this.keydown);\n\n let input = this.inputTarget;\n\n this.page = 1;\n\n this.heats = [];\n let rows = null;\n for (let tr of this.element.querySelectorAll(\"tr\")) {\n if (tr.parentElement.nodeName == \"THEAD\") {\n rows = [];\n let head = tr.parentElement;\n let number = head.querySelector(\"span\").textContent;\n this.heats.push({ number, head, rows });\n } else {\n let text = tr.querySelector(\"td[data-index]\").textContent.toLowerCase();\n rows.push([text, tr]);\n }\n }\n\n this.search(input.value);\n this.seek();\n\n const observer = new MutationObserver(this.seek);\n const config = { attributes: true, childList: true, subtree: true };\n let currentHeat = document.getElementById(\"current-heat\");\n observer.observe(currentHeat.parentElement, config);\n\n input.addEventListener(\"input\", _event => {\n this.search(input.value);\n });\n\n this.element.querySelector(\"div[rel=prev\").addEventListener(\"click\", () => {\n if (this.page > 1) this.setPage(this.page - 1);\n });\n\n this.element.querySelector(\"div[rel=next\").addEventListener(\"click\", () => {\n if (this.page < this.totalPages) this.setPage(this.page + 1);\n });\n }\n\n setPage(page) {\n this.page = page;\n this.navigate();\n }\n\n seek = () => {\n let currentHeat = document.getElementById(\"current-heat\").textContent.trim();\n\n let heat = this.heats.find(heat => heat.number == currentHeat);\n\n if (heat && heat.show?.length == 0) {\n currentHeat = parseInt(currentHeat);\n heat = this.heats.find(heat => (\n parseInt(heat.number) > currentHeat && heat.show?.length\n ));\n }\n\n if (heat?.page && heat.page != this.page) this.setPage(heat.page);\n\n if (heat && heat.head.style.display != \"none\") {\n heat.head.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n };\n\n search = (value) => {\n value = value.toLowerCase();\n\n let counter = 0;\n let pages = 1;\n\n for (let heat of this.heats) {\n heat.show = [];\n\n for (let [text, tr] of heat.rows) {\n if (text.includes(value)) {\n heat.show.push(tr);\n }\n }\n\n if (counter + heat.show.length > 100) {\n pages++;\n counter = 0;\n }\n\n heat.page = pages;\n counter += heat.show.length;\n }\n\n if (this.page > pages) {\n this.page = pages;\n }\n\n this.totalPages = pages;\n this.navigate();\n };\n\n navigate() {\n let pages = this.totalPages;\n\n for (let { head, rows, show, page } of this.heats) {\n if (page != this.page) {\n show = [];\n }\n\n if (show.length > 0) {\n head.style.display = \"table-header-group\";\n } else {\n head.style.display = \"none\";\n }\n\n for (let [_text, tr] of rows) {\n if (show.includes(tr)) {\n tr.style.display = \"table-row\";\n } else {\n tr.style.display = \"none\";\n }\n }\n }\n\n let navTarget = this.navTarget;\n let prev = navTarget.firstElementChild;\n let next = navTarget.lastElementChild;\n for (let child of [...navTarget.children]) {\n if (child != prev && child != next) child.remove();\n }\n\n const addPage = (page) => {\n let div = document.createElement(\"div\");\n div.classList.add(\"border\", \"py-2\", \"px-2\");\n div.textContent = page;\n let li = document.createElement(\"li\");\n li.classList.add(\"mx-4\");\n if (page == this.page) {\n div.classList.add(\"bg-black\", \"text-orange-300\");\n } else if (typeof page == \"number\") {\n li.addEventListener(\"click\", () => { this.setPage(page); });\n }\n li.appendChild(div);\n navTarget.insertBefore(li, next);\n };\n\n if (this.page < 5) {\n if (pages < 7) {\n for (let page = 1; page <= pages; page++) addPage(page);\n } else {\n for (let page = 1; page <= 5; page++) addPage(page);\n addPage(\"...\");\n addPage(pages);\n }\n } else {\n addPage(1);\n addPage(\"...\");\n if (this.page + 3 >= pages) {\n for (let page = this.page - 1; page <= pages; page++) addPage(page);\n } else {\n addPage(this.page - 1);\n addPage(this.page);\n addPage(this.page + 1);\n addPage(\"...\");\n addPage(pages);\n }\n }\n }\n};\n"], "mappings": "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", "names": ["Controller", "heat_search_controller_4acbb17360b69845fee74315157805ed57c62bf4a722cb43ba5e02b45e7e4cdb_default", "__publicField", "event", "link", "currentHeat", "heat", "value", "counter", "pages", "text", "tr", "input", "rows", "head", "number", "observer", "config", "_event", "page", "show", "_text", "navTarget", "prev", "next", "child", "addPage", "div", "li"] }