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