aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/Showcase.kt18
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/CheckBox.kt4
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/CheckBoxInput.kt23
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/Radio.kt123
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/core/KVManagerSpec.kt4
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt2
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt8
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/form/CheckBoxInputSpec.kt12
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/form/RadioSpec.kt32
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt4
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt4
11 files changed, 219 insertions, 15 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/Showcase.kt b/src/main/kotlin/pl/treksoft/kvision/Showcase.kt
index 1eb0f319..afe49299 100644
--- a/src/main/kotlin/pl/treksoft/kvision/Showcase.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/Showcase.kt
@@ -7,6 +7,8 @@ import pl.treksoft.kvision.dropdown.DropDown
import pl.treksoft.kvision.form.CHECKBOXSTYLE
import pl.treksoft.kvision.form.CheckBox
import pl.treksoft.kvision.form.INPUTSIZE
+import pl.treksoft.kvision.form.RADIOSTYLE
+import pl.treksoft.kvision.form.Radio
import pl.treksoft.kvision.form.TEXTINPUTTYPE
import pl.treksoft.kvision.form.Text
import pl.treksoft.kvision.form.TextInput
@@ -69,6 +71,22 @@ class Showcase : ApplicationBase() {
change = { e -> println("change" + self.value) }
}
+ val radio = Radio(true, name = "radios", label = "Opcja 1", inline = true,
+ style = RADIOSTYLE.DANGER, extraValue = "o1")
+ val radio2 = Radio(false, name = "radios", label = "Opcja 2", rich = true, inline = true,
+ style = RADIOSTYLE.WARNING, extraValue = "o2")
+ val radio3 = Radio(false, name = "radios", label = "Opcja 3", inline = true,
+ style = RADIOSTYLE.PRIMARY, squared = true, extraValue = "o3")
+ root.add(radio)
+ root.add(radio2)
+ root.add(radio3)
+ radio.setEventListener<CheckBox> {
+ click = { e ->
+ println("rclick" + self.value)
+ }
+ change = { e -> println("rchange" + self.value) }
+ }
+
val text = Text(placeholder = "Pole formularza", maxlength = 5, label = "To jest pole")
root.add(text)
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/CheckBox.kt b/src/main/kotlin/pl/treksoft/kvision/form/CheckBox.kt
index 2d7b3276..13551f67 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/CheckBox.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/CheckBox.kt
@@ -70,7 +70,7 @@ open class CheckBox(value: Boolean = false, name: String? = null, style: CHECKBO
}
private val idc = "kv_form_checkbox_" + counter
- val input: CheckBoxInput = CheckBoxInput(value, name, disabled, idc, setOf("styled"))
+ val input: CheckBoxInput = CheckBoxInput(CHECKINPUTTYPE.CHECKBOX, value, name, disabled, idc, null, setOf("styled"))
val flabel: FieldLabel = FieldLabel(idc, label, rich)
init {
@@ -85,7 +85,7 @@ open class CheckBox(value: Boolean = false, name: String? = null, style: CHECKBO
@Suppress("UNCHECKED_CAST")
override fun <T : Widget> setEventListener(block: SnOn<T>.() -> Unit): Widget {
- input.setEventListener<T>(block)
+ input.setEventListener(block)
return this
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/CheckBoxInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/CheckBoxInput.kt
index 44383629..5fa220e9 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/CheckBoxInput.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/CheckBoxInput.kt
@@ -5,8 +5,14 @@ import pl.treksoft.kvision.core.Widget
import pl.treksoft.kvision.snabbdom.StringBoolPair
import pl.treksoft.kvision.snabbdom.StringPair
-open class CheckBoxInput(override var value: Boolean = false,
+enum class CHECKINPUTTYPE(val type: String) {
+ CHECKBOX("checkbox"),
+ RADIO("radio")
+}
+
+open class CheckBoxInput(type: CHECKINPUTTYPE = CHECKINPUTTYPE.CHECKBOX, override var value: Boolean = false,
name: String? = null, disabled: Boolean = false, id: String? = null,
+ extraValue: String? = null,
classes: Set<String> = setOf()) : Widget(classes), BoolFormField {
init {
@@ -20,6 +26,11 @@ open class CheckBoxInput(override var value: Boolean = false,
this.value = value
refresh()
}
+ var type: CHECKINPUTTYPE = type
+ set(value) {
+ field = value
+ refresh()
+ }
var name: String? = name
set(value) {
field = value
@@ -30,6 +41,11 @@ open class CheckBoxInput(override var value: Boolean = false,
field = value
refresh()
}
+ var extraValue: String? = extraValue
+ set(value) {
+ field = value
+ refresh()
+ }
override var size: INPUTSIZE? = null
set(value) {
field = value
@@ -50,7 +66,7 @@ open class CheckBoxInput(override var value: Boolean = false,
override fun getSnAttrs(): List<StringPair> {
val sn = super.getSnAttrs().toMutableList()
- sn.add("type" to "checkbox")
+ sn.add("type" to type.type)
if (startValue) {
sn.add("checked" to "true")
}
@@ -60,6 +76,9 @@ open class CheckBoxInput(override var value: Boolean = false,
if (disabled) {
sn.add("disabled" to "true")
}
+ extraValue?.let {
+ sn.add("value" to it)
+ }
return sn
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/Radio.kt b/src/main/kotlin/pl/treksoft/kvision/form/Radio.kt
new file mode 100644
index 00000000..f3f72a3d
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/form/Radio.kt
@@ -0,0 +1,123 @@
+package pl.treksoft.kvision.form
+
+import pl.treksoft.kvision.core.Container
+import pl.treksoft.kvision.core.Widget
+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, name: String? = null, style: RADIOSTYLE? = null,
+ squared: Boolean = false, inline: Boolean = false, disabled: Boolean = false,
+ label: String? = null, rich: Boolean = false) : Container(), 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 = style
+ set(value) {
+ field = value
+ refresh()
+ }
+ var squared = squared
+ set(value) {
+ field = value
+ refresh()
+ }
+ var inline = inline
+ 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: CheckBoxInput = CheckBoxInput(CHECKINPUTTYPE.RADIO, value, name, disabled, idc, extraValue)
+ val flabel: FieldLabel = FieldLabel(idc, label, rich)
+
+ init {
+ 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 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
+ }
+}
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/core/KVManagerSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/core/KVManagerSpec.kt
index 9a5861df..f47e1900 100644
--- a/src/test/kotlin/test/pl/treksoft/kvision/core/KVManagerSpec.kt
+++ b/src/test/kotlin/test/pl/treksoft/kvision/core/KVManagerSpec.kt
@@ -13,7 +13,7 @@ import kotlin.test.assertTrue
class KVManagerSpec : DomSpec {
@Test
- fun patch_ById() {
+ fun patchById() {
run {
val vnode = h("span", snOpt {
attrs = snAttrs(listOf("id" to "test_new"))
@@ -26,7 +26,7 @@ class KVManagerSpec : DomSpec {
}
@Test
- fun patch_ByVnode() {
+ fun patchByVnode() {
run {
val vnode1 = h("span", snOpt {
attrs = snAttrs(listOf("id" to "test2"))
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt
index 179788d0..4e8c4ea1 100644
--- a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt
+++ b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt
@@ -22,7 +22,7 @@ class WidgetSpec : WSpec {
}
@Test
- fun render_ToDom() {
+ fun renderToDom() {
runW { widget, element ->
widget.addCssClass("testClass")
widget.title = "test_title"
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt
index 5f417f03..4e42fbe2 100644
--- a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt
+++ b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt
@@ -25,7 +25,7 @@ class DropDownSpec : DomSpec {
}
@Test
- fun render_DropUp() {
+ fun renderDropUp() {
run {
val root = Root("test")
val dd = DropDown("Dropdown", listOf("abc" to "#!/x", "def" to "#!/y"), "flag", dropup = true)
@@ -38,7 +38,7 @@ class DropDownSpec : DomSpec {
}
@Test
- fun render_HeaderElement() {
+ fun renderHeaderElement() {
run {
val root = Root("test")
val dd = DropDown("Dropdown", listOf("abc" to DD.HEADER.type), "flag")
@@ -51,7 +51,7 @@ class DropDownSpec : DomSpec {
}
@Test
- fun render_SeparatorElement() {
+ fun renderSeparatorElement() {
run {
val root = Root("test")
val dd = DropDown("Dropdown", listOf("abc" to DD.SEPARATOR.type), "flag")
@@ -64,7 +64,7 @@ class DropDownSpec : DomSpec {
}
@Test
- fun render_DisabledElement() {
+ fun renderDisabledElement() {
run {
val root = Root("test")
val dd = DropDown("Dropdown", listOf("abc" to DD.DISABLED.type), "flag")
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/CheckBoxInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/CheckBoxInputSpec.kt
index 780c0337..efc6d78e 100644
--- a/src/test/kotlin/test/pl/treksoft/kvision/form/CheckBoxInputSpec.kt
+++ b/src/test/kotlin/test/pl/treksoft/kvision/form/CheckBoxInputSpec.kt
@@ -1,6 +1,7 @@
package test.pl.treksoft.kvision.form
import pl.treksoft.kvision.core.Root
+import pl.treksoft.kvision.form.CHECKINPUTTYPE
import pl.treksoft.kvision.form.CheckBoxInput
import pl.treksoft.kvision.form.TEXTINPUTTYPE
import pl.treksoft.kvision.form.TextInput
@@ -22,4 +23,15 @@ class CheckBoxInputSpec : DomSpec {
}
}
+ @Test
+ fun renderAsRadio() {
+ run {
+ val root = Root("test")
+ val ci = CheckBoxInput(type = CHECKINPUTTYPE.RADIO, value = true, name = "name", id = "idti", extraValue = "abc")
+ root.add(ci)
+ val element = document.getElementById("test")
+ assertEquals("<input id=\"idti\" type=\"radio\" checked=\"\" name=\"name\" value=\"abc\">", element?.innerHTML, "Should render correct radio button field")
+ }
+ }
+
} \ No newline at end of file
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/RadioSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/RadioSpec.kt
new file mode 100644
index 00000000..5b827a56
--- /dev/null
+++ b/src/test/kotlin/test/pl/treksoft/kvision/form/RadioSpec.kt
@@ -0,0 +1,32 @@
+package test.pl.treksoft.kvision.form
+
+import pl.treksoft.kvision.core.Root
+import pl.treksoft.kvision.form.CHECKBOXSTYLE
+import pl.treksoft.kvision.form.CheckBox
+import pl.treksoft.kvision.form.RADIOSTYLE
+import pl.treksoft.kvision.form.Radio
+import test.pl.treksoft.kvision.DomSpec
+import kotlin.browser.document
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class RadioSpec : DomSpec {
+
+ @Test
+ fun render() {
+ run {
+ val root = Root("test")
+ val ci = Radio(value = true, name = "name", style = RADIOSTYLE.DANGER, disabled = true,
+ inline = true, label = "Label", extraValue = "abc")
+ root.add(ci)
+ val element = document.getElementById("test")
+ val id = ci.input.id
+ assertEquals("<div class=\"radio radio-danger radio-inline\"><input id=\"$id\" type=\"radio\" checked=\"\" name=\"name\" disabled=\"\" value=\"abc\"><label for=\"$id\">Label</label></div>", element?.innerHTML, "Should render correct radio button form field")
+ ci.style = RADIOSTYLE.INFO
+ ci.squared = true
+ ci.inline = false
+ assertEquals("<div class=\"checkbox checkbox-info\"><input id=\"$id\" type=\"radio\" checked=\"\" name=\"name\" disabled=\"\" value=\"abc\"><label for=\"$id\">Label</label></div>", element?.innerHTML, "Should render correct radio button form field")
+ }
+ }
+
+} \ No newline at end of file
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt
index 78631076..48a13f6d 100644
--- a/src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt
+++ b/src/test/kotlin/test/pl/treksoft/kvision/html/ListSpec.kt
@@ -13,7 +13,7 @@ import kotlin.test.assertEquals
class ListSpec : DomSpec {
@Test
- fun render_Elements() {
+ fun renderElements() {
run {
val root = Root("test")
val list = ListTag(LIST.DL_HORIZ, listOf("a1", "a2", "b1", "b2"))
@@ -24,7 +24,7 @@ class ListSpec : DomSpec {
}
@Test
- fun render_AsContainer() {
+ fun renderAsContainer() {
run {
val root = Root("test")
val list = ListTag(LIST.UL)
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt
index 997714db..8d6a19d1 100644
--- a/src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt
+++ b/src/test/kotlin/test/pl/treksoft/kvision/html/TagSpec.kt
@@ -24,7 +24,7 @@ class TagSpec : DomSpec {
}
@Test
- fun render_Rich() {
+ fun renderRich() {
run {
val root = Root("test")
val tag = Tag(TAG.H1, "This is <b>h1</b>", rich = true, align = ALIGN.RIGHT)
@@ -35,7 +35,7 @@ class TagSpec : DomSpec {
}
@Test
- fun render_AsContainer() {
+ fun renderAsContainer() {
run {
val root = Root("test")
val tag = Tag(TAG.P, align = ALIGN.RIGHT)