X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FLinkedElementsFilter.kt;fp=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FLinkedElementsFilter.kt;h=f95d6c0baf6a901188111767552bcf2ee7d11af2;hp=0000000000000000000000000000000000000000;hb=675710fc669a9f5ccfab42296a3aa0b822539e14;hpb=d8bf8d6a89ce08693868fa7fac5d18d6d31256ce diff --git a/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementsFilter.kt b/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementsFilter.kt new file mode 100644 index 0000000..f95d6c0 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/template/LinkedElementsFilter.kt @@ -0,0 +1,23 @@ +package net.pterodactylus.sone.template + +import net.pterodactylus.sone.core.ElementLoader +import net.pterodactylus.sone.core.LinkedElement +import net.pterodactylus.sone.text.FreenetLinkPart +import net.pterodactylus.sone.text.Part +import net.pterodactylus.util.template.Filter +import net.pterodactylus.util.template.TemplateContext + +/** + * Filter that takes a number of pre-rendered [Part]s and replaces all identified links to freenet elements + * with [LinkedElement]s. + */ +class LinkedElementsFilter(private val elementLoader: ElementLoader) : Filter { + + @Suppress("UNCHECKED_CAST") + override fun format(templateContext: TemplateContext?, data: Any?, parameters: MutableMap?) = + (data as? Iterable) + ?.filterIsInstance() + ?.map { elementLoader.loadElement(it.link) } + ?: listOf() + +}