summaryrefslogtreecommitdiff
path: root/sysret.org/themes/tabi-lean/static/js/footnoteBacklinks.js
blob: 8c20098525f0320e981474807b4265bde66c29a8 (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
// Assign unique IDs to the footnote references based on their hashes.
function assignReferenceIds() {
    const references = document.querySelectorAll('.footnote-reference');
    for (const ref of references) {
        ref.id = `ref:${ref.children[0].hash.substring(1)}`;
    }
}

// Create backlinks for each footnote definition if a corresponding reference exists.
function createFootnoteBacklinks() {
    const footnotes = document.querySelectorAll('.footnote-definition');
    for (const footnote of footnotes) {
        const backlinkId = `ref:${footnote.id}`;

        // Skip if there's no corresponding reference in the text (i.e. the footnote doesn't reference anything).
        if (!document.getElementById(backlinkId)) continue;

        const backlink = document.createElement('a');
        backlink.href = `#${backlinkId}`;
        backlink.className = 'footnote-backlink';
        backlink.textContent = '↩';
        footnote.lastElementChild.appendChild(backlink);
    }
}

// Initialise the handlers for the footnote references and definitions.
function initFootnotes() {
    assignReferenceIds();
    createFootnoteBacklinks();
}

// Wait for the window to load, then execute the main function.
window.addEventListener('load', initFootnotes);