Reuben Firmin
12/06/2023, 10:00 PMReuben Firmin
12/06/2023, 10:00 PM@file:JsModule("sortablejs")
@file:JsNonModule
package ah.libs
import org.w3c.dom.Element
@JsName("default")
external object Sortable {
fun create(el: Element, options: SortableOptions)
interface SortableOptions {
val group: String
val animation: Int
val forceFallback: Boolean
val dragClass: String
val ghostClass: String
val easing: String
}
}
Reuben Firmin
12/06/2023, 10:01 PM@OptIn(ExperimentalJsExport::class)
@JsExport
class MyCode {
// ...
fun makeSortable(columnId: String, group: String, dragClass: String, ghostClass: String) {
val element = document.getElementById(columnId)
if (element == null) {
throw Exception("Couldn't find element $columnId")
} else {
val myOptions = object: Sortable.SortableOptions {
override val group = group
override val animation = 100
override val forceFallback = true
override val dragClass = dragClass
override val ghostClass = ghostClass
override val easing = "cubic-bezier(0, 0.55, 0.45, 1)"
}
console.log(myOptions)
Sortable.create(element, myOptions)
console.log("Made element $columnId sortable")
}
}
}
Reuben Firmin
12/06/2023, 10:01 PMhfhbd
12/06/2023, 10:01 PMReuben Firmin
12/06/2023, 10:02 PMhfhbd
12/06/2023, 10:02 PMReuben Firmin
12/06/2023, 10:03 PMReuben Firmin
12/06/2023, 10:04 PMReuben Firmin
12/06/2023, 10:04 PM@OptIn(ExperimentalJsExport::class)
@JsExport
interface SortableOptions {
val group: String
val animation: Int
val forceFallback: Boolean
val dragClass: String
val ghostClass: String
val easing: String
}
Reuben Firmin
12/06/2023, 10:05 PMfun FlowContent.makeSortable(columnId: String, group: String, dragClass: String, ghostClass: String) {
script {
unsafe {
raw("""
window.bundle.makeSortable("$columnId", "$group", "$dragClass", "$ghostClass");
""".trimIndent())
}
}
}
which results in:
<script>window.bundle.makeSortable("kanban_0", "deals_board", "dragClass", "ghostClass");</script>
Reuben Firmin
12/06/2023, 10:19 PMdata class SortableOptions(
@JsName("group")
val group: String,
@JsName("animation")
val animation: Int,
@JsName("forceFallback")
val forceFallback: Boolean,
@JsName("dragClass")
val dragClass: String,
@JsName("ghostClass")
val ghostClass: String,
@JsName("easing")
val easing: String)
Reuben Firmin
12/06/2023, 10:19 PMturansky
12/06/2023, 10:40 PMexternal interface SortableOptions {
var group: String
var animation: Int
var forceFallback: Boolean
var dragClass: String
var ghostClass: String
var easing: String
}
and such initialization
val options: SortableOptions = jso {
this.group = group
animation = 100
forceFallback = true
this.dragClass = dragClass
this.ghostClass = ghostClass
this.easing = "cubic-bezier(0, 0.55, 0.45, 1)"
}
?Reuben Firmin
12/06/2023, 11:06 PMturansky
12/06/2023, 11:33 PMturansky
12/06/2023, 11:35 PMReuben Firmin
12/07/2023, 9:38 AMturansky
12/07/2023, 9:51 AMturansky
12/07/2023, 9:52 AMdependencies {
// platform declaration
implementation("org.jetbrains.kotlin-wrappers:kotlin-js")
}
Reuben Firmin
12/07/2023, 10:11 AMturansky
12/07/2023, 10:16 AMkotlin-browser
, kotlin-web
- latest Browser declarations.
Most classes and members has MDN links.turansky
12/07/2023, 10:18 AMReuben Firmin
12/07/2023, 10:21 AMturansky
12/07/2023, 11:04 AMReuben Firmin
12/07/2023, 11:16 AMturansky
12/07/2023, 3:56 PMReuben Firmin
12/09/2023, 12:26 PM