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