diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/Application.kt | 6 | ||||
-rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/HMR.kt | 19 | ||||
-rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/MainApplication.kt | 11 | ||||
-rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/main.kt | 40 | ||||
-rw-r--r-- | src/test/kotlin/test/TestMainApplication.kt | 8 |
5 files changed, 84 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 + } +} + diff --git a/src/test/kotlin/test/TestMainApplication.kt b/src/test/kotlin/test/TestMainApplication.kt new file mode 100644 index 00000000..0f8824f7 --- /dev/null +++ b/src/test/kotlin/test/TestMainApplication.kt @@ -0,0 +1,8 @@ +package test + +import org.junit.* +import kotlin.test.* +import pl.treksoft.kvision.* + +class TestMainApplication { +}
\ No newline at end of file |