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.*
10 import net.pterodactylus.util.template.Template
11 import javax.inject.Inject
14 * This AJAX page returns the details of a reply.
16 @ToadletPath("getReply.ajax")
17 class GetReplyAjaxPage @Inject constructor(webInterface: WebInterface, private val template: Template) : LoggedInJsonPage(webInterface) {
19 override val needsFormPassword = false
21 override fun createJsonObject(currentSone: Sone, request: FreenetRequest) =
22 request.parameters["reply"]
23 ?.let(core::getPostReply)
24 ?.let { it.toJson(currentSone, request) }
26 createSuccessJsonObject().apply {
27 put("reply", replyJson)
29 } ?: createErrorJsonObject("invalid-reply-id")
31 private fun PostReply.toJson(currentSone: Sone, request: FreenetRequest) = jsonObject(*mapOf(
36 "html" to render(currentSone, request)
37 ).toList().toTypedArray())
39 private fun PostReply.render(currentSone: Sone, request: FreenetRequest) =
40 webInterface.templateContextFactory.createTemplateContext().apply {
42 set("request", request)
43 set("reply", this@render)
44 set("currentSone", currentSone)
45 }.let { template.render(it) }