aboutsummaryrefslogtreecommitdiff
path: root/ui/src
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src')
-rw-r--r--ui/src/components/mod.rs7
-rw-r--r--ui/src/components/node_page.rs39
-rw-r--r--ui/src/components/user.rs53
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")];
+ // }
+ }
+}