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.parameters
7 import net.pterodactylus.sone.utils.render
8 import net.pterodactylus.sone.web.WebInterface
9 import net.pterodactylus.sone.web.page.FreenetRequest
10 import net.pterodactylus.util.template.Template
13 * This AJAX page returns the details of a reply.
15 class GetReplyAjaxPage(webInterface: WebInterface, private val template: Template) : LoggedInJsonPage("getReply.ajax", webInterface) {
17 override val needsFormPassword = false
19 override fun createJsonObject(currentSone: Sone, request: FreenetRequest) =
20 request.parameters["reply"]
21 ?.let(core::getPostReply)
22 ?.let { it.toJson(currentSone, request) }
24 createSuccessJsonObject().apply {
25 put("reply", replyJson)
27 } ?: createErrorJsonObject("invalid-reply-id")
29 private fun PostReply.toJson(currentSone: Sone, request: FreenetRequest) = jsonObject(*mapOf(
34 "html" to render(currentSone, request)
35 ).toList().toTypedArray())
37 private fun PostReply.render(currentSone: Sone, request: FreenetRequest) =
38 webInterface.templateContextFactory.createTemplateContext().apply {
40 set("request", request)
41 set("reply", this@render)
42 set("currentSone", currentSone)
43 }.let { template.render(it) }