aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorRobert Jaros <rjaros@finn.pl>2018-10-08 13:40:04 +0200
committerRobert Jaros <rjaros@finn.pl>2018-10-08 13:40:04 +0200
commit0d3e7c87bf74948f83ce006a1d340b0f3f5e68b0 (patch)
treec86d5d0251da1fa3b208f53d1ca7d634a6cbcc8e /src/main
parent91ae1d02de111f15608e84193c10ed17bea9fe41 (diff)
downloadkvision-0d3e7c87bf74948f83ce006a1d340b0f3f5e68b0.tar.gz
kvision-0d3e7c87bf74948f83ce006a1d340b0f3f5e68b0.tar.bz2
kvision-0d3e7c87bf74948f83ce006a1d340b0f3f5e68b0.zip
Refactoring to modules
Diffstat (limited to 'src/main')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/KVManager.kt203
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/core/StyledComponent.kt8
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/core/Widget.kt6
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/Form.kt18
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt14
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt3
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/AjaxOptions.kt128
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt285
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/SelectInput.kt363
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/SelectOptGroup.kt91
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/select/SelectOption.kt103
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/spinner/Spinner.kt263
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/spinner/SpinnerInput.kt323
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/RichText.kt79
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/text/RichTextInput.kt133
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/time/DateTime.kt246
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/time/DateTimeInput.kt291
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/upload/Upload.kt333
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/form/upload/UploadInput.kt327
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/html/Button.kt2
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/i18n/I18n.kt123
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/i18n/I18nManager.kt96
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/i18n/SimpleI18nManager.kt34
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/types/KDate.kt6
-rw-r--r--src/main/resources/css/paper.css12
-rw-r--r--src/main/resources/js/bootstrap-select-i18n.min.js1
-rw-r--r--src/main/resources/js/bootstrap.config.js64
-rw-r--r--src/main/resources/js/bootstrap.config.less0
28 files changed, 155 insertions, 3400 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/KVManager.kt b/src/main/kotlin/pl/treksoft/kvision/KVManager.kt
index 80279020..de819c98 100644
--- a/src/main/kotlin/pl/treksoft/kvision/KVManager.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/KVManager.kt
@@ -29,13 +29,9 @@ import com.github.snabbdom.datasetModule
import com.github.snabbdom.eventListenersModule
import com.github.snabbdom.propsModule
import com.github.snabbdom.styleModule
-import org.w3c.dom.asList
import pl.treksoft.kvision.core.Component
-import pl.treksoft.kvision.i18n.I18n
import pl.treksoft.kvision.utils.isIE11
-import pl.treksoft.kvision.utils.obj
import kotlin.browser.document
-import kotlin.browser.window
import kotlin.dom.clear
/**
@@ -49,208 +45,18 @@ external fun require(name: String): dynamic
*/
@Suppress("EmptyCatchBlock", "TooGenericExceptionCaught", "LargeClass")
internal object KVManager {
- internal const val AJAX_REQUEST_DELAY = 300
- internal const val KVNULL = "#kvnull"
-
- private val links = document.getElementsByTagName("link")
- private val bootstrapWebpack = try {
- val bootswatch = links.asList().find { it.getAttribute("href")?.contains("bootstrap.min.css") ?: false }
- if (bootswatch != null) {
- if (bootswatch.getAttribute("href")?.contains("/paper/") == true) {
- require("./css/paper.css")
- }
- require("bootstrap-webpack!./js/bootstrap.config.js")
- } else {
- require("bootstrap-webpack")
- }
- } catch (e: Throwable) {
- }
- private val fontAwesomeWebpack = try {
- require("font-awesome-webpack")
- } catch (e: Throwable) {
- }
- private val awesomeBootstrapCheckbox = try {
- require("awesome-bootstrap-checkbox")
- } catch (e: Throwable) {
- }
- private val bootstrapSelectCss = try {
- require("bootstrap-select/dist/css/bootstrap-select.min.css")
- } catch (e: Throwable) {
- }
- private val bootstrapSelect = try {
- require("bootstrap-select/dist/js/bootstrap-select.min.js")
- require("./js/bootstrap-select-i18n.min.js")
- } catch (e: Throwable) {
- }
- private val bootstrapSelectAjaxCss = try {
- require("ajax-bootstrap-select/dist/css/ajax-bootstrap-select.min.css")
- } catch (e: Throwable) {
- }
- private val bootstrapSelectAjax = try {
- require("ajax-bootstrap-select/dist/js/ajax-bootstrap-select.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.de-DE.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.es-ES.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.fr-FR.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.it-IT.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.ja-JP.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.ko-KR.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.nl-NL.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.pl-PL.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.pt-BR.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.ru-RU.min.js")
- require("../../js/js/locales/ajax-bootstrap-select/ajax-bootstrap-select.tr-TR.min.js")
- } catch (e: Throwable) {
- }
- private val trixCss = try {
- require("trix/dist/trix.css")
- } catch (e: Throwable) {
- }
- private val trix = try {
- val trix = require("trix")
- window.asDynamic().Trix = trix
- trix.config.languages = obj {}
- trix.config.languages["en"] = obj {}
- for (key in js("Object").keys(trix.config.lang)) {
- trix.config.languages["en"][key] = trix.config.lang[key]
- }
- val orig = trix.config.toolbar.getDefaultHTML
- trix.config.toolbar.getDefaultHTML = {
- val config = if (trix.config.languages[I18n.language] != undefined) {
- trix.config.languages[I18n.language]
- } else {
- trix.config.languages["en"]
- }
- for (key in js("Object").keys(trix.config.lang)) {
- trix.config.lang[key] = config[key]
- }
- orig()
- }
- require("../../js/js/locales/trix/trix.pl.js")
- } catch (e: Throwable) {
- }
- private val bootstrapDateTimePickerCss = try {
- require("bootstrap-datetime-picker/css/bootstrap-datetimepicker.min.css")
- } catch (e: Throwable) {
- }
- private val bootstrapDateTimePicker = try {
- require("bootstrap-datetime-picker/js/bootstrap-datetimepicker.min.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.ar.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.az.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.bg.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.bn.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.ca.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.cs.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.da.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.de.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.ee.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.el.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.es.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.fi.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.fr.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.he.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.hr.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.hu.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.hy.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.id.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.is.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.it.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.ja.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.ko.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.lt.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.lv.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.nl.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.no.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.pl.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.pt.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.ro.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.rs.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.ru.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.sk.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.sl.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.sv.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.th.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.tr.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.ua.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.uk.js")
- require("../../js/js/locales/bootstrap-datetime-picker/bootstrap-datetimepicker.zh.js")
- } catch (e: Throwable) {
- }
- private val bootstrapTouchspinCss = try {
- require("bootstrap-touchspin/dist/jquery.bootstrap-touchspin.min.css")
- } catch (e: Throwable) {
- }
- private val bootstrapTouchspin = try {
- require("bootstrap-touchspin/dist/jquery.bootstrap-touchspin.min.js")
+ 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 bootstrapFileinputCss = try {
- require("bootstrap-fileinput/css/fileinput.min.css")
- } catch (e: Throwable) {
- }
- private val bootstrapFileinputCssFa = try {
- require("bootstrap-fileinput/themes/explorer-fa/theme.min.css")
- } catch (e: Throwable) {
- }
- private val bootstrapFileinput = try {
- require("bootstrap-fileinput")
- require("../../js/js/locales/bootstrap-fileinput/ar.js")
- require("../../js/js/locales/bootstrap-fileinput/az.js")
- require("../../js/js/locales/bootstrap-fileinput/bg.js")
- require("../../js/js/locales/bootstrap-fileinput/ca.js")
- require("../../js/js/locales/bootstrap-fileinput/cr.js")
- require("../../js/js/locales/bootstrap-fileinput/cs.js")
- require("../../js/js/locales/bootstrap-fileinput/da.js")
- require("../../js/js/locales/bootstrap-fileinput/de.js")
- require("../../js/js/locales/bootstrap-fileinput/el.js")
- require("../../js/js/locales/bootstrap-fileinput/es.js")
- require("../../js/js/locales/bootstrap-fileinput/et.js")
- require("../../js/js/locales/bootstrap-fileinput/fa.js")
- require("../../js/js/locales/bootstrap-fileinput/fi.js")
- require("../../js/js/locales/bootstrap-fileinput/fr.js")
- require("../../js/js/locales/bootstrap-fileinput/gl.js")
- require("../../js/js/locales/bootstrap-fileinput/id.js")
- require("../../js/js/locales/bootstrap-fileinput/it.js")
- require("../../js/js/locales/bootstrap-fileinput/ja.js")
- require("../../js/js/locales/bootstrap-fileinput/ka.js")
- require("../../js/js/locales/bootstrap-fileinput/ko.js")
- require("../../js/js/locales/bootstrap-fileinput/kz.js")
- require("../../js/js/locales/bootstrap-fileinput/lt.js")
- require("../../js/js/locales/bootstrap-fileinput/nl.js")
- require("../../js/js/locales/bootstrap-fileinput/no.js")
- require("../../js/js/locales/bootstrap-fileinput/pl.js")
- require("../../js/js/locales/bootstrap-fileinput/pt.js")
- require("../../js/js/locales/bootstrap-fileinput/ro.js")
- require("../../js/js/locales/bootstrap-fileinput/ru.js")
- require("../../js/js/locales/bootstrap-fileinput/sk.js")
- require("../../js/js/locales/bootstrap-fileinput/sl.js")
- require("../../js/js/locales/bootstrap-fileinput/sv.js")
- require("../../js/js/locales/bootstrap-fileinput/th.js")
- require("../../js/js/locales/bootstrap-fileinput/tr.js")
- require("../../js/js/locales/bootstrap-fileinput/uk.js")
- require("../../js/js/locales/bootstrap-fileinput/vi.js")
- require("../../js/js/locales/bootstrap-fileinput/zh.js")
- } catch (e: Throwable) {
- }
- private val bootstrapFileinputFa = try {
- require("bootstrap-fileinput/themes/explorer-fa/theme.min.js")
- } catch (e: Throwable) {
- }
private val resizable = try {
require("jquery-resizable-dom")
} catch (e: Throwable) {
}
- private val handlebars = try {
- require("handlebars/dist/handlebars.runtime.min.js")
- } catch (e: Throwable) {
- }
- private val jed = try {
- require("jed")
- } catch (e: Throwable) {
- }
internal val fecha = require("fecha")
private val sdPatch = Snabbdom.init(
arrayOf(
@@ -259,7 +65,10 @@ internal object KVManager {
)
)
private val sdVirtualize = require("snabbdom-virtualize/strings").default
- private val styleCss = require("./css/style.css")
+ private val styleCss = try {
+ require("./css/style.css")
+ } catch (e: Throwable) {
+ }
internal fun patch(id: String, vnode: VNode): VNode {
val container = document.getElementById(id)
diff --git a/src/main/kotlin/pl/treksoft/kvision/core/StyledComponent.kt b/src/main/kotlin/pl/treksoft/kvision/core/StyledComponent.kt
index c4ac8295..d54af6f7 100644
--- a/src/main/kotlin/pl/treksoft/kvision/core/StyledComponent.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/core/StyledComponent.kt
@@ -462,13 +462,13 @@ abstract class StyledComponent : Component {
return snstyle
}
- internal fun <T> refreshOnUpdate(refreshFunction: ((T) -> Unit) = { this.refresh() }) =
+ protected fun <T> refreshOnUpdate(refreshFunction: ((T) -> Unit) = { this.refresh() }) =
RefreshDelegateProvider<T>(null, refreshFunction)
- internal fun <T> refreshOnUpdate(initialValue: T, refreshFunction: ((T) -> Unit) = { this.refresh() }) =
+ protected fun <T> refreshOnUpdate(initialValue: T, refreshFunction: ((T) -> Unit) = { this.refresh() }) =
RefreshDelegateProvider(initialValue, refreshFunction)
- internal inner class RefreshDelegateProvider<T>(
+ protected inner class RefreshDelegateProvider<T>(
private val initialValue: T?, private val refreshFunction: (T) -> Unit
) {
operator fun provideDelegate(thisRef: Any?, prop: KProperty<*>): RefreshDelegate<T> {
@@ -477,7 +477,7 @@ abstract class StyledComponent : Component {
}
}
- internal inner class RefreshDelegate<T>(private val refreshFunction: ((T) -> Unit)) {
+ protected inner class RefreshDelegate<T>(private val refreshFunction: ((T) -> Unit)) {
@Suppress("UNCHECKED_CAST")
operator fun getValue(thisRef: StyledComponent, property: KProperty<*>): T {
val value = propertyValues[property.name]
diff --git a/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt b/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
index e7b94cba..52f60813 100644
--- a/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
@@ -84,9 +84,9 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent() {
*/
var draggable: Boolean? by refreshOnUpdate()
- internal var surroundingSpan by refreshOnUpdate(false)
+ protected var surroundingSpan by refreshOnUpdate(false)
- internal var eventTarget: Widget? = null
+ var eventTarget: Widget? = null
private var vnode: VNode? = null
@@ -602,7 +602,7 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent() {
}
}
- internal open fun dispatchEvent(type: String, eventInitDict: CustomEventInit): Boolean? {
+ protected open fun dispatchEvent(type: String, eventInitDict: CustomEventInit): Boolean? {
val event = org.w3c.dom.CustomEvent(type, eventInitDict)
return this.getElement()?.dispatchEvent(event)
}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/Form.kt b/src/main/kotlin/pl/treksoft/kvision/form/Form.kt
index 323d0e1e..b45eed60 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/Form.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/Form.kt
@@ -26,11 +26,9 @@ import kotlinx.serialization.Mapper
import kotlinx.serialization.decode
import kotlinx.serialization.json.JSON
import kotlinx.serialization.serializer
-import pl.treksoft.kvision.form.upload.Upload
import pl.treksoft.kvision.i18n.I18n.trans
import pl.treksoft.kvision.types.KDate
import pl.treksoft.kvision.types.KFile
-import pl.treksoft.kvision.utils.getContent
import kotlin.js.Json
import kotlin.reflect.KProperty1
@@ -255,22 +253,6 @@ class Form<K : Any>(private val panel: FormPanel<K>? = null, private val seriali
}
/**
- * Returns file with the content read.
- * @param key key identifier of the control
- * @param kFile object identifying the file
- * @return KFile object
- */
- @Suppress("EXPERIMENTAL_FEATURE_WARNING")
- suspend fun getContent(
- key: KProperty1<K, List<KFile>?>,
- kFile: KFile
- ): KFile {
- val control = getControl(key) as Upload
- val content = control.getNativeFile(kFile)?.getContent()
- return kFile.copy(content = content)
- }
-
- /**
* Returns current data model as JSON.
* @return data model as JSON
*/
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt b/src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt
index a013c076..3811ed82 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/FormPanel.kt
@@ -375,20 +375,6 @@ open class FormPanel<K : Any>(
}
/**
- * Returns an object with the content of the file.
- * @param key key identifier of the control
- * @param kFile object identifying the file
- * @return KFile object
- */
- @Suppress("EXPERIMENTAL_FEATURE_WARNING")
- suspend fun getContent(
- key: KProperty1<K, List<KFile>?>,
- kFile: KFile
- ): KFile {
- return form.getContent(key, kFile)
- }
-
- /**
* Returns current data model as JSON.
* @return data model as JSON
*/
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt b/src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt
index b4ed127a..fdc1e3af 100644
--- a/src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/form/check/RadioGroup.kt
@@ -28,7 +28,6 @@ import pl.treksoft.kvision.form.FieldLabel
import pl.treksoft.kvision.form.HelpBlock
import pl.treksoft.kvision.form.InputSize
import pl.treksoft.kvision.form.StringFormControl
-import pl.treksoft.kvision.form.select.Select
import pl.treksoft.kvision.panel.SimplePanel
/**
@@ -99,7 +98,7 @@ open class RadioGroup(
setSizeToChildren(value)
}
- private val idc = "kv_form_radiogroup_" + Select.counter
+ private val idc = "kv_form_radiogroup_$counter"
final override val input = CheckInput()
final override val flabel: FieldLabel = FieldLabel(idc, label, rich)
final override val validationInfo: HelpBlock = HelpBlock().apply { visible = false }
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/select/AjaxOptions.kt b/src/main/kotlin/pl/treksoft/kvision/form/select/AjaxOptions.kt
deleted file mode 100644
index d802a111..00000000
--- a/src/main/kotlin/pl/treksoft/kvision/form/select/AjaxOptions.kt
+++ /dev/null
@@ -1,128 +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.form.select
-
-import pl.treksoft.jquery.JQueryXHR
-import pl.treksoft.kvision.KVManager.AJAX_REQUEST_DELAY
-import pl.treksoft.kvision.KVManager.KVNULL
-import pl.treksoft.kvision.i18n.I18n
-import pl.treksoft.kvision.utils.obj
-
-/**
- * HTTP protocol type for the AJAX call.
- */
-enum class HttpType(internal val type: String) {
- GET("GET"),
- POST("POST")
-}
-
-/**
- * Data type for the AJAX call.
- */
-enum class DataType(internal val type: String) {
- JSON("json"),
- JSONP("jsonp"),
- XML("xml"),
- TEXT("text"),
- SCRIPT("script")
-}
-
-/**
- * Data class for AJAX options.
- *
- * @constructor
- * @param url the url address
- * @param preprocessData
- * [AjaxBootstrapSelect preprocessOption](https://github.com/truckingsim/Ajax-Bootstrap-Select#optionspreprocessdata)
- * option
- * @param beforeSend
- * [JQuery ajax.beforeSend](http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings) option
- * @param data
- * [JQuery ajax.data](http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings) option
- * @param httpType
- * [JQuery ajax.type](http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings) option
- * @param minLength
- * [AjaxBootstrapSelect minLength](https://github.com/truckingsim/Ajax-Bootstrap-Select#optionsminlength) option
- * @param cache
- * [AjaxBootstrapSelect cache](https://github.com/truckingsim/Ajax-Bootstrap-Select#optionscache) option
- * @param clearOnEmpty
- * [AjaxBootstrapSelect clearOnEmpty](https://github.com/truckingsim/Ajax-Bootstrap-Select#optionsclearonempty) option
- * @param clearOnError
- * [AjaxBootstrapSelect clearOnError](https://github.com/truckingsim/Ajax-Bootstrap-Select#optionsclearonerror) option
- * @param emptyRequest
- * [AjaxBootstrapSelect emptyRequest](https://github.com/truckingsim/Ajax-Bootstrap-Select#optionsemptyrequest) option
- * @param requestDelay
- * [AjaxBootstrapSelect requestDelay](https://github.com/truckingsim/Ajax-Bootstrap-Select#optionsrequestdelay) option
- * @param restoreOnError
- * [AjaxBootstrapSelect restoreOnError](https://github.com/truckingsim/Ajax-Bootstrap-Select#optionsrestoreonerror)
- * option
- */
-data class AjaxOptions(
- val url: String, val preprocessData: (dynamic) -> dynamic, val beforeSend: ((JQueryXHR) -> dynamic)? = null,
- val data: dynamic = null, val httpType: HttpType = HttpType.GET,
- val dataType: DataType = DataType.JSON, val minLength: Int = 0,
- val cache: Boolean = true, val clearOnEmpty: Boolean = true, val clearOnError: Boolean = true,
- val emptyRequest: Boolean = false,
- val requestDelay: Int = AJAX_REQUEST_DELAY, val restoreOnError: Boolean = false
-)
-
-/**
- * Convert AjaxOptions to JavaScript JSON object.
- * @param emptyOption add an empty position as the first select option
- * @return JSON object
- */
-fun AjaxOptions.toJs(emptyOption: Boolean): dynamic {
- val procData = { data: dynamic ->
- val processedData = this.preprocessData(data)
- if (emptyOption) {
- val ret = mutableListOf(obj {
- this.value = KVNULL
- this.text = ""
- })
- @Suppress("UnsafeCastFromDynamic")
- ret.addAll((processedData as Array<dynamic>).asList())
- ret.toTypedArray()
- } else {
- processedData
- }
- }
- val language = I18n.language
- return obj {
- this.ajax = obj {
- this.url = url
- this.type = httpType.type
- this.dataType = dataType.type
- this.data = data
- this.beforeSend = beforeSend
- }
- this.preprocessData = procData
- this.minLength = minLength
- this.cache = cache
- this.clearOnEmpty = clearOnEmpty
- this.clearOnError = clearOnError
- this.emptyRequest = emptyRequest
- this.preserveSelected = false
- this.requestDelay = requestDelay
- this.restoreOnError = restoreOnError
- this.langCode = language
- }
-}
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt b/src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt
deleted file mode 100644
index f19081e1..00000000
--- a/src/main/kotlin/pl/treksoft/kvision/form/select/Select.kt
+++ /dev/null
@@ -1,285 +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.form.select
-
-import pl.treksoft.kvision.core.Component
-import pl.treksoft.kvision.core.Container
-import pl.treksoft.kvision.core.StringBoolPair
-import pl.treksoft.kvision.core.StringPair
-import pl.treksoft.kvision.core.Widget
-import pl.treksoft.kvision.form.FieldLabel
-import pl.treksoft.kvision.form.HelpBlock
-import pl.treksoft.kvision.form.StringFormControl
-import pl.treksoft.kvision.panel.SimplePanel
-import pl.treksoft.kvision.utils.SnOn
-
-/**
- * The form field component for Select control.
- *
- * The select control can be populated directly from *options* parameter or manually by adding
- * [SelectOption] or [SelectOptGroup] components to the container.
- *
- * @constructor
- * @param options an optional list of options (label to value pairs) for the select control
- * @param value selected value
- * @param name the name attribute of the generated HTML input element
- * @param multiple allows multiple value selection (multiple values are comma delimited)
- * @param ajaxOptions additional options for remote (AJAX) data source
- * @param label label text bound to the input element
- * @param rich determines if [label] can contain HTML code
- */
-@Suppress("TooManyFunctions")
-open class Select(
- options: List<StringPair>? = null, value: String? = null, name: String? = null,
- multiple: Boolean = false, ajaxOptions: AjaxOptions? = null, label: String? = null,
- rich: Boolean = false
-) : SimplePanel(setOf("form-group")), StringFormControl {
-
- /**
- * A list of options (label to value pairs) for the select control.
- */
- var options
- get() = input.options
- set(value) {
- input.options = value
- }
- /**
- * A value of the selected option.
- */
- override var value
- get() = input.value
- set(value) {
- input.value = value
- }
- /**
- * Determines if multiple value selection is allowed.
- */
- var multiple
- get() = input.multiple
- set(value) {
- input.multiple = value
- }
- /**
- * Additional options for remote (AJAX) data source.
- */
- var ajaxOptions
- get() = input.ajaxOptions
- set(value) {
- input.ajaxOptions = value
- }
- /**
- * Maximal number of selected options.
- */
- var maxOptions
- get() = input.maxOptions
- set(value) {
- input.maxOptions = value
- }
- /**
- * Determines if live search is available.
- */
- var liveSearch
- get() = input.liveSearch
- set(value) {
- input.liveSearch = value
- }
- /**
- * The placeholder for the select control.
- */
- var placeholder
- get() = input.placeholder
- set(value) {
- input.placeholder = value
- }
- /**
- * The style of the select control.
- */
- var style
- get() = input.style
- set(value) {
- input.style = value
- }
- /**
- * The width of the select control.
- */
- var selectWidth
- get() = input.selectWidth
- set(value) {
- input.selectWidth = value
- }
- /**
- * The width type of the select control.
- */
- var selectWidthType
- get() = input.selectWidthType
- set(value) {
- input.selectWidthType = value
- }
- /**
- * Determines