mirror of
https://github.com/System-End/hackatime.git
synced 2026-04-19 23:32:53 +00:00
57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
import { Controller } from "@hotwired/stimulus"
|
|
|
|
export default class extends Controller {
|
|
static targets = ["nav", "overlay", "button"]
|
|
|
|
toggle() {
|
|
const isOpen = this.navTarget.classList.contains("open")
|
|
|
|
this.navTarget.classList.toggle("open")
|
|
this.overlayTarget.classList.toggle("open")
|
|
document.body.classList.toggle("overflow-hidden")
|
|
|
|
if (this.hasButtonTarget) {
|
|
this.buttonTarget.setAttribute("aria-expanded", !isOpen)
|
|
}
|
|
}
|
|
|
|
close() {
|
|
this.navTarget.classList.remove("open")
|
|
this.overlayTarget.classList.remove("open")
|
|
document.body.classList.remove("overflow-hidden")
|
|
if (this.hasButtonTarget) {
|
|
this.buttonTarget.setAttribute("aria-expanded", "false")
|
|
}
|
|
}
|
|
|
|
clickLink(event) {
|
|
// Close nav when clicking links on mobile
|
|
if (window.innerWidth <= 1024) {
|
|
this.close()
|
|
}
|
|
}
|
|
|
|
resize() {
|
|
// Close nav when window is resized to desktop
|
|
if (window.innerWidth > 1024) {
|
|
this.close()
|
|
}
|
|
}
|
|
|
|
connect() {
|
|
// Listen for window resize
|
|
window.addEventListener('resize', this.resize.bind(this))
|
|
document.addEventListener('keydown', this.handleKeydown.bind(this))
|
|
}
|
|
|
|
disconnect() {
|
|
window.removeEventListener('resize', this.resize.bind(this))
|
|
document.removeEventListener('keydown', this.handleKeydown.bind(this))
|
|
}
|
|
|
|
handleKeydown(event) {
|
|
if (event.key === 'Escape') {
|
|
this.close()
|
|
}
|
|
}
|
|
}
|