Studio Developer Manual / Version 2310
Table Of Contents
Annotated LinkLists are stored in a struct property. This is in contrast to a plain
LinkList which is stored in a LinkList property.
Therefore, when introducing a new Annotated LinkList, the doctype definition needs to have an XML
property with the Struct grammar.
<XmlProperty Name="structList" Grammar="coremedia-struct-2008" extensions:translatable="true"/>
The property editor for an annotated LinkList usually is a LinkListPropertyField with the following
configuration:
linkListWrapper: An instance of
StructLinkListWrapper, that wraps the annotated listrowWidget: An
AnnotatedLinkListWidgetthat contains items which implementIAnnotatedLinkListForm
Existing Annotated LinkLists can be extended with custom forms by using the
AddItemsPlugin on the AnnotatedLinkListWidget.
The custom forms need to implement the interface IAnnotatedLinkListForm (which basically
is providing a settingsVE configuration) and can then start using property editors bound to
sub properties of the settingsVE ValueExpression via extendBy.
Note
Like every property editor the annotated link list form should consider the read-only state. For this our
default property editors always provide the config forceReadOnlyValueExpression. Either implement
this manually or utilize a base component like PropertyFieldGroup (see example below).
The row expander of an Annotated LinkList changes its appearance based upon the state of its row
widget(s) (see Figure 9.8, “
Annotated LinkList with item with changed default value
”, the changed parts are highlighted with red border).
That is, if there is at least one row widget instance in a row which differs from the default state, the row expander
icon gets inverted.
So the studio user gets a hint that at least one of the row widget instances has been changed.
To determine if a row widget differs from its default state, every IAnnotatedLinkListForm may provide
a custom method with the following signature:
isAnnotated(annotatedLinkListProvider:IAnnotatedLinkListProvider, rowIndex:number):boolean
These custom methods are set via the LinkListPropertyField config option
rowWidgetsAnnotatedPredicates.
If there are no custom methods, a default strategy is chosen to determine if the row expander has to change its
appearance.
If there is at least one custom method, then the default strategy is ignored.



