136 lines
3.7 KiB
JavaScript
136 lines
3.7 KiB
JavaScript
|
|
|
||
|
|
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);
|
||
|
|
}
|
||
|
|
}
|