aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/pl/treksoft/kvision/form/text
diff options
context:
space:
mode:
authorRobert Jaros <rjaros@finn.pl>2017-11-09 12:21:43 +0100
committerRobert Jaros <rjaros@finn.pl>2017-11-09 12:21:43 +0100
commit25ab470ea458b2652ff77e2a66a856c63553c486 (patch)
tree1bba0a1e4972b91664edb5948b2d41e4ce9870e0 /src/main/kotlin/pl/treksoft/kvision/form/text
parent5195caf0405eea7a6b34f60cb0a1bea3026bac3c (diff)
downloadkvision-25ab470ea458b2652ff77e2a66a856c63553c486.tar.gz
kvision-25ab470ea458b2652ff77e2a66a856c63553c486.tar.bz2
kvision-25ab470ea458b2652ff77e2a66a856c63553c486.zip
Refactoring packages
Diffstat (limited to 'src/main/kotlin/pl/treksoft/kvision/form/text')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/AbstractText.kt86
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/AbstractTextInput.kt113
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt4
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt25
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt29
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt44
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt44
7 files changed, 345 insertions, 0 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/AbstractText.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/AbstractText.kt
new file mode 100644
index 00000000..4d0ebf51
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/AbstractText.kt
@@ -0,0 +1,86 @@
+package pl.treksoft.kvision.form.text
+
+import pl.treksoft.kvision.panel.SimplePanel
+import pl.treksoft.kvision.core.Widget
+import pl.treksoft.kvision.form.FieldLabel
+import pl.treksoft.kvision.form.StringFormField
+import pl.treksoft.kvision.snabbdom.SnOn
+
+abstract class AbstractText(label: String? = null, rich: Boolean = false) :
+ SimplePanel(setOf("form-group")), StringFormField {
+
+ override var value
+ get() = input.value
+ set(value) {
+ input.value = value
+ }
+ var startValue
+ get() = input.startValue
+ set(value) {
+ input.startValue = value
+ }
+ var placeholder
+ get() = input.placeholder
+ set(value) {
+ input.placeholder = value
+ }
+ var name
+ get() = input.name
+ set(value) {
+ input.name = value
+ }
+ var maxlength
+ get() = input.maxlength
+ set(value) {
+ input.maxlength = value
+ }
+ override var disabled
+ get() = input.disabled
+ set(value) {
+ input.disabled = value
+ }
+ var label
+ get() = flabel.text
+ set(value) {
+ flabel.text = value
+ }
+ var rich
+ get() = flabel.rich
+ set(value) {
+ flabel.rich = value
+ }
+ override var size
+ get() = input.size
+ set(value) {
+ input.size = value
+ }
+
+ protected val idc = "kv_form_text_" + counter
+ internal abstract val input: AbstractTextInput
+ internal val flabel: FieldLabel = FieldLabel(idc, label, rich)
+
+ init {
+ this.addInternal(flabel)
+ counter++
+ }
+
+ companion object {
+ var counter = 0
+ }
+
+ @Suppress("UNCHECKED_CAST")
+ override fun <T : Widget> setEventListener(block: SnOn<T>.() -> Unit): Widget {
+ input.setEventListener(block)
+ return this
+ }
+
+ override fun setEventListener(block: SnOn<Widget>.() -> Unit): Widget {
+ input.setEventListener(block)
+ return this
+ }
+
+ override fun removeEventListeners(): Widget {
+ input.removeEventListeners()
+ return this
+ }
+}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/AbstractTextInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/AbstractTextInput.kt
new file mode 100644
index 00000000..09d9ec50
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/AbstractTextInput.kt
@@ -0,0 +1,113 @@
+package pl.treksoft.kvision.form.text
+
+import pl.treksoft.kvision.core.Widget
+import pl.treksoft.kvision.form.INPUTSIZE
+import pl.treksoft.kvision.form.StringFormField
+import pl.treksoft.kvision.snabbdom.StringBoolPair
+import pl.treksoft.kvision.snabbdom.StringPair
+
+abstract class AbstractTextInput(value: String? = null,
+ classes: Set<String> = setOf()) : Widget(classes + "form-control"), StringFormField {
+
+ init {
+ this.setInternalEventListener<AbstractTextInput> {
+ input = {
+ val v = getElementJQuery()?.`val`() as String?
+ if (v != null && v.isNotEmpty()) {
+ self.value = v
+ } else {
+ self.value = null
+ }
+ }
+ }
+ }
+
+ override var value: String? = value
+ set(value) {
+ field = value
+ refreshState()
+ }
+ @Suppress("LeakingThis")
+ var startValue: String? = value
+ set(value) {
+ field = value
+ this.value = value
+ refresh()
+ }
+ var placeholder: String? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ var name: String? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ var maxlength: Int? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ override var disabled: Boolean = false
+ set(value) {
+ field = value
+ refresh()
+ }
+ var autofocus: Boolean? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ var readonly: Boolean? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ override var size: INPUTSIZE? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+
+ override fun getSnClass(): List<StringBoolPair> {
+ val cl = super.getSnClass().toMutableList()
+ size?.let {
+ cl.add(it.className to true)
+ }
+ return cl
+ }
+
+ override fun getSnAttrs(): List<StringPair> {
+ val sn = super.getSnAttrs().toMutableList()
+ placeholder?.let {
+ sn.add("placeholder" to it)
+ }
+ name?.let {
+ sn.add("name" to it)
+ }
+ autofocus?.let {
+ if (it) {
+ sn.add("autofocus" to "autofocus")
+ }
+ }
+ maxlength?.let {
+ sn.add("maxlength" to ("" + it))
+ }
+ readonly?.let {
+ if (it) {
+ sn.add("readonly" to "readonly")
+ }
+ }
+ if (disabled) {
+ sn.add("disabled" to "true")
+ }
+ return sn
+ }
+
+ private fun refreshState() {
+ value?.let {
+ getElementJQuery()?.`val`(it)
+ } ?: getElementJQueryD()?.`val`(null)
+ }
+}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt
new file mode 100644
index 00000000..c5b8e622
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/Password.kt
@@ -0,0 +1,4 @@
+package pl.treksoft.kvision.form.text
+
+open class Password(value: String? = null, label: String? = null, rich: Boolean = false) : Text(TEXTINPUTTYPE.PASSWORD,
+ value, label, rich)
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt
new file mode 100644
index 00000000..d5d78616
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt
@@ -0,0 +1,25 @@
+package pl.treksoft.kvision.form.text
+
+
+open class Text(type: TEXTINPUTTYPE = TEXTINPUTTYPE.TEXT, value: String? = null,
+ label: String? = null, rich: Boolean = false) : AbstractText(label, rich) {
+
+ var type
+ get() = input.type
+ set(value) {
+ input.type = value
+ }
+ var autocomplete
+ get() = input.autocomplete
+ set(value) {
+ input.autocomplete = value
+ }
+
+ final override val input: TextInput = TextInput(type, value).apply { id = idc }
+
+ init {
+ @Suppress("LeakingThis")
+ input.eventTarget = this
+ this.addInternal(input)
+ }
+}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt
new file mode 100644
index 00000000..ecfe9cee
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt
@@ -0,0 +1,29 @@
+package pl.treksoft.kvision.form.text
+
+open class TextArea(cols: Int? = null, rows: Int? = null, value: String? = null,
+ label: String? = null, rich: Boolean = false) : AbstractText(label, rich) {
+
+ var cols
+ get() = input.cols
+ set(value) {
+ input.cols = value
+ }
+ var rows
+ get() = input.rows
+ set(value) {
+ input.rows = value
+ }
+ var wrapHard
+ get() = input.wrapHard
+ set(value) {
+ input.wrapHard = value
+ }
+
+ final override val input: TextAreaInput = TextAreaInput(cols, rows, value).apply { id = idc }
+
+ init {
+ @Suppress("LeakingThis")
+ input.eventTarget = this
+ this.addInternal(input)
+ }
+}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt
new file mode 100644
index 00000000..e8fd9a43
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/TextAreaInput.kt
@@ -0,0 +1,44 @@
+package pl.treksoft.kvision.form.text
+
+import com.github.snabbdom.VNode
+import pl.treksoft.kvision.snabbdom.StringPair
+
+open class TextAreaInput(cols: Int? = null, rows: Int? = null, value: String? = null, classes: Set<String> = setOf()) :
+ AbstractTextInput(value, classes) {
+
+ var cols: Int? = cols
+ set(value) {
+ field = value
+ refresh()
+ }
+ var rows: Int? = rows
+ set(value) {
+ field = value
+ refresh()
+ }
+ var wrapHard: Boolean = false
+ set(value) {
+ field = value
+ refresh()
+ }
+
+ override fun render(): VNode {
+ return startValue?.let {
+ kvh("textarea", arrayOf(it))
+ } ?: kvh("textarea")
+ }
+
+ override fun getSnAttrs(): List<StringPair> {
+ val sn = super.getSnAttrs().toMutableList()
+ cols?.let {
+ sn.add("cols" to ("" + it))
+ }
+ rows?.let {
+ sn.add("rows" to ("" + it))
+ }
+ if (wrapHard) {
+ sn.add("wrap" to "hard")
+ }
+ return sn
+ }
+}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt
new file mode 100644
index 00000000..436c0fec
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/text/TextInput.kt
@@ -0,0 +1,44 @@
+package pl.treksoft.kvision.form.text
+
+import com.github.snabbdom.VNode
+import pl.treksoft.kvision.snabbdom.StringPair
+
+enum class TEXTINPUTTYPE(val type: String) {
+ TEXT("text"),
+ PASSWORD("password")
+}
+
+open class TextInput(type: TEXTINPUTTYPE = TEXTINPUTTYPE.TEXT, value: String? = null, classes: Set<String> = setOf()) :
+ AbstractTextInput(value, classes) {
+
+ var type: TEXTINPUTTYPE = type
+ set(value) {
+ field = value
+ refresh()
+ }
+ var autocomplete: Boolean? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+
+ override fun render(): VNode {
+ return kvh("input")
+ }
+
+ override fun getSnAttrs(): List<StringPair> {
+ val sn = super.getSnAttrs().toMutableList()
+ sn.add("type" to type.type)
+ startValue?.let {
+ sn.add("value" to it)
+ }
+ autocomplete?.let {
+ if (it) {
+ sn.add("autocomplete" to "on")
+ } else {
+ sn.add("autocomplete" to "off")
+ }
+ }
+ return sn
+ }
+}