Compare commits
2 Commits
ee4972b25c
...
2affa210e1
Author | SHA1 | Date | |
---|---|---|---|
2affa210e1 | |||
e77e5632d3 |
11
src/index.rs
11
src/index.rs
@@ -1,4 +1,4 @@
|
||||
use crate::{language::language, page::new};
|
||||
use crate::{language::language, page::Page};
|
||||
use axum::http::HeaderMap;
|
||||
use axum_extra::extract::CookieJar;
|
||||
use maud::{html, Markup};
|
||||
@@ -8,7 +8,11 @@ pub(super) async fn index(cookies: CookieJar, headers: HeaderMap) -> Markup {
|
||||
|
||||
rust_i18n::set_locale(lang.to_locale());
|
||||
|
||||
new(
|
||||
let mut page = Page::new(lang);
|
||||
page.succ("Yeah! That worked!".into());
|
||||
page.err("Damn...".into());
|
||||
|
||||
page.content(
|
||||
html! {
|
||||
h1 { (t!("digital_shadows")) }
|
||||
hgroup {
|
||||
@@ -73,7 +77,6 @@ pub(super) async fn index(cookies: CookieJar, headers: HeaderMap) -> Markup {
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
lang,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
150
src/page.rs
150
src/page.rs
@@ -3,66 +3,114 @@ use maud::{html, Markup, DOCTYPE};
|
||||
|
||||
// TODO: set dynamic meta lang attribute
|
||||
|
||||
// TODO: remove function
|
||||
pub fn new(content: Markup, lang: Language) -> Markup {
|
||||
html! {
|
||||
(DOCTYPE)
|
||||
html lang=(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 { "Digital Shadows" }
|
||||
}
|
||||
body {
|
||||
header.container {
|
||||
nav {
|
||||
ul {
|
||||
li {
|
||||
a href="/" {
|
||||
strong { "Digital Shadows" }
|
||||
}
|
||||
}
|
||||
}
|
||||
ul {
|
||||
li {
|
||||
a href="/" {
|
||||
span role="img" aria-label="home" { "🏠" }
|
||||
}
|
||||
}
|
||||
li {
|
||||
a href="/game" {
|
||||
span role="img" aria-label="camera" { "📸" }
|
||||
}
|
||||
}
|
||||
li {
|
||||
span id="theme_switcher" {}
|
||||
}
|
||||
let page = Page::new(lang);
|
||||
page.content(content)
|
||||
}
|
||||
|
||||
li {
|
||||
button id="lang-toggle" lang=(lang.next_language()) {
|
||||
(lang.next_language())
|
||||
pub(crate) struct Page {
|
||||
lang: Language,
|
||||
succ: Option<String>,
|
||||
err: Option<String>,
|
||||
}
|
||||
|
||||
impl Page {
|
||||
pub fn new(lang: Language) -> Self {
|
||||
Self {
|
||||
lang,
|
||||
succ: None,
|
||||
err: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn succ(&mut self, msg: String) {
|
||||
self.succ = Some(msg);
|
||||
}
|
||||
|
||||
pub fn err(&mut self, msg: String) {
|
||||
self.err = Some(msg);
|
||||
}
|
||||
|
||||
fn has_msg(&self) -> bool {
|
||||
self.succ.is_some() || self.err.is_some()
|
||||
}
|
||||
|
||||
pub fn content(self, content: Markup) -> Markup {
|
||||
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 { "Digital Shadows" }
|
||||
}
|
||||
body {
|
||||
header.container {
|
||||
nav {
|
||||
ul {
|
||||
li {
|
||||
a href="/" {
|
||||
strong { "Digital Shadows" }
|
||||
}
|
||||
}
|
||||
}
|
||||
ul {
|
||||
li {
|
||||
a href="/" {
|
||||
span role="img" aria-label="home" { "🏠" }
|
||||
}
|
||||
}
|
||||
li {
|
||||
a href="/game" {
|
||||
span role="img" aria-label="camera" { "📸" }
|
||||
}
|
||||
}
|
||||
li {
|
||||
span id="theme_switcher" {}
|
||||
}
|
||||
|
||||
li {
|
||||
button id="lang-toggle" lang=(self.lang.next_language()) {
|
||||
(self.lang.next_language())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main.container {
|
||||
section { (content) }
|
||||
}
|
||||
|
||||
footer.container {
|
||||
small {
|
||||
"Footer "
|
||||
mark { "to be completed" }
|
||||
a href="#" { "with links" }
|
||||
" • "
|
||||
a target="_blank" href="https://www.digidow.eu/impressum/" { "Impressum" }
|
||||
main.container {
|
||||
@if self.has_msg() {
|
||||
section {
|
||||
@if let Some(succ) = self.succ {
|
||||
p class="succ" {
|
||||
(succ)
|
||||
}
|
||||
}
|
||||
@if let Some(err) = self.err{
|
||||
p class="err" {
|
||||
(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
section { (content) }
|
||||
}
|
||||
|
||||
footer.container {
|
||||
small {
|
||||
"Footer "
|
||||
mark { "to be completed" }
|
||||
a href="#" { "with links" }
|
||||
" • "
|
||||
a target="_blank" href="https://www.digidow.eu/impressum/" { "Impressum" }
|
||||
}
|
||||
}
|
||||
script src="/static/theme.js" {}
|
||||
}
|
||||
}
|
||||
script src="/static/theme.js" {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user