✨ (user): Asigna roles desde la edición de usuario
This commit is contained in:
parent
806ed9e0dc
commit
f819181872
26 changed files with 1219 additions and 544 deletions
|
|
@ -3,21 +3,75 @@
|
|||
pub(crate) mod admin;
|
||||
|
||||
mod account_menu;
|
||||
mod change_password_form;
|
||||
mod login_form;
|
||||
mod password_confirm;
|
||||
mod password_reset_confirm_form;
|
||||
mod password_reset_form;
|
||||
mod register_form;
|
||||
mod user_name;
|
||||
|
||||
pub use account_menu::{AccountMenu, account_menu};
|
||||
pub(crate) use change_password_form::ChangePasswordForm;
|
||||
pub use login_form::LoginForm;
|
||||
pub(crate) use password_confirm::PasswordConfirm;
|
||||
pub use password_reset_confirm_form::PasswordResetConfirmForm;
|
||||
pub use password_reset_form::PasswordResetForm;
|
||||
pub use register_form::RegisterForm;
|
||||
pub use user_name::UserName;
|
||||
|
||||
use pagetop::prelude::*;
|
||||
|
||||
use crate::LOCALES_USER;
|
||||
|
||||
// Texto libre de varias líneas como contenido seguro: cada salto de línea se convierte en `<br>`,
|
||||
// sin depender del CSS del tema. Se usa para mostrar el "Sobre mí" del usuario.
|
||||
pub(crate) fn multiline_text(text: String) -> Html {
|
||||
Html::with(move |_| {
|
||||
html! {
|
||||
@for (i, line) in text.lines().enumerate() {
|
||||
@if i > 0 { br; }
|
||||
(line)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Nombre traducido del idioma guardado en el perfil de un usuario, o "-" si no tiene ninguno. Un
|
||||
// identificador que ya no esté entre los soportados se muestra tal cual.
|
||||
pub(crate) fn language_name(language: Option<&str>) -> Lc {
|
||||
let Some(code) = language else {
|
||||
return Lc::n("-");
|
||||
};
|
||||
Locale::supported_languages()
|
||||
.into_iter()
|
||||
.find(|(langid, _)| langid.to_string() == code)
|
||||
.map_or_else(|| Lc::n(code.to_owned()), |(_, name)| name)
|
||||
}
|
||||
|
||||
// Nombre traducido del tema guardado en el perfil de un usuario o, si no tiene ninguno, el del tema
|
||||
// predeterminado del sitio, que es el que se le aplica. Un tema que ya no esté habilitado se
|
||||
// muestra con el nombre guardado.
|
||||
pub(crate) fn theme_name(theme: Option<&str>) -> table::Cell {
|
||||
let Some(name) = theme else {
|
||||
// Los argumentos de `Lc` son texto fijo: el nombre del tema se traduce al renderizar.
|
||||
return Html::with(|cx| {
|
||||
let theme = default_theme();
|
||||
let name = theme
|
||||
.name()
|
||||
.lookup(cx)
|
||||
.unwrap_or_else(|| theme.short_name().to_owned());
|
||||
Lc::t("value-theme-site-default", &LOCALES_USER)
|
||||
.with_arg("theme", name)
|
||||
.using(cx)
|
||||
})
|
||||
.into();
|
||||
};
|
||||
theme_by_short_name(name)
|
||||
.map_or_else(|| Lc::n(name.to_owned()), |theme| theme.name())
|
||||
.into()
|
||||
}
|
||||
|
||||
// Banner de error de formulario; se renderiza vacío si `error` es `None`. Compartido por los
|
||||
// formularios de autenticación y por los de administración.
|
||||
pub(crate) fn error_banner(error: Option<Lc>) -> Html {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue