summaryrefslogtreecommitdiff
path: root/client-web/source/menu.ts
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-04-01 00:50:46 +0200
committermetamuffin <metamuffin@disroot.org>2024-04-01 00:50:46 +0200
commit5b3fb138a584649782ea92df262d0a78c5386f4d (patch)
tree4d74dd2ab406d6000e800ce64d16c2201dc038ba /client-web/source/menu.ts
parent78a02af787a4011a60f2ec964da9130c737478d4 (diff)
downloadkeks-meet-5b3fb138a584649782ea92df262d0a78c5386f4d.tar
keks-meet-5b3fb138a584649782ea92df262d0a78c5386f4d.tar.bz2
keks-meet-5b3fb138a584649782ea92df262d0a78c5386f4d.tar.zst
improve accessability here and there
Diffstat (limited to 'client-web/source/menu.ts')
-rw-r--r--client-web/source/menu.ts91
1 files changed, 49 insertions, 42 deletions
diff --git a/client-web/source/menu.ts b/client-web/source/menu.ts
index f253bc3..ee2cdca 100644
--- a/client-web/source/menu.ts
+++ b/client-web/source/menu.ts
@@ -48,7 +48,14 @@ export function control_bar(state: AppState, side_ui_container: HTMLElement): HT
e("button", { icon: "file", onclick: () => state.room?.local_user.await_add_resource(create_file_res()) }, "File"),
]
chat_control = chat.set_state;
- return e("nav", { class: "control-bar" }, leave, "|", chat.el, prefs.el, rwatches.el, "|", ...local_controls)
+ return e("nav", { class: "control-bar" },
+ leave,
+ e("span", { role: "separator" }, "|"),
+ chat.el,
+ prefs.el,
+ rwatches.el,
+ e("span", { role: "separator" }, "|"),
+ ...local_controls)
}
export interface SideUI { el: HTMLElement, set_state: (s?: boolean) => void }
@@ -56,49 +63,49 @@ let close_active: (() => void) | undefined;
let cancel_slide: number | undefined
export function side_ui(container: HTMLElement, content: HTMLElement, icon: string, label: string, handlers = { focus() { } }): SideUI {
const tray = e("div", { class: "side-tray" }, content)
- let last_state = false;
- const checkbox = e("input", {
- type: "checkbox",
- onchange: async () => {
- if (last_state == checkbox.checked) return
- if (checkbox.checked) {
- el.classList.add("checked")
- if (close_active) {
- close_active()
- await sleep(200)
- }
- close_active = () => set_state(false)
- if (cancel_slide) {
- clearTimeout(cancel_slide)
- cancel_slide = undefined
- tray.classList.remove("animate-out")
- }
- tray.classList.add("animate-in")
- container.appendChild(tray)
- cancel_slide = setTimeout(() => {
- handlers.focus()
- }, 200)
- } else {
- el.classList.remove("checked")
- close_active = undefined
- if (cancel_slide) {
- clearTimeout(cancel_slide)
- cancel_slide = undefined
- }
- tray.classList.remove("animate-in")
- tray.classList.add("animate-out")
- cancel_slide = setTimeout(() => {
- tray.classList.remove("animate-out")
- container.removeChild(tray)
- }, 200)
+ let checked = false;
+ const el = e("button", {
+ class: "side-ui-control",
+ icon,
+ onclick: () => set_state()
+ }, label)
+ const set_state = async (s?: boolean) => {
+ if (s == checked) return
+ checked = s ?? !checked
+ if (checked) {
+ el.classList.add("checked")
+ el.ariaPressed = "false";
+ if (close_active) {
+ close_active()
+ await sleep(200)
}
- last_state = checkbox.checked;
+ close_active = () => set_state(false)
+ if (cancel_slide) {
+ clearTimeout(cancel_slide)
+ cancel_slide = undefined
+ tray.classList.remove("animate-out")
+ }
+ tray.classList.add("animate-in")
+ container.appendChild(tray)
+ cancel_slide = setTimeout(() => {
+ handlers.focus()
+ }, 200)
+ } else {
+ el.classList.remove("checked")
+ el.ariaPressed = "true";
+ close_active = undefined
+ if (cancel_slide) {
+ clearTimeout(cancel_slide)
+ cancel_slide = undefined
+ }
+ tray.classList.remove("animate-in")
+ tray.classList.add("animate-out")
+ cancel_slide = setTimeout(() => {
+ tray.classList.remove("animate-out")
+ container.removeChild(tray)
+ }, 200)
}
- })
- const set_state = (s: boolean | undefined) => {
- checkbox.checked = s ?? !checkbox.checked;
- if (checkbox.onchange) checkbox.onchange(undefined as unknown as Event)
}
- const el = e("label", { class: "side-ui-control", icon }, label, checkbox)
+ el.ariaPressed = "false"
return { el, set_state }
}