Lutece v6 : Macros Freemarker pour le back-office
Table des matières
Introduction
En vue de faciliter la migration des templates en cas de changement de framework ou de version de framework CSS, de nouvelles macros ont été développées pour le back-office. Celles-ci visent notamment à faciliter le passage à Bootstrap 4 dans les mois à venir. Les nouvelles macros ont également pour but de permettre plus de modularité dans leur utilisation.
Les anciennes macros (< v5)
Les macros suivantes existent toujours dans commons.html
pour assurer la transition entre les anciennes et les nouvelles macros, mais devront être remplacées progressivement au fur et à mesure de la migration :
- comboWithParams (remplacée par select)
- comboSortedWithParams (remplacée par select)
- comboWithParamsAndLength (remplacée par select)
- combo (remplacée par select)
- fieldInputText (remplacée par formGroup + input)
- fieldInputPassword (remplacée par formGroup + input)
- fieldTextArea (remplacée par formGroup + input)
- fieldInputWrapper (remplacée par formGroup)
- fieldStaticText (remplacée par formGroup + staticText)
- fieldInputCalendar (remplacée par formGroup + inputGroup + inputGroupItem)
- fieldInputCheckBox (remplacée par formGroup + checkBox)
- fieldInputRadioBox (remplacée par formGroup + radioButton)
- fieldInputCheckBoxInline (remplacée par formGroup + checkBox)
- fieldInputRadioBoxInline (remplacée par formGroup + radioButton)
- fieldInputCombo (remplacée par formGroup + select)
- boxSized (remplacée par box)
- rowBox (remplacée par row + columns + box)
- rowBoxHeader (remplacée par boxHeader)
- headerButtons (remplacée par la saisie de paramètres dans boxHeader)
- table (réécrite)
- td (réécrite)
Les macros suivantes restent pour le moment inchangées :
- radioImageList
- checkboxList
- sort
- pagination
- paginationAdmin
- paginationPageLinks
- paginationCombo
- paginationItemCount
- item_navigation
- dataTable
- filterPanel
- messages
- tableHeadBodySeparator
Les macros réécrites
Boutons
- actionButtons : réécrite pour utiliser les nouvelles macros
Les nouvelles macros
Lignes et colonnes
row
Pour créer une nouvelle ligne qui contiendra les colonnes. Les marges négatives du composant row (-15px à gauche et à droite) permettent de conserver l’alignement.
Rendu HTML :
<div class="row"></div>
Appel de la macro :
<@row></@row>
Macro :
<#macro row class='' id='' params=''>
<div class="row<#if class!==''><#${class}></#if>
<#if id!=='')> id="${id}"></#if>
<#if params!=='')>${params}</#if>
<#nested/>
</div>
</#macro>
Paramètres :
- class (string)
- id (string)
- params (permet d’ajouter d’autres attributs)
columns
Le système de 12 colonnes de Bootstrap permet de répartir son contenu et de le rendre responsive (voir la documentation de Bootstrap). Les colonnes sont contenues dans un row.
Rendu HTML :
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<p>Your content here...</p>
</div>
Appel de la macro :
<@columns>
<p>Your content here...</p>
</@columns>
Macro :
<#macro columns offsetXs=0 offsetSm=0 offsetMd=0 offsetLg=0 offsetXl=0 pushXs=0 pushSm=0 pushMd=0 pushLg=0 pushXl=0 pullXs=0 pullSm=0 pullMd=0 pullLg=0 pullXl=0 xs=12 sm=0 md=0 lg=0 xl=0 id='' class='' params=''>
<div class="col-xs-${xs}<#if sm!=0> col-sm-${sm}</#if><#if md!=0> col-md-${md}</#if><#if lg!=0> col-lg-${lg}</#if><#if xl!=0> col-xl-${xl}</#if><#if offsetXs!=0> col-xs-offset-${offsetXs}</#if><#if offsetSm!=0> col-sm-offset-${offsetSm}</#if><#if offsetMd!=0> col-md-offset-${offsetMd}</#if><#if offsetLg!=0> col-lg-offset-${offsetLg}</#if><#if offsetXl!=0> col-xl-offset-${offsetXl}</#if><#if pushXs!=0> col-xs-push-${pushXs}</#if><#if pushSm!=0> col-sm-push-${pushSm}</#if><#if pushMd!=0> col-md-push-${pushMd}</#if><#if pushLg!=0> col-lg-push-${pushLg}</#if><#if pushXl!=0> col-xl-push-${pushXl}</#if><#if pullXs!=0> col-xs-pull-${pullXs}</#if><#if pullSm!=0> col-sm-pull-${pullSm}</#if><#if pullMd!=0> col-md-pull-${pullMd}</#if><#if pullLg!=0> col-lg-pull-${pullLg}</#if><#if pullXl!=0> col-xl-pull-${pullXl}</#if>">
<#nested/>
</div>
</#macro>
Paramètres :
- xs (int) : nombre de colonnes à afficher (mobile). Par défaut 12
- sm (int) : nombre de colonnes à afficher (tablette). Par défaut 0
- md (int) : nombre de colonnes à afficher (tablette/petit écran desktop). Par défaut 0
- lg (int) : nombre de colonnes à afficher (grand écran desktop). Par défaut 0
- xl (int) : nombre de colonnes à afficher (très grand écran desktop). Par défaut 0
- offsetXs, offsetSm, offsetMd, offsetLg, offsetXl (int) : spécifie le décalage de l’élément sur la grille
- pushXs, pushSm, pushMd, pushLg, pushXl, pullXs, pullSm, pullMd, pullLg, pullXl (int) : réarrange l’ordre des colonnes (voir : Reorder CSS Columns Using Bootstrap)
- id (string)
- class (string)
- params (permet d’ajouter d’autres attributs)
Tableaux
table
HTML :
<div class="table-responsive">
<table>
<tr>
<td>Your text here...</td>
</tr>
</table>
</div>
Appel de la macro :
<@table>
<tr>
<td>Your text here...</td>
</tr>
</@table>
Macro :
<#macro table responsive=true class='' id='' params=''>
<#if responsive><div class="table-responsive"></#if>
<table class="table table-hover table-condensed<#if class!==''> ${class}</#if>" id="${id}">
<#nested/>
</table>
<#if responsive></div></#if>
</#macro>
Paramètres :
- responsive (boolean)
- class (string) : pour des classes supplémentaires ex : ‘table-striped’, ‘table-bordered’. Les classes ‘table-hover’ et ‘table-condensed’ sont incluses par défaut.
- id (string)
- params (permet d’ajouter d’autres attributs)
td
HTML :
<td></td>
Appel de la macro :
<@td></@td>
Macro :
<#macro td xs=0 sm=0 md=0 lg=0 xl=0 class='' id='' params=''>
<td class="<#if xs!=0>col-xs-${xs}</#if><#if sm!=0> col-sm-${sm}</#if><#if md!=0> col-md-${md}</#if><#if lg!=0> col-lg-${lg}</#if><#if xl!=0> col-xl-${xl}</#if><#if class!=''> ${class}</#if>" id="${id}" <#if params!=''>${params}</#if>>
<#nested/>
</td>
</#macro>
Paramètres :
- xs (int)
- sm (int)
- md (int)
- lg (int)
- xl (int)
- class (string)
- id (string)
- params (permet d’ajouter d’autres attributs)
Formulaires
tform
Rendu HTML :
<form class="form-horizontal" method="post" role="form">
...
</form>
Appel de la macro :
<@tform>
...
</@tform>
Macro :
<#macro tform class='form-horizontal' class2='' action='' method='post' name='' id='' role='form' params=''>
<form class="${class}<#if class2!=''> ${class2}</#if>" id="${id}" <#if action!=''>action="${action}"</#if> method="${method}" role="${role}" <#if params!=''>${params}</#if>>
<#nested/>
</form>
</#macro>
Paramètres :
- class2 (string) : ‘form-inline’, ‘navbar-form’, ‘navbar-left’, ‘search-form’…
- action (string)
- method (string) : par défaut ‘post’
- name (string)
- id (string)
- role (string) : par défaut ‘form’
- params (string) : (permet d’ajouter d’autres attributs)
Composants de formulaires
formGroup
Rendu HTML :
<div class="form-group">
...
</div>
Appel de la macro :
<@formGroup>
...
</@formGroup>
Macro :
<#macro formGroup formStyle='horizontal' class='' groupStyle='' rows=1 labelKey='' labelFor='' labelId='' helpKey='' id='' mandatory=false showLabel=true params=''>
<div class="form-group<#if groupStyle!=''> has-${groupStyle} has-feedback</#if><#if class!=''> ${class}</#if>" id="${id}" <#if params!=''>${params}</#if>>
<#if rows=1>
<#if labelKey!='' && formStyle='horizontal'>
<#assign labelClass="col-xs-12 col-sm-3 control-label">
<#assign divClass="col-xs-12 col-sm-9 col-md-6 col-lg-6">
<#elseif formStyle='inline'>
<#assign labelClass=''>
<#else>
<#assign divClass="col-xs-12 col-sm-offset-3 col-sm-6">
</#if>
<#else>
<#assign labelClass="col-xs-12">
<#assign divClass="col-xs-12">
</#if>
<#if labelKey!=''>
<label class="${labelClass}" for="${labelFor}">${labelKey}<#if mandatory> <i class="icon-asterisk"></i></#if></label>
</#if>
<div class="${divClass}">
<#nested/>
</div>
</div>
</#macro>
Paramètres :
- formStyle (string) : Le style du formulaire, selon les spécifications de Bootstrap. Options possibles : '', ‘inline’, ‘horizontal’, ‘navbar-form’, ‘navbar-left’… L’option par défaut est ‘horizontal’
- class (string) : Classe additionnelle
- groupStyle : Classe facultative pour signaler les erreurs ou avertissements sur les champs du formulaire. Options possibles : ‘success’, ‘warning’, ‘error’
- rows (int) : Ce paramètre définit si le label et le champ qui lui est associé sont sur la même ligne (valeur : 1) ou sur deux lignes différentes (valeur : 2). Par défaut la valeur est à 1, et ce réglage correspond à la plupart des formulaires du back office.
- labelKey (string) : Label du champ de formulaire contenu dans le groupe
- labelFor (string) : Valeur de l’attribut “for” du label servant à lier le label à un élément du formulaire
- labelId (string) : Ajoute un ID sur le label du champ
- helpKey (string) : Texte d’aide du champ de formulaire
- id (string)
- mandatory (boolean) : Définit si le champ du formulaire est obligatoire (true/false)
- showLabel (boolean) : Permet de choisir si le label sera visible ou pas. S’il est caché, celui-ci sera tout de même lisible par les lecteurs d’écran
- params (string) : (permet d’ajouter d’autres attributs)
input
Cette macro permet d’appeler tous types d’input texte, et fichier. Le type est défini par un simple argument. Les inputs doivent être contenus par un formGroup.
HTML :
<textarea></textarea>
<input type="text" class="form-control" />
<input type="password" class="form-control" />
<input type="email" class="form-control" />
<input type="file" class="form-control" />
<input type="search" class="form-control" />
<input type="number" class="form-control" />
Appel de la macro :
<@input type='textarea' />
<@input type='text' />
<@input type='password' />
<@input type='email' />
<@input type='file' />
<@input type='search' />
<@input type='number' />
Macro :
<#macro input name type='text' value='' class='' size='' inputSize=0 maxlength=0 placeHolder='' rows=4 cols=40 richtext=false tabIndex='' id='' mandatory=mandatory disabled=false readonly=false pattern='' params='' title='' min=0 max=0>
<#if type='textarea'>
<textarea name="${name}" class="form-control<#if size!=''> input-${size}</#if><#if class!=''> ${class}</#if>" rows="${rows}" cols="${cols}" <#if tabIndex!=''>tabindex="${tabIndex}"</#if><#if placeHolder!=''> placeholder="${placeHolder}"</#if><#if title!=''> title="${title}"</#if><#if disabled> disabled</#if><#if readonly> readonly</#if><#if id!=''> id="${id}"</#if><#if params!=''>${params}</#if>></textarea>
<#elseif type='text' || type='search' || type='password' || type='email' || type='file' || type='number'>
<input class="form-control<#if size!=''> input-${size}</#if><#if class!=''> ${class}</#if>" id="${id}" name="${name}" type="${type}" value="${value}" <#if tabIndex!=''>tabindex="${tabIndex}"</#if><#if placeHolder!=''> placeholder="${placeHolder}"</#if><#if title!=''> title="${title}"</#if><#if maxlength gt 0> maxlength="${maxlength}"</#if><#if inputSize!=0> size="${inputSize}"</#if><#if disabled> disabled</#if><#if readonly> readonly</#if><#if params!=''>${params}</#if><#if pattern!=''> pattern="${pattern}"</#if><#if mandatory> required</#if><#if min!=0> min="${min}"</#if><#if max!=0> max="${max}"</#if> />
<#else>
<i class="icon-warning">Type non supporté</i>
</#if>
</#macro>
Paramètres :
- type (string) : ‘text’, ‘textarea’, ‘text’, ‘search’, ‘password’, ‘email’, ‘file’, ‘number’. La valeur par défaut est ‘text’
- value (string)
- class (string)
- size (string) : classe Bootstrap déterminant la taille du texte et du champ. Valeurs possibles : ‘sm’, ‘lg’
- inputSize (int) : l’attribut size html
- maxlength (int)
- placeHolder (string)
- rows (int) : uniquement pour textarea
- cols (int) : uniquement pour textarea
- richtext (boolean) : active l’option de texte enrichi, uniquement pour textarea
- tabIndex (string)
- id (string)
- mandatory (boolean) : hérité du contenant formGroup
- disabled (boolean)
- readonly (boolean)
- pattern : [A-F][0-9]{5}
- params (string)
- title (string)
- min (int) : paramètre compatible avec input type=‘number’
- max (int) : paramètre compatible avec input type=‘number’
checkBox
HTML (checkbox vertical) :
<div class="checkbox">
<label>
<input type="checkbox" /> Label
</label>
</div>
Appel de la macro :
<@checkBox labelKey='Label' />
HTML (checkbox horizontal) :
<label class="checkbox-inline">
<input type="checkbox" /> Label
</label>
Appel de la macro :
<@checkBox orientation='horizontal' labelKey='Label' />
Macro :
<#macro checkBox name id='' labelKey='' labelFor='' orientation='vertical' value='' tabIndex='' title='' disabled=false readonly=false checked=false mandatory=mandatory params=''>
<#if orientation='vertical'>
<div class="checkbox">
<#if orientation='horizontal'>
<label class="checkbox-inline" <#if labelFor!=''>for="${labelFor}"</#if>>
<#if labelKey!=''>${labelKey}</#if>
<input type="checkbox" id="${id}" name="${name}" <#if value!=''>value="${value}"</#if><#if tabIndex!=''>tabindex="${tabIndex}"</#if><#if checked> checked</#if><#if disabled> disabled</#if><#if readonly> readonly</#if><#if params!=''>${params}</#if> />
</label>
</#if>
</div>
</#if>
</#macro>
Paramètres :
- name (obligatoire)
- id (string)
- labelKey (string) : label de la case à cocher
- labelFor (string) : valeur de l’attribut “for” du label, servant à lier le label à un élément du formulaire
- orientation (string) : la valeur par défaut est ‘vertical’
- value (string)
- tabIndex (string)
- title (string)
- disabled (boolean)
- readonly (boolean)
- checked (boolean)
- mandatory (boolean) : hérité du contenant formGroup
- params (string) : (permet d’ajouter d’autres attributs)
radioButton
HTML (radio vertical) :
<div class="radio">
<label>
<input type="radio" /> Label
</label>
</div>
Appel de la macro (radio vertical) :
<@radioButton labelKey='Label' />
HTML (radio horizontal) :
<label class="radio-inline">
<input type="radio" /> Label
</label>
Appel de la macro (radio horizontal) :
<@radioButton orientation='horizontal' labelKey='Label' />
Macro :
<#macro radioButton name id='' value='' labelKey='' labelFor='' orientation='vertical' tabIndex='' title='' disabled=false readonly=false checked=false mandatory=mandatory params=''>
<#if orientation='vertical'>
<div class="radio">
<#if orientation='horizontal'>
<label class="radio-inline" <#if labelFor!=''>for="${labelFor}"</#if>>
<#if labelKey!=''>${labelKey}</#if>
<input type="radio" id="${id}" name="${name}" <#if value!=''>value="${value}"</#if><#if tabIndex!=''>tabindex="${tabIndex}"</#if><#if checked> checked</#if><#if disabled> disabled</#if><#if readonly> readonly</#if><#if mandatory> required</#if><#if params!=''>${params}</#if> />
</label>
</div>
</#if>
</#macro>
Paramètres :
- name (obligatoire)
- id (string)
- labelKey (string) : label du bouton radio
- labelFor (string) : valeur de l’attribut “for” du label, servant à lier le label au bouton radio
- orientation (string) : la valeur par défaut est ‘vertical’
- value (string)
- tabIndex (string)
- title (string)
- disabled (boolean)
- readonly (boolean)
- checked (boolean)
- mandatory (boolean) : hérité du contenant formGroup
- params (string) : (permet d’ajouter d’autres attributs)
select
Rendu HTML :
<select name='list'>
...
</select>
Appel de la macro :
<@select name='list' />
Macro :
<#macro select name items='' default_value=0 id=name size='' sort=false multiple=0 params='' title=''>
<select id="${id}" name="${name}" class="form-control<#if size!=''> input-${size}</#if>"<#if (multiple > 0)> multiple size='${multiple}'</#if> <#if params!=''>${params}</#if> <#if title!=''>title="${title}"</#if> >
<#if items?has_content>
<#if sort=true><#assign sortedItems=items?sort_by("name")><#list sortedItems as item><#if default_value=='${item.code}'> <option selected="selected" value="${item.code}">${item.name}</option><#else> <option value="${item.code}">${item.name}</option></#if></#list></#if>
<#else>
<#list items as item><#if default_value=='${item.code}'> <option selected="selected" value="${item.code}">${item.name}</option><#else> <option value="${item.code}">${item.name}</option></#if></#list>
</#if>
</select>
</#macro>
Paramètres :
- name (obligatoire)
- id : reprend la valeur de name
- title (string)
- size (string) : classe Bootstrap déterminant la taille du texte et de la liste déroulante. Valeurs possibles : ‘sm’, ‘lg’
- items (int) : liste des objets passés à la liste déroulante.
- sort (boolean) : Permet de trier la liste par nom. Par défaut est false.
- default_value (int) : valeur par défaut de la liste déroulante.
- multiple (int) : seulement en cas de choix multiples. Si la valeur de multiple est supérieure à 0, celle-ci sera passée à l’attribut size du select.
- params (string) : (permet d’ajouter d’autres attributs)
La macro peut également être utilisée sans lui passer de liste d’objets.