aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/pl/treksoft
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/pl/treksoft')
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/Application.kt6
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/HMR.kt19
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/MainApplication.kt11
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/main.kt40
4 files changed, 76 insertions, 0 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/Application.kt b/src/main/kotlin/pl/treksoft/kvision/Application.kt
new file mode 100644
index 00000000..a7b3d465
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/Application.kt
@@ -0,0 +1,6 @@
+package pl.treksoft.kvision
+
+abstract class ApplicationBase {
+ abstract fun start(state: Map<String, Any>)
+ abstract fun dispose(): Map<String, Any>
+} \ No newline at end of file
diff --git a/src/main/kotlin/pl/treksoft/kvision/HMR.kt b/src/main/kotlin/pl/treksoft/kvision/HMR.kt
new file mode 100644
index 00000000..1251c187
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/HMR.kt
@@ -0,0 +1,19 @@
+package pl.treksoft.kvision
+
+external val module: Module
+
+external interface Module {
+ val hot: Hot?
+}
+
+external interface Hot {
+ val data: dynamic
+
+ fun accept()
+ fun accept(dependency: String, callback: () -> Unit)
+ fun accept(dependencies: Array<String>, callback: (updated: Array<String>) -> Unit)
+
+ fun dispose(callback: (data: dynamic) -> Unit)
+}
+
+external fun require(name: String): dynamic \ No newline at end of file
diff --git a/src/main/kotlin/pl/treksoft/kvision/MainApplication.kt b/src/main/kotlin/pl/treksoft/kvision/MainApplication.kt
new file mode 100644
index 00000000..92bcca53
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/MainApplication.kt
@@ -0,0 +1,11 @@
+package pl.treksoft.kvision
+
+import kotlin.browser.*
+
+class MainApplication : ApplicationBase() {
+
+ override fun start(state: Map<String, Any>) {
+ }
+
+ override fun dispose() = mapOf<String, Any>()
+} \ No newline at end of file
diff --git a/src/main/kotlin/pl/treksoft/kvision/main.kt b/src/main/kotlin/pl/treksoft/kvision/main.kt
new file mode 100644
index 00000000..01ce118f
--- /dev/null
+++ b/src/main/kotlin/pl/treksoft/kvision/main.kt
@@ -0,0 +1,40 @@
+package pl.treksoft.kvision
+
+import kotlin.browser.*
+import kotlin.dom.*
+
+fun main(args: Array<String>) {
+ var application: ApplicationBase? = null
+
+ val state: dynamic = module.hot?.let { hot ->
+ hot.accept()
+
+ hot.dispose { data ->
+ data.appState = application?.dispose()
+ application = null
+ }
+
+ hot.data
+ }
+
+ if (document.body != null) {
+ application = start(state)
+ } else {
+ application = null
+ document.addEventListener("DOMContentLoaded", { application = start(state) })
+ }
+}
+
+fun start(state: dynamic): ApplicationBase? {
+ if (document.body?.hasClass("kvision") ?: false) {
+ val application = MainApplication()
+
+ @Suppress("UnsafeCastFromDynamic")
+ application.start(state?.appState ?: emptyMap())
+
+ return application
+ } else {
+ return null
+ }
+}
+