129 lines
3.2 KiB
Rust
129 lines
3.2 KiB
Rust
use std::fmt::Display;
|
|
|
|
use chrono::{
|
|
format::{DelayedFormat, StrftimeItems},
|
|
NaiveDate, NaiveDateTime, NaiveTime,
|
|
};
|
|
use maud::html;
|
|
use tracing::trace;
|
|
|
|
use crate::utils::DateTimeFormat;
|
|
use brass_db::models::UserFunction;
|
|
|
|
pub fn show_area_query(a: &Option<i32>, first: bool) -> askama::Result<String> {
|
|
let char = if first { '?' } else { '&' };
|
|
|
|
if let Some(a) = a {
|
|
Ok(format!("{}area={}", char, a))
|
|
} else {
|
|
Ok(String::new())
|
|
}
|
|
}
|
|
|
|
pub fn cond_show(show: &bool, text: &str) -> askama::Result<String> {
|
|
if *show {
|
|
Ok(String::from(text))
|
|
} else {
|
|
Ok(String::new())
|
|
}
|
|
}
|
|
|
|
pub fn insert_value<T>(option: &Option<T>) -> askama::Result<String>
|
|
where
|
|
T: Display,
|
|
{
|
|
if let Some(val) = option {
|
|
let escaped = escape_html(val.to_string());
|
|
let s = format!(r#"value="{escaped}""#);
|
|
return Ok(s);
|
|
}
|
|
|
|
Ok(String::new())
|
|
}
|
|
|
|
pub fn insert_time_value(option: &Option<NaiveTime>) -> askama::Result<String> {
|
|
if let Some(val) = option {
|
|
let s = val.format(r#"value="%H:%M""#).to_string();
|
|
return Ok(s);
|
|
}
|
|
|
|
Ok(String::new())
|
|
}
|
|
|
|
pub fn is_some_and_eq<T>(option: &Option<T>, other: &T) -> askama::Result<bool>
|
|
where
|
|
T: Eq,
|
|
{
|
|
Ok(option.as_ref().is_some_and(|x| x == other))
|
|
}
|
|
|
|
pub fn invert(b: &bool) -> askama::Result<bool> {
|
|
Ok(!b)
|
|
}
|
|
|
|
pub fn show_tree(f: &UserFunction) -> askama::Result<String> {
|
|
let html = html! {
|
|
div class="tags" {
|
|
@if f.is_posten() {
|
|
span class="tag is-primary is-light" { "Posten"}
|
|
}
|
|
@if f.is_wachhabender() {
|
|
span class="tag is-primary has-background-primary-85 has-text-primary-85-invert" { "Wachhabender"}
|
|
}
|
|
@if f.is_fuehrungsassistent() {
|
|
span class="tag is-primary" { "Führungsassistent"}
|
|
}
|
|
}
|
|
};
|
|
|
|
Ok(html.into_string())
|
|
}
|
|
|
|
pub fn fmt_date(v: &NaiveDate, format: DateTimeFormat) -> askama::Result<String> {
|
|
let format_string = format.into();
|
|
trace!(
|
|
format = format_string,
|
|
"formatting naivedate into string with format"
|
|
);
|
|
|
|
Ok(v.format_localized(format_string, chrono::Locale::de_DE)
|
|
.to_string())
|
|
}
|
|
|
|
pub fn fmt_datetime(v: &NaiveDateTime, format: DateTimeFormat) -> askama::Result<String> {
|
|
let format_string = format.into();
|
|
trace!(
|
|
format = format_string,
|
|
"formatting naivedatetime into string with format"
|
|
);
|
|
|
|
let locale = chrono::Locale::de_DE;
|
|
let out = DelayedFormat::new_with_locale(
|
|
Some(v.date()),
|
|
Some(v.time()),
|
|
StrftimeItems::new_with_locale(format_string, locale),
|
|
locale,
|
|
);
|
|
|
|
Ok(out.to_string())
|
|
}
|
|
|
|
pub fn fmt_time(v: &NaiveTime, format: DateTimeFormat) -> askama::Result<String> {
|
|
let format_string = format.into();
|
|
trace!(
|
|
format = format_string,
|
|
"formatting naivetime into string with format"
|
|
);
|
|
|
|
Ok(v.format(format_string).to_string())
|
|
}
|
|
|
|
fn escape_html(string: String) -> String {
|
|
string
|
|
.replace('&', "&")
|
|
.replace('<', "<")
|
|
.replace('>', ">")
|
|
.replace('"', """)
|
|
.replace('\'', "'")
|
|
}
|