Update source.org

This commit is contained in:
2025-11-20 16:32:06 +01:00
parent b0910578ce
commit cec99cbdac
70 changed files with 5295 additions and 3335 deletions

82
html/static/hide.js Normal file
View File

@@ -0,0 +1,82 @@
function isHideable(div_obj) {
// Ignore for TOC since it is handled differently
if (div_obj.id === "text-table-of-contents") return false;
if (div_obj.id === "table-of-contents") return false;
// No point in hiding top level
if (div_obj.classList.contains("outline-2")) return false;
if (div_obj.classList.contains("outline-text-2")) return false;
return true;
}
function orgjqHide(div_obj) {
if (!isHideable(div_obj)) return;
const parent = div_obj.parentElement;
parent.classList.remove("orgjq-expanded");
parent.classList.add("orgjq-contracted");
}
function orgjqShow(div_obj) {
const parent = div_obj.parentElement;
parent.classList.remove("orgjq-contracted");
parent.classList.add("orgjq-expanded");
}
function orgjqToggle(div_obj) {
const parent = div_obj.parentElement;
if (parent.classList.contains("orgjq-expanded")) {
orgjqHide(div_obj);
} else {
orgjqShow(div_obj);
}
}
function orgjqEnable() {
// Called once e.g. the first time the page is loaded
// handle the click event for each header
for (let i = 2; i <= 7; ++i) {
const headers = document.querySelectorAll(`h${i}`);
headers.forEach(header => {
header.style.cursor = "pointer";
header.addEventListener('click', function() {
// Get the first div sibling after the header
const parent = this.parentElement;
const divs = parent.querySelectorAll(':scope > div');
if (divs.length > 0) {
orgjqToggle(divs[0]);
}
});
});
}
// Mark everything as open...
for (let i = 2; i <= 7; ++i) {
const headers = document.querySelectorAll(`h${i}`);
headers.forEach(header => {
const parent = header.parentElement;
parent.classList.remove("orgjq-contracted");
parent.classList.add("orgjq-expanded");
});
}
// ... except TOC ...
const toc = document.querySelector("div#table-of-contents");
if (toc) {
toc.classList.remove("orgjq-expanded");
toc.classList.add("orgjq-contracted");
}
// ... and autocollapse.
const autocollapse = document.querySelectorAll(".autocollapse");
autocollapse.forEach(element => {
const grandparent = element.parentElement?.parentElement;
if (grandparent) {
orgjqHide(grandparent);
}
});
}
// Run when DOM is loaded
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', orgjqEnable);
} else {
orgjqEnable();
}