|
20 | 20 | return |
21 | 21 | } |
22 | 22 |
|
| 23 | + let expandHeaderLevels = 0 |
| 24 | + |
23 | 25 | // buildNav creates .components |
24 | 26 | // Presumably this routine may be called multiple times, so we check if the div already exists before calling it. |
25 | 27 | if (!navContainer.querySelector('.components')) { |
|
54 | 56 |
|
55 | 57 | var pageVersions = document.getElementById('page-versions') |
56 | 58 |
|
| 59 | + const group = JSON.parse(pageNavigationGroup.innerText) |
| 60 | + group.expandHeaderLevels = group.expandHeaderLevels || 0 |
| 61 | + expandHeaderLevels = group.expandHeaderLevels |
| 62 | + |
57 | 63 | buildNav( |
58 | | - navContainer, // container |
59 | | - getPage(), // page |
60 | | - pageVersions, // pageVersions |
61 | | - JSON.parse(pageNavigationGroup.innerText), //group |
62 | | - siteNavigationData // navData |
| 64 | + navContainer, |
| 65 | + getPage(), |
| 66 | + pageVersions, |
| 67 | + group, |
| 68 | + siteNavigationData |
63 | 69 | ) |
64 | 70 | } // else Presumably Components already/now exist |
65 | 71 |
|
66 | | - activateNav(navContainer, getPage()) |
| 72 | + activateNav(navContainer, getPage(), expandHeaderLevels) |
67 | 73 |
|
68 | 74 | /////// |
69 | 75 | // Helper functions |
|
76 | 82 | component: head.querySelector('meta[name="dcterms.subject"]').getAttribute('content'), |
77 | 83 | version: head.querySelector('meta[name="dcterms.identifier"]').getAttribute('content'), |
78 | 84 | url: head.querySelector('meta[name=page-url]').getAttribute('content'), |
79 | | - navHeaderLevels: parseInt(head.querySelector('meta[name="page-nav-header-levels"]')?.content) || 0, |
80 | 85 | } |
81 | 86 | } |
82 | 87 |
|
|
127 | 132 | <ul> childNavListEl (via recursive buildNavTree) |
128 | 133 | ..... |
129 | 134 | */ |
| 135 | + |
| 136 | + const expandHeaderLevels = group.expandHeaderLevels || 0 |
| 137 | + |
130 | 138 | group.components.forEach(function (componentName) { |
131 | 139 | var componentNavData = navData[componentName] |
132 | 140 | var componentsListItemsEl = createElement('li', 'components_list-items') |
|
183 | 191 | if (items.length && items[0].content && items[0].content.endsWith(' Home')) { |
184 | 192 | items.splice.apply(items, [0, 1].concat(items[0].items || [])) |
185 | 193 | } |
| 194 | + |
186 | 195 | // build the navTree. |
187 | 196 | // At least one of these componentVersions must return a navTree in order for us to |
188 | 197 | // use this componentVersionNavEl |
189 | | - if (buildNavTree(items, componentVersionNavEl, page, [])) { |
| 198 | + if (buildNavTree(items, componentVersionNavEl, page, [], expandHeaderLevels)) { |
190 | 199 | hasNavTrees = true |
191 | 200 | } |
192 | 201 |
|
|
199 | 208 | container.appendChild(groupEl) |
200 | 209 | } |
201 | 210 |
|
202 | | - function buildNavTree (items, parent, page, currentPath) { |
| 211 | + function buildNavTree (items, parent, page, currentPath, expandHeaderLevels) { |
203 | 212 | if (!(items || []).length) return |
204 | 213 |
|
205 | 214 | var navListEl = createElement('ul', 'menu_row') |
|
226 | 235 | navTextEl.innerHTML = item.content || '' |
227 | 236 | navLineEl.appendChild(navTextEl) |
228 | 237 | navItemEl.appendChild(navLineEl) |
229 | | - var childNavListEl = buildNavTree(item.items, navItemEl, page, currentPath) |
| 238 | + var childNavListEl = buildNavTree(item.items, navItemEl, page, currentPath, expandHeaderLevels) |
230 | 239 | if (childNavListEl) { |
231 | 240 | if (currentPath.length > 1) { |
232 | 241 | navLineEl.insertBefore(Object.assign(document.createElement('span'), { className: 'in-toggle' }), navTextEl) |
233 | 242 | } |
234 | 243 | navItemEl.classList.add('is-parent') |
235 | 244 |
|
236 | 245 | // Depending on depth, we may wish to collapse the level. |
237 | | - // originally we would collapse everything, but we can set :page-nav-header-levels: 1 to have |
| 246 | + // originally we would collapse everything, but we can set nav's expandHeaderLevels: 1 to have |
238 | 247 | // up to the bold subheadings kept open |
239 | | - if (currentPath.length > page.navHeaderLevels) { |
| 248 | + if (currentPath.length > expandHeaderLevels) { |
240 | 249 | if (!navItemEl.querySelector('a.is-current-page')) { |
241 | 250 | navItemEl.classList.add('closed') |
242 | 251 | } |
|
341 | 350 | } |
342 | 351 |
|
343 | 352 | // FIXME integrate into nav builder |
344 | | - function activateNav (container, page) { |
| 353 | + function activateNav (container, page, expandHeaderLevels) { |
345 | 354 | // NOTE prevent text from being selected by double click |
346 | 355 | container.addEventListener('mousedown', function (e) { |
347 | 356 | if (e.detail > 1 && window.getComputedStyle(e.target).cursor === 'pointer') e.preventDefault() |
|
396 | 405 | var menuList = findAncestorWithClass('menu_list', menuTitleEl, container) |
397 | 406 |
|
398 | 407 | if (!menuList.classList.contains('is-parent') || menuTitleEl.href) return |
399 | | - if (menuList.dataset.depth < page.navHeaderLevels) { |
| 408 | + if (menuList.dataset.depth < expandHeaderLevels) { |
400 | 409 | return |
401 | 410 | } |
402 | 411 |
|
|
0 commit comments