49 lines
No EOL
1.3 KiB
Kotlin
49 lines
No EOL
1.3 KiB
Kotlin
package de.westermann.kwebview
|
|
|
|
import de.westermann.kobserve.Property
|
|
import de.westermann.kobserve.property.property
|
|
import kotlin.reflect.KProperty
|
|
|
|
/**
|
|
* Delegate to easily set css classes as boolean attributes.
|
|
*
|
|
* @author lars
|
|
*/
|
|
class ClassDelegate(
|
|
className: String? = null
|
|
) {
|
|
|
|
private lateinit var container: View
|
|
private lateinit var paramName: String
|
|
private lateinit var classProperty: Property<Boolean>
|
|
|
|
operator fun getValue(container: View, property: KProperty<*>): Property<Boolean> {
|
|
if (!this::container.isInitialized) {
|
|
this.container = container
|
|
}
|
|
|
|
if (!this::paramName.isInitialized) {
|
|
var name = property.name.toDashCase()
|
|
if (name.endsWith("-property")) {
|
|
name = name.replace("-property", "")
|
|
}
|
|
paramName = name
|
|
}
|
|
|
|
if (!this::classProperty.isInitialized) {
|
|
classProperty = property(container.html.classList.contains(paramName))
|
|
|
|
classProperty.onChange {
|
|
container.html.classList.toggle(paramName, classProperty.value)
|
|
}
|
|
}
|
|
|
|
return classProperty
|
|
}
|
|
|
|
init {
|
|
if (className != null) {
|
|
this.paramName = className
|
|
}
|
|
}
|
|
} |