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() + +}