forked from SPC/spc-site
35 lines
936 B
Kotlin
35 lines
936 B
Kotlin
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)
|
|
}
|
|
|