Prototypes are a method to let a single note specify the default value for an entire class of notes. This is achieved by specifying an existing note as the prototype, via the $IsPrototype attribute; this tells Tinderbox to use the prototype's values for the all the notes set to use that prototype. The easiest way to make a note a prototype is via the Properties Inspector's Prototype tab.
Attribute inheritance
See also: Inheritance of attribute values.
Whenever Tinderbox uses a prototype it will re-use an attribute value from the prototype for its own attributes unless the attribute is specifically set for that note (by action or manual edit). Such manual edits break inheritance (for that attribute only) but inheritance can be reset. There are some special mechanisms for disabling action inheritance.
When you change an attribute in a prototype, you change it for the notes that use that prototype. A note inherits all attributes from its prototype except for intrinsic attributes. Prototypes are not a necessary feature for everyday use but they can powerful time-savers for complex projects. Indeed, any large or long term Tinderbox project is likely to benefit for judicious use of prototypes.
As well as normal notes, an agent or adornment may be a prototype, but setting a normal note to use either of those will note change the nature of the note; it will simply use the customisations it can so, for example an agent query would be ignored. Nonetheless if making large use of agents or adornments, prototypes can speed their configuration.With agents, ideally the prototype should not have a query set though Tinderbox will cope with such a configuration. The Rule and Display Expression disabling attributes can help by ensuring things like self-resetting rules only run in non-prototype notes.
If a note or agent is copied and pasted to a different document, the new item does not inherit its source's $Prototype value. This is a defensive assumption by Tinderbox as it cannot be sure pasted notes are from the current TBX and thus that all source prototypes exist. When creating 'template' type notes/containers bear this in mind. Think about using an agent to help set prototype values directly or indirectly via rules and actions. The |= operator can be used to ensure actions occur once only.
Inheritance of Text
When a note’s prototype is set or changed, the note copies the prototype’s text ($Text) if the note has none, or if the text it inherited from its former prototype has not been changed.
Inheritance of Text links
If the prototype's $Text contains any text links, these are inherited when $Text is inherited (as described above)
Prototypes bequeathing child notes
Prototypes can have children that are created/added to a note if that prototype is applied, described in Tinderbox as 'bequeathing' notes—see more.
Built-in Prototypes
Tinderbox makes it easy to experiment with prototypes as a number of simple generic ones are predefined and built-in, noting that a few of these—such as for notes in DEVONthink watch folders—are added as-needed by the app and are not available for manual insertion via the File menu.
See more:
- Setting prototypes
- Disabling action inheritance
- Prototypes 'Bequeathing' Child Notes
- Duplication and prototype assignment
- Shared prototypes
- Chaining prototypes
See also—notes linking to here:
- Built-in Prototypes
- IsPrototype
- Prototype
- RuleDisabled
- Prototype pop-up list
- Displayed Attributes table
- Rules
- Prototype notes
- Stamps
- Setting a prototype
- PrototypeBequeathsChildren
- Note icon size and prototypes
- Shared prototypes
- Selecting Prototype via Outline icon
- Prototypes 'Bequeathing' Child Notes
- Using Prototypes
- Inheritance and prototypes
- Adornments
- Info tab
- Copying or Moving notes within Tinderbox