forked from kscience/visionforge
[WIP] new DF experiment
This commit is contained in:
parent
e50e266f94
commit
787c841a51
@ -8,7 +8,7 @@ plugins {
|
|||||||
// kotlin("js") version(kotlinVersion) apply false
|
// kotlin("js") version(kotlinVersion) apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
val dataforgeVersion by extra("0.4.3")
|
val dataforgeVersion by extra("0.5.0-dev-2")
|
||||||
val fxVersion by extra("11")
|
val fxVersion by extra("11")
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
@ -20,7 +20,7 @@ allprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "space.kscience"
|
group = "space.kscience"
|
||||||
version = "0.2.0-dev-22"
|
version = "0.2.0-dev-23"
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
|
@ -33,6 +33,7 @@ include(
|
|||||||
":visionforge-gdml",
|
":visionforge-gdml",
|
||||||
":visionforge-server",
|
":visionforge-server",
|
||||||
":visionforge-plotly",
|
":visionforge-plotly",
|
||||||
|
":visionforge-markdown",
|
||||||
":demo:solid-showcase",
|
":demo:solid-showcase",
|
||||||
":demo:gdml",
|
":demo:gdml",
|
||||||
":demo:muon-monitor",
|
":demo:muon-monitor",
|
||||||
|
@ -30,13 +30,13 @@ internal data class PropertyListener(
|
|||||||
@SerialName("vision")
|
@SerialName("vision")
|
||||||
public open class VisionBase(
|
public open class VisionBase(
|
||||||
override @Transient var parent: VisionGroup? = null,
|
override @Transient var parent: VisionGroup? = null,
|
||||||
protected var properties: Config? = null
|
protected var properties: MutableItemProvider? = null
|
||||||
) : Vision {
|
) : Vision {
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
protected fun getOrCreateProperties(): Config {
|
protected fun getOrCreateProperties(): MutableItemProvider {
|
||||||
if (properties == null) {
|
if (properties == null) {
|
||||||
val newProperties = Config()
|
val newProperties = MetaBuilder()
|
||||||
properties = newProperties
|
properties = newProperties
|
||||||
}
|
}
|
||||||
return properties!!
|
return properties!!
|
||||||
@ -46,7 +46,7 @@ public open class VisionBase(
|
|||||||
* A fast accessor method to get own property (no inheritance or styles
|
* A fast accessor method to get own property (no inheritance or styles
|
||||||
*/
|
*/
|
||||||
override fun getOwnProperty(name: Name): MetaItem? = if (name == Name.EMPTY) {
|
override fun getOwnProperty(name: Name): MetaItem? = if (name == Name.EMPTY) {
|
||||||
properties?.asMetaItem()
|
properties?.rootItem
|
||||||
} else {
|
} else {
|
||||||
properties?.getItem(name)
|
properties?.getItem(name)
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ public class VisionChangeBuilder : VisionContainerBuilder<Vision> {
|
|||||||
|
|
||||||
private var reset: Boolean = false
|
private var reset: Boolean = false
|
||||||
private var vision: Vision? = null
|
private var vision: Vision? = null
|
||||||
private val propertyChange = Config()
|
private val propertyChange = MetaBuilder()
|
||||||
private val children: HashMap<Name, VisionChangeBuilder> = HashMap()
|
private val children: HashMap<Name, VisionChangeBuilder> = HashMap()
|
||||||
|
|
||||||
public fun isEmpty(): Boolean = propertyChange.isEmpty() && propertyChange.isEmpty() && children.isEmpty()
|
public fun isEmpty(): Boolean = propertyChange.isEmpty() && propertyChange.isEmpty() && children.isEmpty()
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package space.kscience.visionforge
|
package space.kscience.visionforge
|
||||||
|
|
||||||
import space.kscience.dataforge.meta.Config
|
import space.kscience.dataforge.meta.*
|
||||||
import space.kscience.dataforge.meta.MetaItem
|
|
||||||
import space.kscience.dataforge.meta.get
|
|
||||||
import space.kscience.dataforge.meta.set
|
|
||||||
import space.kscience.dataforge.names.Name
|
import space.kscience.dataforge.names.Name
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -20,7 +17,7 @@ public interface VisionPropertyContainer<out V: Vision> {
|
|||||||
public fun setProperty(name: Name, item: MetaItem?, notify: Boolean = true)
|
public fun setProperty(name: Name, item: MetaItem?, notify: Boolean = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
public open class SimpleVisionPropertyContainer<out V: Vision>(protected val config: Config): VisionPropertyContainer<V>{
|
public open class SimpleVisionPropertyContainer<out V: Vision>(protected val config: ObservableMeta): VisionPropertyContainer<V>{
|
||||||
override fun getProperty(
|
override fun getProperty(
|
||||||
name: Name,
|
name: Name,
|
||||||
inherit: Boolean,
|
inherit: Boolean,
|
||||||
|
@ -2,10 +2,11 @@ package space.kscience.visionforge
|
|||||||
|
|
||||||
import space.kscience.dataforge.meta.Scheme
|
import space.kscience.dataforge.meta.Scheme
|
||||||
import space.kscience.dataforge.meta.SchemeSpec
|
import space.kscience.dataforge.meta.SchemeSpec
|
||||||
|
import space.kscience.dataforge.meta.asObservable
|
||||||
import space.kscience.dataforge.meta.descriptors.NodeDescriptor
|
import space.kscience.dataforge.meta.descriptors.NodeDescriptor
|
||||||
import space.kscience.dataforge.meta.descriptors.NodeDescriptorBuilder
|
import space.kscience.dataforge.meta.descriptors.NodeDescriptorBuilder
|
||||||
import space.kscience.dataforge.meta.descriptors.ValueDescriptorBuilder
|
import space.kscience.dataforge.meta.descriptors.ValueDescriptorBuilder
|
||||||
import space.kscience.dataforge.meta.toConfig
|
import space.kscience.dataforge.meta.toMutableMeta
|
||||||
import space.kscience.dataforge.values.ValueType
|
import space.kscience.dataforge.values.ValueType
|
||||||
import kotlin.reflect.KProperty1
|
import kotlin.reflect.KProperty1
|
||||||
import kotlin.reflect.typeOf
|
import kotlin.reflect.typeOf
|
||||||
@ -53,7 +54,7 @@ public inline fun <S : Scheme, reified T> NodeDescriptorBuilder.value(
|
|||||||
}
|
}
|
||||||
|
|
||||||
public fun NodeDescriptor.copy(block: NodeDescriptorBuilder.() -> Unit = {}): NodeDescriptor {
|
public fun NodeDescriptor.copy(block: NodeDescriptorBuilder.() -> Unit = {}): NodeDescriptor {
|
||||||
return NodeDescriptorBuilder(toMeta().toConfig()).apply(block)
|
return NodeDescriptorBuilder(toMeta().toMutableMeta().asObservable()).apply(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
public inline fun <S : Scheme, reified T : Scheme> NodeDescriptorBuilder.scheme(
|
public inline fun <S : Scheme, reified T : Scheme> NodeDescriptorBuilder.scheme(
|
||||||
|
44
visionforge-markdown/build.gradle.kts
Normal file
44
visionforge-markdown/build.gradle.kts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
plugins {
|
||||||
|
id("ru.mipt.npm.gradle.mpp")
|
||||||
|
}
|
||||||
|
|
||||||
|
val markdownVersion = "0.2.4"
|
||||||
|
|
||||||
|
kscience {
|
||||||
|
useSerialization()
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
js {
|
||||||
|
//binaries.library()
|
||||||
|
binaries.executable()
|
||||||
|
browser {
|
||||||
|
webpackTask {
|
||||||
|
outputFileName = "js/visionforge-markdown.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
jvm {
|
||||||
|
val processResourcesTaskName =
|
||||||
|
compilations[org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.MAIN_COMPILATION_NAME]
|
||||||
|
.processResourcesTaskName
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val jsBrowserDistribution by tasks.getting
|
||||||
|
|
||||||
|
tasks.getByName<ProcessResources>("jvmProcessResources") {
|
||||||
|
dependsOn(jsBrowserDistribution)
|
||||||
|
from(jsBrowserDistribution)
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
commonMain {
|
||||||
|
dependencies {
|
||||||
|
api(project(":visionforge-core"))
|
||||||
|
api("org.jetbrains:markdown:$markdownVersion")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package space.kscience.visionforge.markup
|
||||||
|
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.modules.SerializersModule
|
||||||
|
import kotlinx.serialization.modules.polymorphic
|
||||||
|
import kotlinx.serialization.modules.subclass
|
||||||
|
import space.kscience.dataforge.meta.string
|
||||||
|
import space.kscience.dataforge.names.Name
|
||||||
|
import space.kscience.dataforge.names.toName
|
||||||
|
import space.kscience.visionforge.Vision
|
||||||
|
import space.kscience.visionforge.VisionBase
|
||||||
|
import space.kscience.visionforge.setProperty
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
@SerialName("vision.markup")
|
||||||
|
public class VisionOfMarkup(
|
||||||
|
public val format: String = COMMONMARK_FORMAT
|
||||||
|
) : VisionBase() {
|
||||||
|
|
||||||
|
//TODO add templates
|
||||||
|
|
||||||
|
public var content: String?
|
||||||
|
get() = getOwnProperty(CONTENT_PROPERTY_KEY).string
|
||||||
|
set(value) {
|
||||||
|
setProperty(CONTENT_PROPERTY_KEY, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
public companion object {
|
||||||
|
public val CONTENT_PROPERTY_KEY: Name = "content".toName()
|
||||||
|
public const val COMMONMARK_FORMAT: String = "markdown.commonmark"
|
||||||
|
public const val GFM_FORMAT: String = "markdown.gfm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal val markupSerializersModule = SerializersModule {
|
||||||
|
polymorphic(Vision::class) {
|
||||||
|
subclass(VisionOfMarkup.serializer())
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package space.kscience.visionforge.markup
|
||||||
|
|
||||||
|
import kotlinx.html.TagConsumer
|
||||||
|
import kotlinx.html.div
|
||||||
|
import kotlinx.html.unsafe
|
||||||
|
import org.intellij.markdown.flavours.MarkdownFlavourDescriptor
|
||||||
|
import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor
|
||||||
|
import org.intellij.markdown.html.HtmlGenerator
|
||||||
|
import org.intellij.markdown.parser.MarkdownParser
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render markdown inside kotlinx-html tag
|
||||||
|
*/
|
||||||
|
public fun <T> TagConsumer<T>.markdown(
|
||||||
|
flavour: MarkdownFlavourDescriptor = CommonMarkFlavourDescriptor(),
|
||||||
|
block: () -> String
|
||||||
|
): T {
|
||||||
|
val src = block()
|
||||||
|
val parsedTree = MarkdownParser(flavour).buildMarkdownTreeFromString(src)
|
||||||
|
return div("visionforge-markdown") {
|
||||||
|
unsafe {
|
||||||
|
+HtmlGenerator(src, parsedTree, flavour).generateHtml()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package space.kscience.visionforge.markup
|
||||||
|
|
||||||
|
import kotlinx.browser.document
|
||||||
|
import kotlinx.serialization.modules.SerializersModule
|
||||||
|
import org.w3c.dom.Element
|
||||||
|
import space.kscience.dataforge.context.Context
|
||||||
|
import space.kscience.dataforge.context.PluginFactory
|
||||||
|
import space.kscience.dataforge.context.PluginTag
|
||||||
|
import space.kscience.dataforge.meta.Meta
|
||||||
|
import space.kscience.visionforge.ElementVisionRenderer
|
||||||
|
import space.kscience.visionforge.Vision
|
||||||
|
import space.kscience.visionforge.VisionClient
|
||||||
|
import space.kscience.visionforge.VisionPlugin
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
public class MarkupPlugin : VisionPlugin(), ElementVisionRenderer {
|
||||||
|
public val visionClient: VisionClient by require(VisionClient)
|
||||||
|
override val tag: PluginTag get() = Companion.tag
|
||||||
|
override val visionSerializersModule: SerializersModule get() = markupSerializersModule
|
||||||
|
|
||||||
|
override fun rateVision(vision: Vision): Int = when (vision) {
|
||||||
|
is VisionOfMarkup -> ElementVisionRenderer.DEFAULT_RATING
|
||||||
|
else -> ElementVisionRenderer.ZERO_RATING
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun render(element: Element, vision: Vision, meta: Meta) {
|
||||||
|
require(vision is VisionOfMarkup) { "The vision is not a markup vision" }
|
||||||
|
val div = document.createElement("div")
|
||||||
|
element.append(div)
|
||||||
|
TODO()
|
||||||
|
}
|
||||||
|
|
||||||
|
public companion object : PluginFactory<MarkupPlugin> {
|
||||||
|
override val tag: PluginTag = PluginTag("vision.markup", PluginTag.DATAFORGE_GROUP)
|
||||||
|
override val type: KClass<MarkupPlugin> = MarkupPlugin::class
|
||||||
|
override fun invoke(meta: Meta, context: Context): MarkupPlugin = MarkupPlugin()
|
||||||
|
}
|
||||||
|
}
|
@ -2,7 +2,6 @@ package space.kscience.visionforge.plotly
|
|||||||
|
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import space.kscience.dataforge.meta.Config
|
|
||||||
import space.kscience.dataforge.misc.DFExperimental
|
import space.kscience.dataforge.misc.DFExperimental
|
||||||
import space.kscience.plotly.Plot
|
import space.kscience.plotly.Plot
|
||||||
import space.kscience.plotly.Plotly
|
import space.kscience.plotly.Plotly
|
||||||
|
@ -54,7 +54,7 @@ public class VisionServer internal constructor(
|
|||||||
private val application: Application,
|
private val application: Application,
|
||||||
private val rootRoute: String,
|
private val rootRoute: String,
|
||||||
) : Configurable, CoroutineScope by application {
|
) : Configurable, CoroutineScope by application {
|
||||||
override val config: Config = Config()
|
override val config: ObservableMeta = ObservableMeta()
|
||||||
public var updateInterval: Long by config.long(300, key = UPDATE_INTERVAL_KEY)
|
public var updateInterval: Long by config.long(300, key = UPDATE_INTERVAL_KEY)
|
||||||
public var cacheFragments: Boolean by config.boolean(true)
|
public var cacheFragments: Boolean by config.boolean(true)
|
||||||
public var dataEmbed: Boolean by config.boolean(true, "data.embed".toName())
|
public var dataEmbed: Boolean by config.boolean(true, "data.embed".toName())
|
||||||
|
@ -2,7 +2,7 @@ package space.kscience.visionforge.solid
|
|||||||
|
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import space.kscience.dataforge.meta.Config
|
import space.kscience.dataforge.meta.ObservableMeta
|
||||||
import space.kscience.visionforge.*
|
import space.kscience.visionforge.*
|
||||||
import kotlin.math.PI
|
import kotlin.math.PI
|
||||||
import kotlin.math.cos
|
import kotlin.math.cos
|
||||||
@ -95,7 +95,7 @@ public class Extruded(
|
|||||||
public class ExtrudeBuilder(
|
public class ExtrudeBuilder(
|
||||||
public var shape: List<Point2D> = emptyList(),
|
public var shape: List<Point2D> = emptyList(),
|
||||||
public var layers: ArrayList<Layer> = ArrayList(),
|
public var layers: ArrayList<Layer> = ArrayList(),
|
||||||
config: Config = Config()
|
config: ObservableMeta = ObservableMeta()
|
||||||
) : SimpleVisionPropertyContainer<Extruded>(config) {
|
) : SimpleVisionPropertyContainer<Extruded>(config) {
|
||||||
public fun shape(block: Shape2DBuilder.() -> Unit) {
|
public fun shape(block: Shape2DBuilder.() -> Unit) {
|
||||||
this.shape = Shape2DBuilder().apply(block).build()
|
this.shape = Shape2DBuilder().apply(block).build()
|
||||||
|
Loading…
Reference in New Issue
Block a user