use handlebars::Handlebars;
use serde_json::json;
pub mod types;
pub fn home(theme: String) -> String {
let reg = Handlebars::new();
let template = include_str!("templates/home.hbs");
let mut color = "#000000";
if theme == "dark" {
color = "#FFFFFF";
}
let page = reg.render_template(template, &json!({"theme": theme, "color": color}));
page.expect("Couldn't render")
}
pub fn error(message: impl Into<String>, theme: String) -> String {
let message = message.into();
let reg = Handlebars::new();
let template = include_str!("templates/error.hbs");
let page = reg.render_template(template, &json!({"theme": theme, "message": message}));
page.expect("Couldn't render")
}
pub fn card(sona: types::Sona, i: i32) -> String {
let reg = Handlebars::new();
let template = include_str!("templates/card.hbs");
let template_color = include_str!("templates/cardColor.hbs");
let template_avatar = include_str!("templates/cardAvatar.hbs");
let template_ref = include_str!("templates/cardRefsheetButton.hbs");
let template_gallery_item = include_str!("templates/cardGalleryItem.hbs");
let template_gallery = include_str!("templates/cardGallery.hbs");
let mut colors = "".to_owned();
let mut extra: Vec<String> = vec![];
let mut age: Option<String> = None;
let mut description = "".to_owned();
let mut avataralt = "".to_owned();
let mut avatar = "".to_owned();
let mut refsheet = "".to_owned();
let mut gallery = "".to_owned();
if let Some(c) = sona.colors {
for color in c {
colors = colors + reg.render_template(template_color, &json!({"color": color})).expect("Couldn't render").as_str();
}
}
if let Some(aa) = sona.avatarAlt { avataralt = aa; }
if let Some(a) = sona.avatar {
avatar = reg.render_template(template_avatar, &json!({"url": a, "alt": avataralt})).expect("Couldn't render");
}
if let Some(r) = sona.r#ref {
refsheet = reg.render_template(template_ref, &json!({"url": r})).expect("Couldn't render");
}
if let Some(g) = sona.gallery {
let mut is_first = true;
let mut gallery_items = "".to_owned();
for image in g {
let mut extra_class = "";
if is_first {
extra_class = "active";
}
let gctx = json!({
"src": image.image,
"alt": image.imageAlt,
"description": image.description,
"active": extra_class
});
gallery_items = gallery_items + reg.render_template(template_gallery_item, &gctx).expect("Couldn't render").as_str();
is_first = false;
}
gallery = reg.render_template(template_gallery, &json!({"images": gallery_items, "i": i.to_string()})).expect("Couldn't render");
}
if let Some(a) = sona.age {age = Some(format!("<p>Age: {}</p>", a));}
if let Some(p) = sona.pronouns { extra.push(p); }
if let Some(g) = sona.gender { extra.push(g); }
if let Some(s) = sona.species { extra.push(s); }
if let Some(d) = sona.description { description = d }
let ctx = json!({
"colors": colors,
"name": sona.name,
"extra": extra.join(" ∙ "),
"age": age,
"description": description,
"avatar": avatar,
"ref": refsheet,
"gallery": gallery
});
reg
.render_template(template, &ctx)
.expect("Couldn't render")
}
pub fn cardpage(theme: String, url: String, html: String) -> String {
let reg = Handlebars::new();
let template = include_str!("templates/cardPage.hbs");
reg
.render_template(template, &json!({"theme": theme, "content": html, "url": url}))
.expect("Couldn't render")
}