grain.social is a photo sharing platform built on atproto.
1use anyhow::Result;
2use minijinja::{Environment, context};
3use std::include_str;
4
5fn create_template_env() -> Environment<'static> {
6 let mut env = Environment::new();
7
8 // Add adaptive layout template
9 env.add_template(
10 "adaptive_layout.html",
11 include_str!("../templates/adaptive_layout.html"),
12 )
13 .unwrap();
14
15 // Add collage layout template
16 env.add_template(
17 "collage_layout.html",
18 include_str!("../templates/collage_layout.html"),
19 )
20 .unwrap();
21
22 env
23}
24
25pub fn generate_grid_html_with_uri(
26 gallery_uri: &str,
27 title: String,
28 handle: String,
29 variant: &str,
30) -> Result<String> {
31 let env = create_template_env();
32 println!(
33 "Using template: {}",
34 match variant {
35 "collage" => "collage_layout.html",
36 _ => "adaptive_layout.html",
37 }
38 );
39 let template_name = match variant {
40 "collage" => "collage_layout.html",
41 _ => "adaptive_layout.html", // Default to adaptive
42 };
43
44 let template = env.get_template(template_name)?;
45
46 let html = template.render(context! {
47 gallery_uri => gallery_uri,
48 title => title,
49 handle => handle,
50 })?;
51
52 Ok(html)
53}