X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fajax%2FGetLinkedElementAjaxPage.kt;fp=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fajax%2FGetLinkedElementAjaxPage.kt;h=285c479c603bdeae67df538485a8e78bc76649eb;hp=0000000000000000000000000000000000000000;hb=0f0f4c89310e912c996b766ebe170ecb0f20ddf0;hpb=5dab84b3d65734bd58dbe00d9ac951ca3ab2c532 diff --git a/src/main/kotlin/net/pterodactylus/sone/web/ajax/GetLinkedElementAjaxPage.kt b/src/main/kotlin/net/pterodactylus/sone/web/ajax/GetLinkedElementAjaxPage.kt new file mode 100644 index 0000000..285c479 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/web/ajax/GetLinkedElementAjaxPage.kt @@ -0,0 +1,48 @@ +package net.pterodactylus.sone.web.ajax + +import com.fasterxml.jackson.databind.JsonNode +import com.fasterxml.jackson.databind.ObjectMapper +import net.pterodactylus.sone.core.ElementLoader +import net.pterodactylus.sone.core.LinkedElement +import net.pterodactylus.sone.template.LinkedElementRenderFilter +import net.pterodactylus.sone.utils.jsonArray +import net.pterodactylus.sone.utils.jsonObject +import net.pterodactylus.sone.web.WebInterface +import net.pterodactylus.sone.web.page.FreenetRequest + +/** + * Renders linked elements after they have been loaded. + */ +class GetLinkedElementAjaxPage(webInterface: WebInterface, private val elementLoader: ElementLoader, private val linkedElementRenderFilter: LinkedElementRenderFilter): + JsonPage("getLinkedElement.ajax", webInterface) { + + override fun createJsonObject(request: FreenetRequest): JsonReturnObject = + request.httpRequest.getParam("elements", "[]").asJson() + .map(JsonNode::asText) + .map(elementLoader::loadElement) + .filterNot { it.loading } + .map { it to renderLinkedElement(it) } + .let { elements -> + jsonArray( + *(elements.map { element -> + jsonObject { + put("link", element.first.link) + put("html", element.second) + } + }.toTypedArray()) + ) + }.let { linkedElements -> + createSuccessJsonObject().apply { + put("linkedElements", linkedElements) + } + } + + override fun needsFormPassword() = false + override fun requiresLogin() = false + + private fun String.asJson() = ObjectMapper().readTree(this).asIterable() + + private fun renderLinkedElement(linkedElement: LinkedElement) = + linkedElementRenderFilter.format(null, linkedElement, emptyMap()) + +}