aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Jaros <rjaros@finn.pl>2019-10-03 19:03:21 +0200
committerRobert Jaros <rjaros@finn.pl>2019-10-03 19:03:21 +0200
commit6b53324c97bfc80ed14dfca6a5dbc879950715b9 (patch)
tree55c7bb7d06e37470795a93e1f542e51ef3f1ace6 /src
parent22a8d5c35db97d65a90b21d97e6835380191845d (diff)
downloadkvision-6b53324c97bfc80ed14dfca6a5dbc879950715b9.tar.gz
kvision-6b53324c97bfc80ed14dfca6a5dbc879950715b9.tar.bz2
kvision-6b53324c97bfc80ed14dfca6a5dbc879950715b9.zip
Upgrade to Bootstrap 4.
Upgrade to Font Awesome 5. Restructure modules.
Diffstat (limited to 'src')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/KVManager.kt57
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/core/Widget.kt66
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt98
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/dropdown/DropDown.kt333
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/dropdown/Header.kt62
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/dropdown/Separator.kt63
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/FormControl.kt45
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt46
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/HelpText.kt (renamed from src/main/kotlin/pl/treksoft/kvision/form/HelpBlock.kt)8
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/InvalidFeedback.kt (renamed from src/test/kotlin/test/pl/treksoft/kvision/dropdown/HeaderSpec.kt)37
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/CheckBox.kt32
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/CheckInput.kt8
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/Radio.kt40
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt60
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroupInput.kt14
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt8
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt8
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/AbstractText.kt6
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/AbstractTextInput.kt8
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/Text.kt2
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/TextArea.kt2
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/Button.kt35
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/Icon.kt8
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/Image.kt6
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/Label.kt51
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/Link.kt33
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/List.kt5
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/Tag.kt6
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/modal/Alert.kt121
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/modal/CloseIcon.kt48
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/modal/Confirm.kt176
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/modal/Modal.kt298
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/navbar/Nav.kt73
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/navbar/NavForm.kt74
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/navbar/Navbar.kt195
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/panel/ResponsiveGridPanel.kt185
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/panel/Root.kt26
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/panel/SimplePanel.kt4
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/panel/TabPanel.kt270
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/progress/ProgressBar.kt162
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/progress/ProgressIndicator.kt125
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/table/Cell.kt16
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/table/HeaderCell.kt13
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/table/Table.kt46
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/toolbar/ButtonGroup.kt103
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/toolbar/Toolbar.kt58
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/window/MaximizeIcon.kt48
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/window/MinimizeIcon.kt48
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/window/Window.kt446
-rw-r--r--src/main/resources/css/style.css78
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/dropdown/ContextMenuSpec.kt75
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/dropdown/SeparatorSpec.kt46
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/form/HelpTextSpec.kt (renamed from src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt)4
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt2
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/form/text/TextSpec.kt2
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/navbar/NavFormSpec.kt54
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/navbar/NavSpec.kt54
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/navbar/NavbarSpec.kt70
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/panel/ResponsiveGridPanelSpec.kt50
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/panel/TabPanelSpec.kt117
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressBarSpec.kt56
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/progress/ProgressIndicatorSpec.kt55
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/table/TableSpec.kt3
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/toolbar/ButtonGroupSpec.kt57
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/toolbar/ToolbarSpec.kt47
65 files changed, 468 insertions, 3984 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/KVManager.kt b/src/main/kotlin/pl/treksoft/kvision/KVManager.kt
index d1a4a8be..d3d00851 100644
--- a/src/main/kotlin/pl/treksoft/kvision/KVManager.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/KVManager.kt
@@ -30,8 +30,6 @@ import com.github.snabbdom.eventListenersModule
import com.github.snabbdom.propsModule
import com.github.snabbdom.styleModule
import org.w3c.dom.HTMLElement
-import pl.treksoft.kvision.core.Component
-import pl.treksoft.kvision.utils.isIE11
import kotlin.browser.document
import kotlin.dom.clear
@@ -44,20 +42,25 @@ external fun require(name: String): dynamic
/**
* Internal singleton object which initializes and configures KVision framework.
*/
-@Suppress("EmptyCatchBlock", "TooGenericExceptionCaught", "LargeClass")
-internal object KVManager {
- private val kvisionBootstrap = try {
- require("kvision-bootstrap").pl.treksoft.kvision.KVManagerBootstrap
- } catch (e: Throwable) {
- }
- private val elementResizeEvent = try {
- require("element-resize-event")
- } catch (e: Throwable) {
- }
- private val resizable = try {
+@Suppress("EmptyCatchBlock", "TooGenericExceptionCaught")
+object KVManager {
+ init {
+ try {
+ require("kvision-bootstrap").pl.treksoft.kvision.KVManagerBootstrap
+ } catch (e: Throwable) {
+ }
+ try {
+ require("kvision-bootstrap-css").pl.treksoft.kvision.KVManagerBootstrapCss
+ } catch (e: Throwable) {
+ }
+ try {
+ require("kvision-fontawesome").pl.treksoft.kvision.KVManagerFontAwesome
+ } catch (e: Throwable) {
+ }
+ require("./css/style.css")
require("jquery-resizable-dom")
- } catch (e: Throwable) {
}
+
internal val fecha = require("fecha")
private val sdPatch = Snabbdom.init(
arrayOf(
@@ -81,28 +84,12 @@ internal object KVManager {
return sdPatch(oldVNode, newVNode)
}
+ /**
+ * @suppress
+ * Internal function.
+ */
@Suppress("UnsafeCastFromDynamic")
- internal fun virtualize(html: String): VNode {
+ fun virtualize(html: String): VNode {
return sdVirtualize(html)
}
-
- @Suppress("UnsafeCastFromDynamic")
- internal fun setResizeEvent(component: Component, callback: () -> Unit) {
- if (!isIE11()) {
- component.getElement()?.let {
- elementResizeEvent(it, callback)
- }
- }
- }
-
- @Suppress("UnsafeCastFromDynamic")
- internal fun clearResizeEvent(component: Component) {
- if (!isIE11()) {
- if (component.getElement()?.asDynamic()?.__resizeTrigger__?.contentDocument != null) {
- component.getElement()?.let {
- elementResizeEvent.unbind(it)
- }
- }
- }
- }
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt b/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
index e17d7ba9..24543b1f 100644
--- a/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
@@ -27,11 +27,9 @@ import com.github.snabbdom.h
import org.w3c.dom.CustomEventInit
import org.w3c.dom.DragEvent
import org.w3c.dom.Node
-import org.w3c.dom.events.MouseEvent
import pl.treksoft.jquery.JQuery
import pl.treksoft.jquery.jQuery
import pl.treksoft.kvision.KVManager
-import pl.treksoft.kvision.dropdown.ContextMenu
import pl.treksoft.kvision.i18n.I18n
import pl.treksoft.kvision.i18n.I18n.trans
import pl.treksoft.kvision.panel.Root
@@ -83,6 +81,10 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
var role: String? by refreshOnUpdate()
/**
+ * A tabindex attribute of generated HTML element.
+ */
+ var tabindex: Int? by refreshOnUpdate()
+ /**
* Determines if the current widget is draggable.
*/
var draggable: Boolean? by refreshOnUpdate()
@@ -241,6 +243,9 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
role?.let {
snattrs.add("role" to it)
}
+ tabindex?.let {
+ snattrs.add("tabindex" to it.toString())
+ }
if (draggable == true) {
snattrs.add("draggable" to "true")
}
@@ -439,7 +444,8 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
open fun enableTooltip(options: TooltipOptions = TooltipOptions()): Widget {
this.tooltipOptions = options
- getElementJQueryD()?.tooltip(options.copy(title = options.title?.let { translate(it) }).toJs())
+ val tooltipFun = getElementJQueryD()?.tooltip
+ if (tooltipFun != undefined) getElementJQueryD()?.tooltip(options.copy(title = options.title?.let { translate(it) }).toJs())
return this
}
@@ -449,7 +455,8 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
open fun showTooltip(): Widget {
if (this.tooltipOptions != null) {
- getElementJQueryD()?.tooltip("show")
+ val tooltipFun = getElementJQueryD()?.tooltip
+ if (tooltipFun != undefined) getElementJQueryD()?.tooltip("show")
}
return this
}
@@ -460,7 +467,8 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
open fun hideTooltip(): Widget {
if (this.tooltipOptions != null) {
- getElementJQueryD()?.tooltip("hide")
+ val tooltipFun = getElementJQueryD()?.tooltip
+ if (tooltipFun != undefined) getElementJQueryD()?.tooltip("hide")
}
return this
}
@@ -471,7 +479,8 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
open fun disableTooltip(): Widget {
this.tooltipOptions = null
- getElementJQueryD()?.tooltip("destroy")
+ val tooltipFun = getElementJQueryD()?.tooltip
+ if (tooltipFun != undefined) getElementJQueryD()?.tooltip("dispose")
return this
}
@@ -482,7 +491,8 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
open fun enablePopover(options: PopoverOptions = PopoverOptions()): Widget {
this.popoverOptions = options
- getElementJQueryD()?.popover(
+ val popoverFun = getElementJQueryD()?.popover
+ if (popoverFun != undefined) getElementJQueryD()?.popover(
options.copy(title = options.title?.let { translate(it) },
content = options.content?.let { translate(it) }).toJs()
)
@@ -495,7 +505,8 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
open fun showPopover(): Widget {
if (this.popoverOptions != null) {
- getElementJQueryD()?.popover("show")
+ val popoverFun = getElementJQueryD()?.popover
+ if (popoverFun != undefined) getElementJQueryD()?.popover("show")
}
return this
}
@@ -506,7 +517,8 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
open fun hidePopover(): Widget {
if (this.popoverOptions != null) {
- getElementJQueryD()?.popover("hide")
+ val popoverFun = getElementJQueryD()?.popover
+ if (popoverFun != undefined) getElementJQueryD()?.popover("hide")
}
return this
}
@@ -517,7 +529,8 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
*/
open fun disablePopover(): Widget {
this.popoverOptions = null
- getElementJQueryD()?.popover("destroy")
+ val popoverFun = getElementJQueryD()?.popover
+ if (popoverFun != undefined) getElementJQueryD()?.popover("dispose")
return this
}
@@ -624,11 +637,13 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
internal open fun afterInsertInternal(node: VNode) {
this.tooltipOptions?.let {
@Suppress("UnsafeCastFromDynamic")
- getElementJQueryD().tooltip(it.copy(title = it.title?.let { translate(it) }).toJs())
+ val tooltipFun = getElementJQueryD()?.tooltip
+ if (tooltipFun != undefined) getElementJQueryD()?.tooltip(it.copy(title = it.title?.let { translate(it) }).toJs())
}
this.popoverOptions?.let {
@Suppress("UnsafeCastFromDynamic")
- getElementJQueryD().popover(
+ val popoverFun = getElementJQueryD()?.popover
+ if (popoverFun != undefined) getElementJQueryD()?.popover(
it.copy(title = it.title?.let { translate(it) },
content = it.content?.let { translate(it) }).toJs()
)
@@ -647,10 +662,12 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
@Suppress("UnsafeCastFromDynamic")
internal open fun afterDestroyInternal() {
this.tooltipOptions?.let {
- getElementJQueryD().tooltip("destroy")
+ val tooltipFun = getElementJQueryD()?.tooltip
+ if (tooltipFun != undefined) getElementJQueryD()?.tooltip("dispose")
}
this.popoverOptions?.let {
- getElementJQueryD().popover("destroy")
+ val popoverFun = getElementJQueryD()?.popover
+ if (popoverFun != undefined) getElementJQueryD()?.popover("dispose")
}
}
@@ -731,21 +748,6 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
}
/**
- * Sets context menu for the current widget.
- * @param contextMenu a context menu
- * @return current widget
- */
- open fun setContextMenu(contextMenu: ContextMenu): Widget {
- setEventListener<Widget> {
- contextmenu = { e: MouseEvent ->
- e.preventDefault()
- contextMenu.positionMenu(e)
- }
- }
- return this
- }
-
- /**
* @suppress
* Internal function
*/
@@ -755,11 +757,7 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
): Array<out Any> {
val translatedLabel = translate(label)
return if (icon != null) {
- if (icon.startsWith("fa-")) {
- arrayOf(KVManager.virtualize("<i class='fa $icon'></i>"), " $translatedLabel")
- } else {
- arrayOf(KVManager.virtualize("<span class='glyphicon glyphicon-$icon'></span>"), " $translatedLabel")
- }
+ arrayOf(KVManager.virtualize("<i class='$icon'></i>"), " $translatedLabel")
} else if (image != null) {
arrayOf(KVManager.virtualize("<img src='$image' alt='' />"), " $translatedLabel")
} else {
diff --git a/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt b/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt
deleted file mode 100644
index 5fac0494..00000000
--- a/src/main/kotlin/pl/treksoft/kvision/dropdown/ContextMenu.kt
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2017-present Robert Jaros
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-package pl.treksoft.kvision.dropdown
-
-import org.w3c.dom.events.MouseEvent
-import pl.treksoft.kvision.core.Display
-import pl.treksoft.kvision.core.Widget
-import pl.treksoft.kvision.html.ListTag
-import pl.treksoft.kvision.html.ListType
-import pl.treksoft.kvision.panel.Root
-import pl.treksoft.kvision.utils.px
-
-/**
- * Context menu component.
- *
- * @constructor
- * @param element an element to bind
- * @param fixedPosition use fixed positioning
- * @param classes a set of CSS class names
- */
-open class ContextMenu(
- element: Widget? = null,
- protected val fixedPosition: Boolean = false,
- classes: Set<String> = setOf(), init: (ContextMenu.() -> Unit)? = null
-) : ListTag(ListType.UL, classes = classes + "dropdown-menu") {
-
- init {
- @Suppress("LeakingThis")
- hide()
- @Suppress("LeakingThis")
- display = Display.BLOCK
- val root = element?.getRoot() ?: Root.getLastRoot()
- if (root != null) {
- @Suppress("LeakingThis")
- root.addContextMenu(this)
- } else {
- println("At least one Root object is required to create a context menu!")
- }
- @Suppress("LeakingThis")
- init?.invoke(this)
- }
-
- /**
- * Positions and shows a context menu based on a mouse event.
- * @param mouseEvent mouse event
- * @return current context menu
- */
- open fun positionMenu(mouseEvent: MouseEvent): ContextMenu {
- if (fixedPosition) {
- this.top = DEFAULT_FIXED_POS_Y.px
- this.left = DEFAULT_FIXED_POS_X.px
- } else {
- this.top = mouseEvent.pageY.toInt().px
- this.left = mouseEvent.pageX.toInt().px
- }
- this.show()
- return this
- }
-
- companion object {
-
- const val DEFAULT_FIXED_POS_X = 5
- const val DEFAULT_FIXED_POS_Y = 5
-
- /**
- * DSL builder extension function.
- *
- * It takes the same parameters as the constructor of the built component.
- */
- fun Widget.contextMenu(
- fixedPosition: Boolean = false,
- classes: Set<String> = setOf(), init: (ContextMenu.() -> Unit)? = null
- ): ContextMenu {
- val contextMenu = ContextMenu(this, fixedPosition, classes).apply { init?.invoke(this) }
- this.setContextMenu(contextMenu)
- return contextMenu
- }
- }
-}
diff --git a/src/main/kotlin/pl/treksoft/kvision/dropdown/DropDown.kt b/src/main/kotlin/pl/treksoft/kvision/dropdown/DropDown.kt
deleted file mode 100644
index a521fe95..00000000
--- a/src/main/kotlin/pl/treksoft/kvision/dropdown/DropDown.kt
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (c) 2017-present Robert Jaros
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-package pl.treksoft.kvision.dropdown
-
-import com.github.snabbdom.VNode
-import pl.treksoft.kvision.KVManager
-import pl.treksoft.kvision.core.Component
-import pl.treksoft.kvision.core.Container
-import pl.treksoft.kvision.core.CssSize
-import pl.treksoft.kvision.core.StringBoolPair
-import pl.treksoft.kvision.core.StringPair
-import pl.treksoft.kvision.html.Button
-import pl.treksoft.kvision.html.ButtonStyle
-import pl.treksoft.kvision.html.ButtonType
-import pl.treksoft.kvision.html.Link
-import pl.treksoft.kvision.html.ListTag
-import pl.treksoft.kvision.html.ListType
-import pl.treksoft.kvision.html.TAG
-import pl.treksoft.kvision.html.Tag
-import pl.treksoft.kvision.panel.SimplePanel
-import pl.treksoft.kvision.utils.obj
-
-/**
- * Useful options for use in DropDown's *elements* parameter.
- */
-enum class DD(val option: String) {
- HEADER("DD#HEADER"),
- DISABLED("DD#DISABLED"),
- SEPARATOR("DD#SEPARATOR")
-}
-
-/**
- * Bootstrap dropdown component.
- *
- * @constructor