|
|
|
@ -4,8 +4,9 @@ import androidx.compose.runtime.*
|
|
|
|
|
import org.jetbrains.compose.web.attributes.AttrsBuilder |
|
|
|
|
import org.jetbrains.compose.web.ExperimentalComposeWebApi |
|
|
|
|
import org.jetbrains.compose.web.css.StyleHolder |
|
|
|
|
import org.jetbrains.compose.web.internal.runtime.DomElementWrapper |
|
|
|
|
import org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi |
|
|
|
|
import org.jetbrains.compose.web.internal.runtime.DomNodeWrapper |
|
|
|
|
import org.jetbrains.compose.web.internal.runtime.NamedEventListener |
|
|
|
|
import org.w3c.dom.Element |
|
|
|
|
import org.w3c.dom.HTMLElement |
|
|
|
|
import org.w3c.dom.css.ElementCSSInlineStyle |
|
|
|
@ -35,9 +36,23 @@ private inline fun <TScope, T> ComposeDomNode(
|
|
|
|
|
currentComposer.endNode() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ComposeWebInternalApi |
|
|
|
|
private class DomElementWrapper(override val node: Element): DomNodeWrapper(node) { |
|
|
|
|
private var currentListeners = emptyList<NamedEventListener>() |
|
|
|
|
|
|
|
|
|
@OptIn(ComposeWebInternalApi::class) |
|
|
|
|
private fun DomElementWrapper.updateProperties(applicators: List<Pair<(Element, Any) -> Unit, Any>>) { |
|
|
|
|
fun updateEventListeners(list: List<NamedEventListener>) { |
|
|
|
|
currentListeners.forEach { |
|
|
|
|
node.removeEventListener(it.name, it) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
currentListeners = list |
|
|
|
|
|
|
|
|
|
currentListeners.forEach { |
|
|
|
|
node.addEventListener(it.name, it) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun updateProperties(applicators: List<Pair<(Element, Any) -> Unit, Any>>) { |
|
|
|
|
node.removeAttribute("class") |
|
|
|
|
|
|
|
|
|
applicators.forEach { (applicator, item) -> |
|
|
|
@ -45,8 +60,7 @@ private fun DomElementWrapper.updateProperties(applicators: List<Pair<(Element,
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@OptIn(ComposeWebInternalApi::class) |
|
|
|
|
private fun DomElementWrapper.updateStyleDeclarations(styleApplier: StyleHolder) { |
|
|
|
|
fun updateStyleDeclarations(styleApplier: StyleHolder) { |
|
|
|
|
when (node) { |
|
|
|
|
is HTMLElement, is SVGElement -> { |
|
|
|
|
node.removeAttribute("style") |
|
|
|
@ -64,8 +78,7 @@ private fun DomElementWrapper.updateStyleDeclarations(styleApplier: StyleHolder)
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@OptIn(ComposeWebInternalApi::class) |
|
|
|
|
fun DomElementWrapper.updateAttrs(attrs: Map<String, String>) { |
|
|
|
|
fun updateAttrs(attrs: Map<String, String>) { |
|
|
|
|
node.getAttributeNames().forEach { name -> |
|
|
|
|
if (name == "style") return@forEach |
|
|
|
|
node.removeAttribute(name) |
|
|
|
@ -75,6 +88,7 @@ fun DomElementWrapper.updateAttrs(attrs: Map<String, String>) {
|
|
|
|
|
node.setAttribute(it.key, it.value) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@OptIn(ComposeWebInternalApi::class) |
|
|
|
|