1 package net.pterodactylus.sone.template
3 import net.pterodactylus.sone.core.LinkedElement
4 import net.pterodactylus.sone.utils.asTemplate
5 import net.pterodactylus.util.template.Filter
6 import net.pterodactylus.util.template.TemplateContext
7 import net.pterodactylus.util.template.TemplateContextFactory
8 import java.io.StringWriter
9 import javax.inject.Inject
12 * Renders all kinds of [LinkedElement]s.
14 class LinkedElementRenderFilter @Inject constructor(private val templateContextFactory: TemplateContextFactory): Filter {
16 override fun format(templateContext: TemplateContext?, data: Any?, parameters: Map<String, Any?>?) =
18 data is LinkedElement && data.loading -> renderNotLoadedLinkedElement(data)
19 data is LinkedElement && data.properties["type"] == "image" -> renderLinkedImage(data)
20 data is LinkedElement && data.properties["type"] == "html" -> renderHtmlPage(data)
24 private fun renderLinkedImage(linkedElement: LinkedElement) =
26 val templateContext = templateContextFactory.createTemplateContext()
27 templateContext["link"] = linkedElement.link
28 it.also { loadedImageTemplate.render(templateContext, it) }
31 private fun renderHtmlPage(linkedElement: LinkedElement) =
33 val templateContext = templateContextFactory.createTemplateContext()
34 templateContext["link"] = linkedElement.link
35 templateContext["title"] = linkedElement.properties["title"] ?: "No title"
36 templateContext["description"] = linkedElement.properties["description"] ?: "No description"
37 it.also { loadedHtmlPageTemplate.render(templateContext, it) }
40 private fun renderNotLoadedLinkedElement(linkedElement: LinkedElement) =
42 val templateContext = templateContextFactory.createTemplateContext()
43 templateContext["link"] = linkedElement.link
44 it.also { notLoadedImageTemplate.render(templateContext, it) }
49 private val loadedImageTemplate = """<%include linked/image.html>""".asTemplate()
50 private val loadedHtmlPageTemplate = """<%include linked/html-page.html>""".asTemplate()
51 private val notLoadedImageTemplate = """<%include linked/notLoaded.html>""".asTemplate()