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 2020/05/30 15:57:48 UTC

[isis] branch master updated: ISIS-2342 buttonbar aligned to bottom, textarea scales with window

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


The following commit(s) were added to refs/heads/master by this push:
     new b73ef76  ISIS-2342 buttonbar aligned to bottom, textarea scales with window
b73ef76 is described below

commit b73ef76a543dc0624ea3bb4d613ccc7995b3113b
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Sat May 30 17:57:23 2020 +0200

    ISIS-2342 buttonbar aligned to bottom, textarea scales with window
---
 .../apache/isis/client/kroviz/ui/kv/RoDialog.kt    |   7 +-
 .../apache/isis/client/kroviz/ui/kv/RoWindow.kt    | 440 ---------------------
 2 files changed, 4 insertions(+), 443 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
index 97b6161..77ae4d0 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
@@ -16,6 +16,7 @@ import pl.treksoft.kvision.panel.HPanel
 import pl.treksoft.kvision.panel.vPanel
 import pl.treksoft.kvision.utils.perc
 import pl.treksoft.kvision.utils.px
+import pl.treksoft.kvision.window.Window
 
 class RoDialog(
         caption: String,
@@ -23,8 +24,8 @@ class RoDialog(
         val command: Command,
         defaultAction: String = "OK",
         widthPerc: Int = 30,
-        heightPerc: Int = 30) :
-        Displayable, RoWindow(caption = caption, closeButton = true) {
+        heightPerc: Int = 100) :
+        Displayable, Window(caption = caption, closeButton = true) {
 
     private val okButton = Button(
             text = defaultAction,
@@ -71,12 +72,12 @@ class RoDialog(
         vPanel(justify = FlexJustify.SPACEBETWEEN) {
             height = 100.perc
             formPanel = FormPanelFactory(items).panel
-            //formPanel?.height = 100.perc  -- omitted here, already set in creating function
 
             add(formPanel!!, grow = 2)
 
             val buttonBar = HPanel(spacing = 10) {
                 id = "button-bar"
+                marginTop = 20.px
                 marginLeft = 10.px
             }
             buttonBar.add(okButton)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoWindow.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoWindow.kt
deleted file mode 100644
index 5f6950e..0000000
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoWindow.kt
+++ /dev/null
@@ -1,440 +0,0 @@
-package org.apache.isis.client.kroviz.ui.kv
-
-import com.github.snabbdom.VNode
-import org.w3c.dom.events.Event
-import org.w3c.dom.events.MouseEvent
-import pl.treksoft.kvision.core.Component
-import pl.treksoft.kvision.core.Container
-import pl.treksoft.kvision.core.CssSize
-import pl.treksoft.kvision.core.Overflow
-import pl.treksoft.kvision.core.Position
-import pl.treksoft.kvision.core.Resize
-import pl.treksoft.kvision.core.UNIT
-import pl.treksoft.kvision.html.Icon
-import pl.treksoft.kvision.html.TAG
-import pl.treksoft.kvision.html.Tag
-import pl.treksoft.kvision.modal.CloseIcon
-import pl.treksoft.kvision.panel.SimplePanel
-import pl.treksoft.kvision.utils.obj
-import pl.treksoft.kvision.utils.px
-import pl.treksoft.kvision.window.MaximizeIcon
-import pl.treksoft.kvision.window.MinimizeIcon
-import pl.treksoft.kvision.window.Window
-
-internal const val DEFAULT_Z_INDEX = 900
-internal const val WINDOW_HEADER_HEIGHT = 40
-internal const val WINDOW_CONTENT_MARGIN_BOTTOM = 11
-
-/**
- * Floating window container.
- *
- * @constructor
- * @param caption window title
- * @param contentWidth window content width
- * @param contentHeight window content height
- * @param isResizable determines if the window is resizable
- * @param isDraggable determines if the window is draggable
- * @param closeButton determines if Close button is visible
- * @param maximizeButton determines if Maximize button is visible
- * @param minimizeButton determines if Minimize button is visible
- * @param classes a set of CSS class names
- * @param init an initializer extension function
- */
-@Suppress("TooManyFunctions")
-open class RoWindow(
-        caption: String? = null,
-        contentWidth: CssSize? = CssSize(0, UNIT.auto),
-        contentHeight: CssSize? = CssSize(0, UNIT.auto),
-        isResizable: Boolean = true,
-        isDraggable: Boolean = true,
-        closeButton: Boolean = false,
-        maximizeButton: Boolean = false,
-        minimizeButton: Boolean = false,
-        icon: String? = null,
-        classes: Set<String> = setOf(),
-        init: (RoWindow.() -> Unit)? = null
-) :
-        SimplePanel(classes + setOf("modal-content", "kv-window")) {
-
-    /**
-     * Window caption text.
-     */
-    var caption
-        get() = captionTag.content
-        set(value) {
-            captionTag.content = value
-            checkHeaderVisibility()
-        }
-    /**
-     * Window content width.
-     */
-    var contentWidth
-        get() = width
-        set(value) {
-            width = value
-        }
-    /**
-     * Window content height.
-     */
-    var contentHeight
-        get() = content.height
-        set(value) {
-            content.height = value
-        }
-    /**
-     * Window content height.
-     */
-    var contentOverflow
-        get() = content.overflow
-        set(value) {
-            content.overflow = value
-        }
-    /**
-     * Determines if the window is resizable.
-     */
-    var isResizable by refreshOnUpdate(isResizable) { checkIsResizable() }
-    /**
-     * Determines if the window is draggable.
-     */
-    var isDraggable by refreshOnUpdate(isDraggable) { checkIsDraggable(); checkHeaderVisibility() }
-    /**
-     * Determines if Close button is visible.
-     */
-    var closeButton
-        get() = closeIcon.visible
-        set(value) {
-            closeIcon.visible = value
-            checkHeaderVisibility()
-        }
-    /**
-     * Determines if Maximize button is visible.
-     */
-    var maximizeButton
-        get() = maximizeIcon.visible
-        set(value) {
-            maximizeIcon.visible = value
-            checkHeaderVisibility()
-        }
-    /**
-     * Determines if Maximize button is visible.
-     */
-    var minimizeButton
-        get() = minimizeIcon.visible
-        set(value) {
-            minimizeIcon.visible = value
-            checkHeaderVisibility()
-        }
-    /**
-     * Window icon.
-     */
-    var icon
-        get() = if (windowIcon.icon == "") null else windowIcon.icon
-        set(value) {
-            windowIcon.icon = value ?: ""
-            windowIcon.visible = (value != null && value != "")
-        }
-
-    private val header = SimplePanel(setOf("modal-header"))
-
-    /**
-     * @suppress
-     * Internal property.
-     */
-    protected val content = SimplePanel().apply {
-        this.height = contentHeight
-        this.overflow = Overflow.AUTO
-    }
-    private val closeIcon = CloseIcon()
-    private val maximizeIcon = MaximizeIcon()
-    private val minimizeIcon = MinimizeIcon()
-    private val captionTag = Tag(TAG.H5, caption, classes = setOf("modal-title"))
-    private val iconsContainer = SimplePanel(setOf("kv-window-icons-container"))
-    private val windowIcon = Icon(icon ?: "").apply {
-        addCssClass("window-icon")
-        visible = (icon != null && icon != "")
-    }
-
-    private var isResizeEvent = false
-
-    init {
-        id = "kv_window_$counter"
-        @Suppress("LeakingThis")
-        position = Position.ABSOLUTE
-        @Suppress("LeakingThis")
-        overflow = Overflow.HIDDEN
-        @Suppress("LeakingThis")
-        width = contentWidth
-        @Suppress("LeakingThis")
-        zIndex = ++zIndexCounter
-        header.add(captionTag)
-        captionTag.add(windowIcon)
-        header.add(iconsContainer)
-        minimizeIcon.visible = minimizeButton
-        minimizeIcon.setEventListener<MinimizeIcon> {
-            click = { _ ->
-                @Suppress("UnsafeCastFromDynamic")
-                if (this@RoWindow.dispatchEvent("minimizeWindow", obj {}) != false) {
-                    toggleMinimize()
-                }
-            }
-            mousedown = { e ->
-                e.stopPropagation()
-            }
-        }
-        iconsContainer.add(minimizeIcon)
-        maximizeIcon.visible = maximizeButton
-        maximizeIcon.setEventListener<MaximizeIcon> {
-            click = { _ ->
-                @Suppress("UnsafeCastFromDynamic")
-                if (this@RoWindow.dispatchEvent("maximizeWindow", obj {}) != false) {
-                    toggleMaximize()
-                }
-            }
-            mousedown = { e ->
-                e.stopPropagation()
-            }
-        }
-        iconsContainer.add(maximizeIcon)
-        closeIcon.visible = closeButton
-        closeIcon.setEventListener<CloseIcon> {
-            click = { _ ->
-                @Suppress("UnsafeCastFromDynamic")
-                if (this@RoWindow.dispatchEvent("closeWindow", obj {}) != false) {
-                    close()
-                }
-            }
-            mousedown = { e ->
-                e.stopPropagation()
-            }
-        }
-        iconsContainer.add(closeIcon)
-        checkHeaderVisibility()
-        addInternal(header)
-        addInternal(content)
-        checkIsDraggable()
-        if (isResizable) {
-            @Suppress("LeakingThis")
-            resize = Resize.BOTH
-            content.marginBottom = WINDOW_CONTENT_MARGIN_BOTTOM.px
-        }
-        @Suppress("LeakingThis")
-        setEventListener<RoWindow> {
-            click = {
-                toFront()
-                focus()
-            }
-        }
-        @Suppress("LeakingThis")
-        init?.invoke(this)
-        counter++
-    }
-
-    private fun checkHeaderVisibility() {
-        @Suppress("ComplexCondition")
-        if (!closeButton && !maximizeButton && !minimizeButton && caption == null && !isDraggable) {
-            header.hide()
-        } else {
-            header.show()
-        }
-    }
-
-    open fun checkIsDraggable() {
-        var isDrag: Boolean
-        if (isDraggable) {
-            header.setEventListener<SimplePanel> {
-                mousedown = { e ->
-                    if (e.button.toInt() == 0) {
-                        isDrag = true
-                        val dragStartX = this@RoWindow.getElementJQuery()?.position()?.left?.toInt() ?: 0
-                        val dragStartY = this@RoWindow.getElementJQuery()?.position()?.top?.toInt() ?: 0
-                        val dragMouseX = e.pageX
-                        val dragMouseY = e.pageY
-                        val moveCallback = { me: Event ->
-                            if (isDrag) {
-                                setOpacity("0.3")
-                                this@RoWindow.left = (dragStartX + (me as MouseEvent).pageX - dragMouseX).toInt().px
-                                this@RoWindow.top = (dragStartY + (me).pageY - dragMouseY).toInt().px
-                            }
-                        }
-                        kotlin.browser.window.addEventListener("mousemove", moveCallback)
-                        var upCallback: ((Event) -> Unit)? = null
-                        upCallback = {
-                            isDrag = false
-                            setOpacity("1.0")
-                            kotlin.browser.window.removeEventListener("mousemove", moveCallback)
-                            kotlin.browser.window.removeEventListener("mouseup", upCallback)
-                        }
-                        kotlin.browser.window.addEventListener("mouseup", upCallback)
-                    }
-                }
-            }
-        } else {
-            isDrag = false
-            header.removeEventListeners()
-        }
-    }
-
-    private fun setOpacity(value: String) {
-        val opacity = value.toDouble()
-        this@RoWindow.getElementJQuery()?.css(
-                "background-color",
-                "rgba(255, 255, 255, $opacity)"
-        )
-    }
-
-
-    private fun checkIsResizable() {
-        checkResizablEventHandler()
-        if (isResizable) {
-            resize = Resize.BOTH
-            val intHeight = (getElementJQuery()?.height()?.toInt() ?: 0)
-            content.height = (intHeight - WINDOW_HEADER_HEIGHT - WINDOW_CONTENT_MARGIN_BOTTOM).px
-            content.marginBottom = WINDOW_CONTENT_MARGIN_BOTTOM.px
-        } else {
-            resize = Resize.NONE
-            val intHeight = (getElementJQuery()?.height()?.toInt() ?: 0)
-            content.height = (intHeight - WINDOW_HEADER_HEIGHT).px
-            content.marginBottom = 0.px
-        }
-    }
-
-    @Suppress("UnsafeCastFromDynamic")
-    private fun checkResizablEventHandler() {
-        if (isResizable) {
-            if (!isResizeEvent) {
-                isResizeEvent = true
-                RoManagerBootstrap.setResizeEvent(this) {
-                    val eid = getElementJQuery()?.attr("id")
-                    if (isResizable && eid == id) {
-                        val outerWidth = (getElementJQuery()?.outerWidth()?.toInt() ?: 0)
-                        val outerHeight = (getElementJQuery()?.outerHeight()?.toInt() ?: 0)
-                        val intWidth = (getElementJQuery()?.width()?.toInt() ?: 0)
-                        val intHeight = (getElementJQuery()?.height()?.toInt() ?: 0)
-                        content.width = intWidth.px
-                        content.height = (intHeight - WINDOW_HEADER_HEIGHT - WINDOW_CONTENT_MARGIN_BOTTOM).px
-                        width = outerWidth.px
-                        height = outerHeight.px
-                        this.dispatchEvent("resizeWindow", obj {
-                            detail = obj {
-                                this.width = outerWidth
-                                this.height = outerHeight
-                            }
-                        })
-                    }
-                }
-            }
-        } else if (isResizeEvent) {
-            RoManagerBootstrap.clearResizeEvent(this)
-            isResizeEvent = false
-        }
-    }
-
-    override fun add(child: Component): SimplePanel {
-        content.add(child)
-        return this
-    }
-
-    override fun addAll(children: List<Component>): SimplePanel {
-        content.addAll(children)
-        return this
-    }
-
-    override fun remove(child: Component): SimplePanel {
-        content.remove(child)
-        return this
-    }
-
-    override fun removeAll(): SimplePanel {
-        content.removeAll()
-        return this
-    }
-
-    override fun getChildren(): List<Component> {
-        return content.getChildren()
-    }
-
-    override fun afterCreate(node: VNode) {
-        checkResizablEventHandler()
-    }
-
-    override fun afterDestroy() {
-        if (isResizeEvent) {
-            RoManagerBootstrap.clearResizeEvent(this)
-            isResizeEvent = false
-        }
-    }
-
-    /**
-     * Moves the current window to the front.
-     */
-    open fun toFront() {
-        if ((zIndex ?: 0) < zIndexCounter) zIndex = ++zIndexCounter
-    }
-
-    /**
-     * Makes the current window focused.
-     */
-    open fun focus() {
-        getElementJQuery()?.focus()
-    }
-
-    /**
-     * Close the window.
-     */
-    open fun close() {
-        hide()
-    }
-
-    /**
-     * Maximize or restore the window size.
-     */
-    open fun toggleMaximize() {
-    }
-
-    /**
-     * Minimize or restore the window size.
-     */
-    open fun toggleMinimize() {
-    }
-
-    companion object {
-        internal var counter = 0
-        internal var zIndexCounter = DEFAULT_Z_INDEX
-    }
-}
-
-/**
- * DSL builder extension function.
- *
- * It takes the same parameters as the constructor of the built component.
- */
-fun Container.window(
-        caption: String? = null,
-        contentWidth: CssSize? = CssSize(0, UNIT.auto),
-        contentHeight: CssSize? = CssSize(0, UNIT.auto),
-        isResizable: Boolean = true,
-        isDraggable: Boolean = true,
-        closeButton: Boolean = false,
-        maximizeButton: Boolean = false,
-        minimizeButton: Boolean = false,
-        icon: String? = null,
-        classes: Set<String> = setOf(),
-        init: (RoWindow.() -> Unit)? = null
-): RoWindow {
-    val window =
-            RoWindow(
-                    caption,
-                    contentWidth,
-                    contentHeight,
-                    isResizable,
-                    isDraggable,
-                    closeButton,
-                    maximizeButton,
-                    minimizeButton,
-                    icon,
-                    classes,
-                    init
-            )
-    this.add(window)
-    return window
-}