This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-3171
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/ISIS-3171 by this push:
new 1d6ba04279 ISIS-3171 layout improvements, md display in textarea
1d6ba04279 is described below
commit 1d6ba04279de700011a6689bac600667e12fc83a
Author: Jörg Rade <[email protected]>
AuthorDate: Thu Apr 6 22:42:52 2023 +0200
ISIS-3171 layout improvements, md display in textarea
---
.../apache/causeway/client/kroviz/to/TypeMapper.kt | 7 +-
.../client/kroviz/ui/builder/ColBuilder.kt | 117 ++++++++++++++-------
.../client/kroviz/ui/builder/FieldSetBuilder.kt | 13 ++-
.../client/kroviz/ui/builder/RowBuilder.kt | 5 +-
4 files changed, 93 insertions(+), 49 deletions(-)
diff --git
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/TypeMapper.kt
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/TypeMapper.kt
index 12d02bd0ee..65edf262ad 100644
---
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/TypeMapper.kt
+++
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/TypeMapper.kt
@@ -66,15 +66,10 @@ class TypeMapper {
return when {
isoDate.matches(contentStr) -> ValueType.DATE.type
XmlHelper.isXml(contentStr) -> ValueType.HTML.type
+ contentStr.startsWith(":Notice:") -> ValueType.TEXT_AREA.type
else -> ValueType.TEXT.type
}
}
- fun forString(content: String): ValueType {
- return when {
- content.startsWith(":Notice:") -> ValueType.TEXT_AREA
- else -> ValueType.TEXT
- }
- }
fun forType(type: String): ValueType {
console.log("[TM_forType] $type")
diff --git
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
index f2198381b3..b498cf3d74 100644
---
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
+++
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
@@ -25,84 +25,124 @@ import io.kvision.panel.HPanel
import io.kvision.panel.SimplePanel
import org.apache.causeway.client.kroviz.to.TObject
import org.apache.causeway.client.kroviz.to.bs.ColBs
+import org.apache.causeway.client.kroviz.to.bs.CollectionBs
+import org.apache.causeway.client.kroviz.to.bs.FieldSetBs
import org.apache.causeway.client.kroviz.ui.core.Constants
import org.apache.causeway.client.kroviz.ui.core.RoTable
import org.apache.causeway.client.kroviz.ui.menu.DropDownMenuBuilder
import org.apache.causeway.client.kroviz.utils.StringUtils
import kotlin.math.round
-class ColBuilder : UiBuilder() {
+class ColBuilder(
+ val col: ColBs,
+ val tObject: TObject,
+ private val dsp: RoDisplay
+) : UiBuilder() {
- fun create(col: ColBs, tObject: TObject, dsp: RoDisplay): FlexPanel {
- val panel = buildPanel()
+ var panel: FlexPanel
+ init {
+ panel = buildPanel()
+ addMenu()
+ addTabgroups()
+ addFieldSets()
+ addRows()
+ addCollections()
+ }
+
+ private fun addMenu() {
if ((col.actionList.size > 0) && (col.domainObject != null)) {
val menu = createMenu(tObject, dsp)
assignWidth(menu, col)
panel.add(menu)
}
+ }
- for (tg in col.tabGroupList) {
+ private fun addTabgroups() {
+ col.tabGroupList.forEach { tg ->
val tgCpt = TabGroupBuilder().create(tg, tObject, dsp)
panel.add(tgCpt)
}
- for (fs in col.fieldSetList) {
+ }
+
+ private fun addFieldSets() {
+ col.fieldSetList.forEach { fs ->
if (fs.propertyList.size > 0) {
- val fsCpt = FieldSetBuilder().create(fs, tObject, dsp)!!
- var legend = fs.name
- if (legend.trim().isEmpty()) {
- legend = fs.id
- }
- legend = StringUtils.capitalize(legend)
- val fsPanel = FieldsetPanel(legend = legend).add(fsCpt)
- val tto = TooltipOptions(title = fs.id)
- fsPanel.enableTooltip(tto)
+ val fsPanel = buildFieldSetPanel(fs)
assignWidth(fsPanel, col)
panel.add(fsPanel)
}
}
- for (row in col.rowList) {
+ }
+
+ private fun addRows() {
+ col.rowList.forEach { row ->
val rowCpt = RowBuilder().create(row, tObject, dsp)
panel.add(rowCpt)
}
+ }
+
+ private fun addCollections() {
col.collectionList.forEach {
- val id = it.id
- val objectDM = dsp.displayModel
- try {
- // objectDM is sometimes null
- val cdm = objectDM.getCollectionDisplayModelFor(id)!!
- val fsPanel = FieldsetPanel(legend = cdm.getTitle())
- val tablePanel = RoTable(cdm)
- fsPanel.add(tablePanel)
- panel.add(fsPanel)
- cdm.isRendered = true
- } catch (npe: NullPointerException) {
- console.log("[CB_create] failed with NPE")
- throw npe
- }
+ buildTableAndWrapInFsPanel(it)
}
- return panel
+ }
+
+ private fun buildTableAndWrapInFsPanel(it: CollectionBs) {
+ val id = it.id
+ val objectDM = dsp.displayModel
+ try {
+ // objectDM is sometimes null
+ val cdm = objectDM.getCollectionDisplayModelFor(id)!!
+ val fsPanel = FieldsetPanel(legend = cdm.getTitle())
+ fsPanel.add(RoTable(cdm))
+ panel.add(fsPanel)
+ cdm.isRendered = true
+ console.log("[CB_buildTableAndWrapInFsPanel] succeeded")
+ } catch (npe: NullPointerException) {
+ console.log("[CB_buildTableAndWrapInFsPanel] failed with NPE")
+ throw npe
+ }
+ }
+
+ private fun buildFieldSetPanel(fs: FieldSetBs): SimplePanel {
+ console.log("[CB_buildFieldSetPanel]")
+ val fsCpt = FieldSetBuilder().create(fs, tObject, dsp)!!
+ val legend = extractLegend(fs)
+ val fsPanel = FieldsetPanel(legend = legend).add(fsCpt)
+ val tto = TooltipOptions(title = fs.id)
+ fsPanel.enableTooltip(tto)
+// fsPanel.flexDirection = FlexDirection.ROW
+ return fsPanel
+ }
+
+ private fun extractLegend(fs: FieldSetBs): String {
+ var legend = fs.name.trim()
+ if (legend.isEmpty()) {
+ legend = fs.id
+ }
+ return StringUtils.capitalize(legend)
}
private fun buildPanel(): FlexPanel {
- return FlexPanel(
+ val panel = FlexPanel(
FlexDirection.COLUMN,
FlexWrap.NOWRAP,
- JustifyContent.SPACEBETWEEN,
- AlignItems.CENTER,
- AlignContent.STRETCH,
+ JustifyContent.FLEXSTART,
+ AlignItems.FLEXSTART,
+ AlignContent.FLEXSTART,
spacing = Constants.spacing
)
+ panel.padding = CssSize(10, UNIT.px)
+ return panel
}
private fun createMenu(tObject: TObject, dsp: RoDisplay): HPanel {
val panel = HPanel()
style(panel)
-
val dd = DropDownMenuBuilder().buildForObjectWithSaveAndUndo(tObject)
dsp.menu = dd
panel.add(dd)
-
return panel
}
@@ -110,7 +150,10 @@ class ColBuilder : UiBuilder() {
val proportion = col.span.toDouble().div(12)
val percent = proportion * 100
val rounded = round(percent)
- val cssWidth = CssSize(rounded, UNIT.vw)
+ console.log("[CB_assignWidth]")
+ console.log(col.span)
+ console.log(rounded)
+ val cssWidth = CssSize(rounded, UNIT.perc)
panel.flexBasis = cssWidth
panel.flexGrow = 1
}
diff --git
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
index d5ec3d245e..1c43a1934f 100644
---
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
+++
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
@@ -21,6 +21,7 @@ package org.apache.causeway.client.kroviz.ui.builder
import io.kvision.form.FormPanel
import org.apache.causeway.client.kroviz.to.TObject
import org.apache.causeway.client.kroviz.to.TypeMapper
+import org.apache.causeway.client.kroviz.to.ValueType
import org.apache.causeway.client.kroviz.to.bs.FieldSetBs
import org.apache.causeway.client.kroviz.ui.core.FormItem
import org.apache.causeway.client.kroviz.ui.core.FormPanelFactory
@@ -37,15 +38,21 @@ class FieldSetBuilder {
val items = mutableListOf<FormItem>()
for (p in fieldSetLayout.propertyList) {
- val label = p.id
+ var label = p.id
val member = members.firstOrNull() { it.id == label }
if (member != null) {
val memberType = TypeMapper().forType(member.type!!)
+ var content = member.value?.content
+ label = p.named
+ if (memberType == ValueType.TEXT_AREA && content is String) {
+ content = content.replace(":Notice: ", "")
+ // label = "Notice"
+ }
val size = maxOf(1, p.multiLine)
val fi = FormItem(
- label = p.named,
+ label = label,
type = memberType,
- content = member.value?.content,
+ content = content,
size = size,
description = p.describedAs,
member = member,
diff --git
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
index 99287a47fb..3d204c1331 100644
---
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
+++
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
@@ -29,10 +29,9 @@ class RowBuilder : UiBuilder() {
fun create(row: RowBs, tObject: TObject, dsp: RoDisplay): SimplePanel {
val panel = buildPanel()
- panel.justifyContent = JustifyContent.SPACEBETWEEN
for (c in row.colList) {
- val cpt = ColBuilder().create(c, tObject, dsp)
+ val cpt = ColBuilder(c, tObject, dsp).panel
panel.add(cpt)
}
return panel
@@ -44,7 +43,7 @@ class RowBuilder : UiBuilder() {
FlexWrap.NOWRAP,
JustifyContent.FLEXSTART,
AlignItems.FLEXSTART,
- AlignContent.STRETCH,
+ AlignContent.FLEXSTART,
spacing = Constants.spacing
)
}