File: freetype2.js

package info (click to toggle)
freetype 2.13.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 25,384 kB
  • sloc: ansic: 153,848; cpp: 13,981; python: 5,909; sh: 4,486; xml: 1,439; makefile: 676; perl: 340; awk: 142; javascript: 82
file content (76 lines) | stat: -rw-r--r-- 2,434 bytes parent folder | download | duplicates (2)
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 */