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/check | |
| 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/check')
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 + } +} |
