"Scoped propagators" are formed of a scope
and a propagator
which often looks like this:
click { text: "foo" }
The scope
sets the events that cause propagation, such as clicks, ticks, or shape changes (not adding a scope will default to shape changes).
The propagator
is a JS object (or function which returns one) that is applied to the shape.
- shapes are passed both
from
andto
shapes. - Shapes are flattened before being passed to the propagator, and unpacked on the other side. So properties live alongside the
x
,y
, androtation
values (e.g.{ x: 100, y: 100, text: "foo" }
).
Current Issues (probably should be fixed before putting out a demo):
- cycles of
change
propagators cause infinite recursion. geo
scopes are currently fired for any shape change, this should be localised to spatially local changes.
You can create effects or run arbitrary JS code if you use the full function syntax:
click () { return { text: "foo" } }
This can be useful for larger propagators, or for doing arbitrary stuff with the editor
.