diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-01-23 17:41:45 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-01-23 17:41:45 +0100 |
| commit | 774f64c0789529884dd7a5232f190e347ad29532 (patch) | |
| tree | 6eb85388837c993a054fba5ca59fdd329f5b5840 /ui/src | |
| parent | 3671a4e07565c86f8071fb2309f463aeaf684ba3 (diff) | |
| download | jellything-774f64c0789529884dd7a5232f190e347ad29532.tar jellything-774f64c0789529884dd7a5232f190e347ad29532.tar.bz2 jellything-774f64c0789529884dd7a5232f190e347ad29532.tar.zst | |
move locale code to own crate
Diffstat (limited to 'ui/src')
| -rw-r--r-- | ui/src/components/mod.rs | 10 | ||||
| -rw-r--r-- | ui/src/components/node_page.rs | 3 | ||||
| -rw-r--r-- | ui/src/components/props.rs | 2 | ||||
| -rw-r--r-- | ui/src/components/stats.rs | 2 | ||||
| -rw-r--r-- | ui/src/format.rs | 19 | ||||
| -rw-r--r-- | ui/src/lib.rs | 13 | ||||
| -rw-r--r-- | ui/src/locale.rs | 52 | ||||
| -rw-r--r-- | ui/src/scaffold.rs | 6 |
8 files changed, 28 insertions, 79 deletions
diff --git a/ui/src/components/mod.rs b/ui/src/components/mod.rs index 4d2dd62..07b050b 100644 --- a/ui/src/components/mod.rs +++ b/ui/src/components/mod.rs @@ -9,8 +9,11 @@ pub mod node_page; pub mod props; pub mod stats; -use crate::{RenderInfo, components::message::Message}; -use jellycommon::{VIEW_MESSAGE, jellyobject::Object}; +use crate::{ + RenderInfo, + components::{message::Message, node_page::NodePage}, +}; +use jellycommon::{jellyobject::Object, *}; use markup::define; define! { @@ -18,5 +21,8 @@ define! { @if let Some(message) = view.get(VIEW_MESSAGE) { @Message { ri, message } } + @if let Some(nku) = view.get(VIEW_NODE_PAGE) { + @NodePage { ri, nku } + } } } diff --git a/ui/src/components/node_page.rs b/ui/src/components/node_page.rs index 4a594d6..405f50a 100644 --- a/ui/src/components/node_page.rs +++ b/ui/src/components/node_page.rs @@ -4,12 +4,13 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ -use crate::{RenderInfo, components::props::Props, locale::tr}; +use crate::{RenderInfo, components::props::Props}; use jellycommon::{ jellyobject::{Object, Tag, TypedTag}, routes::{u_image, u_node_slug_player}, *, }; +use jellyui_locale::tr; use std::marker::PhantomData; markup::define! { diff --git a/ui/src/components/props.rs b/ui/src/components/props.rs index f23d72e..fa078e7 100644 --- a/ui/src/components/props.rs +++ b/ui/src/components/props.rs @@ -7,13 +7,13 @@ use crate::{ RenderInfo, format::{format_count, format_duration}, - locale::tr, }; use chrono::DateTime; use jellycommon::{ jellyobject::{Object, TypedTag}, *, }; +use jellyui_locale::tr; use std::marker::PhantomData; markup::define! { diff --git a/ui/src/components/stats.rs b/ui/src/components/stats.rs index 8dfb304..698430b 100644 --- a/ui/src/components/stats.rs +++ b/ui/src/components/stats.rs @@ -7,9 +7,9 @@ use crate::{ RenderInfo, format::{format_duration, format_duration_long, format_size}, - locale::tr, }; use jellycommon::{jellyobject::Object, *}; +use jellyui_locale::tr; use markup::raw; markup::define! { diff --git a/ui/src/format.rs b/ui/src/format.rs index 01982af..4eb8f84 100644 --- a/ui/src/format.rs +++ b/ui/src/format.rs @@ -8,17 +8,16 @@ use jellycommon::{ jellyobject::{Object, Tag}, *, }; - -use crate::locale::tr; -use std::fmt::Write; +use jellyui_locale::tr; +use std::{borrow::Cow, fmt::Write}; pub fn format_duration(d: f64) -> String { - format_duration_mode(LANG_ENG.0, d, false) + format_duration_mode("en", d, false) } -pub fn format_duration_long(lang: Language, d: f64) -> String { +pub fn format_duration_long(lang: &str, d: f64) -> String { format_duration_mode(lang, d, true) } -fn format_duration_mode(lang: Language, mut d: f64, long_units: bool) -> String { +fn format_duration_mode(lang: &str, mut d: f64, long_units: bool) -> String { let mut s = String::new(); let sign = if d > 0. { "" } else { "-" }; d = d.abs(); @@ -58,15 +57,15 @@ fn test_duration_short() { #[test] fn test_duration_long() { assert_eq!( - format_duration_long(LANG_ENG.0, 61.).as_str(), + format_duration_long("en", 61.).as_str(), "1 minute and 1 second" ); assert_eq!( - format_duration_long(LANG_ENG.0, 121.).as_str(), + format_duration_long("en", 121.).as_str(), "2 minutes and 1 second" ); assert_eq!( - format_duration_long(LANG_ENG.0, 3661.).as_str(), + format_duration_long("en", 3661.).as_str(), "1 hour, 1 minute and 1 second" ); } @@ -74,7 +73,7 @@ fn test_duration_long() { pub fn format_size(size: u64) -> String { humansize::format_size(size, humansize::DECIMAL) } -pub fn format_kind(lang: Language, kind: Tag) -> &'static str { +pub fn format_kind(lang: &str, kind: Tag) -> Cow<'static, str> { tr( lang, match kind { diff --git a/ui/src/lib.rs b/ui/src/lib.rs index 72109d4..3b04b40 100644 --- a/ui/src/lib.rs +++ b/ui/src/lib.rs @@ -5,18 +5,15 @@ */ mod components; pub(crate) mod format; -pub(crate) mod locale; mod scaffold; +pub use jellyui_client_scripts::*; +pub use jellyui_client_style::*; + use crate::{components::View, scaffold::Scaffold}; -use jellycommon::{ - jellyobject::{Object, Tag}, - *, -}; +use jellycommon::{jellyobject::Object, *}; use serde::{Deserialize, Serialize}; -pub type FlashM = Option<(String, String)>; - #[rustfmt::skip] #[derive(Debug, Deserialize, Serialize, Default)] pub struct Config { @@ -27,7 +24,7 @@ pub struct Config { pub struct RenderInfo<'a> { pub user: Option<Object<'a>>, - pub lang: Tag, + pub lang: &'a str, pub status_message: Option<&'a str>, pub config: &'a Config, } diff --git a/ui/src/locale.rs b/ui/src/locale.rs deleted file mode 100644 index 08c73c2..0000000 --- a/ui/src/locale.rs +++ /dev/null @@ -1,52 +0,0 @@ -/* - 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 jellycommon::*; -use std::{collections::HashMap, sync::LazyLock}; - -pub static LANG_TABLES: LazyLock<HashMap<Language, HashMap<&'static str, &'static str>>> = - LazyLock::new(|| { - let mut k = HashMap::new(); - for (lang, source) in [ - (LANG_ENG.0, include_str!("../../locale/en.ini")), - (LANG_DEU.0, include_str!("../../locale/de.ini")), - ] { - // TODO fallback to english - let tr_map = source - .lines() - .filter_map(|line| { - let (key, value) = line.split_once("=")?; - Some((key.trim(), value.trim())) - }) - .collect::<HashMap<&'static str, &'static str>>(); - k.insert(lang, tr_map); - } - k - }); - -pub fn tr(lang: Language, key: &str) -> &'static str { - let tr_map = LANG_TABLES.get(&lang).unwrap(); - tr_map.get(key).copied().unwrap_or("MISSING TRANSLATION") -} - -pub fn escape(str: &str) -> String { - let mut o = String::with_capacity(str.len()); - let mut last = 0; - for (index, byte) in str.bytes().enumerate() { - if let Some(esc) = match byte { - b'<' => Some("<"), - b'>' => Some(">"), - b'&' => Some("&"), - b'"' => Some("""), - _ => None, - } { - o += &str[last..index]; - o += esc; - last = index + 1; - } - } - o += &str[last..]; - o -} diff --git a/ui/src/scaffold.rs b/ui/src/scaffold.rs index fee311a..8cfb432 100644 --- a/ui/src/scaffold.rs +++ b/ui/src/scaffold.rs @@ -4,10 +4,7 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ -use crate::{ - RenderInfo, - locale::{escape, tr}, -}; +use crate::RenderInfo; use jellycommon::{ routes::{ u_account_login, u_account_logout, u_account_register, u_account_settings, @@ -15,6 +12,7 @@ use jellycommon::{ }, user::{USER_ADMIN, USER_NAME}, }; +use jellyui_locale::{escape, tr}; use markup::{Render, raw}; markup::define! { |