From 857afb0fa7e8bdf435e2bb7cb5d951ba29449362 Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Tue, 7 May 2019 20:42:30 +0200 Subject: Closable tabs in the TabPanel container. --- .../kvision-bootstrap/src/main/resources/css/style.css | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'kvision-modules/kvision-bootstrap') diff --git a/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css b/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css index a0314ced..ddbd5d28 100644 --- a/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css +++ b/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css @@ -163,3 +163,17 @@ ul.tabs-top > li { float:none; flex-shrink: 0; } + +.kv-tab-close { + margin-left: 10px; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: 0.2; +} + +.kv-tab-close:hover, .kv-tab-close:focus { + cursor: pointer; + filter: alpha(opacity=50); + opacity: 0.5; +} -- cgit From 0b91779a5baf5f78ae616db8f67dcf4d81e839cc Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Sat, 11 May 2019 02:33:48 +0200 Subject: Allow constructing Root containers from HTMLElement objects. --- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../pl/treksoft/kvision/dropdown/DropDownSpec.kt | 12 ++++++------ .../test/pl/treksoft/kvision/modal/AlertSpec.kt | 2 +- .../test/pl/treksoft/kvision/modal/CloseIconSpec.kt | 2 +- .../test/pl/treksoft/kvision/modal/ConfirmSpec.kt | 2 +- .../test/pl/treksoft/kvision/modal/ModalSpec.kt | 4 ++-- .../test/pl/treksoft/kvision/window/WindowSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../pl/treksoft/kvision/chart/ChartCanvasSpec.kt | 4 ++-- .../test/pl/treksoft/kvision/chart/ChartSpec.kt | 4 ++-- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../pl/treksoft/kvision/data/DataContainerSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../treksoft/kvision/form/time/DateTimeInputSpec.kt | 2 +- .../pl/treksoft/kvision/form/time/DateTimeSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../pl/treksoft/kvision/redux/StateBindingSpec.kt | 4 ++-- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../treksoft/kvision/form/text/RichTextInputSpec.kt | 2 +- .../pl/treksoft/kvision/form/text/RichTextSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../treksoft/kvision/form/select/SelectInputSpec.kt | 2 +- .../kvision/form/select/SelectOptGroupSpec.kt | 2 +- .../kvision/form/select/SelectOptionSpec.kt | 2 +- .../pl/treksoft/kvision/form/select/SelectSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../kvision/form/spinner/SpinnerInputSpec.kt | 6 +++--- .../pl/treksoft/kvision/form/spinner/SpinnerSpec.kt | 6 +++--- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../pl/treksoft/kvision/tabulator/TabulatorSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../treksoft/kvision/form/upload/UploadInputSpec.kt | 2 +- .../pl/treksoft/kvision/form/upload/UploadSpec.kt | 2 +- src/main/kotlin/pl/treksoft/kvision/KVManager.kt | 5 +++++ src/main/kotlin/pl/treksoft/kvision/panel/Root.kt | 21 ++++++++++++++++++--- .../kotlin/test/pl/treksoft/kvision/TestUtil.kt | 2 +- .../test/pl/treksoft/kvision/core/ContainerSpec.kt | 10 +++++----- .../test/pl/treksoft/kvision/core/StyleSpec.kt | 6 +++--- .../test/pl/treksoft/kvision/core/WidgetSpec.kt | 2 +- .../pl/treksoft/kvision/core/WidgetWrapperSpec.kt | 2 +- .../pl/treksoft/kvision/dropdown/ContextMenuSpec.kt | 4 ++-- .../test/pl/treksoft/kvision/dropdown/HeaderSpec.kt | 2 +- .../pl/treksoft/kvision/dropdown/SeparatorSpec.kt | 2 +- .../test/pl/treksoft/kvision/form/FieldLabelSpec.kt | 2 +- .../test/pl/treksoft/kvision/form/HelpBlockSpec.kt | 2 +- .../kvision/form/check/CheckBoxInputSpec.kt | 2 +- .../pl/treksoft/kvision/form/check/CheckBoxSpec.kt | 2 +- .../kvision/form/check/RadioGroupInputSpec.kt | 2 +- .../treksoft/kvision/form/check/RadioGroupSpec.kt | 2 +- .../treksoft/kvision/form/check/RadioInputSpec.kt | 2 +- .../pl/treksoft/kvision/form/check/RadioSpec.kt | 2 +- .../pl/treksoft/kvision/form/text/PasswordSpec.kt | 2 +- .../treksoft/kvision/form/text/TextAreaInputSpec.kt | 2 +- .../pl/treksoft/kvision/form/text/TextAreaSpec.kt | 2 +- .../pl/treksoft/kvision/form/text/TextInputSpec.kt | 2 +- .../test/pl/treksoft/kvision/form/text/TextSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/ButtonSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/CanvasSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/html/DivSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/FooterSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/html/H1Spec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/html/H2Spec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/html/H3Spec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/html/H4Spec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/html/H5Spec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/html/H6Spec.kt | 2 +- .../test/pl/treksoft/kvision/html/HeaderSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/IconSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/IframeSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/ImageSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/LinkSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/ListSpec.kt | 4 ++-- .../kotlin/test/pl/treksoft/kvision/html/PSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/SectionSpec.kt | 2 +- .../test/pl/treksoft/kvision/html/SpanSpec.kt | 2 +- .../kotlin/test/pl/treksoft/kvision/html/TagSpec.kt | 8 ++++---- .../test/pl/treksoft/kvision/navbar/NavFormSpec.kt | 2 +- .../test/pl/treksoft/kvision/navbar/NavSpec.kt | 2 +- .../test/pl/treksoft/kvision/navbar/NavbarSpec.kt | 2 +- .../test/pl/treksoft/kvision/panel/DockPanelSpec.kt | 2 +- .../test/pl/treksoft/kvision/panel/FlexPanelSpec.kt | 2 +- .../test/pl/treksoft/kvision/panel/GridPanelSpec.kt | 2 +- .../test/pl/treksoft/kvision/panel/HPanelSpec.kt | 2 +- .../kvision/panel/ResponsiveGridPanelSpec.kt | 2 +- .../test/pl/treksoft/kvision/panel/RootSpec.kt | 2 +- .../pl/treksoft/kvision/panel/SplitPanelSpec.kt | 2 +- .../pl/treksoft/kvision/panel/StackPanelSpec.kt | 8 ++++---- .../test/pl/treksoft/kvision/panel/TabPanelSpec.kt | 8 ++++---- .../test/pl/treksoft/kvision/panel/VPanelSpec.kt | 2 +- .../pl/treksoft/kvision/progress/ProgressBarSpec.kt | 2 +- .../kvision/progress/ProgressIndicatorSpec.kt | 2 +- .../test/pl/treksoft/kvision/table/CellSpec.kt | 2 +- .../pl/treksoft/kvision/table/HeaderCellSpec.kt | 2 +- .../test/pl/treksoft/kvision/table/RowSpec.kt | 2 +- .../test/pl/treksoft/kvision/table/TableSpec.kt | 2 +- .../pl/treksoft/kvision/toolbar/ButtonGroupSpec.kt | 2 +- .../test/pl/treksoft/kvision/toolbar/ToolbarSpec.kt | 2 +- 97 files changed, 148 insertions(+), 128 deletions(-) (limited to 'kvision-modules/kvision-bootstrap') diff --git a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 2fc0320a..1ad97acc 100644 --- a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -88,7 +88,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt index ff4daea7..af35fa51 100644 --- a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt +++ b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt @@ -34,7 +34,7 @@ class DropDownSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val dd = DropDown("Dropdown", listOf("abc" to "#!/x", "def" to "#!/y"), "flag") root.add(dd) dd.toggle() @@ -51,7 +51,7 @@ class DropDownSpec : DomSpec { @Test fun renderDropUp() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val dd = DropDown("Dropdown", listOf("abc" to "#!/x", "def" to "#!/y"), "flag").apply { dropup = true } root.add(dd) dd.toggle() @@ -68,7 +68,7 @@ class DropDownSpec : DomSpec { @Test fun renderHeaderElement() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val dd = DropDown("Dropdown", listOf("abc" to DD.HEADER.option), "flag") root.add(dd) dd.toggle() @@ -85,7 +85,7 @@ class DropDownSpec : DomSpec { @Test fun renderSeparatorElement() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val dd = DropDown("Dropdown", listOf("abc" to DD.SEPARATOR.option), "flag") root.add(dd) dd.toggle() @@ -102,7 +102,7 @@ class DropDownSpec : DomSpec { @Test fun renderDisabledElement() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val dd = DropDown("Dropdown", listOf("abc" to DD.DISABLED.option), "flag") root.add(dd) dd.toggle() @@ -119,7 +119,7 @@ class DropDownSpec : DomSpec { @Test fun toggle() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val dd = DropDown("Dropdown", listOf("abc" to "#!/x", "def" to "#!/y"), "flag") root.add(dd) val visible = dd.getElementJQuery()?.hasClass("open") ?: false diff --git a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/AlertSpec.kt b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/AlertSpec.kt index 807f837a..c3d17de9 100644 --- a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/AlertSpec.kt +++ b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/AlertSpec.kt @@ -36,7 +36,7 @@ class AlertSpec : DomSpec { @Test fun render() { run { - Root("test", true) + Root("test", fixed = true) Alert.show("Alert caption", "Alert content") val alert = document.getElementById("test")?.let { jQuery(it).find(".modal")[0] } assertNotNull(alert, "Should show alert window") diff --git a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/CloseIconSpec.kt b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/CloseIconSpec.kt index 2e3ea3ef..1893ce81 100644 --- a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/CloseIconSpec.kt +++ b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/CloseIconSpec.kt @@ -32,7 +32,7 @@ class CloseIconSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ci = CloseIcon() root.add(ci) val element = document.getElementById("test") diff --git a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/ConfirmSpec.kt b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/ConfirmSpec.kt index dc734e10..875bf9e2 100644 --- a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/ConfirmSpec.kt +++ b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/ConfirmSpec.kt @@ -36,7 +36,7 @@ class ConfirmSpec : DomSpec { @Test fun render() { run { - Root("test", true) + Root("test", fixed = true) Confirm.show("Confirm caption", "Confirm content") val confirm = document.getElementById("test")?.let { jQuery(it).find(".modal")[0] } assertNotNull(confirm, "Should show confirm window") diff --git a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/ModalSpec.kt b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/ModalSpec.kt index 523abfd5..7149b163 100644 --- a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/ModalSpec.kt +++ b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/modal/ModalSpec.kt @@ -35,7 +35,7 @@ class ModalSpec : DomSpec { @Test fun render() { run { - Root("test", true) + Root("test", fixed = true) val modal = Modal("Modal") modal.show() val content = document.getElementById("test")?.let { jQuery(it).find(".modal-title").html() } @@ -47,7 +47,7 @@ class ModalSpec : DomSpec { @Test fun toggle() { run { - Root("test", true) + Root("test", fixed = true) val modal = Modal("Modal") modal.toggle() val content = document.getElementById("test")?.let { jQuery(it).find(".modal-title").html() } diff --git a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/window/WindowSpec.kt b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/window/WindowSpec.kt index e87626ca..c79b9d32 100644 --- a/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/window/WindowSpec.kt +++ b/kvision-modules/kvision-bootstrap/src/test/kotlin/test/pl/treksoft/kvision/window/WindowSpec.kt @@ -32,7 +32,7 @@ class WindowSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val window = Window("Window title", isResizable = false) root.add(window) val id = window.id diff --git a/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/chart/ChartCanvasSpec.kt b/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/chart/ChartCanvasSpec.kt index 6fae54ad..da83b989 100644 --- a/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/chart/ChartCanvasSpec.kt +++ b/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/chart/ChartCanvasSpec.kt @@ -36,7 +36,7 @@ class ChartCanvasSpec : DomSpec { @Test fun renderResponsive() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val chart = ChartCanvas( configuration = Configuration( ChartType.SCATTER, @@ -56,7 +56,7 @@ class ChartCanvasSpec : DomSpec { @Test fun renderNotResponsive() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val chart = ChartCanvas( 300, 600, configuration = Configuration( diff --git a/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/chart/ChartSpec.kt b/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/chart/ChartSpec.kt index 7974ea78..1fe73608 100644 --- a/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/chart/ChartSpec.kt +++ b/kvision-modules/kvision-chart/src/test/kotlin/test/pl/treksoft/kvision/chart/ChartSpec.kt @@ -37,7 +37,7 @@ class ChartSpec : DomSpec { @Test fun renderResponsive() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val chart = Chart( Configuration( ChartType.SCATTER, @@ -60,7 +60,7 @@ class ChartSpec : DomSpec { @Test fun renderNotResponsive() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val chart = Chart( Configuration( ChartType.SCATTER, diff --git a/kvision-modules/kvision-datacontainer/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-datacontainer/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-datacontainer/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-datacontainer/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-datacontainer/src/test/kotlin/test/pl/treksoft/kvision/data/DataContainerSpec.kt b/kvision-modules/kvision-datacontainer/src/test/kotlin/test/pl/treksoft/kvision/data/DataContainerSpec.kt index 931294d5..556d3991 100644 --- a/kvision-modules/kvision-datacontainer/src/test/kotlin/test/pl/treksoft/kvision/data/DataContainerSpec.kt +++ b/kvision-modules/kvision-datacontainer/src/test/kotlin/test/pl/treksoft/kvision/data/DataContainerSpec.kt @@ -36,7 +36,7 @@ class DataContainerSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) class Model(value: String) : BaseDataComponent() { var value: String by obs(value) diff --git a/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeInputSpec.kt b/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeInputSpec.kt index 69ab46ec..877cf650 100644 --- a/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeInputSpec.kt +++ b/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeInputSpec.kt @@ -34,7 +34,7 @@ class DateTimeInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val data = Date() val dti = DateTimeInput(value = data).apply { placeholder = "place" diff --git a/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeSpec.kt b/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeSpec.kt index 19cefd86..b5e393bb 100644 --- a/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeSpec.kt +++ b/kvision-modules/kvision-datetime/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeSpec.kt @@ -34,7 +34,7 @@ class DateTimeSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val data = Date() val ti = DateTime(value = data, label = "Label").apply { placeholder = "place" diff --git a/kvision-modules/kvision-redux/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-redux/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-redux/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-redux/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-redux/src/test/kotlin/test/pl/treksoft/kvision/redux/StateBindingSpec.kt b/kvision-modules/kvision-redux/src/test/kotlin/test/pl/treksoft/kvision/redux/StateBindingSpec.kt index 0271a956..5204402d 100644 --- a/kvision-modules/kvision-redux/src/test/kotlin/test/pl/treksoft/kvision/redux/StateBindingSpec.kt +++ b/kvision-modules/kvision-redux/src/test/kotlin/test/pl/treksoft/kvision/redux/StateBindingSpec.kt @@ -55,7 +55,7 @@ class StateBindingSpec : DomSpec { @Test fun stateBinding() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val store = createReduxStore(::stateReducer, State(10)) val container = SimplePanel() @@ -81,7 +81,7 @@ class StateBindingSpec : DomSpec { @Test fun stateUpdate() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val store = createReduxStore(::stateReducer, State(10)) val container = SimplePanel() diff --git a/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/form/text/RichTextInputSpec.kt b/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/form/text/RichTextInputSpec.kt index 21b7dc39..4ebf7b45 100644 --- a/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/form/text/RichTextInputSpec.kt +++ b/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/form/text/RichTextInputSpec.kt @@ -34,7 +34,7 @@ class RichTextInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val hai = RichTextInput(value = "abc").apply { placeholder = "place" id = "idti" diff --git a/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/form/text/RichTextSpec.kt b/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/form/text/RichTextSpec.kt index 844b7e94..1ea79790 100644 --- a/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/form/text/RichTextSpec.kt +++ b/kvision-modules/kvision-richtext/src/test/kotlin/test/pl/treksoft/kvision/form/text/RichTextSpec.kt @@ -34,7 +34,7 @@ class RichTextSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val hai = RichText(value = "abc", label = "Field").apply { placeholder = "place" id = "idti" diff --git a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectInputSpec.kt b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectInputSpec.kt index 30f42e9c..bfd93900 100644 --- a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectInputSpec.kt +++ b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectInputSpec.kt @@ -34,7 +34,7 @@ class SelectInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val selectInput = SelectInput(listOf("test1" to "Test 1", "test2" to "Test 2"), "test1", true).apply { liveSearch = true placeholder = "Choose ..." diff --git a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptGroupSpec.kt b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptGroupSpec.kt index bd88f560..33ccc843 100644 --- a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptGroupSpec.kt +++ b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptGroupSpec.kt @@ -33,7 +33,7 @@ class SelectOptGroupSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val selectOptGroup = SelectOptGroup("Group", listOf("test1" to "Test 1", "test2" to "Test 2"), 2) root.add(selectOptGroup) val element = document.getElementById("test") diff --git a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptionSpec.kt b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptionSpec.kt index f7e07d42..33c36576 100644 --- a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptionSpec.kt +++ b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptionSpec.kt @@ -32,7 +32,7 @@ class SelectOptionSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val selectOption = SelectOption("testValue", "testLabel") root.add(selectOption) val element = document.getElementById("test") diff --git a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectSpec.kt b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectSpec.kt index eaccd551..9eddff81 100644 --- a/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectSpec.kt +++ b/kvision-modules/kvision-select/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectSpec.kt @@ -34,7 +34,7 @@ class SelectSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val select = Select(listOf("test1" to "Test 1", "test2" to "Test 2"), "test1", null, true, null, "Label").apply { liveSearch = true placeholder = "Choose ..." diff --git a/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerInputSpec.kt b/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerInputSpec.kt index a240bfd8..467e48db 100644 --- a/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerInputSpec.kt +++ b/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerInputSpec.kt @@ -32,7 +32,7 @@ class SpinnerInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val si = SpinnerInput(value = 13).apply { placeholder = "place" id = "idti" @@ -46,7 +46,7 @@ class SpinnerInputSpec : DomSpec { @Test fun spinUp() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val si = SpinnerInput(value = 13).apply { placeholder = "place" id = "idti" @@ -61,7 +61,7 @@ class SpinnerInputSpec : DomSpec { @Test fun spinDown() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val si = SpinnerInput(value = 13).apply { placeholder = "place" id = "idti" diff --git a/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt b/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt index 30f12a93..928fe0b1 100644 --- a/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt +++ b/kvision-modules/kvision-spinner/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt @@ -33,7 +33,7 @@ class SpinnerSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ti = Spinner(value = 13, label = "Label").apply { placeholder = "place" name = "name" @@ -59,7 +59,7 @@ class SpinnerSpec : DomSpec { @Test fun spinUp() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val si = Spinner(value = 13) root.add(si) assertEquals(13, si.value, "Should return initial value before spinUp") @@ -71,7 +71,7 @@ class SpinnerSpec : DomSpec { @Test fun spinDown() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val si = Spinner(value = 13) root.add(si) assertEquals(13, si.value, "Should return initial value before spinDown") diff --git a/kvision-modules/kvision-tabulator/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-tabulator/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-tabulator/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-tabulator/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-tabulator/src/test/kotlin/test/pl/treksoft/kvision/tabulator/TabulatorSpec.kt b/kvision-modules/kvision-tabulator/src/test/kotlin/test/pl/treksoft/kvision/tabulator/TabulatorSpec.kt index d6b33a78..1f49ee93 100644 --- a/kvision-modules/kvision-tabulator/src/test/kotlin/test/pl/treksoft/kvision/tabulator/TabulatorSpec.kt +++ b/kvision-modules/kvision-tabulator/src/test/kotlin/test/pl/treksoft/kvision/tabulator/TabulatorSpec.kt @@ -34,7 +34,7 @@ class TabulatorSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tabulator = Tabulator(options = TabulatorOptions(data = arrayOf(obj { id = 1 name = "Name" diff --git a/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadInputSpec.kt b/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadInputSpec.kt index 626b70e4..de7a9315 100644 --- a/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadInputSpec.kt +++ b/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadInputSpec.kt @@ -33,7 +33,7 @@ class UploadInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val upi = UploadInput(multiple = true).apply { id = "idti" } diff --git a/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadSpec.kt b/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadSpec.kt index bea4ddee..92078153 100644 --- a/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadSpec.kt +++ b/kvision-modules/kvision-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadSpec.kt @@ -33,7 +33,7 @@ class UploadSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val upi = Upload(multiple = true) val id = upi.input.id root.add(upi) diff --git a/src/main/kotlin/pl/treksoft/kvision/KVManager.kt b/src/main/kotlin/pl/treksoft/kvision/KVManager.kt index faa0b77c..d1a4a8be 100644 --- a/src/main/kotlin/pl/treksoft/kvision/KVManager.kt +++ b/src/main/kotlin/pl/treksoft/kvision/KVManager.kt @@ -29,6 +29,7 @@ import com.github.snabbdom.datasetModule import com.github.snabbdom.eventListenersModule import com.github.snabbdom.propsModule import com.github.snabbdom.styleModule +import org.w3c.dom.HTMLElement import pl.treksoft.kvision.core.Component import pl.treksoft.kvision.utils.isIE11 import kotlin.browser.document @@ -72,6 +73,10 @@ internal object KVManager { return sdPatch(container, vnode) } + internal fun patch(element: HTMLElement, vnode: VNode): VNode { + return sdPatch(element, vnode) + } + internal fun patch(oldVNode: VNode, newVNode: VNode): VNode { return sdPatch(oldVNode, newVNode) } diff --git a/src/main/kotlin/pl/treksoft/kvision/panel/Root.kt b/src/main/kotlin/pl/treksoft/kvision/panel/Root.kt index c17ea1a4..dd3d39b6 100644 --- a/src/main/kotlin/pl/treksoft/kvision/panel/Root.kt +++ b/src/main/kotlin/pl/treksoft/kvision/panel/Root.kt @@ -23,6 +23,7 @@ package pl.treksoft.kvision.panel import com.github.snabbdom.VNode import com.github.snabbdom.h +import org.w3c.dom.HTMLElement import pl.treksoft.kvision.KVManager import pl.treksoft.kvision.core.StringBoolPair import pl.treksoft.kvision.core.Style @@ -45,7 +46,12 @@ import pl.treksoft.kvision.utils.snOpt * @param init an initializer extension function */ @Suppress("TooManyFunctions") -class Root(id: String, private val fixed: Boolean = false, init: (Root.() -> Unit)? = null) : SimplePanel() { +class Root( + id: String? = null, + element: HTMLElement? = null, + private val fixed: Boolean = false, + init: (Root.() -> Unit)? = null +) : SimplePanel() { private val contextMenus: MutableList = mutableListOf() private var rootVnode: VNode = renderVNode() @@ -54,8 +60,15 @@ class Root(id: String, private val fixed: Boolean = false, init: (Root.() -> Uni val isFirstRoot = roots.isEmpty() init { - rootVnode = KVManager.patch(id, this.renderVNode()) - this.id = id + if (id != null) { + rootVnode = KVManager.patch(id, this.renderVNode()) + this.id = id + } else if (element != null) { + rootVnode = KVManager.patch(element, this.renderVNode()) + this.id = "kv_root_${counter++}" + } else { + throw IllegalArgumentException("No root element specified!") + } roots.add(this) if (isFirstRoot) { Style.styles.forEach { it.parent = this } @@ -144,6 +157,8 @@ class Root(id: String, private val fixed: Boolean = false, init: (Root.() -> Uni } companion object { + internal var counter = 0 + /** * @suppress internal function */ diff --git a/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 37d7a9df..13c8531b 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -86,7 +86,7 @@ interface WSpec : DomSpec { fun runW(code: (widget: Widget, element: Element?) -> Unit) { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() widget.id = "test_id" root.add(widget) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/core/ContainerSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/core/ContainerSpec.kt index 3e16fff8..960a18b6 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/core/ContainerSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/core/ContainerSpec.kt @@ -34,7 +34,7 @@ class ContainerSpec : DomSpec { @Test fun add() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val container = SimplePanel() val child1 = Widget() child1.id = "child1" @@ -52,7 +52,7 @@ class ContainerSpec : DomSpec { @Test fun addAll() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val container = SimplePanel() val child1 = Widget() child1.id = "child1" @@ -69,7 +69,7 @@ class ContainerSpec : DomSpec { @Test fun remove() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val container = SimplePanel() val child1 = Widget() child1.id = "child1" @@ -88,7 +88,7 @@ class ContainerSpec : DomSpec { @Test fun removeAll() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val container = SimplePanel() val child1 = Widget() child1.id = "child1" @@ -107,7 +107,7 @@ class ContainerSpec : DomSpec { @Test fun getChildren() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val container = SimplePanel() val child1 = Widget() child1.id = "child1" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/core/StyleSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/core/StyleSpec.kt index bdb93744..4fbe3d59 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/core/StyleSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/core/StyleSpec.kt @@ -37,7 +37,7 @@ class StyleSpec : DomSpec { @Test fun render() { run { - Root("test", true) { + Root("test", fixed = true) { widget { style { margin = 2.px @@ -58,7 +58,7 @@ class StyleSpec : DomSpec { @Test fun renderCustomClass() { run { - Root("test", true) { + Root("test", fixed = true) { widget { style("customclass") { margin = 2.px @@ -79,7 +79,7 @@ class StyleSpec : DomSpec { @Test fun renderSubclass() { run { - Root("test", true) { + Root("test", fixed = true) { widget { style("customclass") { margin = 2.px diff --git a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt index fc1cc761..6b9be23d 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt @@ -130,7 +130,7 @@ class WidgetSpec : WSpec { @Test fun getRoot() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() root.add(widget) val r = widget.getRoot() diff --git a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetWrapperSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetWrapperSpec.kt index aac92c50..0c28c327 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetWrapperSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetWrapperSpec.kt @@ -35,7 +35,7 @@ class WidgetWrapperSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val widget = Widget() val wrapper = WidgetWrapper(widget) wrapper.width = 100 to UNIT.em diff --git a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/ContextMenuSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/ContextMenuSpec.kt index 7d320e2e..35172267 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/ContextMenuSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/ContextMenuSpec.kt @@ -34,7 +34,7 @@ class ContextMenuSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val m = ContextMenu { link("a", "b") link("c", "d") @@ -54,7 +54,7 @@ class ContextMenuSpec : DomSpec { @Test fun positionMenu() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val m = ContextMenu { link("a", "b") link("c", "d") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/HeaderSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/HeaderSpec.kt index 5a9a050c..e75baf9e 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/HeaderSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/HeaderSpec.kt @@ -32,7 +32,7 @@ class HeaderSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val h = Header("Test") root.add(h) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/SeparatorSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/SeparatorSpec.kt index 2f2d22bf..86607ec7 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/SeparatorSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/SeparatorSpec.kt @@ -32,7 +32,7 @@ class SeparatorSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val s = Separator() root.add(s) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/FieldLabelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/FieldLabelSpec.kt index d13bc920..5319d4bc 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/FieldLabelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/FieldLabelSpec.kt @@ -32,7 +32,7 @@ class FieldLabelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val fl = FieldLabel("input", "Label") root.add(fl) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt index c7d0b0da..c7c4ede5 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt @@ -32,7 +32,7 @@ class HelpBlockSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val fl = HelpBlock("Form Error") root.add(fl) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxInputSpec.kt index 8a9f86d5..677a2b8e 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxInputSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxInputSpec.kt @@ -32,7 +32,7 @@ class CheckBoxInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ci = CheckBoxInput(value = true).apply { name = "name" id = "idti" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxSpec.kt index 9a178abb..16da0c70 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxSpec.kt @@ -33,7 +33,7 @@ class CheckBoxSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ci = CheckBox(value = true, label = "Label").apply { name = "name" style = CheckBoxStyle.DANGER diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupInputSpec.kt index f74a76f7..55788c84 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupInputSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupInputSpec.kt @@ -33,7 +33,7 @@ class RadioGroupInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ci = RadioGroupInput(options = listOf("a" to "A", "b" to "B"), value = "a").apply { disabled = true inline = true diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupSpec.kt index e55e9913..2ed52b67 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupSpec.kt @@ -33,7 +33,7 @@ class RadioGroupSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ci = RadioGroup(options = listOf("a" to "A", "b" to "B"), value = "a", label = "Label").apply { disabled = true inline = true diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioInputSpec.kt index 55d4108a..5b4fe836 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioInputSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioInputSpec.kt @@ -32,7 +32,7 @@ class RadioInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ci = RadioInput(value = true).apply { name = "name" id = "idti" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt index 09763cc7..a8fbbcc5 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt @@ -33,7 +33,7 @@ class RadioSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ci = Radio(value = true, label = "Label", extraValue = "abc").apply { name = "name" style = RadioStyle.DANGER diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/text/PasswordSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/text/PasswordSpec.kt index dc46782b..5d6c2738 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/text/PasswordSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/text/PasswordSpec.kt @@ -32,7 +32,7 @@ class PasswordSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ti = Password(value = "abc", label = "Label").apply { placeholder = "place" name = "name" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextAreaInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextAreaInputSpec.kt index 0e8257ff..815f12e7 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextAreaInputSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextAreaInputSpec.kt @@ -32,7 +32,7 @@ class TextAreaInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ti = TextAreaInput(cols = 5, rows = 2, value = "abc").apply { placeholder = "place" name = "name" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextAreaSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextAreaSpec.kt index c948628b..31b4baf2 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextAreaSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextAreaSpec.kt @@ -32,7 +32,7 @@ class TextAreaSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ti = TextArea(cols = 5, rows = 2, value = "abc", label = "Label").apply { placeholder = "place" name = "name" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextInputSpec.kt index bd8c9786..6d21ab14 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextInputSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextInputSpec.kt @@ -33,7 +33,7 @@ class TextInputSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ti = TextInput(type = TextInputType.PASSWORD, value = "abc").apply { placeholder = "place" name = "name" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextSpec.kt index 071bf35b..7ce811fa 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/text/TextSpec.kt @@ -32,7 +32,7 @@ class TextSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ti = Text(value = "abc", label = "Label").apply { placeholder = "place" name = "name" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/ButtonSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/ButtonSpec.kt index de2ea036..512c3bc2 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/ButtonSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/ButtonSpec.kt @@ -34,7 +34,7 @@ class ButtonSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val button = Button("Cancel", "fa-bars", ButtonStyle.PRIMARY) button.size = ButtonSize.LARGE button.block = true diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/CanvasSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/CanvasSpec.kt index a896d9e5..f30872ca 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/CanvasSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/CanvasSpec.kt @@ -32,7 +32,7 @@ class CanvasSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val canvas = Canvas(800, 600) root.add(canvas) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/DivSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/DivSpec.kt index 4fd64478..528fc0ae 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/DivSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/DivSpec.kt @@ -32,7 +32,7 @@ class DivSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val div = Div("This is a div") root.add(div) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/FooterSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/FooterSpec.kt index 6398d95c..69819203 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/FooterSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/FooterSpec.kt @@ -32,7 +32,7 @@ class FooterSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val footer = Footer("This is a footer") root.add(footer) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/H1Spec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/H1Spec.kt index 6f22b89f..bd0c69b6 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/H1Spec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/H1Spec.kt @@ -32,7 +32,7 @@ class H1Spec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val h1 = H1("This is h1 header") root.add(h1) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/H2Spec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/H2Spec.kt index 1ca74077..5ec2a666 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/H2Spec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/H2Spec.kt @@ -32,7 +32,7 @@ class H2Spec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val h2 = H2("This is h2 header") root.add(h2) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/H3Spec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/H3Spec.kt index a9f58473..f85ede34 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/H3Spec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/H3Spec.kt @@ -32,7 +32,7 @@ class H3Spec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val h3 = H3("This is h3 header") root.add(h3) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/H4Spec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/H4Spec.kt index 47550459..ce52282b 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/H4Spec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/H4Spec.kt @@ -32,7 +32,7 @@ class H4Spec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val h4 = H4("This is h4 header") root.add(h4) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/H5Spec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/H5Spec.kt index 6b3fc647..029a692f 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/H5Spec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/H5Spec.kt @@ -32,7 +32,7 @@ class H5Spec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val h5 = H5("This is h5 header") root.add(h5) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/H6Spec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/H6Spec.kt index e22bd401..06a851e0 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/H6Spec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/H6Spec.kt @@ -32,7 +32,7 @@ class H6Spec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val div = H1("This is h1 header") root.add(div) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/HeaderSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/HeaderSpec.kt index e5ea8679..1b33adcc 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/HeaderSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/HeaderSpec.kt @@ -32,7 +32,7 @@ class HeaderSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val header = Header("This is a header") root.add(header) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/IconSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/IconSpec.kt index fde07413..ea3425c5 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/IconSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/IconSpec.kt @@ -32,7 +32,7 @@ class IconSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val icon = Icon("fa-check") root.add(icon) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/IframeSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/IframeSpec.kt index 60a380b7..69051f92 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/IframeSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/IframeSpec.kt @@ -33,7 +33,7 @@ class IframeSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val iframe = Iframe("https://www.google.com", null, "test", 800, 600, setOf(Sandbox.ALLOWSAMEORIGIN)) root.add(iframe) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/ImageSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/ImageSpec.kt index fa32a24f..169575fc 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/ImageSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/ImageSpec.kt @@ -34,7 +34,7 @@ class ImageSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val res = require("./img/placeholder.png") @Suppress("UnsafeCastFromDynamic") val image = Image(res, "Image", true, ImageShape.ROUNDED, true) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/LinkSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/LinkSpec.kt index 6a4434ae..88869cf4 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/LinkSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/LinkSpec.kt @@ -32,7 +32,7 @@ class LinkSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val link = Link("Google", "http://www.google.com") root.add(link) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt index 5f0aac69..bf52f1dc 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt @@ -35,7 +35,7 @@ class ListSpec : DomSpec { @Test fun renderElements() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val list = ListTag(ListType.DL_HORIZ, listOf("a1", "a2", "b1", "b2")) root.add(list) val element = document.getElementById("test") @@ -50,7 +50,7 @@ class ListSpec : DomSpec { @Test fun renderAsContainer() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val list = ListTag(ListType.UL) list.add(Tag(TAG.PRE, "pre")) list.add(Tag(TAG.DEL, "del")) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/PSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/PSpec.kt index d5af81e3..0ab9c5bc 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/PSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/PSpec.kt @@ -32,7 +32,7 @@ class PSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val par = P("This is a paragraph") root.add(par) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/SectionSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/SectionSpec.kt index 4fb7a490..fa987d05 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/SectionSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/SectionSpec.kt @@ -32,7 +32,7 @@ class SectionSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val section = Section("This is a section") root.add(section) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/SpanSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/SpanSpec.kt index b1f49b45..88604b5e 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/SpanSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/SpanSpec.kt @@ -32,7 +32,7 @@ class SpanSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val span = Span("This is a label") root.add(span) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt index 29a5c079..b6017804 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt @@ -35,7 +35,7 @@ class TagSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tag = Tag(TAG.H1, "This is h1", rich = false, align = Align.CENTER) root.add(tag) val element = document.getElementById("test") @@ -50,7 +50,7 @@ class TagSpec : DomSpec { @Test fun renderRich() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tag = Tag(TAG.H1, "This is h1", rich = true, align = Align.RIGHT) root.add(tag) val element = document.getElementById("test") @@ -65,7 +65,7 @@ class TagSpec : DomSpec { @Test fun renderAsContainer() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tag = Tag(TAG.P, align = Align.RIGHT) tag.add(Tag(TAG.DEL, "This is test")) tag.add(Link("abc", "/x")) @@ -82,7 +82,7 @@ class TagSpec : DomSpec { @Test fun renderUnaryPlus() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tag = Tag(TAG.H1, rich = true) { +"This is h1" } diff --git a/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavFormSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavFormSpec.kt index aeea7a3b..40720bcb 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavFormSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavFormSpec.kt @@ -32,7 +32,7 @@ class NavFormSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val navf = NavForm() root.add(navf) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavSpec.kt index 2ecad124..988a706d 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavSpec.kt @@ -32,7 +32,7 @@ class NavSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val nav = Nav() root.add(nav) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavbarSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavbarSpec.kt index 90af4450..f38a05f9 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavbarSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/navbar/NavbarSpec.kt @@ -37,7 +37,7 @@ class NavbarSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val navbar = Navbar("TEST", NavbarType.FIXEDTOP) root.add(navbar) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/DockPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/DockPanelSpec.kt index d387be56..5684120d 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/DockPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/DockPanelSpec.kt @@ -34,7 +34,7 @@ class DockPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val dockPanel = DockPanel() root.add(dockPanel) dockPanel.add(Span("abc"), Side.UP) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/FlexPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/FlexPanelSpec.kt index 5bcc68f6..b897fef2 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/FlexPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/FlexPanelSpec.kt @@ -35,7 +35,7 @@ class FlexPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val flexPanel = FlexPanel(FlexDir.ROWREV, justify = FlexJustify.SPACEEVENLY) root.add(flexPanel) flexPanel.add(Span("abc"), 1) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/GridPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/GridPanelSpec.kt index add3638f..d7d9beb7 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/GridPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/GridPanelSpec.kt @@ -33,7 +33,7 @@ class GridPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val gridPanel = GridPanel() root.add(gridPanel) gridPanel.add(Span("abc"), 1, 1) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/HPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/HPanelSpec.kt index a185420c..c53b2e57 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/HPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/HPanelSpec.kt @@ -34,7 +34,7 @@ class HPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val hPanel = HPanel(justify = FlexJustify.SPACEBETWEEN) root.add(hPanel) hPanel.add(Span("abc"), 1) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/ResponsiveGridPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/ResponsiveGridPanelSpec.kt index eb710cef..fcdf9860 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/ResponsiveGridPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/ResponsiveGridPanelSpec.kt @@ -33,7 +33,7 @@ class ResponsiveGridPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val rgPanel = ResponsiveGridPanel() root.add(rgPanel) rgPanel.add(Span("abc"), 1, 1) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/RootSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/RootSpec.kt index 659dac9a..474b1d6a 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/RootSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/RootSpec.kt @@ -50,7 +50,7 @@ class RootSpec : DomSpec { @Test fun getRoot() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val r = root.getRoot() assertTrue("Should return self") { r == root } } diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/SplitPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/SplitPanelSpec.kt index 09c397ce..94ed165a 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/SplitPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/SplitPanelSpec.kt @@ -34,7 +34,7 @@ class SplitPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val splitPanel = SplitPanel(Direction.VERTICAL) root.add(splitPanel) val label1 = Span("abc") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/StackPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/StackPanelSpec.kt index f52b6486..8a1ce795 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/StackPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/StackPanelSpec.kt @@ -33,7 +33,7 @@ class StackPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val stackPanel = StackPanel() root.add(stackPanel) val label1 = Span("abc") @@ -48,7 +48,7 @@ class StackPanelSpec : DomSpec { @Test fun renderNotActivateLast() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val stackPanel = StackPanel(activateLast = false) root.add(stackPanel) val label1 = Span("abc") @@ -67,7 +67,7 @@ class StackPanelSpec : DomSpec { @Test fun remove() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val stackPanel = StackPanel(activateLast = false) root.add(stackPanel) val label1 = Span("abc") @@ -83,7 +83,7 @@ class StackPanelSpec : DomSpec { @Test fun removeAll() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val stackPanel = StackPanel(activateLast = false) root.add(stackPanel) val label1 = Span("abc") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/TabPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/TabPanelSpec.kt index f1f3beeb..35620818 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/TabPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/TabPanelSpec.kt @@ -34,7 +34,7 @@ class TabPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tabs = TabPanel() root.add(tabs) val label1 = Span("abc") @@ -53,7 +53,7 @@ class TabPanelSpec : DomSpec { @Test fun setActiveIndex() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tabs = TabPanel() root.add(tabs) val label1 = Span("abc") @@ -73,7 +73,7 @@ class TabPanelSpec : DomSpec { @Test fun removeTab() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tabs = TabPanel() root.add(tabs) val label1 = Span("abc") @@ -95,7 +95,7 @@ class TabPanelSpec : DomSpec { @Test fun tabClick() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val tabs = TabPanel() root.add(tabs) val label1 = Span("abc") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/panel/VPanelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/panel/VPanelSpec.kt index 81ea720d..5bed89f1 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/panel/VPanelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/panel/VPanelSpec.kt @@ -34,7 +34,7 @@ class VPanelSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val vPanel = VPanel(justify = FlexJustify.SPACEBETWEEN) root.add(vPanel) vPanel.add(Span("abc"), 1) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressBarSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressBarSpec.kt index d520f0b6..2f044987 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressBarSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressBarSpec.kt @@ -33,7 +33,7 @@ class ProgressBarSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val progressBar = ProgressBar(50, style = ProgressBarStyle.SUCCESS, striped = true, content = "Processing ...") root.add(progressBar) diff --git a/src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressIndicatorSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressIndicatorSpec.kt index 83892ed9..4aa14230 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressIndicatorSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressIndicatorSpec.kt @@ -33,7 +33,7 @@ class ProgressIndicatorSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val ind = ProgressIndicator(50, style = ProgressBarStyle.SUCCESS, striped = true) root.add(ind) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/table/CellSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/table/CellSpec.kt index 435e9b22..582212bd 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/table/CellSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/table/CellSpec.kt @@ -32,7 +32,7 @@ class CellSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val cell = Cell("This is a cell") root.add(cell) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/table/HeaderCellSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/table/HeaderCellSpec.kt index 8c210ae0..40f25a66 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/table/HeaderCellSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/table/HeaderCellSpec.kt @@ -32,7 +32,7 @@ class HeaderCellSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val cell = HeaderCell("This is a header cell") root.add(cell) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/table/RowSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/table/RowSpec.kt index 6c2f3c1c..d9a6fdfa 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/table/RowSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/table/RowSpec.kt @@ -33,7 +33,7 @@ class RowSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val row = Row { cell("A") } diff --git a/src/test/kotlin/test/pl/treksoft/kvision/table/TableSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/table/TableSpec.kt index 637f8f28..997da597 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/table/TableSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/table/TableSpec.kt @@ -35,7 +35,7 @@ class TableSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val table = Table(listOf("a", "b")) { row { cell("A") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/toolbar/ButtonGroupSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/toolbar/ButtonGroupSpec.kt index 16b352d8..b324b8ab 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/toolbar/ButtonGroupSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/toolbar/ButtonGroupSpec.kt @@ -34,7 +34,7 @@ class ButtonGroupSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val group = ButtonGroup() root.add(group) val element = document.getElementById("test") diff --git a/src/test/kotlin/test/pl/treksoft/kvision/toolbar/ToolbarSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/toolbar/ToolbarSpec.kt index 4d296e03..d41ef05e 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/toolbar/ToolbarSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/toolbar/ToolbarSpec.kt @@ -32,7 +32,7 @@ class ToolbarSpec : DomSpec { @Test fun render() { run { - val root = Root("test", true) + val root = Root("test", fixed = true) val toolbar = Toolbar() root.add(toolbar) val element = document.getElementById("test") -- cgit From a4ff696ce73bd1c4894a6ea444c5fbb048bc1e44 Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Sat, 11 May 2019 02:38:53 +0200 Subject: Add new SimpleSelect form control. --- .../src/main/resources/css/style.css | 29 +++ .../treksoft/kvision/form/select/SimpleSelect.kt | 209 ++++++++++++++++++++ .../kvision/form/select/SimpleSelectInput.kt | 213 +++++++++++++++++++++ .../kvision/form/select/SimpleSelectInputSpec.kt | 51 +++++ .../kvision/form/select/SimpleSelectSpec.kt | 53 +++++ 5 files changed, 555 insertions(+) create mode 100644 src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt create mode 100644 src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt create mode 100644 src/test/kotlin/test/pl/treksoft/kvision/form/select/SimpleSelectInputSpec.kt create mode 100644 src/test/kotlin/test/pl/treksoft/kvision/form/select/SimpleSelectSpec.kt (limited to 'kvision-modules/kvision-bootstrap') diff --git a/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css b/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css index ddbd5d28..eac7ddb9 100644 --- a/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css +++ b/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css @@ -177,3 +177,32 @@ ul.tabs-top > li { filter: alpha(opacity=50); opacity: 0.5; } + +select.form-control, .tabulator-row .tabulator-cell.tabulator-editing select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: transparent none no-repeat; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAKCAYAAABblxXYAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wUKFyIn4IjqJgAAAENJREFUKM/l0LERACEQQlGsiTa2px1aokGugNNAx8wfMy8AeLoBALYjaTqoKkga2+gKPgF/2Q7JkEx359oftu+C7/UBCUIcVQz0PvcAAAAASUVORK5CYII='); + background-position: right center; + cursor: pointer; +} + +select.form-control:hover { + background-color: #e6e6e6; +} + +select.form-control option { + background-color: white; +} + +.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { + border: 1px solid #ccc; + border-radius: 4px; +} + +.tabulator-row .tabulator-cell.tabulator-editing input:focus, .tabulator-row .tabulator-cell.tabulator-editing select:focus { + border-color: #66afe9; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); +} diff --git a/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt b/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt new file mode 100644 index 00000000..4d278ad2 --- /dev/null +++ b/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package pl.treksoft.kvision.form.select + +import pl.treksoft.kvision.core.Component +import pl.treksoft.kvision.core.Container +import pl.treksoft.kvision.core.StringBoolPair +import pl.treksoft.kvision.core.StringPair +import pl.treksoft.kvision.core.Widget +import pl.treksoft.kvision.form.FieldLabel +import pl.treksoft.kvision.form.HelpBlock +import pl.treksoft.kvision.form.StringFormControl +import pl.treksoft.kvision.panel.SimplePanel +import pl.treksoft.kvision.utils.SnOn + +/** + * The form field component for SimpleSelect control. + * + * @constructor + * @param options an optional list of options (value to label pairs) for the select control + * @param value selected value + * @param emptyOption determines if an empty option is automatically generated + * @param name the name attribute of the generated HTML input element + * @param label label text bound to the input element + * @param rich determines if [label] can contain HTML code + */ +@Suppress("TooManyFunctions") +open class SimpleSelect( + options: List? = null, value: String? = null, emptyOption: Boolean = false, + name: String? = null, label: String? = null, rich: Boolean = false +) : SimplePanel(setOf("form-group")), StringFormControl { + + /** + * A list of options (value to label pairs) for the select control. + */ + var options + get() = input.options + set(value) { + input.options = value + } + /** + * A value of the selected option. + */ + override var value + get() = input.value + set(value) { + input.value = value + } + /** + * The value of the selected child option. + * + * This value is placed directly in the generated HTML code, while the [value] property is dynamically + * bound to the select component. + */ + var startValue + get() = input.startValue + set(value) { + input.startValue = value + } + /** + * Determines if an empty option is automatically generated. + */ + var emptyOption + get() = input.emptyOption + set(value) { + input.emptyOption = value + } + /** + * Determines if the select is automatically focused. + */ + var autofocus + get() = input.autofocus + set(value) { + input.autofocus = value + } + /** + * The label text bound to the select element. + */ + var label + get() = flabel.content + set(value) { + flabel.content = value + } + /** + * Determines if [label] can contain HTML code. + */ + var rich + get() = flabel.rich + set(value) { + flabel.rich = value + } + + private val idc = "kv_form_simpleselect_$counter" + final override val input: SimpleSelectInput = SimpleSelectInput( + options, value, emptyOption, setOf("form-control") + ).apply { + this.id = idc + this.name = name + } + final override val flabel: FieldLabel = FieldLabel(idc, label, rich) + final override val validationInfo: HelpBlock = HelpBlock().apply { visible = false } + + init { + @Suppress("LeakingThis") + input.eventTarget = this + this.addInternal(flabel) + this.addInternal(input) + this.addInternal(validationInfo) + counter++ + } + + override fun getSnClass(): List { + val cl = super.getSnClass().toMutableList() + if (validatorError != null) { + cl.add("has-error" to true) + } + return cl + } + + @Suppress("UNCHECKED_CAST") + override fun setEventListener(block: SnOn.() -> Unit): Widget { + input.setEventListener(block) + return this + } + + override fun setEventListener(block: SnOn.() -> Unit): Widget { + input.setEventListener(block) + return this + } + + override fun removeEventListeners(): Widget { + input.removeEventListeners() + return this + } + + override fun add(child: Component): SimplePanel { + input.add(child) + return this + } + + override fun addAll(children: List): SimplePanel { + input.addAll(children) + return this + } + + override fun remove(child: Component): SimplePanel { + input.remove(child) + return this + } + + override fun removeAll(): SimplePanel { + input.removeAll() + return this + } + + override fun getChildren(): List { + return input.getChildren() + } + + override fun focus() { + input.focus() + } + + override fun blur() { + input.blur() + } + + companion object { + internal var counter = 0 + + /** + * DSL builder extension function. + * + * It takes the same parameters as the constructor of the built component. + */ + fun Container.simpleSelect( + options: List? = null, + value: String? = null, + emptyOption: Boolean = false, + name: String? = null, + label: String? = null, + rich: Boolean = false, + init: (SimpleSelect.() -> Unit)? = null + ): SimpleSelect { + val simpleSelect = SimpleSelect(options, value, emptyOption, name, label, rich).apply { init?.invoke(this) } + this.add(simpleSelect) + return simpleSelect + } + } +} diff --git a/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt new file mode 100644 index 00000000..df334c1c --- /dev/null +++ b/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package pl.treksoft.kvision.form.select + +import com.github.snabbdom.VNode +import pl.treksoft.kvision.core.Container +import pl.treksoft.kvision.core.StringBoolPair +import pl.treksoft.kvision.core.StringPair +import pl.treksoft.kvision.form.FormInput +import pl.treksoft.kvision.form.InputSize +import pl.treksoft.kvision.html.TAG +import pl.treksoft.kvision.html.Tag +import pl.treksoft.kvision.panel.SimplePanel + +internal const val KVNULL = "#kvnull" + +/** + * Simple select component. + * + * @constructor + * @param options an optional list of options (value to label pairs) for the select control + * @param value text input value + * @param emptyOption determines if an empty option is automatically generated + * @param classes a set of CSS class names + */ +open class SimpleSelectInput( + options: List? = null, value: String? = null, emptyOption: Boolean = false, + classes: Set = setOf() +) : SimplePanel(classes + "form-control"), FormInput { + + /** + * A list of options (value to label pairs) for the select control. + */ + var options by refreshOnUpdate(options) { setChildrenFromOptions() } + + /** + * Text input value. + */ + var value by refreshOnUpdate(value) { refreshState() } + /** + * The value of the selected child option. + * + * This value is placed directly in the generated HTML code, while the [value] property is dynamically + * bound to the select component. + */ + var startValue by refreshOnUpdate(value) { this.value = it; selectOption() } + /** + * The name attribute of the generated HTML input element. + */ + override var name: String? by refreshOnUpdate() + /** + * Determines if the field is disabled. + */ + override var disabled by refreshOnUpdate(false) + /** + * Determines if the text input is automatically focused. + */ + var autofocus: Boolean? by refreshOnUpdate() + /** + * Determines if an empty option is automatically generated. + */ + var emptyOption by refreshOnUpdate(emptyOption) { setChildrenFromOptions() } + /** + * The size of the input. + */ + override var size: InputSize? by refreshOnUpdate() + + init { + this.vnkey = "kv_simpleselectinput_${counter++}" + setChildrenFromOptions() + this.setInternalEventListener { + change = { + self.changeValue() + } + } + } + + override fun render(): VNode { + return render("select", childrenVNodes()) + } + + private fun setChildrenFromOptions() { + super.removeAll() + if (emptyOption) { + super.add(Tag(TAG.OPTION, "", attributes = mapOf("value" to KVNULL))) + } + options?.let { + val c = it.map { + val attributes = if (it.first == value) { + mapOf("value" to it.first, "selected" to "selected") + } else { + mapOf("value" to it.first) + } + Tag(TAG.OPTION, it.second, attributes = attributes) + } + super.addAll(c) + } + } + + private fun selectOption() { + children.forEach { child -> + if (child is Tag && child.type == TAG.OPTION) { + if (value != null && child.getAttribute("value") == value) { + child.setAttribute("selected", "selected") + } else { + child.removeAttribute("selected") + } + } + } + } + + override fun getSnClass(): List { + val cl = super.getSnClass().toMutableList() + size?.let { + cl.add(it.className to true) + } + return cl + } + + override fun getSnAttrs(): List { + val sn = super.getSnAttrs().toMutableList() + name?.let { + sn.add("name" to it) + } + autofocus?.let { + if (it) { + sn.add("autofocus" to "autofocus") + } + } + if (disabled) { + sn.add("disabled" to "disabled") + } + return sn + } + + override fun afterInsert(node: VNode) { + refreshState() + } + + /** + * @suppress + * Internal function + */ + protected open fun refreshState() { + value?.let { + getElementJQuery()?.`val`(it) + } ?: getElementJQueryD()?.`val`(null) + } + + /** + * @suppress + * Internal function + */ + protected open fun changeValue() { + val v = getElementJQuery()?.`val`() as String? + if (v != null && v.isNotEmpty() && v != KVNULL) { + this.value = v + } else { + this.value = null + } + } + + /** + * Makes the input element focused. + */ + override fun focus() { + getElementJQuery()?.focus() + } + + /** + * Makes the input element blur. + */ + override fun blur() { + getElementJQuery()?.blur() + } + + companion object { + internal var counter = 0 + + /** + * DSL builder extension function. + * + * It takes the same parameters as the constructor of the built component. + */ + fun Container.simpleSelectInput( + options: List? = null, value: String? = null, emptyOption: Boolean = false, + classes: Set = setOf(), init: (SimpleSelectInput.() -> Unit)? = null + ): SimpleSelectInput { + val simpleSelectInput = SimpleSelectInput(options, value, emptyOption, classes).apply { init?.invoke(this) } + this.add(simpleSelectInput) + return simpleSelectInput + } + } +} diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/select/SimpleSelectInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/select/SimpleSelectInputSpec.kt new file mode 100644 index 00000000..b2c77d10 --- /dev/null +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/select/SimpleSelectInputSpec.kt @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package test.pl.treksoft.kvision.form.select + +import pl.treksoft.kvision.form.select.SimpleSelectInput +import pl.treksoft.kvision.panel.Root +import test.pl.treksoft.kvision.DomSpec +import kotlin.browser.document +import kotlin.test.Test + +class SimpleSelectInputSpec : DomSpec { + + @Test + fun render() { + run { + val root = Root("test", fixed = true) + val si = SimpleSelectInput(listOf("test1" to "Test 1", "test2" to "Test 2"), "test1", true).apply { + name = "name" + id = "idti" + disabled = true + } + root.add(si) + val element = document.getElementById("test") + assertEqualsHtml( + "", + element?.innerHTML, + "Should render correct simple select input control" + ) + } + } + +} diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/select/SimpleSelectSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/select/SimpleSelectSpec.kt new file mode 100644 index 00000000..db1c36f0 --- /dev/null +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/select/SimpleSelectSpec.kt @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package test.pl.treksoft.kvision.form.select + +import pl.treksoft.kvision.form.select.SimpleSelect +import pl.treksoft.kvision.panel.Root +import test.pl.treksoft.kvision.DomSpec +import kotlin.browser.document +import kotlin.test.Test + +class SimpleSelectSpec : DomSpec { + + @Test + fun render() { + run { + val root = Root("test", fixed = true) + val select = + SimpleSelect(listOf("test1" to "Test 1", "test2" to "Test 2"), "test1", true, "select", "Label").apply { + name = "name" + id = "idti" + disabled = true + } + root.add(select) + val element = document.getElementById("test") + val id = select.input.id + assertEqualsHtml( + "
", + element?.innerHTML, + "Should render correct simple select form control" + ) + } + } + +} -- cgit From f262805b2710f145ef16bb18fee0e53530ef9505 Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Sat, 11 May 2019 22:01:36 +0200 Subject: Fixed styling of SimpleSelect control. --- kvision-modules/kvision-bootstrap/src/main/resources/css/style.css | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'kvision-modules/kvision-bootstrap') diff --git a/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css b/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css index eac7ddb9..992a5a0b 100644 --- a/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css +++ b/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css @@ -196,6 +196,10 @@ select.form-control option { background-color: white; } +select.input-sm { + line-height: inherit; +} + .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { border: 1px solid #ccc; border-radius: 4px; -- cgit From 6416ab05253ee96647541efa9521ff6ec84d8826 Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Mon, 13 May 2019 15:25:26 +0200 Subject: Small styling fixes of Tabulator editable cells. --- kvision-modules/kvision-bootstrap/src/main/resources/css/style.css | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'kvision-modules/kvision-bootstrap') diff --git a/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css b/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css index 992a5a0b..7633ed6c 100644 --- a/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css +++ b/kvision-modules/kvision-bootstrap/src/main/resources/css/style.css @@ -210,3 +210,8 @@ select.input-sm { -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); } + +.tabulator-row .tabulator-cell.tabulator-editing { + border-right: 1px solid #1d68cd !important; + padding: 2px !important; +} -- cgit From 0f0f0e0cfb1238f9b5325fba89874a19d8b10c4a Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Sat, 8 Jun 2019 13:33:14 +0200 Subject: Fix test compilation error with karma-webpack 4. --- build.gradle | 1 + kvision-modules/kvision-bootstrap/build.gradle | 1 + kvision-modules/kvision-chart/build.gradle | 1 + kvision-modules/kvision-datacontainer/build.gradle | 1 + kvision-modules/kvision-datetime/build.gradle | 1 + kvision-modules/kvision-dialog/build.gradle | 1 + kvision-modules/kvision-handlebars/build.gradle | 1 + kvision-modules/kvision-i18n/build.gradle | 1 + kvision-modules/kvision-redux/build.gradle | 1 + kvision-modules/kvision-richtext/build.gradle | 1 + kvision-modules/kvision-select/build.gradle | 1 + kvision-modules/kvision-spinner/build.gradle | 1 + kvision-modules/kvision-tabulator/build.gradle | 1 + kvision-modules/kvision-upload/build.gradle | 1 + 14 files changed, 14 insertions(+) (limited to 'kvision-modules/kvision-bootstrap') diff --git a/build.gradle b/build.gradle index 8e1ed991..1c77ff6e 100644 --- a/build.gradle +++ b/build.gradle @@ -138,6 +138,7 @@ if (!project.gradle.startParameter.taskNames.contains("dokka")) { dependency("navigo", "7.0.0") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-bootstrap/build.gradle b/kvision-modules/kvision-bootstrap/build.gradle index 5f5d0c49..6c504c17 100644 --- a/kvision-modules/kvision-bootstrap/build.gradle +++ b/kvision-modules/kvision-bootstrap/build.gradle @@ -11,6 +11,7 @@ kotlinFrontend { dependency("bootstrap-vertical-tabs", "1.2.2") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-chart/build.gradle b/kvision-modules/kvision-chart/build.gradle index 4d4ba4df..d90de6ce 100644 --- a/kvision-modules/kvision-chart/build.gradle +++ b/kvision-modules/kvision-chart/build.gradle @@ -6,6 +6,7 @@ kotlinFrontend { dependency("chart.js", "2.7.3") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-datacontainer/build.gradle b/kvision-modules/kvision-datacontainer/build.gradle index 7ad09e67..9337698c 100644 --- a/kvision-modules/kvision-datacontainer/build.gradle +++ b/kvision-modules/kvision-datacontainer/build.gradle @@ -9,6 +9,7 @@ kotlinFrontend { npm { devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-datetime/build.gradle b/kvision-modules/kvision-datetime/build.gradle index 610b1d9c..bbd4bb79 100644 --- a/kvision-modules/kvision-datetime/build.gradle +++ b/kvision-modules/kvision-datetime/build.gradle @@ -6,6 +6,7 @@ kotlinFrontend { dependency("bootstrap-datetime-picker", "2.4.4") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-dialog/build.gradle b/kvision-modules/kvision-dialog/build.gradle index 16c2720a..292a228f 100644 --- a/kvision-modules/kvision-dialog/build.gradle +++ b/kvision-modules/kvision-dialog/build.gradle @@ -9,6 +9,7 @@ kotlinFrontend { npm { devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-handlebars/build.gradle b/kvision-modules/kvision-handlebars/build.gradle index de48816a..a971427e 100644 --- a/kvision-modules/kvision-handlebars/build.gradle +++ b/kvision-modules/kvision-handlebars/build.gradle @@ -7,6 +7,7 @@ kotlinFrontend { dependency("handlebars-loader", "1.7.1") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-i18n/build.gradle b/kvision-modules/kvision-i18n/build.gradle index 88147bbe..72870169 100644 --- a/kvision-modules/kvision-i18n/build.gradle +++ b/kvision-modules/kvision-i18n/build.gradle @@ -6,6 +6,7 @@ kotlinFrontend { dependency("jed", "1.1.1") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-redux/build.gradle b/kvision-modules/kvision-redux/build.gradle index db0610bd..3394095f 100644 --- a/kvision-modules/kvision-redux/build.gradle +++ b/kvision-modules/kvision-redux/build.gradle @@ -14,6 +14,7 @@ kotlinFrontend { dependency("core-js", "3.0.0") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-richtext/build.gradle b/kvision-modules/kvision-richtext/build.gradle index 86be8e7f..fde9ff17 100644 --- a/kvision-modules/kvision-richtext/build.gradle +++ b/kvision-modules/kvision-richtext/build.gradle @@ -6,6 +6,7 @@ kotlinFrontend { dependency("trix", "1.1.0") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-select/build.gradle b/kvision-modules/kvision-select/build.gradle index 65b8a83c..7525f037 100644 --- a/kvision-modules/kvision-select/build.gradle +++ b/kvision-modules/kvision-select/build.gradle @@ -7,6 +7,7 @@ kotlinFrontend { dependency("ajax-bootstrap-select", "1.4.3") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-spinner/build.gradle b/kvision-modules/kvision-spinner/build.gradle index e7600e5a..4569b8bc 100644 --- a/kvision-modules/kvision-spinner/build.gradle +++ b/kvision-modules/kvision-spinner/build.gradle @@ -6,6 +6,7 @@ kotlinFrontend { dependency("bootstrap-touchspin", "4.2.5") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-tabulator/build.gradle b/kvision-modules/kvision-tabulator/build.gradle index d461e542..5ea97e50 100644 --- a/kvision-modules/kvision-tabulator/build.gradle +++ b/kvision-modules/kvision-tabulator/build.gradle @@ -11,6 +11,7 @@ kotlinFrontend { dependency("tabulator-tables", "4.2.5") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } diff --git a/kvision-modules/kvision-upload/build.gradle b/kvision-modules/kvision-upload/build.gradle index 21ac7eab..2ac20c32 100644 --- a/kvision-modules/kvision-upload/build.gradle +++ b/kvision-modules/kvision-upload/build.gradle @@ -10,6 +10,7 @@ kotlinFrontend { dependency("bootstrap-fileinput", "4.5.2") devDependency("karma", "3.1.4") devDependency("karma-chrome-launcher", "2.2.0") + devDependency("karma-webpack", "3.0.5") devDependency("qunit", "2.8.0") } -- cgit