commons_bs4_materialkit.html

 1   <#-- WARNING : be careful to white-space and lines break in FreeMarker macros.
 2    # This macro template can be used to output white-space-sensitive formats (like RSS files).
 3    # See http://dev.lutece.paris.fr/jira/browse/LUTECE-765
 4   -->
 5   <#-- Do not remove this comment -->
 6   <#-- Information about this commons file -->
 7   <#macro commonsFile>commons_bs4_materialkit.html</#macro>
 8   <#macro commonsName>Commons Bootstrap 4.3 + Material Kit</#macro>
 9   <#macro commonsDescription>Freemarker Commons macros powered by Bootstrap CSS Framework 4.3</#macro>
 10   <#macro coreAdminCSSLinks>
 11   <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet">
 12   <link href="https://fonts.googleapis.com/css2?family=Roboto+Slab&display=swap" rel="stylesheet"> 
 13   <link href="css/admin/style/bootstrap4/bootstrap.min.css" rel="stylesheet"> <!-- Bootstrap 4.3.1 -->
 14   <link href="css/admin/style/bootstrap4/bootstrap-colorpicker.min.css" rel="stylesheet">
 15   <link href="css/admin/jquery-ui.min.css" rel="stylesheet" > <!-- provided by core -->
 16   <link href="css/admin/jquery-ui.structure.min.css" rel="stylesheet" > <!-- provided by core -->
 17   <link href="css/admin/jquery-ui.theme.min.css" rel="stylesheet" > <!-- provided by core -->
 18   <link href="css/admin/tabler-icons.min.css"  rel="stylesheet" > <!-- Tabler Icons -->
 19   <link href="css/admin/bootstrap-icons.css"  rel="stylesheet" > <!-- Bootstrap Icons -->
 20   <link href="css/admin/style/bootstrap4/all.min.css" rel="stylesheet"> <!-- Font-Awesome 5 -->
 21   <link href="css/admin/style/bootstrap4/material-kit/material-kit.min.css" rel="stylesheet">
 22   <link href="css/admin/style/bootstrap4/material-kit/material-kit.override.css" rel="stylesheet">
 23   <link href="js/admin/lib/polipop/css/polipop.core.min.css" rel="stylesheet" >
 24   <link href="js/admin/lib/polipop/css/polipop.default.min.css" rel="stylesheet"> 
 25   <link href="css/admin/style/bootstrap4/bootstrap4.override.css" rel="stylesheet"> <!-- Bootstrap 4.3.1 -->
 26   <link href="css/admin/style/bootstrap4/portal_admin.css" rel="stylesheet">
 27   <link href="css/admin/portal_admin_site.css" rel="stylesheet"><!-- Site override admin CSS -Empty by default- -->
 28   </#macro>
 29   <#macro coreAdminJSLinks>
 30   <script src="js/admin/jquery/jquery-ui.min.js"></script> 
 31   <script src="js/admin/bootstrap-filestyle.min.js"></script> <!-- provided by core -->
 32   <script src="css/admin/style/bootstrap4/bootstrap-colorpicker.js"></script> 
 33   <script src="js/admin/style/bootstrap4/popper.min.js"></script> 
 34   <script src="js/admin/style/bootstrap4/material-kit/bootstrap-material-design.min.js"></script> 
 35   <script src="js/admin/style/bootstrap4/material-kit/moment-with-locales.min.js"></script> 
 36   <script src="js/admin/style/bootstrap4/material-kit/nouislider.min.js"></script> 
 37   <script src="js/admin/style/bootstrap4/material-kit/jquery.sharrre.js"></script> 
 38   <script src="js/admin/style/bootstrap4/material-kit/material-kit.min.js"></script> 
 39   <script src="js/admin/style/bootstrap4/material-kit/material-kit-forms.js"></script> 
 40   <script src="js/admin/lib/polipop/polipop.min.js"></script> <!-- provided by core -->
 41   <script src="js/admin/style/bootstrap4/material-kit/admin.js"></script> <!-- provided by core -->
 42   <script src="js/util/progress-manager.js"></script>
 43   </#macro>
 44   
 45   <#global gClassActive='active' />
 46   <#assign mainColor = 'info' />
 47   <#-- PAGINATION  -->
 48   <#macro pagination paginator>
 49   <#assign nbLinkPagesToDisplay = 10 />
 50   <#assign offsetPrev = nbLinkPagesToDisplay / 2 />
 51   <#assign offsetNext = nbLinkPagesToDisplay / 2 />
 52   <#if ( paginator.pageCurrent <= nbLinkPagesToDisplay - offsetPrev )>
 53   	<#assign offsetPrev = paginator.pageCurrent - 1 />
 54   	<#assign offsetNext = nbLinkPagesToDisplay - offsetPrev />
 55   <#elseif ( paginator.pageCurrent + offsetNext > paginator.pagesCount )>
 56   	<#assign offsetNext = paginator.pagesCount - paginator.pageCurrent />
 57   	<#assign offsetPrev = nbLinkPagesToDisplay - offsetNext />
 58   </#if>
 59   <#if ( paginator.pagesCount > 1 )>
 60   	<#if ( paginator.pageCurrent - offsetPrev > 1 )>
 61   		<@link href='${paginator.firstPageLink?xhtml}'>
 62   			<@icon style='double-left' /> #i18n{portal.util.labelFirst}
 63   		</@link>
 64   	</#if>
 65   	<#if ( paginator.pageCurrent > 1 )>
 66   		<@link href='${paginator.previousPageLink?xhtml}'>
 67   			<@icon style='angle-left' /> #i18n{portal.util.labelPrevious}
 68   		</@link>
 69   	<#else>
 70   	</#if>
 71   	<#if ( paginator.pageCurrent - offsetPrev > 1 )>
 72   		<strong>...</strong>
 73   	</#if>
 74   	<#list paginator.pagesLinks as link>
 75   		<#if link.index == paginator.pageCurrent>
 76   			<strong>${link.name}</strong>
 77   		<#else>
 78   			<@link href='${link.url?xhtml}'>${link.name}</@link>
 79   		</#if>
 80   	</#list>
 81   	<#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
 82   		<strong>...</strong>
 83   	</#if>
 84   	<#if ( paginator.pageCurrent < paginator.pagesCount )>
 85   		<@link href='${paginator.nextPageLink?xhtml}'>
 86   			<@icon style='angle-right' />&nbsp;#i18n{portal.util.labelNext}
 87   		</@link>
 88   		<#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
 89   			<@link href='${paginator.lastPageLink?xhtml}'>
 90   				<@icon style='angle-double-right' />&nbsp;#i18n{portal.util.labelLast}
 91   			</@link>
 92   		</#if>
 93   	<#else>
 94   		&nbsp;&nbsp;
 95   	</#if>
 96   </#if>
 97   </#macro>
 98   <#-- PAGINATION ADMIN -->
 99   <#macro paginationAdmin paginator combo=0 form=1 nb_items_per_page=nb_items_per_page showcount=1 showall=0>
 100   <#if (paginator.pagesCount > 1) >
 101   	<@paginationPageLinks paginator=paginator />
 102   </#if>
 103   <nav class="float-right">
 104   	<#if form == 1 >
 105   		<@tform type='inline' params='style="display:block;"'>
 106   			<@paginationItemCount paginator=paginator combo=combo nb_items_per_page=nb_items_per_page showcount=showcount showall=showall/>
 107   		</@tform>
 108   	<#else>
 109   		<@paginationItemCount paginator=paginator combo=combo nb_items_per_page=nb_items_per_page showcount=showcount showall=showall/>
 110   	</#if>
 111   </nav>
 112   </#macro>
 113   <#-- PAGINATION LINKS -->
 114   <#macro paginationPageLinks paginator >
 115   <#assign nbLinkPagesToDisplay = 10 />
 116   <#assign offsetPrev = nbLinkPagesToDisplay / 2 />
 117   <#assign offsetNext = nbLinkPagesToDisplay / 2 />
 118   <#if ( paginator.pageCurrent <= nbLinkPagesToDisplay - offsetPrev )>
 119   	<#assign offsetPrev = paginator.pageCurrent - 1 />
 120   	<#assign offsetNext = nbLinkPagesToDisplay - offsetPrev />
 121   <#elseif ( paginator.pageCurrent + offsetNext > paginator.pagesCount )>
 122   	<#assign offsetNext = paginator.pagesCount - paginator.pageCurrent />
 123   	<#assign offsetPrev = nbLinkPagesToDisplay - offsetNext />
 124   </#if>
 125   <@ul class='pagination justify-content-end'>
 126   <#if ( paginator.pageCurrent - offsetPrev > 1 )>
 127   	<li class="page-item">
 128   		<@link href='${paginator.firstPageLink?xhtml}' class='page-link'>
 129   			${paginator.labelFirst}
 130   		</@link>
 131   	</li>
 132   </#if>
 133   <#if (paginator.pageCurrent > 1) >
 134   	<li class="page-item previous">
 135   		<@link href='${paginator.previousPageLink?xhtml}' class='page-link'>
 136   			${paginator.labelPrevious}
 137   		</@link>
 138   	</li>
 139   <#else>
 140   	<li class="page-item disabled">
 141   		<@link href='${paginator.firstPageLink?xhtml}'>${paginator.labelPrevious}</@link>
 142   	</li>
 143   </#if>
 144   <#if ( paginator.pageCurrent - offsetPrev > 1 )>
 145   	<li>
 146   		<@link href='${(paginator.pagesLinks?first).url?xhtml}'><strong>...</strong></@link>
 147   	</li>
 148   </#if>
 149   <#list paginator.pagesLinks as pageLink>
 150   	<#if ( pageLink.index == paginator.pageCurrent )>
 151   		<li class="page-item active">
 152   			<@link href='${pageLink.url?xhtml}' class='page-link'>${pageLink.name}</@link>
 153   		</li>
 154   	<#else>
 155   		<li>
 156   			<@link href='${pageLink.url?xhtml}' class='page-link'>${pageLink.name}</@link>
 157   		</li>
 158   	</#if>
 159   </#list>
 160   <#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
 161   	<li>
 162   		<@link href='${(paginator.pagesLinks?last).url?xhtml}'><strong>...</strong></@link>
 163   	</li>
 164   </#if>
 165   <#if (paginator.pageCurrent < paginator.pagesCount) >
 166   	<li class="page-item next">
 167   		<@link href="${paginator.nextPageLink?xhtml}" class='page-link'>
 168   			${paginator.labelNext}
 169   		</@link>
 170   	</li>
 171   	<#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
 172   		<li class="page-item next">
 173   			<@link href='${paginator.lastPageLink?xhtml}' class='page-link'>
 174   				${paginator.labelLast}
 175   			</@link>
 176   		</li>
 177   	</#if>
 178   <#else>
 179   	<li class="page-item disabled">
 180   		<@link href='${paginator.lastPageLink?xhtml}'>${paginator.labelNext}</@link>
 181   	</li>
 182   </#if>
 183   </@ul>
 184   </#macro>
 185   <#-- PAGINATION COMBO -->
 186   <#macro paginationCombo paginator nb_items_per_page=nb_items_per_page showall=0>
 187   <@formGroup labelFor='${paginator.itemsPerPageParameterName}' labelKey='${paginator.labelItemCountPerPage}' formStyle='inline'>
 188   <@inputGroup>
 189   	<@select params='data-max-item="${paginator.itemsCount}"' size='sm' name='${paginator.itemsPerPageParameterName}' id='${paginator.itemsPerPageParameterName}' title='${paginator.labelItemCountPerPage}'>
 190     		<#list [ "10" , "20" , "50" , "100" ] as nb>
 191     			<#if nb_items_per_page = nb >
 192     				<option selected="selected" value="${nb}">${nb}</option>
 193     			<#else>
 194     				<option value="${nb}">${nb}</option>
 195     			</#if>
 196     		</#list>
 197     		<#if showall ==1>
 198     			<#if paginator.itemsCount &gt; 100 >
 199     				<option <#if nb_items_per_page?number = paginator.itemsCount?number >selected="selected"</#if> value="${paginator.itemsCount}" class="${nb_items_per_page}">#i18n{portal.util.labelAll}</option>
 200     			</#if>
 201     		</#if>
 202   	</@select>
 203   	<@inputGroupItem type='btn'>
 204   		<@button type='submit' color='default' size='sm' title='#i18n{portal.util.labelRefresh}' buttonIcon='check' hideTitle=['all'] />
 205   	</@inputGroupItem>
 206   </@inputGroup>
 207   </@formGroup>
 208   </#macro>
 209   <#-- PAGINATION COUNT -->
 210   <#macro paginationItemCount paginator combo=0 nb_items_per_page=nb_items_per_page showcount=1 showall=0>
 211   <#-- Display combo -->
 212   <#if combo == 1 >
 213     <@paginationCombo paginator=paginator nb_items_per_page=nb_items_per_page showall=showall />
 214   </#if>
 215   <#-- Display item count -->
 216   <#if showcount == 1 >
 217   <span class="showcount small">
 218   	<#if (paginator.labelItemCount)?? && paginator.labelItemCount?has_content>&#160;${paginator.labelItemCount} : </#if> ${paginator.itemsCount}
 219   </span>
 220   </#if>
 221   </#macro>
 222   <#-- NAVIGATION -->
 223   <#macro item_navigation item_navigator id='item-navigator' align='' hideButtonTitle=[] buttonColor='info' buttonSize='sm'>
 224   <#local class = alignmentSettings(align,'') />
 225   <nav id="${id}" class="${class}">
 226   <#if (item_navigator.currentItemId > 0)>
 227   	<@aButton href='${item_navigator.previousPageLink?xhtml}' title='#i18n{portal.util.labelPrevious}' buttonIcon='arrow-left' color='${buttonColor}' hideTitle=hideButtonTitle size='${buttonSize}' />
 228   </#if>
 229   <#if (item_navigator.currentItemId < item_navigator.listItemSize - 1) >
 230   	<@aButton href='${item_navigator.nextPageLink?xhtml}' title='#i18n{portal.util.labelNext}' buttonIcon='arrow-right' color='${buttonColor}' hideTitle=hideButtonTitle size='${buttonSize}' />
 231   </#if>
 232   </nav>
 233   </#macro>
 234   <#-- MESSAGES -->
 235   <#macro messages errors=[] infos=[] warnings=[] errors_class="alert alert-danger" infos_class="alert alert-info" warnings_class="alert alert-warning">
 236   <#if errors??>
 237   	<#if errors?size &gt; 0 >
 238   		<@alert color='danger' id='messages_errors_div'>
 239   			<@button style='close' />
 240   			<#list errors as error >
 241   			<span class="icon"><@icon style='exclamation-circle' /></span> ${error.message}<br />
 242   			</#list>
 243   		</@alert>
 244   	</#if>
 245   </#if>
 246   <#if infos??>
 247   	<#if infos?size &gt; 0 >
 248   		<@alert color='info' id='messages_infos_div'>
 249   			<@button style='close' />
 250   			<#list infos as info >
 251   				<span class="icon"><@icon style='info-circle' /></span> ${info.message}<br />
 252   			</#list>
 253   		</@alert>
 254   	</#if>
 255   </#if>
 256   <#if warnings??>
 257   	<#if warnings?size &gt; 0 >
 258   		<div class="${warnings_class}" id="messages_warnings_div" >
 259   			<@aButton style='close' params='data-dismiss="alert"' href='#'>x</@aButton>
 260   			<#list warnings as warning >
 261   				<span class="icon"><@icon style='info-circle' /></span> ${warning.message} <br />
 262   			</#list>
 263   		</div>
 264   	</#if>
 265   </#if>
 266   </#macro>
 267   <#-- TABLE -->
 268   <#-- class:  -->
 269   <#macro table id='' class='' responsive=true condensed=true hover=true striped=false headBody=false bordered=false collapsed=false caption='' params='' deprecated...>
 270   <@deprecatedWarning args=deprecated />
 271   <#local class = class />
 272   <#if condensed> <#local class += ' table-condensed' /> </#if>
 273   <#if hover>     <#local class += ' table-hover' /> </#if>
 274   <#if striped>   <#local class += ' table-striped'   /> </#if>
 275   <#if bordered>  <#local class += ' table-bordered'  /> </#if>
 276   <#if collapsed> <#local class += ' collapse' /> </#if>
 277   <#if responsive><div class="table-responsive"></#if>
 278   <table class="table ${class?trim}" <#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 279   <#if caption!=''><caption>${caption}</caption></#if>
 280   <#if headBody><thead></#if>
 281   	<#nested>
 282   <#if headBody></tbody></#if>
 283   </table>
 284   <#if responsive></div></#if>
 285   </#macro>
 286   <#macro tableHead id='' class='' params=''>
 287   <thead<#if id!=''> id="${id}"</#if><#if class!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if>>
 288   <#nested>
 289   </thead>
 290   </#macro>
 291   <#macro tableBody id='' class='' params=''>
 292   <tbody<#if id!=''> id="${id}"</#if><#if class!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if>>
 293   <#nested>
 294   </tbody>
 295   </#macro>
 296   <#macro tableFoot id='' class='' params=''>
 297   <tfoot <#if id!=''> id="${id}"</#if><#if class!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if>>
 298   <#nested>
 299   </tfoot>
 300   </#macro>
 301   <#macro tableHeadBodySeparator id='' class='' params=''>
 302   </thead>
 303   <tbody<#if id!=''> id="${id}"</#if><#if class!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if>>
 304   </#macro>
 305   <#-- MACRO TR -->
 306   <#macro tr id='' class='' hide=[] params=''>
 307   	<#local class += ' ' + displaySettings(hide,'table-cell') + ' ' + alignmentSettings(align) />
 308   	<tr<#if id!=''> id="${id}"</#if><#if class?trim!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if>>
 309   		<#nested>
 310   	</tr>
 311   </#macro>
 312   <#-- MACRO TH -->
 313   <#-- valign: baseline|top|middle|bottom|bottom|text-top -->
 314   <#macro th id='' title='' scope='' class='' hide=[] align='' valign=''  cols=0 xs=0 sm=0 md=0 lg=0 xl=0 colspan=0 rowspan=0 flex=false params=''>
 315   	<#local class += ' ' + displaySettings(hide,'table-cell') + ' ' + alignmentSettings(align,'text') />
 316   	<#if cols!=0>
 317   		<#local class += ' col-${cols}' />
 318   	</#if>
 319   	<#local breakpoints = {'xs':xs, 'sm':sm, 'md':md, 'lg':lg, 'xl':xl}>
 320   	<#list breakpoints as breakpointkey,breakpointvalue>
 321   		<#if breakpointvalue!=0>
 322   			<#local class += ' col-${breakpointkey}-${breakpointvalue}' />
 323   		</#if>
 324   	</#list>
 325   	<#if valign!=''><#local class += ' align-' + valign /></#if>
 326   	<th class="<#if class?trim != ''>${class?trim}</#if><#if flex> d-flex</#if>"<#if id!=''> id="${id}"</#if><#if title!=''> title="${title}"</#if><#if scope!=''> scope="${scope}"</#if><#if colspan gt 0> colspan="${colspan}"</#if><#if rowspan gt 0> rowspan="${rowspan}"</#if><#if params!=''> ${params}</#if>>
 327   		<#nested>
 328   	</th>
 329   </#macro>
 330   <#-- MACRO TD -->
 331   <#macro td id='' class='' hide=[] align='' valign=''  cols=0 xs=0 sm=0 md=0 lg=0 xl=0 colspan=0 rowspan=0 flex=false params='' deprecated...>
 332   <@deprecatedWarning args=deprecated />	
 333   	<#local class += ' ' + displaySettings(hide,'table-cell') + ' ' + alignmentSettings(align,'') />
 334   	<#if cols!=0>
 335   		<#local class += ' col-${cols}' />
 336   	</#if>
 337   	<#local class += ' ' + responsiveDisplay('col',{'xs':xs, 'sm':sm, 'md':md, 'lg':lg, 'xl':xl}) />
 338   	<#if valign!=''><#local class += ' align-' + valign /></#if>
 339   	<td class="<#if class?trim != ''>${class?trim}</#if><#if flex> d-flex</#if>"<#if id!=''> id="${id}"</#if><#if colspan gt 0> colspan="${colspan}"</#if><#if rowspan gt 0> rowspan="${rowspan}"</#if><#if params!=''> ${params}</#if>>
 340   		<#-- This part is to add the "btn-just-icon" class to action buttons in tables -->
 341   		<#local nestedContent><#nested /></#local>
 342   		<#if nestedContent?has_content>
 343   			<#if nestedContent?contains("class=\"btn")>
 344   				${nestedContent?replace('class=\"btn ','class=\"btn btn-just-icon ')}
 345   			<#else>
 346   				<#nested />
 347   			</#if>
 348   		</#if>
 349   	</td>
 350   </#macro>
 351   <#-- SORT -->
 352   <#macro sort jsp_url attribute id="" >
 353   <#if jsp_url?contains("?")>
 354   	<#assign sort_url = jsp_url + "&amp;sorted_attribute_name=" + attribute + "&amp;asc_sort=" />
 355   <#else>
 356   	<#assign sort_url = jsp_url + "?sorted_attribute_name=" + attribute + "&amp;asc_sort=" />
 357   </#if>
 358   <@btnGroup ariaLabel='sortButton'>
 359   	<@aButton color='default' size='sm' class='btn-just-icon' id='sort${id!}_${attribute!}' href='${sort_url}true#sort${id!}_${attribute!}' title='#i18n{portal.util.sort.asc}' buttonIcon='chevron-up' hideTitle=['all'] />
 360   	<@aButton color='default' size='sm' class='btn-just-icon' href='${sort_url}false#sort${id!}_${attribute!}' title='#i18n{portal.util.sort.desc}' buttonIcon='chevron-down' hideTitle=['all'] />
 361   </@btnGroup>
 362   </#macro>
 363   <#-- ICONS -->
 364   <#-- Icons from FontAwesome 5.8.1 -->
 365   <#macro icon prefix='fa-' style='' class='fa-lg' title='' id='' params=''>
 366   <#if style='docker' || style = 'github' || style='gitlab' || style='java' || style='jira' || style='jenkins' || style = 'twitter' >
 367   	<#local prefix = 'fab ' + prefix />
 368   <#else>
 369   	<#local prefix = 'fas ' + prefix />
 370   </#if>
 371   <#switch style>
 372   	<#case 'arrows'>
 373   		<#local iconStyle = 'arrows-alt' />
 374   	<#break>
 375   	<#case 'arrows-h'>
 376   		<#local iconStyle = 'arrows-alt-h' />
 377   	<#break>
 378   	<#case 'arrows-v'>
 379   		<#local iconStyle = 'arrows-alt-v' />
 380   	<#break>
 381   	<#case 'clock-o'>
 382   		<#local iconStyle = 'clock' />
 383   	<#break>
 384   	<#case 'close'>
 385   		<#local iconStyle = 'times' />
 386   	<#break>
 387   	<#case 'external-link'>
 388   		<#local iconStyle = 'external-link-alt' />
 389   	<#break>
 390   	<#case 'file-pdf-o'>
 391   		<#local iconStyle = 'file-pdf' />
 392   	<#break>
 393   	<#case 'pencil'>
 394   		<#local iconStyle = 'edit' />
 395   	<#break>
 396   	<#case 'refresh'>
 397   		<#local iconStyle = 'sync' />
 398   	<#break>
 399   	<#default>
 400   	<#local iconStyle = style />
 401   </#switch>
 402   	<i class="${prefix}${iconStyle}<#if class!=''> ${class}</#if>" aria-hidden="true"<#if title!=''> title='${title}'</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>></i>
 403   </#macro>
 404   <#-- ICONSTACK 																					-->
 405   <#-- iconStack 																					-->
 406   <#-- class: par défaut 2x peut être tout autre taille voir doc FontAwesome  					-->			
 407   <#-- nested: 2 macro @icon une class fa-stack-2x , autre avec class fa-stack-1x dans l'ordre   	-->
 408   <#macro iconStack class='fa-2x' id='' params=''>
 409   <span class="fa-stack ${class}"<#if id!=''> ${id}</#if><#if params!=''> ${params}</#if>>
 410   <#nested>
 411   </span>
 412   </#macro>
 413   <#-- FORM -->
 414   <#-- type: inline/horizontal/form -->
 415   <#-- enctype: multipart/form-data | text/plain -->
 416   <#macro tform type='horizontal' class='' align='' hide=[] action='' method='post' name='' id='' role='' collapsed=false enctype='' params='' deprecated...>
 417   	<@deprecatedWarning args=deprecated />
 418   	<#local class = class />
 419   	<#if align!=''><#local class += ' ' + alignmentSettings(align,'') /></#if>
 420   	<#if hide??><#local class += ' ' + displaySettings(hide,'block') /></#if>
 421   	<#if collapsed><#local class += ' collapse' /></#if>
 422   	<#switch type>
 423   		<#case 'horizontal'>
 424   			<#local class += ' form-horizontal'>
 425   			<#break>
 426   		<#case 'inline'>
 427   			<#local class += ' form-inline'>
 428   			<#break>
 429   		<#default>
 430   			<#local class += ' form'>
 431   	</#switch>
 432   	<form class="<#if class?trim!=''>${class?trim}</#if>"<#if id!=''> id="${id}"</#if><#if action!=''> action="${action}"</#if><#if method!=''> method="${method}"</#if><#if name!=''> name="${name}"</#if><#if role!=''> role="${role}"</#if><#if method='post' && enctype!=''> enctype='${enctype}'</#if><#if params!=''> ${params}</#if>>
 433   		<#if type='inline'><div class="form-row"></#if>
 434   		<#nested>
 435   		<#if type='inline'></div></#if>
 436   	</form>
 437   </#macro>
 438   <#-- FORM ELEMENT STRUCTURE 												  								-->
 439   <#-- formStyle values: horizontal/empty/inline Default is horizontal 	-->
 440   <#-- class: 						 																							-->
 441   <#-- groupStyle: success/error 																				-->
 442   <#macro formGroup formStyle='horizontal' class='' groupStyle='' rows=1 labelKey='' labelFor='' labelId='' labelClass='' helpKey='' id='' mandatory=false htmlRequired=true hideLabel=[] collapsed=false params='' deprecated...>
 443   <@deprecatedWarning args=deprecated />	
 444   <#if groupStyle = 'success'>
 445   	<#local validation = 'has-success'>
 446   <#elseif groupStyle='error'>
 447   	<#local validation = 'has-error'>
 448   </#if>
 449   <#if collapsed><#local class += ' collapse' /></#if>
 450   <div class="form-group<#if formStyle='horizontal'> bmd-form-group row<#else> col</#if><#if class!=''> ${class?trim}</#if>"<#if validation?? && validation!=''> ${validation}</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 451   <#local displayClass = displaySettings(hideLabel,'inline-flex') />
 452   	<#if rows=1>
 453   		<#if labelKey!='' && formStyle='horizontal'>
 454   			<#local labelClass += ' col-12'>
 455   			<#if displayClass?contains('d-none')>
 456   				<#local divClass='col'>
 457   			<#else>	
 458   				<#local divClass = 'col-lg-6'>
 459   			</#if>
 460   		<#elseif formStyle = 'inline'>
 461   			<#local divClass = 'mb-2 mr-sm-2'>
 462   		<#else>
 463   				<#local divClass='col-sm-12'>
 464   		</#if>
 465   	<#else>
 466   		<#local labelClass += ' col-12'>
 467   		<#local divClass = 'col-12'>
 468   	</#if>
 469   	<#-- <#local labelClass += ' bmd-label-floating' /> -->
 470   	<#if labelKey!=''>
 471   		<@formLabel class=labelClass labelFor=labelFor labelId=labelId labelKey=labelKey hideLabel=hideLabel mandatory=mandatory />
 472   	</#if>
 473   	<#if formStyle !='inline'>
 474   		<div class="${divClass}">
 475   	</#if>
 476   	<#assign propagateMandatory = mandatory>
 477   	<#assign propagateHtmlRequired = htmlRequired>
 478   	<#nested>
 479   	<#assign propagateMandatory = false>
 480   	<#assign propagateHtmlRequired = true>
 481   	<#if helpKey!=''><small class="text-muted<#if formStyle!='inline'> form-text</#if>" <#if labelFor!=''>aria-describedby="${labelFor}"</#if>>${helpKey}</small></#if>
 482   	<#if formStyle !='inline'>
 483   		</div>
 484   	</#if>
 485   </div>
 486   </#macro>
 487   <#macro formField class=''>
 488   <div class="form-row<#if class!=''> ${class}</#if>">
 489   <#nested>
 490   </div>
 491   </#macro>
 492   <#macro formLabel class='' labelFor='' labelId='' labelKey='' hideLabel=[] mandatory=true deprecated...>
 493   <@deprecatedWarning args=deprecated />	
 494   <#local class += ' ' + displaySettings(hideLabel,'') />
 495   <label class="<#if class !=''>${class?trim}</#if>" for="${labelFor}" <#if labelId!=''> id="${labelId}"</#if><#if mandatory=true>ariaLabel="${labelKey} [#i18n{portal.users.modify_attribute.labelMandatory}]"</#if>>
 496   <#if labelKey !=''>${labelKey}<#else><#nested></#if>
 497   </label>
 498   </#macro>
 499   <#macro formHelp style='inline' class='' labelFor=''>
 500   <#if style='inline'>
 501   	<small class="text-muted<#if style!='inline'> form-text</#if><#if class!=''> ${class}</#if>" <#if labelFor!=''>aria-describedby="${labelFor}"</#if>>
 502   	<#nested>
 503   	</small>
 504   <#else>
 505   	<span class="form-help" data-toggle="popover" data-trigger="hover focus" data-html="true" data-content="<#nested>">?</span>
 506   </#if>
 507   </#macro>
 508   <#-- ------------------------------------------------------------------------------------------------------------------------------------------ -->
 509   <#-- INPUTS & TEXTAREA 																															-->
 510   <#-- ------------------------------------------------------------------------------------------------------------------------------------------ -->
 511   <#-- name : Mandatory : Name for field 																											-->
 512   <#-- type : text/textarea/password/email/file/number/range/color/hidden/tel. Default : text 													-->
 513   <#-- value: '' 																																	-->
 514   <#-- class: '' 																																	-->
 515   <#-- id: '' 																																	-->
 516   <#-- title:  '' 																																-->
 517   <#-- size: ''																																	-->
 518   <#-- inputSize: 0																																-->
 519   <#-- maxlength: 0																																-->
 520   <#-- placeHolder: ''																															-->
 521   <#-- rows: 4 Textarea specific																													-->
 522   <#-- cols: 40 Textarea specific																													-->
 523   <#-- pattern:  '' [A-F][0-9]{5}																													-->
 524   <#-- tabIndex:  ''																																-->
 525   <#-- disabled:  false 																															-->
 526   <#-- readonly:  false 																															-->
 527   <#-- min: 0 																																	-->
 528   <#-- max: 0 																																	-->
 529   <#-- min: 0 																																	-->
 530   <#-- params: '' 																																-->
 531   <#-- mandatory: false 																															-->
 532   <#-- language: for input type DATE and datepickers																								-->
 533   <#-- defaultDate: Format must be "yyyy-MM-dd hh:mm"																								-->
 534   <#-- minDate: Format must be "yyyy-MM-dd hh:mm"																									-->
 535   <#-- maxDate: Format must be "yyyy-MM-dd hh:mm"																									-->
 536   <#-- defaultHour: Format must be "hh"																											-->
 537   <#-- defaultMinute: Format must be "mm"																											-->
 538   <#-- minTime : Format must be "hh:mm"																											-->
 539   <#-- maxTime : Format must be "hh:mm"																											-->
 540   <#-- format='' : Format for DB 																													-->
 541   <#-- showFormat='' 	Format for User																												-->
 542   <#-- dateRangeEndId='' Id for date range date end																								-->
 543   <#-- dateParams : [] https://flatpickr.js.org/options/ for options list | Example : dateParams=[{'inline': 'true'},{'hourIncrement': '4'}] 		-->
 544   <#-- showFileUrl=false 																															-->
 545   <#-- fileURL='' 																																-->
 546   <#-- fileName='' 																																-->
 547   <#-- datalist='' To comma separated list of values Example : datalist='titi,tata'																-->
 548   <#-- ------------------------------------------------------------------------------------------------------------------------------------------ -->
 549   <#macro input name id='' type='text' value='' class='' size='' inputSize=0 maxlength=0 placeHolder='' rows=4 cols=40 richtext=false tabIndex='' disabled=false readonly=false pattern='' title='' min=0 max=0 params='' mandatory=false language=.locale minDate='' maxDate='' defaultDate='' minTime='' maxTime='' defaultTime='' time_24hr=true format='' showFormat='' dateRangeEndId='' dateParams=[] showFileUrl=false fileURL='' fileName='' datalist=''>
 550   <#if propagateMandatory?? && propagateMandatory && propagateHtmlRequired ><#local mandatory = true /></#if>
 551   	<#if type='textarea'>
 552   		<textarea name="${name}" class="form-control<#if size!=''> input-${size}</#if><#if class!=''> ${class}</#if><#if richtext> richtext</#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><#if pattern!=''>pattern=${pattern}</#if><#if (mandatory && !richtext)> required</#if><#if labelFor?? && labelFor!='' && helpKey?? && helpKey!=''> aria-describedby="${labelFor}_help"</#if>><#if value!='' >${value}<#else><#nested></#if></textarea>
 553   	<#elseif type='text' || type='search' || type='password' || type='email' || type='file' || type='number' || type='color' || type='range' || type='tel' || type='datalist'>
 554   		<input class="form-control<#if size!=''> input-${size}</#if><#if type='color'> input-color</#if><#if class!=''> ${class}</#if>" type="${type}" name="${name}" 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 id!=''> id="${id}"</#if><#if params!=''> ${params}</#if><#if pattern!=''>pattern=${pattern}</#if><#if min!=max> min="${min}"</#if><#if max!=0> max="${max}"</#if><#if mandatory> required </#if><#if labelFor?? && labelFor!='' && helpkey?? && helpKey!=''> aria-describedby="${labelFor}_help"</#if><#if type='datalist'> list="${name}_list"</#if>>
 555   		<#if type='file'>
 556   			<input type="hidden" id=${id}Key name="${name}Key" value="${value}" />
 557   			<#if showFileUrl && fileURL?? && fileName??>
 558   				<@link href="${fileURL}">${fileName}</@link>
 559   			</#if>
 560   		</#if>
 561   		<#if type='datalist'>
 562   			<#if id !='' && datalist !='' >
 563   				<datalist id="${name}_list">
 564   				<#assign options = datalist?split(',')>
 565   				<#list options as opt>
 566   					<option value="${opt!}">
 567   				</#list>
 568   				</datalist>
 569   			<#else>
 570   				<!-- Missing id or params attribute for macro @input for type "datalist" -->
 571   			</#if>
 572   		</#if>
 573   	<#elseif type='date' || type='datetime' || type='daterange' || type='datetimerange' || type='time'>
 574   		<input class="form-control<#if size!=''> input-${size}</#if><#if class!=''> ${class}</#if>" type="text" name="${name}" 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 id!=''> id="${id}"</#if><#if params!=''> ${params}</#if><#if pattern!=''>pattern=${pattern}</#if><#if min!=max> min="${min}"</#if><#if max!=0> max="${max}"</#if><#if mandatory> required </#if><#if labelFor?? && labelFor!='' && helpkey?? && helpKey!=''> aria-describedby="${labelFor}_help"</#if> />
 575   		<#if type='date'>
 576   			<@getDate idField='${id}' language=language format=format showFormat=showFormat minDate=minDate maxDate=maxDate defaultDate=defaultDate dateOptions=dateParams />
 577   		<#elseif type='datetime'>
 578   			<@getDateTime idField='${id}' language=language format=format showFormat=showFormat minDate=minDate maxDate=maxDate defaultDate=defaultDate minTime=minTime maxTime=maxTime dateOptions=dateParams />
 579   		<#elseif type='daterange'>
 580   			<#if dateRangeEndId != ''>
 581   				<@getDateRange idField='${id}' idEndField='${dateRangeEndId}' language=language format=format showFormat=showFormat minDate=minDate maxDate=maxDate defaultDate=defaultDate dateOptions=dateParams />
 582   			<#else>
 583   				<@alert class='danger'>${i18n("portal.util.datepicker.rangeEndId.mandatory")}</@alert>
 584   			</#if>
 585   		<#elseif type='datetimerange'>
 586   			<#if dateRangeEndId != ''>
 587   				<@getDateTimeRange idField='${id}' idEndField='${dateRangeEndId}' language=language format=format showFormat=showFormat minDate=minDate maxDate=maxDate defaultDate=defaultDate minTime=minTime maxTime=maxTime dateOptions=dateParams  />
 588   			<#else>
 589   				<@alert class='danger'>${i18n("portal.util.datepicker.rangeEndId.mandatory")}</@alert>
 590   			</#if>
 591   		<#elseif type='time'>
 592   			<@getTime idField='${id}' language=language format='H:i' showFormat='H:i' minTime=minTime maxTime=maxTime time_24hr=time_24hr defaultDate=defaultDate dateOptions=dateParams />
 593   		</#if>
 594   		<#if id=''><@alert class='danger'>${i18n("portal.util.datepicker.id.mandatory")}</@alert></#if>
 595   	<#elseif type='hidden'>
 596   		<input type="hidden" name="${name}" <#if id!=''>id="${id}"</#if> value="${value}" />
 597   	<#else><@icon style='warning' />Type not supported
 598   	</#if>
 599   </#macro>
 600   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 601   <#-- STATICTEXT		  																										-->
 602   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 603   <#-- inForm : true / false : Is in a form																					-->
 604   <#-- color: primary / secondary / success / etc...	and any css class 												 		-->
 605   <#-- id: ''	 :					 																							-->
 606   <#-- params: ''						 																						-->
 607   <#macro staticText inForm=true color='' id='' params=''>
 608   <p class="<#if inForm>form-control-plaintext</#if><#if color!=''> text-${color}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 609   	<#nested>
 610   </p>
 611   <script>
 612   $('.form-control-plaintext').parents('div.form-group').addClass('is-filled');
 613   </script>
 614   </#macro>
 615   <#--- MACRO SELECT (TO REPLACE "COMBO" MACROS) --->
 616   <#macro select name items='' default_value='' id=name class='' size='' sort=false multiple=0 params='' title='' disabled=false tabIndex=0 maxLength=0 mandatory=false>
 617   <#if propagateMandatory?? && propagateMandatory && propagateHtmlRequired ><#local mandatory = true /></#if>
 618   	<select id="${id}" name="${name}" class="form-control<#if size!=''> form-control-${size}</#if><#if class!=''> input-${class}</#if>" <#if (multiple &gt; 0)>multiple size="${multiple}"</#if><#if (tabIndex &gt; 0)> tabindex="${tabIndex}"</#if><#if params!=''> ${params}</#if><#if title!=''> title="${title}"</#if><#if mandatory?? && mandatory> required</#if><#if disabled> disabled</#if>>
 619   	<#if items?has_content>
 620   		<#if sort=true>
 621   			<#list items?sort_by("name") as item>
 622   				<#if default_value="${item.code}">
 623   					<option selected="selected" value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
 624   				<#else>
 625   					<option value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
 626   				</#if>
 627   			</#list>
 628   		<#else>
 629   			<#if maxLength gt 0>
 630   				<#list items as item>
 631   					<#if maxLength < item.name?length >
 632   						<#assign item_new = "..." + "${item.name?substring(item.name?length-maxLength+3)}" >
 633   					<#else>
 634   						<#assign item_new = "${item.name}">
 635   					</#if>
 636   					<#if default_value="${item.code}">
 637   						<option selected="selected" value="${item.code}" >${item_new}</option>
 638   					<#else>
 639   						<option value="${item.code}" >${item_new}</option>
 640   					</#if>
 641   				</#list>
 642   			<#else>
 643   				<#list items as item>
 644   					<#if default_value="${item.code}">
 645   						<option selected="selected" value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
 646   					<#else>
 647   						<option value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
 648   					</#if>
 649   				</#list>
 650   			</#if>
 651   		</#if>
 652   	<#else>
 653   		<#nested>
 654   	</#if>
 655   	</select>
 656   	<script>
 657   		$("select").parents('div.form-group').addClass('is-filled');
 658   	</script>
 659   </#macro>
 660   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 661   <#-- OPTIONS		  																										-->
 662   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 663   <#-- items : list with label, value.				  																		-->
 664   <#-- selected : Selected value 																								-->
 665   <#-- id : 																													-->
 666   <#-- class : 																												-->
 667   <#-- params : 																												-->
 668   <#macro options items selected='' id=false class='' params=''>
 669   <#if items??>
 670   	<#list items as item>
 671   		<#local idItem><#if id>${item.code}_${item?index}<#else></#if></#local>
 672   		<#local selectedItem><#if selected !=''><#if item.code?string=selected>true<#else>false</#if><#else>${item.selected?c}</#if></#local>
 673   		<@option label=item.name value=item.code id=idItem class=class selected=selectedItem?boolean disabled=item.disabled params=params /> 
 674   	</#list>
 675   </#if>
 676   </#macro>
 677   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 678   <#-- OPTION 		  																										-->
 679   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 680   <#-- label : Mandatory 			  																							-->
 681   <#-- value : Mandatory 			  																							-->
 682   <#-- selected : Selected value 																								-->
 683   <#-- disabled : false  : Bool 																								-->
 684   <#-- id : 																													-->
 685   <#-- class : 																												-->
 686   <#-- params : 																												-->
 687   <#macro option label value id='' class='' selected=false disabled=false params=''>
 688   <option<#if id!=''>id="${id}</#if><#if class!=''> class="${class}</#if> value="${value!}"<#if selected> selected</#if><#if disabled> disabled</#if><#if params!=''> ${params}</#if>>${label!} <#nested></option>
 689   </#macro>
 690   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 691   <#-- CHECKBOX 		  																										-->
 692   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 693   <#-- name 	: Mandatory 			  																						-->
 694   <#-- id 	: 																												-->
 695   <#-- class 	: 																												-->
 696   <#-- labelKey : '' 			  																								-->
 697   <#-- orientation : 'vertical' / String																						-->
 698   <#-- value : ''  / String																									-->
 699   <#-- tabIndex : ''  / String																								-->
 700   <#-- title : ''  / String																									-->
 701   <#-- disabled : false  / Bool 																								-->
 702   <#-- readonly : false  / Bool 																								-->
 703   <#-- checked : false / Bool 																								-->
 704   <#-- mandatory : false / Bool 																								-->
 705   <#-- params : 																												-->
 706   <#macro checkBox name id='' class='' labelKey='' orientation='vertical' value='' tabIndex='' title='' disabled=false readonly=false checked=false params='' mandatory=false deprecated...>
 707   <@deprecatedWarning args=deprecated />	
 708   <#if id = ''><#local id = name /></#if>
 709   <div class="form-check<#if orientation!='vertical'> form-check-inline</#if><#if disabled> disabled</#if><#if class!=''> ${class}</#if>">
 710   	<label class="form-check-label" for="${id}"<#if title!=''> title="${title}"</#if>>
 711   	<input type="checkbox" id="${id}" name="${name}" class="form-check-input" <#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><#if mandatory> required</#if> />
 712   	<#if labelKey!=''>${labelKey}<#else><#nested></#if>
 713   	<span class="form-check-sign">
 714   		<span class="check"></span>
 715   	</span>
 716   	</label>
 717   </div>
 718   <script>$(".form-check").parents('div.form-group').find('label').removeClass('bmd-label-floating');</script>
 719   </#macro>
 720   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 721   <#-- RADIOBUTTON 		  																									-->
 722   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 723   <#-- name 	: Mandatory 			  																						-->
 724   <#-- id 	: 																												-->
 725   <#-- class 	: 																												-->
 726   <#-- labelKey : '' 			  																								-->
 727   <#-- orientation : 'vertical' / String																						-->
 728   <#-- value : ''  / String																									-->
 729   <#-- tabIndex : ''  / String																								-->
 730   <#-- title : ''  / String																									-->
 731   <#-- disabled : false  / Bool 																								-->
 732   <#-- readonly : false  / Bool 																								-->
 733   <#-- checked : false / Bool 																								-->
 734   <#-- mandatory : false / Bool 																								-->
 735   <#-- params : 																												-->
 736   <#macro radioButton name id='' value='' labelKey='' labelFor='' orientation='vertical' tabIndex='' title='' disabled=false readonly=false checked=false params='' mandatory=false >
 737   <#if propagateMandatory?? && propagateMandatory && propagateHtmlRequired ><#local mandatory = true /></#if>
 738   <div class="form-check form-check-radio<#if orientation!='vertical'> form-check-inline</#if><#if disabled> disabled</#if>">
 739   	<label class="form-check-label<#if orientation='horizontal'> radio-inline</#if>" for="${labelFor}">
 740   	<input type="radio" id="${id}" name="${name}" class="form-check-input" <#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> />
 741   	<#if labelKey!=''>${labelKey}<#else><#nested></#if>
 742   	<span class="circle">
 743   		<span class="check"></span>
 744   	</span>
 745   </label>
 746   </div>
 747   <script>
 748   $(".form-check").parents('div.form-group').addClass('is-filled');
 749   </script>
 750   </#macro>
 751   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 752   <#-- INPUTGROUP 		  																									-->
 753   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 754   <#-- size 	: '' / string / sm or lg or no																					-->
 755   <#-- id 	: '' / string 																									-->
 756   <#-- class 	: '' / string 																									-->
 757   <#-- params : '' / string 																									-->
 758   <#macro inputGroup size='' class='' id='' params=''>
 759   <div class="input-group<#if size!=''> input-group-${size}</#if><#if class!=''> ${class}</#if>" <#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 760   <#nested>
 761   </div>
 762   <script>
 763   $(".input-group").parent().prev("label.bmd-label-floating").addClass('bmd-label-static').removeClass("bmd-label-floating");
 764   </script>
 765   </#macro>
 766   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 767   <#-- INPUTGROUPITEM		  																									-->
 768   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 769   <#-- pos 	: 'append' / string / append or prepend																			-->
 770   <#-- type 	: 'btn' / string / btn or text																					-->
 771   <#-- id 	: '' / string 																									-->
 772   <#-- params : '' / string 																									-->
 773   <#macro inputGroupItem pos='append' type='btn' id='' params=''>
 774   <div class="input-group-${pos}">
 775   <#if type = 'text'><div class="input-group-${type}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>></#if>
 776   <#-- This part is to add the "sm" class to the button -->
 777   <#local nestedContent><#nested /></#local>
 778   <#if nestedContent?has_content>
 779   	<#if nestedContent?contains("class=\"btn")>
 780   		${nestedContent?replace('class=\"btn','class=\"btn btn-sm')}
 781   	<#else>
 782   		<#nested />
 783   	</#if>
 784   </#if>
 785   <#if type = 'text'></div></#if>
 786   </div>
 787   </#macro>
 788   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 789   <#-- DROPDOWNMENU		  																									-->
 790   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 791   <#-- class 	: '' / string  																									-->
 792   <#-- id 	: '' / string 																									-->
 793   <#-- params : '' / string 																									-->
 794   <#macro dropdownMenu class='' id='' params=''>
 795   <ul class="dropdown-menu ${class}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 796   <#nested>
 797   </ul>
 798   </#macro>
 799   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 800   <#-- ROW		  																											-->
 801   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 802   <#-- class 	: '' / string  																									-->
 803   <#-- id 	: '' / string 																									-->
 804   <#-- align 	: '' / string 																									-->
 805   <#-- collapsed : false / Bool 																								-->
 806   <#-- params : '' / string 																									-->
 807   <#macro row class='' id='' align='' collapsed=false params=''>
 808   	<#if collapsed><#local class += ' ' + 'collapse' /></#if>
 809   <#if align!=''><#local class+= ' ' + alignmentSettings(align,'') /></#if>
 810   <div class="row<#if class!=''> ${class?trim}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 811   <#nested>
 812   </div>
 813   </#macro>
 814   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 815   <#-- COLUMNS	  																											-->
 816   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 817   <#-- tag 	: 'div' / string / Any html tag																					-->
 818   <#-- class 	: '' / string  																									-->
 819   <#-- id 	: '' / string 																									-->
 820   <#-- align 	: '' / string 																									-->
 821   <#-- collapsed : false / Bool 																								-->
 822   <#-- params : '' / string 																									-->
 823   <#-- cols = col-xs- (<544px)/col-sm- (>=544px)/col-md- (>=768px)/col-lg- (>=992px)/col-xl- (>=1200px) 						-->
 824   <#-- Push and Pull are deprecated in Bootstrap 4 																			-->
 825   <#-- offsetXs, offsetSm, offsetMd, offsetLg and offsetXl are deprecated. 													-->
 826   <#-- Use offset={} Values are listed as following: offset={'xs':int, 'sm':int, 'md':int, 'lg':int, 'xl':int} 				-->
 827   <#-- Order uses flexbox. Use Order for xs/all breakpoints this way: order=int, or for other breakpoints this way: order={'sm':int, 'md':int, 'lg':int, 'xl':int} -->
 828   <#macro columns tag='div' offsetXs=0 offsetSm=0 offsetMd=0 offsetLg=0 offsetXl=0 offset={} 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 order={} id='' class='' align='' collapsed=false params=''>
 829   <#if collapsed><#local class += ' ' + 'collapse' /></#if>
 830   <#if align!=''><#local class+= ' ' + alignmentSettings(align,'text') /></#if>
 831   <#local class += ' ' + responsiveDisplay('col',{'xs':xs, 'sm':sm, 'md':md, 'lg':lg, 'xl':xl}) />
 832   <#if offset?has_content>
 833   	<#local class += ' ' + responsiveDisplay('offset',offset) />
 834   <#elseif offsetXs &gt; 0 || offsetSm &gt; 0 || offsetMd &gt; 0 || offsetLg &gt; 0 || offsetXl &gt; 0>
 835   	<#local class += ' ' + responsiveDisplay('offset',{'xs':offsetXs, 'sm':offsetSm, 'md':offsetMd, 'lg':offsetLg, 'xl':offsetXl}) />
 836   </#if>
 837   <#if order?has_content>
 838   	<#if order?is_number>
 839   		<#local class += ' order-${order}' />
 840   	<#elseif order?is_hash>
 841   		<#local class += ' ' + responsiveDisplay('order',order) />
 842   	</#if>
 843   </#if>
 844   <${tag} class="<#if class?trim!=''>${class?trim}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 845   	<#nested>
 846   </${tag}>
 847   </#macro>
 848   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 849   <#-- UL	  																													-->
 850   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 851   <#-- class 	: '' / string  																									-->
 852   <#-- id 	: '' / string 																									-->
 853   <#-- align 	: '' / string 																									-->
 854   <#-- hide 	: [] / array 																									-->
 855   <#-- collapsed : false / Bool 																								-->
 856   <#-- params : '' / string 																									-->
 857   <#macro ul id='' class='' align='' hide=[] collapsed=false params=''>
 858   <#if collapsed><#local class += ' ' + 'collapse' /></#if>
 859   <#if align!=''><#local class+= ' ' + alignmentSettings(align,'') /></#if>
 860   <#if hide??><#local class += ' ' + displaySettings(hide,'block') /></#if>
 861   <ul<#if class?trim!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if><#if id!=''> ${id}</#if>>
 862   	<#nested>
 863   </ul>
 864   </#macro>
 865   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 866   <#-- LI	  																													-->
 867   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 868   <#-- class 	: '' / string  																									-->
 869   <#-- id 	: '' / string 																									-->
 870   <#-- align 	: '' / string 																									-->
 871   <#-- hide 	: [] / array 																									-->
 872   <#-- collapsed : false / Bool 																								-->
 873   <#-- params : '' / string 																									-->
 874   <#macro li id='' params='' class='' hide=[] align=''>
 875   <#local class += ' ' + alignmentSettings(align,'') + ' ' + displaySettings(hide,'block') />
 876   <li<#if class?trim!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if><#if id!=''> ${id}</#if>>
 877   <#nested>
 878   </li>
 879   </#macro>
 880   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 881   <#-- DIV	  																												-->
 882   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 883   <#-- class 	: '' / string  																									-->
 884   <#-- id 	: '' / string 																									-->
 885   <#-- align 	: '' / string 																									-->
 886   <#-- hide 	: [] / array 																									-->
 887   <#-- collapsed : false / Bool 																								-->
 888   <#-- params : '' / string 																									-->
 889   <#macro div id='' class='' hide=[] collapsed=false align='' params=''>
 890   <#if collapsed><#local class += ' ' + 'collapse' /></#if>
 891   <#if align!=''><#local class+= ' ' + alignmentSettings(align,'') /></#if>
 892   <#if hide??><#local class += ' ' + displaySettings(hide,'block') /></#if>
 893   <div<#if class?trim!=''> class="${class?trim}"</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 894   <#nested>
 895   </div>
 896   </#macro>
 897   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 898   <#-- P	  																													-->
 899   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 900   <#-- class 	: '' / string  																									-->
 901   <#-- id 	: '' / string 																									-->
 902   <#-- align 	: '' / string 																									-->
 903   <#-- hide 	: [] / array 																									-->
 904   <#-- collapsed : false / Bool 																								-->
 905   <#-- params : '' / string 																									-->
 906   <#macro p id='' class='' hide=[] collapsed=false align='' params=''>
 907   <#if collapsed><#local class += ' ' + 'collapse' /></#if>
 908   <#local class += ' ' + alignmentSettings(align,'') + ' ' + displaySettings(hide,'block') />
 909   <p<#if class?trim!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if><#if id!=''> ${id}</#if>>
 910   <#nested>
 911   </p>
 912   </#macro>
 913   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 914   <#-- SPAN  																													-->
 915   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 916   <#-- class 	: '' / string  																									-->
 917   <#-- id 	: '' / string 																									-->
 918   <#-- align 	: '' / string 																									-->
 919   <#-- hide 	: [] / array 																									-->
 920   <#-- collapsed : false / Bool 																								-->
 921   <#-- params : '' / string 																									-->
 922   <#macro span id='' class='' hide=[] collapsed=false align='' params=''>
 923   <#if collapsed><#local class += ' ' + 'collapse' /></#if>
 924   <#local class += ' ' + alignmentSettings(align,'') + ' ' + displaySettings(hide,'inline-flex') />
 925   <span<#if class?trim!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if><#if id!=''> ${id}</#if>>
 926   <#nested>
 927   </span>
 928   </#macro>
 929   <#-- PRE -->
 930   <#macro pre id='' class='' hide=[] collapsed=false align='' params=''>
 931   <#if collapsed><#local class += ' ' + 'collapse' /></#if>
 932   <#local class += ' ' + alignmentSettings(align,'') + ' ' + displaySettings(hide,'block') />
 933   <pre<#if class?trim!=''> class="${class?trim}"</#if><#if params!=''> ${params}</#if><#if id!=''> ${id}</#if>>
 934   <#nested>
 935   </pre>
 936   </#macro>
 937   <#-- --------------------------------------------------------------------------------------------------------------------- 	-->
 938   <#-- TABS  																													-->
 939   <#-- ---------------------------------------------------------------------------------------------------------------------  -->
 940   <#-- class 	: '' / string  																									-->
 941   <#-- id 	: '' / string 																									-->
 942   <#-- align 	: '' / string 																									-->
 943   <#-- hide 	: [] / array 																									-->
 944   <#-- collapsed : false / Bool 																								-->
 945   <#-- params : '' / string 																									-->
 946   <#-- Tab Container 																											-->
 947   <#-- style: tabs/tabs nav-justified/pills/pills nav-stacked/pills nav-justified 											-->
 948   <#macro tabs color='' style='tabs' class='' id='' hide=[] collapsed=false params=''>
 949   <#if collapsed><#local class += ' ' + 'collapse' /></#if>
 950   <#if hide??><#local class += ' ' + displaySettings(hide,'block') /></#if>
 951   <#if style = 'tabs'><#local class += ' card card-nav-tabs' /></#if>
 952   <#if propagateParentMacro?? && propagateParentMacro = 'boxBody'><#local class=' card card-plain' /></#if>
 953   <#if color != ''><#local class += ' ' + color /></#if>
 954   <#assign propagateTabStyle = style />
 955   <div<#if class?trim!=''> class="${class?trim}"</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 956   <#nested>
 957   </div>
 958   </#macro>
 959   <#-- Tabs List -->
 960   <#-- type is deprecated -->
 961   <#macro tabList style='tabs' vertical=false id='' color='' params=''>
 962   <#if propagateTabStyle?? ><#local style = propagateTabStyle /></#if>
 963   <#if style != 'pills'>
 964   <div class="card-header card-header-primary">
 965   	<div class="nav-tabs-navigation">
 966   		<div class="nav-tabs-wrapper">
 967   </#if>
 968   <ul class="nav nav-${style}<#if style='pills'> nav-pills-icons</#if><#if vertical> flex-column mb-3</#if>" data-tabs="tabs" <#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if> role="tablist">
 969   	<#nested>
 970   </ul>
 971   <#if style != 'pills'>
 972   		</div>
 973   	</div>
 974   </div>
 975   </#if>
 976   </#macro>
 977   <#-- Tabs -->
 978   <#macro tabLink class='' hide=[] id='' active=false href='' title=''tabLabel=''  tabIcon='' tabClass='' params=''>
 979   <li class="nav-item"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 980   <#local tabLinkClass = class + ' nav-link' />
 981   <#if active><#local tabLinkClass += ' active' /></#if>
 982   <#local tabLinkSettings = 'role="tab" aria-expanded="${active?c}" aria-controls="${href?remove_beginning("#")}"' />
 983   <#if href?contains('#') && href?contains('.jsp') == false>
 984   	<#local tabLinkSettings += ' data-toggle="tab"' />
 985   	<#local tabLinkId = '${href?remove_beginning("#")}-tab' />
 986   <#else>
 987   	<#local tabLinkId = href?keep_after_last('/')?keep_before('.')?lower_case />
 988   </#if>
 989   <@link class=tabLinkClass?trim href=href id=tabLinkId title=title params=tabLinkSettings>
 990   	<#if tabIcon!=''><@icon style=tabIcon /></#if> <#if tabLabel !=''>${tabLabel!}<#else>${title!}</#if>
 991   	<#nested>
 992   </@link>
 993   </li>
 994   </#macro>
 995   <#-- TAB Content -->
 996   <#macro tabContent id='' params=''>
 997   <div class="card-body">
 998   	<div class="tab-content"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 999   		<#nested>
 1000   	</div>
 1001   </div>
 1002   </#macro>
 1003   <#-- Tab Panel BS4 -->
 1004   <#macro tabPanel id params='' active=false>
 1005   <div class="tab-pane  mt-2 fade<#if active> show active</#if>" role="tabpanel" id="${id}" aria-labelledby="${id}-tab"<#if params!=''> ${params}</#if>>
 1006   <#nested>
 1007   </div>
 1008   </#macro>
 1009   <#-- ACCORDION --> 
 1010   <#-- The accordionContainer is the container for accordionPanel, which itself is the container for accordionHeader and accordionBody -->
 1011   <#-- The childId argument in accordionPanel is meant to be used in the two sub-macros: accordionHeader and accordionBody -->
 1012   <#macro accordionContainer id='' params=''>
 1013   <#if id = '' >
 1014      <#if accordionContainerId?? == false><#assign accordionContainerId = 1 ><#else><#assign accordionContainerId = accordionContainerId + 1 ></#if>
 1015      <#local id = 'accCont_'+ accordionContainerId >
 1016   </#if>
 1017   	<div class="accordion" id="${id}"<#if params!=''> ${params}</#if>>
 1018   		<#assign parentId = id>
 1019   		<#nested>
 1020   	</div>
 1021   </#macro>
 1022   <#macro accordionPanel color='' collapsed=true childId='' id='' params=''>
 1023   	<div class="card<#if color!=''> bg-${color}</#if> card-collapse"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1024   		<#if collapsed>
 1025   			<#assign aClass = 'collapsed'>
 1026   			<#assign expanded = 'false'>
 1027   			<#assign childClass = 'collapse'>
 1028   		<#else>
 1029   			<#assign aClass = ''>
 1030   			<#assign expanded = 'true'>
 1031   			<#assign childClass = 'collapse show'>
 1032   		</#if>
 1033   		<#assign childId = childId>
 1034   		<#nested>
 1035   	</div>
 1036   </#macro>
 1037   <#-- ACCORDION ELEMENT --> 
 1038   <#-- The boxTools parameter is unused, kept for backwards compatibility -->
 1039   <#macro accordionHeader id='' title='' parentId=parentId childId=childId boxTools=false params='' headerIcon='' >
 1040   <div class="card-header card-header-primary" id="${childId}-header"<#if params!=''> ${params}</#if>>
 1041   	<h2 class="mb-0">
 1042   		<button class="btn btn-link<#if aClass!=''> ${aClass}</#if>" type="button" data-toggle="collapse" data-target="#${childId}" aria-expanded="${expanded}" aria-controls="${childId}">
 1043   			<#if headerIcon!=''><@icon style=headerIcon /></#if> &nbsp;
 1044   			${title}
 1045   	</h2>
 1046   	<#local nested><#nested></#local>
 1047   	<#if nested?has_content>
 1048   	<div class="box-tools">
 1049   		${nested}
 1050   	</div>
 1051   	</#if>
 1052   </div>
 1053   <#assign parentId=parentId />
 1054   </#macro>
 1055   <#macro accordionBody id=childId parentId=parentId class=childClass expanded=expanded params=''>
 1056   <div id="${id}" class="${class}" aria-labelledby="${childId}-header" data-parent="#${parentId}" <#if params!=''> ${params}</#if>>
 1057   	<@boxBody>
 1058   		<#nested>
 1059   	</@boxBody>
 1060   </div>
 1061   </#macro>
 1062   <#macro progressBar description='' id='' params='style=\"height:18px; margin-top:40px;\"'>
 1063   <div class="progress"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1064   	<div id="progressbar" class="progress-bar" role="progressbar">
 1065   		<div id="complexity"><span class="d-none">0%</span></div>
 1066   	</div>
 1067   </div>
 1068   <#if description!=''>
 1069   	<span class="progress-description">${description}</span>
 1070   </#if>
 1071   </#macro>
 1072   
 1073   <#-- Progress macro
 1074       token : the progress manager Feed Token
 1075       interval : refresh period in milli seconds (if the feed token is provided) 
 1076       showReport : display the messages report (if the feed token is provided) -->
 1077   <#macro progress color='primary' id='' params='' value=0 min=0 max=100 text='' progressId='progressbar' token='' label='' showReport=false intervalTime=2000 >
 1078   <#if label!='' >
 1079   <div id="${progressId}-label" >${label}</div>
 1080   </#if>
 1081   <div class="progress"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1082   	<div id="${progressId}" class="progress-bar progress-bar-${color}<#if token!=''> progressmanager</#if>" role="progressbar" style="width: ${value}%;" aria-valuenow="${value}" aria-valuemin="${min}" aria-valuemax="${max}" <#if token!=''>token="${token}" intervalTime=${intervalTime} showReport=${showReport?c}</#if> >
 1083           <#if text=''>${value}%<#else>${text}</#if>
 1084   	</div>       
 1085   </div>
 1086   <#if showReport >
 1087   <div id="${progressId}-report" class="progress-bar-report" lastline=0></div>
 1088   </#if>
 1089   </#macro>
 1090   
 1091   <#-- INFO-BOX AdminTLE (widget) -->
 1092   <#-- color: only for the left side showing the icon. -->
 1093   <#-- bgColor: for the right side containing the text -->
 1094   <#macro infoBox color='' boxText='' boxIcon='' boxNumber='0' unit='' bgColor='' progressBar='' progressDescription='' id='' params=''>
 1095   <div class="card m-2 small-box<#if bgColor!=''> ${bgColor}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1096   	<div class="card-body">
 1097   		<span class="info-box-icon<#if color!=''> ${color}</#if>"><@icon style=boxIcon /></span><#if boxText !=''><span class="info-box-text ml-2">${boxText}</span></#if>
 1098   		<div class="info-box-content">
 1099   			<#if boxNumber!='0'><span class="info-box-number">${boxNumber?trim}<#if unit!=''> <small>${unit}</small></#if></span></#if>
 1100   			<#if bgColor!='' && progressBar!=''><div class="progress"><div class="progress-bar" style="width: ${(boxNumber?trim?number/progressBar?trim?number*100)?string.computer}%"></div></div></#if>
 1101   			<#if progressDescription!=''><span class="progress-description">${progressDescription}</span></#if>
 1102   			<#nested />
 1103   		</div>
 1104   	</div>
 1105   </div>
 1106   </#macro>
 1107   <#-- TAG -->
 1108   <#-- color: default/primary/success/info/warning/danger/ -->
 1109   <#macro tag color='default' class='' size='' title='' tagIcon='' id='' params='' deprecated...>
 1110   <@deprecatedWarning args=deprecated />	
 1111   	<span class="badge badge-${color}<#if class!=''> ${class}</#if>"<#if title!=''> title='${title}'</#if><#if id!=''>id='${id}'</#if><#if params!=''>${params}</#if>>
 1112   		<#if tagIcon !=''>
 1113   		<@icon style=tagIcon />
 1114   		</#if>
 1115   		<#nested>
 1116   	</span>
 1117   </#macro>
 1118   <#-- NAVBAR -->
 1119   <#macro navBar tag='nav' class='' id='' params=''>
 1120   <${tag} class="navbar<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1121   	<#nested>
 1122   </${tag}>
 1123   </#macro>
 1124   <#-- NAV -->
 1125   <#macro nav tag='nav' type='tab' class='' id='' params=''>
 1126   <${tag} class="nav nav-${type!}<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1127   	<#nested>
 1128   </${tag}>
 1129   </#macro>
 1130   <#-- NAVITEM -->
 1131   <#macro navItem href='' name='' active=false title='' alt='' target='' tag='li' class='' id='' params=''>
 1132   <${tag} class="nav-link<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1133   	<#if href !='' >
 1134   		<@link class='nav-link' href=href name=name title=title alt=alt target=target active=active /> 
 1135   	</#if>
 1136   	<#nested>
 1137   </#${tag}>
 1138   </#macro>
 1139   <#-- BUTTON -->
 1140   <#-- bootstrap 3 : size: btn-xs/btn-sm/btn-lg -->
 1141   <#-- upcoming bootstrap 4 : size: btn-sm for small buttons/empty for medium buttons/btn-lg for large buttons -->
 1142   <#-- color: default[bootstrap4 : secondary]/primary/success/warning/danger/info -->
 1143   <#-- color (upcoming bootstrap 4): btn-outline-default/btn-outline-primary/btn-outline-success/btn-outline-warning/btn-outline-danger/btn-outline-info/ -->
 1144   <#-- style: btn-block/btn-flat/close/navbar-toggle/collapsed... -->
 1145   <#-- type: button/submit/reset -->
 1146   <#-- params: data-toggle/data-target/data-dismiss... -->
 1147   <#-- buttonIcon: icon name ex: info/check/comment/envelope... -->
 1148   <#-- iconPosition: left/right -->
 1149   <#-- cancel: switch to true for a cancellation form button. Adds the "formnovalidate" attribute to the button, as well as the right class -->
 1150   <#-- formId: contains the form ID if the button is outside of the form -->
 1151   <#-- buttonTargetId: contains the target element ID -->
 1152   <#-- showTitle, showTitleXs, showTitleSm, showTitleMd, showTitleLg are deprecated in Lutece v7 -->
 1153   <#macro button name='' id='' type='button' size='' color='' style='' class='' params='' value='' title='' tabIndex='' hideTitle=[] showTitle=true showTitleXs=true showTitleSm=true showTitleMd=true showTitleLg=true buttonIcon='' disabled=false iconPosition='left' dropdownMenu=false cancel=false formId='' buttonTargetId='' deprecated...>
 1154   	<@deprecatedWarning args=deprecated />
 1155   	<#if cancel || color = 'default' || color='btn-default' || color='btn-secondary' || color='secondary'>
 1156   		<#local buttonColor = 'default' />
 1157   	<#elseif !cancel && color=''>
 1158   		<#local buttonColor = mainColor />
 1159   	<#else>
 1160   		<#local buttonColor = color />
 1161   	</#if>
 1162   	<#-- Visibility of button title -->
 1163   	<#local displayTitleClass = displaySettings(hideTitle,'inline-flex') />
 1164   	<#if style != ''>
 1165   		<#if style?contains('card-control')>
 1166   			<#if style?contains('collapse')>
 1167   				<#local widgetAction = 'collapse' />
 1168   				<div style="display:none;">
 1169   					<script>
 1170   						$(document).ready(function() {
 1171   							<#if buttonIcon = 'minus'>
 1172   							$("${buttonTargetId}").addClass("show");
 1173   							<#else>
 1174   							$("${buttonTargetId}").addClass("collapse");
 1175   							</#if>
 1176   						});
 1177   					</script>
 1178   				</div>
 1179   			<#elseif style?contains('remove')>
 1180   				<#local widgetAction = 'remove' />
 1181   			</#if>
 1182   			<#local btnStyle = style?replace('collapse|remove', '', 'r')?trim />
 1183   		<#elseif style?contains('modal')>
 1184   			<#local widgetAction = 'modal' />
 1185   			<#local btnStyle = style?replace('modal', '', 'r')?trim />
 1186   		<#else>
 1187   			<#local btnStyle = style />
 1188   		</#if>
 1189   	</#if>
 1190   	<#if isContainerTd??>
 1191   		<#if hideTitle?size gt 0 && isContainerTd>
 1192   			<#local class += ' btn-just-icon' />
 1193   		</#if>
 1194   	</#if>
 1195   	<button class="<#if style!='close'>btn</#if><#if size!=''> btn-${size}</#if><#if buttonColor!=''> btn-${buttonColor}</#if><#if btnStyle?? && btnStyle!=''> ${btnStyle}</#if><#if dropdownMenu> dropdown-toggle</#if><#if class!=''> ${class}</#if>" type="${type}"<#if title!=''> title="${title}"</#if><#if name!=''> name="${name}"</#if><#if id!=''> id="${id}"</#if><#if value!=''> value="${value}"</#if><#if params!=''> ${params}</#if><#if disabled> disabled</#if><#if dropdownMenu> data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"</#if><#if widgetAction?? && widgetAction!=''><#if widgetAction = 'collapse' || widgetAction = 'modal'> data-toggle="${widgetAction}"<#elseif widgetAction = 'remove'> data-dismiss="alert"</#if></#if><#if buttonTargetId!=''> data-target="${buttonTargetId}"</#if><#if cancel> formnovalidate</#if><#if formId!=''> form="${formId}"</#if>>
 1196   		<#if buttonIcon!='' && iconPosition='left'><@icon style=buttonIcon /></#if>
 1197   		<#local nestedContent><#nested /></#local>
 1198   		<#local nestedContent = nestedContent?trim />
 1199   		<#if nestedContent=''>
 1200   			<#if displayTitleClass!=''><span class="${displayTitleClass}"></#if>
 1201   				${title}
 1202   			<#if displayTitleClass!=''></span></#if>
 1203   		</#if>
 1204   		<#if nestedContent!='' && !dropdownMenu><#if displayTitleClass!=''><span class="${displayTitleClass}"></#if><#nested><#if displayTitleClass!=''></span></#if></#if>
 1205   		<#if buttonIcon!='' && iconPosition='right'><@icon style=buttonIcon /></#if>
 1206   	</button>
 1207   	<#if dropdownMenu>
 1208   		<ul class="dropdown-menu"<#if id!=''> id="${id}-content" aria-labelledby="${id}-content"</#if>>
 1209   			<#nested>
 1210   		</ul>
 1211   	</#if>
 1212   </#macro>
 1213   <#-- A BUTTON (LINK STYLED AS A BUTTON) -->
 1214   <#-- size: sm/lg/or EMPTY for medium size-->
 1215   <#-- color: default/primary/success/warning/danger/info/ -->
 1216   <#-- style: btn-block/btn-flat/disabled/btn-app -->
 1217   <#-- icon: icon name ex: info/check/comment/envelope... -->
 1218   <#macro aButton name='' id='' href='' target='' size='' color='' style='btn' align='' class='' params='' title='' tabIndex='' hideTitle=[]  buttonIcon='' disabled=false iconPosition='left' dropdownMenu=false deprecated...>
 1219   <@deprecatedWarning args=deprecated />	
 1220   	<#-- Visibility of button title -->
 1221   	<#local displayTitleClass = displaySettings(hideTitle,'inline') />
 1222   	<#if color = 'default' || color='btn-default' || color='btn-secondary' || color='secondary'>
 1223   		<#local buttonColor = 'default' />
 1224   	<#elseif color = '' || color = 'primary'>
 1225   		<#local buttonColor = mainColor />
 1226   	<#else>
 1227   		<#local buttonColor = color />
 1228   	</#if>
 1229   	<#if dropdownMenu>
 1230   		<div class="btn-group">
 1231   	</#if>
 1232   	<#local class += alignmentSettings(align,'') />
 1233   	<#if isContainerTd??>
 1234   		<#local isContainerTd = isContainerTd />
 1235   		<#if hideTitle?size gt 0 && isContainerTd>
 1236   			<#local class += ' btn-just-icon' />
 1237   		</#if>
 1238   	</#if>
 1239   	<a class="${style} <#if size!=''> btn-${size}</#if> btn-${buttonColor}<#if class!=''> ${class}</#if>"<#if name!=''> name="${name}"</#if><#if id!=''> id="${id}"</#if> href="${href}" title="${title}"<#if target!=''> target="${target}"</#if><#if params!=''> ${params}</#if><#if disabled> disabled</#if><#if dropdownMenu> data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"</#if>>
 1240   		<#if buttonIcon!='' && iconPosition='left'><@icon style=buttonIcon /></#if>
 1241   		<span class="${displayTitleClass}">${title}</span>
 1242   		<#if buttonIcon!='' && iconPosition='right'><@icon style=buttonIcon /></#if>
 1243   		<#if !dropdownMenu>
 1244   		<#nested>
 1245   		</#if>
 1246   	</a>
 1247   		<#if dropdownMenu>
 1248   		<div class="dropdown-menu"<#if id!=''> id="${id}" aria-labelledby="${id}"</#if>>
 1249   			<#nested>
 1250   		</div>
 1251   		</div>
 1252   		</#if>
 1253   </#macro>
 1254   <#-- BTN TOOLBAR -->
 1255   <#macro btnToolbar id='' class='' align='' ariaLabel='' params=''>
 1256   <#if align!=''><#local class += ' ' + alignmentSettings(align,'') /></#if>
 1257   <div class="btn-toolbar<#if class!=''> ${class?trim}</#if>" role="toolbar"<#if ariaLabel!=''> aria-label="${ariaLabel}"</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1258   <style type="text/css">
 1259   .btn-toolbar > div:not(:last-of-type) {margin-right:0.2rem;}
 1260   </style>
 1261   	<#nested>
 1262   </div>
 1263   </#macro>
 1264   <#-- BTN GROUP -->
 1265   <#-- size: sm/empty/lg -->
 1266   <#-- align: left/center/right -->
 1267   <#macro btnGroup align='' size='' class='' id='' params='' ariaLabel='' hide=[]  deprecated...>
 1268   <@deprecatedWarning args=deprecated />	
 1269   <#local class += ' ' + displaySettings(hide,'inline-flex') + ' ' + alignmentSettings(align,'') />
 1270   <div class="btn-group<#if size!=''> btn-group-${size}</#if> align-items-center<#if class!=''> ${class?trim}</#if>" role="group"<#if ariaLabel!=''> aria-label="${ariaLabel}"</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1271   	<#nested>
 1272   </div>
 1273   </#macro>
 1274   <#macro actionButtons button1Name='' button2Name='' i18nValue1Key='portal.admin.message.buttonValidate' i18nValue2Key='portal.admin.message.buttonCancel' url1='' url2='' icon1='save' icon2='times' offset=3 >
 1275   	<@formGroup rows=2>
 1276           <#if url1 != ''>
 1277   			<@aButton href='${url1}' buttonIcon='${icon1}' title='#i18n{${i18nValue1Key}}' />
 1278           <#else>
 1279   			<@button type='submit' name='${button1Name}' buttonIcon='${icon1}' title='#i18n{${i18nValue1Key}}' />
 1280           </#if>
 1281           <#if url2 != ''>
 1282   			<@aButton href='${url2}' buttonIcon='${icon2}' title='#i18n{${i18nValue2Key}}' color='secondary' />
 1283           <#else>
 1284               <#if button2Name != ''>
 1285   				<@button type='submit' name='${button2Name}' buttonIcon='${icon2}' title='#i18n{${i18nValue2Key}}' color='secondary' />
 1286               </#if>
 1287           </#if>
 1288   	</@formGroup>
 1289   </#macro>
 1290   <#-- Radio button/Checkbox as buttons (to use with btnGroup)  -->
 1291   <#-- type: radio/checkbox -->
 1292   <#macro btnGroupRadioCheckbox type='checkbox' color=mainColor size='' name='' id='' params='' ariaLabel='' labelFor='' labelKey='' labelParams='' tabIndex='' value='' checked=false>
 1293   <label class="btn btn-${color}<#if size!=''> btn-${size}</#if>" for="${labelFor}"<#if labelParams!=''> ${labelParams}</#if>>
 1294   <input type="${type}" name="${name}" id="${id}" autocomplete="off"<#if value!=''> value="${value}"</#if><#if params!=''> ${params}</#if><#if tabIndex!=''> tabindex="${tabIndex}"</#if><#if checked> checked</#if> /><#if labelKey!=''>${labelKey}</#if>
 1295   </label>
 1296   </#macro>
 1297   <#-- Simple links a href, anchors -->
 1298   <#macro link href='' class='' id='' name='' title='' alt='' target='' params=''>
 1299   	<a href="${href}"<#if class!=''> class="${class}"</#if><#if id!=''> id="${id}"</#if><#if name!=''> name="${name}"</#if><#if target!=''> target="${target}"</#if><#if title!=''> title="${title}"</#if><#if alt!=''> alt="${alt}"</#if><#if params!=''> ${params}</#if>>
 1300   		<#nested>
 1301   	</a>
 1302   </#macro>
 1303   <#-- MODAL -->
 1304   <#-- bgColor: modal-default/modal-primary/modal-info/modal-warning/modal-danger -->
 1305   <#macro modal id params='' bgColor='' size=''>
 1306   <div class="modal ${bgColor} fade" role="dialog" id="${id}" data-toggle="modal"<#if params!=''> ${params}</#if>>
 1307   	<div class="modal-dialog<#if size!=''> modal-${size}</#if>" role="document">
 1308   		<div class="modal-content">
 1309   			<#nested>
 1310   		</div>
 1311   	</div>
 1312   </div>
 1313   </#macro>
 1314   <#macro modalHeader titleLevel='h4' modalTitle='' id='' params=''>
 1315   <div class="modal-header"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1316   	<${titleLevel} class="modal-title">${modalTitle}</${titleLevel}>
 1317   	<#nested>
 1318   	<button type="button" class="close" data-dismiss="modal" aria-label="Close">
 1319   		<span aria-hidden="true">&times;</span>
 1320   	</button>
 1321   </div>
 1322   </#macro>
 1323   <#macro modalBody id='' params=''>
 1324   <div class="modal-body"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1325   	<#nested>
 1326   </div>
 1327   </#macro>
 1328   <#macro modalFooter id='' params=''>
 1329   <div class="modal-footer"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1330   	<#nested>
 1331   </div>
 1332   </#macro>
 1333   <#-- BREADCRUMBS -->
 1334   <#macro breadcrumbs id='' class='' params=''>
 1335   <ol class="breadcrumb"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1336   	<#nested>
 1337   </ol>
 1338   </#macro>
 1339   <#macro breadcrumbItem class='' id='' params=''>
 1340   <li class="breadcrumb-item <#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1341   	<#nested>
 1342   </li>
 1343   </#macro>
 1344   <#-- CALLOUT -->
 1345   <#-- AdminLTE classes: info/warning/danger/success -->
 1346   <#macro callOut color='' titleLevel='h3' title='' callOutIcon='' id='' params=''>
 1347   <div class="alert<#if color!=''> ${color}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1348   	<#if title!=''><${titleLevel}><#if callOutIcon!=''><@icon style=callOutIcon /></#if> ${title}</${titleLevel}></#if>
 1349   	<#nested>
 1350   </div>
 1351   </#macro>
 1352   <#-- ALERT -->
 1353   <#-- classes: alert-success/alert-info/alert-warning/alert-danger + alert-dismissible -->
 1354   <#-- color: primary/success/info/warning/danger -->
 1355   <#macro alert class='' color='' titleLevel='h3' title='' iconTitle='' dismissible=false id='' params=''>
 1356   <div class="alert d-flex align-items-center<#if class!=''> ${class}</#if><#if color!=''> alert-${color}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1357   	<#if dismissible>
 1358   		<button type="button" class="close" data-dismiss="alert" aria-hidden="true">
 1359   			&times;
 1360   		</button>
 1361   	</#if>
 1362   	<#if iconTitle!=''><@icon style=iconTitle class='mr-2' /></#if>
 1363   	<#if title!=''><${titleLevel}>${title}</${titleLevel}></#if>
 1364   	<#nested>
 1365   </div>
 1366   </#macro>
 1367   <#---------------------------------------------------------->
 1368   <#-- Card as Box 																				-->
 1369   <#-- color: default/primary/info/success/warning/danger 	-->
 1370   <#-- style: solid (no top border) 												-->
 1371   <#-- collapsed: true/false 																-->
 1372   <#---------------------------------------------------------->
 1373   <#macro box color='' id='' style='' class='' title='' params='' collapsed=false>
 1374   <#if title=''>
 1375   	<#local nested><#nested></#local>
 1376   	<#if !nested?contains('card-body') && !nested?contains('card-footer')>
 1377   		<#local class += ' margin-bottom:5rem;'>
 1378   	</#if>
 1379   	<div class="card<#if style!=''> text-${style}</#if><#if class!=''> ${class}</#if><#if collapsed> collapsed-box</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1380   		<#nested>
 1381   	</div>
 1382   <#else>
 1383   	<@boxHeader title=title params=params skipHeader=true />
 1384   	<@boxBody><#nested></@boxBody>
 1385   </#if>
 1386   </#macro>
 1387   <#-- The boxTools parameter is unused, kept for backwards compatibility -->
 1388   <#macro boxHeader title='' i18nTitleKey='' hideTitle=[] showTitle=true id='' class='' params='' boxTools=false titleLevel='h5' deprecated...>
 1389   <@deprecatedWarning args=deprecated />
 1390   	<div class="card-header card-header-info d-flex justify-content-between<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1391   	<${titleLevel} class="box-title<#if showTitle=false> sr-only</#if>"><#if title!=''>${title}</#if><#if i18nTitleKey!=''>#i18n{${i18nTitleKey}}</#if></${titleLevel}>
 1392   		<#local nested><#nested></#local>
 1393   		<#if nested?has_content>
 1394   		<div class="d-flex align-items-center">
 1395   			<#nested>
 1396   		</div>
 1397   		</#if>
 1398   	</div>
 1399   </#macro>
 1400   <#macro boxBody id='' class='' collapsed=false align='' params=''>
 1401   <#if collapsed><#local class += ' ' + 'collapse' /></#if>
 1402   <#if align!=''><#local class += ' ' + alignmentSettings(align,'') /></#if>
 1403   	<div class="card-body<#if class!=''> ${class}</#if>" style="border-radius:0 0 3px 3px;"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1404   		<#assign propagateParentMacro = 'boxBody' />
 1405   			<#nested>
 1406   		<#assign propagateParentMacro = '' />
 1407   	</div>
 1408   </#macro>
 1409   <#macro boxFooter class='' align='' id='' params=''>
 1410   <#if align!=''><#local class += ' ' + alignmentSettings(align,'') /></#if>
 1411   	<div class="card-footer<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1412   		<#nested>
 1413   	</div>
 1414   </#macro>
 1415   <#---------------------------------------->
 1416   <#-- color: Bootstrap -->
 1417   <#-- unit: %,... -->
 1418   <#macro smallBox color='' title='' text='' boxIcon='' titleLevel='h5' unit='' url='' urlText='' id='' params='' fontSize='40px'>
 1419   <div class="card m-2 small-box<#if color!=''> bg-${color}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1420   	<div class="card-body">
 1421   		<#if url!=''><a class="card-link<#if color!=''> text-white</#if>" href="${url}"></#if>
 1422   		<${titleLevel} class="card-title"><@icon style=boxIcon /> 
 1423   		<#if unit!=''> ${unit}</#if></${titleLevel}>
 1424   		<#if url!=''></a></#if>
 1425   		<h3 class="card-text "> ${text} <span class="font-weight-bold">${title}</span></h3>
 1426   	</div>
 1427   </div>
 1428   </#macro>
 1429   <#-- AdminLTE Error Page -->
 1430   <#-- Error Type: 500,404... -->
 1431   <#-- Color: primary/blue/navy/aqua/teal/green/orange/yellow/red/purple/maroon/gray/black... -->
 1432   <#macro errorPage color='' errorType='' id='' params=''>
 1433   <div class="error-page"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1434   	<h2 class="headline text-${color}">${errorType}</h2>
 1435   	<div class="error-content">
 1436   		<h3>
 1437   			<@icon style='warning' class='text-${color}' />
 1438   			<#if errorType=='404'>
 1439   				#i18n{portal.util.error404.title}
 1440   			<#elseif errorType='500'>
 1441   				#i18n{portal.util.error500.title}
 1442   			<#else>...
 1443   			</#if>
 1444   		</h3>
 1445   		<p>
 1446   			<#if errorType=='404'>
 1447   				#i18n{portal.util.error404.text} 
 1448   			<#elseif errorType='500'>
 1449   				#i18n{portal.util.error500.text} 
 1450   			<#else>...
 1451   			</#if>
 1452   		</p>
 1453   		<@aButton href='' size='' color='bg-${color}' style='btn-flat'>
 1454   			<@icon style='home' />
 1455   			#i18n{portal.util.labelBackHome}
 1456   		</@aButton>
 1457   	</div>
 1458   </div>
 1459   </#macro>
 1460   <#-- CONTEXTUAL BACKGROUND P-->
 1461   <#-- Bootstrap colors: primary/success/info/warning/danger -->
 1462   <#-- AdminTLE colors: gray/gray-light/black/red/yellow/aqua/blue/light-blue/green/navy/teal/olive/lime/orange/fuchsia/purple/maroon -->
 1463   <#macro coloredBg color='' type='p' id='' params=''>
 1464   <${type} class="bg-${color}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1465   	<#nested>
 1466   </${type}>
 1467   </#macro>
 1468   <#macro listGroup id='' class='' params=''>
 1469   <ul class="list-group<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1470   	<#nested>
 1471   </ul>
 1472   </#macro>
 1473   <#macro listGroupItem id='' class='' params=''>
 1474   <li class="list-group-item list-group-item-action<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1475   	<#nested>
 1476   </li>
 1477   </#macro>
 1478   <#macro unstyledList id='' params=''>
 1479   <ul class="unstyled"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1480   	<#assign liClass = "margin">
 1481   	<#nested>
 1482   </ul>
 1483   </#macro>
 1484   <#-- DROPDOWN MENU LIST -->
 1485   <#macro dropdownList id='' params=''>
 1486   <div class="dropdown-menu"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
 1487   	<#nested>
 1488   </div>
 1489   </#macro>
 1490   <#macro dropdownItem class='' href='' title='' target='' id='' params=''>
 1491   	<a href="${href}" class="dropdown-item<#if class!=''> ${class}</#if>" title="${title}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if><#if target!=''> target="${target}"</#if>>${title}</a>
 1492   </#macro>
 1493   <#-- CARDS -->
 1494   <#macro card header=false headerTitle='' headerIcon=false headerTitleIcon=''>
 1495   <div class="card">
 1496   	<#if header><div class="card-header"><#if headerIcon><@icon style='${headerTitleIcon}' />&#160;</#if>${headerTitle}</div></#if>
 1497   	<div class="card-body">
 1498   		<#nested>
 1499   	</div>
 1500   </div>
 1501   </#macro>
 1502   <#-- FUNCTION: DISPLAY -->
 1503   <#-- This function returns a "visible" or "hidden" class for any component -->
 1504   <#-- breakpoints: "all" || "xs"/"sm"/"md"/"lg"/"xl" -->
 1505   <#-- display: inline/inline-block/block/table/table-cell/table-row/flex/inline-flex -->
 1506   <#function displaySettings breakPoints=[] display=''>
 1507   	<#local breakPointsOrdered = [] />
 1508   	<#if breakPoints?seq_contains('all')>
 1509   		<#local breakPointsOrdered += ['all'] />
 1510   	</#if>
 1511   	<#if breakPoints?seq_contains('xs')>
 1512   		<#local breakPointsOrdered += ['xs'] />
 1513   	</#if>
 1514   	<#if breakPoints?seq_contains('sm')>
 1515   		<#local breakPointsOrdered += ['sm'] />
 1516   	</#if>
 1517   	<#if breakPoints?seq_contains('md')>
 1518   		<#local breakPointsOrdered += ['md'] />
 1519   	</#if>
 1520   	<#if breakPoints?seq_contains('lg')>
 1521   		<#local breakPointsOrdered += ['lg'] />
 1522   	</#if>
 1523   	<#if breakPoints?seq_contains('xl')>
 1524   		<#local breakPointsOrdered += ['xl'] />
 1525   	</#if>
 1526   	<#local displayClass = '' />
 1527   	<#if breakPointsOrdered?? && breakPointsOrdered?size &gt; 0>
 1528   		<#list breakPointsOrdered as breakPoint>
 1529   			<#if breakPoint = 'xs' || breakPoint = 'all'>
 1530   				<#local displayClass += 'd-none' />
 1531   				<#if breakPoint = 'xs'>
 1532   					<#if !breakPointsOrdered?seq_contains('sm')>
 1533   						<#local displayClass += ' d-sm-${display}' />
 1534   					</#if>
 1535   				</#if>
 1536   			<#elseif breakPoint = 'sm' || breakPoint = 'md' || breakPoint = 'lg' || breakPoint = 'xl'>
 1537   				<#if breakPoint = 'sm'>
 1538   					<#if displayClass = ''>
 1539   						<#local displayClass += ' d-' + breakPoint + '-none' />
 1540   					<#elseif displayClass = 'd-none' && !breakPointsOrdered?seq_contains('md')>
 1541   						<#local displayClass += ' d-md-${display}' />
 1542   					</#if>
 1543   				<#elseif breakPoint = 'md'>
 1544   					<#if !breakPointsOrdered?seq_contains('sm')>
 1545   						<#local displayClass += ' d-' + breakPoint + '-none' />
 1546   					</#if>
 1547   					<#if !breakPointsOrdered?seq_contains('lg')>
 1548   						<#local displayClass += ' d-lg-${display}' />
 1549   					</#if>
 1550   				<#elseif breakPoint = 'lg'>
 1551   					<#if !breakPointsOrdered?seq_contains('md')>
 1552   						<#local displayClass += ' d-' + breakPoint + '-none' />
 1553   					</#if>
 1554   					<#if !breakPointsOrdered?seq_contains('xl')>
 1555   						<#local displayClass += ' d-xl-${display}' />
 1556   					</#if>
 1557   				<#elseif breakPoint = 'xl'>
 1558   					<#if !breakPointsOrdered?seq_contains('lg')>
 1559   						<#local displayClass += ' d-' + breakPoint + '-none' />
 1560   					</#if>
 1561   				</#if>
 1562   			<#else>
 1563   				<#local displayClass += ' undefined_breakpoint' />
 1564   			</#if>
 1565   		</#list>
 1566   	</#if>
 1567   	<#return displayClass?trim>
 1568   </#function>
 1569   <#-- This function returns responsive classes or flex order classes -->
 1570   <#-- type: col|offset|order -->
 1571   <#function responsiveDisplay type='' breakpoints={}>
 1572   	<#local responsiveDisplayClass = '' />
 1573   	<#list breakpoints as breakpointkey,breakpointvalue>
 1574   		<#if breakpointvalue!=0>
 1575   			<#if breakpointkey = 'xs'>
 1576   				<#local responsiveDisplayClass += ' ${type}-${breakpointvalue}' />
 1577   			<#else>
 1578   				<#local responsiveDisplayClass += ' ${type}-${breakpointkey}-${breakpointvalue}' />
 1579   			</#if>
 1580   		</#if>
 1581   	</#list>
 1582   	<#return responsiveDisplayClass?trim>
 1583   </#function>
 1584   <#function alignmentSettings align='' style=''>
 1585   	<#local x = ''>
 1586   	<#if align !=''>
 1587   		<#if align = 'left'>
 1588   			<#if style = 'text'>
 1589   				<#local x = 'text-left' />
 1590   			<#elseif style = ''>
 1591   				<#local x = 'd-flex justify-content-start' />
 1592   			</#if>
 1593   		<#elseif align = 'right'>
 1594   			<#if style = 'text'>
 1595   				<#local x = 'text-right' />
 1596   			<#elseif style = ''>
 1597   				<#local x = 'd-flex justify-content-end' />
 1598   			</#if>
 1599   		<#elseif align = 'center'>
 1600   			<#if style = 'text'>
 1601   				<#local x = 'text-center' />
 1602   			<#elseif style = ''>
 1603   				<#local x = 'd-flex justify-content-center' />
 1604   			</#if>
 1605   		</#if>
 1606   	</#if>
 1607   	<#return x>
 1608   </#function>
 1609   <#-- -------------------------------------------------
 1610   -- MACRO ADMIN STRUCTURE - HEADER + NAVBAR + FOOTER -- 
 1611   -------------------------------------------------- -->
 1612   <#-- MACRO adminHeader -->
 1613   <#macro adminHeader site_name=site_name>
 1614   <script src="js/admin/jquery/jquery-3.5.1.min.js"></script>
 1615   <script src="js/admin/jquery/jquery-migrate-3.3.1.min.js"></script>
 1616   </head>
 1617   <body class="d-flex flex-column vh-100 container-fluid">
 1618   	<div class="skipnav"><a href="#main">aller au contenu principal</a></div>
 1619   	<h1 id="top" class="sr-only sr-only-focusable">Haut de page</h1>
 1620   	<header class="main-header" role="banner">
 1621   	 	<nav class="navbar navbar-expand-lg bg-${mainColor} fixed-top" role="navigation">
 1622   			<div class="navbar-translate">
 1623   				<a class="navbar-brand" href="jsp/site/Portal.jsp" title="#i18n{portal.users.admin_header.title.viewSite} ${site_name}" target="_blank" >
 1624   					<img src="#dskey{portal.site.site_property.logo_url}" height="30" class="d-inline-block align-top" aria-hidden="true" title="#i18n{portal.users.admin_header.title.viewSite} ${site_name}" alt="${site_name}">
 1625   					<#if site_name?length &gt; 18> ${site_name?substring(0,16)}... <#else> ${site_name}</#if>
 1626   				</a>
 1627   				<button class="navbar-toggler" type="button" data-toggle="collapse" aria-expanded="false" aria-label="Toggle navigation">
 1628   					<span class="sr-only">Toggle navigation</span>
 1629   					<span class="navbar-toggler-icon"></span>
 1630   					<span class="navbar-toggler-icon"></span>
 1631   					<span class="navbar-toggler-icon"></span>
 1632   				</button>
 1633   			</div>
 1634   			<div class="collapse navbar-collapse nav-open">
 1635   				<ul class="navbar-nav mr-auto">
 1636   				<#list feature_group_list as feature_group>
 1637   				  <#if feature_group.features?size &gt; 1>
 1638   					 	<li class="nav-item dropdown">
 1639   							<a class="nav-link dropdown-toggle" id="dLabel${feature_group.id}Header" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" href="${admin_url}#${feature_group.id}">
 1640   								${feature_group.label}
 1641   							</a>
 1642   					   <div class="dropdown-menu" aria-labelledby="dLabel${feature_group.id}Header">
 1643   						 	<#list feature_group.features as feature>
 1644   								<#if !feature.externalFeature>
 1645   									<a class="dropdown-item" href="${feature.url}?plugin_name=${feature.pluginName}">${feature.name}</a>
 1646   								<#else>
 1647   									<a class="dropdown-item" href="${feature.url}">
 1648   										<#if feature.iconUrl?has_content><i class="${feature.iconUrl}"></i></#if> ${feature.name}
 1649   									</a>
 1650   								</#if>
 1651   						 	</#list>
 1652   							</div>
 1653   					 	</li>
 1654   				  <#else>
 1655   					 	<#list feature_group.features as feature>
 1656   					  	<li class="nav-item">
 1657   						  <#if !feature.externalFeature>
 1658   								<a class="nav-link" href="${feature.url}?plugin_name=${feature.pluginName}">${feature.name}</a>
 1659   						  <#else>
 1660   								<a class="nav-link" href="${feature.url}"><#if feature.iconUrl?has_content><i class="${feature.iconUrl}"></i></#if>${feature.name}</a>
 1661   						  </#if>
 1662   							</li>
 1663   					   </#list>
 1664   					 </#if>
 1665   			   </#list>
 1666   			</ul>
 1667   			<ul class="nav navbar-nav user">
 1668   				<li class="nav-item home">
 1669   					<a class="nav-link" href="${admin_url}" title="#i18n{portal.users.admin_header.homePage}">
 1670   						<i class="fas fa-home"></i>
 1671   					</a>
 1672   				</li>
 1673   				<#if user.userLevel == 0>
 1674   					<#assign hasIcon=false />
 1675   					<#if listLoggersInfo?has_content> 
 1676   						<#list listLoggersInfo?filter( logInfo -> ( logInfo.level = 'DEBUG' || logInfo.level = 'TRACE' ) ) as logInfo>
 1677   							<#if logInfo?size gt 0>
 1678   								<#if hasIcon=false >
 1679   								<li class="nav-item dropdown">
 1680   									<a class="nav-link dropdown-toggle" href="javascript:;" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
 1681   										<i class="fa fa-bell"></i>
 1682   										<span class="notification-badge badge-pill  badge-danger">1</span>
 1683   									</a>
 1684   									<div class="dropdown-menu logger" aria-labelledby="navbarDropdownMenuLink">
 1685   										<p><strong><span class="badge badge-danger">1</span> #i18n{portal.util.log.warningLevel}</strong></p>
 1686   									<#assign hasIcon = true />	
 1687   								</#if>
 1688   								<p><strong>${logInfo.name!}  - ${logInfo.level!}</strong> ${logInfo.path!}</p>
 1689   							</#if>	
 1690   						</#list>
 1691   					</#if>
 1692   					<#if hasIcon == true >
 1693   					</div>
 1694   				</li>
 1695   				</#if>
 1696   				<li class="nav-item home">
 1697   					<a class="nav-link" href="jsp/admin/AdminTechnicalMenu.jsp" title="#i18n{portal.admindashboard.view_dashboards.title}">
 1698   							<i class="fa fa-cog"></i>
 1699   					</a>
 1700   				</li>
 1701   				</#if>
 1702   				<li class="nav-item dropdown user-menu">
 1703   					<a href="${admin_url}#user-menu" class="nav-link dropdown-toggle" data-toggle="dropdown" id="dLabelUserHeader">
 1704   						<#if adminAvatar> 
 1705   							<img src="servlet/plugins/adminavatar/avatar?id_user=${user.userId}" height="32px" class="d-inline-block align-top rounded" aria-hidden="true" alt="User's avatar"> 
 1706   						<#else> 
 1707   							<img src="#dskey{portal.site.site_property.avatar_default}" height="32px" class="d-inline-block align-top rounded-pill" aria-hidden="true"  alt="User's avatar"> 
 1708   						</#if>     
 1709   						${dashboard_zone_4!}
 1710   					</a>
 1711   					<div class="dropdown-menu"  role="menu" aria-labelledby="dLabelUserHeader">
 1712   						<#if userMenuItems?has_content>   
 1713   							<#list userMenuItems as item>
 1714   									${item.content}
 1715   							</#list>
 1716   						</#if>
 1717   					</div>
 1718   				</li>
 1719   				<#if admin_logout_url?has_content>
 1720   					<li class="nav-item">
 1721   						<a class="nav-link" href="${admin_logout_url}" title="#i18n{portal.users.admin_header.deconnectionLink}">
 1722   							<i class="fa fa-power-off fa-fw"></i>
 1723   						</a>
 1724   					</li>
 1725   				</#if>
 1726   		  	</ul>
 1727   		</div>
 1728   	</nav>
 1729   </header>
 1730   <#if user.userLevel == 0>
 1731   <script>
 1732   $( function(){
 1733   	const loggers = document.querySelector('.logger') ;
 1734   	if( loggers.childElementCount > 0 ){
 1735   		if( !sessionStorage.getItem('lutece-debug-modal') ){
 1736   			sessionStorage.setItem('lutece-debug-modal', false )
 1737   		}
 1738   		var modalContent = '<h3>#i18n{portal.util.log.warningLevel}</h3><p><strong>#i18n{portal.util.log.modalWarningMessage}</strong></p><p class="text-center"><button class="btn btn-sm btn-danger" data-toggle="collapse" data-target="#info-log" aria-expanded="false" aria-controls="info-log" type="button">#i18n{portal.util.log.modalLabelButton}</button></p><blockquote class="collapse" id="info-log">' + loggers.innerHTML + '</blockquote>';
 1739   		var adminModalBody = $('#adminModal .modal-body')
 1740   		adminModalBody.html( modalContent )
 1741   		var adminModalLabel = $('#adminModalLabel')
 1742   		var adminModalHeader = $('#adminModal .modal-header')
 1743   		var adminModalHeaderBtn = $('#adminModal .modal-header button')
 1744   		adminModalLabel.html( 'Attention configuration non conforme !' )
 1745   		adminModalHeader.addClass('text-white')
 1746   		adminModalHeaderBtn.addClass('text-white')
 1747   		adminModalHeader.addClass('bg-danger')
 1748   		adminModalBody.addClass('text-danger')
 1749   		if( sessionStorage.getItem('lutece-debug-modal') === 'false' ){
 1750   			var myAdminModal = $('#adminModal').modal()
 1751   			myAdminModal.on('hidden.bs.modal', function (e) {
 1752   				sessionStorage.setItem('lutece-debug-modal', true )
 1753   			})
 1754   		}
 1755   	}
 1756   });
 1757   </script>
 1758   </#if>
 1759   <!-- Begin page content -->
 1760   <main role="main" class="flex-shrink-0">
 1761    	<!-- Close in footer -->
 1762   </#macro>
 1763   <#-- MACRO adminFooter -->
 1764   <#macro adminFooter >
 1765   	<!-- end content section -->
 1766   </main>
 1767   <!-- footer menu -->
 1768   <footer class="footer">
 1769   	<div class="container">
 1770   		<nav id="footer" role="navigation">
 1771   			<a class="navbar-link" href="https://lutece.paris.fr" target="lutece" title="#i18n{portal.site.portal_footer.labelPortal}">
 1772   				<img src="images/poweredby.png" alt="#i18n{portal.site.portal_footer.labelMadeBy}">
 1773   				<small>version ${version}</small>
 1774   			</a>
 1775   		</nav>
 1776   	</div>
 1777   </footer>
 1778   <div class="modal fade" id="adminModal" tabindex="-1" role="dialog" aria-labelledby="adminModalLabel" aria-hidden="true">
 1779   	<div class="modal-dialog" role="document">
 1780   	  <div class="modal-content">
 1781   		<div class="modal-header">
 1782   		  <h5 class="modal-title" id="adminModalLabel"></h5>
 1783   		  <button type="button" class="close" data-dismiss="modal" aria-label="#i18n{portal.site.admin_page.buttonClosed}">
 1784   			<span aria-hidden="true">&times;</span>
 1785   		  </button>
 1786   		</div>
 1787   		<div class="modal-body"></div>
 1788   		<div class="modal-footer">
 1789   		  <button type="button" class="btn btn-secondary" data-dismiss="modal">#i18n{portal.site.admin_page.buttonClosed}</button>
 1790   		</div>
 1791   	  </div>
 1792   	</div>
 1793     </div>
 1794   <!-- Included JS Files -->
 1795   <!-- Le javascript
 1796   =============================================================== -->
 1797   <!-- Placed at the end of the document so the pages load faster -->
 1798   <@coreAdminJSLinks />
 1799   ${javascript_files}
 1800   </#macro>
 1801   <#-- MACRO adminHome -->
 1802   <#macro adminHome >
 1803   <section class="dashboard-widgets">
 1804   <@row>
 1805   	<@columns xs=12 md=6 lg=4 class='widget'>
 1806   		${dashboard_zone_1!}
 1807   		<div>&nbsp;</div>
 1808   	</@columns>
 1809   	<@columns xs=12 md=6 lg=4 class='widget'>
 1810   		${dashboard_zone_2!}		
 1811   		<div>&nbsp;</div>
 1812   	</@columns>
 1813   	<@columns xs=12 md=6 lg=4 class='widget'>
 1814   		${dashboard_zone_3!}
 1815   		<div>&nbsp;</div>
 1816   	</@columns>
 1817   </@row>
 1818   </section>
 1819   </#macro>
 1820   <#-- MACRO adminDashboardWidget -->
 1821   <#macro adminDashboardWidget id title color='primary' url='' class='' bodyClass='table-responsive no-padding' params='' >
 1822   <@box style='solid' color='${color}' id='${id}_dashboard_card'>
 1823   	<@boxHeader titleLevel='h5' title='${title}'>
 1824   		<#if url!=''><@aButton color="link" class='card-control' href='${url!}' title='${title!}' size='sm' buttonIcon='cog' hideTitle=['all']  /></#if>
 1825   		<@button style='card-control collapse' buttonTargetId='#${id}_dashboard_card_body' buttonIcon='minus' size='sm' />
 1826   		<@button style='card-control remove' buttonTargetId='#${id}_dashboard_card' buttonIcon='times' size='sm' />
 1827   	</@boxHeader>
 1828   	<@boxBody class=bodyClass id='${id}_dashboard_card_body'>
 1829   	<#nested>
 1830   	</@boxBody>
 1831   </@box>
 1832   </#macro>
 1833   <#-- adminContentHeader  -->
 1834   <#macro adminContentHeader>
 1835   <header>
 1836   	<div class="row justify-content-between">
 1837   		<div class="col">
 1838   			<h3 class="ml-2 mb-4" id="feature-title">
 1839   			<#if feature_url?? && feature_title??>
 1840   				<a href="${feature_url}" title="${feature_title}">${feature_title!''}</a>
 1841   				<#else>
 1842   					${feature_title!''}
 1843   				</#if>
 1844   				<#if page_title?has_content><small>${page_title}</small></#if>
 1845   			</h3>
 1846   		</div>
 1847   		<@adminHeaderDocumentationLink />
 1848   	</div>
 1849   </header>
 1850   <section class="container-fluid<#if feature_url?? && feature_url?ends_with('AdminSite.jsp')>no-padding</#if>">
 1851   </#macro>
 1852   <#-- adminLoginPage  -->
 1853   <#macro adminLoginPage title='' site_name='SITE_NAME'>
 1854   <script src="js/admin/jquery/jquery-3.5.1.min.js"></script>
 1855   </head>
 1856   <body>
 1857   <img src="images/logo-header.png" class="fixed-top m-4" aria-hidden="true" title="LUTECE Back-Office" alt="LUTECE Back-Office">
 1858   <section id="login-page">
 1859   	<div class="container">
 1860   		<div class="row align-items-center vh-100">
 1861   			<div class="col-lg-6 col-md-6 ml-auto mr-auto mt-5">
 1862   				<div class="card card-login">
 1863   					<header class="card-header card-header-primary text-center">
 1864   						<h1 class="h2 mb-3 text-center">
 1865   							<a class="btn btn-link btn-block" href="jsp/site/Portal.jsp" title="${site_name!'Lutece'}">#i18n{portal.admin.admin_login.welcome}<br> <b>${site_name!'Lutece'}</b></a>
 1866   						</h1>
 1867   						<h2 class="card-title">${title}</h2>
 1868   					</header>
 1869   					<main class="card-body">
 1870   						<#nested>
 1871   					</main>
 1872   					<footer class="footer text-center mt-2">
 1873   						<@aButton href='https://lutece.paris.fr' params='target="_blank"' title='#i18n{portal.site.portal_footer.labelPortal}' hideTitle=['all'] color='link' class='btn-block'>
 1874   							<img src="images/poweredby.png" class="thumbnails" alt="logo lutece" title="Lutece">
 1875   						</@aButton>
 1876   					</footer>
 1877   				</div>	
 1878   			</div>	
 1879   		</div>
 1880   	</div>
 1881   </section>
 1882   <script>
 1883   $(function() {
 1884   	var randomImages = [#dskey{portal.site.site_property.back_images}];
 1885   	var rndNum = Math.floor(Math.random()*(randomImages.length));
 1886   	var bgImg = 'url(' + randomImages[rndNum] + ')';
 1887   	$("#login-page").css('background-image', bgImg );
 1888   });
 1889   </script>
 1890   </#macro>
 1891   <#-- adminHeaderDocumentationLink  -->
 1892   <#macro adminHeaderDocumentationLink >
 1893     <#if feature_documentation?has_content >
 1894   		<#if feature_documentation?exists>
 1895   			<div class="col text-right">
 1896   				<a class="btn btn-info" target="_blank" href="${feature_documentation}" title="#i18n{portal.features.documentation.help} [Nouvelle fenêtre]">
 1897   					<@icon class="fa-life-ring" /> #i18n{portal.features.documentation.help}
 1898   				</a>
 1899   			</div>
 1900   		</#if>
 1901   	</#if>
 1902   </#macro>
 1903   <#macro adminSiteColumnOutline columnid=''>
 1904   <div class="admin_column_outline">
 1905   	<span class="admin_column_id">${i18n("portal.site.columnId",columnid)}</span>
 1906   	<div><#nested></div>
 1907   </div>
 1908   </#macro>
 1909   <#-- MACRO adminSiteToolbar  -->
 1910   <#macro adminSiteToolbar >
 1911   <@btnToolbar>
 1912   	<@btnGroup>
 1913   		<@tform type='inline' action='jsp/admin/site/AdminSite.jsp' role='search'>
 1914   			<@input type='number' name='page_id' id='page_id' title='${i18n("portal.site.admin_page.buttonSearchPage")}' placeHolder='22' params=' style="width:4rem;"' />
 1915   			<@button type='submit' color='primary' title='${i18n("portal.site.admin_page.buttonSearchPage")}' hideTitle=['all'] buttonIcon='search' />
 1916   		</@tform>
 1917   	</@btnGroup>
 1918   	<@btnGroup class='ms-1 ml-1'>
 1919   		<@aButton href='' id='display-full' title='#i18n{portal.site.admin_page.buttonLargeScreen}' buttonIcon='desktop' color='primary'hideTitle=['all'] />
 1920   		<@aButton href='' id='display-940' title='#i18n{portal.site.admin_page.buttonTablet}' buttonIcon='tablet' color='primary' hideTitle=['all'] />
 1921   		<@aButton href='' id='display-480' title='#i18n{portal.site.admin_page.buttonSmartphone}' buttonIcon='mobile' color='primary' hideTitle=['all'] />
 1922   	</@btnGroup>
 1923   	<#if page.id != 1>
 1924   		<@btnGroup class='ms-1 ml-1'>
 1925   			<@aButton href='jsp/admin/site/AdminSite.jsp?page_id=${page.parentPageId}' color='success' buttonIcon='arrow-up' title='#i18n{portal.site.admin_page.buttonUpToParentPage}' hideTitle=['all'] />
 1926   			<@aButton href='jsp/admin/site/RemovePage.jsp?page_id=${page.id}' color='danger btn-icon' buttonIcon='trash text-white' title='#i18n{portal.site.admin_page.buttonDeletePage}' hideTitle=['all']  />
 1927   		</@btnGroup>
 1928   	</#if>
 1929   	<@btnGroup class='ms-1 ml-1'>
 1930   	<#if portlet_types_list?has_content>
 1931   		<@aButton class='dropdown-toggle' id='portlet-type' dropdownMenu=true href='#' title='#i18n{portal.site.admin_page.labelPortletPage}' buttonIcon='th-large' hideTitle=['xs','sm','md']>
 1932   			<#list portlet_types_list?sort_by("name") as portlet_type>
 1933   				<@dropdownItem class='portlet-type-ref' href='jsp/admin/DoCreatePortlet.jsp?portlet_type_id=${portlet_type.id}&amp;page_id=${page.id}' target='preview' title='${portlet_type.name}'>
 1934   					${portlet_type.name}
 1935   				</@dropdownItem>
 1936   			</#list>
 1937   		</@aButton>
 1938   	</#if>
 1939   	<#if extendableResourceActionsHtml?? && extendableResourceActionsHtml?has_content>
 1940   		${extendableResourceActionsHtml!}
 1941   	</#if>
 1942   	</@btnGroup>
 1943   	<@btnGroup class='ms-1 ml-1'>
 1944   		<@aButton href='jsp/admin/site/AdminSite.jsp?page_id=${page.id}&amp;param_block=2' buttonIcon='wrench' title='#i18n{portal.site.admin_page.labelPageProperty}' hideTitle=['xs','sm','md'] />
 1945   	</@btnGroup>
 1946   	<@btnGroup class='ms-1 ml-1'>
 1947   		<@aButton href='jsp/admin/site/AdminSite.jsp?page_id=${page.id}&amp;param_block=5'  buttonIcon='plus' title='#i18n{portal.site.admin_page.labelChildPagePage}' hideTitle=['xs','sm','md'] />
 1948   	</@btnGroup>
 1949   	<@btnGroup class='ms-1 ml-1'>
 1950   		<@aButton href='jsp/admin/site/AdminMap.jsp?page_id=${page.id }' buttonIcon='sitemap' title='Page ${page.name} - Id ${page.id}' hideTitle=['all'] ><@span hide=['all']>#i18n{portal.site.admin_page.tabAdminMapSite}</@span></@aButton>
 1951   	</@btnGroup>
 1952   	<@btnGroup class='ms-1 ml-1'>
 1953   		<@aButton href='' id='fullscreen' title='#i18n{portal.site.admin_page.buttonFullscreen}' buttonIcon='arrows-alt' color='secondary'  hideTitle=['all'] />
 1954   	</@btnGroup>
 1955   </@btnToolbar>
 1956   </#macro>
 1957   <#-- adminMessagePage  -->
 1958   <#macro adminMessagePage title=''>
 1959   <#assign title=title />
 1960   <#assign alerttype="secondary" />
 1961   <#assign icontype="fa-info-circle" />
 1962   <#if title??>
 1963   	<#if title?trim='' >
 1964   		<#assign title="Information" />
 1965   	</#if>		
 1966   </#if>		
 1967   <#if message.type == 2 >
 1968   	 <#assign alerttype="danger" />
 1969      <#assign icontype="fa-question-circle" />
 1970   <#elseif message.type == 3 >
 1971      <#assign alerttype="warning" />
 1972      <#assign icontype="fa-exclamation-circle" />
 1973   <#elseif message.type == 4 >
 1974   	 <#assign alerttype="warning" />
 1975      <#assign icontype="fa-question-circle" />
 1976   <#elseif message.type == 5 >
 1977      <#assign alerttype="danger" />
 1978      <#assign icontype="fa-ban" />
 1979   </#if>
 1980   <script src="js/admin/jquery/jquery-3.5.1.min.js"></script>
 1981   </head>
 1982   <body>
 1983   <div class="container">
 1984   	<div class="row justify-content-center align-items-center min-vh-100">
 1985   		<div class="col-sm-12 col-md-6">
 1986   			<div class="alert alert-${alerttype} text-center" role="alert">
 1987   				<h1><span class="fas ${icontype}"></span> ${title!}</h1>
 1988   				${text!}
 1989   				<#nested>
 1990   				<p class="text-center">
 1991   					<img src="images/poweredby.png" class="thumbnails" alt="logo lutece" title="Lutece">
 1992   				</p>
 1993   			</div>	
 1994   		</div>
 1995   	</div>
 1996   </div>
 1997   </#macro>
 1998   <#-- fieldSet  -->
 1999   <#macro fieldSet class='' fieldsetId='' fieldsetParams='' legend='' legendClass='' legendId='' legendIcon='' legendParams='' hideLegend=[] disabled=false>
 2000   <fieldset<#if class!=''> class="${class}"</#if><#if fieldsetId!=''> id="${fieldsetId}"</#if><#if fieldsetParams!=''> ${fieldsetParams}</#if><#if disabled> disabled</#if>>
 2001   	<#if legend!=''>
 2002   		<#local legendClass += ' ' +  displaySettings(hideLegend,'block') />
 2003   		<legend<#if legendClass!=''> class="${legendClass?trim}"</#if><#if legendId!=''> id="${legendId}"</#if><#if legendParams!=''> ${legendParams}</#if>><#if legendIcon!=''><@icon style=legendIcon /> </#if>${legend}</legend>
 2004   	</#if>
 2005   	<#nested>
 2006   </fieldset>
 2007   </#macro>
 2008   <#-- RESPONSIVE -->
 2009   <#-- HTML ELEMENTS -->
 2010   <#macro img url='' alt='' title='' class='' id='' params=''> 
 2011   <img src="${url}" alt="<#if alt!=''>${alt!}<#else>${title!}</#if>" title="${title}" class="thumbnails thumb-list<#if class!=''>  ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if> />
 2012   </#macro>
 2013   <#-- Email Default Template -->
 2014   <#macro emailTemplate title='Lutece' footer_link='https://lutece.paris.fr'> 
 2015   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 2016   <html xmlns="http://www.w3.org/1999/xhtml">
 2017   <head>
 2018       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 2019       <meta name="viewport" content="width=device-width"/>
 2020       <style type="text/css">
 2021   		* { margin: 0; padding: 0; font-size: 100%; font-family: 'Avenir Next', "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; line-height: 1.65; }
 2022   		img { max-width: 100%; margin: 0 auto; display: block; }
 2023   		body, .body-wrap { width: 100% !important; height: 100%; background: #f8f8f8; }
 2024   		a { color: #007bff; text-decoration: none; }
 2025   		a:hover { text-decoration: underline; }
 2026   		.text-center { text-align: center; }
 2027   		.text-right { text-align: right; }
 2028   		.text-left { text-align: left; }
 2029   		.button { display: inline-block; color: white; background: #007bff; border: solid #007bff; border-width: 10px 20px 8px; font-weight: bold; border-radius: 4px; }
 2030   		.button:hover { text-decoration: none; }
 2031   		h1, h2, h3, h4, h5, h6 { margin-bottom: 20px; line-height: 1.25; }
 2032   		h1 { font-size: 32px; }
 2033   		h2 { font-size: 28px; }
 2034   		h3 { font-size: 24px; }
 2035   		h4 { font-size: 20px; }
 2036   		h5 { font-size: 16px; }
 2037   		p, ul, ol { font-size: 16px; font-weight: normal; margin-bottom: 20px; }
 2038   		.container { display: block !important; clear: both !important; margin: 0 auto !important; max-width: 580px !important; }
 2039   		.container table { width: 100% !important; border-collapse: collapse; }
 2040   		.container .masthead { padding: 80px 0; background: #007bff; color: white; }
 2041   		.container .masthead h1 { margin: 0 auto !important; max-width: 90%; text-transform: uppercase; }
 2042   		.container .content { background: white; padding: 30px 35px; }
 2043   		.container .content.footer { background: none; }
 2044   		.container .content.footer p { margin-bottom: 0; color: #888; text-align: center; font-size: 14px; }
 2045   		.container .content.footer a { color: #888; text-decoration: none; font-weight: bold; }
 2046   		.container .content.footer a:hover { text-decoration: underline; }
 2047       </style>
 2048   </head>
 2049   <body>
 2050   <table class="body-wrap">
 2051   	<tr>
 2052   		<td class="container">
 2053   				<!-- Message start -->
 2054   				<table>
 2055   						<tr>
 2056   							<td align="center" class="masthead">
 2057   								<h1>${title}</h1>
 2058   							</td>
 2059   						</tr>
 2060   						<tr>
 2061   							<td class="content">
 2062   								<#nested>
 2063   							</td>
 2064   						</tr>
 2065   				</table>
 2066   		</td>
 2067   	</tr>
 2068   	<tr>
 2069   		<td class="container">
 2070   			<!-- Message start -->
 2071   			<table>
 2072   					<tr>
 2073   						<td class="content footer" align="center">
 2074   								<p><a href="${footer_link}">Lutece</a></p>
 2075   						</td>
 2076   					</tr>
 2077   			</table>
 2078   		</td>
 2079   	</tr>
 2080   </table>
 2081   </body>
 2082   </html>		
 2083   </#macro>
 2084   <#macro adminLanguage languages lang action='jsp/admin/DoChangeLanguage.jsp'>
 2085       <@row>
 2086   		<@columns class="mx-4">
 2087   			<@icon style='language' /> #i18n{portal.admin.admin_home.language}
 2088   		</@columns>
 2089       </@row>
 2090       <@tform method='post' action=action class='form-inline'>
 2091   		<@input type='hidden' name='token' value='${token}' />
 2092           <@row>
 2093               <@columns class="mx-4">
 2094               <#list languages as language>
 2095                   <#if lang==language.code>
 2096                           <#local languageButtonColor='success'>
 2097                   <#else>
 2098                           <#local languageButtonColor='default'>
 2099                   </#if>
 2100                   <@button color='${languageButtonColor}' type='submit' name='language' value='${language.code}' title='${language.name}' size='xs' />
 2101               </#list>
 2102               </@columns>
 2103           </@row>
 2104       </@tform>
 2105   </#macro>
 2106   <#macro adminAccessibilityMode>
 2107   <@tform method='post' action='jsp/admin/DoModifyAccessibilityMode.jsp' class="ml-2">
 2108   	<@input type='hidden' name='token' value='${token}' />
 2109   	<#if user.accessibilityMode>
 2110   		<@button color='link text-dark' size='sm' type='submit' buttonIcon='eye' title='#i18n{portal.users.admin_header.labelDeactivateAccessibilityMode}'/>
 2111   	<#else>
 2112   		<@button color='link text-dark' size='sm' type='submit' buttonIcon='eye-slash' title='#i18n{portal.users.admin_header.labelActivateAccessibilityMode}'/>
 2113   	</#if>
 2114   </@tform>
 2115   </#macro>
 2116   <#macro empty title='' subtitle='' iconName='mood-empty' img='' actionTitle='' actionBtn='primary' actionIcon='plus' actionUrl='#'>
 2117   <div class="empty">
 2118   	<#if img=''>
 2119   		<div class="empty-icon">
 2120   			<@icon prefix='ti ti-' style='${iconName}'  params='style="font-size:48px"'  />
 2121   		</div>
 2122   	<#else>
 2123   		<div class="empty-img"><img src="${img}" height="128"  alt=""></div>
 2124   	</#if>
 2125   	<p class="empty-title"><#if title=''>#i18n{portal.util.message.emptyTitle}<#else>${title}</#if></p>
 2126   	<#if subtitle !=''>
 2127   	<p class="empty-subtitle text-muted">
 2128   		${subtitle}
 2129   	</p>
 2130   	<#else>
 2131   	<p class="empty-subtitle text-muted">
 2132   		#i18n{portal.util.message.emptySubTitle}
 2133   	</p>
 2134   	</#if>
 2135   	<#if actionTitle !=''>
 2136   	<div class="empty-action">
 2137   	  	<a href="${actionUrl}" class="btn btn-${actionBtn}">
 2138   		<#if actionIcon !=''><@icon prefix='ti ti-' style='${actionIcon}' /></#if> ${actionTitle}
 2139   	  	</a>
 2140   	</div>
 2141   	</#if>
 2142   </div>
 2143   </#macro>
 2144   <#macro timeline class='' id='' params=''>
 2145   <div class="timeline<#if class !=''> ${class}</#if>"<#if id !=''> id="${id}"</#if><#if params !=''> ${params}</#if>>
 2146   	<#nested>
 2147   </div>
 2148   </#macro>
 2149   <#macro timelineLabel bg='primary' label='' class='' id='' params=''>
 2150   <div class="time-label<#if class !=''> ${class}</#if>"<#if id !=''> id="${id}"</#if><#if params !=''> ${params}</#if>>
 2151   	<span class="bg-${bg}"><#if label!=''>${label}<#else><#nested></#if></span>
 2152   </div>
 2153   </#macro>
 2154   <#macro timelineItem iconFace='check' iconBg='bg-primary' time='' label='' footer='' class='' id='' params=''>
 2155   <div<#if class !=''> class="${class}"</#if><#if id !=''> id="${id}"</#if><#if params !=''> ${params}</#if>>
 2156   	<#assign timelineIcon>${iconFace} ${iconBg}</#assign>
 2157   	<@icon style=timelineIcon />
 2158   	<div class="timeline-item">
 2159   		<#if time !=''><span class="time"><i class="fa fa-clock-o"></i> ${time}</span></#if>
 2160   		<h3 class="timeline-header">${label}</h3>
 2161   		<div class="timeline-body"><#nested></div>
 2162   		<#if footer !=''><div class="timeline-footer">${footer}</div></#if>
 2163   	</div>
 2164   </div>
 2165   </#macro>
 2166   <#-- scroll to top button -->
 2167   <#macro scrollTopBtn>
 2168   <a href="#" id="scroll" style="display: none;"><span></span></a>
 2169   <script>
 2170   $( function(){ 
 2171       $(window).scroll(function(){ 
 2172           if ( $(this).scrollTop() > 100) { 
 2173               $('#scroll').fadeIn(); 
 2174           } else { 
 2175               $('#scroll').fadeOut(); 
 2176           } 
 2177       }); 
 2178       $('#scroll').click(function(){ 
 2179           $("html, body").animate({ scrollTop: 0 }, 600); 
 2180           return false; 
 2181       }); 
 2182   });
 2183   </script>
 2184   </#macro>
 2185   <#-- copyElementToClipboard a set of elements designed by a selector - param "selector" -->
 2186   <#-- Params																				-->
 2187   <#-- selector : Any CSS selector expression												-->
 2188   <#-- class : Default '' : List of class with double quote with comma separator 			-->
 2189   <#-- 		Possible values : "no-hover" No icon on hover - .no-hover portal_admin.css	-->
 2190   <#-- 		Possible values : "copy-icon" Icon always shown - . see portal_admin.css   	-->
 2191   <#-- 		Possible values : "copy-btn" Icon and Button styles -						-->
 2192   <#-- 		Ex for multiple classes : "class1","class2" 								-->
 2193   <#-- showMsg : Default false : If true a message is show after copy						-->
 2194   <#-- msgDone : Default "Copied" : Success message 										-->
 2195   <#-- msgError : Default "Error : not copied" : Error message							-->
 2196   <#-- Usage																				-->
 2197   <#-- Basic : <@copyElementToClipboard selector='.copy-content'  />						-->
 2198   <#-- No message : <@copyElementToClipboard selector='.copy-content' showMsg=false />	-->
 2199   <#-- No Hover : <@copyElementToClipboard selector='.copy-content' class='"no-hover"' /> -->
 2200   <#-- With icon shown : <@copyElementToClipboard selector='.copy-content' class='"copy-icon"' />	 -->
 2201   <#macro copyElementToClipboard selector class='' showMsg=true msgDone='#i18n{portal.util.copy.done}' msgError='#i18n{portal.util.copy.error}'>
 2202   <script>
 2203   const elems = document.querySelectorAll('${selector!}');
 2204   elems.forEach(elem => {
 2205   	<#if class !=''>
 2206   	elem.classList.add( ${class!} );
 2207   	</#if>
 2208   	elem.setAttribute('title', '#i18n{portal.util.labelCopy}');
 2209     	elem.addEventListener('click', () => {
 2210   		const selection = window.getSelection();
 2211   		const range = document.createRange();
 2212   		range.selectNodeContents(elem);
 2213   		selection.removeAllRanges();
 2214   		selection.addRange(range);
 2215   		try {
 2216   			document.execCommand('copy');
 2217   			selection.removeAllRanges();
 2218   		<#if showMsg>
 2219   			const original = elem.textContent;
 2220   			elem.textContent = '${msgDone}';
 2221   			elem.classList.add('msg-success');
 2222   			setTimeout(() => {
 2223   				elem.textContent = original;
 2224   				elem.classList.remove('msg-success');
 2225   			}, 1200);
 2226   		</#if>
 2227   		} catch(e) {
 2228   		<#if showMsg>
 2229   			const original = elem.textContent;
 2230   			elem.textContent = '${msgError}';
 2231   			elem.classList.add('msg-error');
 2232   			setTimeout(() => {
 2233   				elem.textContent = original;
 2234   				elem.classList.remove('msg-danger');
 2235   			}, 1200);
 2236   		</#if>
 2237       	}
 2238     	});
 2239   });
 2240   </script>
 2241   </#macro>
 2242   <#-- initToast  				-->
 2243   <#-- Params						-->
 2244   <#-- layout='popups' 			-->
 2245   <#-- position='top-right' 		-->
 2246   <#-- closer=false 				-->
 2247   <#-- sticky=false 				-->
 2248   <#-- progressbar=true 			-->
 2249   <#-- theme='default'			-->
 2250   <#-- duration=3000 				-->
 2251   <#-- pool=5						-->
 2252   <#macro initToast layout='popups' position='top-right' closer=true sticky=false progressbar=true insert='before' theme='default' duration=3000 pool=5 >
 2253   <script>
 2254   $( function(){
 2255   	var lutecepolipop = new Polipop('lutecepop', {
 2256   		layout: '${layout}',
 2257   		position: '${position}',
 2258   		theme: '${theme}',
 2259   		life: ${duration?c},
 2260   		insert: '${insert}',
 2261   		closer: ${closer?c},
 2262   		closeText : '#i18n{portal.util.labelClose}',
 2263   		sticky: ${sticky?c},
 2264   		progressbar: ${progressbar?c},
 2265   		pool: ${pool},
 2266   	});
 2267   	<#-- Add addToast macro in your template -->
 2268   	<#nested>
 2269   });
 2270   </script>
 2271   </#macro>
 2272   <#-- addToast  															-->
 2273   <#-- Params																-->
 2274   <#-- title : Default "Error : not copied" : Error message				-->
 2275   <#-- msg : Default "Copied" : Success message 						  	-->
 2276   <#-- type : Default "default" ['info', 'danger', 'success' 'warning'] 	-->
 2277   <#macro addToast title content type='default' >
 2278   lutecepolipop.add({
 2279       content: '${content}',
 2280       title: '${title}',
 2281       type: '${type}',
 2282   });
 2283   </#macro>
 2284   <#-- selectIconFont  																-->
 2285   <#-- Params																			-->
 2286   <#-- id : Default "selectIcon" : Id for select										-->
 2287   <#-- class : Default '' : List of class for select 									-->
 2288   <#-- name : Default "resource-icon" : Name for submit   		  	    			-->
 2289   <#-- showListLabel : Default true : Show icons' label  								-->
 2290   <#-- showListIcon : Default true : Show icons' icon  								-->
 2291   <#-- searchShow : Default true : Show search field in select						-->
 2292   <#-- searchFocus : Default false : It true set focus in search fiedl				-->
 2293   <#-- searchHighlight : Default true : Highlight searched chars in list				-->
 2294   <#-- type : Default 'yaml' : Possible values : ['yaml','json']						-->
 2295   <#-- prefix : Default 'fa' : ['fa','bi-', [ti ti-],...]	Prefix for icon family		-->
 2296   <#-- iconsUrl : Default 'css/admin/font-awesome-icons.yml' : File url to retrieve icon name list -->
 2297   <#-- resources : Default true : If true load slimselect js lib and css. 			-->
 2298   <#-- Only needed once, so set to false if you user this macro more than once		-->
 2299   <#-- FontAwesome icons yaml dowloaded from https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/metadata/icons.yml  -->
 2300   <#macro selectIconFont id='selectIcon' class='' name='resource-icon' showListLabel=true showListIcon=true searchShow=true searchFocus=false searchHighlight=true type='yaml' prefix='fa-' iconsUrl='css/admin/font-awesome-icons.yml' resources=true defaultValue=''>
 2301   <@select name='${name}' id='${id}' />
 2302   <#if resources>
 2303   <link rel="stylesheet" href="js/admin/lib/slimselect/slimselect.min.css">
 2304   <script src="js/admin/lib/slimselect/slimselect.min.js"></script>
 2305   <#if type='yaml'>
 2306   <!-- js yaml parser -->
 2307   <script src="js/admin/lib/slimselect/js-yaml.min.js"></script>
 2308   </#if>
 2309   </#if>
 2310   <script>
 2311   $.get('${iconsUrl}', function(data) {
 2312   <#if type='yaml'>
 2313   	let parsedIcons = jsyaml.load(data)
 2314   <#else>
 2315   	<#-- Json / Object -->
 2316   	let parsedIcons='';
 2317   	if( typeof data === 'object' ){
 2318   		parsedIcons = data;
 2319   	} else { 
 2320   		parsedIcons = JSON.parse( data )
 2321   	}
 2322   </#if>
 2323   $.each( parsedIcons, function(index, icon){
 2324   	let i=0, prefix='${prefix}';
 2325   	let selected = '${defaultValue}' == index ? 'selected' : '';
 2326   	<#if type='yaml'>
 2327   		<#-- FontAwesome specific / Other lib add another test/treatment -->
 2328   		while( i < icon.styles.length ){
 2329   			switch ( icon.styles[i] ) {
 2330   				case 'regular':
 2331   					prefix = 'far'
 2332   					break;
 2333   				case 'solid':
 2334   					prefix = 'fas'
 2335   					break;
 2336   				case 'light':
 2337   					prefix = 'fal'
 2338   					break;
 2339   				case 'brands':
 2340   					prefix = 'fab'
 2341   					break;
 2342   			}
 2343   			$('#${id}').append('<option value="' + index + '"' + selected + '> <#if showListIcon><span class="' + prefix + ' fa-'+ index + ' mr-1" ' + selected + ' ></span>&nbsp;</#if>' <#if showListLabel>+ icon.label + ' [' + icon.styles[i] +  ']'</#if>+ '</option>');
 2344   			i++;
 2345   		}
 2346   	<#else>
 2347   		<#-- Json / Object -->
 2348   		$('#${id}').append('<option value="' + index + '" ' + selected + ' > <#if showListIcon><span class="' + prefix + ' fa-'+ index + '"></span>&nbsp;</#if>' <#if showListLabel>+ index </#if>+ '</option>');
 2349   	</#if>
 2350   });
 2351   new SlimSelect({ 
 2352   	select: '#${id}',
 2353   	showSearch: ${searchShow?c},
 2354   	searchText: "#i18n{portal.util.labelNoItem}",
 2355   	searchPlaceholder: '#i18n{portal.util.labelSearch}',
 2356   	searchFocus: ${searchFocus?c}, // Whether or not to focus on the search input field
 2357   	searchHighlight: ${searchHighlight?c}
 2358   })
 2359   });
 2360   </script>
 2361   </#macro>
 2362   <#-- Display wrong or deprecated macro arguments -->
 2363   <#macro deprecatedWarning args=[] >
 2364    <#if args?size != 0 ><!-- Warning : wrong or deprecated argument(s) : <#list  args?keys as key >${key}, </#list> ... --></#if>
 2365   </#macro>
 2366   <#macro adminDashboardPanel title='' parentId='' childId='' icon='' color=''>
 2367   <#assign parentId = parentId />
 2368   <@accordionPanel color=color collapsed=true childId=childId>
 2369   <@accordionHeader id=id title=title headerIcon=icon></@accordionHeader>
 2370   <@accordionBody>
 2371   <#nested>
 2372   </@accordionBody>    
 2373   </@accordionPanel>
 2374   </#macro>
 2375   <#-- JStree Macro -->
 2376   <#macro jsTreeInit id='tree' btntreeSearch='treesearch' multiple=false plugins=[] style='proton/style.min.css'>
 2377   <link rel="stylesheet" href="js/admin/lib/jstree/themes/proton/style.min.css" >
 2378   <script src="js/admin/lib/jstree/jstree.min.js"></script>
 2379   <script>
 2380   $(function(){
 2381   	let selectedTree=jsTreeId=localStorage.getItem('jsTreeSelectedId' );
 2382   
 2383   	$('#tree').jstree({
 2384   		'core': {
 2385   			'multiple' : false,
 2386               'themes': {
 2387                   'name': 'proton',
 2388                   'responsive': true
 2389               }
 2390           },
 2391   	 	'plugins' : [  'search' , 'wholerow' ,'changed'  ]
 2392   	}).on('click', function( e ){
 2393   		window.location.replace( e.target.getAttributeNode('href').value );
 2394   	}).on("changed.jstree", function (e, data) {
 2395   		localStorage.setItem( 'jsTreeSelectedId', data.changed.selected );
 2396       });
 2397   
 2398   	$('#tree').jstree( 'select_node', jsTreeId );
 2399      
 2400   	var to = false;
 2401   	$('#treesearch').keyup(function () {
 2402   		if(to) { clearTimeout(to); }
 2403   		to = setTimeout(function () {
 2404   		var v = $('#treesearch').val();
 2405   		$('#tree').jstree(true).search(v);
 2406   		}, 250);
 2407   	});
 2408   
 2409   });
 2410   </script>
 2411   </#macro>
 2412   <#macro jsTreeSearch >
 2413   <@formGroup formStyle='inline' labelKey='#i18n{portal.site.admin_page.buttonSearchPage}' hideLabel=['all']>
 2414   	<@inputGroup size='sm'>
 2415   		<@input type='text' id='tree_search' name='tree_search' placeHolder='#i18n{portal.site.admin_page.buttonSearchPage}' />
 2416   		<@inputGroupItem>
 2417   			<@button id='btn-tree_search' color='link' type='button' title='#i18n{portal.site.admin_page.buttonSearchPage}' buttonIcon='search' hideTitle=['all'] />
 2418   		</@inputGroupItem>
 2419   	</@inputGroup>
 2420   </@formGroup>
 2421   </#macro>
 2422   <#-- Display wrong or deprecated macro arguments -->
 2423   <#macro deprecatedWarning args=[] >
 2424   <#if args?size != 0 ><!-- Warning : wrong or deprecated argument(s) : <#list  args?keys as key >${key}, </#list> ... --></#if>
 2425   </#macro>
 2426   <#macro codeHighLight >
 2427   <link rel="stylesheet" href="js/admin/lib/prism/prism.css">
 2428   <link rel="stylesheet" href="js/admin/lib/prism/prism-live.css">
 2429   <script src="js/admin/lib/prism/prism.js"></script>
 2430   <script src="js/admin/lib/prism/prism-live.js"></script>
 2431   </#macro>