Fix plugin resolution. Remove Global.visionManager

This commit is contained in:
2025-02-11 08:24:03 +03:00
parent 674ade5a59
commit 5a847141d0
15 changed files with 68 additions and 80 deletions

View File

@@ -2,14 +2,14 @@ import org.jetbrains.compose.web.css.*
import org.jetbrains.compose.web.dom.Div
import org.jetbrains.compose.web.renderComposable
import space.kscience.dataforge.context.Context
import space.kscience.plotly.PlotlyJSPlugin
import space.kscience.plotly.PlotlyJsPlugin
import space.kscience.plotly.models.Trace
import space.kscience.plotly.models.scatter
import space.kscience.visionforge.Colors
import space.kscience.visionforge.html.Tabs
import space.kscience.visionforge.html.VisionForgeStyles
import space.kscience.visionforge.html.startApplication
import space.kscience.visionforge.markup.MarkupPlugin
import space.kscience.visionforge.markup.MarkupJsPlugin
import space.kscience.visionforge.solid.*
import space.kscience.visionforge.solid.three.ThreePlugin
import space.kscience.visionforge.solid.three.compose.ThreeView
@@ -25,8 +25,8 @@ fun Trace.appendXYLatest(x: Number, y: Number, history: Int = 400, xErr: Number?
public fun main() {
val playgroundContext = Context {
plugin(ThreePlugin)
plugin(PlotlyJSPlugin)
plugin(MarkupPlugin)
plugin(PlotlyJsPlugin)
plugin(MarkupJsPlugin)
}
startApplication { document ->

View File

@@ -1,16 +1,16 @@
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.plotly.PlotlyJSPlugin
import space.kscience.plotly.PlotlyJsPlugin
import space.kscience.visionforge.html.runVisionClient
import space.kscience.visionforge.jupyter.VFNotebookClient
import space.kscience.visionforge.markup.MarkupPlugin
import space.kscience.visionforge.markup.MarkupJsPlugin
import space.kscience.visionforge.solid.three.ThreePlugin
import space.kscience.visionforge.tables.TableVisionJsPlugin
@DFExperimental
fun main() = runVisionClient {
plugin(ThreePlugin)
plugin(PlotlyJSPlugin)
plugin(MarkupPlugin)
plugin(PlotlyJsPlugin)
plugin(MarkupJsPlugin)
plugin(TableVisionJsPlugin)
plugin(VFNotebookClient)
}

View File

@@ -5,7 +5,6 @@ import io.ktor.server.engine.embeddedServer
import io.ktor.server.http.content.staticResources
import io.ktor.server.routing.routing
import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.Global
import space.kscience.plotly.PlotlyPlugin
import space.kscience.visionforge.html.*
import space.kscience.visionforge.markup.MarkupPlugin
@@ -19,6 +18,13 @@ import space.kscience.visionforge.visionManager
import java.awt.Desktop
import java.nio.file.Path
val context = Context("playground") {
plugin(Solids)
plugin(PlotlyPlugin)
plugin(MarkupPlugin)
plugin(TableVisionPlugin)
}
public fun makeVisionFile(
path: Path? = null,
@@ -27,7 +33,7 @@ public fun makeVisionFile(
show: Boolean = true,
content: HtmlVisionFragment,
): Unit {
val actualPath = VisionPage(Global.visionManager, content = content).makeFile(path) { actualPath ->
val actualPath = VisionPage(context.visionManager, content = content).makeFile(path) { actualPath ->
mapOf(
"title" to VisionPage.title(title),
"playground" to VisionPage.importScriptHeader(
@@ -46,13 +52,6 @@ public suspend fun serve(
routeConfiguration: VisionRoute.() -> Unit = {},
content: HtmlVisionFragment,
) {
val context = Context("playground") {
plugin(Solids)
plugin(PlotlyPlugin)
plugin(MarkupPlugin)
plugin(TableVisionPlugin)
}
val server = embeddedServer(CIO, port = 7779) {
routing {
staticResources("", null, null)

View File

@@ -1,16 +1,20 @@
package ru.mipt.npm.sat
import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.request
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.visionforge.html.ResourceLocation
import space.kscience.visionforge.solid.box
import space.kscience.visionforge.solid.invoke
import space.kscience.visionforge.solid.material
import space.kscience.visionforge.solid.solid
import space.kscience.visionforge.solid.*
import space.kscience.visionforge.three.makeThreeJsFile
val context = Context("Sat-server") {
plugin(Solids)
}
@OptIn(DFExperimental::class)
fun main() = makeThreeJsFile(resourceLocation = ResourceLocation.SYSTEM) {
vision ("canvas") {
fun main() = context.request(Solids).makeThreeJsFile(resourceLocation = ResourceLocation.SYSTEM) {
vision("canvas") {
solid {
box(100, 100, 100)
material {

View File

@@ -28,11 +28,13 @@ public object Plotly : ContextAware {
"x", "y", "z", "text", "hovertext", "close", "high", "low", "open", "locations", "lon", "lat", "ids"
)
override val context: Context = Context("Plotly") {
plugin(PlotlyPlugin)
override val context: Context by lazy {
Context("Plotly") {
plugin(PlotlyPlugin)
}
}
public val plugin: PlotlyPlugin = context.request(PlotlyPlugin)
public val plugin: PlotlyPlugin by lazy { context.request(PlotlyPlugin) }
public inline fun plot(block: Plot.() -> Unit): Plot = Plot().apply(block)
}

View File

@@ -7,6 +7,7 @@ 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.plotly.models.Trace
import space.kscience.visionforge.Vision
import space.kscience.visionforge.VisionPlugin
@@ -27,5 +28,6 @@ public class PlotlyPlugin : VisionPlugin() {
internal val plotlySerializersModule = SerializersModule {
polymorphic(Vision::class) {
subclass(Plot.serializer())
subclass(Trace.serializer())
}
}

View File

@@ -13,7 +13,7 @@ import space.kscience.visionforge.VisionPlugin
import space.kscience.visionforge.html.ElementVisionRenderer
import space.kscience.visionforge.html.JsVisionClient
public class PlotlyJSPlugin : VisionPlugin(), ElementVisionRenderer {
public class PlotlyJsPlugin : VisionPlugin(), ElementVisionRenderer {
public val plotly: PlotlyPlugin by require(PlotlyPlugin)
public val visionClient: JsVisionClient by require(JsVisionClient)
@@ -39,10 +39,10 @@ public class PlotlyJSPlugin : VisionPlugin(), ElementVisionRenderer {
else -> super.content(target)
}
public companion object : PluginFactory<PlotlyJSPlugin> {
public companion object : PluginFactory<PlotlyJsPlugin> {
override val tag: PluginTag = PluginTag("vision.plotly.js", PluginTag.DATAFORGE_GROUP)
override fun build(context: Context, meta: Meta): PlotlyJSPlugin = PlotlyJSPlugin()
override fun build(context: Context, meta: Meta): PlotlyJsPlugin = PlotlyJsPlugin()
}
}

View File

@@ -1,11 +1,11 @@
package space.kscience.visionforge.plotly
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.plotly.PlotlyJSPlugin
import space.kscience.plotly.PlotlyJsPlugin
import space.kscience.visionforge.html.runVisionClient
@DFExperimental
public fun main(): Unit = runVisionClient {
plugin(PlotlyJSPlugin)
plugin(PlotlyJsPlugin)
}

View File

@@ -4,8 +4,6 @@ import kotlinx.html.body
import kotlinx.html.head
import kotlinx.html.meta
import kotlinx.html.stream.createHTML
import space.kscience.dataforge.context.Global
import space.kscience.visionforge.visionManager
import java.awt.Desktop
import java.nio.file.Files
import java.nio.file.Path
@@ -23,7 +21,7 @@ public fun VisionPage.makeString(additionalHeaders: Map<String, HtmlFragment> =
}
}
body {
visionFragment(Global.visionManager, fragment = content)
visionFragment(visionManager, fragment = content)
}
}.finalize()

View File

@@ -1,16 +1,16 @@
package space.kscience.visionforge.gdml.jupyter
import space.kscience.plotly.PlotlyJSPlugin
import space.kscience.plotly.PlotlyJsPlugin
import space.kscience.visionforge.html.runVisionClient
import space.kscience.visionforge.jupyter.VFNotebookClient
import space.kscience.visionforge.markup.MarkupPlugin
import space.kscience.visionforge.markup.MarkupJsPlugin
import space.kscience.visionforge.solid.three.ThreePlugin
import space.kscience.visionforge.tables.TableVisionJsPlugin
public fun main(): Unit = runVisionClient {
plugin(ThreePlugin)
plugin(PlotlyJSPlugin)
plugin(MarkupPlugin)
plugin(PlotlyJsPlugin)
plugin(MarkupJsPlugin)
plugin(TableVisionJsPlugin)
plugin(VFNotebookClient)
}

View File

@@ -7,14 +7,15 @@ import space.kscience.dataforge.context.PluginTag
import space.kscience.dataforge.meta.Meta
import space.kscience.visionforge.VisionPlugin
public expect class MarkupPlugin: VisionPlugin{
public class MarkupPlugin : VisionPlugin() {
override val visionSerializersModule: SerializersModule get() = markupSerializersModule
override val tag: PluginTag
override val visionSerializersModule: SerializersModule
override val tag: PluginTag get() = Companion.tag
public companion object : PluginFactory<MarkupPlugin>{
override val tag: PluginTag
public companion object : PluginFactory<MarkupPlugin> {
override val tag: PluginTag = PluginTag("vision.markup", PluginTag.DATAFORGE_GROUP)
override fun build(context: Context, meta: Meta): MarkupPlugin = MarkupPlugin()
override fun build(context: Context, meta: Meta): MarkupPlugin
}
}

View File

@@ -21,10 +21,12 @@ import space.kscience.visionforge.markup.VisionOfMarkup.Companion.COMMONMARK_FOR
import space.kscience.visionforge.markup.VisionOfMarkup.Companion.GFM_FORMAT
import space.kscience.visionforge.useProperty
public actual class MarkupPlugin : VisionPlugin(), ElementVisionRenderer {
public class MarkupJsPlugin : VisionPlugin(), ElementVisionRenderer {
public val markupPlugin: MarkupPlugin by require(MarkupPlugin)
public val visionClient: JsVisionClient by require(JsVisionClient)
actual override val tag: PluginTag get() = Companion.tag
actual override val visionSerializersModule: SerializersModule get() = markupSerializersModule
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
@@ -56,10 +58,10 @@ public actual class MarkupPlugin : VisionPlugin(), ElementVisionRenderer {
else -> super.content(target)
}
public actual companion object : PluginFactory<MarkupPlugin> {
actual override val tag: PluginTag = PluginTag("vision.markup.js", PluginTag.DATAFORGE_GROUP)
public companion object : PluginFactory<MarkupPlugin> {
override val tag: PluginTag = PluginTag("vision.markup.js", PluginTag.DATAFORGE_GROUP)
actual override fun build(context: Context, meta: Meta): MarkupPlugin = MarkupPlugin()
override fun build(context: Context, meta: Meta): MarkupPlugin = MarkupPlugin()
}
}

View File

@@ -1,26 +0,0 @@
package space.kscience.visionforge.markup
import kotlinx.serialization.modules.SerializersModule
import org.intellij.lang.annotations.Language
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.VisionPlugin
public actual class MarkupPlugin : VisionPlugin() {
actual override val visionSerializersModule: SerializersModule get() = markupSerializersModule
actual override val tag: PluginTag get() = Companion.tag
public actual companion object : PluginFactory<MarkupPlugin> {
actual override val tag: PluginTag = PluginTag("vision.markup.jvm", PluginTag.DATAFORGE_GROUP)
actual override fun build(context: Context, meta: Meta): MarkupPlugin = MarkupPlugin()
}
}
public fun VisionOfMarkup.content(@Language("markdown") text: String) {
content = text
}

View File

@@ -0,0 +1,7 @@
package space.kscience.visionforge.markup
import org.intellij.lang.annotations.Language
public fun VisionOfMarkup.content(@Language("markdown") text: String) {
content = text
}

View File

@@ -1,9 +1,8 @@
package space.kscience.visionforge.three
import space.kscience.dataforge.context.Global
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.visionforge.html.*
import space.kscience.visionforge.visionManager
import space.kscience.visionforge.solid.Solids
import java.awt.Desktop
import java.nio.file.Path
@@ -11,14 +10,14 @@ import java.nio.file.Path
public val VisionPage.Companion.threeJsHeader: HtmlFragment get() = scriptHeader("js/visionforge-three.js")
@DFExperimental
public fun makeThreeJsFile(
public fun Solids.makeThreeJsFile(
path: Path? = null,
title: String = "VisionForge page",
resourceLocation: ResourceLocation = ResourceLocation.SYSTEM,
show: Boolean = true,
content: HtmlVisionFragment,
): Unit {
val actualPath = VisionPage(Global.visionManager, content = content).makeFile(path) { actualPath ->
val actualPath = VisionPage(visionManager, content = content).makeFile(path) { actualPath ->
mapOf(
"title" to VisionPage.title(title),
"threeJs" to VisionPage.importScriptHeader(