Bump version to 1.2.10, simplify attribute and event handling in ElementExtensions, and remove deprecated logic in HtmlBuilder.
Some checks failed
Gradle CI / build (push) Has been cancelled
Some checks failed
Gradle CI / build (push) Has been cancelled
This commit is contained in:
@@ -40,14 +40,6 @@ fun Element.printTree(indent: Int = 0): String {
|
||||
}
|
||||
result.append(") {")
|
||||
result.append("\n")
|
||||
for ((name, event) in getKompEvents()) {
|
||||
result.append(indent.asSpaces())
|
||||
result.append("on")
|
||||
result.append(name)
|
||||
result.append(" -> ")
|
||||
result.append(event)
|
||||
result.append("\n")
|
||||
}
|
||||
for (index in 0 until childNodes.length) {
|
||||
childNodes[index]?.let {
|
||||
if (it is Element) {
|
||||
@@ -65,55 +57,52 @@ fun Element.printTree(indent: Int = 0): String {
|
||||
return result.toString()
|
||||
}
|
||||
|
||||
internal fun Element.setKompAttribute(attributeName: String, value: String?) {
|
||||
//val attributeName = name.lowercase()
|
||||
if (value == null || value.isBlank()) {
|
||||
if (this is HTMLInputElement) {
|
||||
when (attributeName) {
|
||||
"checked" -> {
|
||||
checked = false
|
||||
}
|
||||
"class" -> {
|
||||
className = ""
|
||||
}
|
||||
"value" -> {
|
||||
this.value = ""
|
||||
}
|
||||
else -> {
|
||||
removeAttribute(attributeName)
|
||||
}
|
||||
internal fun Element.setKompAttribute(attributeName: String, value: String) {
|
||||
if (this is HTMLInputElement) {
|
||||
when (attributeName) {
|
||||
"checked" -> {
|
||||
checked = "checked" == value
|
||||
}
|
||||
} else {
|
||||
removeAttribute(attributeName)
|
||||
}
|
||||
} else {
|
||||
if (this is HTMLInputElement) {
|
||||
when (attributeName) {
|
||||
"checked" -> {
|
||||
checked = "checked" == value
|
||||
}
|
||||
"class" -> {
|
||||
className = value
|
||||
}
|
||||
"value" -> {
|
||||
this.value = value
|
||||
}
|
||||
else -> {
|
||||
setAttribute(attributeName, value)
|
||||
}
|
||||
|
||||
"class" -> {
|
||||
className = value
|
||||
}
|
||||
|
||||
"value" -> {
|
||||
this.value = value
|
||||
}
|
||||
|
||||
else -> {
|
||||
setAttribute(attributeName, value)
|
||||
}
|
||||
} else if (this.getAttribute(attributeName) != value) {
|
||||
setAttribute(attributeName, value)
|
||||
}
|
||||
} else if (this.getAttribute(attributeName) != value) {
|
||||
setAttribute(attributeName, value)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun Element.clearKompEvents() {
|
||||
val events = getKompEvents()
|
||||
for ((name, event) in getKompEvents()) {
|
||||
removeEventListener(name, event)
|
||||
internal fun Element.clearKompAttribute(attributeName: String) {
|
||||
if (this is HTMLInputElement) {
|
||||
when (attributeName) {
|
||||
"checked" -> {
|
||||
checked = false
|
||||
}
|
||||
|
||||
"class" -> {
|
||||
className = ""
|
||||
}
|
||||
|
||||
"value" -> {
|
||||
this.value = ""
|
||||
}
|
||||
|
||||
else -> {
|
||||
removeAttribute(attributeName)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
removeAttribute(attributeName)
|
||||
}
|
||||
events.clear()
|
||||
}
|
||||
|
||||
internal fun Element.setKompEvent(name: String, event: (Event) -> Unit) {
|
||||
@@ -123,22 +112,9 @@ internal fun Element.setKompEvent(name: String, event: (Event) -> Unit) {
|
||||
name
|
||||
}
|
||||
|
||||
getKompEvents()[eventName] = event
|
||||
|
||||
this.addEventListener(eventName, event)
|
||||
}
|
||||
|
||||
internal fun Element.getKompEvents(): MutableMap<String, (Event) -> Unit> {
|
||||
var map = this.asDynamic()["komp-events"] as? MutableMap<String, (Event) -> Unit>
|
||||
|
||||
if (map == null) {
|
||||
map = mutableMapOf()
|
||||
this.asDynamic()["komp-events"] = map
|
||||
}
|
||||
|
||||
return map
|
||||
}
|
||||
|
||||
internal fun Element.findElementIndex(): Int {
|
||||
val childNodes = parentElement?.children
|
||||
if (childNodes != null) {
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.w3c.dom.get
|
||||
data class ElementIndex(
|
||||
val parent: Node,
|
||||
var childIndex: Int,
|
||||
var setAttr: MutableSet<String> = mutableSetOf()
|
||||
) {
|
||||
override fun toString(): String {
|
||||
return "${parent.nodeName}[$childIndex]"
|
||||
@@ -39,7 +38,6 @@ fun ArrayList<ElementIndex>.currentPosition(): ElementIndex? {
|
||||
|
||||
fun ArrayList<ElementIndex>.nextElement() {
|
||||
this.lastOrNull()?.let {
|
||||
it.setAttr.clear()
|
||||
it.childIndex++
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,12 +57,6 @@ class HtmlBuilder(
|
||||
}
|
||||
} else {
|
||||
// current element should become parent
|
||||
/*
|
||||
val ce = komponent.element
|
||||
if (ce != null) {
|
||||
append(ce as Element)
|
||||
}
|
||||
*/
|
||||
komponent.create(
|
||||
currentPosition.last().parent as Element,
|
||||
currentPosition.last().childIndex
|
||||
@@ -100,39 +94,26 @@ class HtmlBuilder(
|
||||
"onTagStart, [${tag.tagName}, ${tag.namespace ?: ""}], currentPosition: $currentPosition"
|
||||
}
|
||||
|
||||
currentNode = currentPosition.currentElement()
|
||||
currentNode = if (tag.namespace != null) {
|
||||
document.createElementNS(tag.namespace, tag.tagName)
|
||||
} else {
|
||||
document.createElement(tag.tagName)
|
||||
}
|
||||
|
||||
if (currentNode == null) {
|
||||
logReplace { "onTagStart, currentNode1: $currentNode" }
|
||||
currentNode = if (tag.namespace != null) {
|
||||
document.createElementNS(tag.namespace, tag.tagName)
|
||||
} else {
|
||||
document.createElement(tag.tagName)
|
||||
}
|
||||
|
||||
logReplace { "onTagStart, currentElement1.1: $currentNode" }
|
||||
currentPosition.currentParent().appendChild(currentNode!!)
|
||||
} else if (
|
||||
!currentNode?.asElement()?.tagName.equals(tag.tagName, true) ||
|
||||
(
|
||||
tag.namespace != null &&
|
||||
!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}"
|
||||
}
|
||||
} else {
|
||||
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)
|
||||
} else {
|
||||
document.createElement(tag.tagName)
|
||||
}
|
||||
|
||||
currentPosition.replace(currentNode!!)
|
||||
currentPosition.replace(currentNode!!)
|
||||
}
|
||||
|
||||
currentElement = currentNode as? Element ?: currentElement
|
||||
@@ -144,15 +125,8 @@ class HtmlBuilder(
|
||||
firstTag = false
|
||||
}
|
||||
|
||||
currentElement?.clearKompEvents()
|
||||
|
||||
// if currentElement = checkbox make sure it's cleared
|
||||
(currentElement as? HTMLInputElement)?.checked = false
|
||||
|
||||
currentPosition.lastOrNull()?.setAttr?.clear()
|
||||
for (entry in tag.attributesEntries) {
|
||||
currentElement!!.setKompAttribute(entry.key, entry.value)
|
||||
currentPosition.lastOrNull()?.setAttr?.add(entry.key)
|
||||
currentElement?.setKompAttribute(entry.key, entry.value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,11 +155,10 @@ class HtmlBuilder(
|
||||
checkTag("onTagAttributeChange", tag)
|
||||
}
|
||||
|
||||
currentElement?.setKompAttribute(attribute, value)
|
||||
if (value == null || value.isEmpty()) {
|
||||
currentPosition.currentPosition()?.setAttr?.remove(attribute)
|
||||
currentElement?.clearKompAttribute(attribute)
|
||||
} else {
|
||||
currentPosition.currentPosition()?.setAttr?.add(attribute)
|
||||
currentElement?.setKompAttribute(attribute, value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,25 +195,6 @@ class HtmlBuilder(
|
||||
checkTag("onTagEnd", tag)
|
||||
}
|
||||
|
||||
if (currentElement != null) {
|
||||
val setAttrs: Set<String> = currentPosition.currentPosition()?.setAttr ?: setOf()
|
||||
|
||||
// remove attributes that where not set
|
||||
val element = currentElement
|
||||
if (element?.hasAttributes() == true) {
|
||||
for (index in 0 until element.attributes.length) {
|
||||
val attribute = element.attributes[index]
|
||||
if (attribute?.name != null) {
|
||||
val attr = attribute.name
|
||||
|
||||
if (!setAttrs.contains(attr)) {
|
||||
element.setKompAttribute(attr, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
currentPosition.pop()
|
||||
|
||||
currentNode = currentPosition.currentElement()
|
||||
|
||||
Reference in New Issue
Block a user