Idempotent?  No, why would we want compilation to be idempotent?
First (exceptionally hamfisted) cut at Javascript implementation.
De-hamfist slightly...
Use yoob.PlayfieldCanvasView like we should be doing.
There we go, sort of.