{ "version": 3, "sources": ["../app/Modals/ConfirmPlayerModal.tsx", "../app/Helpers/DomHelpers.ts", "../app/Modals/DeclarativeModals.ts", "../app/Services/Timestamps.ts", "../app/Search/QuickSearchBox.tsx", "../app/Search/QuickSearchResults.tsx", "../app/Header.tsx", "../app/Site.ts"], "sourcesContent": ["\uFEFFimport { useEffect, useState } from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { getAttribute, listenOn } from \"Helpers/DomHelpers\";\n\ninterface IConfirmPlayerModalState {\n\tshow: boolean;\n\ttarget: string;\n}\n\nfunction ConfirmPlayerModal() {\n\tconst [state, setState] = useState({ show: false, target: \"\" });\n\n\tfunction show(target: string) {\n\t\tsetState({ show: true, target });\n\t\tdocument.body.classList.add(\"modal-open\");\n\t}\n\n\tfunction hide() {\n\t\tsetState({ show: false, target: \"\" });\n\t\tdocument.body.classList.remove(\"modal-open\");\n\t}\n\n\tfunction cancel() {\n\t\thide();\n\t}\n\n\tfunction install() {\n\t\tlocation.href = \"/download/\";\n\t}\n\n\tfunction confirm() {\n\t\tlocalStorage.setItem(\"screamerInstalled\", \"1\");\n\t\tlocation.href = state.target;\n\t\thide();\n\t}\n\n\tuseEffect(() => {\n\t\tlistenOn(document, \"click\", \"[href^=screamer]\", (event, target) => {\n\t\t\tif (localStorage.getItem(\"screamerInstalled\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst href = getAttribute(target, \"href\");\n\t\t\tif (href != null) {\n\t\t\t\tshow(href);\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\t\t});\n\t}, []);\n\n\tconst visibility = {\n\t\tdisplay: state.show ? \"block\" : \"none\"\n\t};\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Confirm that Screamer Radio is installed

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Make sure Screamer Radio is installed or these player control links will not work.

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}\n\nconst div = document.createElement(\"div\");\ndocument.body.appendChild(div);\n\nconst root = createRoot(div);\n\nroot.render();\n", "\nfunction getMatchingElement(elements: Element[], target: Element | null): Element | null {\n\tif (target == null) {\n\t\treturn null;\n\t}\n\n\tif (elements.some(x => x === target)) {\n\t\treturn target;\n\t}\n\n\treturn getMatchingElement(elements, target.parentElement);\n}\n\nexport function listenOn(root: Document | Element, type: string, selector: string, callback: (event: Event, target: Element) => void) {\n\tif (typeof root.addEventListener === \"undefined\") {\n\t\treturn;\n\t}\n\n\troot.addEventListener(type, event => {\n\t\tconst target = getMatchingElement(Array.from(document.querySelectorAll(selector)), event.target as Element);\n\t\tif (target != null) {\n\t\t\tcallback(event, target);\n\t\t}\n\t});\n}\n\nexport function getAttribute(element: Element, name: string): string | null {\n\tconst attr = element.attributes.getNamedItem(name);\n\n\treturn attr != null ? attr.value : null;\n}\n", "import { getAttribute, listenOn } from \"Helpers/DomHelpers\";\n\nlet activeModals: HTMLElement[] = [];\n\nlistenOn(document, \"click\", \"a[data-toggle=modal]\", (event, target) => {\n\tconst href = getAttribute(target, \"href\");\n\tif (href == null) {\n\t\treturn;\n\t}\n\n\tconst targetId = href.replace(\"#\", \"\");\n\tconst modal = document.getElementById(targetId);\n\tif (modal != null) {\n\t\tmodal.style.display = \"block\";\n\t\tdocument.body.classList.add(\"modal-open\");\n\t\tactiveModals.push(modal);\n\t}\n\n\tevent.preventDefault();\n});\n\nlistenOn(document, \"click\", \".modal-backdrop\", event => {\n\tfor (const modal of activeModals) {\n\t\tmodal.style.display = \"none\";\n\t}\n\n\tactiveModals = [];\n\tdocument.body.classList.remove(\"modal-open\");\n\n\tevent.preventDefault();\n});\n", "import { friendlyDate } from \"Helpers/DateHelpers\";\n\nfunction updateTimeSpans() {\n\tconst spans = Array.from(document.querySelectorAll(\"span[data-timestamp]\"));\n\n\tfor (const span of spans) {\n\t\tconst timestamp = span.getAttribute(\"data-timestamp\");\n\t\tif (timestamp) {\n\t\t\tconst date = new Date(timestamp);\n\t\t\tspan.innerHTML = friendlyDate(date);\n\t\t}\n\t}\n}\n\nsetInterval(updateTimeSpans, 5 * 1000);\nupdateTimeSpans();\n", "import { useActions, useStateSelector } from \"../Store\";\n\nimport { search } from \"./SearchStore\";\n\nconst searchResultCount = 10;\n\nexport function QuickSearchBox() {\n\tconst [dispatch, actions] = useActions();\n\tconst query = useStateSelector(state => state.search.query);\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t void dispatch(search(actions, e.currentTarget.value, searchResultCount))}\n\t\t\t\t\tvalue={query}\n\t\t\t\t/>\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n}\n", "import { JSX } from \"react\";\nimport { shallowEqual } from \"react-redux\";\n\nimport { IStation } from \"Api/V1/Models\";\n\nimport { useStateSelector } from \"../Store\";\n\nfunction StationResult(props: { station: IStation }) {\n\treturn (\n\t\t
  • \n\t\t\t{props.station.title}\n\t\t
  • \n\t);\n}\n\nfunction TagResult(props: { tag: string }) {\n\treturn (\n\t\t
  • \n\t\t\t{props.tag}\n\t\t
  • \n\t);\n}\n\nexport function QuickSearchResults() {\n\tconst appState = useStateSelector(state => ({\n\t\tfailed: state.search.searchFailed,\n\t\tsearching: state.search.searching,\n\t\tstations: state.search.stations,\n\t\ttags: state.search.tags,\n\t\tvisible: state.search.searchCompleted || state.search.searchFailed\n\t}), shallowEqual);\n\n\tfunction renderCard(title: string, items: TItem[] | undefined, renderItem: (item: TItem) => JSX.Element) {\n\t\tif (items == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\tif (!appState.visible) {\n\t\treturn
    ;\n\t}\n\n\tif (appState.failed) {\n\t\treturn (\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    Sorry, search failed to complete :(
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t);\n\t}\n\n\treturn (\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{renderCard(\"Tags\", appState.tags, tag => )}\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{renderCard(\"Stations\", appState.stations, station => )}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t);\n}\n", "import { Provider } from \"react-redux\";\n\nimport { renderAll } from \"Helpers/ReactHelpers\";\nimport { QuickSearchBox } from \"Search/QuickSearchBox\";\nimport { QuickSearchResults } from \"Search/QuickSearchResults\";\n\nimport { buildStore } from \"./Store\";\n\nconst { ActionProvider, actions, store } = buildStore();\n\nrenderAll(document.querySelectorAll(\"div[data-react=QuickSearchBox]\"), () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n));\n\nrenderAll(document.querySelectorAll(\"div[data-react=QuickSearchResults]\"), () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n));\n", "\uFEFFimport \"Modals/ConfirmPlayerModal\";\nimport \"Modals/DeclarativeModals\";\nimport \"Services/Timestamps\";\n\nimport \"./Header\";\n\nif (document.querySelector(\".lightbox-gallery\")) {\n\tvoid import(\"./LightboxGallery\");\n}\n\nif (document.querySelector(\"div[data-react=StationList]\")) {\n\tvoid import(\"./StationsPage\");\n}\n\nif (document.querySelector(\"div[data-react=EditStation]\")) {\n\tvoid import(\"./EditStationPage\");\n}\n"], "mappings": "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", "names": ["import_react", "import_client", "getMatchingElement", "elements", "target", "x", "listenOn", "root", "type", "selector", "callback", "event", "getAttribute", "element", "name", "attr", "import_jsx_runtime", "ConfirmPlayerModal", "state", "setState", "show", "target", "hide", "cancel", "install", "confirm", "listenOn", "event", "href", "getAttribute", "visibility", "div", "root", "activeModals", "listenOn", "event", "target", "href", "getAttribute", "targetId", "modal", "updateTimeSpans", "spans", "span", "timestamp", "date", "friendlyDate", "import_jsx_runtime", "searchResultCount", "QuickSearchBox", "dispatch", "actions", "useActions", "query", "useStateSelector", "state", "e", "search", "import_jsx_runtime", "StationResult", "props", "_a", "TagResult", "QuickSearchResults", "appState", "useStateSelector", "state", "shallowEqual", "renderCard", "title", "items", "renderItem", "tag", "station", "import_jsx_runtime", "ActionProvider", "actions", "store", "buildStore", "renderAll", "Provider_default", "QuickSearchBox", "QuickSearchResults"] }