You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.2 KiB
JavaScript
34 lines
1.2 KiB
JavaScript
// 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);
|