libreccm-legacy/doc/themes-with-freemarker/themes-with-freemarker.html

1632 lines
130 KiB
HTML

<h1 id="creating-themes-for-libreccm-with-freemarker">Creating themes for LibreCCM with Freemarker</h1>
<p>Starting with version 2.5 the LibreCCM platform support <a href="https://freemarker.apache.org">Freemarker</a> as an alternative to XSL. Freemarker is a project of the Apache Foundation and a well known and mature template engine for Java. The support for Freemarker in version 2.5 is a backport from the upcoming version 7 of the LibreCCM platform.</p>
<p>Compared to XSL Freemarker is a lot easier to use, especially if you have worked with other template engines like Twig, Velocity etc before. In version 7 of the LibreCCM platform Freemarker will be become the primary template engine. XSL will still be supported, but we recommanded that you port your themes to Freemarker. Why Freemarker and not one of the other template engines? Freemarker is able to process XML in a <a href="https://freemarker.apache.org/docs/xgui.html">similar way than XSL</a>.</p>
<p>Freemarker also allows it to define <a href="https://freemarker.apache.org/docs/dgui_misc_userdefdir.html">user defined directivies</a> and <a href="https://freemarker.apache.org/docs/ref_directive_function.html">functions</a>. To make it easier to create impressive themes we provide functions and macros for Freemarker we provide several functions and macros which hide the complexity of the XML data model created by CCM from the template author. It is recommanded not to access the XML data model directly. Instead the provided functions should be used. Otherwise your theme might brake when the XML structure changes.</p>
<h2 id="general-structure-of-a-freemarker-theme">General structure of a Freemarker theme</h2>
<p>Freemarker themes have a different structure than the usual &quot;old style&quot; themes of LibreCCM. Each Freemaker based theme must have a theme manifest file called <code>theme.json</code> on the root of its directory structure. This file provides several informations for processing the theme and serves as a central configuration point. The file must have the following structure:</p>
<pre><code>{
&quot;name&quot;: &quot;an-example-theme&quot;,
&quot;templates&quot;: {
&quot;applications&quot;: [
{
&quot;application-name&quot;: &quot;someApp&quot;,
&quot;application-class&quot;: &quot;somePageClass&quot;,
&quot;template&quot;: &quot;/templates/someApp.html.ftl&quot;
},
...
],
&quot;contentitems&quot;: [
{
&quot;view&quot;: &quot;list&quot;,
&quot;contentType&quot;: &quot;com.arsdigita.cms.contenttypes.Article&quot;,
&quot;template&quot;: &quot;/templates/contentitems/list/article.html.ftl&quot;
},
{
&quot;view&quot;: &quot;details&quot;,
&quot;contentType&quot;: &quot;com.arsdigita.cms.contenttypes.Article&quot;,
&quot;template&quot;: &quot;/templates/contentitems/detail/article.html.ftl&quot;
},
{
&quot;view&quot;: &quot;details&quot;,
&quot;contentType&quot;: &quot;com.arsdigita.cms.contenttypes.Article&quot;,
&quot;style&quot;: &quot;fancy&quot;,
&quot;template&quot;: &quot;/templates/contentitems/detail/article.html.ftl&quot;
},
...
],
&quot;default-application-template&quot;: &quot;/templates/default-layout.html.ftl&quot;,
&quot;default-contentitem-template&quot;: &quot;/templates/contentitems/detail/default.html.ftl&quot;,
},
&quot;data-time-formats&quot;: [
{
&quot;style&quot;: &quot;event&quot;,
&quot;lang&quot;: &quot;de&quot;,
&quot;format&quot;: &quot;dd. MMM. YYYY&quot;
},
{
&quot;style&quot;: &quot;event&quot;,
&quot;lang&quot;: &quot;en&quot;,
&quot;format&quot;: &quot;MM/dd/YY&quot;
},
...
]
}</code></pre>
<p>The <code>name</code> key defines the name of the theme which should be unique per installation. The <code>templates</code> contains several subkeys which define the templates to use.</p>
<p>The objects in the array of the <code>applications</code> key specify which template is used for an application. To determine which template should be used the attributes <code>application</code> and and <code>class</code> of from the root element of the XML data model are used. The value of the <code>application</code> attribute is matched against the value for the <code>application-name</code> field, the value of the class attribute against the value of the <code>application-class</code> field.</p>
<p>CCM will first try to find a a template definition which matches both the <code>class</code> and the <code>application</code>. If none is found a template definition which a matching <code>application-name</code> and an empty <code>application-class</code> will be looked up. If there is no match the template defined as <code>default-application-template</code> is used.</p>
<p>There is one special value value for the <code>template</code> field: <code>XSL_FALLBACK.XSL</code>. If the <code>template</code> field is set to this value CCM will fallback to the old XSL themes.</p>
<p>For content items the procedure is similar, only the names of the fields in the template definition differ. The <code>view</code> field is used internally to select either the detail or the list view. The <code>contentType</code> field is the content types of the content items. The third field <code>style</code> is optional and can be used to select different templates depending on the theme context. For more informations please refer to the documentation of the <code>contentItem</code> macro provided by the ccm-cms module.</p>
<p>The <code>date-time-formats</code> section is used to define date-time formats to use with the <code>formatDateTime</code> function provided by <code>ccm-themedirector</code>.</p>
<h2 id="predefined-variables-and-functions">Predefined variables and functions</h2>
<p>Several variables and functions are predefined and available without importing another file.</p>
<h3 id="variables">Variables</h3>
<h4 id="contextpath"><code>contextPath</code></h4>
<p>The context path in which CCM is running.</p>
<h4 id="contextprefix"><code>contextPrefix</code></h4>
<p>The context prefix.</p>
<h4 id="dispatcherprefix"><code>dispatcherPrefix</code></h4>
<p>Prefix for the CCM dispatcher (usually <code>/ccm</code>)</p>
<h4 id="host"><code>host</code></h4>
<p>The current host.</p>
<h4 id="model"><code>model</code></h4>
<p>The XML document created by LibreCCM.</p>
<h4 id="negotiatedlanguage"><code>negotiatedLanguage</code></h4>
<p>The language negoiated between the user agent and LibreCCM.</p>
<h4 id="requestscheme"><code>requestScheme</code></h4>
<p>The protocol (http or https).</p>
<h4 id="selectedlanguage"><code>selectedLanguage</code></h4>
<p>The language selected by the user.</p>
<h4 id="themeprefix"><code>themePrefix</code></h4>
<p>The prefix of the theme. Only available if a development theme is viewed.</p>
<h3 id="functions">Functions</h3>
<h4 id="getlocalizedtext"><code>getLocalizedText</code></h4>
<pre><code>String getLocalizedText(String key)</code></pre>
<p>Returns the localized text from the resource bundle of the theme.</p>
<h4 id="getcontentitemtemplate"><code>getContentItemTemplate</code></h4>
<pre><code>String getContentItemTemplate(String objectType, view=&quot;DETAIL&quot;, style=&quot;&quot;)</code></pre>
<p>This is an internal function!</p>
<p>Returns the path for the template of a content item of a specific type.</p>
<h4 id="formatdatetime"><code>_formatDateTime</code></h4>
<p>An internal functions date time formatting. This functions should not be used directly.</p>
<h2 id="functions-and-macros">Functions and Macros</h2>
<h3 id="freemarker-functions-for-ccm-cms">Freemarker functions for ccm-cms</h3>
<h4 id="functions-for-all-content-types">Functions for all content types</h4>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms/content-item.ftl</code>
</dd>
</dl>
<p>This functions and macros work for all content item types. Unless stated otherwise all functions support the detail view as well as the list view generated by the <code>ObjectList</code> components of the ccm-navigation module.</p>
<h5 id="node-getcontentitem"><code>Node getContentItem()</code></h5>
<p>Retrieves the content item of the current page. This works only on pages generated by the ContentSection application. To get the index item of a navigation page use the functions provided by the ccm-navigation module.</p>
<p>This function is primarly used to as parameter for other functions dealing with content items.</p>
<h5 id="contentitem-item-node-view-string-style-string"><code>@contentItem item: Node view: String style: String</code></h5>
<p>This macro generates the detail view of a content item. Using the type of the provided content items, the provided type and the provided type this macro internally tries to find a view definition in for the provided parameters in the theme manifest. The template defined in this definition is used to generate the HTML representation of the item.</p>
<p>The parameters <code>view</code> and <code>style</code> are optional. The <code>view</code> parameter defaults to <code>detail</code>, the default value for the <code>style</code> parameter is an empty string.</p>
<h5 id="string-getitemtitleitem-node"><code>String getItemTitle(item: Node)</code></h5>
<p>This function retrieves the title of the provided content items.</p>
<h5 id="string-getpagetitleusecategorymenu-string-userootindexitemtitle-boolean"><code>String getPageTitle(useCategoryMenu: String, useRootIndexItemTitle: boolean)</code></h5>
<p>Retrieves the title of the current page. The title retrieved depends on the provided parameters. Both parameters are optional. <code>useCategoryMenu</code>is used to select the category menu which is used to retrieve the page title. The default value is <code>categoryMenu</code>. The <code>useRootIndexItemTitle</code> defaults to <code>false</code> and is used to determine if the title of the category or the title of the index item is used as page title for the index page of an category.</p>
<h5 id="string-getitemsummaryitem-node"><code>String getItemSummary(item: Node)</code></h5>
<p>Retrieves the summary/lead text of the provided content item if the item has a property. The following property names are tried: <code>lead</code>, <code>summary</code>. If none is found an empty string is returned.</p>
<h5 id="string-getpagedescriptionitem-node"><code>String getPageDescription(item: Node)</code></h5>
<p>Retrieves the value of the <code>pageDescription</code> property of the provided content item if the item has such a property. If not an empty string is returned.</p>
<h5 id="string-generatecontentitemlinkoid-string"><code>String generateContentItemLink(oid: String)</code></h5>
<p>Generates a link to the content item with the provided OID.</p>
<h5 id="string-geteditlinkitem-node"><code>String getEditLink(item: Node)</code></h5>
<p>This function generates a link for editing the provided content item is the link is available. If the link is not available, for example if the current user is not permitted to edit the item, an empty string is returned.</p>
<h4 id="functions-of-types-derivated-from-organizationalunit">Functions of types derivated from OrganizationalUnit</h4>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms/orgaunit.ftl</code>
</dd>
</dl>
<h5 id="sequence-getavailabletabsitem-node"><code>Sequence getAvailableTabs(item: Node)</code></h5>
<p>Returns a sequence of the information tabs available for the provided organizational unit item. For processing the return values of this functions the other functions provided by this file should be used.</p>
<h5 id="string-gettypenamekeyitem-node"><code>String getTypeNameKey(item: Node)</code></h5>
<p>Retrieves the type of the provided orga unit item.</p>
<h5 id="string-gettablabeltab-node"><code>String getTabLabel(tab: Node)</code></h5>
<p>Retrieves the label of the provided tab.</p>
<h5 id="boolean-istabselectedtab-node"><code>boolean isTabSelected(tab: Node)</code></h5>
<p>Checks if the provided tab is the currently selected tab.</p>
<h5 id="string-gettablinktab-node"><code>String getTabLink(tab: Node)</code></h5>
<p>Retrieves the link for the provided tab.</p>
<h5 id="node-getselectedtabitem-node"><code>Node getSelectedTab(item: Node)</code></h5>
<p>Retrieves the data of the selected tab.</p>
<h5 id="string-gettypeofselectedtabitem-node"><code>String getTypeOfSelectedTab(item: Node)</code></h5>
<p>Returns the type of the selected tab.</p>
<h5 id="node-getpropertyfromtabtab-node"><code>Node getPropertyFromTab(tab: Node)</code></h5>
<p>Returns a property from the provided tab.</p>
<h5 id="mixed-gettabcontenttab-node"><code>Mixed getTabContent(tab: Node)</code></h5>
<p>Returns the content of the provided tab.</p>
<h5 id="string-getaddedumdata-node"><code>String getAddedum(data: Node)</code></h5>
<p>Retrieves the value of the addendum property from the provided tab data (as returned by <code>getTabContent</code>) if the data contains such a property.</p>
<h5 id="sequence-getmembersdata-node">Sequence<Node> getMembers(data: Node)`</h5>
<p>Retrieves the members of the orga unit from the provided tab data (as returned by <code>getTabContent</code>) if the data contains such a property.</p>
<h5 id="string-getmemberrolemember-node"><code>String getMemberRole(member: Node)</code></h5>
<p>Retrieves the role of the provided member.</p>
<h5 id="string-getmemberstatusmember-node"><code>String getMemberStatus(member: Node)</code></h5>
<p>Retrieves the status of the provided member.</p>
<h5 id="sequencenode-getcontactentriesmember-node"><code>Sequence&lt;Node&gt; getContactEntries(member: Node)</code></h5>
<p>Retrieves the contact entries of the provided member. For processing the members the functions provided by <code>person.ftl</code> can be used.</p>
<h5 id="boolean-hasorgaunitcontactdata-node"><code>boolean hasOrgaUnitContact(data: Node)</code></h5>
<p>Returns <code>true</code> if the provided data contains a contact item.</p>
<h5 id="node-getorgaunitcontactdata-node"><code>Node getOrgaUnitContact(data: Node)</code></h5>
<p>Retrieves the contact item for the orga unit from the provided data.</p>
<h5 id="node-getorgaunitcontactpersondata-node"><code>Node getOrgaUnitContactPerson(data: Node)</code></h5>
<p>Retrieves the person associated with the provided contact.</p>
<h5 id="node-getorgaunitcontactentriesdata-node"><code>Node getOrgaUnitContactEntries(data: Node)</code></h5>
<p>Retrieves the contact entries of the provided contact item. For further processing the functions provided by the <code>ccm-cms-types-contact</code> module should be used.</p>
<h4 id="functions-for-person-items">Functions for person items</h4>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms/person.ftl</code>
</dd>
</dl>
<p>This functions can be used to process content items derivated from the <code>GenericPerson</code> type.</p>
<h5 id="string-getsurnameitem-node"><code>String getSurname(item: Node)</code></h5>
<p>Gets the surname from the provided person item.</p>
<h5 id="string-getgivennameitem-node"><code>String getGivenName(item: Node)</code></h5>
<p>Gets the given name from the provided person item.</p>
<h5 id="string-gettitlepreitem-node"><code>String getTitlePre(item: Node)</code></h5>
<p>Gets the value of the <code>titlePre</code> property of the provided person item.</p>
<h5 id="string-gettitlepostitem-node"><code>String getTitlePost(item: Node)</code></h5>
<p>Gets the value of the <code>titlePost</code> property of the provided person item.</p>
<h5 id="string-gethomepagelinkitem-node-contacttype-stringcommoncontact-entry-stringhomepage"><code>String getHomepageLink(item: Node, contactType: string=&quot;commonContact&quot;, entry: String=&quot;homepage&quot;)</code></h5>
<p>Retrieves the link to the homepage of the provided person item if the item has an contact entry for a homepage. The optional parameters <code>contactType</code> and <code>entry</code> can be used to select the contact and the entry from which the value is read. The default value for <code>contactType</code> is <code>commonContact</code>. For <code>entry</code> the default value is <code>homepage</code>.</p>
<h5 id="string-getaddressitem-node-contacttype-stringcommoncontact"><code>String getAddress(item: Node, contactType: String=&quot;commonContact&quot;)</code></h5>
<p>Retrieves the addres item associated with contact of the provided person. The contact to use can be selected using the optional parameters <code>contactType</code>. The default value is <code>commonContact</code>. # Functions for File Attachments</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms-assets-fileattachments.ftl</code>
</dd>
</dl>
<p>This module provides functions for dealing with file attachments. A possible usage these functions:</p>
<pre><code>&lt;#list FileAttachments.getFileAttachments(item)&gt;
&lt;div class=&quot;file-attachments&quot;&gt;
&lt;h2&gt;
${getLocalizedText(&quot;layout.page.main.fileAttachments&quot;)}
&lt;/h2&gt;
&lt;ul class=&quot;file-attachments&quot;&gt;
&lt;#items as file&gt;
&lt;#if FileAttachments.getFileType(file) == &quot;caption&quot;&gt;
&lt;li class=&quot;caption&quot;&gt;
&lt;strong&gt;${FileAttachments.getFileName(file)}&lt;/strong&gt;
&lt;p&gt;
${FileAttachments.getFileDescription(file)}
&lt;/p&gt;
&lt;/li&gt;
&lt;#else&gt;
&lt;li class=&quot;file-attachment&quot;&gt;
&lt;a href=&quot;${FileAttachments.getFileUrl(file)}&quot;&gt;
&lt;span class=&quot;fa fa-download&quot;&gt;&lt;/span&gt;
${FileAttachments.getFileDescription(file)}
(${FileAttachments.getMimeTypeFileExtension(file)},
${FileAttachments.getFileSize(file, &quot;KiB&quot;)} KB)
&lt;/a&gt;
&lt;/li&gt;
&lt;/#if&gt;
&lt;/#items&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/#list&gt;</code></pre>
<h4 id="getfileattachmentsitem-node-sequencenode"><code>getFileAttachments(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Retrieves the file attachments of the provided content item.</p>
<h4 id="getfiletypefile-node-string"><code>getFileType(file: Node): String</code></h4>
<p>Returns the type of the file attachments which is either <code>caption</code> or <code>file</code>.</p>
<h4 id="getmimetypefile-node-string"><code>getMimeType(file: Node): String</code></h4>
<p>Returns the mime type of the file, for example <code>image/png</code> or <code>application/pdf</code>.</p>
<h4 id="getmimetypefileextensionfile-node-string"><code>getMimeTypeFileExtension(file: Node): String</code></h4>
<p>Returns the usual file extension for the mime type of the file.</p>
<h4 id="getfilesizefile-node-unit-string-byte-number"><code>getFileSize(file: Node, unit: String = &quot;byte&quot;): Number</code></h4>
<p>Returns the size of the provided file. The unit in which the size of the file is returned can be changed by using the optional parameter <code>unit</code>. The default value for the unit is <code>byte</code>.</p>
<h4 id="getfileidfile-node-string"><code>getFileId(file: Node): String</code></h4>
<p>Returns the ID of the file.</p>
<h4 id="getfilenamefile-node-string"><code>getFileName(file: Node): String</code></h4>
<p>Returns the name of file.</p>
<h4 id="getfiledescriptionfile-node-string"><code>getFileDescription(file: Node): String</code></h4>
<p>Returns the description of the file.</p>
<h6 id="getfileurlfile-node-string"><code>getFileUrl(file: Node): String</code></h6>
<p>Returns the URL of the file.</p>
<h3 id="freemarker-functions-for-image-attachments">Freemarker functions for Image Attachments</h3>
<p>Provides functions for dealing with image attachments of a content item.</p>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-assets-imagestep.ftl&quot;</code>
</dd>
</dl>
<p>Example usage:</p>
<pre><code>&lt;#import &quot;/ccm-cms-assets-imagestep.ftl&quot; as Images&gt;
&lt;#list Images.getImageAttachments(item)&gt;
&lt;div class=&quot;image-attachments&quot;&gt;
&lt;#items as image&gt;
&lt;figure&gt;
&lt;div&gt;
&lt;a data-fancybox=&quot;gallery&quot;&gt;
&lt;img src=&quot;${Images.getImageUrl(image)}&quot;
width=&quot;100%&quot;
height=&quot;auto&quot; /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;figcaption&gt;
${Images.getImageCaption(image)}
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/#items&gt;
&lt;/div&gt;
&lt;/#list&gt;</code></pre>
<h4 id="getimageattachmentsitem-node-sequencenode"><code>getImageAttachments(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Get the image attachments of the provided content item.</p>
<h4 id="getimageidimage-node-string"><code>getImageId(image: Node): String</code></h4>
<p>Gets the ID of the provided image.</p>
<h4 id="getimagenameimage-node-string"><code>getImageName(image: Node): String</code></h4>
<p>Gets the name of the provided image.</p>
<h4 id="getimagecaptionimage-node-string"><code>getImageCaption(image: Node): String</code></h4>
<p>Gets the caption of the provided image.</p>
<h6 id="getimagesortkeyimage-node-string"><code>getImageSortKey(image: Node): String</code></h6>
<p>Gets the sort key of the provided image.</p>
<h4 id="getimagewidthimage-node-string"><code>getImageWidth(image: Node): String</code></h4>
<p>Gets the width of the provided image.</p>
<h6 id="getimageheightimage-node-string"><code>getImageHeight(image: Node): String</code></h6>
<p>Gets the height of the provided image.</p>
<h4 id="getimageurlimage-node-string"><code>getImageUrl(image: Node): String</code></h4>
<p>Gets the URL of the provided image.</p>
<h3 id="freemarker-functions-for-sidenote-assets">Freemarker functions for Sidenote assets</h3>
<p>Functions for processing note assets assigned to a content item.</p>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-assets-notes.ftl</code>
</dd>
</dl>
<h4 id="getnotesitem-node-sequencenode"><code>getNotes(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the notes assigned to a content item.</p>
<h4 id="getcontentitem-node-string">`getContent(item: Node): String</h4>
<p>Gets the content of a note. The return value is the HTML content of the node. # Freemarker functions for related links</p>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-assets-relatedlinks</code>
</dd>
</dl>
<p>Functions for processing the related links assigned to a content item.</p>
<h4 id="getrelatedlinksitem-node-linklistname-string-none-sequencenode"><code>getRelatedLinks(item: Node, linkListName: String = &quot;NONE&quot;): Sequence&lt;Node&gt;</code></h4>
<p>Retrieves the related links assigned to a content item. Related links can be organized in named list. The optional parameters <code>linkListName</code> controls which list is used. If the parameter is omitted the default value <code>NONE</code> is used.</p>
<h4 id="getlinktypelink-node-string"><code>getLinkType(link: Node): String</code></h4>
<p>Gets the type of the provided link which can either be <code>externalLink</code>, <code>internalLink</code> or <code>caption</code>.</p>
<h4 id="getlinktitlelink-node-string"><code>getLinkTitle(link: Node): String</code></h4>
<p>Gets the title of the provided link.</p>
<h4 id="getlinkdescriptionlink-node-string"><code>getLinkDescription(link: Node): String</code></h4>
<p>Gets the description of the provided link.</p>
<h4 id="getlinkorderlink-node-string"><code>getLinkOrder(link: Node): String</code></h4>
<p>Gets the order value for the provided link.</p>
<h4 id="getinternallinkparameterslink-node-string"><code>getInternalLinkParameters(link: Node): String</code></h4>
<p>Gets the URL parameters of the of the provided link (The part after the question mark).</p>
<h4 id="gettargeturilink-node-string"><code>getTargetUri(link: Node</code>): String</h4>
<p>Gets the URI of the target of the provided link.</p>
<h3 id="freemarker-functions-for-public-personal-profiles">Freemarker functions for Public Personal Profiles</h3>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-publicpersonalprofile.md</code>
</dd>
</dl>
<p>Functions for processing the data of a public personal profile.</p>
<h4 id="getprofileownerdata-node-node"><code>getProfileOwner(data: Node): Node</code></h4>
<p>Get the data about the profile owner. The return value is a XML node which can be further processed with other functions.</p>
<h4 id="getprofileownersurnameowner-node-string"><code>getProfileOwnerSurname(owner: Node): String</code></h4>
<p>Gets the surname of a profile owner.</p>
<h4 id="getprofileownergivennameowner-node-string"><code>getProfileOwnerGivenName(owner: Node): String</code></h4>
<p>Gets the given name of a profile owner.</p>
<h4 id="getprofileownertitlepreowner-node-string"><code>getProfileOwnerTitlePre(owner: Node): String</code></h4>
<p>Gets the titles a profile owner.</p>
<h4 id="getprofileownertitlepostowner-node-string"><code>getProfileOwnerTitlePost(owner: Node): String</code></h4>
<p>Gets the titles a profile owner.</p>
<h4 id="getprofilepositiondata-node-string"><code>getProfilePosition(data: Node): String</code></h4>
<p>Returns the value of the <code>position</code> property of a profile.</p>
<h4 id="getprofileinterestsdata-node-string"><code>getProfileInterests(data: Node): String</code></h4>
<p>Returns the value of the <code>interests</code> property of a profile.</p>
<h4 id="getprofilemiscdata-node-string"><code>getProfileMisc(data: Node): String</code></h4>
<p>Returns the value of the <code>misc</code> property of a profile.</p>
<h4 id="getprofileownercontactowner-node-node"><code>getProfileOwnerContact(owner: Node): Node</code></h4>
<p>Gets the contact data of the owner. The contact data is in the same format as a content item of the type <code>ccm-cms-types-contact</code>. The returned data can be processed further using the functions for content items of the type <code>ccm-cms-types-contact?</code>. The functions provided by the <code>ccm-cms-types-contact</code> module can be used to process this data.</p>
<h4 id="getprofileimagedata-node-string"><code>getProfileImage(data: Node): String</code></h4>
<p>Returns the data of the image attached to the profile, if any. The returned data is a image attachement which can be processed further by the functions provided for processing image assets (see <code>ccm-cms-assets-imagestep</code>).</p>
<h4 id="getprofileownernamedata-node-string"><code>getProfileOwnerName(data: Node): String</code></h4>
<p>Gets the name of the profile owner which is the name of the content item of the type <code>Person</code> assigned to the profile.</p>
<h4 id="getpersonalpublicationsdata-node-sequencenode"><code>getPersonalPublications(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the data about the personal publications of the profile owner, organized in publications groups.</p>
<h4 id="getpersonalpublicationsavailablepublicationgroupsdata-node-sequencenode"><code>getPersonalPublicationsAvailablePublicationGroups(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Get the available publications groups. The items of the sequence can be processed further using <code>getPublicationGroupId</code> and <code>getPublicationGroupLink</code>.</p>
<h4 id="getpublicationgroupidgroup-node-string"><code>getPublicationGroupId(group: Node): String</code></h4>
<p>Returns the ID of the publication group.</p>
<h4 id="getpublicationgrouplinkgroup-node-string"><code>getPublicationGroupLink(group: Node): String</code></h4>
<p>Returns the link for showing the publications of the group.</p>
<h4 id="getpublicationgroupsdata-node-sequencenode"><code>getPublicationGroups(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Get all publication groups currently displayed.</p>
<h4 id="getpublicationsofgroupdata-node-sequencenode"><code>getPublicationsOfGroup(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the publiations of a group. The publication can be processed further by the functions provided by <code>ccm-sci-publications</code>.</p>
<h4 id="haspublicationspaginatorprofile-node-boolean"><code>hasPublicationsPaginator(profile: Node): boolean</code></h4>
<p>Determines if there is paginator for the current publication group.</p>
<h4 id="getpublicationspaginatorbaseurlprofile-node-string"><code>getPublicationsPaginatorBaseUrl(profile: Node): String</code></h4>
<p>Returns the base URL for the publications paginator.</p>
<h4 id="getpublicationspaginatorpagecountprofile-node-string"><code>getPublicationsPaginatorPageCount(profile: Node): String</code></h4>
<p>Returns the number of pages from the publications paginatator.</p>
<h4 id="getpublicationspaginatorpagenumberprofile-node-string"><code>getPublicationsPaginatorPageNumber(profile: Node): String</code></h4>
<p>Returns the current page of the current publication group.</p>
<h4 id="getpublicationspaginatorpageparamprofile-node-string"><code>getPublicationsPaginatorPageParam(profile: Node): String</code></h4>
<p>Gets the name of the URL parameter for changing the current page.</p>
<h4 id="getpublicationspaginatorpagesizeprofile-node-string"><code>getPublicationsPaginatorPageSize(profile: Node): String</code></h4>
<p>Gets the page size.</p>
<h4 id="getpublicationspaginatorobjectbeginprofile-node-string"><code>getPublicationsPaginatorObjectBegin(profile: Node): String</code></h4>
<p>Gets the index of the first displayed item of current publication group.</p>
<h4 id="getpublicationspaginatorobjectcountprofile-node-string"><code>getPublicationsPaginatorObjectCount(profile: Node): String</code></h4>
<p>Gets the index of the number of items in the current publication group.</p>
<h4 id="getpublicationspaginatorobjectendprofile-node-string"><code>getPublicationsPaginatorObjectEnd(profile: Node): String</code></h4>
<p>Gets the index of the last displayed item of current publication group.</p>
<h4 id="getpublicationspaginatorprevpagelinkprofile-node-string"><code>getPublicationsPaginatorPrevPageLink(profile: Node): String</code></h4>
<p>Gets the link to the previous page of the current publication group.</p>
<h4 id="getpublicationspaginatonfirstpagelinkprofile.-node-string"><code>getPublicationsPaginatonFirstPageLink(profile. Node): String</code></h4>
<p>Gets the link the first page of the current publication group.</p>
<h4 id="getpublicationspaginatornextpagelinkprofile-node-string"><code>getPublicationsPaginatorNextPageLink(profile: Node): String</code></h4>
<p>Gets the link to the next page of the current publication group.</p>
<h4 id="getpublicationspaginatorlastpagelinkprofile-node-string"><code>getPublicationsPaginatorLastPageLink(profile: Node): String</code></h4>
<p>Gets the link to the last page of the current publication group.</p>
<h4 id="getavailableprojectgroupsdata-node-sequencenode"><code>getAvailableProjectGroups(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the available project groups. The sequence can be processed further using <code>getProjectGroupId</code> and <code>getProjectGroupLink</code>.</p>
<h4 id="getprojectgroupidgroup-node-string"><code>getProjectGroupId(group: Node): String</code></h4>
<p>Returns the ID of the Project group.</p>
<h4 id="getprojectgrouplinkgroup-node-string"><code>getProjectGroupLink(group: Node): String</code></h4>
<p>Returns the link for showing the Projects of the group.</p>
<h6 id="getprojectgroupsdata-node-string"><code>getProjectGroups(data: Node): String</code></h6>
<p>Gets all project groups currently displayed.</p>
<h4 id="getprojectsofgroupdata-node-sequencenode"><code>getProjectsOfGroup(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the projects of a group. The projects can be processed further by the functions provided by <code>ccm-sci-types-project</code>.</p>
<h4 id="hasprojectspaginatorprofile-node-boolean"><code>hasProjectsPaginator(profile: Node): boolean</code></h4>
<p>Determines if the current project group has a paginator.</p>
<h4 id="getprojectspaginatorbaseurlprofile-node-string"><code>getProjectsPaginatorBaseUrl(profile: Node): String</code></h4>
<p>Returns the base URL for the projects paginator.</p>
<h4 id="getprojectspaginatorpagecountprofile-node-string"><code>getProjectsPaginatorPageCount(profile: Node): String</code></h4>
<p>Returns the number of pages from the project paginatator.</p>
<h4 id="getprojectspaginatorpagenumberprofile-node-string"><code>getProjectsPaginatorPageNumber(profile: Node): String</code></h4>
<p>Returns the current page of the current project group.</p>
<h4 id="getprojectspaginatorpageparamprofile-node-string"><code>getProjectsPaginatorPageParam(profile: Node): String</code></h4>
<p>Gets the name of the URL parameter for changing the current page.</p>
<h4 id="getprojectspaginatorpagesizeprofile-node-string"><code>getProjectsPaginatorPageSize(profile: Node): String</code></h4>
<p>Gets the page size.</p>
<h4 id="getprojectspaginatorobjectbeginprofile-node-string"><code>getProjectsPaginatorObjectBegin(profile: Node): String</code></h4>
<p>Gets the index of the first displayed item of current project group.</p>
<h4 id="getprojectspaginatorobjectcountprofile-node-string"><code>getProjectsPaginatorObjectCount(profile: Node): String</code></h4>
<p>Gets the number of items in the current project group.</p>
<h4 id="getprojectspaginatorobjectendprofile-node-string"><code>getProjectsPaginatorObjectEnd(profile: Node): String</code></h4>
<p>Gets the index of the last displayed item of current project group.</p>
<h4 id="getprojectspaginatorprevpagelinkprofile-node-string"><code>getProjectsPaginatorPrevPageLink(profile: Node): String</code></h4>
<p>Gets the link to the previous page of the current project group.</p>
<h4 id="getprojectspaginatonfirstpagelinkprofile-node-string"><code>getProjectsPaginatonFirstPageLink(profile: Node): String</code></h4>
<p>Gets the link the first page of the current project group.</p>
<h4 id="getprojectspaginatornextpagelinkprofile-node-string"><code>getProjectsPaginatorNextPageLink(profile: Node): String</code></h4>
<p>Gets the link to the next page of the current project group.</p>
<h4 id="getprojectspaginatorlastpagelinkprofile-node-string"><code>getProjectsPaginatorLastPageLink(profile: Node): String</code></h4>
<p>Gets the link to the last page of the current project group. # Freemarker functions for ccm-cms-types-address</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms-type-address.ftl</code>
</dd>
</dl>
<h4 id="getaddresstextitem-node-string"><code>getAddressText(item: Node): String</code></h4>
<p>Returns the value of the <code>text</code> property of the address.</p>
<h4 id="getcityitem-node-string"><code>getCity(item: Node): String</code></h4>
<p>Returns the value of the <code>city</code> property of the address.</p>
<h4 id="getpostalcodeitem-node-string"><code>getPostalCode(item: Node): String</code></h4>
<p>Gets the postal code of the address.</p>
<h4 id="getstateitem-node-string"><code>getState(item: Node): String</code></h4>
<p>Gets the value of the <code>state</code> property of the address. (state means the a federal state or the equivialent here, for example California in the USA oder Lower Saxony in Germany)</p>
<h4 id="getcountryitem-node-string"><code>getCountry(item: Node): String</code></h4>
<p>The country of the address.</p>
<h4 id="getisocountrycodeitem-node-string"><code>getIsoCountryCode(item: Node): String</code></h4>
<p>Gets the ISO country code for the country of the address. # Freemarker functions for Article content items</p>
<h4 id="getleaditem-node-string"><code>getLead(item: Node): String</code></h4>
<p>Retrieves the lead text of the provided article.</p>
<h4 id="getmaintextitem-node-string"><code>getMainText(item: Node): String</code></h4>
<p>Retrieves the main text of the provided item. The return value is a HTML string. # Freemarker functions for Contact items</p>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-types-contact.ftl</code>
</dd>
</dl>
<h4 id="getaddressitem-node-node"><code>getAddress(item: Node): Node</code></h4>
<p>Returns the address associated wit the provided contact item. The address can be processed further using the functions provided by the ccm-cms-types-address module.</p>
<h4 id="getpersonitem-node-node"><code>getPerson(item: Node): Node</code></h4>
<p>Returns the person associated with the provided contact. The returned person item can be processed further using functions provided by the ccm-cms module.</p>
<h4 id="getcontactentriesitem-node-sequencenode"><code>getContactEntries(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the contact entries of the provided contact.</p>
<h4 id="getcontactentryitem-node-keyid-string-node"><code>getContactEntry(item: Node, keyId: String): Node</code></h4>
<p>Returns the contact entry with the provided <code>keyId</code> if the provided contact has a matching contact entry. If not <code>null</code> is returned.</p>
<h4 id="getcontactentrylabelentry-node-string"><code>getContactEntryLabel(entry: Node): String</code></h4>
<p>Returns the label of the provided contact entry.</p>
<h4 id="getcontactentryvalueentry-node-string"><code>getContactEntryValue(entry: Node): String</code></h4>
<p>Returns the value of the provided contact entry. # Freemarker functions for Article content items</p>
<h4 id="getleaditem-node-string-1"><code>getLead(item: Node): String</code></h4>
<p>Retrieves the lead text of the provided article.</p>
<h4 id="getmaintextitem-node-string-1"><code>getMainText(item: Node): String</code></h4>
<p>Retrieves the main text of the provided item. The return value is a HTML string. # Freemarker functions for Bookmark items</p>
<h4 id="getdescriptionitem-node-string"><code>getDescription(item: Node): String</code></h4>
<p>Gets the description of the bookmark.</p>
<h4 id="getlinkitem-node-string"><code>getLink(item: Node): String</code></h4>
<p>Gets the link for the bookmark's target.</p>
<h3 id="freemarker-functions-for-contact-items">Freemarker functions for Contact items</h3>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-types-contact.ftl</code>
</dd>
</dl>
<h4 id="getaddressitem-node-node-1"><code>getAddress(item: Node): Node</code></h4>
<p>Returns the address associated wit the provided contact item. The address can be processed further using the functions provided by the ccm-cms-types-address module.</p>
<h4 id="getpersonitem-node-node-1"><code>getPerson(item: Node): Node</code></h4>
<p>Returns the person associated with the provided contact. The returned person item can be processed further using functions provided by the ccm-cms module.</p>
<h4 id="getcontactentriesitem-node-sequencenode-1"><code>getContactEntries(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the contact entries of the provided contact.</p>
<h4 id="getcontactentryitem-node-keyid-string-node-1"><code>getContactEntry(item: Node, keyId: String): Node</code></h4>
<p>Returns the contact entry with the provided <code>keyId</code> if the provided contact has a matching contact entry. If not <code>null</code> is returned.</p>
<h4 id="getcontactentrylabelentry-node-string-1"><code>getContactEntryLabel(entry: Node): String</code></h4>
<p>Returns the label of the provided contact entry.</p>
<h4 id="getcontactentryvalueentry-node-string-1"><code>getContactEntryValue(entry: Node): String</code></h4>
<p>Returns the value of the provided contact entry. # Freemarker functions for Event items</p>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-types-event.ftl</code>
</dd>
</dl>
<h4 id="getleaditem-node-string-2"><code>getLead(item: Node): String</code></h4>
<p>Returns the lead text of the event.</p>
<h4 id="getmaintextitem-node-string-2"><code>getMainText(item: Node): String</code></h4>
<p>Returns the main text of the event.</p>
<h4 id="getenddateitem-node-datetimenode"><code>getEndDate(item: Node): DateTimeNode</code></h4>
<p>Returns the end date of the provided event item. To format the date the <code>formatDateTime</code> function provided by the ccm-cms module should be used.</p>
<h4 id="getenddateyearitem-node-string"><code>getEndDateYear(item: Node): String</code></h4>
<p>Returns the year part of the end date of the event.</p>
<h4 id="getenddatemonthitem-node-string"><code>getEndDateMonth(item: Node): String</code></h4>
<p>Returns the month part of the end date of the event.</p>
<h4 id="getenddateshortmonthitem-node-string"><code>getEndDateShortMonth(item: Node): String</code></h4>
<p>Returns the the short name of month part of the end date of the event.</p>
<h4 id="getendtimeitem-node-string"><code>getEndTime(item: Node): String</code></h4>
<p>Gets the end time of the event.</p>
<h4 id="getendtimehouritem-node-string"><code>getEndTimeHour(item: Node): String</code></h4>
<p>Gets the hour part of the end time of the event.</p>
<h4 id="getendtimeminuteitem-node-string"><code>getEndTimeMinute(item: Node): String</code></h4>
<p>Gets the minute part of the end time of the event.</p>
<h4 id="getendtimeseconditem-node-string"><code>getEndTimeSecond(item: Node): String</code></h4>
<p>Gets the second part of the end time of the event.</p>
<h4 id="getstartdateitem-node-datetimenode"><code>getStartDate(item: Node): DateTimeNode</code></h4>
<p>Returns the start date of the provided event item. To format the date the <code>formatDateTime</code> function provided by the ccm-cms module should be used.</p>
<h4 id="getstartdateyearitem-node-string"><code>getStartDateYear(item: Node): String</code></h4>
<p>Returns the year part of the start date of the event.</p>
<h4 id="getstartdatemonthitem-node-string"><code>getStartDateMonth(item: Node): String</code></h4>
<p>Returns the month part of the start date of the event.</p>
<h4 id="getstartdateshortmonthitem-node-string"><code>getStartDateShortMonth(item: Node): String</code></h4>
<p>Returns the the short name of month part of the start date of the event.</p>
<h4 id="getstarttimeitem-node-string"><code>getStartTime(item: Node): String</code></h4>
<p>Gets the start time of the event.</p>
<h4 id="getstarttimehouritem-node-string"><code>getStartTimeHour(item: Node): String</code></h4>
<p>Gets the hour part of the start time of the event.</p>
<h4 id="getstarttimeminuteitem-node-string"><code>getStartTimeMinute(item: Node): String</code></h4>
<p>Gets the minute part of the start time of the event.</p>
<h4 id="getstarttimeseconditem-node-string"><code>getStartTimeSecond(item: Node): String</code></h4>
<p>Gets the second part of the start time of the event.</p>
<h4 id="getlocationitem-node-string"><code>getLocation(item: Node): String</code></h4>
<p>Gets the location of the event.</p>
<h4 id="getmaincontributoritem-node-string"><code>getMainContributor(item: Node): String</code></h4>
<p>Gets the value of the <code>mainContributor</code> property of the event.</p>
<h4 id="geteventtypeitem-node-string"><code>getEventType(item: Node): String</code></h4>
<p>Returns the value of the <code>eventType</code> property of the event.</p>
<h4 id="getcostitem-node-string"><code>getCost(item: Node): String</code></h4>
<p>Returns the value of the <code>cost</code> property of the event.</p>
<h4 id="getmaplinkitem-node-string"><code>getMapLink(item: Node): String</code></h4>
<p>Returns the value of the <code>mapLink</code> property of the event.</p>
<h4 id="geteventdateaddendumitem-node-string"><code>getEventDateAddendum(item: Node): String</code></h4>
<p>Returns the value of the addendum property of the event. # Freemarker functions for ExternalLink items</p>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-types-externallink.ftl</code>
</dd>
</dl>
<h4 id="getdescriptionitem-node-string-1"><code>getDescription(item: Node): String</code></h4>
<p>Gets the description of the external link item.</p>
<h4 id="getcommentitem-node-string"><code>getComment(item: Node): String</code></h4>
<p>Gets the value of the <code>comment</code> property of the link item.</p>
<h4 id="istargetnewwindowitem-node-string"><code>isTargetNewWindow(item: Node): String</code></h4>
<p>Returns <code>true</code> if the link should be opened in a new window/tab.</p>
<h4 id="geturlitem-node-string"><code>getUrl(item: Node): String</code></h4>
<p>Returns the URL of the external link. # Freemarker functions for File Storage Items</p>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-cms-types-filestorageitem.ftl</code>
</dd>
</dl>
<h4 id="getdescriptionitem-node-string-2"><code>getDescription(item: Node): String</code></h4>
<p>Gets the description of the file storage item.</p>
<h4 id="getfileiditem-node-string"><code>getFileId(item: Node): String</code></h4>
<p>Returns the ID for the file represented by the file storage item.</p>
<h4 id="getfilenameitem-node-string"><code>getFileName(item: Node): String</code></h4>
<p>Returns the name of the file represented by the file storage item.</p>
<h4 id="getfilelinkitem-node-mode-stringdownload-usefilename-boolean-true-string"><code>getFileLink(item: Node, mode: String=&quot;download&quot;, useFileName: boolean = true): String</code></h4>
<p>Returns the link for downloading or viewing the file. The optional parameter <code>mode</code> controls if the link for downloading or for viewing the file is generated. The supported values are <code>download</code> (default value) and <code>stream</code>. Unknown values are interpreted as <code>download</code>.</p>
<p>The optional <code>useFileName</code> parameter controls if the name of the file (see <code>getFileName</code>) is included in the link. The default value is <code>true</code>. # Freemarker functions for Form items</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms-types-formitem.md</code>
</dd>
</dl>
<h4 id="getdescriptionitem-node-string-3"><code>getDescription(item: Node): String</code></h4>
<p>Gets the description of the form item.</p>
<h4 id="getformactionitem-node-string"><code>getFormAction(item: Node): String</code></h4>
<p>Gets the URL to which the form is send.</p>
<h4 id="hashoneypotitem-node-boolean"><code>hasHoneypot(item: Node): boolean</code></h4>
<p>Returns <code>true</code> if the form contains a honeypot field for catching bots.</p>
<h4 id="gethoneypotnameitem-node-string"><code>getHoneypotName(item: Node): String</code></h4>
<p>Gets the name of the honeypot field.</p>
<h4 id="hasmintimecheckitem-node-boolean"><code>hasMinTimeCheck(item: Node): boolean</code></h4>
<p>Returns <code>true</code> if a check of the time the user needs to fill out the form should be added to the form. Bots are normally extremly fast (faster than any human).</p>
<h4 id="getmintimecheckvalueitem-node-string"><code>getMinTimeCheckValue(item: Node): String</code></h4>
<p>The minium time for the min time check.</p>
<h4 id="hasvisitedfielditem-node-boolean"><code>hasVisitedField(item: Node): boolean</code></h4>
<p>Returns <code>true</code> if a visited field is part of the form.</p>
<h4 id="getvisitedfielditem-node-string"><code>getVisitedField(item: Node): String</code></h4>
<p>Gets the value of the visited field.</p>
<h4 id="getvisitedfieldnameitem-node-string"><code>getVisitedFieldName(item: Node): String</code></h4>
<p>Returns the name of the visited field.</p>
<h4 id="getpagestatefieldnameitem-node-string"><code>getPageStateFieldName(item: Node): String</code></h4>
<p>Gets the name to use for the (hidden) field holding the page state.</p>
<h4 id="getpagestatefieldvalueitem-node-string"><code>getPageStateFieldValue(item: Node): String</code></h4>
<p>Gets the value of the (hidden) field holding the page state.</p>
<h4 id="getcomponentsitem-node-sequencenode"><code>getComponents(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the compnents of the form.</p>
<h4 id="getcomponentnamecomponent-node-string"><code>getComponentName(component: Node): String</code></h4>
<p>Returns the name of the provided component.</p>
<h4 id="getcomponentdefaultvaluecomponent-node-string"><code>getComponentDefaultValue(component: Node): String</code></h4>
<p>Returns the default value of the provided component.</p>
<h4 id="getcomponentdescriptioncomponent-node-string"><code>getComponentDescription(component: Node): String</code></h4>
<p>Returns the description of the provided component.</p>
<h4 id="getcomponentparameternamecomponent-node-string"><code>getComponentParameterName(component: Node): String</code></h4>
<p>Returns the parameter name of the provided component.</p>
<h4 id="getcomponenttypecomponent-node-string"><code>getComponentType(component: Node): String</code></h4>
<p>Returns the type of the provided component.</p>
<h4 id="getformsectiontitleformsection-node-string"><code>getFormSectionTitle(formSection: Node): String</code></h4>
<p>Gets the title of the provided form section.</p>
<h4 id="getformsectioncomponentsformsection-node-string"><code>getFormSectionComponents(formSection: Node): String</code></h4>
<p>Gets the components of the form section.</p>
<h4 id="getlabelcomponentslabel-node-sequencenode"><code>getLabelComponents(label: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the components of a label.</p>
<h4 id="getbuttongroupcomponentsbuttongroup-node-sequencenode"><code>getButtonGroupComponents(buttonGroup: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the components of a button group.</p>
<h4 id="ismultipleselectselect-node-boolean"><code>isMultipleSelect(select: Node): boolean</code></h4>
<p>Returns <code>true</code> if the provided select component allows multiple values.</p>
<h4 id="isdatadrivenselectselect-node-boolean"><code>isDataDrivenSelect(select: Node): boolean</code></h4>
<p>Returns <code>true</code> if the provided select component is a data driven select.</p>
<h4 id="getdataoptionsselect-node-sequencenode"><code>getDataOptions(select: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the options of a data driven select.</p>
<h4 id="getdataoptionlabeloption-node-string"><code>getDataOptionLabel(option: Node): String</code></h4>
<p>Gest the label of an option of an data driven select.</p>
<h4 id="getdataoptionidoption-node-string"><code>getDataOptionId(option: Node): String</code></h4>
<p>Gest the id of an option of an data driven select.</p>
<h4 id="getdataoptioncompoentsoption-node-sequencenode"><code>getDataOptionCompoents(option: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gest the components of an option of an data driven select.</p>
<h4 id="hasotheroptionselect-node-boolean"><code>hasOtherOption(select: Node): boolean</code></h4>
<p>Returns <code>true</code> if the provided select component has an <code>other</code> option.</p>
<h4 id="getotheroptionlabelselect-node-string"><code>getOtherOptionLabel(select: Node): String</code></h4>
<p>Returns the label for the <code>other</code> option.</p>
<h4 id="getotheroptionvalueselect-node-string"><code>getOtherOptionValue(select: Node): String</code></h4>
<p>Returns the value for the <code>other</code> option.</p>
<h4 id="hasmaxlengthcomponent-node-boolean"><code>hasMaxLength(component: Node): boolean</code></h4>
<p>Returns <code>true</code> if the provided component has a <code>maxLength</code> property.</p>
<h4 id="getmaxlengthcomponent-node-string"><code>getMaxLength(component: Node): String</code></h4>
<p>Gets the value of the <code>maxLength</code> property of the provided component.</p>
<h4 id="hassizecomponent-node-boolean"><code>hasSize(component: Node): boolean</code></h4>
<p>Returns <code>true</code> if the provided component has a <code>size</code> property.</p>
<h4 id="getmaxsizecomponent-node-string"><code>getMaxSize(component: Node): String</code></h4>
<p>Gets the value of the <code>size</code> property of the provided component.</p>
<h4 id="getrequiredcomponent-node-string"><code>getRequired(component: Node): String</code></h4>
<p>Determines of the provided component represents a mandantory field of the form.</p>
<h4 id="getdatefielddayparamnamecomponent-node-string"><code>getDateFieldDayParamName(component: Node): String</code></h4>
<p>Returns the name of the day param of a date input component.</p>
<h4 id="getdatefieldmonthparamnamecomponent-node-string"><code>getDateFieldMonthParamName(component: Node): String</code></h4>
<p>Returns the name of the month param of a date input component.</p>
<h4 id="getdatefieldyearparamnamecomponent-node-string"><code>getDateFieldYearParamName(component: Node): String</code></h4>
<p>Returns the name of the year param of a date input component.</p>
<h4 id="getdatefielddefaultvaluedaycomponent-node-string"><code>getDateFieldDefaultValueDay(component: Node): String</code></h4>
<p>Returns the default value for the day of the provided date input component.</p>
<h4 id="getdatefielddefaultvaluemonthcomponent-node-string"><code>getDateFieldDefaultValueMonth(component: Node): String</code></h4>
<p>Returns the default value for the month of the provided date input component.</p>
<h4 id="getdatefielddefaultvalueyearcomponent-node-string"><code>getDateFieldDefaultValueYear(component: Node): String</code></h4>
<p>Returns the default value for the year of the provided date input component.</p>
<h4 id="getdatefieldmonthlistcomponent-node-sequencenode"><code>getDateFieldMonthList(component: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the list of permitted months.</p>
<h4 id="getdatefieldyearlistcomponent-node-sequencenode"><code>getDateFieldYearList(component: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the list of permitted years.</p>
<h4 id="getmonthlabelmonth-node-string"><code>getMonthLabel(month: Node): String</code></h4>
<p>Gets the label for the provided month.</p>
<h4 id="getyearlabelyear-node-string"><code>getYearLabel(year: Node): String</code></h4>
<p>Gets the label for the provided year.</p>
<h4 id="gettextarearowstextarea-node-string"><code>getTextAreaRows(textArea: Node): String</code></h4>
<p>Gets the number of rows for the provided text area component.</p>
<h4 id="gettextareacolstextarea-node-string"><code>getTextAreaCols(textArea: Node): String</code></h4>
<p>Gets the number of cols for the provided text area component. # Freemarker functions for Image items</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms-types-image.ftl</code>
</dd>
</dl>
<h4 id="getartistitem-node-string"><code>getArtist(item: Node): String</code></h4>
<p>Returns the name of the artist how created the image.</p>
<h4 id="getcopyrightitem-node-string"><code>getCopyright(item: Node): String</code></h4>
<p>Returns the value of the <code>copyright</code> property of the image.</p>
<h4 id="getdescriptionitem-node-string-4"><code>getDescription(item: Node): String</code></h4>
<p>Returns the description of the image.</p>
<h4 id="getlicenseitem-node-string"><code>getLicense(item: Node): String</code></h4>
<p>Returns the license text for the image.</p>
<h4 id="getmaterialitem-node-string"><code>getMaterial(item: Node): String</code></h4>
<p>Gets the value of the <code>material</code> property of the image.</p>
<h4 id="getpublishdateitem-node-string"><code>getPublishDate(item: Node): String</code></h4>
<p>Gets the publish date of the image.</p>
<h4 id="getwidthitem-node-string"><code>getWidth(item: Node): String</code></h4>
<p>Gets the value of the <code>width</code> property of the image.</p>
<h4 id="getheightitem-node-string"><code>getHeight(item: Node): String</code></h4>
<p>Gets the value of the <code>height</code> property of the image.</p>
<h4 id="getmaintextitem-node-htmlstring"><code>getMainText(item: Node): HTMLString</code></h4>
<p>Gets the main text describing the image.</p>
<h4 id="getoriginitem-node-string"><code>getOrigin(item: Node): String</code></h4>
<p>Gets the value of the <code>origin</code> property of the image.</p>
<h4 id="getoriginalsizeitem-node-string"><code>getOriginalSize(item: Node): String</code></h4>
<p>Gets the original size of the image.</p>
<h4 id="geturlitem-node-string-1">`getUrl(item: Node): String</h4>
<p>Returns the URL of the image resource.</p>
<h4 id="getcaptionitem-node-string"><code>getCaption(item: Node): String</code></h4>
<p>Returns the caption of the image.</p>
<h4 id="getimageiditem-node-string"><code>getImageId(item: Node): String</code></h4>
<p>Gets the ID of the image resource.</p>
<h4 id="getthumbnailiditem-node-string"><code>getThumbnailId(item: Node): String</code></h4>
<p>Gets the ID of the thumbnail image.</p>
<h4 id="getthumbnailwidthitem-node-string"><code>getThumbnailWidth(item: Node): String</code></h4>
<p>Gets the width of the thumbnail.</p>
<h4 id="getthumbnailheightitem-node-string"><code>getThumbnailHeight(item: Node): String</code></h4>
<p>Gets the height of the thumbnail.</p>
<h4 id="getsiteitem-node-string"><code>getSite(item: Node): String</code></h4>
<p>Gets the value of the <code>site</code> property of the image.</p>
<h4 id="getsourceitem-node-string"><code>getSource(item: Node): String</code></h4>
<p>Gets the value of the <code>source</code> property of the image.</p>
<h4 id="gettechniqueitem-node-string"><code>getTechnique(item: Node): String</code></h4>
<p>Gets the value of the <code>technique</code> property of the image. # Freemarker functions for MultiPartArticles</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms-types-multiparticle.ftl</code>
</dd>
</dl>
<h4 id="getsummaryitem-node-string"><code>getSummary(item: Node): String</code></h4>
<p>Returns the summary of the provided MultiPartArticle item.</p>
<h4 id="getsectionsitem-node-sequencenode"><code>getSections(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the currently displayed sections of the multipart article. The sections can be processed further by some of the other funtions provided by this library.</p>
<h4 id="getsectiontitlesection-node-string"><code>getSectionTitle(section: Node): String</code></h4>
<p>Returns title title of the provided section.</p>
<h4 id="getsectiontitlesection-node-htmlstring"><code>getSectionTitle(section: Node): HtmlString</code></h4>
<p>Gets the content of the provided section.</p>
<h4 id="getsectionranksection-node-string"><code>getSectionRank(section: Node): String</code></h4>
<p>Gets the value of the <code>rank</code> property of the provided section.</p>
<h4 id="getpagenumberitem-node-string"><code>getPageNumber(item: Node): String</code></h4>
<p>Gets the number of the page of the multipart article displayed.</p>
<h4 id="getnumberofpagesitem-node-string"><code>getNumberOfPages(item: Node): String</code></h4>
<p>Returns the number of pages of the provided multipart article.</p>
<h4 id="haspreviouspageitem-node-boolean"><code>hasPreviousPage(item: Node): boolean</code></h4>
<p>Returns <code>true</code> if the provided multipart article has previous pages.</p>
<h4 id="haspreviouspageitem-node-boolean-1"><code>hasPreviousPage(item: Node): boolean</code></h4>
<p>Returns <code>true</code> if the provided multipart article has more pages.</p>
<h4 id="hasmultiplepagesitem-node-boolean"><code>hasMultiplePages(item: Node): boolean</code></h4>
<p>Returns <code>true</code> if the provided multipart article has more than one page.</p>
<h4 id="getlinktopreviouspageitem-node-string"><code>getLinkToPreviousPage(item: Node): String</code></h4>
<p>Returns the link to the previous page if any.</p>
<h4 id="getlinktonextpageitem-node-string"><code>getLinkToNextPage(item: Node): String</code></h4>
<p>Returns the link to the next page if any.</p>
<h4 id="getallsectionslinkitem-node-string"><code>getAllSectionsLink(item: Node): String</code></h4>
<p>Returns the link for showing the complete multipart article on a single page. # Freemarker functions for generating the table of contents of a MultiPartArticle</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms-types-multiparticle-toc.ftl</code>
</dd>
</dl>
<p>These functions can be used to generate the table of contents (toc) for a multi part article. An example:</p>
<pre><code>... // Other imports
&lt;#import &quot;/ccm-cms-types-multiparticle-toc.ftl&quot; as Toc&gt;
... // Other things
&lt;#list Toc.getSections(item)&gt;
&lt;div class=&quot;mpa-toc&quot;&gt;
&lt;h3&gt;${getLocalizedText(&quot;mpa.toc&quot;)}&lt;/h3&gt;
&lt;ul class=&quot;mpa-toc&quot;&gt;
&lt;#items as section&gt;
&lt;li&gt;
&lt;a href=&quot;${Toc.getSectionLink(section)}&quot;
class=&quot;${Toc.isActiveSection(item, section)?then(&#39;active&#39;, &#39;&#39;)}&quot;&gt;
${Toc.getSectionTitle(section)}
&lt;/a&gt;
&lt;/li&gt;
&lt;/#items&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/#list&gt;</code></pre>
<h4 id="getsectionsitem-node-sequencenode-1"><code>getSections(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the sections of the provided MultiPartArticle item. The sections can be further be processed using the other functions provided by this file.</p>
<h4 id="getsectiontitlesection-node-string-1"><code>getSectionTitle(section: Node): String</code></h4>
<p>Gets the title of the provided section.</p>
<h4 id="getsectionlinksection-node-string"><code>getSectionLink(section: Node): String</code></h4>
<p>Gets the link for displaying the provided section.</p>
<h4 id="isactivesectionsection-node-string"><code>isActiveSection(section: Node): String</code></h4>
<p>Returns <code>true</code> if the provided section is the active section. # Freemarker functions for News items</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms-types-newsitem.ftl</code>
</dd>
</dl>
<h4 id="getleaditem-node-string-3"><code>getLead(item: Node): String</code></h4>
<p>Returns the lead text of the provided news item.</p>
<h4 id="getmaintextitem-node-htmlstring-1"><code>getMainText(item: Node): HtmlString</code></h4>
<p>Returns the main text of the news item.</p>
<h4 id="getnewsdateitem-node-node"><code>getNewsDate(item: Node): Node</code></h4>
<p>Returns the date of the news. For formatting the date the <code>formatDateTime</code> function from the <code>utils.ftl</code> library can be used.</p>
<h4 id="getnewsdateyearitem-node-string"><code>getNewsDateYear(item: Node): String</code></h4>
<p>Gets the value of the <code>year</code> property of the news date.</p>
<h4 id="getnewsdatemonthitem-node-string"><code>getNewsDateMonth(item: Node): String</code></h4>
<p>Gets the value of the <code>month</code> property of the news date.</p>
<h4 id="getnewsdatedayitem-node-string"><code>getNewsDateDay(item: Node): String</code></h4>
<p>Gets the value of the <code>Day</code> property of the news date.</p>
<h4 id="getnewsdatedaynameshortitem-node-string"><code>getNewsDateDayNameShort(item: Node): String</code></h4>
<p>Gets the value of the <code>year</code> property of the news date as short day name.</p>
<h4 id="newsdatehouritem-node-string"><code>newsDateHour(item: Node): String</code></h4>
<p>Gets the value of the <code>hour</code> property of the news date.</p>
<h4 id="newsdateminuteitem-node-string"><code>newsDateMinute(item: Node): String</code></h4>
<p>Gets the value of the <code>minute</code> property of the news date.</p>
<h4 id="newsdateseconditem-node-string"><code>newsDateSecond(item: Node): String</code></h4>
<p>Gets the value of the <code>second</code> property of the news date.</p>
<h4 id="newsdateisoitem-node-string"><code>newsDateIso(item: Node): String</code></h4>
<p>Gets the date of the news as ISO date. # Freemarker functions for SiteProxy items</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-cms-types-siteproxy.ftl</code>
</dd>
</dl>
<h4 id="getcontentitem-node"><code>getContent(item: Node): ?</code></h4>
<p>Returns the content of the site proxy. The type of the return value depends on the external content the site proxy is showing. # Freemarker functions for retrieving data from the user banner component.</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-core/user-banner.ftl</code>
</dd>
</dl>
<h5 id="getgreeting-string"><code>getGreeting(): String</code></h5>
<p>Retrieves to the greeting value provided by the <em>UserBanner</em> component.</p>
<h5 id="isloggedin-boolean"><code>isLoggedIn(): boolean</code></h5>
<p>Return <code>true</code> if the current user is logged and <code>false</code> otherwise.</p>
<h5 id="isnotloggedin-boolean"><code>isNotLoggedIn(): boolean</code></h5>
<p>Return <code>true</code> if the current user is <em>not</em> logged and <code>false</code> otherwise.</p>
<h5 id="getchangepasswordurl-string"><code>getChangePasswordUrl(): String</code></h5>
<p>Returns the URL where a authenticated user can change his or her password.</p>
<h5 id="getloginlink-string"><code>getLoginLink(): String</code></h5>
<p>Returns the URL of the login page.</p>
<h5 id="getlogoutlink-string"><code>getLogoutLink(): String</code></h5>
<p>Returns the URL for logging out.</p>
<h5 id="getscreenname-string"><code>getScreenName(): String</code></h5>
<p>Returns the username of the current user. If the user is not authenticated the will return an empty string.</p>
<h5 id="getusergivenname-string"><code>getUserGivenName(): String</code></h5>
<p>Returns the given of the current user, if availabe. If the user is not authenticated the will return an empty string.</p>
<h5 id="getuserfamilyname-string"><code>getUserFamilyName(): String</code></h5>
<p>Returns the given of the current user, if availabe. If the user is not authenticated the will return an empty string.</p>
<h3 id="freemarker-function-for-objectlists">Freemarker function for ObjectLists</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-navigation/object-list.ftl</code>
</dd>
</dl>
<p>Many functions provided by this library have a parameter <code>listId</code>. In most cases the value is <code>itemList</code>.</p>
<h4 id="getitemslistid-string-sequencenode"><code>getItems(listId: String): Sequence&lt;Node&gt;</code></h4>
<p>Returns the items in the object list with the provided ID.</p>
<h4 id="getobjectcountlistid-string-number"><code>getObjectCount(listId: String): number</code></h4>
<p>Returns then number of objects in the object list with the provided ID.</p>
<h4 id="getpagniatorbaseurllistid-string-string"><code>getPagniatorBaseUrl(listId: String): String</code></h4>
<p>Gets the base URL of the list paginator.</p>
<h4 id="getpaginatorbeginlistid-string-number"><code>getPaginatorBegin(listId: String): Number</code></h4>
<p>Returns the index of the first item displayed.</p>
<h4 id="getpaginatorendlistid-string-number"><code>getPaginatorEnd(listId: String): Number</code></h4>
<p>Returns the index of the last item displayed.</p>
<h4 id="getpagecountlistid-string-number"><code>getPageCount(listId: String): Number</code></h4>
<p>Gets the number of pages of the object list with the provided ID.</p>
<h4 id="getpagenumberlistid-string-number"><code>getPageNumber(listId: String): Number</code></h4>
<p>Gets the number of page displayed.</p>
<h4 id="getpageparamlistid-string-string"><code>getPageParam(listId: String): String</code></h4>
<p>Gets the name of the page param for the object list with the provided ID.</p>
<h4 id="getpagesizelistid-string-number"><code>getPageSize(listId: String): Number</code></h4>
<p>Gets the number of objects per page for the object list with the provided ID.</p>
<h4 id="getprevpagelinklistid-string-string"><code>getPrevPageLink(listId: String): String</code></h4>
<p>Gets the link to the previous page of the object list with the provided ID.</p>
<h4 id="getnextpagelinklistid-string-string"><code>getNextPageLink(listId: String): String</code></h4>
<p>Gets the link to the next page of the object list with the provided ID.</p>
<h4 id="getfirstpagelinklistid-string-string"><code>getFirstPageLink(listId: String): String</code></h4>
<p>Gets the link to the first page of the object list with the provided ID.</p>
<h4 id="getlastpagelinklistid-string-string"><code>getLastPageLink(listId: String): String</code></h4>
<p>Gets the link to the last page of the object list with the provided ID.</p>
<h4 id="getitemtitleitem-node-string"><code>getItemTitle(item: Node): String</code></h4>
<p>Gets the title of a list item.</p>
<h4 id="getitemleaditem-node-string"><code>getItemLead(item: Node): String</code></h4>
<p>Gets the lead text of a list item.</p>
<h4 id="getitempropertyitem-node-property-string-string"><code>getItemProperty(item: Node, property: String): String</code></h4>
<p>A generic function the get the value of the property with the name provided the <code>property</code> parameter.</p>
<h4 id="hasimageitem-node-boolean"><code>hasImage(item: Node): boolean</code></h4>
<p>Determines if the provided list item has an image attachment.</p>
<h4 id="getimageiditem-node-string-1"><code>getImageId(item: Node): String</code></h4>
<p>Gets the ID of the image attachment of the provided list item.</p>
<h4 id="getimageurlitem-node-string"><code>getImageUrl(item: Node): String</code></h4>
<p>Gets the URL of the image attachment of the provided list item.</p>
<h4 id="getimagecaptionitem-node-string"><code>getImageCaption(item: Node): String</code></h4>
<p>Gets the caption of the image attachment of the provided list item.</p>
<h4 id="getfilterslistid-string-sequencenode"><code>getFilters(listId: String): Sequence&lt;Node&gt;</code></h4>
<p>Returns the filters for the current list.</p>
<h4 id="getfilterlabelfilter-node-string"><code>getFilterLabel(filter: Node): String</code></h4>
<p>Gets the label of the provided filter.</p>
<h4 id="getfiltertypefilter-node-string"><code>getFilterType(filter: Node): String</code></h4>
<p>Gets the type of the provided filter.</p>
<h4 id="getselectfilteroptionsfilter-node-sequencenode"><code>getSelectFilterOptions(filter: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the options of the select filter. If the provided filter is not a filter of the type <em>select</em> an empty sequence is returned.</p>
<h4 id="getselectfilteroptionlabeloption-node-string"><code>getSelectFilterOptionLabel(option: Node): String</code></h4>
<p>Returns the label of the provided filter.</p>
<h4 id="getcategoryfiltersearchstringfilter-node-string"><code>getCategoryFilterSearchString(filter: Node): String</code></h4>
<p>Returns the search string for the provided category filter.</p>
<h4 id="getcategoryfilterseparatorfilter-node-string"><code>getCategoryFilterSeparator(filter: Node): String</code></h4>
<p>Gets the separation character for the value of the provided category filter.</p>
<h4 id="getcategoryfiltermultiplefilter-node-boolean"><code>getCategoryFilterMultiple(filter: Node): boolean</code></h4>
<p>Determines if the provided category allows multiple selections.</p>
<h4 id="getcategoryfiltercategoriesfilter-node-sequencenode"><code>getCategoryFilterCategories(filter: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the categories for the provided category filter.</p>
<h4 id="getcategoryfiltercategorygroupsfilter-node-sequencenode"><code>getCategoryFilterCategoryGroups(filter: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the category groups of the provided category filter.</p>
<h4 id="getcategorygrouplabelgroup-node-string"><code>getCategoryGroupLabel(group: Node): String</code></h4>
<p>Returns the label of the provided category group.</p>
<h4 id="getcategoryfiltercategorygroupscategoriesgroups-sequencenode-sequencenode"><code>getCategoryFilterCategoryGroupsCategories(groups: Sequence&lt;Node&gt;): Sequence&lt;Node&gt;</code></h4>
<p>Gets the categories of all category groups.</p>
<h4 id="getcategoryfiltercategoryidcategory-node-string"><code>getCategoryFilterCategoryId(category: Node): String</code></h4>
<p>Gets the ID of the provided category of a category filter.</p>
<h4 id="getcategoryfiltercategorylabelcategory-node-string"><code>getCategoryFilterCategoryLabel(category: Node): String</code></h4>
<p>Gets the label of the provided category of a category filter.</p>
<h3 id="freemarker-functions-for-portal-workspaces">Freemarker functions for Portal Workspaces</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-portalworkspace.ftl</code>
</dd>
</dl>
<h4 id="getportals-sequencenode"><code>getPortals(): Sequence&lt;Node&gt;</code></h4>
<p>Returns all available portals.</p>
<h4 id="isselectedportal-node-boolean"><code>isSelected(portal: Node): boolean</code></h4>
<p>Determines if the provided portal is selected.</p>
<h4 id="getportallinkportal-node-string"><code>getPortalLink(portal: Node): String</code></h4>
<p>Gets the link for selecting the provided portal.</p>
<h4 id="getportaltitleportal-node-string"><code>getPortalTitle(portal: Node): String</code></h4>
<p>Returns the title of the provided portal.</p>
<h4 id="getportaleditform-node"><code>getPortalEditForm(): Node</code></h4>
<p>Returns the edit form for the selected portal.</p>
<h4 id="getportallayoutform-node"><code>getPortalLayoutForm(): Node</code></h4>
<p>Returns the form for editing the layout of the selected portal.</p>
<h4 id="getaddpagelink-string"><code>getAddPageLink(): String</code></h4>
<p>Returns the link for adding another portal.</p>
<h4 id="getbasicpropertieslink-string"><code>getBasicPropertiesLink(): String</code></h4>
<p>Gets the link for the basic properties of the selected portal.</p>
<h4 id="getportletsfromcolumncolnumber-string-sequencenode"><code>getPortletsFromColumn(colNumber: String): Sequence&lt;Node&gt;</code></h4>
<p>Returns the portals in the column <code>colNumber</code>.</p>
<h4 id="getworkspaceprimaryurl-string"><code>getWorkspacePrimaryUrl(): String</code></h4>
<p>Returns the primary URL of the portal workspace.</p>
<h4 id="getmoveportletleftlinkportlet-node-string"><code>getMovePortletLeftLink(portlet: Node): String</code></h4>
<p>Returns the link for moving the provided portlet left.</p>
<h4 id="getmoveportletrightlinkportlet-node-string"><code>getMovePortletRightLink(portlet: Node): String</code></h4>
<p>Returns the link for moving the provided portlet right.</p>
<h4 id="getmoveportletuplinkportlet-node-string"><code>getMovePortletUpLink(portlet: Node): String</code></h4>
<p>Returns the link for moving the provided portlet up.</p>
<h4 id="getmoveportletdownlinkportlet-node-string"><code>getMovePortletDownLink(portlet: Node): String</code></h4>
<p>Returns the link for moving the provided portlet down.</p>
<h4 id="getcustomizeportletlinkportlet-node-string"><code>getCustomizePortletLink(portlet: Node): String</code></h4>
<p>Returns the link for customizing the portlet.</p>
<h4 id="getdeleteportletlinkportlet-node-string"><code>getDeletePortletLink(portlet: Node): String</code></h4>
<p>Returns the link for deleting the portlet. # Contributing to MathJax</p>
<p>So you're interested in giving us a hand? That's awesome! We've put together some brief guidelines that should help you get started quickly and easily.</p>
<p>There are lots and lots of ways to get involved, this document covers:</p>
<ul>
<li><a href="#raising-issues">raising issues</a>
<ul>
<li><a href="#bug-reports">bug reports</a></li>
<li><a href="#feature-requests">feature requests</a></li>
<li><a href="#change-requests">change requests</a></li>
</ul></li>
<li><a href="#working-on-MathJax-core">working on MathJax core</a>
<ul>
<li><a href="#submitting-pull-requests">submitting pull requests</a></li>
</ul></li>
<li><a href="#testing-and-quality-assurance">testing and quality assurance</a></li>
<li><a href="#writing-documentation">writing documentation</a></li>
<li><a href="#translation">translation</a></li>
<li><a href="#conduct">Conduct</a></li>
</ul>
<h4 id="reporting-an-issue">Reporting An Issue</h4>
<p>If you're about to raise an issue because you think you've found a problem with MathJax, or you'd like to make a request for a new feature in the codebase, or any other reason… please read this first.</p>
<p>The GitHub issue tracker is the preferred channel for <a href="#bug-reports">bug reports</a>, <a href="#feature-requests">feature requests</a>, <a href="#change-requests">change requests</a> and <a href="#submitting-pull-requests">submitting pull requests</a>, but please respect the following restrictions:</p>
<ul>
<li><p>Please <strong>search for existing issues</strong>. Help us keep duplicate issues to a minimum by checking to see if someone has already reported your problem or requested your idea.</p></li>
<li><p>Please <strong>do not</strong> use the issue tracker for personal support requests (use <a href="https://groups.google.com/forum/#!forum/mathjax-users">the MathJax User Group</a>.</p></li>
<li><p>Please <strong>be civil</strong>. Keep the discussion on topic and respect the opinions of others. See also our <a href="#conduct">Conduct Guidelines</a></p></li>
</ul>
<h5 id="bug-reports">Bug Reports</h5>
<p>A bug is a <em>demonstrable problem</em> that is caused by the code in the repository. Good bug reports are extremely helpful - thank you!</p>
<p>Guidelines for bug reports:</p>
<ol style="list-style-type: decimal">
<li><p><strong>Use the GitHub issue search</strong> — check if the issue has already been reported.</p></li>
<li><p><strong>Check if the issue has been fixed</strong> — try to reproduce it using the latest <code>develop</code> or look for <a href="https://github.com/MathJax/MathJax/issues?&amp;page=1&amp;state=closed">closed issues in the current milestone</a>.</p></li>
<li><p><strong>Isolate the problem</strong> — ideally create a <a href="http://css-tricks.com/6263-reduced-test-cases/">reduced test case</a> and a live example.</p></li>
<li><p><strong>Include a screencast if relevant</strong> - Is your issue about a design or front end feature or bug? The most helpful thing in the world is if we can <em>see</em> what you're talking about. Use <a href="http://www.cockos.com/licecap/">LICEcap</a> to quickly and easily record a short screencast (24fps) and save it as an animated gif! Embed it directly into your GitHub issue. Kapow.</p></li>
<li><p>Use the Bug Report template below or <a href="https://github.com/MathJax/MathJax/issues/new?title=Bug%3A&amp;body=%23%23%23%20Issue%20Summary%0A%0A%23%23%23%20Steps%20to%20Reproduce%0A%0A1.%20This%20is%20the%20first%20step%0A%0AThis%20is%20a%20bug%20because...%0A%0A%23%23%23%20Technical%20details%0A%0A*%20MathJax%20Version%3A%20master%20-%20latest%20commit%3A%20%20INSERT%20COMMIT%20REF%0A*%20Client%20OS%3A%20%0A*%20Browser%3A%20%0A*%20">click this link</a> to start creating a bug report with the template automatically.</p></li>
</ol>
<p>A good bug report shouldn't leave others needing to chase you up for more information. Be sure to include the details of your environment.</p>
<p>Here is a <a href="https://github.com/mathjax/MathJax/issues/820">real example</a></p>
<p>Template Example (<a href="https://github.com/MathJax/MathJax/issues/new?title=Bug%3A&amp;body=%23%23%23%20Issue%20Summary%0A%0A%23%23%23%20Steps%20to%20Reproduce%0A%0A1.%20This%20is%20the%20first%20step%0A%0AThis%20is%20a%20bug%20because...%0A%0A%23%23%23%20Technical%20details%0A%0A*%20MathJax%20Version%3A%20master%20-%20latest%20commit%3A%20%20INSERT%20COMMIT%20REF%0A*%20Client%20OS%3A%20%0A*%20Browser%3A%20%0A*%20">click to use</a>):</p>
<pre><code>Short and descriptive example bug report title
### Issue Summary
A summary of the issue and the browser/OS environment in which it occurs. If
suitable, include the steps required to reproduce the bug.
### Steps to Reproduce
1. This is the first step
2. This is the second step
3. Further steps, etc.
Any other information you want to share that is relevant to the issue
being reported. Especially, why do you consider this to be a bug? What
do you expect to happen instead?
### Technical details:
* MathJax Version: 2.3 (latest commit: f3aaf3a2a3e964df2770dc4aaaa9c87ce5f47e2c)
* Client OS: Mac OS X 10.8.4
* Browser: Chrome 29.0.1547.57</code></pre>
<h5 id="feature-requests">Feature Requests</h5>
<p>Feature requests are welcome. Before you submit one be sure to have:</p>
<ol style="list-style-type: decimal">
<li>Read the <a href="https://github.com/mathjax/MathJax/wiki/Mathjax-roadmap">Roadmaps</a>, <strong>use the GitHub search</strong> and check the feature hasn't already been requested.</li>
<li>Take a moment to think about whether your idea fits with the scope and aims of the project, or if it might better fit being a <a href="https://github.com/mathjax/MathJax-third-party-extensions">custom extension</a>.</li>
<li>Remember, it's up to <em>you</em> to make a strong case to convince the project's leaders of the merits of this feature. Please provide as much detail and context as possible, this means explaining the use case and why it is likely to be common.</li>
<li>Clearly indicate whether this is a feature request for MathJax core, input &amp; output jax, or extensions.</li>
</ol>
<h5 id="change-requests">Change Requests</h5>
<p>Change requests cover both architectural and functional changes to how MathJax works. If you have an idea for a new or different dependency, a refactor, or an improvement to a feature, etc - please be sure to:</p>
<ol style="list-style-type: decimal">
<li><strong>Use the GitHub search</strong> and check someone else didn't get there first</li>
<li>Take a moment to think about the best way to make a case for, and explain what you're thinking. Are you sure this shouldn't really be a <a href="#bug-reports">bug report</a> or a <a href="#feature-requests">feature request</a>? Is it really one idea or is it many? What's the context? What problem are you solving? Why is what you are suggesting better than what's already there? Does it fit with the Roadmap?</li>
</ol>
<h5 id="submitting-pull-requests">Submitting Pull Requests</h5>
<p>Pull requests are awesome. If you're looking to raise a PR for something which doesn't have an open issue, please think carefully about <a href="#raising-issues">raising an issue</a> which your PR can close, especially if you're fixing a bug. This makes it more likely that there will be enough information available for your PR to be properly tested and merged.</p>
<p id="need-help">Need Help?</p>
<p>If you're not completely clear on how to submit / update / <em>do</em> Pull Requests, please check out our <a href="https://github.com/mathjax/MathJax/wiki/Source-control-policies">source control policies</a>. For more insights, chech the excellent in depth <a href="https://github.com/TryGhost/Ghost/wiki/Git-Workflow">Git Workflow guide</a> from Ghost, in particular</p>
<ul>
<li><a href="https://github.com/TryGhost/Ghost/wiki/Git-workflow#commit-messages">Ghost Workflow guide: commit messages</a></li>
</ul>
<h5 id="testing-and-quality-assurance">Testing and Quality Assurance</h5>
<p>Never underestimate just how useful quality assurance is. If you're looking to get involved with the code base and don't know where to start, checking out and testing a pull request is one of the most useful things you could do.</p>
<p>If you want to get involved with testing MathJax, there is a set of QA Documentation <a href="https://github.com/MathJax/MathJax-testing">in our testing framework</a>.</p>
<p>Essentially though, <a href="#contribute-to-core">check out the latest develop branch</a>, take it for a spin, and if you find anything odd, please follow the <a href="#bug-reports">bug report guidelines</a> and let us know!</p>
<h6 id="checking-out-a-pull-request">Checking out a Pull Request</h6>
<p>These are some <a href="https://gist.github.com/piscisaureus/3342247">excellent instructions</a> on configuring your GitHub repository to allow you to checkout pull requests in the same way as branches: <a href="https://gist.github.com/piscisaureus/3342247" class="uri">https://gist.github.com/piscisaureus/3342247</a>.</p>
<h5 id="documentation">Documentation</h5>
<p>MathJax's main documentation can be found at <a href="http://docs.mathjax.org">docs.mathjax.org</a>.</p>
<p>The documentation is generated using <a href="http://sphinx-doc.org/">Sphinx-doc</a> and hosted on <a href="http://readthedocs.org">Read the docs</a>. The source of the docs is hosted in the <a href="http://github.com/mathjax/mathjax-docs">MathJax-Docs GitHub repository</a>.</p>
<p>You can clone the repo and submit pull requests following the <a href="#pull-requests">pull-request</a> guidelines.</p>
<h5 id="translation">Translation</h5>
<p>If you wish to add or update translations of MathJax, please do it on <a href="https://translatewiki.net/w/i.php?title=Special:Translate&amp;group=out-mathjax-0-all">TranslateWiki.net</a> (and while you're there you can help other open source projects, too!).</p>
<p>For bug reports and other questions that don't fit on TranslateWiki.net, head over to the <a href="https://github.com/mathjax/MathJax-i18n">mathjax/mathjax-i18n</a> repository.</p>
<h4 id="working-on-mathjax-core-core">Working on MathJax Core {core}</h4>
<h5 id="key-branches-tags">Key Branches &amp; Tags</h5>
<ul>
<li><strong><a href="https://github.com/MathJax/MathJax/tree/develop">develop</a></strong> is the development branch. All work on the next release is here. Do <strong>NOT</strong> use this branch for a production site.</li>
<li><strong><a href="https://github.com/MathJax/MathJax">master</a></strong> contains the latest release of MathJax. This branch may be used in production.</li>
</ul>
<h3 id="conduct">Conduct</h3>
<p>We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, disability, ethnicity, religion, or similar personal characteristic.</p>
<p>Please be kind and courteous. There's no need to be mean or rude. Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer, merely an optimal answer given a set of values and circumstances.</p>
<p>Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works.</p>
<p>We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behaviour. We interpret the term &quot;harassment&quot; as including the definition in the <a href="http://citizencodeofconduct.org/">Citizen Code of Conduct</a>; if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups.</p>
<p>Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the <a href="https://github.com/MathJax/MathJax">MathJax</a> core team immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back.</p>
<p>Likewise any spamming, trolling, flaming, baiting or other attention-stealing behaviour is not welcome.</p>
<p>We also suggest to read <a href="http://blog.discourse.org/2013/03/the-universal-rules-of-civilized-discourse/">discourse's rules</a></p>
<h5 id="references">References</h5>
<ul>
<li>We heavily borrowed from -- thanks to Mozilla and Ghost!</li>
<li>https://github.com/TryGhost/Ghost/blob/master/CONTRIBUTING.md</li>
<li>https://github.com/mozilla/rust/wiki/Note-development-policy</li>
<li>https://github.com/jden/CONTRIBUTING.md/blob/master/CONTRIBUTING.md</li>
<li>http://blog.discourse.org/2013/03/the-universal-rules-of-civilized-discourse/</li>
</ul>
<h3 id="mathjax">MathJax</h3>
<h4 id="beautiful-math-in-all-browsers">Beautiful math in all browsers</h4>
<p>MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all modern browsers. It was designed with the goal of consolidating the recent advances in web technologies into a single, definitive, math-on-the-web platform supporting the major browsers and operating systems. It requires no setup on the part of the user (no plugins to download or software to install), so the page author can write web documents that include mathematics and be confident that users will be able to view it naturally and easily. Simply include MathJax and some mathematics in a web page, and MathJax does the rest.</p>
<p>Some of the main features of MathJax include:</p>
<ul>
<li><p>High-quality display of LaTeX, MathML, and AsciiMath notation in HTML pages</p></li>
<li><p>Supported in most browsers with no plug-ins, extra fonts, or special setup for the reader</p></li>
<li><p>Easy for authors, flexible for publishers, extensible for developers</p></li>
<li><p>Supports math accessibility, cut-and-paste interoperability, and other advanced functionality</p></li>
<li><p>Powerful API for integration with other web applications</p></li>
</ul>
<p>See <a href="http://www.mathjax.org/" class="uri">http://www.mathjax.org/</a> for additional details.</p>
<h4 id="installation-and-usage">Installation and Usage</h4>
<p>The MathJax installation and usage documentation is available in the <code>docs/html</code> directory of the MathJax distribution (see <code>docs/html/index.html</code> for the starting point). The documents are also available on the MathJax web site on line at <a href="http://www.mathjax.org/resources/docs/" class="uri">http://www.mathjax.org/resources/docs/</a>.</p>
<h4 id="community">Community</h4>
<p>The main MathJax website is <a href="http://www.mathjax.org" class="uri">http://www.mathjax.org</a>, and it includes announcements and other important information. MathJax is maintained and distributed on GitHub at <a href="http://github.com/mathjax/MathJax" class="uri">http://github.com/mathjax/MathJax</a>. A user forum for asking questions and getting assistance is hosted at Google, and the bug tracker is hosted at GitHub:</p>
<p>Bug tracker: <a href="https://github.com/mathjax/MathJax/issues" class="uri">https://github.com/mathjax/MathJax/issues</a><br />
MathJax-Users Group: <a href="http://groups.google.com/group/mathjax-users" class="uri">http://groups.google.com/group/mathjax-users</a></p>
<p>Before reporting a bug, please check that it has not already been reported. Also, please use the bug tracker for reporting bugs rather than the help forum.</p>
<h3 id="freemaker-functions-for-sql-member-lists">Freemaker functions for SQL member lists</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-member-navigation.ftl</code>
</dd>
</dl>
<h4 id="getscimemberlistlistid-string-itemlist-node"><code>getSciMemberList(listId: String = &quot;itemList&quot;): Node</code></h4>
<p>Gets the member list. Default is to use the list with the name <code>itemList</code>. The name can be overridden using the optional <code>listId</code> parameter.</p>
<h4 id="getmemberslist-node-sequencenode"><code>getMembers(list: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the members in the provided list.</p>
<h4 id="getsurnamefiltervaluelist-node-string"><code>getSurnameFilterValue(list: Node): String</code></h4>
<p>Gets the value of the surname filter of the provided list.</p>
<h4 id="getcountlist-node-string"><code>getCount(list: Node): String</code></h4>
<p>Gets the number of items in the list.</p>
<h4 id="getcurrentpagelist-node-string"><code>getCurrentPage(list: Node): String</code></h4>
<p>Returns the number of the current page of the list.</p>
<h4 id="getlimitlist-node-string"><code>getLimit(list: Node): String</code></h4>
<p>Gets the maximum number of items per page.</p>
<h4 id="getmaxpageslist-node-string"><code>getMaxPages(list: Node): String</code></h4>
<p>Returns the number of pages.</p>
<h4 id="getnextpagelinklist-node-string"><code>getNextPageLink(list: Node): String</code></h4>
<p>Returns the link to the next page of the list.</p>
<h4 id="getpreviouspagelinklist-node-string"><code>getPreviousPageLink(list: Node): String</code></h4>
<p>Returns the link to the previous page of the list.</p>
<h4 id="getoffsetlist-node-string"><code>getOffset(list: Node): String</code></h4>
<p>Returns the index of the items shown.</p>
<h4 id="getmemberitemiditem-node-string"><code>getMemberItemId(item: Node): String</code></h4>
<p>Returns the ID of the provided member item.</p>
<h4 id="getmemberitemnameitem-node-string"><code>getMemberItemName(item: Node): String</code></h4>
<p>Returns the name of the provided member item.</p>
<h4 id="getmemberitemtitleitem-node-string"><code>getMemberItemTitle(item: Node): String</code></h4>
<p>Returns the value of the title property of the provided member item.</p>
<h4 id="getmemberitemsurnameitem-node-string"><code>getMemberItemSurname(item: Node): String</code></h4>
<p>Returns the value of the surname property of the provided member item.</p>
<h4 id="getmemberitemgivennameitem-node-string"><code>getMemberItemGivenName(item: Node): String</code></h4>
<p>Returns the value of the given name property of the provided member item.</p>
<h4 id="getmemberitemtitlepreitem-node-string"><code>getMemberItemTitlePre(item: Node): String</code></h4>
<p>Returns the value of the <code>titlePre</code> property of the provided member item.</p>
<h4 id="getmemberitemtitlepostitem-node-string"><code>getMemberItemTitlePost(item: Node): String</code></h4>
<p>Returns the value of the <code>titlePost</code> property of the provided member item.</p>
<h4 id="getmemberitemcotactentriesitem-node-sequencenode"><code>getMemberItemCotactEntries(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the contact entries of the provided member item.</p>
<h4 id="getmemberitemcotactentryitem-node-key-string-node"><code>getMemberItemCotactEntry(item: Node, key: String): Node</code></h4>
<p>Gets the contact entry with the provided key of the provided member item.</p>
<h3 id="freemarker-functions-for-sql-project-lists">Freemarker functions for SQL project lists</h3>
<dl>
<dt>Import path</dt>
<dd><code>/ccm-sci-project-navigation.ftl</code>
</dd>
</dl>
<h4 id="getsciprojectlistlistid-string-itemlist-node"><code>getSciProjectList(listId: String = &quot;itemList&quot;): Node</code></h4>
<p>Returns an project list. The list can be selected by the optional <code>listId</code> parameter. The default value for the parameter is <code>itemList</code>.</p>
<h4 id="getprojectslist-node-sequencenode"><code>getProjects(list: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the projects in a project list.</p>
<h4 id="gettitlefiltervaluelist-node-string"><code>getTitleFilterValue(list: Node): String</code></h4>
<p>Gets the value of the title filter of the provided list.</p>
<h4 id="getresearchfieldfiltervaluelist-node-string"><code>getResearchFieldFilterValue(list: Node): String</code></h4>
<p>Returns the value of the research field filter of the provided list.</p>
<h4 id="getcountlist-node-string-1"><code>getCount(list: Node): String</code></h4>
<p>Returns the number of projects in the provided list.</p>
<h4 id="getcurrentpagelist-node-string-1"><code>getCurrentPage(list: Node): String</code></h4>
<p>Returns the number of the current page of the list.</p>
<h4 id="getlimitlist-node-string-1"><code>getLimit(list: Node): String</code></h4>
<p>Gets the maximum number of items per page.</p>
<h4 id="getmaxpageslist-node-string-1"><code>getMaxPages(list: Node): String</code></h4>
<p>Gets the number of page of the provided list.</p>
<h4 id="getnextpagelinklist-node-string-1"><code>getNextPageLink(list: Node): String</code></h4>
<p>Gets the link to the next page of the provided list.</p>
<h4 id="getprevpagelinklist-node-string"><code>getPrevPageLink(list: Node): String</code></h4>
<p>Gets the link to the previous page of the provided list.</p>
<h4 id="getoffsetlist-node-string-1"><code>getOffset(list: Node): String</code></h4>
<p>Gets the index of the first item on the current page.</p>
<h4 id="getprojectitemiditem-node-string"><code>getProjectItemId(item: Node): String</code></h4>
<p>Returns the ID of the provided project item.</p>
<h4 id="getprojectitemnameitem-node-string"><code>getProjectItemName(item: Node): String</code></h4>
<p>Returns the name of the provided project item.</p>
<h4 id="getprojectitemtitleitem-node-string"><code>getProjectItemTitle(item: Node): String</code></h4>
<p>Returns the value of the <code>title</code> property of the provided project item.</p>
<h4 id="getprojectitemobjecttypeitem-node-string"><code>getProjectItemObjectType(item: Node): String</code></h4>
<p>Returns the value of the object type of the provided project item.</p>
<h4 id="getprojectitembeginitem-node-string"><code>getProjectItemBegin(item: Node): String</code></h4>
<p>Returns the value of the <code>begin</code> property of the provided project item.</p>
<h4 id="getprojectitembegindayitem-node-string"><code>getProjectItemBeginDay(item: Node): String</code></h4>
<p>Returns the value of the <code>day</code> property of begin date of the provided project item.</p>
<h4 id="getprojectitembeginmonthitem-node-string"><code>getProjectItemBeginMonth(item: Node): String</code></h4>
<p>Returns the value of the <code>month</code> property of begin date of the provided project item.</p>
<h4 id="getprojectitembeginyearitem-node-string"><code>getProjectItemBeginYear(item: Node): String</code></h4>
<p>Returns the value of the <code>year</code> property of begin date of the provided project item.</p>
<h4 id="getprojectitemenditem-node-string"><code>getProjectItemEnd(item: Node): String</code></h4>
<p>Returns the value of the <code>end</code> property of the provided project item.</p>
<h4 id="getprojectitemenddayitem-node-string"><code>getProjectItemEndDay(item: Node): String</code></h4>
<p>Returns the value of the <code>day</code> property of end date of the provided project item.</p>
<h4 id="getprojectitemendmonthitem-node-string"><code>getProjectItemEndMonth(item: Node): String</code></h4>
<p>Returns the value of the <code>month</code> property of end date of the provided project item.</p>
<h4 id="getprojectitemendyearitem-node-string"><code>getProjectItemEndYear(item: Node): String</code></h4>
<p>Returns the value of the <code>year</code> property of end date of the provided project item.</p>
<h4 id="getprojectitemshortdescitem-node-string"><code>getProjectItemShortDesc(item: Node): String</code></h4>
<p>Returns the value of the <code>short-desc</code> property of the provided project item.</p>
<h4 id="getprojectitemmembersitem-node-sequencenode"><code>getProjectItemMembers(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the members of the project.</p>
<h4 id="getprojectmembersurnamemember-node-string"><code>getProjectMemberSurname(member: Node): String</code></h4>
<p>Returns the surname of the provided member.</p>
<h4 id="getprojectmembergivennamemember-node-string"><code>getProjectMemberGivenname(member: Node): String</code></h4>
<p>Returns the given name of the provided member.</p>
<h3 id="freemarker-functions-for-article-in-items">Freemarker functions for Article In items</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/article.ftl</code>
</dd>
</dl>
<p>This functions are for processing items of types <code>ArticleInCollectedVolume</code>, <code>ArticleInJournal</code> and <code>InProceedings</code>.</p>
<h4 id="gethrefarticle-node-string"><code>getHref(article: Node): String</code></h4>
<p>Generates the link to the detail view of the provided article item. # Freemarker functions for processing the authors of a publication item</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/authors.ftl</code>
</dd>
</dl>
<h4 id="getlinkauthor-node-keyid-string-string">`getLink(author: Node, keyId: String): String</h4>
<p>Gets the link to the homepage of the author from the contact entries of the author. The key of the contact entry to use is selected using the <code>keyId</code> parameter.</p>
<h4 id="getidauthor-node-string"><code>getId(author: Node): String</code></h4>
<p>Returns the ID of the author as a string usable as value of the <code>id</code> attribute of a HTML element. The returned string consists of the ID of the master version of the author item, and the name of the author, separated by an underscore.</p>
<h4 id="getpositionauthor-node-string"><code>getPosition(author: Node): String</code></h4>
<p>Returns the position of provided author item in the sequence of authors.</p>
<h4 id="islastauthor-node-boolean">`isLast(author: Node): boolean</h4>
<p>Determines if the provided author is the last author in the sequence of authors.</p>
<h4 id="getsurnameauthor-node-string"><code>getSurname(author: Node): String</code></h4>
<p>Gets the surname of the author.</p>
<h4 id="getgivennameauthor-node-string"><code>getGivenName(author: Node): String</code></h4>
<p>Gets the given name of the author.</p>
<h4 id="iseditorauthor-node-boolean"><code>isEditor(author: Node): boolean</code></h4>
<p>Determines if the provided author is an editor. # Freemarker functions for proccessing Collected Volume items</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/collected-volume.ftl</code>
</dd>
</dl>
<h4 id="gethrefcollectedvolume-node-string"><code>getHref(collectedVolume: Node): String</code></h4>
<p>Returns the link to the detail view of the provided collected volume item. # Freemarker functions for generating the exportLink links of an publication item</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/export-links.ftl</code>
</dd>
</dl>
<h4 id="gethrefexportlink-node-string"><code>getHref(exportLink: Node): String</code></h4>
<p>Returns the URL for for the provided export link.</p>
<h4 id="getformatkeyexportlink-node-string"><code>getFormatKey(exportLink: Node): String</code></h4>
<p>Gets the key of the format provided by the export link provided by the <code>exportLink</code> parameter.</p>
<h4 id="getformatnameexportlink-node-string"><code>getFormatName(exportLink: Node): String</code></h4>
<p>Gets the name of the format provided by the export link provided by the <code>exportLink</code> parameter. # Freemarker functions for Journal items</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/journal.ftl</code>
</dd>
</dl>
<h4 id="getfirstyearjournal-node-string"><code>getFirstYear(journal: Node): String</code></h4>
<p>Gets the value of the <code>firstYear</code> property of the provided journal.</p>
<h4 id="gethrefjournal-node-string"><code>getHref(journal: Node): String</code></h4>
<p>Returns the link to the detail view of the journal.</p>
<h4 id="getissnjournal-node-string"><code>getIssn(journal: Node): String</code></h4>
<p>Gets the ISSN of the journal.</p>
<h4 id="getissnjournal-node-string-1"><code>getIssn(journal: Node): String</code></h4>
<p>Gets the value of the <code>lastYear</code> property of the journal.</p>
<h4 id="gettitlejournal-node-string"><code>getTitle(journal: Node): String</code></h4>
<p>Returns the title of the journal. # Freemarker functions for processing library signatures</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/library-signatures.ftl</code>
</dd>
</dl>
<p>A library signature object contains the library signature (usually an alpha numeric code) and additional information.</p>
<h4 id="getlibrarysignature-node-string"><code>getLibrary(signature: Node): String</code></h4>
<p>Returns the the library of the signature.</p>
<h4 id="getsignaturesignature-node-string"><code>getSignature(signature: Node): String</code></h4>
<p>Returns the signature itself.</p>
<h4 id="getlibrarylinksignature-node-string"><code>getLibraryLink(signature: Node): String</code></h4>
<p>Returns the link to the homepage of the library.</p>
<h4 id="getmiscsignature-node-string"><code>getMisc(signature: Node): String</code></h4>
<p>Returns the value of the <code>misc</code> property of the signature.</p>
<h3 id="freemarker-functions-for-processing-orderer-objects">Freemarker functions for processing Orderer objects</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/orderer.ftl</code>
</dd>
</dl>
<h4 id="getnameorderer-node-string"><code>getName(orderer: Node): String</code></h4>
<p>Gets the name of the orderer. # Freemarker functions of processing proceedings</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/proceedings.ftl</code>
</dd>
</dl>
<h4 id="gethrefproceedings-node-string"><code>getHref(proceedings: Node): String</code></h4>
<p>Gets the link to the detail view of the provided proceeedings item.</p>
<h4 id="getpaperhrefpaper-node-string"><code>getPaperHref(paper: Node): String</code></h4>
<p>Returns the link to the detail view of the provided paper. # Freemarker functions for native SQL based publication lists</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications-navigation.ftl</code>
</dd>
</dl>
<h4 id="getscipublicationslistlistid-string-itemlist-node"><code>getSciPublicationsList(listId: String = &quot;itemList&quot;): Node</code></h4>
<p>Retrieves a publications list. The list to use can be selected using the optional <code>listId</code> parameter.</p>
<h4 id="getpublicationslist-node-sequencenode"><code>getPublications(list: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the publications of the provided publication list.</p>
<h4 id="gettitlefiltervaluelist-node-string-1"><code>getTitleFilterValue(list: Node): String</code></h4>
<p>Returns the value of the title filter of the provided publication list.</p>
<h4 id="getyearofpublicationfiltervaluelist-node-string"><code>getYearOfPublicationFilterValue(list: Node): String</code></h4>
<p>Returns the value of the year of publication filter of the provided publication list.</p>
<h4 id="getauthorsfiltervaluelist-node-string"><code>getAuthorsFilterValue(list: Node): String</code></h4>
<p>Returns the value of the authors filter of the provided publication list.</p>
<h4 id="getsortlist-node-string"><code>getSort(list: Node): String</code></h4>
<p>Returns the property which is used to sort the list.</p>
<h4 id="getcountlist-node-string-2"><code>getCount(list: Node): String</code></h4>
<p>Returns the number of publications in the list.</p>
<h4 id="getcurrentpagelist-node-string-2"><code>getCurrentPage(list: Node): String</code></h4>
<p>Gets the number of the current page of the list.</p>
<h4 id="getlimitlist-node-string-2"><code>getLimit(list: Node): String</code></h4>
<p>Returns the maximum number of publications per page.</p>
<h4 id="getmaxpageslist-node-string-2"><code>getMaxPages(list: Node): String</code></h4>
<p>Returns the number of pages of the list.</p>
<h4 id="getnextpagelinklist-node-string-2"><code>getNextPageLink(list: Node): String</code></h4>
<p>Returns the link to the next page of the list.</p>
<h4 id="getnextpagelinklist-node-string-3"><code>getNextPageLink(list: Node): String</code></h4>
<p>Returns the link to the previous page of the list.</p>
<h4 id="getoffsetlist-node-string-2"><code>getOffset(list: Node): String</code></h4>
<p>Gets the index of the first publication of the current page.</p>
<h4 id="getpublicationiditem-node-string">`getPublicationId(item: Node): String</h4>
<p>Returns the ID of the provided publication item.</p>
<h4 id="getpublicationobjecttypeitem-node-string"><code>getPublicationObjectType(item: Node): String</code></h4>
<p>Returns the type of the provided publication item.</p>
<h4 id="getpublicationtitleitem-node-string"><code>getPublicationTitle(item: Node): String</code></h4>
<p>Returns the title of the provided publication item.</p>
<h4 id="getpublicationyearitem-node-string"><code>getPublicationYear(item: Node): String</code></h4>
<p>Gets the year of publication of the publication.</p>
<h4 id="getpublicationauthorsitem-node-sequencenode"><code>getPublicationAuthors(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the authors of the publication.</p>
<h4 id="hasauthorsurnameauthor-node-boolean"><code>hasAuthorSurname(author: Node): boolean</code></h4>
<p>Determines if the provided author has a surname.</p>
<h4 id="getauthorsurnameauthor-node-string"><code>getAuthorSurname(author: Node): String</code></h4>
<p>Gets the surname of the author.</p>
<h4 id="hasauthorgivennameauthor-node-boolean"><code>hasAuthorGivenName(author: Node): boolean</code></h4>
<p>Determines if the provided author has a given name.</p>
<h4 id="getauthorgivennameauthor-node-string"><code>getAuthorGivenName(author: Node): String</code></h4>
<p>Gets the given name of the author.</p>
<h4 id="getpublicationplaceitem-node-string"><code>getPublicationPlace(item: Node): String</code></h4>
<p>Gets the value of the place property of the publication.</p>
<h4 id="getpublicationorganizationitem-node-node"><code>getPublicationOrganization(item: Node): Node</code></h4>
<p>Getsh the organization assigned to a publication.</p>
<h4 id="getpublicationorganizationnameitem-node-string"><code>getPublicationOrganizationName(item: Node): String</code></h4>
<p>Gets the name of the organization.</p>
<h4 id="getpublicationunpublishedplaceitem-node-string"><code>getPublicationUnpublishedPlace(item: Node): String</code></h4>
<p>Gets the place of the publication of the type <code>UnPublished</code>.</p>
<h4 id="getpublicationpublisheritem-node-string"><code>getPublicationPublisher(item: Node): String</code></h4>
<p>Gets the publisher of the publication.</p>
<h4 id="getpublisherplaceitem-node-string"><code>getPublisherPlace(item: Node): String</code></h4>
<p>Gets the place of the publisher.</p>
<h4 id="getpublishernameitem-node-string"><code>getPublisherName(item: Node): String</code></h4>
<p>Gets the name of the publisher.</p>
<h4 id="getpublicationjournalitem-node-node"><code>getPublicationJournal(item: Node): Node</code></h4>
<p>Gets the journal to which the publication is assigned.</p>
<h4 id="getjournalnamejournal-node-string"><code>getJournalName(journal: Node): String</code></h4>
<p>Gets the name of the journal.</p>
<h4 id="getpublicationissueitem-node-string"><code>getPublicationIssue(item: Node): String</code></h4>
<p>Gets the issue in which the publication was published.</p>
<h4 id="haspublicationvolumeofjournalitem-node-string"><code>hasPublicationVolumeOfJournal(item: Node): String</code></h4>
<p>Determines if the publication has a value for the <code>volume</code> property.</p>
<h4 id="getpublicationvolumeofjournalitem-node-string"><code>getPublicationVolumeOfJournal(item: Node): String</code></h4>
<p>Returns the value of the <code>volume</code> property.</p>
<h4 id="getpublicationpagesfromitem-node-string"><code>getPublicationPagesFrom(item: Node): String</code></h4>
<p>Gets the value of the <code>pageFrom</code> property.</p>
<h4 id="getpublicationpagestoitem-node-string"><code>getPublicationPagesTo(item: Node): String</code></h4>
<p>Gets the value of the <code>pageTo</code> property.</p>
<h4 id="getpublicationcollectedvolumeitem-node-node"><code>getPublicationCollectedVolume(item: Node): Node</code></h4>
<p>Gets the collected volume to which the publication is assigned.</p>
<h4 id="getcollectedvolumeauthorscollectedvolume-node-sequencenode"><code>getCollectedVolumeAuthors(collectedVolume: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the authors/editors of the collected volume.</p>
<h4 id="getcollectedvolumetitlecollectedvolume-node-string"><code>getCollectedVolumeTitle(collectedVolume: Node): String</code></h4>
<p>Returns the title of the collected volume.</p>
<h4 id="getcollectedvolumepublishercollectedvolume-node-node"><code>getCollectedVolumePublisher(collectedVolume: Node): Node</code></h4>
<p>Returns the publisher of the collected volume.</p>
<h4 id="getcollectedvolumecollectedvolume-node-string"><code>getCollectedVolume(collectedVolume: Node): String</code></h4>
<p>Gets the place of the collected volume.</p>
<h4 id="hasproceedingsitem-node-boolean"><code>hasProceedings(item: Node): boolean</code></h4>
<p>Determines if the publication has proceedings.</p>
<h4 id="getproceedignsitem-node-sequencenode"><code>getProceedigns(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the proceedings the publication.</p>
<h3 id="freemarker-functions-for-publication-items.">Freemarker functions for publication items.</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/publications.ftl</code>
</dd>
</dl>
<h4 id="getassignedtermsdomainsitem-node-domain-string-sequencenode"><code>getAssignedTermsDomains(item: Node, domain: String): Sequence&lt;Node&gt;</code></h4>
<p>Returns the categories from the category system with the name provided by the <code>domain</code> parameters which are assigned to the publication.</p>
<h4 id="getauthorsitem-node-sequencenode"><code>getAuthors(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the authors of the publication.</p>
<h4 id="getpublisheritem-node-sequencenode"><code>getPublisher(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the publisher of the publication.</p>
<h4 id="getyearofpublicationitem-node-sequencenode"><code>getYearOfPublication(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the year of publication.</p>
<h4 id="getnumberofpagesitem-node-string-1"><code>getNumberOfPages(item: Node): String</code></h4>
<p>Gets the number of pages of the publication.</p>
<h4 id="getnumberofvolumesitem-node-string"><code>getNumberOfVolumes(item: Node): String</code></h4>
<p>Gets the number of volumes of the publication.</p>
<h4 id="getvolumeitem-node-string"><code>getVolume(item: Node): String</code></h4>
<p>Gets the value of the <code>volume</code> property of the publication.</p>
<h4 id="geteditionitem-node-string"><code>getEdition(item: Node): String</code></h4>
<p>Get the edition of the publication.</p>
<h4 id="getisbnitem-node-string"><code>getIsbn(item: Node): String</code></h4>
<p>Gets the ISBN of the publication.</p>
<h4 id="getlanguageofpublicationitem-node-string"><code>getLanguageOfPublication(item: Node): String</code></h4>
<p>Gets the language of the publication.</p>
<h4 id="getseriesitem-node-node"><code>getSeries(item: Node): Node</code></h4>
<p>Gets the series to which the publication is assigned.</p>
<h4 id="isrevieweditem-node-boolean"><code>isReviewed(item: Node): boolean</code></h4>
<p>Determines if the publication is reviewed.</p>
<h4 id="getabstractitem-node-string"><code>getAbstract(item: Node): String</code></h4>
<p>Returns the abstract of the publication.</p>
<h4 id="getmiscitem-node-string"><code>getMisc(item: Node): String</code></h4>
<p>Returns the value of the <code>misc</code> property of the publication.</p>
<h4 id="getexportlinksitem-node-sequencenode"><code>getExportLinks(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the export links for the publication.</p>
<h4 id="getplaceitem-node-string"><code>getPlace(item: Node): String</code></h4>
<p>Returns the value of the <code>place</code> property of the publication.</p>
<h4 id="getpagesfromitem-node-string"><code>getPagesFrom(item: Node): String</code></h4>
<p>Returns the value of the <code>pagesFrom</code> property of the publication.</p>
<h4 id="getpagestoitem-node-string"><code>getPagesTo(item: Node): String</code></h4>
<p>Returns the value of the <code>pagesTo</code> property of the publication.</p>
<h4 id="getnumberitem-node-string"><code>getNumber(item: Node): String</code></h4>
<p>Returns the value of the <code>number</code> property of the publication.</p>
<h4 id="getyearfirstpublisheditem-node-string"><code>getYearFirstPublished(item: Node): String</code></h4>
<p>Returns the value of the <code>yearFirstPublished</code> property of the publication.</p>
<h4 id="getlibrarysignaturesitem-node-sequencenode"><code>getLibrarySignatures(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the library signatures assigned to a publication.</p>
<h4 id="getorganizationitem-node-node"><code>getOrganization(item: Node): Node</code></h4>
<p>Gets the organization assigned to a publication.</p>
<h4 id="getordereritem-node-node"><code>getOrderer(item: Node): Node</code></h4>
<p>Gets the orderer assigned to a publication.</p>
<h4 id="getissnitem-node-node"><code>getIssn(item: Node): Node</code></h4>
<p>Gets the ISSN of a publication.</p>
<h4 id="getlastaccesseditem-node-string"><code>getLastAccessed(item: Node): String</code></h4>
<p>Gets the value of the <code>lastAccessed</code> property of a publication.</p>
<h4 id="geturlitem-node-string-2"><code>getUrl(item: Node): String</code></h4>
<p>Gets the value of the <code>url</code> property of a publication.</p>
<h4 id="geturnitem-node-string"><code>getUrn(item: Node): String</code></h4>
<p>Gets the value of the <code>urn</code> property of a publication.</p>
<h4 id="getdoiitem-node-string"><code>getDoi(item: Node): String</code></h4>
<p>Gets the value of the <code>doi</code> property of a publication.</p>
<h4 id="getissueitem-node-string"><code>getIssue(item: Node): String</code></h4>
<p>Gets the issue of a publication.</p>
<h4 id="getjournalitem-node-node"><code>getJournal(item: Node): Node</code></h4>
<p>Gets the journal to which a publication is assigned.</p>
<h4 id="getcollectedvolumeitem-node-node"><code>getCollectedVolume(item: Node): Node</code></h4>
<p>Gets the collected volume to which a publication is assigned.</p>
<h4 id="getchapteritem-node-string"><code>getChapter(item: Node): String</code></h4>
<p>Gets the value of the <code>chapter</code> property of a publication.</p>
<h4 id="getnameofconferenceitem-node-string"><code>getNameOfConference(item: Node): String</code></h4>
<p>Gets the name of the conference.</p>
<h4 id="getplaceofconferenceitem-node-string"><code>getPlaceOfConference(item: Node): String</code></h4>
<p>Gets the place of the conference.</p>
<h4 id="getdatefromconferenceitem-node-datenode"><code>getDateFromConference(item: Node): DateNode</code></h4>
<p>Gets the start date of the conference.</p>
<h4 id="getdatetoconferenceitem-node-datenode"><code>getDateToConference(item: Node): DateNode</code></h4>
<p>Gets the end date of the conference.</p>
<h4 id="getproceedingsitem-node-node"><code>getProceedings(item: Node): Node</code></h4>
<p>Gets the proceedings to which an publication is assigned.</p>
<h4 id="getproceedingspapersitem-node-sequencenode"><code>getProceedingsPapers(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the papers of a proceedings publication item.</p>
<h4 id="getseriesvolumeitem-node-string"><code>getSeriesVolume(item: Node): String</code></h4>
<p>Gets the volume of the series for a publication.</p>
<h4 id="geteventitem-node-string"><code>getEvent(item: Node): String</code></h4>
<p>Gets the value of the <code>event</code> property of a publication of the type <em>talk</em>.</p>
<h4 id="getdateoftaskitem-node-datenode"><code>getDateOfTask(item: Node): DateNode</code></h4>
<p>Gets the value of the <code>date</code> property of a publication of the type <em>talk</em>.</p>
<h3 id="freemarker-functions-for-processing-publishers">Freemarker functions for processing Publishers</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/publisher.ftl</code>
</dd>
</dl>
<h4 id="getnamepublisher-node-string"><code>getName(publisher: Node): String</code></h4>
<p>Gets the name of a publisher.</p>
<h4 id="getplacepublisher-node-string"><code>getPlace(publisher: Node): String</code></h4>
<p>Gets the place of a publisher. # Freemarker functions for Series</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-publications/series.ftl</code>
</dd>
</dl>
<h4 id="getfiltersseries-node-sequencenode"><code>getFilters(series: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the filters for list of publications of the series. The filters can be procesed by the functions provided for object list filters.</p>
<h4 id="getlinkseries-node-string"><code>getLink(series: Node): String</code></h4>
<p>Returns the link to the detail view of the series.</p>
<h4 id="getnameseries-node-string"><code>getName(series: Node): String</code></h4>
<p>Returns the name of a series.</p>
<h4 id="getvolumeseries-node-string"><code>getVolume(series: Node): String</code></h4>
<p>Gets the value of the <code>volume</code> property.</p>
<h4 id="getvolumehrefvolume-node-string"><code>getVolumeHref(volume: Node): String</code></h4>
<p>Gets a link to a volume of a series.</p>
<h3 id="freemarker-functions-for-scidepartment-items">Freemarker functions for SciDepartment items</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-types-department.ftl</code>
</dd>
</dl>
<h4 id="getdescriptiondata-node-htmlstring"><code>getDescription(data: Node): HtmlString</code></h4>
<p>Returns the description of the department.</p>
<h4 id="getshortdescriptiondata-node-string"><code>getShortDescription(data: Node): String</code></h4>
<p>Returns the short description of the department.</p>
<h4 id="getdepartmentheadsdata-node-sequencenode"><code>getDepartmentHeads(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the heads of the department.</p>
<h4 id="getdepartmentheadidhead-node-string"><code>getDepartmentHeadId(head: Node): String</code></h4>
<p>Gets the ID of a head of a department.</p>
<h4 id="getdepartmentheadlinkhead-node-string"><code>getDepartmentHeadLink(head: Node): String</code></h4>
<p>Gets the link to the detail view of head of a department.</p>
<h4 id="getdepartmentviceheadsdata-node-sequencenode"><code>getDepartmentViceHeads(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the vice heads of the department.</p>
<h4 id="getdepartmentviceheadidhead-node-string"><code>getDepartmentViceHeadId(head: Node): String</code></h4>
<p>Gets the ID of a vice head of a department.</p>
<h4 id="getdepartmentviceheadlinkhead-node-string"><code>getDepartmentViceHeadLink(head: Node): String</code></h4>
<p>Gets the link to the detail view of vicehead of a department.</p>
<h4 id="getdepartmentsecretariatsdata-node-sequencenode"><code>getDepartmentSecretariats(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the secretariats of the department.</p>
<h4 id="getdepartmentsecretariatidsec-node-string"><code>getDepartmentSecretariatId(sec: Node): String</code></h4>
<p>Gets the ID of a secretariats of a department.</p>
<h4 id="getdepartmentsecretariatlinksec-node-string"><code>getDepartmentSecretariatLink(sec: Node): String</code></h4>
<p>Gets the link to the detail view of secretariats of a department.</p>
<h4 id="getprojectsdata-node-sequencenode"><code>getProjects(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the list of projects assigned to the department.</p>
<h4 id="getprojectidproject-node-string"><code>getProjectId(project: Node): String</code></h4>
<p>Gets the id of a project.</p>
<h4 id="getprojectlinkproject-node-string"><code>getProjectLink(project: Node): String</code></h4>
<p>Returns the link to the detail view of a project.</p>
<h3 id="freemarker-functions-for-scidepartment-items-1">Freemarker functions for SciDepartment items</h3>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-types-institute.ftl</code>
</dd>
</dl>
<h4 id="getdescriptiondata-node-htmlstring-1"><code>getDescription(data: Node): HtmlString</code></h4>
<p>Returns the description of the institute.</p>
<h4 id="getshortdescriptiondata-node-string-1"><code>getShortDescription(data: Node): String</code></h4>
<p>Returns the short description of the institute.</p>
<h4 id="getdepartmentsdata-node-sequencenode"><code>getDepartments(data: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the departments assigned to a institute.</p>
<h4 id="getdepartmentoiddepartment-node-string"><code>getDepartmentOid(department: Node): String</code></h4>
<p>Gets the OID of a department.</p>
<h4 id="getdepartmenttitledepartment-node-string"><code>getDepartmentTitle(department: Node): String</code></h4>
<p>Gets the title of a department.</p>
<h4 id="getdepartmentlinkdepartment-node-string"><code>getDepartmentLink(department: Node): String</code></h4>
<p>Returns the link to the detail view of a department. # Freemarker functions for SciProject items</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-sci-types-project.ftl</code>
</dd>
</dl>
<h4 id="getbeginitem-node-datenode"><code>getBegin(item: Node): DateNode</code></h4>
<p>Returns the begin date of the project. To format the date the <code>formatDateTime</code> function provided by <code>ccm-themedirector</code> should be used.</p>
<h4 id="getenditem-node-datenode"><code>getEnd(item: Node): DateNode</code></h4>
<p>Returns the end date of the project. To format the date the <code>formatDateTime</code> function provided by <code>ccm-themedirector</code> should be used.</p>
<h4 id="getdescriptionitem-node-htmlstring"><code>getDescription(item: Node): HtmlString</code></h4>
<p>Gets the description of the project.</p>
<h4 id="getshortdescriptionitem-node-string"><code>getShortDescription(item: Node): String</code></h4>
<p>Gets the short description of the project.</p>
<h4 id="getsponsorsitem-node-sequencenode"><code>getSponsors(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the sponsors of the project.</p>
<h4 id="getsponsornamesponsor-node-string"><code>getSponsorName(sponsor: Node): String</code></h4>
<p>Returns the name of the sponsor.</p>
<h4 id="hassponsorfundingcodesponsor-node-boolean"><code>hasSponsorFundingCode(sponsor: Node): boolean</code></h4>
<p>Determines if the sponsor has assigned a funding code to the project.</p>
<h4 id="getsponsorfundingcodesponsor-node-string"><code>getSponsorFundingCode(sponsor: Node): String</code></h4>
<p>Returns the funding code of the project assigned by the sponsor.</p>
<h4 id="getsponsorlinksponsor-node-string"><code>getSponsorLink(sponsor: Node): String</code></h4>
<p>Gets the link to the homepage of the sponsor.</p>
<h4 id="hasfundingitem-node-string"><code>hasFunding(item: Node): String</code></h4>
<p>Determines if the project has a text describing the funding of the project.</p>
<h4 id="getfundingitem-node-htmlstring"><code>getFunding(item: Node): HtmlString</code></h4>
<p>Gets the text describing the funding of the project.</p>
<h4 id="hasfundingvolumeitem-node-boolean"><code>hasFundingVolume(item: Node): boolean</code></h4>
<p>Determines if the project has a value for the <code>fundingVolume</code> property.</p>
<h4 id="getfundingvolumeitem-node-string"><code>getFundingVolume(item: Node): String</code></h4>
<p>Returns the value of the <code>fundingVolume</code> property.</p>
<h4 id="getmembersitem-node-sequencenode"><code>getMembers(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Returns the members of the project.</p>
<h4 id="getmemberrolemember-node-string"><code>getMemberRole(member: Node): String</code></h4>
<p>Gets the role of the member.</p>
<h4 id="getmemberstatusmember-node-string"><code>getMemberStatus(member: Node): String</code></h4>
<p>Gets the status of the member.</p>
<h4 id="getmemberidmember-node-string"><code>getMemberId(member: Node): String</code></h4>
<p>Gets the ID of the member.</p>
<h4 id="getmemberlinkmember-node-string"><code>getMemberLink(member: Node): String</code></h4>
<p>Gets a link to the detail view of the member.</p>
<h4 id="getmembersurnamemember-node-string"><code>getMemberSurname(member: Node): String</code></h4>
<p>Gets the surname of the member.</p>
<h4 id="getmembergivennamemember-node-string"><code>getMemberGivenName(member: Node): String</code></h4>
<p>Gets the given name of the member.</p>
<h4 id="getmembertitlepremember-node-string"><code>getMemberTitlePre(member: Node): String</code></h4>
<p>Gets the value of the <code>titlePre</code> property of the member.</p>
<h4 id="getmembertitlepostmember-node-string"><code>getMemberTitlePost(member: Node): String</code></h4>
<p>Gets the value of the <code>titlePost</code> property of the member.</p>
<h4 id="getinvolvedorganizationsitem-node-sequencenode"><code>getInvolvedOrganizations(item: Node): Sequence&lt;Node&gt;</code></h4>
<p>Gets the organizations involved in the project.</p>
<h4 id="getinvolvedorganizationnameorga-node-string"><code>getInvolvedOrganizationName(orga: Node): String</code></h4>
<p>Gets the name of the organization.</p>
<h4 id="getinvolvedorganizationlinkorga-node-string"><code>getInvolvedOrganizationLink(orga: Node): String</code></h4>
<p>Gets the link to the homepage of the organization. # Freemarker functions for subsites</p>
<dl>
<dt>Import Path</dt>
<dd><code>/ccm-subsite.ftl</code>
</dd>
</dl>
<h4 id="getsubsitename-string"><code>getSubsiteName(): String</code></h4>
<p>Returns the name of the current subsite. # Freemarker functions for language related tasks.</p>
<p>Import Path :<code>/ccm-themedirector/language.ftl</code></p>
<h5 id="getavailablelanguages-sequencestring"><code>getAvailableLanguages(): Sequence&lt;String&gt;</code></h5>
<p>Returns the available languages for the current document as sequence. This sequence can be used for creating links for selecting the language:</p>
<pre><code>&lt;ul class=&quot;language-selector&quot;&gt;
&lt;#list Lang.getAvailableLanguages()?sort as lang&gt;
&lt;li class=&quot;${(lang==negotiatedLanguage)?then(&#39;selected&#39;, &#39;&#39;)}&quot;&gt;${lang}&lt;/li&gt;
&lt;/#list&gt;
&lt;/ul&gt;</code></pre>
<p>This example uses the <code>list</code> directive from Freemarker to iterate over the available languages returned by <code>getAvailableLanguages</code> The Freemarker build-in <code>?then</code> is used together with the <code>negotiatedLanguage</code> variable to check if the curent language is the selected language. If this is the case a CSS class is added to the HTML.</p>
<h3 id="utility-functions">Utility functions</h3>
<p>Import Path :<code>/ccm-themedirectory/utils.ftl</code></p>
<h4 id="getpageapplication-string"><code>getPageApplication(): String</code></h4>
<p>Return the application of the current page.</p>
<h4 id="getpagetitle-string"><code>getPageTitle(): String</code></h4>
<p>Return the title of the current page as provided by the <em>Category Menu</em> Component of the <em>ccm-navigation</em> module.</p>
<h4 id="getsitehostname-string"><code>getSiteHostName(): String</code></h4>
<p>Returns the host name of the CCM installation as provided by the <em>SiteBanner</em> component of the <em>ccm-core</em> module.</p>
<h4 id="getsitename-string"><code>getSiteName(): String</code></h4>
<p>Returns the host name of the CCM installation as provided by the <em>SiteBanner</em> component of the <em>ccm-core</em> module.</p>
<h4 id="getbooleanattrvaluefromnode-node-attrname-string-boolean"><code>getBooleanAttrValue(fromNode: Node, attrName: String): boolean</code></h4>
<p>A helper function which tries to convert the value of the attribute <code>attrName</code> of the node <code>fromNode</code> to a boolean. The following values are interpreted as true: <code>true</code>, <code>yes</code>. All other values are interpreted as <code>false</code>.</p>
<h4 id="formatdatetimestyle-string-date-datevaluenode-string"><code>formatDateTime(style: String, date: DateValueNode): String</code></h4>
<p>Formats the value of date/time value node according to the provided <code>style</code>. The is defined in the theme manifest in the <code>date-time-formats</code> section. It is possible to define different styles for different languages. The style definition in the theme manifest must be in the format expected by the Java <a href="https://docs.oracle.com/javase/8/docs/api/index.html?java/time/format/DateTimeFormatter.html">DateTimeFormatter</a> class.</p>
<h5 id="example">Example</h5>
<p>In the theme manifest in the following format is defined:</p>
<pre><code>&quot;date-time-formats&quot;: [
...
{
&quot;style&quot;: &quot;news&quot;,
&quot;lang&quot;: &quot;de&quot;,
&quot;format&quot;: &quot;dd.MM.YYYY&quot;
},
{
&quot;style&quot;: &quot;news&quot;,
&quot;lang&quot;: &quot;en&quot;,
&quot;format&quot;: &quot;MM/dd/YY&quot;
},
...
]</code></pre>
<p>Each style must have a name. It is possible to have different patterns for a style for different languages. The pattern itself is provided by the <code>format</code> property. For a documentation of the pattern format please refer to the documentation of the Java <code>DateTimeFormatter</code>.</p>
<p>The second parameter of these function is a date value, at the moment this is an XML node if several attributes providing the year, month etc. of the date. This value is usually provided by special function for the specific content type. A typical usage of the <code>formatDateTime</code> function looks like this:</p>
<pre><code>&lt;span&gt;${Utils.formatDateTime(&quot;standard&quot;, News.getNewsDate(item))}&lt;/span&gt;</code></pre>
<p>In this example the <code>getNewsDate</code> function was used to retrieve the date of a news.</p>
<p><code>News.getNewsDate</code> gets the date of a news item. If the date of the news is 2019-04-01 the return value of the function for german is</p>
<pre><code>01.04.2019</code></pre>
<p>and for english:</p>
<pre><code>4/1/19</code></pre>