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>
This commit is contained in:
105
sks/document/js/next_last.js
Normal file
105
sks/document/js/next_last.js
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
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();
|
||||
});
|
||||
Reference in New Issue
Block a user