feat: Events
This commit is contained in:
parent
959241c16b
commit
a942723186
13 changed files with 69 additions and 14 deletions
|
@ -1,6 +1,6 @@
|
|||
package top.davidon.sfs.dom
|
||||
|
||||
import top.davidon.sfs.dom.codecs.StringCodec
|
||||
import top.davidon.sfs.dom.mods.Modifier
|
||||
import top.davidon.sfs.dom.tags.Tag
|
||||
|
||||
/** tag + modifiers + value */
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package top.davidon.sfs.dom
|
||||
|
||||
import org.scalajs.dom
|
||||
import top.davidon.sfs.dom.mods.Modifier
|
||||
|
||||
trait ReactiveRenderer {
|
||||
def valueFunc[F](element: dom.Element, value: F): Unit
|
||||
def modifierFunc[F, T](modifier: Modifier[F, T], value: F): Unit
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package top.davidon.sfs.dom
|
||||
|
||||
trait TriggerableValue[T] {
|
||||
def trigger[T](value: T): Unit
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package top.davidon.sfs.dom.codecs
|
||||
|
||||
class EmptyCodec[T] extends Codec[T, Unit] {
|
||||
override def decode(domValue: Unit): T = ???
|
||||
override def encode(scalaValue: T): Unit = {}
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package top.davidon.sfs.dom.keys
|
||||
import top.davidon.sfs.dom.codecs.{Codec, StringCodec}
|
||||
import top.davidon.sfs.dom.{Modifier, Value}
|
||||
import top.davidon.sfs.dom.Value
|
||||
import top.davidon.sfs.dom.mods.Modifier
|
||||
|
||||
class AriaAttr[V](
|
||||
suffix: String,
|
||||
|
|
|
@ -1,5 +1,33 @@
|
|||
package top.davidon.sfs.dom.keys
|
||||
|
||||
import org.scalajs.dom
|
||||
import top.davidon.sfs.dom.codecs.{EmptyCodec, StringAsIsCodec}
|
||||
import top.davidon.sfs.dom.mods.{EventMod, Modifier}
|
||||
import top.davidon.sfs.dom.{TriggerableValue, Value}
|
||||
|
||||
class EventProp[Event <: dom.Event](override val name: String) extends Key {}
|
||||
class EventProp[E <: dom.Event](override val name: String) extends Key {
|
||||
|
||||
/** Don't use with StringRenderer and ssr off/false
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
def :=(value: E => Unit): Modifier[EventMod[E], Unit] = {
|
||||
Modifier(this, Value(EventMod(this, value), EmptyCodec()))
|
||||
}
|
||||
|
||||
/** Don't use with StringRenderer and ssr off/false
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
def :=(value: TriggerableValue[E]): Modifier[EventMod[E], Unit] = {
|
||||
Modifier(this, Value(EventMod(this, value.trigger), EmptyCodec()))
|
||||
}
|
||||
|
||||
/** Only use with StringRenderer and ssr off/false
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
def :=(value: String): Modifier[String, String] = {
|
||||
Modifier(this, Value(value, StringAsIsCodec))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
package top.davidon.sfs.dom.keys
|
||||
|
||||
import top.davidon.sfs.dom.codecs.{Codec, StringCodec}
|
||||
import top.davidon.sfs.dom.{Modifier, Value}
|
||||
import top.davidon.sfs.dom.Value
|
||||
import top.davidon.sfs.dom.mods.Modifier
|
||||
|
||||
class HtmlAttr[V](
|
||||
override val name: String,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package top.davidon.sfs.dom.keys
|
||||
import top.davidon.sfs.dom.codecs.Codec
|
||||
import top.davidon.sfs.dom.{Modifier, Value}
|
||||
import top.davidon.sfs.dom.Value
|
||||
import top.davidon.sfs.dom.mods.Modifier
|
||||
|
||||
class HtmlProp[V, DomV](
|
||||
override val name: String,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package top.davidon.sfs.dom.keys
|
||||
import top.davidon.sfs.dom.codecs.{Codec, StringCodec}
|
||||
import top.davidon.sfs.dom.{Modifier, Value}
|
||||
import top.davidon.sfs.dom.Value
|
||||
import top.davidon.sfs.dom.mods.Modifier
|
||||
|
||||
class SvgAttr[V](
|
||||
val localName: String,
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package top.davidon.sfs.dom.mods
|
||||
|
||||
import org.scalajs.dom
|
||||
import top.davidon.sfs.dom.keys.EventProp
|
||||
|
||||
class EventMod[E <: dom.Event](val key: EventProp[E], val value: E => Unit) {}
|
|
@ -1,5 +1,6 @@
|
|||
package top.davidon.sfs.dom
|
||||
package top.davidon.sfs.dom.mods
|
||||
|
||||
import top.davidon.sfs.dom.Value
|
||||
import top.davidon.sfs.dom.codecs.Codec
|
||||
import top.davidon.sfs.dom.keys.Key
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package top.davidon.sfs.dom.tags
|
||||
|
||||
import org.scalajs.dom
|
||||
import top.davidon.sfs.dom.codecs.StringCodec
|
||||
import top.davidon.sfs.dom.{Element, Modifier, Value}
|
||||
import top.davidon.sfs.dom.mods.{EventMod, Modifier}
|
||||
import top.davidon.sfs.dom.{Element, Value}
|
||||
|
||||
trait Tag[+Ref <: dom.Element] {
|
||||
val name: String
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue