diff --git a/web/src/jsMain/kotlin/dev/inmo/kmppscriptbuilder/web/main.kt b/web/src/jsMain/kotlin/dev/inmo/kmppscriptbuilder/web/main.kt index 2f6822d..36e52f8 100644 --- a/web/src/jsMain/kotlin/dev/inmo/kmppscriptbuilder/web/main.kt +++ b/web/src/jsMain/kotlin/dev/inmo/kmppscriptbuilder/web/main.kt @@ -1,16 +1,82 @@ package dev.inmo.kmppscriptbuilder.web +import dev.inmo.kmppscriptbuilder.core.models.Config +import dev.inmo.kmppscriptbuilder.core.utils.serialFormat import dev.inmo.kmppscriptbuilder.web.views.* import kotlinx.browser.document +import kotlinx.dom.appendElement +import org.w3c.dom.* +import org.w3c.dom.url.URL +import org.w3c.files.* + +fun saveFile(content: String, filename: String) { + val a = document.body!!.appendElement("a") { + setAttribute("style", "visibility:hidden; display: none") + } as HTMLAnchorElement + val blob = Blob(arrayOf(content), BlobPropertyBag( + "text/plain;charset=utf-8" + )) + val url = URL.createObjectURL(blob) + a.href = url + a.download = filename + a.target = "_blank" + a.click() + URL.revokeObjectURL(url) + a.remove() +} fun main() { document.addEventListener( "DOMContentLoaded", { val builderView = BuilderView() - document.body ?.onclick = { - println(builderView.config) - Unit + + (document.getElementById("openConfig") as HTMLElement).onclick = { + val targetInput = document.body!!.appendElement("input") { + setAttribute("style", "visibility:hidden; display: none") + } as HTMLInputElement + targetInput.type = "file" + targetInput.onchange = { + targetInput.files ?.also { files -> + for (i in (0 until files.length) ) { + files[i] ?.also { file -> + val reader = FileReader() + + reader.onload = { + val content = it.target.asDynamic().result as String + builderView.config = serialFormat.decodeFromString(Config.serializer(), content) + false + } + + reader.readAsText(file) + } + } + } + } + targetInput.click() + targetInput.remove() + false + } + (document.getElementById("saveConfig") as HTMLElement).onclick = { + val filename = "publish.kpsb" + val content = serialFormat.encodeToString(Config.serializer(), builderView.config) + + saveFile(content, filename) + + false + } + (document.getElementById("exportScript") as HTMLElement).onclick = { + val filename = "publish.gradle" + + val content = builderView.config.run { + type.buildMavenGradleConfig( + mavenConfig, + licenses + ) + } + + saveFile(content, filename) + false } } ) diff --git a/web/src/jsMain/resources/index.html b/web/src/jsMain/resources/index.html index 3f798e4..4f3a5ea 100644 --- a/web/src/jsMain/resources/index.html +++ b/web/src/jsMain/resources/index.html @@ -13,8 +13,9 @@