1 package net.pterodactylus.sone.template
3 import net.pterodactylus.sone.core.LinkedElement
4 import net.pterodactylus.util.template.Filter
5 import net.pterodactylus.util.template.TemplateContext
6 import net.pterodactylus.util.template.TemplateContextFactory
7 import net.pterodactylus.util.template.TemplateParser
8 import java.io.StringReader
9 import java.io.StringWriter
12 * Renders all kinds of [LinkedElement]s.
14 class LinkedElementRenderFilter(private val templateContextFactory: TemplateContextFactory) : Filter {
17 private val loadedImageTemplate = """<%include linked/image.html>""".parse()
18 private val notLoadedImageTemplate = """<%include linked/notLoaded.html>""".parse()
20 private fun String.parse() = StringReader(this).use { TemplateParser.parse(it) }
23 override fun format(templateContext: TemplateContext?, data: Any?, parameters: Map<String, Any?>?) =
25 data is LinkedElement && data.loading -> renderNotLoadedLinkedElement(data)
26 data is LinkedElement -> renderLinkedImage(data)
30 private fun renderLinkedImage(linkedElement: LinkedElement) =
32 val templateContext = templateContextFactory.createTemplateContext()
33 templateContext["link"] = linkedElement.link
34 loadedImageTemplate.render(templateContext, it)
38 private fun renderNotLoadedLinkedElement(linkedElement: LinkedElement) =
40 val templateContext = templateContextFactory.createTemplateContext()
41 templateContext["link"] = linkedElement.link
42 notLoadedImageTemplate.render(templateContext, it)