1 package net.pterodactylus.sone.web.ajax
3 import net.pterodactylus.sone.data.Post
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 handler retrieves information and rendered representation of a [Post].
17 @ToadletPath("getPost.ajax")
18 class GetPostAjaxPage @Inject constructor(webInterface: WebInterface, private val templateContextFactory: TemplateContextFactory, private val postTemplate: Template) : LoggedInJsonPage(webInterface) {
20 override val needsFormPassword = false
22 override fun createJsonObject(currentSone: Sone, request: FreenetRequest) =
23 request.parameters["post"]
26 createSuccessJsonObject().
27 put("post", jsonObject(
29 "sone" to post.sone.id,
31 "recipient" to post.recipientId.orNull(),
32 "html" to post.render(currentSone, request)
34 } ?: createErrorJsonObject("invalid-post-id")
36 private fun Post.render(currentSone: Sone, request: FreenetRequest) =
37 templateContextFactory.createTemplateContext().apply {
39 set("request", request)
40 set("post", this@render)
41 set("currentSone", currentSone)
42 set("localSones", core.localSones)
43 }.let { postTemplate.render(it) }