Cies
10/15/2024, 8:31 AM/** Evaluate a TemplateRenderer block into a String. Used in email rendering. */
fun stringFromHtml(renderer: TemplateRenderer): String {
return StringBuilder().apply {
append("<!DOCTYPE html>\n")
appendHTML().renderer()
}.toString()
}
/** Evaluate a TemplateRenderer block into a RePlay RenderHtml Result. <------- so this would be different for KTor! */
fun resultFromHtml(renderer: TemplateRenderer): RenderHtml {
return RenderHtml(stringFromHtml(renderer))
}
typealias TemplateRenderer = TagConsumer<*>.() -> Unit
typealias LayoutBuilder<T> = TagConsumer<*>.(data: T, renderer: TemplateRenderer) -> Unit
fun <T> layout(builder: LayoutBuilder<T>): LayoutBuilder<T> {
return { data, renderer -> builder(data, renderer) }
}
// In a render method we simply do:
fun render(input: Whatever): RenderHtml {
return resultFromHtml {
table {
tr {
+input.toString()
}
}
}
}