1 package net.pterodactylus.sone.template
3 import net.pterodactylus.sone.core.ElementLoader
4 import net.pterodactylus.sone.core.LinkedElement
5 import net.pterodactylus.sone.text.FreenetLinkPart
6 import net.pterodactylus.sone.text.Part
7 import net.pterodactylus.util.template.Filter
8 import net.pterodactylus.util.template.TemplateContext
11 * Filter that takes a number of pre-rendered [Part]s and replaces all identified links to freenet elements
12 * with [LinkedElement]s.
14 class LinkedElementsFilter(private val elementLoader: ElementLoader) : Filter {
16 @Suppress("UNCHECKED_CAST")
17 override fun format(templateContext: TemplateContext?, data: Any?, parameters: MutableMap<String, Any?>?) =
18 (data as? Iterable<Part>)
19 ?.filterIsInstance<FreenetLinkPart>()
20 ?.map { elementLoader.loadElement(it.link) }
21 ?.filter { !it.failed }
22 ?: listOf<LinkedElement>()