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