package space.kscience.snark import kotlinx.coroutines.runBlocking import kotlinx.html.FlowContent import kotlinx.html.TagConsumer import space.kscience.dataforge.data.Data import space.kscience.dataforge.data.await import space.kscience.dataforge.meta.* enum class Language { EN, RU } //TODO replace by VisionForge type typealias HtmlFragment = TagConsumer<*>.() -> Unit typealias HtmlData = Data<HtmlFragment> fun HtmlData(meta: Meta, content: TagConsumer<*>.() -> Unit): HtmlData = Data(content, meta) val HtmlData.id: String get() = meta["id"]?.string ?: "block[${hashCode()}]" val HtmlData.language: Language get() = meta["language"]?.enum<Language>() ?: Language.RU val HtmlData.order: Int? get() = meta["order"]?.int fun TagConsumer<*>.htmlData(data: HtmlData) = runBlocking { data.await().invoke(this@htmlData) } fun FlowContent.htmlData(data: HtmlData) = runBlocking { data.await().invoke(consumer) }