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>
202 lines
5.9 KiB
JavaScript
202 lines
5.9 KiB
JavaScript
|
|
[save_position, restore_position] = function () {
|
|
let basename = "";
|
|
let top_heading_id = "";
|
|
let y_offset = 0;
|
|
let toc_width = 0;
|
|
let save = function () {
|
|
console.log("\n");
|
|
console.log("save_position");
|
|
basename = window.location.toString().split("#")[1];
|
|
let top_heading = first_highlighted_navlink();
|
|
console.log("top heading:");
|
|
console.log(top_heading);
|
|
if (!top_heading) {
|
|
return;
|
|
}
|
|
top_heading_id = K.attr(top_heading, "data-target");
|
|
|
|
//y_offset = Math.round(K.top(top_heading) - K.top("#text"));
|
|
let textw = K.get("#text");
|
|
//y_offset = textw.scrollHeight -textw.scrollTop;
|
|
|
|
y_offset = K.get("#text").scrollTop;
|
|
console.log("y_offset: " + y_offset);
|
|
|
|
toc_width = K.width("#toc");
|
|
console.log("toc_width: " + toc_width);
|
|
console.log("save_position: " + basename + " " + top_heading_id + " " + y_offset);
|
|
}
|
|
let restore = function () {
|
|
let page = K.get("#pagecache #_page_" + basename);
|
|
K.get("#text").innerHTML = page.innerHTML;
|
|
resize_text_width(toc_width);
|
|
K.get("#text").scrollTo(0, y_offset);
|
|
}
|
|
return [save, restore];
|
|
}();
|
|
|
|
|
|
function page_cache_id(name) {
|
|
return "_page_" + name;
|
|
}
|
|
|
|
async function cache_pages() {
|
|
if (K.get("#pagecache").children.length === 0) {
|
|
K.style("#pagecache", "display", "none");
|
|
const pagecache = K.get("#pagecache");
|
|
let loads = [];
|
|
pages_basenames().forEach(function (p) {
|
|
let page = document.createElement("div");
|
|
loads.push(K.load(page, "pages/" + p + ".html"));
|
|
K.attr(page, "id", page_cache_id(p));
|
|
K.attr(page, "class", "content_page");
|
|
pagecache.append(page);
|
|
});
|
|
|
|
let help_page = document.createElement("div");
|
|
loads.push(K.load(help_page, "pages/help.html"));
|
|
K.attr(help_page, "id", "help_page");
|
|
pagecache.append(help_page);
|
|
|
|
let search_page = document.createElement("div");
|
|
K.attr(search_page, "id", "search_page");
|
|
pagecache.append(search_page);
|
|
|
|
await Promise.all(loads);
|
|
}
|
|
}
|
|
|
|
|
|
window.addEventListener("popstate", function (event) {
|
|
const parts = window.location.toString().split("#");
|
|
const basename = parts[1];
|
|
const target = parts[2];
|
|
if (basename && target) {
|
|
if (K.get("#help").textContent === "Back") {
|
|
if (!K.visible("#toc")) {
|
|
textshow();
|
|
}
|
|
modify_buttons_for_help("show");
|
|
frame_resize();
|
|
} else {
|
|
go_to_section(null, basename, target, true);
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
window.addEventListener("load", async function (event) {
|
|
let last_location = localStorage.getItem("klammertext_location");
|
|
let last_fit_check = localStorage.getItem("klammertext_fit");
|
|
let last_links_check = localStorage.getItem("klammertext_links");
|
|
|
|
await cache_pages();
|
|
|
|
K.getv("#toc .caret[data-level='0']").forEach(function (o) {
|
|
if (!K.has_class(o, "caret-down")) {
|
|
o.click();
|
|
}
|
|
});
|
|
|
|
// Set initial hash so the browser back button can return to the first page
|
|
if (!window.location.hash) {
|
|
let first = K.get(".navlink");
|
|
if (first) {
|
|
let basename = K.attr(first, "data-page");
|
|
let target = K.attr(first, "data-target");
|
|
history.replaceState(null, null, "#" + basename + "#" + target);
|
|
}
|
|
}
|
|
|
|
if (last_location) {
|
|
localStorage.setItem("klammertext_reload", "true");
|
|
let parts = last_location.split(":");
|
|
//console.log("\n");
|
|
//console.log("load parts:");
|
|
//console.log(parts);
|
|
go_to_section(null, parts[0], parts[1], true);
|
|
}
|
|
|
|
resize_toc(true);
|
|
|
|
// Restore fit and links states directly (not via .click()) to avoid
|
|
// desync with the browser's checkbox state restoration on refresh.
|
|
if (last_fit_check === "true") {
|
|
K.attr("#fit_check", "active", "true");
|
|
K.get("#fit_check").checked = true;
|
|
} else {
|
|
K.attr("#fit_check", "active", "false");
|
|
K.get("#fit_check").checked = false;
|
|
}
|
|
resize_toc();
|
|
|
|
if (last_links_check === "true") {
|
|
K.attr("#linkshow_check", "active", "true");
|
|
K.get("#linkshow_check").checked = true;
|
|
show_link_boxes(true);
|
|
} else {
|
|
K.attr("#linkshow_check", "active", "false");
|
|
K.get("#linkshow_check").checked = false;
|
|
}
|
|
|
|
/*
|
|
if (last_location) {
|
|
const parts = last_location.toString().split("#");
|
|
console.log("parts:");
|
|
console.log(parts);
|
|
//go_to_section(null, parts[1], parts[2]);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
let hash = "#" + basename;
|
|
if (target) {
|
|
hash += "#" + target;
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
|
|
//save_position();
|
|
/*
|
|
let last_location = localStorage.getItem("klammertext_location");
|
|
console.log("last_location from storage: " + last_location);
|
|
if (last_location && last_location != window.location.toString()) {
|
|
//history.replaceState(last_location.toString(), "");
|
|
const parts = last_location.toString().split("#");
|
|
const basename = parts[1];
|
|
const target = parts[2];
|
|
window.location.hash = "#" + basename + "#" + target;
|
|
console.log("last_location: " + basename + " " + target);
|
|
//go_to_section(null, basename, target);
|
|
|
|
let locator = "#toc .navlink[data-target='" + target + "'] .section-title-text";
|
|
console.log(locator);
|
|
let title = K.get(locator);
|
|
console.log("title");
|
|
console.log(title);
|
|
title.click();
|
|
}
|
|
*/
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
function get_position() {
|
|
const basename = window.location.toString().split("#")[1];
|
|
return [basename, K.get("#text").scrollTop];
|
|
}
|
|
|
|
function set_position(basename, y) {
|
|
K.get("#text").innerHTML = K.get("#_page_" + basename).innerHTML;
|
|
K.get("#text").scrollTo(0, y);
|
|
}
|
|
*/
|
|
|
|
|