main
use api::http::Html;
use i18n::{UiLocale, catalog};
use maud::html;
use crate::share::account::types::AgreementDoc;
use super::common;
pub fn page_agreement(doc: &AgreementDoc, html_content: &str, locale: UiLocale) -> Html<String> {
let body = html! {
div class="max-w-3xl mx-auto px-6 py-12" {
div class="mb-8" {
h1 class="text-3xl font-bold tracking-tight" { (doc.title) }
p class="mt-2 text-sm text-gray-500" {
(catalog::agreement_version(locale, &doc.version))
}
}
article class="prose prose-lg max-w-none" {
(maud::PreEscaped(html_content))
}
footer class="mt-12 border-t pt-6 text-sm text-gray-500" {
(catalog::agreement_footer(locale))
}
}
};
common::page_shell(&doc.title, body, locale)
}
pub fn page_verify_result(ok: bool, locale: UiLocale) -> Html<String> {
let title = if ok {
catalog::email_verified_title(locale)
} else {
catalog::verification_failed_title(locale)
};
let message = if ok {
catalog::email_verified_body(locale)
} else {
catalog::verification_failed_body(locale)
};
let (bg, title_color) = if ok {
("bg-green-50", "text-green-800")
} else {
("bg-red-50", "text-red-800")
};
let box_classes = format!("{bg} rounded-xl py-10 px-8");
let heading_classes = format!("{title_color} text-2xl font-bold");
let body = html! {
div class="max-w-md mx-auto px-6 py-20 text-center" {
div class=(box_classes) {
h1 class=(heading_classes) { (title) }
p class="mt-4 text-gray-600" { (message) }
}
}
};
common::page_shell(title, body, locale)
}
pub fn page_message(ok: bool, title: &str, message: &str, locale: UiLocale) -> Html<String> {
let bg = if ok { "bg-green-50" } else { "bg-blue-50" };
let title_color = if ok {
"text-green-800"
} else {
"text-gray-900"
};
let box_classes = format!("{bg} rounded-xl py-10 px-8");
let heading_classes = format!("{title_color} text-2xl font-bold");
let body = html! {
div class="max-w-md mx-auto px-6 py-20 text-center" {
div class=(box_classes) {
h1 class=(heading_classes) { (title) }
p class="mt-4 text-gray-600" { (message) }
}
}
};
common::page_shell(title, body, locale)
}
pub fn render_markdown(input: &str) -> String {
use pulldown_cmark::{Options, Parser, html};
let mut options = Options::empty();
options.insert(Options::ENABLE_TABLES);
options.insert(Options::ENABLE_STRIKETHROUGH);
let parser = Parser::new_ext(input, options);
let mut output = String::new();
html::push_html(&mut output, parser);
output
}