X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FLinkedElementRenderFilter.kt;h=e15f68ba2edeb0c44e86ea3cc9ab518f1129085c;hb=19e49c0a2463b90c3468903672d8ba600da217d2;hp=5de5dfe77e499ce5e084b96b44e7c9e53db9e070;hpb=f7d0c519d77d47e61f2b6accad8c7f16a785b8be;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 index 5de5dfe..e15f68b 100644 --- a/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt +++ b/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementRenderFilter.kt @@ -7,14 +7,16 @@ import net.pterodactylus.util.template.TemplateContextFactory import net.pterodactylus.util.template.TemplateParser import java.io.StringReader import java.io.StringWriter +import javax.inject.Inject /** * Renders all kinds of [LinkedElement]s. */ -class LinkedElementRenderFilter(private val templateContextFactory: TemplateContextFactory) : Filter { +class LinkedElementRenderFilter @Inject constructor(private val templateContextFactory: TemplateContextFactory): Filter { companion object { private val loadedImageTemplate = """<%include linked/image.html>""".parse() + private val loadedHtmlPageTemplate = """<%include linked/html-page.html>""".parse() private val notLoadedImageTemplate = """<%include linked/notLoaded.html>""".parse() private fun String.parse() = StringReader(this).use { TemplateParser.parse(it) }!! @@ -23,7 +25,8 @@ class LinkedElementRenderFilter(private val templateContextFactory: TemplateCont 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 } @@ -35,6 +38,15 @@ class LinkedElementRenderFilter(private val templateContextFactory: TemplateCont 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()