123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- const togglerId = 'js-sidebar-toggle'
- const textbookId = 'js-textbook'
- const togglerActiveClass = 'is-active'
- const textbookActiveClass = 'js-show-sidebar'
- const mathRenderedClass = 'js-mathjax-rendered'
- const icon_path = document.location.origin + `${site_basename}assets`;
- const getToggler = () => document.getElementById(togglerId)
- const getTextbook = () => document.getElementById(textbookId)
- document.addEventListener('turbolinks:load', () => {
- const textbook = getTextbook()
- if (window.MathJax && !textbook.classList.contains(mathRenderedClass)) {
- MathJax.Hub.Queue(['Typeset', MathJax.Hub])
- textbook.classList.add(mathRenderedClass)
- }
- })
- const toggleSidebar = () => {
- const toggler = getToggler()
- const textbook = getTextbook()
- if (textbook.classList.contains(textbookActiveClass)) {
- textbook.classList.remove(textbookActiveClass)
- toggler.classList.remove(togglerActiveClass)
- } else {
- textbook.classList.add(textbookActiveClass)
- toggler.classList.add(togglerActiveClass)
- }
- }
- const autoCloseSidebarBreakpoint = 769
- const sidebarButtonHandler = () => {
- getToggler().addEventListener('click', toggleSidebar)
-
- if (window.innerWidth < autoCloseSidebarBreakpoint) toggleSidebar()
- }
- initFunction(sidebarButtonHandler);
- let sidebarScrollTop = 0
- const getSidebar = () => document.getElementById('js-sidebar')
- document.addEventListener('turbolinks:before-visit', () => {
- sidebarScrollTop = getSidebar().scrollTop
- })
- document.addEventListener('turbolinks:load', () => {
- getSidebar().scrollTop = sidebarScrollTop
- })
- const focusPage = () => {
- document.querySelector('.c-textbook__page').focus()
- }
- initFunction(focusPage);
- const LEFT_ARROW_KEYCODE = 37
- const RIGHT_ARROW_KEYCODE = 39
- const getPrevUrl = () => document.getElementById('js-page__nav__prev').href
- const getNextUrl = () => document.getElementById('js-page__nav__next').href
- const initPageNav = (event) => {
- const keycode = event.which
- if (keycode === LEFT_ARROW_KEYCODE) {
- Turbolinks.visit(getPrevUrl())
- } else if (keycode === RIGHT_ARROW_KEYCODE) {
- Turbolinks.visit(getNextUrl())
- }
- };
- var keyboardListener = false;
- const initListener = () => {
- if (keyboardListener === false) {
- document.addEventListener('keydown', initPageNav)
- keyboardListener = true;
- }
- }
- initFunction(initListener);
- var didScroll;
- initScrollFunc = function() {
- var content = document.querySelector('.c-textbook__page');
- var topbar = document.getElementById("top-navbar");
- var prevScrollpos = content.scrollTop;
- scrollFunc = function() {
-
- var position = content.scrollTop;
-
- var currentScrollPos = content.scrollTop;
- var delta = 10;
- var scrollDiff = prevScrollpos - currentScrollPos;
- if (scrollDiff >= delta) {
-
- topbar.classList.remove("hidetop")
- } else if (Math.abs(scrollDiff) >= delta) {
-
- topbar.classList.add("hidetop")
- } else {
-
- }
- prevScrollpos = currentScrollPos;
-
- position = position + (window.innerHeight / 4);
- content.querySelectorAll('h2, h3').forEach((header, index) => {
-
- var target = header.getBoundingClientRect().top
- var pixelOffset = 300;
- var id = header.id;
- if (target < pixelOffset) {
- var query = 'ul.toc__menu a[href="#' + id + '"]';
- document.querySelectorAll('ul.toc__menu li').forEach((item) => {item.classList.remove('active')});
- document.querySelectorAll(query).forEach((item) => {item.parentElement.classList.add('active')});
- }
- });
- }
-
-
- content.addEventListener('scroll', () => {didScroll = true;});
- scrollWait = 250;
- setInterval(() => {
- if (didScroll) {
- scrollFunc();
- didScroll = false;
- }
- }, scrollWait)
- }
- initFunction(initScrollFunc);
|