Files
klammertext/sks/document/js/next_last.js
Andy Kopra 2ba7ceee7a Initial commit: Klammertext source distribution
Curated source subset assembled by klammertext-dev's doc/make_dist.sh: the Klammermachine (mac), the Standard Klammer Set (sks), the commands (com), editor plugins and install guides (doc), a test subset (tst), and lib/bin placeholders. Builds with 'make -C com'.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-18 19:32:38 +02:00

106 lines
3.1 KiB
JavaScript

/*
Enable the "Next" and "Previous" buttons to move through the table of
contents, making entries visible if necessary.
*/
function first_highlighted_navlink() {
let highlighted_titles = [...K.getv(".section-title.highlight")];
if (highlighted_titles.length === 0) {
return null;
}
return highlighted_titles[0].parentNode;
}
function make_navlink_visible(navlink) {
const elts = [...K.getv(".navlink, .caret")];
let i;
for (i = elts.indexOf(navlink); i >= 0; i -= 1) {
let elt = elts[i];
if (K.has_class(elt, "caret")) {
if (!K.has_class(elt, "caret-down")) {
toggle_caret(elt);
}
if (K.attr(elt, "data-level") === "0") {
break;
}
}
}
}
function show_button_status(id, active_p) {
//const inactive_color = "rgb(60%,60%,60%)";
//const inactive_color = "rgb(20%,20%,20%)";
const inactive_color = "transparent";
//const text_color = "white";
const text_color = "black";
const node = K.get(id);
if (active_p) {
K.style(node, "color", text_color);
//K.style(node, "color", "white");
K.style(node, "text-decoration", "none");
//K.style(node, "font-style", "normal");
} else {
K.style(node, "color", inactive_color);
K.style(node, "text-decoration", "none");
//K.style(node, "font-style", "italic");
}
}
function set_next_last_button_status() {
const navlinks = [...K.getv(".navlink")];
const top = headers_in_text()[0][0];
let status;
if (!top) {
status = [true, false];
}
else if (top.id === K.attr(navlinks[0], "data-target")) {
status = [true, false];
} else if (top.id === K.attr(navlinks[navlinks.length-1], "data-target")) {
status = [false, true];
} else {
status = [true, true];
}
show_button_status("#next", status[0]);
show_button_status("#previous", status[1]);
}
function next_navlink() {
let navlinks = [...K.getv(".navlink")];
let index = navlinks.indexOf(first_highlighted_navlink());
if (index < navlinks.length - 1) {
let next = navlinks[index + 1];
next.children[0].children[0].click();
//make_navlink_visible(next);
}
return index + 1;
}
function previous_navlink() {
let navlinks = [...K.getv(".navlink")];
let index = navlinks.indexOf(first_highlighted_navlink());
if (index > 0) {
let previous = navlinks[index - 1];
previous.children[0].children[0].click();
//make_navlink_visible(previous);
}
return index - 1;
}
window.addEventListener("load", function (event) {
K.get("#next").addEventListener("click", function (event) {
// hide_help();
const index = next_navlink();
resize_toc();
});
K.get("#previous").addEventListener("click", function (event) {
// hide_help();
const index = previous_navlink();
resize_toc();
});
define_keypress("N", "#next");
define_keypress("P", "#previous");
set_next_last_button_status();
});