|
218 | 218 | navTextEl.href = relativize(page.url, item.url)
|
219 | 219 | if (page.url === item.url) {
|
220 | 220 | navItemEl.classList.add('is-current-page')
|
221 |
| - navTextEl.classList.add('is-current-page') |
| 221 | + navTextEl.classList.add('is-current-page', 'is-initial-page') |
222 | 222 | }
|
223 | 223 | } else {
|
224 | 224 | navTextEl = createElement('span', 'menu_title menu_text')
|
|
247 | 247 | return parent.appendChild(navListEl)
|
248 | 248 | }
|
249 | 249 |
|
| 250 | + function onHashChange () { |
| 251 | + var navLink |
| 252 | + var hash = window.location.hash |
| 253 | + if (hash) { |
| 254 | + if (hash.indexOf('%')) hash = decodeURIComponent(hash) |
| 255 | + navLink = navContainer.querySelector('a.menu_link[href="' + hash + '"]') |
| 256 | + } |
| 257 | + if (!(navLink || (navLink = navContainer.querySelector('a.is-initial-page')))) return |
| 258 | + var currentPageLink = navContainer.querySelector('a.is-current-page') |
| 259 | + if (navLink === currentPageLink) return |
| 260 | + if (currentPageLink) toggleCurrentPath(navContainer, currentPageLink, 'clear') |
| 261 | + toggleCurrentPath(navContainer, navLink, 'activate') |
| 262 | + scrollItemToMidpoint(nav.querySelector('.components'), navLink) |
| 263 | + return true |
| 264 | + } |
| 265 | + |
| 266 | + function toggleCurrentPath (container, navLink, operation) { |
| 267 | + navLink.classList[operation === 'clear' ? 'remove' : 'add']('is-current-page') |
| 268 | + var navItem = navLink.parentNode.parentNode |
| 269 | + var ancestor = navLink.parentNode |
| 270 | + while (ancestor !== container) { |
| 271 | + if (ancestor.tagName === 'LI') { |
| 272 | + var ancestorClassList = ancestor.classList |
| 273 | + if (ancestor === navItem) { |
| 274 | + ancestorClassList[operation === 'clear' ? 'remove' : 'add']('is-current-page') |
| 275 | + } else if (ancestorClassList.contains('is-parent')) { |
| 276 | + ancestorClassList[operation === 'clear' ? 'add' : 'remove']('closed') |
| 277 | + } |
| 278 | + } |
| 279 | + ancestor = ancestor.parentNode |
| 280 | + } |
| 281 | + } |
| 282 | + |
250 | 283 | function relativize (from, to) {
|
251 | 284 | if (!(from && to.charAt() === '/')) { return to }
|
252 | 285 | var hash = ''
|
|
316 | 349 |
|
317 | 350 | var components = container.querySelector('.components')
|
318 | 351 |
|
319 |
| - scrollItemToMidpoint(components, container.querySelector('a.is-current-page')) |
| 352 | + let scrolled |
| 353 | + if (container.querySelector('a.menu_link[href^="#"]')) { |
| 354 | + window.location.hash && (scrolled = onHashChange()) |
| 355 | + window.addEventListener('hashchange', onHashChange) |
| 356 | + } |
| 357 | + scrolled || scrollItemToMidpoint(components, container.querySelector('a.is-current-page')) |
320 | 358 |
|
321 | 359 | if (!components.classList.contains('is-revealed')) {
|
322 | 360 | find('a.is-current-page', container).forEach(function (currentPage) {
|
|
0 commit comments