1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
/*!
* freetype2.js
*
* auxiliary JavaScript functions for freetype.org
*
* written 2012 by Werner Lemberg, updated 2021 by Anurag Thakur
*/
// Add a bottom bar if the document length exceeds the window height.
// Additionally ensure that the TOC background reaches the bottom of the
// window.
function addBottomBar() {
const columnHeight = document.querySelector(".colright").clientHeight;
const topBarHeight = document.querySelector("#top").clientHeight;
const winHeight = window.innerHeight;
if (columnHeight + topBarHeight > winHeight) {
document.getElementById("TOC-bottom").style.height = columnHeight + "px";
/* add bottom bar if it doesn't exist already */
if (!document.querySelector("#bottom")) {
document.body.insertAdjacentHTML(
"beforeend",
'<div class="bar" id="bottom"></div>'
);
}
} else {
let tocBHeight = winHeight - topBarHeight;
document.getElementById("TOC-bottom").style.height = tocBHeight + "px";
document.getElementById("bottom").remove();
}
}
// `Slightly' scroll the TOC so that its top moves up to the top of the
// screen if we scroll down. The function also assures that the bottom of
// the TOC doesn't cover the bottom bar (e.g., if the window height is very
// small).
function adjustTOCPosition() {
const docHeight = document.body.scrollHeight;
const TOCHeight = document.querySelector("#TOC").clientHeight;
const bottomBarHeight = document.querySelector("#bottom").clientHeight;
const topBarHeight = document.querySelector("#top").clientHeight;
const scrollTopPos = window.scrollY;
const topBarBottomPos = 0 + topBarHeight;
const bottomBarTopPos = docHeight - bottomBarHeight;
if (scrollTopPos >= topBarBottomPos) {
document.getElementById("TOC").style.top = "0px";
}
if (scrollTopPos < topBarBottomPos) {
let topPos = topBarBottomPos - scrollTopPos;
document.getElementById("TOC").style.top = topPos + "px";
}
if (bottomBarTopPos - scrollTopPos < TOCHeight) {
let topPos = bottomBarTopPos - scrollTopPos - TOCHeight;
document.getElementById("TOC").style.top = topPos + "px";
}
}
// Hook functions into loading, resizing, and scrolling events.
window.onload = function () {
addBottomBar();
adjustTOCPosition();
window.onscroll = function () {
adjustTOCPosition();
};
window.onresize = function () {
addBottomBar();
};
};
/* end of freetype2.js */
|