119a622db2ef580c308d34a9b75b01594fe72701
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / ajax / GetReplyAjaxPage.kt
1 package net.pterodactylus.sone.web.ajax
2
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
11 import javax.inject.Inject
12
13 /**
14  * This AJAX page returns the details of a reply.
15  */
16 class GetReplyAjaxPage @Inject constructor(webInterface: WebInterface, private val template: Template) :
17                 LoggedInJsonPage("getReply.ajax", webInterface) {
18
19         override val needsFormPassword = false
20
21         override fun createJsonObject(currentSone: Sone, request: FreenetRequest) =
22                         request.parameters["reply"]
23                                         ?.let(core::getPostReply)
24                                         ?.let { it.toJson(currentSone, request) }
25                                         ?.let { replyJson ->
26                                                 createSuccessJsonObject().apply {
27                                                         put("reply", replyJson)
28                                                 }
29                                         } ?: createErrorJsonObject("invalid-reply-id")
30
31         private fun PostReply.toJson(currentSone: Sone, request: FreenetRequest) = jsonObject(*mapOf(
32                         "id" to id,
33                         "soneId" to sone.id,
34                         "postId" to postId,
35                         "time" to time,
36                         "html" to render(currentSone, request)
37         ).toList().toTypedArray())
38
39         private fun PostReply.render(currentSone: Sone, request: FreenetRequest) =
40                         webInterface.templateContextFactory.createTemplateContext().apply {
41                                 set("core", core)
42                                 set("request", request)
43                                 set("reply", this@render)
44                                 set("currentSone", currentSone)
45                         }.let { template.render(it) }
46
47 }