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 + "&sorted_attribute_name=" + attribute + "&asc_sort=" /><#else><#assign sort_url = jsp_url + "?sorted_attribute_name=" + attribute + "&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=" " 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 > 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 > 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>