1 package net.pterodactylus.sone.template
3 import net.pterodactylus.sone.core.*
4 import net.pterodactylus.sone.utils.*
5 import net.pterodactylus.util.template.*
10 * Renders all kinds of [LinkedElement]s.
12 class LinkedElementRenderFilter @Inject constructor(private val templateContextFactory: TemplateContextFactory) : Filter {
14 override fun format(templateContext: TemplateContext?, data: Any?, parameters: Map<String, Any?>?) =
16 data is LinkedElement && data.loading -> renderNotLoadedLinkedElement(data)
17 data is LinkedElement && data.properties["type"] == "image" -> renderLinkedImage(data)
18 data is LinkedElement && data.properties["type"] == "html" -> renderHtmlPage(data)
22 private fun renderLinkedImage(linkedElement: LinkedElement) =
24 val templateContext = templateContextFactory.createTemplateContext()
25 templateContext["link"] = linkedElement.link
26 it.also { loadedImageTemplate.render(templateContext, it) }
29 private fun renderHtmlPage(linkedElement: LinkedElement) =
31 val templateContext = templateContextFactory.createTemplateContext()
32 templateContext["link"] = linkedElement.link
33 templateContext["title"] = linkedElement.properties["title"] ?: "No title"
34 templateContext["description"] = linkedElement.properties["description"] ?: "No description"
35 it.also { loadedHtmlPageTemplate.render(templateContext, it) }
38 private fun renderNotLoadedLinkedElement(linkedElement: LinkedElement) =
40 val templateContext = templateContextFactory.createTemplateContext()
41 templateContext["link"] = linkedElement.link
42 it.also { notLoadedImageTemplate.render(templateContext, it) }
47 private val loadedImageTemplate = """<%include linked/image.html>""".asTemplate()
48 private val loadedHtmlPageTemplate = """<%include linked/html-page.html>""".asTemplate()
49 private val notLoadedImageTemplate = """<%include linked/notLoaded.html>""".asTemplate()