X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fajax%2FGetPostAjaxPage.kt;fp=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fajax%2FGetPostAjaxPage.kt;h=3c35125c623e769e4c30994124b9fd9ea3a7ea0e;hp=0000000000000000000000000000000000000000;hb=0197f5a0dda9f60255f4a19cabf7ef7f2f2eaa19;hpb=613d9d78ad0382c6efb834bdf0a479737b59dc0e diff --git a/src/main/kotlin/net/pterodactylus/sone/web/ajax/GetPostAjaxPage.kt b/src/main/kotlin/net/pterodactylus/sone/web/ajax/GetPostAjaxPage.kt new file mode 100644 index 0000000..3c35125 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/web/ajax/GetPostAjaxPage.kt @@ -0,0 +1,46 @@ +package net.pterodactylus.sone.web.ajax + +import net.pterodactylus.sone.data.Post +import net.pterodactylus.sone.data.Sone +import net.pterodactylus.sone.utils.jsonObject +import net.pterodactylus.sone.utils.let +import net.pterodactylus.sone.utils.parameters +import net.pterodactylus.sone.web.WebInterface +import net.pterodactylus.sone.web.page.FreenetRequest +import net.pterodactylus.util.template.Template +import net.pterodactylus.util.template.TemplateContext +import java.io.StringWriter + +/** + * This AJAX handler retrieves information and rendered representation of a [Post]. + */ +class GetPostAjaxPage(webInterface: WebInterface, private val postTemplate: Template) : LoggedInJsonPage("getPost.ajax", webInterface) { + + override fun needsFormPassword() = false + + override fun createJsonObject(currentSone: Sone, request: FreenetRequest) = + request.parameters["post"] + .let(webInterface.core::getPost) + .let { post -> + createSuccessJsonObject(). + put("post", jsonObject( + "id" to post.id, + "sone" to post.sone.id, + "time" to post.time, + "recipient" to post.recipientId.orNull(), + "html" to post.render(currentSone, request) + )) + } ?: createErrorJsonObject("invalid-post-id") + + private fun Post.render(currentSone: Sone, request: FreenetRequest) = + webInterface.templateContextFactory.createTemplateContext().apply { + set("core", webInterface.core) + set("request", request) + set("post", this@render) + set("currentSone", currentSone) + set("localSones", webInterface.core.localSones) + }.let { postTemplate.render(it) } + +} + +private fun Template.render(templateContext: TemplateContext) = StringWriter().use { it.also { render(templateContext, it) } }.toString()