Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'book/theme/index.hbs')
-rw-r--r--book/theme/index.hbs55
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">