commons_site.html

 1   <#assign optSiteCommons=.get_optional_template('commons_site.ftl')>
 2   <#if optSiteCommons.exists><@optSiteCommons.include /></#if>
 3   <#-- WARNING : be careful to white-space and lines break in FreeMarker macros.
 4   # This macro template can be used to output white-space-sensitive formats (like RSS files).
 5   # See http://dev.lutece.paris.fr/jira/browse/LUTECE-765
 6   -->
 7   <#-- Do not remove this comment -->
 8   <#macro comboSiteWithParams name default_value additionalParameters items >
 9   <select class="form-select" id="${name}" name="${name}" ${additionalParameters} >
 10   <#list items as item>
 11   <#if default_value="${item.code}">
 12   	<option selected="selected" value="${item.code}" >${item.name}</option>
 13   <#else>
 14   	<option value="${item.code}" >${item.name}</option>
 15   </#if>
 16   </#list>
 17   </select>
 18   </#macro>
 19   <#macro comboSiteSortedWithParams name default_value additionalParameters items >
 20   <select class="form-select" id="${name}" name="${name}" ${additionalParameters} >
 21   <#list items?sort_by("name") as item>
 22   <#if default_value="${item.code}">
 23   <option selected="selected" value="${item.code}" >${item.name}</option>
 24   <#else>
 25   <option value="${item.code}" >${item.name}</option>
 26   </#if>
 27   </#list>
 28   </select>
 29   </#macro>
 30   <#macro comboSiteWithParamsAndLength name default_value additionalParameters items max_length >
 31   <select class="form-select" id="${name}" name="${name}" ${additionalParameters} >
 32   <#list items as item>
 33   <#if max_length < item.name?length ><#assign item_new = "..." + "${item.name?substring(item.name?length-max_length+3)}" ><#else><#assign item_new = "${item.name}"></#if>
 34   <#if default_value="${item.code}">
 35   <option selected="selected" value="${item.code}" >${item_new}</option>
 36   <#else>
 37   <option value="${item.code}" >${item_new}</option>
 38   </#if>
 39   </#list>
 40   </select>
 41   </#macro>
 42   <#macro comboSite name default_value items >
 43   <@comboSiteWithParams name="${name}" default_value="${default_value}" additionalParameters="" items=items />
 44   </#macro>
 45   <#macro comboSiteSorted name default_value items >
 46   <@comboSite name="${name}" default_value="${default_value}" items=items?sort_by("name") />
 47   </#macro>
 48   <#macro sortSite jsp_url attribute id="" >
 49   <#if jsp_url?contains("?")><#assign sort_url = jsp_url + "&amp;sorted_attribute_name=" + attribute + "&amp;asc_sort=" /><#else><#assign sort_url = jsp_url + "?sorted_attribute_name=" + attribute + "&amp;asc_sort=" /></#if>
 50   <a id="sort${id!}_${attribute!}" href="${sort_url}true#sort${id!}_${attribute!}" title="#i18n{portal.util.sort.asc}" >
 51   	<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-up"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M6 15l6 -6l6 6" /></svg>
 52   </a>
 53   <a href="${sort_url}false#sort${id!}_${attribute!}" title="#i18n{portal.util.sort.desc}">
 54   	<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-chevron-down"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M6 9l6 6l6 -6" /></svg>
 55   </a>
 56   </#macro>
 57   <#macro paginationSite paginator combo=0 form=1 nb_items_per_page=nb_items_per_page showcount=0>
 58   <#if paginator??>
 59   <#if (paginator.pagesCount > 1) ><@paginationSitePageLinks paginator=paginator /></#if>
 60   <#if form == 1 ><form method="post" action=""></#if>
 61   <div class="row">
 62   	<div class="col" >
 63   		<@paginationSiteItemCount paginator=paginator combo=combo nb_items_per_page=nb_items_per_page showcount=showcount />
 64   	</div>
 65   </div>
 66   <#if form == 1 ></form></#if>
 67   <div class="table"></div>
 68   </#if>
 69   </#macro>
 70   <#macro paginationSitePageLinks paginator >
 71   <#assign nbLinkPagesToDisplay = 10 />
 72   <#assign offsetPrev = nbLinkPagesToDisplay / 2 />
 73   <#assign offsetNext = nbLinkPagesToDisplay / 2 />
 74   <#if ( paginator.pageCurrent <= nbLinkPagesToDisplay - offsetPrev )>
 75   <#assign offsetPrev = paginator.pageCurrent - 1 />
 76   <#assign offsetNext = nbLinkPagesToDisplay - offsetPrev />
 77   <#elseif ( paginator.pageCurrent + offsetNext > paginator.pagesCount )>
 78   <#assign offsetNext = paginator.pagesCount - paginator.pageCurrent />
 79   <#assign offsetPrev = nbLinkPagesToDisplay - offsetNext />
 80   </#if>
 81   <ul class="pagination pagination-sm">
 82   <#if ( paginator.pageCurrent - offsetPrev > 1 )>
 83   <li class="page-item">
 84   	<a class="page-link" href="${paginator.firstPageLink?xhtml}">
 85   		${paginator.labelFirst}
 86   	</a>
 87   </li>
 88   </#if>
 89   <#if (paginator.pageCurrent > 1) >
 90   <li class="page-item previous">
 91   	<a class="page-link" href="${paginator.previousPageLink?xhtml}">
 92   		${paginator.labelPrevious}
 93   	</a>
 94   </li>
 95   <#else>
 96   <li class="page-item disabled">
 97   	<a class="page-link" href="${paginator.firstPageLink?xhtml}">${paginator.labelPrevious}</a>
 98   </li>
 99   </#if>
 100   <#if ( paginator.pageCurrent - offsetPrev > 1 )>
 101   <li class="page-item">
 102   	<a class="page-link" href="${(paginator.pagesLinks?first).url?xhtml}"><strong>...</strong></a>
 103   </li>
 104   </#if>
 105   <#list paginator.pagesLinks as link>
 106   <#if ( link.index == paginator.pageCurrent )>
 107   	<li class="page-item active">
 108   		<a class="page-link" href="${link.url?xhtml}">${link.name}</a>
 109   	</li>
 110   <#else>
 111   	<li class="page-item">
 112   		<a class="page-link" href="${link.url?xhtml}">${link.name}</a>
 113   	</li>
 114   </#if>
 115   </#list>
 116   <#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
 117   <li class="page-item">
 118   	<a class="page-link" href="${(paginator.pagesLinks?last).url?xhtml}"><strong>...</strong></a>
 119   </li>
 120   </#if>
 121   <#if (paginator.pageCurrent < paginator.pagesCount) >
 122   <li class="page-item next">
 123   	<a class="page-link" href="${paginator.nextPageLink?xhtml}">
 124   	${paginator.labelNext}
 125   	</a>
 126   </li>
 127   <#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
 128   	<li class="page-item next">
 129   		<a class="page-link" href="${paginator.lastPageLink?xhtml}">
 130   			${paginator.labelLast}
 131   		</a>
 132   	</li>
 133   </#if>
 134   <#else>
 135   <li class="page-item disabled">
 136   	<a class="page-link" href="${paginator.lastPageLink?xhtml}">${paginator.labelNext}</a>
 137   </li>
 138   </#if>
 139   </ul>
 140   </#macro>
 141   <#macro paginationSiteCombo paginator nb_items_per_page=nb_items_per_page>
 142   <div class="input-group">
 143   	<span class="input-group-text">${paginator.labelItemCountPerPage}</span>
 144   	<select class="form-select" name="${paginator.itemsPerPageParameterName}" id="${paginator.itemsPerPageParameterName}" title="${paginator.labelItemCountPerPage}">
 145   	<#list [ "10" , "20" , "50" , "100" ] as nb>
 146   	<#if nb_items_per_page = nb >
 147   		<option selected="selected" value="${nb}">${nb}</option>
 148   	<#else>
 149   		<option value="${nb}">${nb}</option>
 150   	</#if>
 151   	</#list>
 152   	</select>
 153   </div>
 154   <button class="btn btn-secondary" type="submit" title="#i18n{portal.util.labelRefresh}"/>
 155   	<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-repeat"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 12v-3a3 3 0 0 1 3 -3h13m-3 -3l3 3l-3 3" /><path d="M20 12v3a3 3 0 0 1 -3 3h-13m3 3l-3 -3l3 -3" /></svg>
 156   </button>
 157   </#macro>
 158   <#macro paginationSiteItemCount paginator combo=0 nb_items_per_page=nb_items_per_page showcount=0>
 159   <#-- Display combo -->
 160   <#if combo == 1 >
 161   <@paginationSiteCombo paginator=paginator nb_items_per_page=nb_items_per_page/>
 162   </#if>
 163   <#if showcount == 1 >
 164   <#-- Display item count -->
 165   <#if (paginator.labelItemCount)?? && paginator.labelItemCount?has_content>${paginator.labelItemCount} : </#if>${paginator.itemsCount}
 166   </#if>
 167   </#macro>
 168   <#macro item_navigationSite item_navigator>
 169   <div id="item-navigator">
 170   <#if (item_navigator.currentItemId > 0)>
 171   <a href="${item_navigator.previousPageLink?xhtml}" title="#i18n{portal.util.labelPrevious}">
 172   	<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-circle-arrow-left"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 21a9 9 0 1 0 0 -18a9 9 0 0 0 0 18" /><path d="M8 12l4 4" /><path d="M8 12h8" /><path d="M12 8l-4 4" /></svg>
 173   	#i18n{portal.util.labelPrevious}
 174   </a>
 175   </#if>
 176   <#if (item_navigator.currentItemId < item_navigator.listItemSize - 1) >
 177   <a href="${item_navigator.nextPageLink?xhtml}" title="#i18n{portal.util.labelNext}">
 178   	#i18n{portal.util.labelNext}
 179   	<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-circle-arrow-right"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3a9 9 0 1 0 0 18a9 9 0 0 0 0 -18" /><path d="M16 12l-4 -4" /><path d="M16 12h-8" /><path d="M12 16l4 -4" /></svg>
 180   </a>
 181   </#if>
 182   </div>
 183   </#macro>
 184   <#macro dataTableSite dataTableManager actionMacro="" tableClass="table table-striped table-condensed" caption="&nbsp;" summary="data table" >
 185   <#if 0 < dataTableManager.items?size >
 186   <#if dataTableManager.enablePaginator>
 187   <form class="d-inline" method="post" action="${dataTableManager.sortUrl}">
 188   <#if (dataTableManager.paginator.pagesCount > 1) >
 189   <@paginationSitePageLinks paginator=dataTableManager.paginator />
 190   </#if>
 191   <@paginationSiteItemCount paginator=dataTableManager.paginator combo=1 nb_items_per_page=dataTableManager.paginator.itemsPerPage?string/>
 192   </form>
 193   </#if>
 194   <table class="${tableClass}" summary="${summary}">
 195   <caption>${caption}</caption>
 196   <tr>
 197   <#list dataTableManager.listColumn as column>
 198   <th scope="col">
 199   #i18n{${column.titleKey}}
 200   <#if !(column.typeColumn = "ACTION") && column.sortable>
 201   	<@sortSite jsp_url=dataTableManager.sortUrl attribute=column.parameterName />
 202   </#if>
 203   </th>
 204   </#list>
 205   </tr>
 206   <#list dataTableManager.items as item>
 207   <tr>
 208   <#list dataTableManager.listColumn as column>
 209   <#if column.typeColumn = "STRING">
 210   	<#assign propName = "item." + column.parameterName>
 211   	<#assign value = propName?eval>
 212   	<td>${value!}</td>
 213   <#elseif column.typeColumn = "LABEL">
 214   	<#assign propName = "item." + column.parameterName>
 215   	<#assign value = propName?eval>
 216   	<td>#i18n{${value!}}</td>
 217   <#elseif column.typeColumn = "BOOLEAN">
 218   	<#assign propName = "item." + column.parameterName>
 219   	<#assign value = propName?eval>
 220   	<#if value?? && value>
 221   		<td>
 222   			<span class="badge text-bg-success" title="#i18n{${column.labelTrue!}}">
 223   			<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-check"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 12l5 5l10 -10" /></svg> #i18n{${column.labelTrue!}}
 224   		</span>
 225   		</td>
 226   	<#else>
 227   		<td>
 228   			<span class="badge text-bg-danger" title="#i18n{${column.labelFalse!}}">
 229   				<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-x"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg> #i18n{${column.labelFalse!}}
 230   			</span>
 231   			</td>
 232   	</#if>
 233   <#elseif column.typeColumn = "EMAIL">
 234   	<#assign propName = "item." + column.parameterName>
 235   	<#assign value = propName?eval>
 236   	<td><#if value?? && value != ""><a href="mailto:${value}" title="${value}" >${value}</a></#if></td>
 237   <#elseif column.typeColumn = "ACTION">
 238   	<#if column.parameterName?? && column.parameterName != "">
 239   		<#assign macroName = column.parameterName>
 240   	<#elseif actionMacro?? && actionMacro != "">
 241   		<#assign macroName = actionMacro>
 242   	</#if>
 243   	<#if macroName?? && macroName != "">
 244   		<td><@.vars[macroName] item=item /></td>
 245   	</#if>
 246   </#if>
 247   </#list>
 248   </tr>
 249   </#list>
 250   </table>
 251   <#if dataTableManager.enablePaginator>
 252   <form class="form-inline" method="post" action="${dataTableManager.sortUrl}">
 253   <#if (dataTableManager.paginator.pagesCount > 1) >
 254   	<@paginationSitePageLinks paginator=dataTableManager.paginator />
 255   </#if>
 256   <@paginationSiteItemCount paginator=dataTableManager.paginator combo=0 nb_items_per_page=dataTableManager.paginator.itemsPerPage?string/>
 257   </form>
 258   </#if>
 259   <#else>
 260   #i18n{portal.util.labelNoItem}
 261   </#if>
 262   </#macro>
 263   <#macro filterPanelSite dataTableManager formClass="form-horizontal" >
 264   <#if dataTableManager.filterPanel.listFilter?? && 0 < dataTableManager.filterPanel.listFilter?size>
 265   <form class="${formClass}" method="post" action="${dataTableManager.filterPanel.formUrl}" >
 266   <fieldset>
 267   <#list dataTableManager.filterPanel.listFilter as filter>
 268   <div class="mb-3">
 269   	<#if filter.filterType = "STRING">
 270   		<label class="form-label" for="${filter.parameterName}" >#i18n{${filter.filterLabel}} :</label>
 271   		<input type="text" class="form-control" name="${dataTableManager.filterPanelPrefix}${filter.parameterName}" id="${filter.parameterName}"  value="${filter.value!}"/>
 272   	<#elseif filter.filterType = "BOOLEAN">
 273   		<div class="form-check">
 274   			<input type="form-check-input" class="form-control" value="true" name="${dataTableManager.filterPanelPrefix}${filter.parameterName}" id="${dataTableManager.filterPanelPrefix}${filter.parameterName}" <#if filter.value?? && filter.value = "true">checked="checked" </#if>/>
 275   			<label class="form-label" for="${dataTableManager.filterPanelPrefix}${filter.parameterName}" >#i18n{${filter.filterLabel}} :</label>
 276   		</div>
 277   	<#elseif filter.filterType = "DROPDOWNLIST">
 278   		<#if filter.value??><#assign filter_value = filter.value ><#else><#assign filter_value = "" ></#if>
 279   		<label class="form-label" for="${filter.parameterName}" >#i18n{${filter.filterLabel}} :</label>
 280   		<@comboSite name=dataTableManager.filterPanelPrefix+filter.parameterName default_value=filter_value items=filter.refList />
 281   	</#if>
 282   	</div>
 283   </div>
 284   </#list>
 285   <div class="row">
 286   	<div class="col">
 287   		<input type="hidden" name="${dataTableManager.filterPanelPrefix}updateFilters" id="${dataTableManager.filterPanelPrefix}updateFilters" value="true" />
 288   		<button class="btn btn-primary" type="submit" >
 289   			<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-search"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" /><path d="M21 21l-6 -6" /></svg> <span class="hidden-xs" >#i18n{portal.util.labelSearch}</span>
 290   		</button>
 291   		<#if dataTableManager.filterPanel.formUrl?contains("?")>
 292   			<#assign dataTableResetUrl = dataTableManager.filterPanel.formUrl + "&" + dataTableManager.filterPanelPrefix + "resetFilters=true" />
 293   		<#else>
 294   			<#assign dataTableResetUrl = dataTableManager.filterPanel.formUrl + "?" + dataTableManager.filterPanelPrefix + "resetFilters=true" />
 295   		</#if>
 296   		<a class="btn btn-primary" href="${dataTableResetUrl}" title="#i18n{portal.util.labelReset}">
 297   			<svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-trash"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 7l16 0" /><path d="M10 11l0 6" /><path d="M14 11l0 6" /><path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12" /><path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3" /></svg>
 298   			<span class="hidden-xs" >#i18n{portal.util.labelReset}</span>
 299   		</a>
 300   	</div>
 301   </div>
 302   </fieldset>
 303   </form>
 304   </#if>
 305   </#macro>
 306   <#macro fieldInputTextSite i18nLabelKey inputName mandatory=false value="" maxlength=0 i18nHelpBlockKey='' cssClass=''>
 307   <div class="mb-3">
 308   	<label class="form-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>*</#if> :</label>
 309   	<input class="form-control ${cssClass}" id="${inputName}" name="${inputName}" type="text" value="${value}" aria-describedby="${inputName}HelpBlock"<#if maxlength &gt; 0>maxlength=${maxlength}</#if>>
 310   	<#if i18nHelpBlockKey != ''><p id="${inputName}HelpBlock" class="help-text">#i18n{${i18nHelpBlockKey}}</p></#if>
 311   	</div>
 312   </div>
 313   </#macro>
 314   <#macro fieldInputCalendarSite i18nLabelKey inputName mandatory=false value="" i18nHelpBlockKey='' cssClass='' language='fr'>
 315   <div class="mb-3">
 316   	<label class="form-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>*</#if> :</label>
 317   	<div class="input-group">
 318   		<span class="input-group-text"><svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-calendar"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z" /><path d="M16 3v4" /><path d="M8 3v4" /><path d="M4 11h16" /><path d="M11 15h1" /><path d="M12 15v3" /></svg></span>
 319   		<input class="form-control${cssClass}" id="${inputName}" name="${inputName}" type="text" value="${value}" aria-describedby="${inputName}HelpBlock">
 320   	</div>
 321   	<#if i18nHelpBlockKey != ''><p id="${inputName}HelpBlock" class="help-text">#i18n{${i18nHelpBlockKey}}</p></#if>
 322   </div>
 323   <@getDatePicker idField=inputName language=language />
 324   </#macro>
 325   <#macro fieldInputCheckBoxSite i18nLabelKey inputName value="" checked=false i18nHelpBlockKey='' cssClass='' >
 326   <div class="mb-3">
 327   	<label class="form-label" for="${inputName}">#i18n{${i18nLabelKey}} :</label>
 328   	<input class="form-control ${cssClass}" id="${inputName}" name="${inputName}" type="checkbox" value="${value}" <#if checked>checked="checked"</#if> />
 329   	<#if i18nHelpBlockKey != ''><p id="${inputName}HelpBlock" class="help-text">#i18n{${i18nHelpBlockKey}}</p></#if>
 330   </div>
 331   </#macro>
 332   <#macro fieldInputComboSite i18nLabelKey inputName items value="" mandatory=false i18nHelpBlockKey='' cssClass='' >
 333   <div class="mb-3">
 334   	<label class="form-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>* </#if>:</label>
 335   	<#assign params = "class='" + cssClass + "'" >
 336   	<@comboWithParams name=inputName items=items default_value=value additionalParameters=params />
 337   	<#if i18nHelpBlockKey != ''><p id="${inputName}HelpBlock" class="help-text">#i18n{${i18nHelpBlockKey}}</p></#if>
 338   </div>
 339   </#macro>
 340   <#macro fieldTextAreaSite i18nLabelKey inputName mandatory=false value="" maxlength=0 i18nHelpBlockKey='' cssClass=''>
 341   <div class="mb-3">
 342   	<label class="form-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>*</#if> :</label>
 343   	<textarea class="form-control ${cssClass}" id="${inputName}" name="${inputName}" <#if maxlength &gt; 0>maxlength=255</#if> >${value}</textarea>
 344   	<#if i18nHelpBlockKey != ''><p id="${inputName}HelpBlock" class="help-text">#i18n{${i18nHelpBlockKey}}</p></#if>
 345   </div>
 346   </#macro>
 347   <#macro autocompleteFO id name suggestionsUrl suggestionsPath="" itemValueFieldName="value" btnColor="light" btnSize="" itemLabelFieldNames="[]" itemTitleFieldNames=itemLabelFieldNames itemDescriptionFieldNames="[]" itemTagsFieldNames="[]" copyFields="[]" currentValue="" currentLabel="" required=false minimumInputLength=1 minimumInputLenghtLabel="#i18n{portal.util.labelMinimumSearchLenght}" searchLabel="#i18n{portal.util.labelSearch}" placeHolder="#i18n{portal.util.labelSearch}" emptyLabel="#i18n{portal.util.labelNoItem}" additionnalRequestParamInputId="" >
 348   <div id="${id}" class="lutece-autocomplete dropdown form-group form-floating" data-itemTitleFieldNames=${itemTitleFieldNames} data-suggestionsUrl="${suggestionsUrl}" data-suggestionsPath="${suggestionsPath}" data-itemValueFieldName=${itemValueFieldName} data-minimumInputLength=${minimumInputLength} data-itemDescriptionFieldNames=${itemDescriptionFieldNames} data-itemTagsFieldNames=${itemTagsFieldNames} data-copyFields=${copyFields} data-emptyLabel="${emptyLabel}" data-currentValue="${currentValue}" data-currentLabel="${currentLabel}" data-suggestionItemClass='["list-group-item", "p-3"]' data-titleClass='["mb-0", "fw-bolder"]' data-descriptionClass='["text-muted", "mb-0"]' data-tagClass='["badge", "bg-blue-lt", "me-1"]' data-loaderIconClasses='{"loading": ["ti-loader-2", "icon-rotate"], "error": ["ti-zoom-exclamation", "text-danger"], "search": ["ti-search"]}' data-emptyClass='["list-group-item", "p-3", "text-muted", "text-center"]' data-searchLabel="${searchLabel}">
 349   <label for="${id}-input">${searchLabel}</label>
 350   <div class="input-group">
 351   	<input class="form-control lutece-autocomplete-search-input w-75" type="text" name="${name}" role="combobox" autocomplete="off" value="<#if currentValue!=''>${currentValue!}</#if>" id="${id}-input" aria-expanded="false" aria-owns="${id}-list-container" aria-autocomplete="list" aria-describedby="${id}-lutece-autocomplete-default-assistive">
 352   	<span role="button" class="input-group-text lutece-autocomplete-remove <#if currentValue=''>d-none</#if> text-danger">
 353   		<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg>
 354   	</span>
 355   	<span role="button" class="input-group-text lutece-autocomplete-search-icon">
 356   		<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" /><path d="M21 21l-6 -6" /></svg>
 357   	</span>
 358   </div>
 359   <div id="${id}-dropdown" class="lutece-autocomplete-dropdown dropdown-menu p-0" aria-labelledby="dropdownMenuButton">
 360   	<ul id="${id}-list-container" class="lutece-autocomplete-result-container list-group list-group-flush overflow-auto bg-white" role="listbox" id="suggestions-list" aria-labelledby="${id}-input" style="max-height:15rem;"></ul>
 361   	<span id="${id}-lutece-autocomplete-default-assistive" class="sr-only visually-hidden">#i18n{portal.util.message.autocomplete.avalailbleResults}</span>
 362   	<div class="sr-only lutece-autocomplete-status" role="status" aria-atomic="true" aria-live="polite"></div>
 363   </div>
 364   </div>
 365   <script type="module">
 366   import LuteceAutoComplete from "./themes/shared/modules/luteceAutoComplete.js";
 367   new LuteceAutoComplete(document.getElementById(`${id}`), document.getElementById(`${additionnalRequestParamInputId}`));
 368   </script>
 369   </#macro>
 370   <#-- Macro: deprecatedWarningSite
 371   Description: Generates a warning message for deprecated or incorrect arguments.
 372   Parameters:
 373   - args (map, optional): a map of arguments and their values.
 374   -->
 375   <#macro deprecatedWarningSite args=[] >
 376   <#if args?size != 0 ><!-- Warning : wrong or deprecated argument(s) : <#list  args?keys as key >${key}, </#list> ... --></#if>
 377   </#macro>