complete main part

This commit is contained in:
InsanusMokrassar 2021-03-02 13:44:33 +06:00
parent 0c8eef971a
commit 881d268ea9
2 changed files with 72 additions and 5 deletions

View File

@ -1,16 +1,82 @@
package dev.inmo.kmppscriptbuilder.web 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 dev.inmo.kmppscriptbuilder.web.views.*
import kotlinx.browser.document 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() { fun main() {
document.addEventListener( document.addEventListener(
"DOMContentLoaded", "DOMContentLoaded",
{ {
val builderView = BuilderView() val builderView = BuilderView()
document.body ?.onclick = {
println(builderView.config) (document.getElementById("openConfig") as HTMLElement).onclick = {
Unit 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
} }
} }
) )

View File

@ -13,8 +13,9 @@
</div> </div>
<div class="uk-navbar-right"> <div class="uk-navbar-right">
<ul class="uk-navbar-nav"> <ul class="uk-navbar-nav">
<li uk-tooltip="title: Open file"><a href="#"><span uk-icon="icon: pull"></span></a></li><!--Open file--> <li uk-tooltip="title: Open config" id="openConfig"><a href="#"><span uk-icon="icon: pull"></span></a></li><!--Open file-->
<li uk-tooltip="title: Save file"><a href="#"><span uk-icon="icon: push"></span></a></li><!--Save file--> <li uk-tooltip="title: Save config" id="saveConfig"><a href="#"><span uk-icon="icon: push"></span></a></li><!--Save file-->
<li uk-tooltip="title: Export script" id="exportScript"><a href="#"><span uk-icon="icon: upload"></span></a></li><!--Save file-->
</ul> </ul>
</div> </div>
</nav> </nav>