aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Jaros <rjaros@finn.pl>2020-05-10 00:36:18 +0200
committerRobert Jaros <rjaros@finn.pl>2020-05-10 00:36:18 +0200
commit0f8aff227926c298107c149072f8dcb0bb5a1747 (patch)
tree1b43a20af872df8570a9d412e52ed35c0f089315
parent04eed3d0b23a1c1e7887ec0168cb3b02807a2a58 (diff)
downloadkvision-0f8aff227926c298107c149072f8dcb0bb5a1747.tar.gz
kvision-0f8aff227926c298107c149072f8dcb0bb5a1747.tar.bz2
kvision-0f8aff227926c298107c149072f8dcb0bb5a1747.zip
Add simple "fieldset" HTML component
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/Fieldset.kt68
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/html/FieldsetSpec.kt47
2 files changed, 115 insertions, 0 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/html/Fieldset.kt b/src/main/kotlin/pl/treksoft/kvision/html/Fieldset.kt
new file mode 100644
index 00000000..08c515e1
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/html/Fieldset.kt
@@ -0,0 +1,68 @@
+/*
+ * 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.html
+
+import pl.treksoft.kvision.core.Container
+import pl.treksoft.kvision.utils.set
+
+/**
+ * Simple component rendered as *fieldset*.
+ *
+ * @constructor
+ * @param content element text
+ * @param rich determines if [content] can contain HTML code
+ * @param align content align
+ * @param classes a set of CSS class names
+ * @param init an initializer extension function
+ */
+open class Fieldset(
+ content: String? = null,
+ rich: Boolean = false,
+ align: Align? = null,
+ classes: Set<String> = setOf(),
+ init: (Fieldset.() -> Unit)? = null
+) :
+ Tag(TAG.FIELDSET, content, rich, align, classes) {
+
+ init {
+ @Suppress("LeakingThis")
+ init?.invoke(this)
+ }
+}
+
+/**
+ * DSL builder extension function.
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+fun Container.fieldset(
+ content: String? = null,
+ rich: Boolean = false,
+ align: Align? = null,
+ classes: Set<String>? = null,
+ className: String? = null,
+ init: (Fieldset.() -> Unit)? = null
+): Fieldset {
+ val fieldset = Fieldset(content, rich, align, classes ?: className.set).apply { init?.invoke(this) }
+ this.add(fieldset)
+ return fieldset
+}
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/FieldsetSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/FieldsetSpec.kt
new file mode 100644
index 00000000..602d0cfe
--- /dev/null
+++ b/src/test/kotlin/test/pl/treksoft/kvision/html/FieldsetSpec.kt
@@ -0,0 +1,47 @@
+/*
+ * 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.html
+
+import pl.treksoft.kvision.html.Fieldset
+import pl.treksoft.kvision.panel.Root
+import test.pl.treksoft.kvision.DomSpec
+import kotlin.browser.document
+import kotlin.test.Test
+
+class FieldsetSpec : DomSpec {
+
+ @Test
+ fun render() {
+ run {
+ val root = Root("test", containerType = pl.treksoft.kvision.panel.ContainerType.FIXED)
+ val fieldset = Fieldset("This is a fieldset")
+ root.add(fieldset)
+ val element = document.getElementById("test")
+ assertEqualsHtml(
+ "<fieldset>This is a fieldset</fieldset>",
+ element?.innerHTML,
+ "Should render correct fieldset"
+ )
+ }
+ }
+
+}