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() {
         }
     }
 
-
 }