|
1 | 1 | <!DOCTYPE HTML>
|
2 |
| -<html lang="{{ language }}" class="{{ default_theme }}" dir="{{ text_direction }}"> |
| 2 | +<html lang="{{ language }}" class="{{ default_theme }} sidebar-visible" dir="{{ text_direction }}"> |
3 | 3 | <head>
|
4 | 4 | <!-- Book generated using mdBook -->
|
5 | 5 | <meta charset="UTF-8">
|
|
52 | 52 | <!-- MathJax -->
|
53 | 53 | <script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
54 | 54 | {{/if}}
|
55 |
| - </head> |
56 |
| - <body class="sidebar-visible no-js"> |
57 |
| - <div id="body-container"> |
| 55 | + |
58 | 56 | <!-- Provide site root to javascript -->
|
59 | 57 | <script>
|
60 | 58 | var path_to_root = "{{ path_to_root }}";
|
61 | 59 | // This forces users into dark theme
|
62 | 60 | // var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
|
63 | 61 | var default_theme = "{{ default_theme }}";
|
64 | 62 | </script>
|
65 |
| - |
| 63 | + <!-- Start loading toc.js asap --> |
| 64 | + <script src="{{ path_to_root }}toc.js"></script> |
| 65 | + </head> |
| 66 | + <body> |
| 67 | + <div id="body-container"> |
66 | 68 | <!-- Work around some values being stored in localStorage wrapped in quotes -->
|
67 | 69 | <script>
|
68 | 70 | try {
|
|
84 | 86 | var theme;
|
85 | 87 | try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
|
86 | 88 | if (theme === null || theme === undefined) { theme = default_theme; }
|
87 |
| - var html = document.querySelector('html'); |
| 89 | + const html = document.documentElement; |
88 | 90 | html.classList.remove('{{ default_theme }}')
|
89 | 91 | html.classList.add(theme);
|
90 |
| - var body = document.querySelector('body'); |
91 |
| - body.classList.remove('no-js') |
92 |
| - body.classList.add('js'); |
| 92 | + html.classList.add("js"); |
93 | 93 | </script>
|
94 | 94 |
|
95 | 95 | <input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
|
96 | 96 |
|
97 | 97 | <!-- Hide / unhide sidebar before it is displayed -->
|
98 | 98 | <script>
|
99 |
| - var body = document.querySelector('body'); |
100 | 99 | var sidebar = null;
|
101 | 100 | var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
|
102 | 101 | if (document.body.clientWidth >= 1080) {
|
|
106 | 105 | sidebar = 'hidden';
|
107 | 106 | }
|
108 | 107 | sidebar_toggle.checked = sidebar === 'visible';
|
109 |
| - body.classList.remove('sidebar-visible'); |
110 |
| - body.classList.add("sidebar-" + sidebar); |
| 108 | + html.classList.remove('sidebar-visible'); |
| 109 | + html.classList.add("sidebar-" + sidebar); |
111 | 110 | </script>
|
112 | 111 |
|
113 | 112 | <nav id="sidebar" class="sidebar" aria-label="Table of contents">
|
114 |
| - <div class="sidebar-scrollbox"> |
115 |
| - {{#toc}}{{/toc}} |
116 |
| - </div> |
| 113 | + <!-- populated by js --> |
| 114 | + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> |
| 115 | + <noscript> |
| 116 | + <iframe class="sidebar-iframe-outer" src="{{ path_to_root }}toc.html"></iframe> |
| 117 | + </noscript> |
117 | 118 | <div id="sidebar-resize-handle" class="sidebar-resize-handle">
|
118 | 119 | <div class="sidebar-resize-indicator"></div>
|
119 | 120 | </div>
|
120 | 121 | </nav>
|
121 | 122 |
|
122 |
| - <!-- Track and set sidebar scroll position --> |
123 |
| - <script> |
124 |
| - var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox'); |
125 |
| - sidebarScrollbox.addEventListener('click', function(e) { |
126 |
| - if (e.target.tagName === 'A') { |
127 |
| - sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop); |
128 |
| - } |
129 |
| - }, { passive: true }); |
130 |
| - var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll'); |
131 |
| - sessionStorage.removeItem('sidebar-scroll'); |
132 |
| - if (sidebarScrollTop) { |
133 |
| - // preserve sidebar scroll position when navigating via links within sidebar |
134 |
| - sidebarScrollbox.scrollTop = sidebarScrollTop; |
135 |
| - } else { |
136 |
| - // scroll sidebar to current active section when navigating via "next/previous chapter" buttons |
137 |
| - var activeSection = document.querySelector('#sidebar .active'); |
138 |
| - if (activeSection) { |
139 |
| - activeSection.scrollIntoView({ block: 'center' }); |
140 |
| - } |
141 |
| - } |
142 |
| - </script> |
143 |
| - |
144 | 123 | <div id="page-wrapper" class="page-wrapper">
|
145 | 124 |
|
146 | 125 | <div class="page">
|
|
0 commit comments