Creating a Module - XML definitions
On this page
XML definitions
Section 1 contains XML definitions for the module and template XML files.
1. Module
Element | Type | Description | Options | Sample value |
---|---|---|---|---|
id |
string | A unique ID for the module. Core modules are prefixed with core- . If you want to distribute your module it would be sensible to give it a prefix personal to you. |
core-embedded |
|
name |
string | This is the friendly name of your module. It will be shown in the Layout Designer. | ||
author |
string | You :), only shown on the Module admin page. | ||
description |
string | A description for the module, only used on the Module admin page. | ||
class |
string | The class name of a Widget Provider, if needed. Not all modules need this, see below. | ||
compatibilityClass |
string | The class name of a Widget Compatibility Interface, if needed. Not all modules need this, see below. | ||
type |
string | This is the internal identifier for your module and is what gets recorded on the Layout XLF file and sent to the Player. This does not have to be unique, the CMS will choose the first available module of a particular type to render a Widget. | ||
dataType |
string | If this module returns data, this is the data type of that data. It is also used to select the corresponding templates. | article |
|
dataCacheKey |
string | Cache key for a module that returns data. Use with module properties between % characters, and separate multiple properties with a _ . |
%id%_%name% |
|
schemaVersion |
integer | Schema Version - can use used to determine different rendering from past versions. | 1 |
|
assignable |
integer | Should this module be assignable - used for Library modules. | 0 , 1 |
1 |
regionSpecific |
integer | Is this Module for the Library (0) or a Widget on a Layout (1) | 0 , 1 |
1 |
renderAs |
string | Render natively (native ) or as HTML (html ). If you are making a Player that will understand how to render the module set to native . Native modules must provide a preview stencil. |
html , native |
html |
defaultDuration |
integer | When the user has declined to provide a duration for the Widget, what should the duration be. | 60 |
|
legacyType |
LegacyType | If this module is a legacy module, use to match with old version of the module. | weather |
|
thumbnail |
string | The assetId of an image to be used as the thumbnail | ||
icon |
string | The class ID of an icon to show in the toolbar. Currently font awesome is supported. Used when a thumbnail is not provided. | fa fa-font |
|
startWidth |
integer | The width of this widget when it is first added to a layout | 500 | |
startHeight |
integer | The height of this widget when it is first added to a layout | 500 | |
showIn |
string | Where should this module be shown? | both , playlist , layout |
both |
settings |
Property | Settings shown on the Module admin page. | ||
properties |
Property | Properties shown in the configuration panel of the Layout and Playlist editors. | ||
preview |
Stencil | A stencil for previewing. If not set, stencil will be used. |
||
stencil |
Stencil | A stencil for the HTML to be sent to the Player | ||
onInitialize |
CDATA string | JavaScript function run when a module is initialised, before data is returned. | <![CDATA[ ... ]]> |
|
onDataLoad |
CDATA string | JavaScript function run when a module retrieves data and before it renders it. | // items: The items to render // meta: Metadata // properties: The properties for the widget |
<![CDATA[ ... ]]> |
onDataError |
CDATA string | JavaScript function run when a module fails to receive data. | // httpStatus: The HTTP status code of the request // response: the response body |
|
onParseData |
CDATA string | JavaScript function running as data parser against each data item applicable when a dataType is present. |
<![CDATA[ ... ]]> |
|
onRender |
CDATA string | JavaScript function run when a module is rendered, after data has been returned. | <![CDATA[ ... ]]> |
|
onVisible |
CDATA string | JavaScript function run right before a module is shown. | <![CDATA[ ... ]]> |
|
sampleData |
CDATA string | A JSON data item to use as a sample | <![CDATA[ ... ]]> |
|
assets |
Asset | A list of assets to be included in the module. |
1.1. Legacy Type
Legacy Type is used to indicate where a current module XML definition can serve an old/alternate module type. This is used on CMS upgrade or Layout import to convert a widget from its old state to a state compatible with this release.
Element | Type | Description | Options | Sample value |
---|---|---|---|---|
name |
string | The legacy type of the module to match against | countdown |
|
condition |
string | An optional condition to match against the properties saved on the widget | templateId==countdown3 |
For example, the countdown
module from v2/v3 has been split into 4 separate countdown modules in v4, each one serving a different “templateId” in the v3 version of that module. Adding a legacy type definition to the new module means that it will match and convert an old widget into the new module.
2. Template
Element | Type | Description | Options | Sample value |
---|---|---|---|---|
id |
string | A unique ID for the template. | template1 |
|
type |
string | The type of template. | static , element , element-group |
static |
title |
string | The title of the template used in the CMS to identify the template. | Template 1 |
|
dataType |
string | The data type of the template. Used to list the template in the corresponding modules. | article |
|
thumbnail |
string | The assetId of an image to be used as the thumbnail | ||
showIn |
string | Where should this module be shown? | both , playlist , layout |
both |
properties |
Property | Same as the properties in the Module XML, but specific to the template. | ||
stencil |
Stencil | The stencil for the HTML of the template. | ||
onElementParseData |
CDATA string | JavaScript function run for each data property, before rendering. | // value: The value // properties: The properties for the widget |
|
onTemplateRender |
CDATA string | JavaScript function run when a template is rendered. | <![CDATA[ ... ]]> |
Note: Template
id
cannot contain hyphens (-
). This is because it will be used to generate a unique method name foronTemplateRender
.
3. Property
Common structure for all properties.
Attribute | Description | Options | Sample value |
---|---|---|---|
id |
A unique ID for the property. | showHeader |
|
type |
The type of property. | See Property Types | checkbox |
Element | Type | Description | Options | Sample value |
---|---|---|---|---|
title |
string | Used in the CMS to identify the property in the module configuration form. | Header | |
helpText |
string | Help text to be displayed in the module configuration form. | Show header on table? | |
default |
string | The default value for the property. | 1 |
|
visibility |
Rule | Set the visibility of the property based a set of rules. | ||
validation |
Rule | Set validation rules for the property when submitted and when status on the layout is reported. | ||
playerCompatibility |
Player Compatibility | Create a input helper to show the property compatibility with the players. | ||
dependsOn |
string | ID of the property that this property depends on. Used to update the property when the target property is changed. | showHeader |
3.1. Rule
Rules can be used for visibility and validation of properties. Rules consist of an array of tests which are evaluated individually (they are ANDed).
Element | Type | Description | Options | Default Value |
---|---|---|---|---|
onSave |
boolean | Validation only: should the rule be applied when a property is saved? | true | |
onStatus |
boolean | Validation only: should the rule be applied when the widget status is assessed | true | |
message |
string | A string message to raise as an error, if empty a default message will be raised for the failing test/condition. | ||
test |
Test[] | One or more tests to apply. |
3.1.1. Test
A test is a set of conditions which are assessed in sequence.
Attribute | Description | Options | Sample value |
---|---|---|---|
type |
Test type. | and , or |
and |
Element | Type | Description |
---|---|---|
condition |
Condition | Test condition. |
3.1.2. Condition
Attribute | Type | Description | Options | Sample value |
---|---|---|---|---|
field |
string | null | Id of the property to test against (required for visibility) / get the value from (optional for validation) | |
type |
Condition Type | Type of condition test. | See condition type | eq |
Element | Description |
---|---|
nodeValue | Value to be tested against. (validation rules: leave empty for current property value) |
Rules used as validation always test the current property value against the value resolved by the condition. Rules used as visibility tests always test the value in the field
attribute against the value in the node.
For rules used as validation this means that when a field name is provided it is the value of that field which is used to test against the current property value. For example:
A rule which ensures that the current property value is required and is of type uri.
<rule>
<test type="and">
<condition type="required"></condition>
<condition type="uri"></condition>
</test>
</rule>
A rule which ensures that the current property value is less than or equal to the duration.
<rule message="Warning duration needs to be lower than the widget duration.">
<test type="and">
<condition field="duration" type="lte"></condition>
</test>
</rule>
Rules which need a comparison value such as gt
must either have a field to get the comparison value from, or a value in the condition.
<rule message="Warning duration needs to be lower than 10">
<test type="and">
<condition type="lt">10</condition>
</test>
</rule>
When using or
tests, all conditions must fail for the test to fail.
Condition Type
Name | Description |
---|---|
required |
Must have a value |
eq |
Equal to |
neq |
Not equal to |
gt |
Greater than |
gte |
Greater than or equal to |
lt |
Less than |
lte |
Less than or equal to |
contains |
Value contains |
ncontains |
Value does not contain |
uri |
Must be a URI |
interval |
Must be a valid date interval |
Default values
If the property defines a default value, this value is also tested against the rules and conditions defined on the property.
3.2. Player Compatibility
Attribute | Description |
---|---|
windows |
Windows player version. |
linux |
Linux player version. |
android |
Android player version. |
webos |
WebOS player version. |
tizen |
Tizen player version. |
3.3. Property Types
All properties have the options listed in the Property section. They can be of the following types:
Name | Description |
---|---|
text |
Text input |
number |
Number input |
checkbox |
Checkbox |
dropdown |
Dropdown |
color |
Color picker |
code |
Code editor |
richText |
Rich text editor |
date |
Date picker |
hidden |
Hidden input |
fontSelector |
Font selector |
datasetSelector |
Dataset selector |
datasetOrder |
Dataset order |
datasetFilter |
Dataset filter |
datasetColumnSelector |
Dataset column selector |
datasetField |
Dataset field selector (requires hidden dataTypeId ) |
header |
Header |
message |
Message |
divider |
Divider |
connectorProperties |
A dropdown/search filled with values from a connector |
3.4. Property Additional Options
These properties have additional options.
Dropdown
Attribute | Type | Type Description | Options | Sample value |
---|---|---|---|---|
multiple |
integer | Allow multiple selections. | 0 , 1 |
0 |
mode |
string | For a dropdown, should it be single or multi-select. | single , multi |
single |
Element | Type | Description | Options | Sample value |
---|---|---|---|---|
options |
Option | Options for the dropdown. | ||
optionsTitle |
string | Title of the options. | newTitle |
|
optionsValue |
string | Value of the options. | newValue |
Option
Attribute | Type | Type Description | Options | Sample value |
---|---|---|---|---|
name |
string | Name of the option. | newOption |
Element | Type | Description | Options | Sample value |
---|---|---|---|---|
nodeValue | string | Value of the option. | newOption |
Code
Attribute | Type | Description | Options | Sample value |
---|---|---|---|---|
variant |
string | Code editor variant. | html , css , javascript |
javascript |
allowLibraryRefs |
bool | Allow library references. | true , false |
false |
allowAssetRefs |
bool | Allow asset references. | true , false |
false |
parseTranslations |
bool | Parse the value for translations between pipes. | true , false |
false |
Rich Text
Attribute | Type | Description | Options | Sample value |
---|---|---|---|---|
allowLibraryRefs |
bool | Allow library references. | true , false |
false |
allowAssetRefs |
bool | Allow asset references. | true , false |
false |
parseTranslations |
bool | Parse the value for translations between pipes. | true , false |
false |
Date
Attribute | Type | Description | Options | Sample value |
---|---|---|---|---|
format |
string | Date format. | YYYY-MM-DD |
|
variant |
string | Date variant. | date , time , datetime , month |
date |
Connector Properties
A dropdown/search field which returns a set of options/values from a connector which handles the request.
Attribute | Type | Description | Options | Sample value |
---|---|---|---|---|
variant |
string | Variant. | autocomplete , dropdown |
dropdown |
4. Stencil
Element | Type | Description | Sample value |
---|---|---|---|
twig | CDATA string | Twig template | <![CDATA[ <p>Some HTML</p><style> .some-css { color: red; } </style> ]]> |
hbs | CDATA string | Handlebars template | <![CDATA[ <p>{{someValue}}</p> ]]> |
style | CDATA string | CSS to add | <![CDATA[ .some-class { some-prop: some-value; } ]]> |
width | integer | Width of the template to be scaled | 600 |
height | integer | Height of the template to be scaled | 400 |
4.1. Twig
Twig will be rendered directly into the module HTML. It can be used to add custom CSS or HTML to the module.
It needs to be provides as a CDATA block, to prevent the XML parser from interpreting the HTML.
By setting a width
and height
attribute, the template will be scaled to match those dimensions in the player.
4.2. Handlebars (hbs)
When set in the template, the hbs
node value will be used as a template for each item provided.
If it’s defined in the module, it will be used as a template for the module itself.
We can use {{ }}
with module or item properties, data can be rendered to the template.
5. Sample data
When developing a module with a data provider, it’s important to have a sample data to test the rendering.
The sample data can be provided as a JSON string, in the sampleData
node.
Data can be provided as a single item:
<sampleData><![CDATA[
{
"id": "1",
"name": "One",
"description": "This is the first item",
"value": "1"
}
]]></sampleData>
Or as an array of items:
<sampleData><![CDATA[
[
{
"id": "1",
"name": "One",
"description": "This is the first item",
"value": "1"
},
{
"id": "2",
"name": "Two",
"description": "This is the second item",
"value": "2"
},
{
"id": "3",
"name": "Three",
"description": "This is the third item",
"value": "3"
}
]
]]></sampleData>
6. Assets
When assets are required for the module, they can be added to the assets
node.
Element | Type | Description |
---|---|---|
asset | Asset | A file to be added to the module. |
Asset
Attribute | Type | Description | Options | Sample value |
---|---|---|---|---|
id |
string | ID of the asset. | newImage |
|
type |
string | Type of the asset. | path |
path |
mime |
string | Mime type of the asset. | image/png |
|
path |
string | Path to the asset. | /modules/assets/image.png |
|
cmsOnly |
boolean | Is this asset only used in the CMS? | true | |
autoInclude |
boolean | Should this asset be automatically included in the player HTML? (css/js only) | Default: false | true |
And then the asset can be referenced in the module with the [[assetId=newImage]]
syntax.
7. Data Type
Each datatype.xml
file should have a top level node called <dataTypes>
, inside which is each <dataType>
node.
Element | Type | Description | Options | Sample value |
---|---|---|---|---|
id |
string | A unique ID for the datatype. | currency |
|
name |
string | A friendly name for the datatype | Currency | |
fields |
Fields[] | A array of fields |
7.1. Field
Element | Type | Description | Options | Sample value |
---|---|---|---|---|
title |
string | The title of this field | The time this quote was last refreshed |
7.1. Field Attributes
Attribute | Type | Description | Sample value |
---|---|---|---|
id |
string | A unique ID for this field (used in widgets) | time |
type |
string | The data type this field should be treated as | number, text, datetime, image |