aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/pl/treksoft/kvision/form/check
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/check
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/check')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt118
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt112
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt134
3 files changed, 364 insertions, 0 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt b/src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt
new file mode 100644
index 00000000..e4dd7fe9
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt
@@ -0,0 +1,118 @@
+package pl.treksoft.kvision.form.check
+
+import pl.treksoft.kvision.core.Widget
+import pl.treksoft.kvision.form.BoolFormField
+import pl.treksoft.kvision.form.FieldLabel
+import pl.treksoft.kvision.panel.SimplePanel
+import pl.treksoft.kvision.snabbdom.SnOn
+import pl.treksoft.kvision.snabbdom.StringBoolPair
+
+enum class CHECKBOXSTYLE(val className: String) {
+ DEFAULT("checkbox-default"),
+ PRIMARY("checkbox-primary"),
+ SUCCESS("checkbox-success"),
+ INFO("checkbox-info"),
+ WARNING("checkbox-warning"),
+ DANGER("checkbox-danger"),
+}
+
+open class CheckBox(value: Boolean = false, label: String? = null,
+ rich: Boolean = false) : SimplePanel(setOf("checkbox")), BoolFormField {
+
+ override var value
+ get() = input.value
+ set(value) {
+ input.value = value
+ }
+ var startValue
+ get() = input.startValue
+ set(value) {
+ input.startValue = value
+ }
+ var name
+ get() = input.name
+ set(value) {
+ input.name = 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
+ }
+ var style: CHECKBOXSTYLE? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ var circled: Boolean = false
+ set(value) {
+ field = value
+ refresh()
+ }
+ var inline: Boolean = false
+ set(value) {
+ field = value
+ refresh()
+ }
+ override var size
+ get() = input.size
+ set(value) {
+ input.size = value
+ }
+
+ private val idc = "kv_form_checkbox_" + counter
+ val input: CheckInput = CheckInput(CHECKINPUTTYPE.CHECKBOX, value, setOf("styled")).apply { id = idc }
+ val flabel: FieldLabel = FieldLabel(idc, label, rich)
+
+ init {
+ @Suppress("LeakingThis")
+ input.eventTarget = this
+ this.addInternal(input)
+ 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
+ }
+
+ override fun getSnClass(): List<StringBoolPair> {
+ val cl = super.getSnClass().toMutableList()
+ style?.let {
+ cl.add(it.className to true)
+ }
+ if (circled) {
+ cl.add("checkbox-circle" to true)
+ }
+ if (inline) {
+ cl.add("checkbox-inline" to true)
+ }
+ return cl
+ }
+}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt
new file mode 100644
index 00000000..a4899f45
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt
@@ -0,0 +1,112 @@
+package pl.treksoft.kvision.form.check
+
+import com.github.snabbdom.VNode
+import pl.treksoft.kvision.core.Widget
+import pl.treksoft.kvision.form.BoolFormField
+import pl.treksoft.kvision.form.INPUTSIZE
+import pl.treksoft.kvision.snabbdom.StringBoolPair
+import pl.treksoft.kvision.snabbdom.StringPair
+
+enum class CHECKINPUTTYPE(val type: String) {
+ CHECKBOX("checkbox"),
+ RADIO("radio")
+}
+
+open class CheckInput(type: CHECKINPUTTYPE = CHECKINPUTTYPE.CHECKBOX, value: Boolean = false,
+ classes: Set<String> = setOf()) : Widget(classes), BoolFormField {
+
+ init {
+ this.setInternalEventListener<CheckInput> {
+ click = {
+ val v = getElementJQuery()?.prop("checked") as Boolean?
+ self.value = (v == true)
+ }
+ change = {
+ val v = getElementJQuery()?.prop("checked") as Boolean?
+ self.value = (v == true)
+ }
+ }
+ }
+ override var value: Boolean = value
+ set(value) {
+ field = value
+ refreshState()
+ }
+ @Suppress("LeakingThis")
+ var startValue: Boolean = value
+ set(value) {
+ field = value
+ this.value = value
+ refresh()
+ }
+ var type: CHECKINPUTTYPE = type
+ set(value) {
+ field = value
+ refresh()
+ }
+ var name: String? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ override var disabled: Boolean = false
+ set(value) {
+ field = value
+ refresh()
+ }
+ var extraValue: String? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ override var size: INPUTSIZE? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+
+ override fun render(): VNode {
+ return kvh("input")
+ }
+
+ 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()
+ sn.add("type" to type.type)
+ if (startValue) {
+ sn.add("checked" to "true")
+ }
+ name?.let {
+ sn.add("name" to it)
+ }
+ if (disabled) {
+ sn.add("disabled" to "true")
+ }
+ extraValue?.let {
+ sn.add("value" to it)
+ }
+ return sn
+ }
+
+ override fun afterInsert(node: VNode) {
+ refreshState()
+ }
+
+ override fun afterPostpatch(node: VNode) {
+ refreshState()
+ }
+
+ private fun refreshState() {
+ val v = getElementJQuery()?.prop("checked") as Boolean?
+ if (this.value != v) {
+ getElementJQuery()?.prop("checked", this.value)
+ }
+ }
+}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt b/src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt
new file mode 100644
index 00000000..284cf26c
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt
@@ -0,0 +1,134 @@
+package pl.treksoft.kvision.form.check
+
+import pl.treksoft.kvision.core.Widget
+import pl.treksoft.kvision.form.BoolFormField
+import pl.treksoft.kvision.form.FieldLabel
+import pl.treksoft.kvision.panel.SimplePanel
+import pl.treksoft.kvision.snabbdom.SnOn
+import pl.treksoft.kvision.snabbdom.StringBoolPair
+
+enum class RADIOSTYLE(val className: String) {
+ DEFAULT("radio-default"),
+ PRIMARY("radio-primary"),
+ SUCCESS("radio-success"),
+ INFO("radio-info"),
+ WARNING("radio-warning"),
+ DANGER("radio-danger"),
+}
+
+open class Radio(value: Boolean = false, extraValue: String? = null, label: String? = null,
+ rich: Boolean = false) : SimplePanel(), BoolFormField {
+
+ override var value
+ get() = input.value
+ set(value) {
+ input.value = value
+ }
+ var startValue
+ get() = input.startValue
+ set(value) {
+ input.startValue = value
+ }
+ var extraValue
+ get() = input.extraValue
+ set(value) {
+ input.extraValue = value
+ }
+ var name
+ get() = input.name
+ set(value) {
+ input.name = 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
+ }
+ var style: RADIOSTYLE? = null
+ set(value) {
+ field = value
+ refresh()
+ }
+ var squared: Boolean = false
+ set(value) {
+ field = value
+ refresh()
+ }
+ var inline: Boolean = false
+ set(value) {
+ field = value
+ refresh()
+ }
+ override var size
+ get() = input.size
+ set(value) {
+ input.size = value
+ }
+
+ private val idc = "kv_form_radio_" + counter
+ val input: CheckInput = CheckInput(CHECKINPUTTYPE.RADIO, value).apply {
+ this.id = idc
+ this.extraValue = extraValue
+ }
+ val flabel: FieldLabel = FieldLabel(idc, label, rich)
+
+ init {
+ @Suppress("LeakingThis")
+ input.eventTarget = this
+ this.addInternal(input)
+ 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
+ }
+
+ override fun getSnClass(): List<StringBoolPair> {
+ val cl = super.getSnClass().toMutableList()
+ if (!squared) {
+ cl.add("radio" to true)
+ style?.let {
+ cl.add(it.className to true)
+ }
+ if (inline) {
+ cl.add("radio-inline" to true)
+ }
+ } else {
+ cl.add("checkbox" to true)
+ style?.let {
+ cl.add(it.className.replace("radio", "checkbox") to true)
+ }
+ if (inline) {
+ cl.add("checkbox-inline" to true)
+ }
+ }
+ return cl
+ }
+}