ts-learnings/theme/pagetoc.js
Unisko PENG, c8807b0b3c Updated.
2023-04-19 11:12:51 +08:00

68 lines
2.1 KiB
JavaScript

// Un-active everything when you click it
Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) {
el.addEventHandler("click", function() {
Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) {
el.classList.remove("active");
});
el.classList.add("active");
});
});
var updateFunction = function() {
var id;
var elements = document.getElementsByClassName("header");
Array.prototype.forEach.call(elements, function(el) {
if (window.pageYOffset >= el.offsetTop) {
id = el;
}
});
Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) {
el.classList.remove("active");
});
if (!id) return;
Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) {
if (id.href.localeCompare(el.href) == 0) {
el.classList.add("active");
}
});
};
// Populate sidebar on load
window.addEventListener('load', function() {
var pagetoc = document.getElementsByClassName("pagetoc")[0];
var elements = document.getElementsByClassName("header");
Array.prototype.forEach.call(elements, function (el) {
var link = document.createElement("a");
link.appendChild(document.createTextNode(el.text));
link.href = el.href;
link.classList.add("pagetoc-" + el.parentElement.tagName);
pagetoc.appendChild(link);
});
updateFunction.call();
});
// Handle active elements on scroll
window.addEventListener("scroll", updateFunction);
if(document.querySelector("#document-not-found404")) {
let timeLeft = 10;
var timerId = setInterval(() => {
if(timeLeft == -1) {
clearTimeout(timerId);
let siteRoot = window.location.origin;
window.location.replace(siteRoot);
} else {
let secCounts = document.querySelectorAll(".sec-count")
secCounts.forEach(count => {
count.innerHTML = timeLeft;
});
timeLeft--;
}
}, 1000);
}