class Sidebar { constructor() { this._sidebar = document.querySelector("#sidebar") this._sidebarButton = document.querySelector("#panel-button") this._closeButton = document.querySelector("#close-panel-button") this._visible = false this._init() } showSidebar() { this._sidebar.classList.remove("hide") wait(100).then(() => {this._closeButton.focus()}) this._visible = true } hideSidebar() { this._sidebar.classList.add("hide") this._sidebarButton.focus() this._visible = false } toggleSidebar() { if (this._visible) { this.hideSidebar() } else { this.showSidebar() } } _setKeydown() { this._sidebar.addEventListener("keydown", (ev) => { if (ev.keyCode == 27) { this.hideSidebar() } }) } _setSidebar() { document.querySelector("#screen").addEventListener("click", (ev) => { if (ev.target == this._sidebarButton || ev.target.parentElement == this._sidebarButton) { this.toggleSidebar() } else if (ev.target != this._sidebar && ev.target.closest(".panel") == null) { this._sidebar.classList.add("hide") this._visible = false } if (ev.target == this._closeButton || ev.target.parentElement == this._closeButton) { this.hideSidebar() } }) document.querySelector("#screen").addEventListener("focusin", (ev) => { if (!this._sidebar.contains(document.activeElement)) { this._sidebar.classList.add("hide") this._visible = false } }) } _init() { this._setSidebar() this._setKeydown() } }