Prevent warning about platform type
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / template / LinkedElementRenderFilter.kt
1 package net.pterodactylus.sone.template
2
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
10
11 /**
12  * Renders all kinds of [LinkedElement]s.
13  */
14 class LinkedElementRenderFilter(private val templateContextFactory: TemplateContextFactory) : Filter {
15
16         companion object {
17                 private val loadedImageTemplate = """<%include linked/image.html>""".parse()
18                 private val notLoadedImageTemplate = """<%include linked/notLoaded.html>""".parse()
19
20                 private fun String.parse() = StringReader(this).use { TemplateParser.parse(it) }!!
21         }
22
23         override fun format(templateContext: TemplateContext?, data: Any?, parameters: Map<String, Any?>?) =
24                         when {
25                                 data is LinkedElement && data.loading -> renderNotLoadedLinkedElement(data)
26                                 data is LinkedElement -> renderLinkedImage(data)
27                                 else -> null
28                         }
29
30         private fun renderLinkedImage(linkedElement: LinkedElement) =
31                         StringWriter().use {
32                                 val templateContext = templateContextFactory.createTemplateContext()
33                                 templateContext["link"] = linkedElement.link
34                                 loadedImageTemplate.render(templateContext, it)
35                                 it
36                         }.toString()
37
38         private fun renderNotLoadedLinkedElement(linkedElement: LinkedElement) =
39                         StringWriter().use {
40                                 val templateContext = templateContextFactory.createTemplateContext()
41                                 templateContext["link"] = linkedElement.link
42                                 notLoadedImageTemplate.render(templateContext, it)
43                                 it
44                         }.toString()
45
46 }