Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/frontend/ts/leftsidebar.ts
3855 views
1
import { BXDropdown } from 'carbon-web-components'
2
3
const hiddenPanelClass = 'c-textbook__sidebar--hidden'
4
const mobileBreakpoint = 1056
5
let parentContainer = null
6
7
const collapseMobileMenu = function () {
8
parentContainer = document.getElementsByClassName('c-textbook')[0]
9
if (parentContainer) {
10
const w = document.documentElement.clientWidth
11
if (w < mobileBreakpoint) {
12
parentContainer.classList.add(hiddenPanelClass)
13
}
14
}
15
}
16
17
const languageDropDown = (() => {
18
let bxDropdown: BXDropdown | undefined
19
20
return () => {
21
if (!bxDropdown) {
22
bxDropdown = document.getElementsByClassName('language-selector__dropdown')[0] as BXDropdown
23
}
24
return bxDropdown
25
}
26
})()
27
28
const initLeftSidebar = function () {
29
// toggle left-side menu
30
const headerToggle = document.getElementById('app-panel-header-toggle')
31
const footerToggle = document.getElementById('app-panel-footer-toggle')
32
const menuToggles = [headerToggle, footerToggle]
33
parentContainer = document.getElementsByClassName('c-textbook')[0]
34
35
menuToggles.filter(item => !!item).forEach((item) => {
36
item.addEventListener('click', () => {
37
if (parentContainer.classList.contains(hiddenPanelClass)) {
38
parentContainer.classList.remove(hiddenPanelClass)
39
} else {
40
languageDropDown().open = false
41
parentContainer.classList.add(hiddenPanelClass)
42
}
43
})
44
})
45
46
// ensure mobile menus are collapsed
47
const docClientWidth = document.documentElement.clientWidth
48
49
if (docClientWidth < mobileBreakpoint) {
50
parentContainer?.classList?.add(hiddenPanelClass)
51
}
52
53
// prevent mobile resizing
54
let windowInnerWidth = window.innerWidth
55
window.addEventListener('resize', () => {
56
if (windowInnerWidth !== window.innerWidth) {
57
windowInnerWidth = window.innerWidth
58
collapseMobileMenu()
59
}
60
})
61
}
62
63
const toggleLanguagePicker = function () {
64
const languageToggle = document.getElementById('app-panel-language-toggle')
65
parentContainer = document.getElementsByClassName('c-textbook')[0]
66
67
languageToggle?.addEventListener('click', () => {
68
parentContainer.classList.remove(hiddenPanelClass)
69
languageDropDown().open = true
70
})
71
}
72
73
export {
74
initLeftSidebar,
75
toggleLanguagePicker
76
}
77
78