data is LinkedElement && data.loading -> renderNotLoadedLinkedElement(data)
data is LinkedElement && data.properties["type"] == "image" -> renderLinkedImage(data)
data is LinkedElement && data.properties["type"] == "html" -> renderHtmlPage(data)
+ data is LinkedElement && data.properties["type"] == "audio" -> renderAudioPlayer(data)
else -> null
}
private fun renderLinkedImage(linkedElement: LinkedElement) =
- StringWriter().use {
- val templateContext = templateContextFactory.createTemplateContext()
+ renderTemplate(loadedImageTemplate) { templateContext ->
templateContext["link"] = linkedElement.link
- it.also { loadedImageTemplate.render(templateContext, it) }
- }.toString()
+ }
private fun renderHtmlPage(linkedElement: LinkedElement) =
- StringWriter().use {
- val templateContext = templateContextFactory.createTemplateContext()
+ renderTemplate(loadedHtmlPageTemplate) { templateContext ->
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 renderAudioPlayer(linkedElement: LinkedElement) =
+ renderTemplate(loadedAudioTemplate) { templateContext ->
+ templateContext["link"] = linkedElement.link
+ }
private fun renderNotLoadedLinkedElement(linkedElement: LinkedElement) =
- StringWriter().use {
- val templateContext = templateContextFactory.createTemplateContext()
+ renderTemplate(notLoadedImageTemplate) { templateContext ->
templateContext["link"] = linkedElement.link
- it.also { notLoadedImageTemplate.render(templateContext, it) }
+ }
+
+ private fun renderTemplate(template: Template, fillTemplateContext: (TemplateContext) -> Unit) =
+ StringWriter().use { stringWriter ->
+ stringWriter.also {
+ templateContextFactory.createTemplateContext().also { templateContext ->
+ fillTemplateContext(templateContext)
+ template.render(templateContext, stringWriter)
+ }
+ }
}.toString()
}
private val loadedImageTemplate = """<%include linked/image.html>""".asTemplate()
private val loadedHtmlPageTemplate = """<%include linked/html-page.html>""".asTemplate()
+private val loadedAudioTemplate = """<%include linked/audio.html>""".asTemplate()
private val notLoadedImageTemplate = """<%include linked/notLoaded.html>""".asTemplate()