Update source.org
This commit is contained in:
82
html/static/hide.js
Normal file
82
html/static/hide.js
Normal 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();
|
||||
}
|
||||
Reference in New Issue
Block a user