use crate::error::BuildError;
use crate::error::{anyhow::Context, ScrapsResult};
use crate::usecase::build::html::cdn_versions::CDN_VERSIONS;
use crate::usecase::build::model::html::HtmlMetadata;
use chrono_tz::Tz;
use once_cell::sync::Lazy;
use scraps_libs::model::base_url::BaseUrl;
use tera::Tera;
static SCRAP_TERA: Lazy<Tera> = Lazy::new(|| {
let mut tera = Tera::default();
crate::service::tera_filters::register(&mut tera);
tera.add_raw_templates(vec![
(
"__builtins/base.html",
include_str!("../builtins/base.html"),
),
(
"__builtins/macros.html",
include_str!("../builtins/macros.html"),
),
(
"__builtins/scrap.html",
include_str!("../builtins/scrap.html"),
),
])
.unwrap();
tera
});
pub fn tera(template_dir: &str) -> ScrapsResult<Tera> {
let mut tera = SCRAP_TERA.clone();
tera.load_from_glob(template_dir)
.context(BuildError::RenderHtml)?;
Ok(tera)
}
pub fn context(base_url: &BaseUrl, timezone: Tz, metadata: &HtmlMetadata) -> tera::Context {
let mut context = tera::Context::new();
context.insert("base_url", &base_url.as_url());
context.insert("lang_code", &metadata.lang_code().to_string());
context.insert("timezone", &timezone);
context.insert("title", &metadata.title());
context.insert("description", &metadata.description());
context.insert("favicon", &metadata.favicon());
context.insert("cdn", &CDN_VERSIONS);
context
}