diff options
Diffstat (limited to 'ui/src')
| -rw-r--r-- | ui/src/components/mod.rs | 7 | ||||
| -rw-r--r-- | ui/src/components/node_page.rs | 39 | ||||
| -rw-r--r-- | ui/src/components/user.rs | 53 |
3 files changed, 59 insertions, 40 deletions
diff --git a/ui/src/components/mod.rs b/ui/src/components/mod.rs index 15b2ae2..dde77b0 100644 --- a/ui/src/components/mod.rs +++ b/ui/src/components/mod.rs @@ -5,6 +5,7 @@ */ pub mod admin; +pub mod admin_log; pub mod login; pub mod message; pub mod node_card; @@ -12,7 +13,7 @@ pub mod node_list; pub mod node_page; pub mod props; pub mod stats; -pub mod admin_log; +pub mod user; use crate::{ RenderInfo, @@ -22,6 +23,7 @@ use crate::{ message::Message, node_list::NodeList, node_page::{NodePage, Player}, + user::UserSettings, }, }; use jellycommon::{jellyobject::Object, *}; @@ -59,5 +61,8 @@ define! { @if let Some(data) = view.get(VIEW_ADMIN_INFO) { @AdminInfo { ri, data } } + @if let Some(user) = view.get(VIEW_USER_SETTINGS) { + @UserSettings { ri, user } + } } } diff --git a/ui/src/components/node_page.rs b/ui/src/components/node_page.rs index 5823933..53534cf 100644 --- a/ui/src/components/node_page.rs +++ b/ui/src/components/node_page.rs @@ -79,32 +79,6 @@ markup::define! { // }} // }} // } - // @if !node.credits.is_empty() { - // h2 { @trs(lang, "node.people") } - // @for (group, people) in &node.credits { - // details[open=group==&CreditCategory::Cast] { - // summary { h3 { @format!("{}", group) } } - // ul.children.hlist { @for (i, pe) in people.iter().enumerate() { - // li { .card."aspect-port" { - // .poster { - // a[href="#"] { - // img[src=u_node_slug_person_asset(&node.slug, *group, i, 1024), loading="lazy"]; - // } - // } - // .title { - // // TODO span { @pe.person.name } br; - // @if let Some(c) = pe.characters.first() { - // span.subtitle { @c } - // } - // @if let Some(c) = pe.jobs.first() { - // span.subtitle { @c } - // } - // } - // }} - // }} - // } - // } - // } @if node.has(NO_TRACK.0) { details { summary { @tr(ri.lang, "media.tracks") } @@ -165,19 +139,6 @@ markup::define! { // li { @NodeCard { node, udata, lang } } // }} // } - // @match node.kind { - // NodeKind::Show | NodeKind::Series | NodeKind::Season => { - // ol { @for (node, udata) in children.iter() { - // li { @NodeCardWide { node, udata, lang } } - // }} - // } - // NodeKind::Collection | NodeKind::Channel | _ => { - // ul.children {@for (node, udata) in children.iter() { - // li { @NodeCard { node, udata, lang } } - // }} - // } - // } - // } } Player<'a>(ri: &'a RenderInfo<'a>, nku: Object<'a>) { diff --git a/ui/src/components/user.rs b/ui/src/components/user.rs new file mode 100644 index 0000000..815c555 --- /dev/null +++ b/ui/src/components/user.rs @@ -0,0 +1,53 @@ +/* + 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) 2026 metamuffin <metamuffin.org> +*/ + +use crate::RenderInfo; +use jellycommon::{ + jellyobject::Object, + routes::{u_account_login, u_account_settings}, + *, +}; +use jellyui_locale::tr; + +markup::define! { + UserSettings<'a>(ri: &'a RenderInfo<'a>, user: Object<'a>) { + h1 { @tr(ri.lang, "settings") } + + h2 { @tr(ri.lang, "settings.account") } + a.switch_account[href=u_account_login()] { "Switch Account" } + p { @tr(ri.lang, "tag.Ulgn") ": " @user.get(USER_LOGIN) } + form[method="POST", action=u_account_settings()] { + label[for="name"] { @tr(ri.lang, "tag.Unam") } + input[type="text", id="name", name="name", value=user.get(USER_NAME)]; + input[type="submit", value=tr(ri.lang, "settings.update")]; + } + form[method="POST", action=u_account_settings()] { + label[for="password"] { @tr(ri.lang, "tag.Upwd") } + input[type="password", id="password", name="password"]; + input[type="submit", value=tr(ri.lang, "settings.update")]; + } + + // h2 { @tr(ri.lang, "settings.appearance") } + // form[method="POST", action=u_account_settings()] { + // fieldset { + // legend { @tr(ri.lang, "tag.Uthm") } + // @for theme in [] { + // label { input[type="radio", name="theme", value=A(*theme), checked=session.user.theme==*theme]; @tr(ri.lang, &format!("theme.{theme}")) } br; + // } + // } + // input[type="submit", value=tr(ri.lang, "settings.apply")]; + // } + // form[method="POST", action=u_account_settings()] { + // fieldset { + // legend { @tr(ri.lang, "settings.player_preference") } + // @for kind in PlayerKind::ALL { + // label { input[type="radio", name="player_preference", value=A(*kind), checked=session.user.player_preference==*kind]; @tr(ri.lang, &format!("player_kind.{kind}")) } br; + // } + // } + // input[type="submit", value=tr(ri.lang, "settings.apply")]; + // } + } +} |