1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use handlebars::{Context, Handlebars, Helper, Output, RenderContext, RenderError};

pub fn theme_option(
    h: &Helper<'_, '_>,
    _r: &Handlebars,
    ctx: &Context,
    rc: &mut RenderContext<'_>,
    out: &mut dyn Output,
) -> Result<(), RenderError> {
    trace!("theme_option (handlebars helper)");

    let param = h.param(0).and_then(|v| v.value().as_str()).ok_or_else(|| {
        RenderError::new("Param 0 with String type is required for theme_option helper.")
    })?;

    let theme_name = rc
        .evaluate_absolute(ctx, "default_theme", true)?
        .as_str()
        .ok_or_else(|| RenderError::new("Type error for `default_theme`, string expected"))?;

    out.write(param)?;
    if param.to_lowercase() == theme_name.to_lowercase() {
        out.write(" (default)")?;
    }

    Ok(())
}