Channels
A channel says whose value it is.
| Channel | Edited in | Seen by | Stored in |
|---|---|---|---|
everyone | PresoManager | Every preso made from the deck | CMSVals |
personal | Prep | One preso | That preso's Context |
A field declares a key for each channel it uses. A page only edits the channel it is for, so a field with no key for that channel cannot be edited there, and is not offered to an assistant there either.
| Field | Declares | Why |
|---|---|---|
Disclaimer | everyone | Legal copy. Only PresoManager may change it. |
PreparedFor | personal | One customer's name. It means nothing across the deck. |
Headline | both | Marketing writes the default. A salesperson tailors it for one customer. |
everyone
One value per key, for every preso made from the deck.
defineEditableSource(Disclaimer, {
everyone: { key: "{targetKey}-{id}-{instance}" },
});
PresoManager sets "Fees apply. See the PDS." -> every preso shows it
Prep -> cannot edit it
personal
A value that belongs to one preso.
defineEditableSource(PreparedFor, {
personal: { key: "{id}" },
});
Prep sets "Acme Pty Ltd" in one preso -> only that preso shows it
PresoManager -> cannot set it
A bare {id} key is set once and shown on every slide rendering that id, in that preso. See
key.
Where in Context
The interface keeps each personal value under its key, in a bucket of the preso's Context:
text and declared actions _editableContent.<key> { elementID, mime, value }
images dynamicImages.<key> { image, mime }
Read and write these through the field's queries and mutations, never by path. State a deck keeps at a Context path of
its own choosing, such as Bridge.Context.setPath("a_form.values", ...), is not a field: no query reads it and no
mutation writes it. When such state becomes declared actions, it moves into the bucket.
A preso stays on the deck version it was created with, so moving personal state between deck versions needs no
migration: a new version only meets presos created from it. everyone keys are different - every preso reads CMSVals,
so an everyone key cannot change without losing what is stored under it.
Using both
defineEditableSource(Headline, {
everyone: { key: "{targetKey}-{id}-{instance}" },
personal: { key: "{targetKey}-{id}-{instance}" },
});
A personal value hides the everyone value, in that preso only.
PresoManager sets "Plans that grow with you"
Prep sets, Acme's preso "Plans for Acme"
Acme's preso shows "Plans for Acme"
every other preso shows "Plans that grow with you"
PresoManager changes "Plans for every team"
Acme's preso shows "Plans for Acme"
every other preso shows "Plans for every team"
A field shows the first of these that is set:
- its
personalvalue - its
everyonevalue - the copy written in the source
Where each can be edited
| Where the slide is | everyone | personal |
|---|---|---|
| PresoManager, and a template placed there | editable | not offered |
| Prep | read-only | editable |
| Present, Share, Remote | read-only | written by the deck's own code only |
| Review, thumbnails, PDF | read-only | read-only |
| Preset | read-only | not offered |
| Template previews | shows the copy in the source | not offered |
| User template, custom slide | editable, kept with that slide | editable |