1 package net.pterodactylus.sone.web.ajax
3 import net.pterodactylus.sone.data.PostReply
4 import net.pterodactylus.sone.data.Sone
5 import net.pterodactylus.sone.utils.jsonObject
6 import net.pterodactylus.sone.utils.let
7 import net.pterodactylus.sone.utils.parameters
8 import net.pterodactylus.sone.utils.render
9 import net.pterodactylus.sone.web.WebInterface
10 import net.pterodactylus.sone.web.page.FreenetRequest
11 import net.pterodactylus.util.template.Template
14 * This AJAX page returns the details of a reply.
16 class GetReplyAjaxPage(webInterface: WebInterface, private val template: Template) : LoggedInJsonPage("getReply.ajax", webInterface) {
18 override val needsFormPassword = false
20 override fun createJsonObject(currentSone: Sone, request: FreenetRequest) =
21 request.parameters["reply"]
22 ?.let(core::getPostReply)
23 ?.let { it.toJson(currentSone, request) }
25 createSuccessJsonObject().apply {
26 put("reply", replyJson)
28 } ?: createErrorJsonObject("invalid-reply-id")
30 private fun PostReply.toJson(currentSone: Sone, request: FreenetRequest) = jsonObject(*mapOf(
35 "html" to render(currentSone, request)
36 ).toList().toTypedArray())
38 private fun PostReply.render(currentSone: Sone, request: FreenetRequest) =
39 webInterface.templateContextFactory.createTemplateContext().apply {
41 set("request", request)
42 set("reply", this@render)
43 set("currentSone", currentSone)
44 }.let { template.render(it) }