diff options
| author | Robert Jaros <rjaros@finn.pl> | 2017-11-09 12:21:43 +0100 |
|---|---|---|
| committer | Robert Jaros <rjaros@finn.pl> | 2017-11-09 12:21:43 +0100 |
| commit | 25ab470ea458b2652ff77e2a66a856c63553c486 (patch) | |
| tree | 1bba0a1e4972b91664edb5948b2d41e4ce9870e0 /src/main/kotlin/pl/treksoft/kvision/form/text | |
| parent | 5195caf0405eea7a6b34f60cb0a1bea3026bac3c (diff) | |
| download | kvision-25ab470ea458b2652ff77e2a66a856c63553c486.tar.gz kvision-25ab470ea458b2652ff77e2a66a856c63553c486.tar.bz2 kvision-25ab470ea458b2652ff77e2a66a856c63553c486.zip | |
Refactoring packages
Diffstat (limited to 'src/main/kotlin/pl/treksoft/kvision/form/text')
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 + } +} |
