I am working on a small Purescript application that produces visualizations. My architecture is a bit non-traditional, however, and I'm having some issues. Here's what I want:
pulp psci -- --port 8080
and connect with a browsergo
which accepts a definition of the visualization and renders it along with some controlsgo
.This sort of works with what I have so far, but my problem is that repeated calls to go
do not replace the contents of the DOM, but instead are added to them. This means that after a few calls I end up having many copies of all the controls and everything.
I realize this is a bit of a hack, but the only other way I can think to provide this kind of interactive interface is to implement an editor/parser and that's too much work Is there a way to avoid this?
Here's my definition of go
, which I imagine needs changing:
go :: Vis -> Eff (HA.HalogenEffects ()) Unit
go vis = HA.runHalogenAff do
body <- HA.awaitBody
runUI checks vis body
After a lot of experimenting, I discovered that at least one seemingly reasonable workaround is to explicitly delete the old child nodes. I don't really know what's going on in the background (am I running a bunch of meaningless processes?) but this works for my purposes:
go :: VVis -> Eff (HA.HalogenEffects ()) Unit
go vis = HA.runHalogenAff do
body <- HA.awaitBody
let nb = htmlElementToNode body
_ <- H.liftEff $ whileJust
(firstChild (htmlElementToNode body))
(\n -> removeChild n (htmlElementToNode body))
runUI checks vis body