diff --git a/dataforge-output/dataforge-output-html/src/commonMain/kotlin/hep/dataforge/output/html/HtmlRenderer.kt b/dataforge-output/dataforge-output-html/src/commonMain/kotlin/hep/dataforge/output/html/HtmlRenderer.kt index c0aeaaab..25cf2116 100644 --- a/dataforge-output/dataforge-output-html/src/commonMain/kotlin/hep/dataforge/output/html/HtmlRenderer.kt +++ b/dataforge-output/dataforge-output-html/src/commonMain/kotlin/hep/dataforge/output/html/HtmlRenderer.kt @@ -1,6 +1,7 @@ package hep.dataforge.output.html import hep.dataforge.context.Context +import hep.dataforge.meta.DFExperimental import hep.dataforge.meta.Meta import hep.dataforge.output.Output import hep.dataforge.output.Renderer @@ -10,12 +11,14 @@ import hep.dataforge.provider.Type import hep.dataforge.provider.top import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.html.FlowContent import kotlinx.html.TagConsumer import kotlinx.html.p import kotlin.reflect.KClass -class HtmlRenderer(override val context: Context, private val consumer: TagConsumer<*>) : Renderer { +@DFExperimental +public class HtmlRenderer(override val context: Context, private val consumer: TagConsumer<*>) : Renderer { private val cache = HashMap, HtmlBuilder<*>>() /** @@ -42,7 +45,7 @@ class HtmlRenderer(override val context: Context, private val consumer: } context.launch(Dispatchers.Output) { @Suppress("UNCHECKED_CAST") - (builder as HtmlBuilder).run { consumer.render(obj) } + (builder as HtmlBuilder).run { render(obj) } } } } @@ -51,29 +54,29 @@ class HtmlRenderer(override val context: Context, private val consumer: * A text or binary renderer based on [Renderer] */ @Type(HTML_CONVERTER_TYPE) -interface HtmlBuilder { +public interface HtmlBuilder { /** * The priority of this renderer compared to other renderers */ - val priority: Int + public val priority: Int /** * The type of the content served by this renderer */ - val type: KClass + public val type: KClass - suspend fun TagConsumer<*>.render(obj: T) + public suspend fun FlowContent.render(obj: T) - companion object { - const val HTML_CONVERTER_TYPE = "dataforge.htmlBuilder" + public companion object { + public const val HTML_CONVERTER_TYPE: String = "dataforge.htmlBuilder" } } -object DefaultHtmlBuilder : HtmlBuilder { +public object DefaultHtmlBuilder : HtmlBuilder { override val priority: Int = Int.MAX_VALUE override val type: KClass = Any::class - override suspend fun TagConsumer<*>.render(obj: Any) { + override suspend fun FlowContent.render(obj: Any) { p { +obj.toString() } } } \ No newline at end of file