Fix refresh, update version to 0.1.8
This commit is contained in:
@@ -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
|
||||||
|
|||||||
2
komp.iml
2
komp.iml
@@ -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">
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user