1 package net.pterodactylus.sone.web.ajax
3 import net.pterodactylus.sone.template.ParserFilter
4 import net.pterodactylus.sone.template.RenderFilter
5 import net.pterodactylus.sone.template.ShortenFilter
6 import net.pterodactylus.sone.text.TextFilter
7 import net.pterodactylus.sone.utils.headers
8 import net.pterodactylus.sone.utils.ifTrue
9 import net.pterodactylus.sone.utils.parameters
10 import net.pterodactylus.sone.web.WebInterface
11 import net.pterodactylus.sone.web.page.FreenetRequest
12 import net.pterodactylus.util.template.TemplateContext
13 import javax.inject.Inject
16 * Page that stores a user’s image modifications.
18 class EditImageAjaxPage @Inject constructor(webInterface: WebInterface,
19 private val parserFilter: ParserFilter,
20 private val shortenFilter: ShortenFilter,
21 private val renderFilter: RenderFilter) : JsonPage("editImage.ajax", webInterface) {
23 override fun createJsonObject(request: FreenetRequest) =
24 request.parameters["image"]
27 image.sone.isLocal.ifTrue {
29 request.parameters["moveLeft"] == "true" -> createSuccessJsonObject().apply {
30 put("sourceImageId", image.id)
31 put("destinationImageId", image.album.moveImageUp(image).id)
32 core.touchConfiguration()
34 request.parameters["moveRight"] == "true" -> createSuccessJsonObject().apply {
35 put("sourceImageId", image.id)
36 put("destinationImageId", image.album.moveImageDown(image).id)
37 core.touchConfiguration()
39 else -> request.parameters["title"]!!.let { title ->
40 title.trim().isNotBlank().ifTrue {
41 request.parameters["description"]!!.let { description ->
44 .setDescription(TextFilter.filter(request.headers["Host"], description))
45 .update().let { newImage ->
46 createSuccessJsonObject().apply {
47 put("title", newImage.title)
48 put("description", newImage.description)
49 put("parsedDescription", newImage.description.let {
50 parserFilter.format(TemplateContext(), it, mutableMapOf("sone" to image.sone)).let {
51 shortenFilter.format(TemplateContext(), it, mutableMapOf()).let {
52 renderFilter.format(TemplateContext(), it, mutableMapOf()) as String
56 core.touchConfiguration()
60 } ?: createErrorJsonObject("invalid-image-title")
63 } ?: createErrorJsonObject("not-authorized")
64 } ?: createErrorJsonObject("invalid-image-id")