You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jo...@apache.org on 2021/09/24 13:44:16 UTC
[isis] branch ISIS-2872 updated: ISIS-2872 Upgrade Kotlin/KVision
Dependencies
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2872
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/ISIS-2872 by this push:
new a9096d5 ISIS-2872 Upgrade Kotlin/KVision Dependencies
a9096d5 is described below
commit a9096d5e9d7e59496324bed59ceba7ba27aa6adf
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Fri Sep 24 15:29:34 2021 +0200
ISIS-2872 Upgrade Kotlin/KVision Dependencies
---
.../kotlin/org/apache/isis/client/kroviz/App.kt | 11 +-
.../isis/client/kroviz/ui/core/MenuFactory.kt | 5 +-
.../apache/isis/client/kroviz/ui/core/RoMenuBar.kt | 130 ++++++++-------------
.../isis/client/kroviz/ui/core/RoStatusBar.kt | 12 +-
.../apache/isis/client/kroviz/ui/core/RoTable.kt | 46 ++++----
.../apache/isis/client/kroviz/ui/core/UiManager.kt | 6 +-
.../apache/isis/client/kroviz/ui/dialog/About.kt | 3 +-
.../isis/client/kroviz/ui/dialog/LoginPrompt.kt | 5 +-
.../isis/client/kroviz/ui/kv/override/RoWindow.kt | 4 +-
.../isis/client/kroviz/ui/panel/ImageSample.kt | 2 -
10 files changed, 96 insertions(+), 128 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt
index 316864b..e14949c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt
@@ -22,6 +22,7 @@ import io.kvision.*
import org.apache.isis.client.kroviz.ui.core.RoApp
import io.kvision.pace.Pace
import io.kvision.panel.ContainerType
+import io.kvision.panel.VPanel
import io.kvision.panel.root
import io.kvision.panel.vPanel
import io.kvision.utils.px
@@ -39,12 +40,10 @@ class App : Application() {
}
override fun start() {
- root("kroviz", containerType = ContainerType.FLUID, addRow = true) {
- vPanel(spacing = 0) {
- padding = 0.px
- add(RoApp)
- }
- }
+ val r = root("kroviz")
+ val v = VPanel()
+ v.add(RoApp)
+ r.add(v)
}
override fun dispose(): Map<String, Any> {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
index ef99b62..445c23a 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
@@ -66,7 +66,7 @@ object MenuFactory {
menu: Menu,
style: ButtonStyle = ButtonStyle.LIGHT,
withText: Boolean = true,
- classes: Set<String> = setOf()
+ className: String = ""
)
: DropDown {
val menuTitle = menu.named
@@ -74,10 +74,9 @@ object MenuFactory {
text = if (withText) menuTitle else "",
icon = IconManager.find(menuTitle),
style = style,
-// classes = classes,
+ className = className,
forNavbar = false
)
- dd.addCssClass(classes.toString())
//dd.setDragDropData(Constants.stdMimeType, menuTitle)
// action.setDragDropData gets always overridden by dd.setDragDropData
menu.section.forEachIndexed { index, section ->
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
index 2427639..c8f55c6 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
@@ -21,10 +21,9 @@ package org.apache.isis.client.kroviz.ui.core
import io.kvision.core.CssSize
import io.kvision.core.UNIT
import io.kvision.dropdown.DropDown
-import io.kvision.dropdown.ddLink
-import io.kvision.dropdown.dropDown
import io.kvision.html.Button
import io.kvision.html.ButtonStyle
+import io.kvision.html.Link
import io.kvision.navbar.*
import io.kvision.panel.SimplePanel
import io.kvision.panel.vPanel
@@ -57,100 +56,71 @@ object RoMenuBar : SimplePanel() {
}
}
+ private fun buildMenuEntry(label: String, iconName: String, action: dynamic): Link {
+ val icon = IconManager.find(iconName)
+ return Link(label, icon).onClick { e ->
+ val at = Point(e.pageX.toInt(), e.pageY.toInt())
+ UiManager.position = at
+ action
+ }
+ }
+
private fun buildMainMenu(): DropDown {
- return dropDown(
+ val mainMenu = DropDown(
"",
icon = IconManager.find("Burger"),
forNavbar = false,
style = ButtonStyle.LIGHT
)
- {
- ddLink(
- "Connect ...",
- icon = IconManager.find("Connect")
- ).onClick { e ->
- val at = Point(e.pageX.toInt(), e.pageY.toInt())
- LoginPrompt().open(at)
- }
+ mainMenu.add(
+ buildMenuEntry("Connect ...", "Connect", { LoginPrompt().open() })
+ )
- val toolTitle = "Toolbar"
- ddLink(
- toolTitle,
- icon = IconManager.find(toolTitle)
- ).onClick {
- RoIconBar.toggle()
- }
+ mainMenu.add(
+ buildMenuEntry("Toolbar", "Toolbar", { RoIconBar.toggle() })
+ )
- val sampleTitle = "History"
- ddLink(
- sampleTitle,
- icon = IconManager.find(sampleTitle)
- ).onClick {
- val model = EventStore.log
- UiManager.add("Log Entries", EventLogTable(model))
- }
+ mainMenu.add(
+ buildMenuEntry("History", "History", { UiManager.add("Log Entries", EventLogTable(EventStore.log)) })
+ )
- val chartTitle = "Sample Chart"
- ddLink(
- chartTitle,
- icon = IconManager.find("Chart")
- ).onClick {
- UiManager.add(chartTitle, EventChart(SampleChartModel()))
- }
+ val chartTitle = "Sample Chart"
+ mainMenu.add(
+ buildMenuEntry(chartTitle, "Chart", { UiManager.add(chartTitle, EventChart(SampleChartModel())) })
+ )
- val geoMapTitle = "Sample Geo Map"
- ddLink(
- geoMapTitle,
- icon = IconManager.find("Map")
- ).onClick {
- UiManager.add(geoMapTitle, GeoMap())
- }
+ val geoMapTitle = "Sample Geo Map"
+ mainMenu.add(
+ buildMenuEntry(geoMapTitle, "Map", { UiManager.add(geoMapTitle, GeoMap()) })
+ )
- val svgMapTitle = "Sample SVG Map"
- ddLink(
- svgMapTitle,
- icon = IconManager.find("Diagram")
- ).onClick {
- UiManager.add(svgMapTitle, SvgMap())
- }
+ val svgMapTitle = "Sample SVG Map"
+ mainMenu.add(
+ buildMenuEntry(svgMapTitle, "Diagram", { UiManager.add(svgMapTitle, SvgMap()) })
+ )
- val svgInlineTitle = "Sample SVG Inline (interactive)"
- ddLink(
- svgInlineTitle,
- icon = IconManager.find("Diagram")
- ).onClick {
- SvgInline().open()
- }
+ val svgInlineTitle = "Sample SVG Inline (interactive)"
+ mainMenu.add(
+ buildMenuEntry(svgInlineTitle, "Diagram", { SvgInline().open() })
+ )
- val imageTitle = "Sample Image"
- ddLink(
- imageTitle,
- icon = IconManager.find("Image")
- ).onClick {
- val panel = ImageSample()
- RoView.addTab(imageTitle, panel)
- }
+ val imageTitle = "Sample Image"
+ mainMenu.add(
+ buildMenuEntry(imageTitle, "Image", { RoView.addTab(imageTitle, ImageSample()) })
+ )
- val searchTitle = "Dropdown search example"
- ddLink(
- searchTitle,
- icon = IconManager.find("Find")
- ).onClick {
- UiManager.add(searchTitle, DropdownSearch())
- }
+ val aboutTitle = "About"
+ mainMenu.add(
+ buildMenuEntry(aboutTitle, "Info", { RoView.addTab(aboutTitle, About().open()) })
+ )
- val aboutTitle = "About"
- ddLink(
- aboutTitle,
- icon = IconManager.find(aboutTitle)
- ).onClick {
- About().open()
- }
- }
+ console.log("[RMB.buildMainMenu]")
+ console.log(mainMenu)
+ return mainMenu
}
fun amendMenu(menuBars: Menubars) {
- logoButton()
+ // logoButton()
menuBars.primary.menu.forEach { m ->
val dd = MenuFactory.buildForMenu(m)
if (dd.getChildren().isNotEmpty()) nav.add(dd)
@@ -160,9 +130,9 @@ object RoMenuBar : SimplePanel() {
}
private fun logoButton() {
- val classes = setOf("isis-logo-button-image", "logo-button")
+ val classNames = "isis-logo-button-image logo-button"
val logo = Button("", style = ButtonStyle.LINK)
- logo.addCssClass(classes.toString())
+ logo.addCssClass(classNames)
logo.onClick {
window.open("https://isis.apache.org")
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt
index 5f68f86..87b7612 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt
@@ -57,8 +57,8 @@ object RoStatusBar {
init {
navbar.add(nav)
- nav.add(isisButton())
- nav.add(kvisionButton())
+// nav.add(isisButton())
+// nav.add(kvisionButton())
nav.add(lastError)
nav.add(classDiagram)
nav.add(userBtn)
@@ -117,18 +117,18 @@ object RoStatusBar {
}
private fun isisButton(): Button {
- val classes = setOf("isis-logo-button-image", "logo-button")
+ val classes = "isis-logo-button-image logo-button"
val b = Button("", style = ButtonStyle.LINK)
- b.addCssClass(classes.toString())
+ b.addCssClass(classes)
return b.onClick {
window.open("https://isis.apache.org")
}
}
private fun kvisionButton(): Button {
- val classes = setOf("kvision-logo-button-image", "logo-button")
+ val classes = "kvision-logo-button-image logo-button"
val b = Button("", style = ButtonStyle.LINK)
- b.addCssClass(classes.toString())
+ b.addCssClass(classes)
return b.onClick {
window.open("https://kvision.io")
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
index 531e64d..564d3bd 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
@@ -22,12 +22,11 @@ import io.kvision.core.Container
import io.kvision.core.CssSize
import io.kvision.core.UNIT
import io.kvision.panel.SimplePanel
-import io.kvision.tabulator.TableType
import io.kvision.tabulator.Layout
+import io.kvision.tabulator.TableType
import io.kvision.tabulator.Tabulator
import io.kvision.tabulator.TabulatorOptions
import io.kvision.tabulator.js.Tabulator.CellComponent
-import io.kvision.utils.set
import org.apache.isis.client.kroviz.core.event.ResourceProxy
import org.apache.isis.client.kroviz.core.model.CollectionDM
import org.apache.isis.client.kroviz.core.model.Exposer
@@ -46,13 +45,14 @@ class RoTable(displayCollection: CollectionDM) : SimplePanel() {
width = CssSize(100, UNIT.perc)
val model = displayCollection.data
val columns = ColumnFactory().buildColumns(
- displayCollection)
+ displayCollection
+ )
val options = TabulatorOptions(
- movableColumns = true,
- height = Constants.calcHeight,
- layout = Layout.FITDATA,
- columns = columns,
- persistenceMode = false,
+ movableColumns = true,
+ height = Constants.calcHeight,
+ layout = Layout.FITDATA,
+ columns = columns,
+ persistenceMode = false,
)
val tableTypes = setOf(TableType.STRIPED, TableType.HOVER)
@@ -74,30 +74,30 @@ class RoTable(displayCollection: CollectionDM) : SimplePanel() {
}
fun <T : Any> Container.tabulator(
- data: List<T>? = null,
- dataUpdateOnEdit: Boolean = true,
- options: TabulatorOptions<T> = TabulatorOptions(),
- types: Set<TableType> = setOf(),
- classes: Set<String>? = null,
- className: String? = null,
- init: (Tabulator<T>.() -> Unit)? = null
+ data: List<T>? = null,
+ dataUpdateOnEdit: Boolean = true,
+ options: TabulatorOptions<T> = TabulatorOptions(),
+ types: Set<TableType> = setOf(),
+ className: String = "",
+ init: (Tabulator<T>.() -> Unit)? = null
): Tabulator<T> {
- val tabulator = create(data, dataUpdateOnEdit, options, types, classes ?: className.set)
+ val tabulator = create(data, dataUpdateOnEdit, options, types)
+ tabulator.addCssClass(className)
init?.invoke(tabulator)
this.add(tabulator)
return tabulator
}
fun <T : Any> create(
- data: List<T>? = null,
- dataUpdateOnEdit: Boolean = true,
- options: TabulatorOptions<T> = TabulatorOptions(),
- types: Set<TableType> = setOf(),
- classes: Set<String> = setOf(),
- init: (Tabulator<T>.() -> Unit)? = null
+ data: List<T>? = null,
+ dataUpdateOnEdit: Boolean = true,
+ options: TabulatorOptions<T> = TabulatorOptions(),
+ types: Set<TableType> = setOf(),
+ className: String = "",
+ init: (Tabulator<T>.() -> Unit)? = null
): Tabulator<T> {
val tabulator = Tabulator(data, dataUpdateOnEdit, options, types)
- tabulator.addCssClass(classes.toString())
+ tabulator.addCssClass(className)
init?.invoke(tabulator)
return tabulator
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
index 85dbdc9..7645936 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
@@ -34,10 +34,7 @@ import org.apache.isis.client.kroviz.core.model.ObjectDM
import org.apache.isis.client.kroviz.to.ValueType
import org.apache.isis.client.kroviz.to.mb.Menubars
import org.apache.isis.client.kroviz.ui.kv.override.RoTab
-import org.apache.isis.client.kroviz.utils.DomUtil
-import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic
-import org.apache.isis.client.kroviz.utils.StringUtils
-import org.apache.isis.client.kroviz.utils.UUID
+import org.apache.isis.client.kroviz.utils.*
import org.w3c.dom.events.KeyboardEvent
/**
@@ -52,6 +49,7 @@ object UiManager {
private var session: Session? = null
private val popups = mutableListOf<Widget>()
private val settings = mutableMapOf<String, Any>()
+ var position: Point? = null
init {
window.addEventListener("keydown", fun(event) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/About.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/About.kt
index dd354fe..216e3cf 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/About.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/About.kt
@@ -29,8 +29,9 @@ class About : Command() {
private val formItems = mutableListOf<FormItem>()
private val _LI = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
- fun open() {
+ fun open() : RoDialog {
dialog.open()
+ return dialog
}
init {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
index 1e673c5..a20e8b6 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
@@ -20,6 +20,8 @@ package org.apache.isis.client.kroviz.ui.dialog
import io.kvision.form.text.Password
import io.kvision.form.text.Text
+import kotlinx.browser.document
+import kotlinx.browser.window
import org.apache.isis.client.kroviz.to.Link
import org.apache.isis.client.kroviz.to.ValueType
import org.apache.isis.client.kroviz.ui.core.Constants
@@ -37,12 +39,13 @@ class LoginPrompt : Command() {
private var username = Constants.demoUser
private var password = Constants.demoPass
- fun open(at: Point) {
+ fun open() {
val formItems = mutableListOf<FormItem>()
formItems.add(FormItem("Url", ValueType.TEXT, url))
formItems.add(FormItem("User", ValueType.TEXT, username))
formItems.add(FormItem("Password", ValueType.PASSWORD, password))
form = RoDialog(caption = "Connect", items = formItems, command = this)
+ val at = UiManager.position!!
form.open(at)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoWindow.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoWindow.kt
index 146cbbf..25d5ec4 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoWindow.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoWindow.kt
@@ -71,8 +71,8 @@ open class RoWindow(
menu: List<KvisionHtmlLink>? = null,
init: (RoWindow.() -> Unit)? = null
) :
- SimplePanel(classes.toString() +" modal-content kv-window") {
-
+ SimplePanel() {
+//FIXME class +" modal-content kv-window"
/**
* Window caption text.
*/
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/ImageSample.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/ImageSample.kt
index fe86ee1..0a08a86 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/ImageSample.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/ImageSample.kt
@@ -28,7 +28,6 @@ import org.w3c.files.FileReader
@Deprecated("Useful as Sample")
object ImageSample : VPanel() {
-
init {
vPanel(spacing = 10) {
val button = button("Button")
@@ -54,5 +53,4 @@ object ImageSample : VPanel() {
}
}
-
}