use crate::Language; use maud::{html, Markup, DOCTYPE}; pub(crate) struct Page { lang: Language, message: Option, } pub(crate) enum MyMessage { NameChanged, FoundCam(String, i64), Error(String, String, String), DataDeleted, } impl Page { pub fn new(lang: Language) -> Self { Self { lang, message: None, } } pub(crate) fn set_message(&mut self, message: MyMessage) { self.message = Some(message); } pub fn content(self, content: Markup) -> Markup { rust_i18n::set_locale(self.lang.to_locale()); html! { (DOCTYPE) html lang=(self.lang) { head { meta charset="utf-8"; meta name="viewport" content="width=device-width, initial-scale=1.0"; link rel="stylesheet" href="/static/pico.min.css"; link rel="stylesheet" href="/static/style.css"; title { (t!("digital_shadows")) } } body { header.container { nav { ul { li { a href="/" { strong { (t!("digital_shadows")) } } } } ul { li { a href="/game" { span role="img" aria-label="camera" { (t!("icon_camera")) } } } li { span id="theme_switcher" {} } li { button id="lang-toggle" lang=(self.lang.next_language()) { (self.lang.next_language()) } } } } } main.container { @if let Some(message) = &self.message { @match message { MyMessage::FoundCam(name, amount) => { div.flex { article class="succ msg" { header { (t!("found_camera_title", name = name)) } (t!("found_camera_body", amount = amount)) footer { a href="#ranking" { (t!("see_ranking")) } } } } } MyMessage::NameChanged => { div.flex { article class="name msg" { header { (t!("new_name_title")) } (t!("new_name_message")) } } } MyMessage::Error(header, body, footer) => { div.flex { article class="error msg" { header { (header) } (body) footer { (footer) } } } } MyMessage::DataDeleted => { div.flex { article class="succ msg" { header { (t!("data_deletion_success_title")) } (t!("data_deletion_success_body")) } } } } } section { (content) } } footer.container { small { a href="/privacy" { (t!("privacy_policy")) } " • " a target="_blank" href="https://www.digidow.eu/impressum/" { (t!("impressum")) } } } script src="/static/theme.js" {} } } } } }