Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'book/theme/index.hbs')
| -rw-r--r-- | book/theme/index.hbs | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/book/theme/index.hbs b/book/theme/index.hbs index 0a46ac64..0a0bc550 100644 --- a/book/theme/index.hbs +++ b/book/theme/index.hbs @@ -1,5 +1,5 @@ <!DOCTYPE HTML> -<html lang="{{ language }}" class="{{ default_theme }} sidebar-visible" dir="{{ text_direction }}"> +<html lang="{{ language }}" class="{{ default_theme }}" dir="{{ text_direction }}"> <head> <!-- Book generated using mdBook --> <meta charset="UTF-8"> @@ -52,17 +52,15 @@ <!-- MathJax --> <script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> {{/if}} - + </head> + <body class="sidebar-visible no-js"> + <div id="body-container"> <!-- Provide site root to javascript --> <script> var path_to_root = "{{ path_to_root }}"; var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}"; </script> - <!-- Start loading toc.js asap --> - <script src="{{ path_to_root }}toc.js"></script> - </head> - <body> - <div id="body-container"> + <!-- Work around some values being stored in localStorage wrapped in quotes --> <script> try { @@ -84,16 +82,19 @@ var theme; try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } if (theme === null || theme === undefined) { theme = default_theme; } - const html = document.documentElement; + var html = document.querySelector('html'); html.classList.remove('{{ default_theme }}') html.classList.add(theme); - html.classList.add("js"); + var body = document.querySelector('body'); + body.classList.remove('no-js') + body.classList.add('js'); </script> <input type="checkbox" id="sidebar-toggle-anchor" class="hidden"> <!-- Hide / unhide sidebar before it is displayed --> <script> + var body = document.querySelector('body'); var sidebar = null; var sidebar_toggle = document.getElementById("sidebar-toggle-anchor"); if (document.body.clientWidth >= 1080) { @@ -103,21 +104,39 @@ sidebar = 'hidden'; } sidebar_toggle.checked = sidebar === 'visible'; - html.classList.remove('sidebar-visible'); - html.classList.add("sidebar-" + sidebar); + body.classList.remove('sidebar-visible'); + body.classList.add("sidebar-" + sidebar); </script> <nav id="sidebar" class="sidebar" aria-label="Table of contents"> - <!-- populated by js --> - <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> - <noscript> - <iframe class="sidebar-iframe-outer" src="{{ path_to_root }}toc.html"></iframe> - </noscript> - <div id="sidebar-resize-handle" class="sidebar-resize-handle"> - <div class="sidebar-resize-indicator"></div> + <div class="sidebar-scrollbox"> + {{#toc}}{{/toc}} </div> + <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div> </nav> + <!-- Track and set sidebar scroll position --> + <script> + var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox'); + sidebarScrollbox.addEventListener('click', function(e) { + if (e.target.tagName === 'A') { + sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop); + } + }, { passive: true }); + var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll'); + sessionStorage.removeItem('sidebar-scroll'); + if (sidebarScrollTop) { + // preserve sidebar scroll position when navigating via links within sidebar + sidebarScrollbox.scrollTop = sidebarScrollTop; + } else { + // scroll sidebar to current active section when navigating via "next/previous chapter" buttons + var activeSection = document.querySelector('#sidebar .active'); + if (activeSection) { + activeSection.scrollIntoView({ block: 'center' }); + } + } + </script> + <div id="page-wrapper" class="page-wrapper"> <div class="page"> |