Current scope: kotmark-renderer-kotlinx-html| all classes
|
io.heapy.kotmark.renderer.kotlinxhtml.adapters
Coverage Summary for Class: AlertsAdapterKt (io.heapy.kotmark.renderer.kotlinxhtml.adapters)
| Class | Method, % | Branch, % | Line, % | Instruction, % |
|---|---|---|---|---|
| AlertsAdapterKt | 100% (3/3) | 50% (7/14) | 90% (9/10) | 71.9% (46/64) |
| AlertsAdapterKt$alertsAdapter$2$1$1 | 100% (1/1) | 100% (2/2) | 100% (27/27) | |
| AlertsAdapterKt$alertsAdapter$2$1$1$1 | 100% (1/1) | 100% (2/2) | 100% (2/2) | 100% (16/16) |
| AlertsAdapterKt$alertsAdapter$lambda$1$$inlined$nodeRenderer$1 | 0% (0/1) | |||
| AlertsAdapterKt$alertsAdapter$lambda$1$$inlined$nodeRenderer$1$1 | 0% (0/2) | |||
| AlertsAdapterKt$alertsAdapter$lambda$1$$inlined$nodeRenderer$2 | 0% (0/1) | |||
| AlertsAdapterKt$alertsAdapter$lambda$1$$inlined$nodeRenderer$2$1 | 0% (0/2) | |||
| Total | 45.5% (5/11) | 56.2% (9/16) | 92.9% (13/14) | 83.2% (89/107) |
package io.heapy.kotmark.renderer.kotlinxhtml.adapters
import io.heapy.kotmark.ext.gfm.alerts.Alert
import io.heapy.kotmark.ext.gfm.alerts.AlertTitle
import io.heapy.kotmark.ext.gfm.alerts.AlertsExtension
import io.heapy.kotmark.renderer.kotlinxhtml.KotlinxHtmlAdapter
import io.heapy.kotmark.renderer.kotlinxhtml.nodeRenderer
/** Use the same type/title mapping as the parser when defining custom alert types. */
fun alertsAdapter(allowedTypes: Map<String, String> = AlertsExtension.STANDARD_TYPES): KotlinxHtmlAdapter {
val titles = allowedTypes.toMap()
require(titles.isNotEmpty() && titles.all { [type, title] -> type.isNotEmpty() && type == type.uppercase() && title.isNotEmpty() })
return KotlinxHtmlAdapter { configuration ->
configuration.nodeRenderer<Alert> { node ->
val title = titles[node.type] ?: error("Unknown alert type: ${node.type}")
val type = node.type.lowercase()
element(node, "div", linkedMapOf("class" to "markdown-alert markdown-alert-$type", "data-alert-type" to type)) {
element(node, "p", mapOf("class" to "markdown-alert-title")) {
val first = node.firstChild
if (first is AlertTitle) renderChildren(first) else text(title)
}
renderChildren(node)
}
}
// Title is emitted once by its parent.
configuration.nodeRenderer<AlertTitle> { }
}
}