Fix refresh, update version to 0.1.8

This commit is contained in:
2019-11-15 20:27:47 +01:00
parent 0948edb7ca
commit fb4b7053cc
3 changed files with 26 additions and 29 deletions

View File

@@ -1,5 +1,5 @@
group 'nl.astraeus' group 'nl.astraeus'
version '0.1.7' version '0.1.9-SNAPSHOT'
apply plugin: 'kotlin2js' apply plugin: 'kotlin2js'
apply plugin: 'kotlin-dce-js' apply plugin: 'kotlin-dce-js'
@@ -42,7 +42,6 @@ dependencies {
compile 'org.jetbrains.kotlinx:kotlinx-html-js:0.6.10' compile 'org.jetbrains.kotlinx:kotlinx-html-js:0.6.10'
} }
/*
uploadArchives { uploadArchives {
//println 'user: ' + nexusUsername //println 'user: ' + nexusUsername
repositories { repositories {
@@ -56,7 +55,6 @@ uploadArchives {
} }
} }
} }
*/
compileKotlin2Js { compileKotlin2Js {
kotlinOptions.sourceMap = true kotlinOptions.sourceMap = true

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="komp" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="nl.astraeus" external.system.module.version="0.1.7" type="JAVA_MODULE" version="4"> <module external.linked.project.id="komp" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="nl.astraeus" external.system.module.version="0.1.8" type="JAVA_MODULE" version="4">
<component name="FacetManager"> <component name="FacetManager">
<facet type="kotlin-language" name="Kotlin"> <facet type="kotlin-language" name="Kotlin">
<configuration version="3" platform="JavaScript " allPlatforms="JS []" useProjectSettings="false" pureKotlinSourceFolders="$MODULE_DIR$/src/test/kotlin;/home/rnentjes/Development/komp/komp/src/main/kotlin"> <configuration version="3" platform="JavaScript " allPlatforms="JS []" useProjectSettings="false" pureKotlinSourceFolders="$MODULE_DIR$/src/test/kotlin;/home/rnentjes/Development/komp/komp/src/main/kotlin">

View File

@@ -3,45 +3,43 @@ package nl.astraeus.komp
import kotlinx.html.HtmlBlockTag import kotlinx.html.HtmlBlockTag
import kotlinx.html.TagConsumer import kotlinx.html.TagConsumer
import kotlinx.html.dom.create import kotlinx.html.dom.create
import org.w3c.dom.HTMLDivElement
import org.w3c.dom.HTMLElement import org.w3c.dom.HTMLElement
import org.w3c.dom.Node import org.w3c.dom.Node
import org.w3c.dom.css.CSSStyleDeclaration
import kotlin.browser.document import kotlin.browser.document
fun HtmlBlockTag.include(component: Komponent) { fun HtmlBlockTag.include(component: Komponent) {
component.render(this.consumer as TagConsumer<HTMLElement>) component.element = component.render(this.consumer as TagConsumer<HTMLElement>)
} }
abstract class Komponent { abstract class Komponent {
var element: Node? = null var element: Node? = null
val declaredStyles: MutableMap<String, CSSStyleDeclaration> = HashMap()
open fun create(): HTMLElement { open fun create(): HTMLElement {
val result = render(document.create) val result = render(document.create)
element = result
return result return result
} }
abstract fun render(consumer: TagConsumer<HTMLElement>): HTMLElement abstract fun render(consumer: TagConsumer<HTMLElement>): HTMLElement
open fun declareStyle(className: String, block: CSSStyleDeclaration.() -> Unit) {
val style = (document.createElement("div") as HTMLDivElement).style
block(style)
declaredStyles[className] = style
}
open fun refresh() { open fun refresh() {
if (element == null) {
console.log("Unable to refresh, element == null", this)
}
element?.let { element -> element?.let { element ->
if (logRenderEvent) { if (logRenderEvent) {
console.log("Rendering", this) console.log("Rendering", this)
} }
val oldElement = element
val newElement = create() val newElement = create()
element.parentNode?.replaceChild(newElement, element) if (logReplaceEvent) {
console.log("Replacing", oldElement, newElement)
this.element = newElement }
element.parentNode?.replaceChild(newElement, oldElement)
} }
} }
@@ -49,21 +47,24 @@ abstract class Komponent {
refresh() refresh()
} }
@JsName("remove")
fun remove() {
element?.let {
val parent = it.parentElement ?: throw IllegalArgumentException("Element has no parent!?")
if (logReplaceEvent) {
console.log("Remove", it)
}
parent.removeChild(it)
}
}
companion object { companion object {
var logRenderEvent = false var logRenderEvent = false
var logReplaceEvent = false var logReplaceEvent = false
fun removeElement(element: Node) {
val parent = element.parentElement ?: throw IllegalArgumentException("Element has no parent!?")
if (logReplaceEvent) {
console.log("Remove", element)
}
parent.removeChild(element)
}
fun create(parent: HTMLElement, component: Komponent, insertAsFirst: Boolean = false) { fun create(parent: HTMLElement, component: Komponent, insertAsFirst: Boolean = false) {
val element = component.create() val element = component.create()
@@ -72,8 +73,6 @@ abstract class Komponent {
} else { } else {
parent.appendChild(element) parent.appendChild(element)
} }
component.element = element
} }
} }
} }