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:
135
sks/document/js/load.js
Normal file
135
sks/document/js/load.js
Normal file
@@ -0,0 +1,135 @@
|
||||
|
||||
function first_basename() {
|
||||
let first = K.get(".navlink");
|
||||
return first ? K.attr(first, "data-page") : null;
|
||||
}
|
||||
|
||||
function scroll_to_target(target_name) {
|
||||
var text = K.get("#text");
|
||||
if (!text) return;
|
||||
var folder_top = text.getBoundingClientRect().top;
|
||||
var target = K.get(target_name);
|
||||
if (target) {
|
||||
var target_top = target.getBoundingClientRect().top;
|
||||
var scroll_position = text.scrollTop + target_top - folder_top;
|
||||
text.scrollTop = scroll_position;
|
||||
}
|
||||
highlight_visible_toc_sections();
|
||||
}
|
||||
|
||||
function modify_links() {
|
||||
var links = K.getv("#text a");
|
||||
links.forEach(function(link) {
|
||||
if (link.classList.contains("linkd") || link.querySelector("img")) {
|
||||
return;
|
||||
}
|
||||
var href = link.getAttribute("href");
|
||||
if (!href) return;
|
||||
if (href.indexOf("http://") != -1 ||
|
||||
href.indexOf("https://") != -1 ||
|
||||
href.indexOf(".pdf") != -1 ||
|
||||
href.indexOf("mailto:") != -1 ||
|
||||
href.indexOf("/") == 0 ||
|
||||
href.indexOf("#") != -1 ||
|
||||
href.indexOf("..") == 0) {
|
||||
return;
|
||||
}
|
||||
var parts = href.split('#');
|
||||
var len = parts[0].length;
|
||||
var page = parts[0].substring(0, len - 5);
|
||||
var target = "#" + parts[1];
|
||||
var span = document.createElement("span");
|
||||
span.className = "panelink";
|
||||
span.setAttribute("data-page", page);
|
||||
span.setAttribute("data-target", target);
|
||||
span.setAttribute("data-title", link.textContent);
|
||||
span.textContent = link.textContent;
|
||||
link.parentNode.replaceChild(span, link);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function show_text() {
|
||||
K.visible("#search_page", "hide");
|
||||
K.visible("#help_page", "hide");
|
||||
K.visible("#text", "show");
|
||||
K.style("#content", "background-color", "white");
|
||||
K.text("#help", "Help");
|
||||
highlight_visible_toc_sections();
|
||||
}
|
||||
|
||||
|
||||
function new_page_callback() {
|
||||
show_text();
|
||||
modify_links();
|
||||
resize();
|
||||
current_page_callback();
|
||||
}
|
||||
|
||||
var image_timer;
|
||||
var last_basename;
|
||||
|
||||
function current_page_callback() {
|
||||
if (target_name == "#") {
|
||||
return;
|
||||
}
|
||||
var selector = '.navlink[data-target="' + (target_name.split("#")[1] || "") + '"]';
|
||||
var navlink = K.get(selector);
|
||||
if (navlink) {
|
||||
update_page_title(navlink);
|
||||
}
|
||||
resize();
|
||||
scroll_to_target(target_name);
|
||||
}
|
||||
|
||||
|
||||
async function load_page_content(basename, new_page, callback) {
|
||||
if (true || basename != current_basename()) {
|
||||
var url = "pages/" + basename + ".html";
|
||||
await K.load("#text", url);
|
||||
callback();
|
||||
}
|
||||
else {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function load_page(basename, target, callback, push_state) {
|
||||
var init_complete = false;
|
||||
var push = typeof push_state !== "undefined";
|
||||
var state, state_target;
|
||||
|
||||
if (init_complete) {
|
||||
var parts = window.location.hash.toString().split("#");
|
||||
state = {"basename" : parts[1], "target" : "#" + parts[2]};
|
||||
state_target = "#" + basename + target;
|
||||
if (push) {
|
||||
history.pushState(state, "", state_target);
|
||||
} else {
|
||||
history.replaceState(state, "", state_target);
|
||||
}
|
||||
load_page_content(
|
||||
basename, true,
|
||||
function() {
|
||||
target_name = target;
|
||||
initialize = false;
|
||||
callback(); } );
|
||||
|
||||
} else {
|
||||
basename = first_basename();
|
||||
state = {"basename" : basename, "target" : "#"};
|
||||
state_target = "#" + basename + "#";
|
||||
|
||||
init_complete = true;
|
||||
|
||||
load_page_content(
|
||||
basename, true,
|
||||
function() {
|
||||
target_name = target;
|
||||
initialize = true;
|
||||
callback(); } );
|
||||
|
||||
history.replaceState(state, "", state_target);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user