X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FLinkedElementRenderFilter.kt;fp=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FLinkedElementRenderFilter.kt;h=6255f9dbf2ed7f24b0d4f7e20b46361786020ed8;hb=675710fc669a9f5ccfab42296a3aa0b822539e14;hp=0000000000000000000000000000000000000000;hpb=d8bf8d6a89ce08693868fa7fac5d18d6d31256ce;p=Sone.git
diff --git a/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt b/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt
new file mode 100644
index 0000000..6255f9d
--- /dev/null
+++ b/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt
@@ -0,0 +1,47 @@
+package net.pterodactylus.sone.template
+
+import net.pterodactylus.sone.core.LinkedElement
+import net.pterodactylus.sone.core.LinkedImage
+import net.pterodactylus.util.template.Filter
+import net.pterodactylus.util.template.TemplateContext
+import net.pterodactylus.util.template.TemplateContextFactory
+import net.pterodactylus.util.template.TemplateParser
+import java.io.StringReader
+import java.io.StringWriter
+
+/**
+ * Renders all kinds of [LinkedElement]s.
+ */
+class LinkedElementRenderFilter(private val templateContextFactory: TemplateContextFactory) : Filter {
+
+ companion object {
+ private val loadedImageTemplate = """""".parse()
+ private val notLoadedImageTemplate = """""".parse()
+
+ private fun String.parse() = StringReader(this).use { TemplateParser.parse(it) }
+ }
+
+ override fun format(templateContext: TemplateContext?, data: Any?, parameters: Map?) =
+ when {
+ data is LinkedElement && data.loading -> renderNotLoadedLinkedElement(data)
+ data is LinkedImage -> renderLinkedImage(data)
+ else -> null
+ }
+
+ private fun renderLinkedImage(linkedImage: LinkedImage) =
+ StringWriter().use {
+ val templateContext = templateContextFactory.createTemplateContext()
+ templateContext["link"] = linkedImage.link
+ loadedImageTemplate.render(templateContext, it)
+ it
+ }.toString()
+
+ private fun renderNotLoadedLinkedElement(linkedElement: LinkedElement) =
+ StringWriter().use {
+ val templateContext = templateContextFactory.createTemplateContext()
+ templateContext["link"] = linkedElement.link
+ notLoadedImageTemplate.render(templateContext, it)
+ it
+ }.toString()
+
+}