package pl.treksoft.kvision.utils import com.github.snabbdom.Attrs import com.github.snabbdom.Classes import com.github.snabbdom.Hooks import com.github.snabbdom.On import com.github.snabbdom.Props import com.github.snabbdom.VNodeData import com.github.snabbdom.VNodeStyle import org.w3c.dom.CustomEvent import org.w3c.dom.CustomEventInit import pl.treksoft.jquery.JQueryEventObject import pl.treksoft.kvision.core.StringBoolPair import pl.treksoft.kvision.core.StringPair import pl.treksoft.kvision.core.Widget external class Object fun obj(init: dynamic.() -> Unit): dynamic { return (Object()).apply(init) } @Suppress("UnsafeCastFromDynamic") private fun vNodeData(): VNodeData = js("({})") interface KvJQueryEventObject : JQueryEventObject { val clickedIndex: Int } @Suppress("UnsafeCastFromDynamic") class KvEvent(type: String, eventInitDict: CustomEventInit) : CustomEvent(type, eventInitDict) { override val detail: KvJQueryEventObject = obj {} } interface BtOn : On { var showBsDropdown: ((KvEvent) -> kotlin.Unit)? var shownBsDropdown: ((KvEvent) -> kotlin.Unit)? var hideBsDropdown: ((KvEvent) -> kotlin.Unit)? var hiddenBsDropdown: ((KvEvent) -> kotlin.Unit)? var showBsModal: ((KvEvent) -> kotlin.Unit)? var shownBsModal: ((KvEvent) -> kotlin.Unit)? var hideBsModal: ((KvEvent) -> kotlin.Unit)? var hiddenBsModal: ((KvEvent) -> kotlin.Unit)? var dragSplitPanel: ((KvEvent) -> kotlin.Unit)? var dragEndSplitPanel: ((KvEvent) -> kotlin.Unit)? var showBsSelect: ((KvEvent) -> kotlin.Unit)? var shownBsSelect: ((KvEvent) -> kotlin.Unit)? var hideBsSelect: ((KvEvent) -> kotlin.Unit)? var hiddenBsSelect: ((KvEvent) -> kotlin.Unit)? var loadedBsSelect: ((KvEvent) -> kotlin.Unit)? var renderedBsSelect: ((KvEvent) -> kotlin.Unit)? var refreshedBsSelect: ((KvEvent) -> kotlin.Unit)? var changedBsSelect: ((KvEvent) -> kotlin.Unit)? var changeDate: ((KvEvent) -> kotlin.Unit)? var showBsDateTime: ((KvEvent) -> kotlin.Unit)? var hideBsDateTime: ((KvEvent) -> kotlin.Unit)? var onMinBsSpinner: ((KvEvent) -> kotlin.Unit)? var onMaxBsSpinner: ((KvEvent) -> kotlin.Unit)? var updateModel: ((KvEvent) -> kotlin.Unit)? } interface SnOn : BtOn { var self: T } fun snOpt(block: VNodeData.() -> Unit) = (vNodeData()::apply)(block) @Suppress("UnsafeCastFromDynamic") internal fun on(widget: Widget): SnOn { val obj = js("({})") obj["self"] = widget return obj } @Suppress("UnsafeCastFromDynamic") internal fun hooks(): Hooks { return js("({})") } @Suppress("UnsafeCastFromDynamic") fun snStyle(pairs: List): VNodeStyle { return obj { pairs.forEach { (key, value) -> this[key] = value } } } @Suppress("UnsafeCastFromDynamic") fun snProps(pairs: List): Props { return obj { pairs.forEach { (key, value) -> this[key] = value } } } @Suppress("UnsafeCastFromDynamic") fun snClasses(pairs: List): Classes { return obj { pairs.forEach { (key, value) -> this[key] = value } } } @Suppress("UnsafeCastFromDynamic") fun snAttrs(pairs: List): Attrs { return obj { pairs.forEach { (key, value) -> this[key] = value } } }