|
15 | 15 | } |
16 | 16 | mq.addEventListener('change', mqChangeListener); |
17 | 17 | if (themeToggleButton) { |
18 | | - themeToggleButton.addEventListener('click', function() { |
19 | | - mq.removeEventListener('change', mqChangeListener); |
20 | | - }, { once: true }); |
| 18 | + themeToggleButton.addEventListener( |
| 19 | + 'click', |
| 20 | + function() { |
| 21 | + mq.removeEventListener('change', mqChangeListener); |
| 22 | + }, |
| 23 | + { once: true } |
| 24 | + ); |
21 | 25 | } |
22 | 26 | } |
23 | 27 |
|
|
60 | 64 | for (const picker of pickers) { |
61 | 65 | const parentNode = picker.parentNode; |
62 | 66 |
|
63 | | - picker.addEventListener('click', (e) => { |
| 67 | + picker.addEventListener('click', function(e) { |
64 | 68 | e.preventDefault(); |
65 | 69 |
|
66 | 70 | /* |
|
76 | 80 | to close pickers if needed. |
77 | 81 | */ |
78 | 82 |
|
79 | | - requestAnimationFrame(() => { |
| 83 | + requestAnimationFrame(function() { |
80 | 84 | parentNode.classList.add('expanded'); |
81 | 85 | window.addEventListener('click', closeAllPickers); |
82 | 86 | window.addEventListener('keydown', onKeyDown); |
|
90 | 94 | let ignoreNextIntersection = false; |
91 | 95 |
|
92 | 96 | new IntersectionObserver( |
93 | | - ([e]) => { |
| 97 | + function(e) { |
94 | 98 | const currentStatus = header.classList.contains('is-pinned'); |
95 | | - const newStatus = e.intersectionRatio < 1; |
| 99 | + const newStatus = e[0].intersectionRatio < 1; |
96 | 100 |
|
97 | 101 | // Same status, do nothing |
98 | 102 | if (currentStatus === newStatus) { |
|
109 | 113 | The timer is reset anyway after few milliseconds. |
110 | 114 | */ |
111 | 115 | ignoreNextIntersection = true; |
112 | | - setTimeout(() => { |
| 116 | + setTimeout(function() { |
113 | 117 | ignoreNextIntersection = false; |
114 | 118 | }, 50); |
115 | 119 |
|
|
119 | 123 | ).observe(header); |
120 | 124 | } |
121 | 125 |
|
| 126 | + function setupAltDocsLink() { |
| 127 | + const linkWrapper = document.getElementById('alt-docs'); |
| 128 | + |
| 129 | + function updateHashes() { |
| 130 | + for (const link of linkWrapper.querySelectorAll('a')) { |
| 131 | + link.hash = location.hash; |
| 132 | + } |
| 133 | + } |
| 134 | + |
| 135 | + addEventListener('hashchange', updateHashes); |
| 136 | + updateHashes(); |
| 137 | + } |
| 138 | + |
122 | 139 | function bootstrap() { |
123 | | - // Check if we have JavaScript support |
| 140 | + // Check if we have JavaScript support. |
124 | 141 | document.documentElement.classList.add('has-js'); |
125 | 142 |
|
126 | | - // Restore user mode preferences |
| 143 | + // Restore user mode preferences. |
127 | 144 | setupTheme(); |
128 | 145 |
|
129 | | - // Handle pickers with click/taps rather than hovers |
| 146 | + // Handle pickers with click/taps rather than hovers. |
130 | 147 | setupPickers(); |
131 | 148 |
|
132 | | - // Track when the header is in sticky position |
| 149 | + // Track when the header is in sticky position. |
133 | 150 | setupStickyHeaders(); |
| 151 | + |
| 152 | + // Make link to other versions of the doc open to the same hash target (if it exists). |
| 153 | + setupAltDocsLink(); |
134 | 154 | } |
135 | 155 |
|
136 | 156 | if (document.readyState === 'loading') { |
|
0 commit comments