hiss/old.src/view/panels.js
2025-02-04 14:21:03 -07:00

75 lines
1.6 KiB
JavaScript

const app = window.app ??= {}
const view = window.view ??= {}
import * as browser from './browser.js'
import * as player from './player.js'
import * as queue from './queue.js'
import * as input from './input.js'
export let modules
export const states = {
PLAYER: 0,
BROWSER: 1,
QUEUE: 2
}
export const Init = (name) => {
app.mode = 1
}
export const View = () => {
view.tabIndicatorLine = document.getElementById('tab-indicator-line')
modules = new Array(3)
modules[states.PLAYER] = player
modules[states.BROWSER] = browser
modules[states.QUEUE] = queue
modules[app.mode].Open()
Render()
input.Actions()
}
export const Display = (name) => {
document.body.classList = [ name ]
}
export const Render = () => {
updateIndicator()
}
export const indicatorMargin = 2
export const updateIndicator = () => {
let dashes = []
let r = 100 - (indicatorMargin * (modules.length - 1))
let pd = 60
let sdc = modules.length - 1
let sdr = r - pd
let sd = parseInt(sdr / sdc)
pd += sdr % sdc
for(let i = 0; i < modules.length; i++) {
dashes.push(i === app.mode ? pd : sd)
}
view.tabIndicatorLine.style.strokeDasharray = dashes
.join(', ' + indicatorMargin + ', ')
}
export const Set = (iMode) => {
app.mode = iMode
View()
}
export const Scroll = (distance) => {
let i = distance + app.mode
if(i < 0) i = modules.length - 1
else if(i >= modules.length) i = 0
Set(i)
}
export const OnKeydown = (event) => {
return modules[app.mode].OnKeydown(event)
}