diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-03-09 17:34:49 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-03-09 17:34:49 +0100 |
| commit | cb5ff5f0cab8ea3d419d3b208f5bc61ebee89ffb (patch) | |
| tree | b38782aa294ee7d29d09a075129b3e29097bb13a | |
| parent | 21cf747b1b9dfefef94aa399ae3a1f105c0e2c89 (diff) | |
| download | jellything-cb5ff5f0cab8ea3d419d3b208f5bc61ebee89ffb.tar jellything-cb5ff5f0cab8ea3d419d3b208f5bc61ebee89ffb.tar.bz2 jellything-cb5ff5f0cab8ea3d419d3b208f5bc61ebee89ffb.tar.zst | |
use no_scaff feature for js transition
| -rw-r--r-- | server/src/routes/stream.rs | 7 | ||||
| -rw-r--r-- | ui/client-scripts/src/backbutton.ts | 7 | ||||
| -rw-r--r-- | ui/client-scripts/src/transition.ts | 15 | ||||
| -rw-r--r-- | ui/locale/src/lib.rs | 2 |
4 files changed, 15 insertions, 16 deletions
diff --git a/server/src/routes/stream.rs b/server/src/routes/stream.rs index 9868d6a..45b86a9 100644 --- a/server/src/routes/stream.rs +++ b/server/src/routes/stream.rs @@ -5,10 +5,7 @@ */ use crate::{request_info::RequestInfo, routes::error::MyError}; use anyhow::{Result, anyhow}; -use jellycommon::{ - NO_SLUG, NO_TITLE, NO_TRACK, TR_SOURCE, TRSOURCE_LOCAL_PATH, jellyobject::Path, - stream::StreamSpec, -}; +use jellycommon::{jellyobject::Path, stream::StreamSpec, *}; use jellydb::{Filter, Query}; use jellystream::SMediaInfo; use log::{info, warn}; @@ -76,7 +73,7 @@ pub async fn r_stream( }; info!( - "stream request (range={})", + "stream request {spec:?} (range={})", range .as_ref() .map(|r| r.to_cr_hv()) diff --git a/ui/client-scripts/src/backbutton.ts b/ui/client-scripts/src/backbutton.ts index b1b5c0f..5c1a8cb 100644 --- a/ui/client-scripts/src/backbutton.ts +++ b/ui/client-scripts/src/backbutton.ts @@ -7,7 +7,8 @@ import { e } from "./jshelper/mod.ts"; globalThis.addEventListener("DOMContentLoaded", () => { - document.getElementsByTagName("nav").item(0)?.prepend( - e("a", { class: "back", onclick() { history.back() } }, e("span", "Back")) - ) + const nav = document.getElementsByTagName("nav").item(0) as HTMLElement + if (nav.dataset.hasBackButton) return + nav.dataset.hasBackButton = "1" + nav.prepend(e("a", { class: "back", onclick() { history.back() } }, e("span", "Back"))) }) diff --git a/ui/client-scripts/src/transition.ts b/ui/client-scripts/src/transition.ts index dadb266..2bf11ce 100644 --- a/ui/client-scripts/src/transition.ts +++ b/ui/client-scripts/src/transition.ts @@ -29,6 +29,8 @@ function patch_page() { document.querySelectorAll("a").forEach(el => { if (!el.href.startsWith("http")) return if (el.target && el.target != "_self") return + if (el.dataset.hasTransitionHook) return + el.dataset.hasTransitionHook = "1" el.addEventListener("click", async ev => { ev.preventDefault() await transition_to(el.href) @@ -53,7 +55,7 @@ function show_message(mesg: string, mode: "error" | "success" = "error") { let i = 0; function prepare_load(href: string, state?: HistoryState) { - const r_promise = fetch(href, { headers: { accept: "text/html" }, redirect: "manual" }) + const r_promise = fetch(href + "?no_scaff", { headers: { accept: "text/html" }, redirect: "manual" }) return async () => { let rt = "" try { @@ -70,12 +72,10 @@ function prepare_load(href: string, state?: HistoryState) { if (e instanceof TypeError) return show_message("Navigation failed. Check your connection.") return show_message("unknown error when fetching page") } - const [head, body] = rt.split("<head>")[1].split("</head>") globalThis.history.replaceState({ top: globalThis.scrollY, index: i++ } as HistoryState, "") if (!state) globalThis.history.pushState({}, "", href) clear_spinner() - document.head.innerHTML = head - document.body.outerHTML = body + document.getElementById("main")!.innerHTML = rt globalThis.dispatchEvent(new Event("DOMContentLoaded")) globalThis.scrollTo({ top: state?.top ?? 0 }); fade(true) @@ -88,8 +88,9 @@ function clear_spinner() { if (spinner_element) spinner_element.remove() spinner_element = spinner_timeout = undefined; } +let overlay: HTMLDivElement | undefined function fade(dir: boolean) { - const overlay = document.createElement("div") + if (!overlay) overlay = document.createElement("div") overlay.classList.add("jst-fade") overlay.style.backgroundColor = dir ? "black" : "transparent" overlay.style.animationName = dir ? "jst-fadeout" : "jst-fadein" @@ -98,9 +99,9 @@ function fade(dir: boolean) { document.body.appendChild(overlay) return new Promise<void>(res => { setTimeout(() => { - if (dir) document.body.removeChild(overlay) + if (dir && overlay) { document.body.removeChild(overlay); overlay = undefined } spinner_timeout = setTimeout(() => { - overlay.append(spinner_element = e("div", { class: "jst-spinner" }, "This is a spinner.")) + overlay?.append(spinner_element = e("div", { class: "jst-spinner" }, "This is a spinner.")) }, 500) res() }, DURATION) diff --git a/ui/locale/src/lib.rs b/ui/locale/src/lib.rs index 49e570b..e890e5d 100644 --- a/ui/locale/src/lib.rs +++ b/ui/locale/src/lib.rs @@ -13,7 +13,7 @@ macro_rules! languages { const LANGUAGES: &[(&str, &str)] = &[$(($lang, include_str!(concat!("../../../locale/", $lang, ".ini")))),*]; }; } -languages!("en", "de"); +languages!("en", "de", "nl", "zh_Hans"); pub static LANG_TABLES: LazyLock<HashMap<&'static str, HashMap<&'static str, &'static str>>> = LazyLock::new(|| { |