38 lines
1.8 KiB
JavaScript
38 lines
1.8 KiB
JavaScript
(function () {
|
|
var buttons = Array.prototype.slice.call(document.querySelectorAll("[data-set-lang]"));
|
|
var navLinks = Array.prototype.slice.call(document.querySelectorAll(".report-nav a"));
|
|
var sections = navLinks
|
|
.map(function (link) { return document.querySelector(link.getAttribute("href")); })
|
|
.filter(Boolean);
|
|
var progressBar = document.querySelector(".progress-bar");
|
|
function setLanguage(lang) {
|
|
document.body.setAttribute("data-report-lang", lang);
|
|
document.documentElement.setAttribute("lang", lang);
|
|
buttons.forEach(function (button) {
|
|
button.setAttribute("aria-pressed", button.getAttribute("data-set-lang") === lang ? "true" : "false");
|
|
});
|
|
}
|
|
function updateProgress() {
|
|
var scrollTop = window.scrollY || document.documentElement.scrollTop;
|
|
var height = Math.max(1, document.documentElement.scrollHeight - window.innerHeight);
|
|
var pct = Math.min(100, Math.max(0, (scrollTop / height) * 100));
|
|
if (progressBar) progressBar.style.transform = "scaleX(" + pct / 100 + ")";
|
|
var active = sections[0];
|
|
sections.forEach(function (section) {
|
|
if (section.getBoundingClientRect().top <= 110) active = section;
|
|
});
|
|
navLinks.forEach(function (link) {
|
|
link.setAttribute("aria-current", link.getAttribute("href") === "#" + active.id ? "true" : "false");
|
|
});
|
|
}
|
|
buttons.forEach(function (button) {
|
|
button.addEventListener("click", function () {
|
|
setLanguage(button.getAttribute("data-set-lang"));
|
|
});
|
|
});
|
|
window.addEventListener("scroll", updateProgress, { passive: true });
|
|
window.addEventListener("resize", updateProgress);
|
|
setLanguage("zh-CN");
|
|
updateProgress();
|
|
})();
|