blob: 2671f2fdb0406690205797e306d130ac3786550b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package mavigator.index
import scala.language.implicitConversions
import org.scalajs.dom.html
import rx._
import scala.util.Try
import scala.util.Success
import scala.util.Failure
import scalatags.JsDom.all._
object Util {
/**
* Copied from https://github.com/lihaoyi/workbench-example-app/blob/todomvc/src/main/scala/example/Framework.scala
*
* Sticks some Rx into a Scalatags fragment, which means hooking up an Obs
* to propagate changes into the DOM via the element's ID. Monkey-patches
* the Obs onto the element itself so we have a reference to kill it when
* the element leaves the DOM (e.g. it gets deleted).
*/
implicit def rxMod(r: Rx[HtmlTag])(implicit owner: Ctx.Owner): Frag = {
def rSafe = r.toTry match {
case Success(v) => v.render
case Failure(e) => span(e.toString, backgroundColor := "red").render
}
var last = rSafe
r.triggerLater{
val newLast = rSafe
last.parentElement.replaceChild(newLast, last)
last = newLast
}
bindNode(last)
}
}
|