aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/pl/treksoft/kvision/form/Select.kt
blob: a8759208d11351be17ece66cbd33015463e8638a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package pl.treksoft.kvision.form

import pl.treksoft.kvision.core.Widget
import pl.treksoft.kvision.panel.SimplePanel
import pl.treksoft.kvision.snabbdom.SnOn
import pl.treksoft.kvision.snabbdom.StringPair

open class Select(options: List<StringPair>? = null, value: String? = null,
                  multiple: Boolean = false, label: String? = null,
                  rich: Boolean = false) : SimplePanel(setOf("form-group")), StringFormField {

    var options
        get() = input.options
        set(value) {
            input.options = value
        }
    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
        }
    var multiple
        get() = input.multiple
        set(value) {
            input.multiple = value
        }
    var maxOptions
        get() = input.maxOptions
        set(value) {
            input.maxOptions = value
        }
    var liveSearch
        get() = input.liveSearch
        set(value) {
            input.liveSearch = value
        }
    var placeholder
        get() = input.placeholder
        set(value) {
            input.placeholder = value
        }
    var style
        get() = input.style
        set(value) {
            input.style = value
        }
    var selectWidth
        get() = input.selectWidth
        set(value) {
            input.selectWidth = value
        }
    var selectWidthType
        get() = input.selectWidthType
        set(value) {
            input.selectWidthType = value
        }
    var emptyOption
        get() = input.emptyOption
        set(value) {
            input.emptyOption = 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
        }

    private val idc = "kv_form_select_" + counter
    val input: SelectInput = SelectInput(options, value, multiple, setOf("form-control")).apply { id = idc }
    val flabel: FieldLabel = FieldLabel(idc, label, rich)

    init {
        this.addInternal(flabel)
        this.addInternal(input)
        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 add(child: Widget): SimplePanel {
        input.add(child)
        return this
    }

    override fun addAll(children: List<Widget>): SimplePanel {
        input.addAll(children)
        return this
    }

    override fun remove(child: Widget): SimplePanel {
        input.remove(child)
        return this
    }

    override fun removeAll(): SimplePanel {
        input.removeAll()
        return this
    }

    override fun getChildren(): List<Widget> {
        return input.getChildren()
    }
}