aboutsummaryrefslogtreecommitdiff
path: root/frontend/index.ts
blob: 1d87f0a12830427278f6b2e668d2d9dc856281c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import htmx from "htmx.org";

htmx.config.historyRestoreAsHxRequest = false;

function setupAnchors() {
    document.querySelectorAll("a").forEach(e => {
        // stuff related to external links are already handled in the backend
        if (!e.href.startsWith(window.location.origin) && /https?:\/\//.test(e.href)) return;
        if (e.href == window.location.href) e.classList.add("target");
        else e.classList.remove("target");
        if (e.hasAttribute("hx-trigger")) return;
        e.setAttribute("hx-get", e.href)
        e.setAttribute("hx-trigger", "click")
        e.setAttribute("hx-target", "#content")
        e.setAttribute("hx-swap", "outerHTML show:body:top")
        htmx.process(e)
    });
}

// updating history and window title
document.addEventListener("htmx:afterSettle", e => {
    if (e.detail.xhr === undefined) return
    const title = e.detail.xhr.getResponseHeader("Updated-Title")
    if (title?.length !== 0) document.title = title
    const quote = e.detail.xhr.getResponseHeader("Updated-Quote")
    if (quote?.length !== 0)
        document.querySelector("#quote")!.innerHTML = "« " + quote + " »"
    setupAnchors()
})

document.body.addEventListener('htmx:beforeSwap', function(e) {
    if(e.detail.xhr.status !== 404) return
    e.detail.shouldSwap = true;
    e.detail.isError = false;
})

setupAnchors()