ca94423a9929683f55d194afa98472219d0e7406
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / template / LinkedElementsFilter.kt
1 package net.pterodactylus.sone.template
2
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
9
10 /**
11  * Filter that takes a number of pre-rendered [Part]s and replaces all identified links to freenet elements
12  * with [LinkedElement]s.
13  */
14 class LinkedElementsFilter(private val elementLoader: ElementLoader) : Filter {
15
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>()
23
24 }