diff options
Diffstat (limited to 'web/script/player')
| -rw-r--r-- | web/script/player/mod.ts | 94 | ||||
| -rw-r--r-- | web/script/player/popup.ts | 3 | ||||
| -rw-r--r-- | web/script/player/sync.ts | 6 | 
3 files changed, 58 insertions, 45 deletions
| diff --git a/web/script/player/mod.ts b/web/script/player/mod.ts index 9457288..c4f4473 100644 --- a/web/script/player/mod.ts +++ b/web/script/player/mod.ts @@ -76,21 +76,23 @@ function initialize_player(el: HTMLElement, node_id: string) {                  ...(kind == "audio" ? volume() : []), -                ...(player.tracks ?? []) -                    .map((track, index) => ({ index, track })) -                    .filter(({ track }) => get_track_kind(track.kind) == kind) -                    .map(({ track, index }): HTMLElement => { -                        const active = player.active_tracks.value.find(ts => ts.track_index == index) !== undefined -                        const onclick = (button: HTMLElement) => { -                            button.textContent = "…" -                            player.set_track_enabled(index, !active) -                        } -                        return e("div", -                            e("button", { class: "jsp-track-state", onclick }, active ? "-" : "+"), " ", -                            e("span", { class: "jsp-track-name" }, track.name), " ", -                            e("span", { class: "jsp-track-lang" }, track.language) -                        ) -                    }) +                player.active_tracks.map(_ => +                    e("div", ...(player.tracks ?? []) +                        .map((track, index) => ({ index, track })) +                        .filter(({ track }) => get_track_kind(track.kind) == kind) +                        .map(({ track, index }): HTMLElement => { +                            const active = player.active_tracks.value.find(ts => ts.track_index == index) !== undefined +                            const onclick = () => { +                                player.set_track_enabled(index, !active) +                                // TODO show loading indicator +                            } +                            return e("div", +                                e("button", { class: "jsp-track-state", onclick }, active ? "-" : "+"), " ", +                                e("span", { class: "jsp-track-name" }, track.name), " ", +                                e("span", { class: "jsp-track-lang" }, track.language) +                            ) +                        }) +                    ))              )          )          return button @@ -103,38 +105,40 @@ function initialize_player(el: HTMLElement, node_id: string) {              e("h2", "Settings"),              e("div", { class: ["jsp-controlgroup", "jsp-playersync-controls"] },                  e("h3", "Playersync"), -                sync_state.map(sync => sync -                    ? e("div", -                        e("span", "Sync enabled."), -                        e("button", "Disable", { -                            onclick: () => { sync_state.value?.destroy(); sync_state.value = undefined } -                        }), -                        e("p", "Session ID: ", -                            channel_name_copy = e("input", { type: "text", disabled: true, value: sync.name }), -                            e("button", "content_paste_go", { -                                class: "icon", +                sync_state.map(sync => { +                    console.log("aaaaa", sync); +                    return sync +                        ? e("div", +                            e("span", "Sync enabled."), +                            e("button", "Disable", { +                                onclick: () => { sync_state.value?.destroy(); sync_state.value = undefined } +                            }), +                            e("p", "Session ID: ", +                                channel_name_copy = e("input", { type: "text", disabled: true, value: sync.name }), +                                e("button", "content_paste_go", { +                                    class: "icon", +                                    onclick: () => { +                                        logger.log("Session ID copied to clipboard.") +                                        navigator.clipboard.writeText(channel_name_copy.value) +                                    } +                                }) +                            )) +                        : e("div", +                            channel_name = e("input", { type: "text", placeholder: "someroom:example.org" }), +                            e("button", "Join", {                                  onclick: () => { -                                    logger.log("Session ID copied to clipboard.") -                                    navigator.clipboard.writeText(channel_name_copy.value) +                                    if (!channel_name.value.length) return +                                    sync_state.value?.destroy() +                                    sync_state.value = new Playersync(player, logger, channel_name.value)                                  } -                            }) -                        )) -                    : e("div", -                        channel_name = e("input", { type: "text", placeholder: "someroom:example.org" }), -                        e("button", "Join", { -                            onclick: () => { -                                if (!channel_name.value.length) return -                                sync_state.value?.destroy() -                                sync_state.value = new Playersync(player, logger, channel_name.value) -                            } -                        }), e("br"), -                        e("button", "Create new session", { -                            onclick: () => { -                                sync_state.value?.destroy() -                                sync_state.value = new Playersync(player, logger) -                            } -                        })) -                ) +                            }), e("br"), +                            e("button", "Create new session", { +                                onclick: () => { +                                    sync_state.value?.destroy() +                                    sync_state.value = new Playersync(player, logger) +                                } +                            })) +                })              )          ))          return button; diff --git a/web/script/player/popup.ts b/web/script/player/popup.ts index d300a5c..dde7ed6 100644 --- a/web/script/player/popup.ts +++ b/web/script/player/popup.ts @@ -44,6 +44,9 @@ export class Popup {              const content = this.content!              content.classList.add("jsp-popup-out")              setTimeout(() => { +                //@ts-ignore i know +                const child_undo: undefined | (() => void) = content["jsh_undo"] +                if (child_undo) child_undo()                  this.container.removeChild(content)              }, 100)              this.content = undefined diff --git a/web/script/player/sync.ts b/web/script/player/sync.ts index 6f2b86f..34a46e3 100644 --- a/web/script/player/sync.ts +++ b/web/script/player/sync.ts @@ -1,3 +1,9 @@ +/* +    This file is part of jellything (https://codeberg.org/metamuffin/jellything) +    which is licensed under the GNU Affero General Public License (version 3); see /COPYING. +    Copyright (C) 2024 metamuffin <metamuffin.org> +*/ +/// <reference lib="dom" />  import { Logger } from "../jshelper/src/log.ts";  import { Player } from "./player.ts" | 
