This is an automated email from the ASF dual-hosted git repository. joergrade pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/isis.git
commit f8b0286e57ac401cc74c44f499c4042f295b7765 Author: Jörg Rade <joerg.r...@kuehne-nagel.com> AuthorDate: Mon May 4 10:10:21 2020 +0200 ISIS-2342 class diagram with properties, cleanup --- .../core/aggregator/DomainTypesAggregator.kt | 1 + .../isis/client/kroviz/core/model/DiagramDM.kt | 5 +- .../isis/client/kroviz/core/model/DisplayModel.kt | 11 ++- .../org/apache/isis/client/kroviz/to/Link.kt | 2 +- .../org/apache/isis/client/kroviz/to/bs3/Grid.kt | 8 --- .../apache/isis/client/kroviz/ui/ImageDialog.kt | 81 +++++++++++++--------- .../apache/isis/client/kroviz/utils/DomHelper.kt | 10 +++ .../apache/isis/client/kroviz/utils/XmlHelper.kt | 3 +- 8 files changed, 70 insertions(+), 51 deletions(-) diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt index e9714a8..673bac4 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt @@ -25,6 +25,7 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() { if (dsp.canBeDisplayed()) { RoStatusBar.updateDiagram(dsp as DiagramDM) + dsp.isRendered = true } } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DiagramDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DiagramDM.kt index 9ffb2ec..048a3e4 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DiagramDM.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DiagramDM.kt @@ -20,9 +20,10 @@ class DiagramDM(override val title: String) : DisplayModel() { } override fun canBeDisplayed(): Boolean { - return (numberOfClasses == classes.size + if (isRendered) return false + return (numberOfClasses == classes.size) //TODO && numberOfProperties == properties.size - ) + } override fun addData(obj: TransferObject) { diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModel.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModel.kt index 0b8911b..9738c4b 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModel.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModel.kt @@ -14,7 +14,7 @@ abstract class DisplayModel { abstract fun addData(obj: TransferObject) open fun getObject(): TObject? { - // subclass responsibility + // subclass responsibility return null } @@ -25,11 +25,10 @@ abstract class DisplayModel { fun extractTitle(): String { val strList = this.title.split("/") val len = strList.size - return if (len > 2) { - strList[len - 2] - } else { - "" - } + var answer = "" + if (len > 2) answer = + strList[len - 2] + return answer } } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt index b38fcce..70a7bac 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt @@ -40,7 +40,7 @@ data class Link(val rel: String = "", } fun isProperty() : Boolean { - return type.endsWith("/object-property") + return rel.endsWith("/property") } fun isPropertyDescription() : Boolean { diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Grid.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Grid.kt index 631c449..152bc9c 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Grid.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Grid.kt @@ -26,12 +26,4 @@ class Grid(document: Document) : TransferObject { } } - fun getPropertyList(): List<Property> { - val list = mutableListOf<Property>() - rows.forEach { c -> - list.addAll(c.getPropertyList()) - } - return list - } - } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/ImageDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/ImageDialog.kt index 4525b36..bd5ac96 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/ImageDialog.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/ImageDialog.kt @@ -2,9 +2,11 @@ package org.apache.isis.client.kroviz.ui import org.apache.isis.client.kroviz.to.ValueType import org.apache.isis.client.kroviz.ui.kv.RoDialog -import org.apache.isis.client.kroviz.ui.kv.UiManager +import org.apache.isis.client.kroviz.utils.DomHelper +import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic import org.apache.isis.client.kroviz.utils.UmlUtils -import org.w3c.dom.events.KeyboardEvent +import org.w3c.dom.parsing.DOMParser +import pl.treksoft.kvision.core.onEvent import kotlin.js.Date class ImageDialog( @@ -21,50 +23,65 @@ class ImageDialog( } private val uuid: String = Date().toTimeString() //IMPROVE + private var dialog: RoDialog fun open() { - val formItems = mutableListOf<FormItem>() -// val slider = FormItem("Scale", ValueType.SLIDER.type, content = 1.0) -// formItems.add(slider) + dialog.open() + UmlUtils.generateDiagram(pumlCode, uuid) + } + init { + val formItems = mutableListOf<FormItem>() val img = FormItem("svg", ValueType.IMAGE.type, callBackId = uuid) formItems.add(img) - val dialog = RoDialog( + dialog = RoDialog( + widthPerc = 80, caption = label, items = formItems, command = this, - widthPerc = 80, heightPerc = 80) - dialog.open() -// slider.setDisplay(dialog) - - UmlUtils.generateDiagram(pumlCode, uuid) - } - - init { - kotlin.browser.window.addEventListener("keydown", fun(event) { - val dlg = UiManager.topDialog() as RoDialog - console.log("[ImageDialog.event] topWindow: $dlg") - console.log(dlg) - if (dlg.hasScalableContent()) { - val ke = event as KeyboardEvent - if (ke.ctrlKey && ke.keyCode == 189) { // - - //adjust svg viewbox - console.log("[<CTRL>-<->]") - event.stopPropagation() - ke.preventDefault() - } - if (ke.ctrlKey && ke.keyCode == 187) { // + - //adjust svg viewbox - console.log("[<CTRL>-<+>]") - event.stopPropagation() - ke.preventDefault() + console.log("[ImageDialog.init] $dialog") + // if (dialog.hasScalableContent()) { + dialog.onEvent { + keypress = { e -> + console.log("[ImageDialog.open] keydown") + console.log(e) + if (e.key === "+" && e.ctrlKey) { + scale(true) + console.log("[<CTRL>-<Alt>-<+>]") + e.stopPropagation() + e.preventDefault() + } + if (e.key === "-" && e.ctrlKey) { + scale(false) + console.log("[<CTRL>-<Alt>-<->]") + e.stopPropagation() + e.preventDefault() + } } } - }) + // } } + private fun scale(upOrDown: Boolean) { + val mimeType = "image/svg+xml" + val oldElement = DomHelper.getById(uuid) + val oldStr = oldElement.toString() + console.log(oldStr) + val p = DOMParser() + var svg = p.parseFromString(oldStr, mimeType) + val image = ScalableVectorGraphic(svg) + if (upOrDown) { + image.scaleUp() + } else { + image.scaleDown() + } + val newStr = image.serialized() + svg = p.parseFromString(newStr, mimeType) + DomHelper.replaceWith(uuid, svg.documentElement!!) + } + } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomHelper.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomHelper.kt index e06145b..b8e8278 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomHelper.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomHelper.kt @@ -1,5 +1,6 @@ package org.apache.isis.client.kroviz.utils +import org.w3c.dom.Element import org.w3c.dom.parsing.DOMParser import kotlin.browser.document @@ -17,6 +18,15 @@ object DomHelper { element.asDynamic().appendChild(svg.documentElement) } + fun getById(elementId: String): Element { + return document.getElementById(elementId)!! + } + + fun replaceWith(elementId: String, svgElement: Element) { + val element = getById(elementId)!! + element.replaceWith(svgElement) + } + fun download(filename: String, text: String) { val element = document.createElement("a") element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(text)) diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/XmlHelper.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/XmlHelper.kt index 5a34ab5..274e5cf 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/XmlHelper.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/XmlHelper.kt @@ -15,8 +15,7 @@ object XmlHelper { fun nonTextChildren(node: Node): List<Node> { val match = "#text" val childNodes = node.childNodes.asList() - val list = childNodes.filter { !it.nodeName.contains(match) } - return list + return childNodes.filter { !it.nodeName.contains(match) } } fun firstChildMatching(node: Node, match: String): Node? {