Plugin to 0.7.0

This commit is contained in:
Alexander Nozik 2020-11-27 22:43:48 +03:00
parent ebb7bf72d1
commit 9b42d4f186
17 changed files with 84 additions and 36 deletions

View File

@ -2,10 +2,10 @@ plugins {
id("ru.mipt.npm.project")
}
val dataforgeVersion by extra("0.2.0-dev-8")
val dataforgeVersion by extra("0.2.0")
val ktorVersion by extra("1.4.2")
val htmlVersion by extra("0.7.2")
val kotlinWrappersVersion by extra("pre.129-kotlin-1.4.10")
val kotlinWrappersVersion by extra("pre.129-kotlin-1.4.20")
val fxVersion by extra("14")
@ -17,7 +17,7 @@ allprojects {
}
group = "hep.dataforge"
version = "0.2.0-dev-2"
version = "0.2.0-dev-3"
}
val githubProject by extra("visionforge")

View File

@ -1,6 +1,5 @@
import ru.mipt.npm.gradle.DependencyConfiguration
import ru.mipt.npm.gradle.FXModule
import ru.mipt.npm.gradle.useFx
plugins {
id("ru.mipt.npm.mpp")
@ -24,8 +23,8 @@ kotlin {
implementation(project(":visionforge-gdml"))
}
}
jvmMain{
dependencies{
jvmMain {
dependencies {
implementation(project(":visionforge-fx"))
}
}

View File

@ -1,8 +1,8 @@
package hep.dataforge.vision.gdml.demo
import hep.dataforge.Application
import hep.dataforge.context.Global
import hep.dataforge.js.Application
import hep.dataforge.js.startApplication
import hep.dataforge.startApplication
import hep.dataforge.vision.gdml.toVision
import kotlinx.browser.document
import react.child

View File

@ -1,8 +1,8 @@
package ru.mipt.npm.muon.monitor
import hep.dataforge.Application
import hep.dataforge.context.Global
import hep.dataforge.js.Application
import hep.dataforge.js.startApplication
import hep.dataforge.startApplication
import io.ktor.client.HttpClient
import io.ktor.client.features.json.JsonFeature
import io.ktor.client.features.json.serializer.KotlinxSerializer

View File

@ -1,9 +1,9 @@
package ru.mipt.npm.sat
import hep.dataforge.Application
import hep.dataforge.context.Global
import hep.dataforge.js.Application
import hep.dataforge.js.startApplication
import hep.dataforge.meta.invoke
import hep.dataforge.startApplication
import hep.dataforge.vision.solid.three.ThreePlugin
import hep.dataforge.vision.solid.three.render
import kotlinx.browser.document
@ -16,7 +16,7 @@ private class SatDemoApp : Application {
?: error("Element with id 'canvas' not found on page")
val three = Global.plugins.fetch(ThreePlugin)
val sat = visionOfSatellite(
ySegments = 5,
ySegments = 3,
)
three.render(element, sat){
minSize = 500

View File

@ -1,6 +1,5 @@
import ru.mipt.npm.gradle.DependencyConfiguration
import ru.mipt.npm.gradle.FXModule
import ru.mipt.npm.gradle.useFx
plugins {
id("ru.mipt.npm.mpp")

View File

@ -1,7 +1,7 @@
package hep.dataforge.vision.solid.demo
import hep.dataforge.js.Application
import hep.dataforge.js.startApplication
import hep.dataforge.Application
import hep.dataforge.startApplication
import hep.dataforge.vision.solid.x
import hep.dataforge.vision.solid.y
import kotlinx.browser.document

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -1,6 +1,6 @@
import hep.dataforge.Application
import hep.dataforge.context.Global
import hep.dataforge.js.Application
import hep.dataforge.js.startApplication
import hep.dataforge.startApplication
import hep.dataforge.vision.bootstrap.visionPropertyEditor
import hep.dataforge.vision.react.ThreeCanvasComponent
import hep.dataforge.vision.react.objectTree

View File

@ -1,9 +1,9 @@
pluginManagement {
val kotlinVersion = "1.4.20-M2"
val toolsVersion = "0.6.4-dev-1.4.20-M2"
val kotlinVersion = "1.4.20"
val toolsVersion = "0.7.0"
repositories {
// mavenLocal()
mavenLocal()
jcenter()
gradlePluginPortal()
maven("https://dl.bintray.com/kotlin/kotlin-eap")

View File

@ -13,10 +13,10 @@ public class HtmlOutput<V : Vision>(
public abstract class HtmlOutputScope<R, V : Vision>(
private val root: TagConsumer<R>,
public val prefix: String? = null,
public val idPrefix: String? = null,
) : TagConsumer<R> by root {
public open fun resolveId(name: Name): String = (prefix ?: "output:") + name.toString()
public open fun resolveId(name: Name): String = (idPrefix ?: "output:") + name.toString()
/**
* Create a placeholder but do not attach any [Vision] to it
@ -27,7 +27,7 @@ public abstract class HtmlOutputScope<R, V : Vision>(
): T = div {
id = resolveId(name)
classes = setOf(OUTPUT_CLASS)
attributes[NAME_ATTRIBUTE] = name.toString()
attributes[OUTPUT_NAME_ATTRIBUTE] = name.toString()
@Suppress("UNCHECKED_CAST")
HtmlOutput(this@HtmlOutputScope, name, this).block()
}
@ -62,6 +62,6 @@ public abstract class HtmlOutputScope<R, V : Vision>(
public companion object {
public const val OUTPUT_CLASS: String = "visionforge-output"
public const val NAME_ATTRIBUTE: String = "data-output-name"
public const val OUTPUT_NAME_ATTRIBUTE: String = "data-output-name"
}
}

View File

@ -1,4 +1,4 @@
package hep.dataforge.js
package hep.dataforge
import kotlinx.browser.document
import kotlinx.dom.hasClass

View File

@ -0,0 +1,43 @@
package hep.dataforge.vision.client
import hep.dataforge.context.Context
import hep.dataforge.context.Global
import hep.dataforge.vision.VisionManager
import hep.dataforge.vision.html.HtmlOutputScope
import kotlinx.browser.window
import org.w3c.dom.Element
import org.w3c.dom.get
import org.w3c.dom.url.URL
@JsExport
public class ClientVisionManager {
private val visionForgeContext: Context = Global.context("client") {
plugin(VisionManager)
}
private val visionManager: VisionManager = visionForgeContext.plugins.fetch(VisionManager)
/**
* Up-going tree traversal in search for endpoint attribute
*/
private fun resolveEndpoint(element: Element?): String {
if(element == null) return DEFAULT_ENDPOINT
val attribute = element.attributes[OUTPUT_ENDPOINT_ATTRIBUTE]
return attribute?.value ?: resolveEndpoint(element.parentElement)
}
public fun renderVision(element: Element){
if(!element.classList.contains(HtmlOutputScope.OUTPUT_CLASS)) error("The element $element is not an output element")
val endpoint = URL(resolveEndpoint(element))
window.fetch("$endpoint/vision").then {response->
TODO()
}
}
public companion object {
public const val OUTPUT_ENDPOINT_ATTRIBUTE: String = "data-output-endpoint"
public const val DEFAULT_ENDPOINT: String = ".."
}
}

View File

@ -1,8 +1,11 @@
package hep.dataforge.vision.html
package hep.dataforge.vision.client
import hep.dataforge.names.Name
import hep.dataforge.names.toName
import hep.dataforge.vision.Vision
import hep.dataforge.vision.html.BindingHtmlOutputScope
import hep.dataforge.vision.html.HtmlOutputScope
import hep.dataforge.vision.html.HtmlVisionFragment
import kotlinx.browser.document
import kotlinx.html.TagConsumer
import org.w3c.dom.*
@ -21,9 +24,9 @@ public fun <V : Vision> Map<String, V>.bind(renderer: ElementVisionRenderer<V>)
public fun <V : Vision> Element.renderVisions(renderer: ElementVisionRenderer<V>, visionProvider: (Name) -> V?) {
val elements = getElementsByClassName(HtmlOutputScope.OUTPUT_CLASS)
elements.asList().forEach { element ->
val name = element.attributes[HtmlOutputScope.NAME_ATTRIBUTE]?.value
val name = element.attributes[HtmlOutputScope.OUTPUT_NAME_ATTRIBUTE]?.value
if (name == null) {
console.error("Attribute ${HtmlOutputScope.NAME_ATTRIBUTE} not defined in the output element")
console.error("Attribute ${HtmlOutputScope.OUTPUT_NAME_ATTRIBUTE} not defined in the output element")
return@forEach
}
val vision = visionProvider(name.toName())

View File

@ -1,5 +1,3 @@
import ru.mipt.npm.gradle.useFx
plugins {
id("ru.mipt.npm.jvm")
}

View File

@ -1,7 +1,10 @@
package hep.dataforge.vision.server
import hep.dataforge.context.Context
import hep.dataforge.meta.*
import hep.dataforge.meta.Config
import hep.dataforge.meta.Configurable
import hep.dataforge.meta.boolean
import hep.dataforge.meta.long
import hep.dataforge.names.Name
import hep.dataforge.names.toName
import hep.dataforge.vision.Vision
@ -12,16 +15,19 @@ import hep.dataforge.vision.server.VisionServer.Companion.DEFAULT_PAGE
import io.ktor.application.*
import io.ktor.features.CORS
import io.ktor.html.respondHtml
import io.ktor.http.*
import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.http.cio.websocket.Frame
import io.ktor.http.content.resources
import io.ktor.http.content.static
import io.ktor.http.withCharset
import io.ktor.response.respond
import io.ktor.response.respondText
import io.ktor.routing.*
import io.ktor.server.engine.ApplicationEngine
import io.ktor.websocket.WebSockets
import io.ktor.websocket.webSocket
import kotlinx.coroutines.flow.collect
import kotlinx.html.*
import kotlinx.html.stream.createHTML
import java.awt.Desktop
@ -106,7 +112,7 @@ public class VisionServer internal constructor(
application.log.debug("Opened server socket for $name")
val vision: Vision = visions[name.toName()] ?: error("Plot with id='$name' not registered")
try {
vision.flowChanges(this, updateInterval.milliseconds).collect { update ->
vision.flowChanges(this, updateInterval.milliseconds).collect { update ->
val json = visionManager.encodeToString(update)
outgoing.send(Frame.Text(json))
}

View File

@ -4,7 +4,7 @@ import hep.dataforge.context.*
import hep.dataforge.meta.Meta
import hep.dataforge.names.*
import hep.dataforge.vision.Vision
import hep.dataforge.vision.html.ElementVisionRenderer
import hep.dataforge.vision.client.ElementVisionRenderer
import hep.dataforge.vision.solid.*
import hep.dataforge.vision.solid.specifications.Canvas3DOptions
import hep.dataforge.vision.visible