X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FLinkedElementRenderFilter.kt;h=1ecc0ddaac1892e9174a847beb7a47551c8afcd3;hp=8d328be99df8939871252a63d2f1626426a16c57;hb=7b1d9fb2dfd7859118d48d347becd08b88521586;hpb=550309db774fb837ba2172571b04c24ee417e4e8 diff --git a/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt b/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt index 8d328be..1ecc0dd 100644 --- a/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt +++ b/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt @@ -1,11 +1,10 @@ package net.pterodactylus.sone.template import net.pterodactylus.sone.core.LinkedElement +import net.pterodactylus.sone.utils.asTemplate 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 import javax.inject.Inject @@ -14,17 +13,11 @@ import javax.inject.Inject */ class LinkedElementRenderFilter @Inject constructor(private val templateContextFactory: TemplateContextFactory): Filter { - companion object { - private val loadedImageTemplate = """<%include linked/image.html>""".parse() - private val notLoadedImageTemplate = """<%include linked/notLoaded.html>""".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 LinkedElement -> renderLinkedImage(data) + data is LinkedElement && data.properties["type"] == "image" -> renderLinkedImage(data) + data is LinkedElement && data.properties["type"] == "html" -> renderHtmlPage(data) else -> null } @@ -32,16 +25,27 @@ class LinkedElementRenderFilter @Inject constructor(private val templateContextF StringWriter().use { val templateContext = templateContextFactory.createTemplateContext() templateContext["link"] = linkedElement.link - loadedImageTemplate.render(templateContext, it) - it + it.also { loadedImageTemplate.render(templateContext, it) } + }.toString() + + private fun renderHtmlPage(linkedElement: LinkedElement) = + StringWriter().use { + val templateContext = templateContextFactory.createTemplateContext() + templateContext["link"] = linkedElement.link + templateContext["title"] = linkedElement.properties["title"] ?: "No title" + templateContext["description"] = linkedElement.properties["description"] ?: "No description" + it.also { loadedHtmlPageTemplate.render(templateContext, it) } }.toString() private fun renderNotLoadedLinkedElement(linkedElement: LinkedElement) = StringWriter().use { val templateContext = templateContextFactory.createTemplateContext() templateContext["link"] = linkedElement.link - notLoadedImageTemplate.render(templateContext, it) - it + it.also { notLoadedImageTemplate.render(templateContext, it) } }.toString() } + +private val loadedImageTemplate = """<%include linked/image.html>""".asTemplate() +private val loadedHtmlPageTemplate = """<%include linked/html-page.html>""".asTemplate() +private val notLoadedImageTemplate = """<%include linked/notLoaded.html>""".asTemplate()