23 lines
1.1 KiB
Markdown
23 lines
1.1 KiB
Markdown
# scoped proagators
|
|
"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.
|
|
|
|
## Notes
|
|
- shapes are passed both `from` and `to` shapes.
|
|
- Shapes are flattened before being passed to the propagator, and unpacked on the other side. So properties live alongside the `x`, `y`, and `rotation` 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.
|
|
|
|
## Effects / Generic JS
|
|
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`. |