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 net.pterodactylus.util.template.TemplateContextFactory
12 import javax.inject.Inject
15 * This AJAX page returns the details of a reply.
17 @ToadletPath("getReply.ajax")
18 class GetReplyAjaxPage @Inject constructor(webInterface: WebInterface, val templateContextFactory: TemplateContextFactory, private val template: Template) : LoggedInJsonPage(webInterface) {
20 override val needsFormPassword = false
22 override fun createJsonObject(currentSone: Sone, request: FreenetRequest) =
23 request.parameters["reply"]
24 ?.let(core::getPostReply)
25 ?.let { it.toJson(currentSone, request) }
27 createSuccessJsonObject().apply {
28 put("reply", replyJson)
30 } ?: createErrorJsonObject("invalid-reply-id")
32 private fun PostReply.toJson(currentSone: Sone, request: FreenetRequest) = jsonObject(*mapOf(
37 "html" to render(currentSone, request)
38 ).toList().toTypedArray())
40 private fun PostReply.render(currentSone: Sone, request: FreenetRequest) =
41 templateContextFactory.createTemplateContext().apply {
43 set("request", request)
44 set("reply", this@render)
45 set("currentSone", currentSone)
46 }.let { template.render(it) }