let assert = require('assert')
return async (env, _out) => {
+ let fa_bars = await env.site.get_min_svg('/_svg/fa_bars.svg')
+
// the breadcrumbs have already been determined by navbar.jst, as
// the HTML title is similar to the breadcrumbs (but without links)
let component_names = env.component_names
// present component_titles as breadcrumbs, except last one as text
h2.page-header.grid-gutter-background.'py-2'.mb-0 {
- button.btn.btn-outline-secondary.mr-3#navbar-toggle {'Toggle'}
+ button.btn.btn-outline-secondary.sidebar-toggle.mr-3#navbar-sidebar-toggle {
+ div.icon24-outer(style="top: -1px;") {
+ div.icon24-inner {_out.push(fa_bars)}
+ }
+ span.sr-only {'Navbar toggle'}
+ }
for (let i = 0; i < component_names.length; ++i) {
a.h4(
href=
div.container-fluid {
div.row {
- div.'col-md-4'.sidebar-outer#navbar-sidebar-outer {
+ div.col-md.sidebar-outer.sidebar-outer-collapsed#navbar-sidebar-outer {
div.sidebar-inner#navbar-sidebar-inner {
div.mb-4 {
div(style="width: 128px; height: 128px;") {
}
}
- div.'col-md-8'.'col-xl-7' {
+ div.col-md {
await body(_out)
footer.page-footer.grid-gutter-background.py-5 {
let id_navbar_signed_in_status = document.getElementById('navbar-signed-in-status')
//let id_navbarDropdown = document.getElementById('navbarDropdown')
//let id_navbarSupportedContent = document.getElementById('navbarSupportedContent')
- let id_navbar_toggle = document.getElementById('navbar-toggle') // defined in breadcrumbs.jst
+ // the following is defined in breadcrumbs.jst for now:
+ let id_navbar_sidebar_toggle = document.getElementById('navbar-sidebar-toggle')
// sign in form
id_navbar_sign_in.addEventListener(
)
// sidebar
- let sidebar_computed_style = window.getComputedStyle(
+ let sidebar_outer_computed_style = window.getComputedStyle(
id_navbar_sidebar_outer
)
- let sidebar_collapse_update = () => {
- if (sidebar_computed_style.position === 'sticky') { // md and up
- id_navbar_sidebar_outer.style.flexBasis =
+ let sidebar_toggle_computed_style = window.getComputedStyle(
+ id_navbar_sidebar_toggle
+ )
+ let sidebar_is_collapsed =
+ () =>
+ sidebar_toggle_computed_style.display !== 'none' &&
id_navbar_sidebar_outer.classList.contains(
'sidebar-outer-collapsed'
- ) ? '0px' : `${id_navbar_sidebar_inner.clientWidth}px`
+ )
+ let sidebar_collapse_update = () => {
+ if (sidebar_outer_computed_style.position === 'sticky') { // md and up
+ id_navbar_sidebar_outer.style.flexBasis =
+ sidebar_is_collapsed() ?
+ '0px' :
+ `${id_navbar_sidebar_inner.clientWidth}px`
id_navbar_sidebar_outer.style.removeProperty('height')
}
else {
id_navbar_sidebar_outer.style.height =
- id_navbar_sidebar_outer.classList.contains(
- 'sidebar-outer-collapsed'
- ) ? '0px' : `${id_navbar_sidebar_inner.clientHeight}px`
+ sidebar_is_collapsed() ?
+ '0px' :
+ `${id_navbar_sidebar_inner.clientHeight}px`
id_navbar_sidebar_outer.style.removeProperty('flex-basis')
}
}
() => {
// transitions are only allowed after clicking collapse button,
// otherwise they can be triggered by media queries on resize
- id_navbar_sidebar_outer.style.removeProperty('transitionProperty')
+ id_navbar_sidebar_outer.style.removeProperty('transition-property')
}
)
- id_navbar_toggle.addEventListener(
+ id_navbar_sidebar_toggle.addEventListener(
'click',
() => {
if (
'sidebar-outer-collapsed'
)
id_navbar_sidebar_outer.style.transitionProperty =
- sidebar_computed_style.position === 'sticky' ?
+ sidebar_outer_computed_style.position === 'sticky' ?
'flex-basis' : // md and up
'height'
sidebar_collapse_update()