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) } }