aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/pl/treksoft/kvision/form
diff options
context:
space:
mode:
authorRobert Jaros <rjaros@finn.pl>2018-02-12 10:50:42 +0100
committerRobert Jaros <rjaros@finn.pl>2018-02-12 10:50:42 +0100
commitbafcdb6fc3f1d4ec4f1a0f4fcce776ba10d8136c (patch)
tree39288bdcb59ec48cb70f1c5820fc1854949744da /src/main/kotlin/pl/treksoft/kvision/form
parent2feea5e7cf8d492663e826ebcfb0a58e61820352 (diff)
downloadkvision-bafcdb6fc3f1d4ec4f1a0f4fcce776ba10d8136c.tar.gz
kvision-bafcdb6fc3f1d4ec4f1a0f4fcce776ba10d8136c.tar.bz2
kvision-bafcdb6fc3f1d4ec4f1a0f4fcce776ba10d8136c.zip
Type safe DSL builders
Diffstat (limited to 'src/main/kotlin/pl/treksoft/kvision/form')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt17
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt21
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt15
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt21
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt20
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt22
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/SelectInput.kt16
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/spinner/Spinner.kt27
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/spinner/SpinnerInput.kt23
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt17
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/RichText.kt15
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/RichTextInput.kt14
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt16
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt16
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt15
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt15
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/time/DateTime.kt21
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/time/DateTimeInput.kt13
18 files changed, 299 insertions, 25 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt b/src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt
index 0a12f818..70c44fd7 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt
@@ -22,6 +22,7 @@
package pl.treksoft.kvision.form
import com.github.snabbdom.VNode
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.form.check.CheckBox
import pl.treksoft.kvision.form.check.Radio
@@ -214,4 +215,20 @@ open class FormPanel<K>(
open fun validate(): Boolean {
return form.validate()
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun <K> Container.formPanel(
+ type: FORMTYPE? = null, classes: Set<String> = setOf(),
+ modelFactory: (Map<String, Any?>) -> K
+ ): FormPanel<K> {
+ val panel = FormPanel(type, classes, modelFactory)
+ this.add(panel)
+ return panel
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt b/src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt
index 0bad8440..4c373a2d 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt
@@ -22,6 +22,7 @@
package pl.treksoft.kvision.form.check
import org.w3c.dom.events.MouseEvent
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.core.Widget
import pl.treksoft.kvision.form.BoolFormControl
@@ -153,10 +154,6 @@ open class CheckBox(
counter++
}
- companion object {
- internal var counter = 0
- }
-
@Suppress("UNCHECKED_CAST")
override fun <T : Widget> setEventListener(block: SnOn<T>.() -> Unit): Widget {
input.setEventListener(block)
@@ -201,4 +198,20 @@ open class CheckBox(
}
return this
}
+
+ companion object {
+ internal var counter = 0
+
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.checkBox(
+ value: Boolean = false, label: String? = null,
+ rich: Boolean = false, init: (CheckBox.() -> Unit)? = null
+ ) {
+ this.add(CheckBox(value, label, rich).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt
index 26a06fa7..8d083b42 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt
@@ -23,6 +23,7 @@ package pl.treksoft.kvision.form.check
import com.github.snabbdom.VNode
import org.w3c.dom.events.MouseEvent
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.core.StringPair
import pl.treksoft.kvision.core.Widget
@@ -179,4 +180,18 @@ open class CheckInput(
}
return this
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.checkInput(
+ type: CHECKINPUTTYPE = CHECKINPUTTYPE.CHECKBOX, value: Boolean = false,
+ classes: Set<String> = setOf(), init: (CheckInput.() -> Unit)? = null
+ ) {
+ this.add(CheckInput(type, value, classes).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt b/src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt
index a8059230..13f4c4cd 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt
@@ -22,6 +22,7 @@
package pl.treksoft.kvision.form.check
import org.w3c.dom.events.MouseEvent
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.core.Widget
import pl.treksoft.kvision.form.BoolFormControl
@@ -164,10 +165,6 @@ open class Radio(
counter++
}
- companion object {
- internal var counter = 0
- }
-
@Suppress("UNCHECKED_CAST")
override fun <T : Widget> setEventListener(block: SnOn<T>.() -> Unit): Widget {
input.setEventListener(block)
@@ -221,4 +218,20 @@ open class Radio(
}
return this
}
+
+ companion object {
+ internal var counter = 0
+
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.radio(
+ value: Boolean = false, extraValue: String? = null, name: String? = null, label: String? = null,
+ rich: Boolean = false, init: (Radio.() -> Unit)? = null
+ ) {
+ this.add(Radio(value, extraValue, name, label, rich).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt b/src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt
index 7bd13d4e..80736d59 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt
@@ -21,6 +21,7 @@
*/
package pl.treksoft.kvision.form.check
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.core.StringPair
import pl.treksoft.kvision.core.Widget
@@ -110,10 +111,6 @@ open class RadioGroup(
counter++
}
- companion object {
- internal var counter = 0
- }
-
override fun getSnClass(): List<StringBoolPair> {
val cl = super.getSnClass().toMutableList()
if (validatorError != null) {
@@ -166,4 +163,19 @@ open class RadioGroup(
this.addInternal(validationInfo)
}
+ companion object {
+ internal var counter = 0
+
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.radioGroup(
+ options: List<StringPair>? = null, value: String? = null, inline: Boolean = false,
+ label: String? = null, rich: Boolean = false, init: (RadioGroup.() -> Unit)? = null
+ ) {
+ this.add(RadioGroup(options, value, inline, label, rich).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt b/src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt
index e8494d58..dc55dd04 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt
@@ -22,6 +22,7 @@
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
@@ -200,10 +201,6 @@ open class Select(
counter++
}
- companion object {
- internal var counter = 0
- }
-
override fun getSnClass(): List<StringBoolPair> {
val cl = super.getSnClass().toMutableList()
if (validatorError != null) {
@@ -272,4 +269,21 @@ open class Select(
open fun toggleOptions() {
input.toggleOptions()
}
+
+ companion object {
+ internal var counter = 0
+
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.select(
+ options: List<StringPair>? = null, value: String? = null,
+ multiple: Boolean = false, ajaxOptions: AjaxOptions? = null, label: String? = null,
+ rich: Boolean = false, init: (Select.() -> Unit)? = null
+ ) {
+ this.add(Select(options, value, multiple, ajaxOptions, label, rich).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/select/SelectInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/select/SelectInput.kt
index 7374a30d..be986f02 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/select/SelectInput.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/select/SelectInput.kt
@@ -24,6 +24,7 @@ package pl.treksoft.kvision.form.select
import com.github.snabbdom.VNode
import pl.treksoft.kvision.KVManager.KVNULL
import pl.treksoft.kvision.core.Component
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.CssSize
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.core.StringPair
@@ -384,4 +385,19 @@ open class SelectInput(
} ?: getElementJQueryD()?.selectpicker("val", null)
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.selectInput(
+ options: List<StringPair>? = null, value: String? = null,
+ multiple: Boolean = false, ajaxOptions: AjaxOptions? = null,
+ classes: Set<String> = setOf(), init: (SelectInput.() -> Unit)? = null
+ ) {
+ this.add(SelectInput(options, value, multiple, ajaxOptions, classes).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/spinner/Spinner.kt b/src/main/kotlin/pl/treksoft/kvision/form/spinner/Spinner.kt
index 4d7a3150..2a5d2cbe 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/spinner/Spinner.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/spinner/Spinner.kt
@@ -21,6 +21,7 @@
*/
package pl.treksoft.kvision.form.spinner
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.core.Widget
import pl.treksoft.kvision.form.FieldLabel
@@ -191,10 +192,6 @@ open class Spinner(
counter++
}
- companion object {
- internal var counter = 0
- }
-
override fun getSnClass(): List<StringBoolPair> {
val cl = super.getSnClass().toMutableList()
if (validatorError != null) {
@@ -238,4 +235,26 @@ open class Spinner(
input.spinDown()
return this
}
+
+ companion object {
+ internal var counter = 0
+
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.spinner(
+ value: Number? = null, min: Int = 0, max: Int = DEFAULT_MAX, step: Double = DEFAULT_STEP,
+ decimals: Int = 0, buttonsType: BUTTONSTYPE = BUTTONSTYPE.VERTICAL,
+ forceType: FORCETYPE = FORCETYPE.NONE, label: String? = null,
+ rich: Boolean = false, init: (Spinner.() -> Unit)? = null
+ ) {
+ this.add(Spinner(value, min, max, step, decimals, buttonsType, forceType, label, rich).apply {
+ init?.invoke(
+ this
+ )
+ })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/spinner/SpinnerInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/spinner/SpinnerInput.kt
index 63ad0852..6dcb2b4a 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/spinner/SpinnerInput.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/spinner/SpinnerInput.kt
@@ -23,6 +23,7 @@ package pl.treksoft.kvision.form.spinner
import com.github.snabbdom.VNode
import pl.treksoft.jquery.JQuery
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.core.StringPair
import pl.treksoft.kvision.core.Widget
@@ -336,4 +337,26 @@ open class SpinnerInput(
this.forcestepdivisibility = forceType.value
}
}
+
+ companion object {
+ internal var counter = 0
+
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.spinnerInput(
+ value: Number? = null, min: Int = 0, max: Int = DEFAULT_MAX, step: Double = DEFAULT_STEP,
+ decimals: Int = 0, buttonsType: BUTTONSTYPE = BUTTONSTYPE.VERTICAL,
+ forceType: FORCETYPE = FORCETYPE.NONE, classes: Set<String> = setOf(),
+ init: (SpinnerInput.() -> Unit)? = null
+ ) {
+ this.add(SpinnerInput(value, min, max, step, decimals, buttonsType, forceType, classes).apply {
+ init?.invoke(
+ this
+ )
+ })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt
index f3f50a63..39c9a306 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt
@@ -21,6 +21,8 @@
*/
package pl.treksoft.kvision.form.text
+import pl.treksoft.kvision.core.Container
+
/**
* Form field password component.
*
@@ -32,4 +34,17 @@ package pl.treksoft.kvision.form.text
open class Password(value: String? = null, label: String? = null, rich: Boolean = false) : Text(
TEXTINPUTTYPE.PASSWORD,
value, label, rich
-)
+) {
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.password(
+ value: String? = null, label: String? = null, rich: Boolean = false, init: (Password.() -> Unit)? = null
+ ) {
+ this.add(Password(value, label, rich).apply { init?.invoke(this) })
+ }
+ }
+}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/RichText.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/RichText.kt
index 39083577..9d5c8c49 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/text/RichText.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/RichText.kt
@@ -21,6 +21,8 @@
*/
package pl.treksoft.kvision.form.text
+import pl.treksoft.kvision.core.Container
+
/**
* Form field rich text component.
*
@@ -51,4 +53,17 @@ open class RichText(
this.addInternal(input)
this.addInternal(validationInfo)
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.richText(
+ value: String? = null, label: String? = null, rich: Boolean = false, init: (RichText.() -> Unit)? = null
+ ) {
+ this.add(RichText(value, label, rich).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/RichTextInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/RichTextInput.kt
index d90c5769..f802cc2a 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/text/RichTextInput.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/RichTextInput.kt
@@ -23,6 +23,7 @@ package pl.treksoft.kvision.form.text
import com.github.snabbdom.VNode
import pl.treksoft.jquery.jQuery
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringPair
import kotlin.browser.document
@@ -108,4 +109,17 @@ open class RichTextInput(value: String? = null, classes: Set<String> = setOf())
override fun changeValue() {
// disabled parent class functionality
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.richTextInput(
+ value: String? = null, classes: Set<String> = setOf(), init: (RichTextInput.() -> Unit)? = null
+ ) {
+ this.add(RichTextInput(value, classes).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt
index 298a3209..2878dc66 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt
@@ -21,6 +21,8 @@
*/
package pl.treksoft.kvision.form.text
+import pl.treksoft.kvision.core.Container
+
/**
* Form field text component.
*
@@ -60,4 +62,18 @@ open class Text(
this.addInternal(input)
this.addInternal(validationInfo)
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.text(
+ type: TEXTINPUTTYPE = TEXTINPUTTYPE.TEXT, value: String? = null,
+ label: String? = null, rich: Boolean = false, init: (Text.() -> Unit)? = null
+ ) {
+ this.add(Text(type, value, label, rich).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt
index 02a64136..e9575264 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt
@@ -21,6 +21,8 @@
*/
package pl.treksoft.kvision.form.text
+import pl.treksoft.kvision.core.Container
+
/**
* Form field textarea component.
*
@@ -69,4 +71,18 @@ open class TextArea(
this.addInternal(input)
this.addInternal(validationInfo)
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.textArea(
+ cols: Int? = null, rows: Int? = null, value: String? = null,
+ label: String? = null, rich: Boolean = false, init: (TextArea.() -> Unit)? = null
+ ) {
+ this.add(TextArea(cols, rows, value, label, rich).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt
index fd42de9c..64e0f17d 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt
@@ -22,6 +22,7 @@
package pl.treksoft.kvision.form.text
import com.github.snabbdom.VNode
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringPair
/**
@@ -80,4 +81,18 @@ open class TextAreaInput(cols: Int? = null, rows: Int? = null, value: String? =
}
return sn
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.textAreaInput(
+ cols: Int? = null, rows: Int? = null, value: String? = null, classes: Set<String> = setOf(),
+ init: (TextAreaInput.() -> Unit)? = null
+ ) {
+ this.add(TextAreaInput(cols, rows, value, classes).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt
index 72791239..cc443aa5 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt
@@ -22,6 +22,7 @@
package pl.treksoft.kvision.form.text
import com.github.snabbdom.VNode
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringPair
/**
@@ -84,4 +85,18 @@ open class TextInput(type: TEXTINPUTTYPE = TEXTINPUTTYPE.TEXT, value: String? =
}
return sn
}
+
+ companion object {
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.textInput(
+ type: TEXTINPUTTYPE = TEXTINPUTTYPE.TEXT, value: String? = null, classes: Set<String> = setOf(),
+ init: (TextInput.() -> Unit)? = null
+ ) {
+ this.add(TextInput(type, value, classes).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/time/DateTime.kt b/src/main/kotlin/pl/treksoft/kvision/form/time/DateTime.kt
index 426e0644..34ea98ce 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/time/DateTime.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/time/DateTime.kt
@@ -21,6 +21,7 @@
*/
package pl.treksoft.kvision.form.time
+import pl.treksoft.kvision.core.Container
import pl.treksoft.kvision.core.StringBoolPair
import pl.treksoft.kvision.core.Widget
import pl.treksoft.kvision.form.DateFormControl
@@ -189,10 +190,6 @@ open class DateTime(
counter++
}
- companion object {
- internal var counter = 0
- }
-
override fun getSnClass(): List<StringBoolPair> {
val cl = super.getSnClass().toMutableList()
if (validatorError != null) {
@@ -234,4 +231,20 @@ open class DateTime(
override fun getValueAsString(): String? {
return input.getValueAsString()
}
+
+ companion object {
+ internal var counter = 0
+
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.dateTime(
+ value: Date? = null, format: String = "YYYY-MM-DD HH:mm", label: String? = null,
+ rich: Boolean = false, init: (DateTime.() -> Unit)? = null
+ ) {
+ this.add(DateTime(value, format, label, rich).apply { init?.invoke(this) })
+ }
+ }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/time/DateTimeInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/time/DateTimeInput.kt
index a49f1d5f..0556f2ef 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/time/DateTimeInput.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/time/DateTimeInput.kt
@@ -22,6 +22,7 @@
package pl.treksoft.kvision.form.time
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.core.Widget
@@ -309,5 +310,17 @@ open class DateTimeInput(
.replace("M", "m").replace("{----}", "MM").replace("{---}", "M").replace("H", "{-}")
.replace("h", "H").replace("{-}", "h").replace("D", "d").replace("a", "p").replace("A", "P")
}
+
+ /**
+ * DSL builder extension function
+ *
+ * It takes the same parameters as the constructor of the built component.
+ */
+ fun Container.dateTimeInput(
+ value: Date? = null, format: String = "YYYY-MM-DD HH:mm", classes: Set<String> = setOf(),
+ init: (DateTimeInput.() -> Unit)? = null
+ ) {
+ this.add(DateTimeInput(value, format, classes).apply { init?.invoke(this) })
+ }
}
}