From 5f7fde44c6435cf64774c73d6cc1101171558678 Mon Sep 17 00:00:00 2001 From: rnentjes Date: Thu, 3 Mar 2022 14:28:13 +0100 Subject: [PATCH 1/4] Version 1.0.6 - Fix attr vs property checkbox update --- build.gradle.kts | 2 +- .../kotlin/nl/astraeus/komp/HtmlBuilder.kt | 17 ++--------------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1f9e344..b5b5683 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "nl.astraeus" -version = "1.0.5" +version = "1.0.6" repositories { mavenCentral() diff --git a/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt b/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt index 98c5ea8..88668fd 100644 --- a/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt +++ b/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt @@ -188,6 +188,7 @@ class HtmlBuilder( if (Komponent.updateMode.isUpdate) { currentElement?.clearKompEvents() + (currentElement as? HTMLInputElement)?.checked = false } currentPosition.lastOrNull()?.setAttr?.clear() @@ -272,21 +273,7 @@ class HtmlBuilder( !setAttrs.contains(attr) && attr != "style" ) { - if (element is HTMLInputElement) { - when (attr) { - "checked" -> { - element.checked = false - } - "value" -> { - element.value = "" - } - else -> { - element.removeAttribute(attr) - } - } - } else { - element.removeAttribute(attr) - } + element.setKompAttribute(attr, null) } } } From 1b93c54cf46859fed044c337e62b006e82899606 Mon Sep 17 00:00:00 2001 From: rnentjes Date: Wed, 10 Aug 2022 20:53:06 +0200 Subject: [PATCH 2/4] Fixes --- build.gradle.kts | 2 +- .../nl/astraeus/komp/ElementExtentions.kt | 4 +-- .../kotlin/nl/astraeus/komp/HtmlBuilder.kt | 27 ++++++------------- .../kotlin/nl/astraeus/komp/Komponent.kt | 11 +------- 4 files changed, 11 insertions(+), 33 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b5b5683..1a69f7e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "nl.astraeus" -version = "1.0.6" +version = "1.0.7-SNAPSHOT" repositories { mavenCentral() diff --git a/src/jsMain/kotlin/nl/astraeus/komp/ElementExtentions.kt b/src/jsMain/kotlin/nl/astraeus/komp/ElementExtentions.kt index 340314d..2fc7d49 100644 --- a/src/jsMain/kotlin/nl/astraeus/komp/ElementExtentions.kt +++ b/src/jsMain/kotlin/nl/astraeus/komp/ElementExtentions.kt @@ -127,9 +127,7 @@ internal fun Element.setKompEvent(name: String, event: (Event) -> Unit) { name } - if (Komponent.updateMode.isUpdate) { - getKompEvents()[eventName] = event - } + getKompEvents()[eventName] = event this.addEventListener(eventName, event) } diff --git a/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt b/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt index 88668fd..a363bbb 100644 --- a/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt +++ b/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt @@ -1,5 +1,3 @@ -@file:OptIn(ExperimentalStdlibApi::class) - package nl.astraeus.komp import kotlinx.browser.document @@ -55,7 +53,7 @@ private fun ArrayList.currentPosition(): ElementIndex? { return if (this.size < 2) { null } else { - this[this.size-2] + this[this.size - 2] } } @@ -157,13 +155,10 @@ class HtmlBuilder( //logReplace"onTagStart, currentElement1.1: $currentNode") currentPosition.currentParent().appendChild(currentNode!!) } else if ( - Komponent.updateMode.isReplace || + !currentNode?.asElement()?.tagName.equals(tag.tagName, true) || ( - !currentNode?.asElement()?.tagName.equals(tag.tagName, true) || - ( - tag.namespace != null && - !currentNode?.asElement()?.namespaceURI.equals(tag.namespace, true) - ) + tag.namespace != null && + !currentNode?.asElement()?.namespaceURI.equals(tag.namespace, true) ) ) { logReplace { "onTagStart, currentElement, namespace: ${currentNode?.asElement()?.namespaceURI} -> ${tag.namespace}" } @@ -186,22 +181,16 @@ class HtmlBuilder( root = currentNode as Element } - if (Komponent.updateMode.isUpdate) { - currentElement?.clearKompEvents() - (currentElement as? HTMLInputElement)?.checked = false - } + currentElement?.clearKompEvents() + (currentElement as? HTMLInputElement)?.checked = false currentPosition.lastOrNull()?.setAttr?.clear() + + // if currentElement = checkbox make sure it's cleared for (entry in tag.attributesEntries) { currentElement!!.setKompAttribute(entry.key, entry.value) currentPosition.lastOrNull()?.setAttr?.add(entry.key) } - - if (tag.namespace != null && Komponent.updateMode.isReplace) { - //logReplace"onTagStart, same node type") - - (currentNode as? Element)?.innerHTML = "" - } } currentPosition.push(currentNode!!) diff --git a/src/jsMain/kotlin/nl/astraeus/komp/Komponent.kt b/src/jsMain/kotlin/nl/astraeus/komp/Komponent.kt index f52bf4c..56f1e43 100644 --- a/src/jsMain/kotlin/nl/astraeus/komp/Komponent.kt +++ b/src/jsMain/kotlin/nl/astraeus/komp/Komponent.kt @@ -7,6 +7,7 @@ import org.w3c.dom.HTMLElement import org.w3c.dom.get private var currentKomponent: Komponent? = null + fun FlowOrMetaDataOrPhrasingContent.currentKomponent(): Komponent = currentKomponent ?: error("No current komponent defined! Only call from render code!") @@ -16,15 +17,6 @@ enum class UnsafeMode { UNSAFE_SVG_ONLY } -enum class UpdateMode { - REPLACE, - UPDATE, - ; - - val isReplace: Boolean get() { return this == REPLACE } - val isUpdate: Boolean get() { return this == UPDATE } -} - var Element.memoizeHash: String? get() { return getAttribute("memoize-hash") @@ -185,7 +177,6 @@ abstract class Komponent { var logRenderEvent = false var logReplaceEvent = false var enableAssertions = false - var updateMode = UpdateMode.UPDATE var unsafeMode = UnsafeMode.UNSAFE_DISABLED fun create(parent: HTMLElement, component: Komponent) { From 981bceacfb69065237953e52f7a5d2ba472d660f Mon Sep 17 00:00:00 2001 From: rnentjes Date: Fri, 14 Oct 2022 16:51:06 +0200 Subject: [PATCH 3/4] v. 1.0.7 upgrade to Kotlin 1.7.20 --- build.gradle.kts | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../kotlin/nl/astraeus/komp/HtmlBuilder.kt | 44 ++++++++++++++----- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1a69f7e..df10d06 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,12 +1,12 @@ plugins { - kotlin("multiplatform") version "1.6.10" + kotlin("multiplatform") version "1.7.20" `maven-publish` signing id("org.jetbrains.dokka") version "1.5.31" } group = "nl.astraeus" -version = "1.0.7-SNAPSHOT" +version = "1.0.7" repositories { mavenCentral() diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 191b356..982aaee 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Wed Mar 04 13:29:12 CET 2020 -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt b/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt index a363bbb..e8bb905 100644 --- a/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt +++ b/src/jsMain/kotlin/nl/astraeus/komp/HtmlBuilder.kt @@ -74,7 +74,10 @@ private fun ArrayList.push(element: Node) { private fun ArrayList.replace(new: Node) { if (this.currentElement() != null) { - this.currentElement()?.parentElement?.replaceChild(new, this.currentElement()!!) + this.currentElement()?.parentElement?.replaceChild( + new, + this.currentElement()!! + ) } else { this.last().parent.appendChild(new) } @@ -104,7 +107,9 @@ class HtmlBuilder( ) { currentPosition.replace(komponent.element!!) if (Komponent.logRenderEvent) { - console.log("Skipped include $komponent, memoize hasn't changed") + console.log( + "Skipped include $komponent, memoize hasn't changed" + ) } } else { komponent.create( @@ -140,7 +145,9 @@ class HtmlBuilder( } override fun onTagStart(tag: Tag) { - logReplace { "onTagStart, [${tag.tagName}, ${tag.namespace}], currentPosition: $currentPosition" } + logReplace { + "onTagStart, [${tag.tagName}, ${tag.namespace}], currentPosition: $currentPosition" + } currentNode = currentPosition.currentElement() @@ -161,8 +168,12 @@ class HtmlBuilder( !currentNode?.asElement()?.namespaceURI.equals(tag.namespace, true) ) ) { - logReplace { "onTagStart, currentElement, namespace: ${currentNode?.asElement()?.namespaceURI} -> ${tag.namespace}" } - logReplace { "onTagStart, currentElement, replace: ${currentNode?.asElement()?.tagName} -> ${tag.tagName}" } + logReplace { + "onTagStart, currentElement, namespace: ${currentNode?.asElement()?.namespaceURI} -> ${tag.namespace}" + } + logReplace { + "onTagStart, currentElement, replace: ${currentNode?.asElement()?.tagName} -> ${tag.tagName}" + } currentNode = if (tag.namespace != null) { document.createElementNS(tag.namespace, tag.tagName) @@ -207,7 +218,11 @@ class HtmlBuilder( } } - override fun onTagAttributeChange(tag: Tag, attribute: String, value: String?) { + override fun onTagAttributeChange( + tag: Tag, + attribute: String, + value: String? + ) { logReplace { "onTagAttributeChange, ${tag.tagName} [$attribute, $value]" } if (Komponent.enableAssertions) { @@ -222,14 +237,18 @@ class HtmlBuilder( } } - override fun onTagEvent(tag: Tag, event: String, value: (Event) -> Unit) { + override fun onTagEvent( + tag: Tag, + event: String, + value: (Event) -> Unit + ) { logReplace { "onTagEvent, ${tag.tagName} [$event, $value]" } if (Komponent.enableAssertions) { checkTag(tag) } - currentElement?.setKompEvent(event.lowercase(), value) + currentElement?.setKompEvent(event.toLowerCase(), value) } override fun onTagEnd(tag: Tag) { @@ -347,7 +366,10 @@ class HtmlBuilder( //logReplace"onTagContentUnsafe, namespace: [$namespace]") if (Komponent.unsafeMode == UnsafeMode.UNSAFE_ALLOWED || - (Komponent.unsafeMode == UnsafeMode.UNSAFE_SVG_ONLY && namespace == "http://www.w3.org/2000/svg") + ( + Komponent.unsafeMode == UnsafeMode.UNSAFE_SVG_ONLY && + namespace == "http://www.w3.org/2000/svg" + ) ) { if (currentElement?.innerHTML != textContent) { currentElement?.innerHTML += textContent @@ -413,7 +435,9 @@ class HtmlBuilder( override fun finalize(): Element { //logReplace"finalize, currentPosition: $currentPosition") - return root ?: throw IllegalStateException("We can't finalize as there was no tags") + return root ?: throw IllegalStateException( + "We can't finalize as there was no tags" + ) } companion object { From ccc07a354574257f4f559bd3d2672c7cf54ee859 Mon Sep 17 00:00:00 2001 From: rnentjes Date: Fri, 14 Oct 2022 16:55:49 +0200 Subject: [PATCH 4/4] v. 1.0.8-SNAPSHOT --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index df10d06..1aae08a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "nl.astraeus" -version = "1.0.7" +version = "1.0.8-SNAPSHOT" repositories { mavenCentral()