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 <#include "util/standard/macro_standard.html" />
6 <#include "util/calendar/macro_datepicker.html" />
7 <#-- Do not remove this comment -->
8
9 <#macro comboWithParams name default_value additionalParameters items >
10 <select id="${name}" name="${name}" ${additionalParameters} >
11 <#list items as item>
12 <#if default_value="${item.code}">
13 <option selected="selected" value="${item.code}" >${item.name}</option>
14 <#else>
15 <option value="${item.code}" >${item.name}</option>
16 </#if>
17 </#list>
18 </select>
19 </#macro>
20
21 <#macro comboSortedWithParams name default_value additionalParameters items id=name>
22 <select id="${id}" name="${name}" ${additionalParameters} >
23 <#list items?sort_by("name") as item>
24 <#if default_value="${item.code}">
25 <option selected="selected" value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
26 <#else>
27 <option value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
28 </#if>
29 </#list>
30 </select>
31 </#macro>
32
33 <#macro comboWithParamsAndLength name default_value additionalParameters items max_length >
34 <select id="${name}" name="${name}" ${additionalParameters} >
35 <#list items as item>
36 <#if max_length < item.name?length >
37 <#assign item_new = "..." + "${item.name?substring(item.name?length-max_length+3)}" >
38 <#else>
39 <#assign item_new = "${item.name}">
40 </#if>
41 <#if default_value="${item.code}">
42 <option selected="selected" value="${item.code}" >${item_new}</option>
43 <#else>
44 <option value="${item.code}" >${item_new}</option>
45 </#if>
46 </#list>
47 </select>
48 </#macro>
49
50 <#macro combo name default_value items >
51 <@comboWithParams name="${name}" default_value="${default_value}" additionalParameters="" items=items />
52 </#macro>
53
54 <#macro comboSorted name default_value items >
55 <@combo name="${name}" default_value="${default_value}" items=items?sort_by("name") />
56 </#macro>
57
58
59 <#macro radioImageList name default_value items inline=0>
60 <#if inline=1>
61 <#list items as item>
62 <label for="${name}" class="radio-inline">
63 <input <#if default_value="${item.code}">checked="checked"</#if> class="radio" type="radio" name="${name}" value="${item.code}">
64 <img src="${item.name}" alt="${item.name}" title="${item.name}">
65 </label>
66 </#list>
67 <#else>
68 <#list items as item>
69 <div class="radio">
70 <label for="${name}">
71 <input <#if default_value="${item.code}">checked="checked"</#if> class="radio" type="radio" name="${name}" value="${item.code}">
72 <img src="${item.name}" alt="${item.name}" title="${item.name}">
73 </label>
74 </div>
75 </#list>
76 </#if>
77 </#macro>
78
79 <#macro checkboxList name default_values items inline=0>
80 <#if inline=1>
81 <#list items as item>
82 <label for="${name}" class="checkbox-inline">
83 <input <#if item.checked >checked</#if> class="checkbox" type="checkbox" name="${name}" value="${item.code}" /> ${item.name}
84 </label>
85 </#list>
86 <#else>
87 <#list items as item>
88 <#if item.checked >
89 <div class="checkbox">
90 <label for="document_type"><input checked class="checkbox" type="checkbox" name="${name}" value="${item.code}" /> ${item.name}</label>
91 </div>
92 <#else>
93 <div class="checkbox">
94 <label for="document_type"><input class="checkbox" type="checkbox" name="${name}" value="${item.code}" /> ${item.name}</label>
95 </div>
96 </#if>
97 </#list>
98 </#if>
99 </#macro>
100
101 <#macro sort jsp_url attribute id="" >
102 <#if jsp_url?contains("?")>
103 <#assign sort_url = jsp_url + "&sorted_attribute_name=" + attribute + "&asc_sort=" />
104 <#else>
105 <#assign sort_url = jsp_url + "?sorted_attribute_name=" + attribute + "&asc_sort=" />
106 </#if>
107 <div class="btn-group" role="group" aria-label="sortButton">
108 <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}" >
109 <i class="fa fa-chevron-up"></i>
110 </a>
111 <a class="btn btn-default btn-flat btn-xs" href="${sort_url}false#sort${id!}_${attribute!}" title="#i18n{portal.util.sort.desc}">
112 <i class="fa fa-chevron-down"></i>
113 </a>
114 </div>
115 </#macro>
116
117 <#macro pagination paginator >
118 <#assign nbLinkPagesToDisplay = 10 />
119 <#assign offsetPrev = nbLinkPagesToDisplay / 2 />
120 <#assign offsetNext = nbLinkPagesToDisplay / 2 />
121 <#if ( paginator.pageCurrent <= nbLinkPagesToDisplay - offsetPrev )>
122 <#assign offsetPrev = paginator.pageCurrent - 1 />
123 <#assign offsetNext = nbLinkPagesToDisplay - offsetPrev />
124 <#elseif ( paginator.pageCurrent + offsetNext > paginator.pagesCount )>
125 <#assign offsetNext = paginator.pagesCount - paginator.pageCurrent />
126 <#assign offsetPrev = nbLinkPagesToDisplay - offsetNext />
127 </#if>
128
129 <#if ( paginator.pagesCount > 1 )>
130 <#if ( paginator.pageCurrent - offsetPrev > 1 )>
131 <a href="${paginator.firstPageLink?xhtml}">
132 <i class="fa fa-arrow-circle-right"></i> #i18n{portal.util.labelFirst}
133 </a>
134 </#if>
135 <#if ( paginator.pageCurrent > 1 )>
136 <a href="${paginator.previousPageLink?xhtml}">
137 <i class="fa fa-arrow-circle-left"></i> #i18n{portal.util.labelPrevious}
138 </a>
139 <#else>
140
141 </#if>
142 <#if ( paginator.pageCurrent - offsetPrev > 1 )>
143 <strong>...</strong>
144 </#if>
145 <#list paginator.pagesLinks as link>
146 <#if link.index == paginator.pageCurrent>
147 <strong>${link.name}</strong>
148 <#else>
149 <a href="${link.url?xhtml}">${link.name}</a>
150 </#if>
151 </#list>
152 <#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
153 <strong>...</strong>
154 </#if>
155 <#if ( paginator.pageCurrent < paginator.pagesCount )>
156 <a href="${paginator.nextPageLink?xhtml}">
157 <i class="fa fa-arrow-circle-right"></i> #i18n{portal.util.labelNext}
158 </a>
159 <#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
160 <a href="${paginator.lastPageLink?xhtml}">
161 <i class="fa fa-arrow-circle-left"></i> #i18n{portal.util.labelLast}
162 </a>
163 </#if>
164 <#else>
165
166 </#if>
167 </#if>
168 </#macro>
169
170 <#macro paginationAdmin paginator combo=0 form=1 nb_items_per_page=nb_items_per_page showcount=1 showall=0>
171 <#if (paginator.pagesCount > 1) >
172 <@paginationPageLinks paginator=paginator />
173 </#if>
174 <div class="pull-right">
175 <#if form == 1 >
176 <form method="post">
177 </#if>
178 <@paginationItemCount paginator=paginator combo=combo nb_items_per_page=nb_items_per_page showcount=showcount showall=showall/>
179 <#if form == 1 >
180 </form>
181 </#if>
182 </div>
183 </#macro>
184
185 <#macro paginationPageLinks paginator >
186 <#assign nbLinkPagesToDisplay = 10 />
187 <#assign offsetPrev = nbLinkPagesToDisplay / 2 />
188 <#assign offsetNext = nbLinkPagesToDisplay / 2 />
189 <#if ( paginator.pageCurrent <= nbLinkPagesToDisplay - offsetPrev )>
190 <#assign offsetPrev = paginator.pageCurrent - 1 />
191 <#assign offsetNext = nbLinkPagesToDisplay - offsetPrev />
192 <#elseif ( paginator.pageCurrent + offsetNext > paginator.pagesCount )>
193 <#assign offsetNext = paginator.pagesCount - paginator.pageCurrent />
194 <#assign offsetPrev = nbLinkPagesToDisplay - offsetNext />
195 </#if>
196 <ul class="pagination pagination-sm">
197 <#if ( paginator.pageCurrent - offsetPrev > 1 )>
198 <li>
199 <a href="${paginator.firstPageLink?xhtml}">
200 ${paginator.labelFirst}
201 </a>
202 </li>
203 </#if>
204 <#if (paginator.pageCurrent > 1) >
205 <li class="previous">
206 <a href="${paginator.previousPageLink?xhtml}">
207 ${paginator.labelPrevious}
208 </a>
209 </li>
210 <#else>
211 <li class="disabled">
212 <a href="${paginator.firstPageLink?xhtml}">${paginator.labelPrevious}</a>
213 </li>
214 </#if>
215 <#if ( paginator.pageCurrent - offsetPrev > 1 )>
216 <li>
217 <a href="${(paginator.pagesLinks?first).url?xhtml}"><strong>...</strong></a>
218 </li>
219 </#if>
220 <#list paginator.pagesLinks as link>
221 <#if ( link.index == paginator.pageCurrent )>
222 <li class="active">
223 <a href="${link.url?xhtml}">${link.name}</a>
224 </li>
225 <#else>
226 <li>
227 <a href="${link.url?xhtml}">${link.name}</a>
228 </li>
229 </#if>
230 </#list>
231 <#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
232 <li>
233 <a href="${(paginator.pagesLinks?last).url?xhtml}"><strong>...</strong></a>
234 </li>
235 </#if>
236 <#if (paginator.pageCurrent < paginator.pagesCount) >
237 <li class="next">
238 <a href="${paginator.nextPageLink?xhtml}">
239 ${paginator.labelNext}
240 </a>
241 </li>
242 <#if ( paginator.pageCurrent + offsetNext < paginator.pagesCount )>
243 <li class="next">
244 <a href="${paginator.lastPageLink?xhtml}">
245 ${paginator.labelLast}
246 </a>
247 </li>
248 </#if>
249 <#else>
250 <li class="disabled">
251 <a href="${paginator.lastPageLink?xhtml}">${paginator.labelNext}</a>
252 </li>
253 </#if>
254 </ul>
255 </#macro>
256
257 <#macro paginationCombo paginator nb_items_per_page=nb_items_per_page showall=0>
258 <div class="form-group">
259 <label>${paginator.labelItemCountPerPage}</label>
260 <div class="input-group">
261 <select data-max-item="${paginator.itemsCount}" class="form-control" name="${paginator.itemsPerPageParameterName}" id="${paginator.itemsPerPageParameterName}" title="${paginator.labelItemCountPerPage}">
262 <#list [ "10" , "20" , "50" , "100" ] as nb>
263 <#if nb_items_per_page = nb >
264 <option selected="selected" value="${nb}">${nb}</option>
265 <#else>
266 <option value="${nb}">${nb}</option>
267 </#if>
268 </#list>
269 <#if showall ==1>
270 <#if paginator.itemsCount > 100 >
271 <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>
272 </#if>
273 </#if>
274 </select>
275 <span class="input-group-btn">
276 <button class="btn btn-default" type="submit" title="#i18n{portal.util.labelRefresh}">
277 <i class="fa fa-refresh"></i>
278 </button>
279 </span>
280 </div>
281 </div>
282 </#macro>
283
284 <#macro paginationItemCount paginator combo=0 nb_items_per_page=nb_items_per_page showcount=1 showall=0>
285 <#-- Display combo -->
286 <#if combo == 1 >
287 <@paginationCombo paginator=paginator nb_items_per_page=nb_items_per_page showall=showall />
288 </#if>
289 <#-- Display item count -->
290 <#if showcount == 1 >
291 <span class="showcount">
292 <#if (paginator.labelItemCount)?? && paginator.labelItemCount?has_content> - ${paginator.labelItemCount} : </#if> ${paginator.itemsCount}
293 </span>
294 </#if>
295 </#macro>
296
297
298 <#macro item_navigation item_navigator id="item-navigator">
299 <nav id="${id}" style="display:inline;">
300 <#if (item_navigator.currentItemId > 0)>
301 <@aButton size='' href='${item_navigator.previousPageLink?xhtml}' title='#i18n{portal.util.labelPrevious}' buttonIcon='arrow-left' color='btn-info' showTitleXs=false showTitleSm=false />
302 </#if>
303 <#if (item_navigator.currentItemId < item_navigator.listItemSize - 1) >
304 <@aButton size='' href='${item_navigator.nextPageLink?xhtml}' title='#i18n{portal.util.labelNext}' buttonIcon='arrow-right' color='btn-info' showTitleXs=false showTitleSm=false />
305 </#if>
306 </nav>
307 </#macro>
308
309 <#macro dataTable dataTableManager actionMacro="" tableClass="table table-striped table-condensed" caption=" " summary="data table" >
310 <#if 0 < dataTableManager.items?size >
311 <#if dataTableManager.enablePaginator>
312 <form class="form-inline" method="post" action="${dataTableManager.sortUrl}">
313 <#if (dataTableManager.paginator.pagesCount > 1) >
314 <@paginationPageLinks paginator=dataTableManager.paginator />
315 </#if>
316 <div class="pull-right">
317 <@paginationItemCount paginator=dataTableManager.paginator combo=1 nb_items_per_page=dataTableManager.paginator.itemsPerPage?string />
318 </div>
319 <input type="hidden" name="${dataTableManager.id}" id="${dataTableManager.id}" value="${dataTableManager.id}" />
320 </form>
321 </#if>
322 <table class="${tableClass}" summary="${summary}">
323 <caption>${caption}</caption>
324 <tr>
325 <#list dataTableManager.listColumn as column>
326 <th scope="col">
327 #i18n{${column.titleKey}}
328 <#if !(column.typeColumn = "ACTION") && column.sortable>
329 <@sort jsp_url=dataTableManager.sortUrl attribute=column.parameterName />
330 </#if>
331 </th>
332 </#list>
333 </tr>
334 <#list dataTableManager.items as item>
335 <tr>
336 <#list dataTableManager.listColumn as column>
337 <#if column.typeColumn = "STRING">
338 <#assign propName = "item." + column.parameterName>
339 <#assign value = propName?eval>
340 <td>${value!}</td>
341 <#elseif column.typeColumn = "LABEL">
342 <#assign propName = "item." + column.parameterName>
343 <#assign value = propName?eval>
344 <td>#i18n{${value!}}</td>
345 <#elseif column.typeColumn = "BOOLEAN">
346 <#assign propName = "item." + column.parameterName>
347 <#assign value = propName?eval>
348 <#if value?? && value>
349 <td><span class="label label-success" title="#i18n{${column.labelTrue!}}"><i class="glyphicon glyphicon-ok-sign icon-white"></i>#i18n{${column.labelTrue!}}</span></td>
350 <#else>
351 <td><span class="label label-important" title="#i18n{${column.labelFalse!}}"><i class="glyphicon glyphicon-remove-sign icon-white"></i>#i18n{${column.labelFalse!}}</span></td>
352 </#if>
353 <#elseif column.typeColumn = "EMAIL">
354 <#assign propName = "item." + column.parameterName>
355 <#assign value = propName?eval>
356 <td><#if value?? && value != ""><a href="mailto:${value}" title="${value}" >${value}</a></#if></td>
357 <#elseif column.typeColumn = "ACTION">
358 <#if column.parameterName?? && column.parameterName != "">
359 <#assign macroName = column.parameterName>
360 <#elseif actionMacro?? && actionMacro != "">
361 <#assign macroName = actionMacro>
362 </#if>
363 <#if macroName?? && macroName != "">
364 <td><@.vars[macroName] item=item /></td>
365 </#if>
366 </#if>
367 </#list>
368 </tr>
369 </#list>
370 </table>
371 <#if dataTableManager.enablePaginator>
372 <form class="form-inline" method="post" action="${dataTableManager.sortUrl}">
373 <#if (dataTableManager.paginator.pagesCount > 1) >
374 <@paginationPageLinks paginator=dataTableManager.paginator />
375 </#if>
376 <div class="pull-right">
377 <@paginationItemCount paginator=dataTableManager.paginator combo=0 nb_items_per_page=dataTableManager.paginator.itemsPerPage?string />
378 </div>
379 <input type="hidden" name="${dataTableManager.id}" id="${dataTableManager.id}" value="${dataTableManager.id}" />
380 </form>
381 </#if>
382 <#else>
383 #i18n{portal.util.labelNoItem}
384 </#if>
385 </#macro>
386
387 <#macro filterPanel dataTableManager formClass="form-horizontal" >
388 <#if dataTableManager.filterPanel.listFilter?? && 0 < dataTableManager.filterPanel.listFilter?size>
389 <form class="${formClass}" method="post" action="${dataTableManager.filterPanel.formUrl}" >
390 <fieldset>
391 <#list dataTableManager.filterPanel.listFilter as filter>
392 <div class="form-group">
393 <label class="col-xs-12 col-sm-3 col-md-3" for="description" >#i18n{${filter.filterLabel}} :</label>
394 <div class="col-xs-12 col-sm-9 col-md-9">
395 <#if filter.filterType = "STRING">
396 <input type="text" name="${dataTableManager.filterPanelPrefix}${filter.parameterName}" id="${filter.parameterName}" size="30" value="${filter.value!}"/>
397 <#elseif filter.filterType = "BOOLEAN">
398 <input type="checkbox" value="true" name="${dataTableManager.filterPanelPrefix}${filter.parameterName}" id="${dataTableManager.filterPanelPrefix}${filter.parameterName}" <#if filter.value?? && filter.value = "true">checked="checked" </#if>/>
399 <#elseif filter.filterType = "DROPDOWNLIST">
400 <#if filter.value??>
401 <#assign filter_value = filter.value >
402 <#else>
403 <#assign filter_value = "" >
404 </#if>
405 <@combo name=dataTableManager.filterPanelPrefix+filter.parameterName default_value=filter_value items=filter.refList />
406 </#if>
407 </div>
408 </div>
409 </#list>
410 <div class="form-group">
411 <input type="hidden" name="${dataTableManager.filterPanelPrefix}updateFilters" id="${dataTableManager.filterPanelPrefix}updateFilters" value="true" />
412 <input type="hidden" name="${dataTableManager.id}" id="${dataTableManager.id}" value="${dataTableManager.id}" />
413 <button class="btn btn-primary btn-sm" type="submit" >
414 <i class="fa fa-search"></i>
415 <span class="hidden-xs" >#i18n{portal.util.labelSearch}</span>
416 </button>
417 <#if dataTableManager.filterPanel.formUrl?contains("?")>
418 <#assign dataTableResetUrl = dataTableManager.filterPanel.formUrl + "&" + dataTableManager.filterPanelPrefix + "resetFilters=true" />
419 <#else>
420 <#assign dataTableResetUrl = dataTableManager.filterPanel.formUrl + "?" + dataTableManager.filterPanelPrefix + "resetFilters=true" />
421 </#if>
422 <a class="btn btn-primary btn-sm" href="${dataTableResetUrl}" title="#i18n{portal.util.labelReset}">
423 <i class="fa fa-remove-circle"></i>
424 <span class="hidden-xs" >#i18n{portal.util.labelReset}</span>
425 </a>
426 </div>
427 </fieldset>
428 </form>
429 </#if>
430 </#macro>
431
432 <#-- Macro messages : display message block for errors or infos -->
433 <#macro messages errors=[] infos=[] warnings=[] errors_class="alert alert-danger" infos_class="alert alert-info" warnings_class="alert alert-warning">
434
435 <#-- Error messages handling -->
436 <#if errors??>
437 <#if errors?size > 0 >
438 <div class="${errors_class}" id="messages_errors_div">
439 <a class="close" data-dismiss="alert" href="#">x</a>
440 <#list errors as error >
441 <i class="fa fa-exclamation-circle"></i> ${error.message} <br>
442 </#list>
443 </div>
444 </#if>
445 </#if>
446
447 <#-- Info messages handling -->
448 <#if infos??>
449 <#if infos?size > 0 >
450 <div class="${infos_class}" id="messages_infos_div" >
451 <a class="close" data-dismiss="alert" href="#">x</a>
452 <#list infos as info >
453 <i class="fa fa-info-circle"></i> ${info.message} <br>
454 </#list>
455 </div>
456 </#if>
457 </#if>
458
459 <#-- Warning messages handling -->
460 <#if warnings??>
461 <#if warnings?size > 0 >
462 <div class="${warnings_class}" id="messages_warnings_div" >
463 <a class="close" data-dismiss="alert" href="#">x</a>
464 <#list warnings as warning >
465 <i class="fa fa-info-circle"></i> ${warning.message} <br>
466 </#list>
467 </div>
468 </#if>
469 </#if>
470
471 </#macro>
472
473 <#macro fieldInputText i18nLabelKey inputName mandatory=false value="" maxlength=0 i18nHelpBlockKey='' cssClass='form-control'>
474 <div class="form-group">
475 <label class="col-xs-12 col-sm-3 col-md-3 col-lg-3 control-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>*</#if> :</label>
476 <div class="col-xs-12 col-sm-9 col-md-6 col-lg-6">
477 <input class="${cssClass}" id="${inputName}" name="${inputName}" type="text" value="${value}" <#if maxlength > 0>maxlength=${maxlength}</#if> />
478 <#if i18nHelpBlockKey != ''><p class="help-block">#i18n{${i18nHelpBlockKey}}</p></#if>
479 </div>
480 </div>
481 </#macro>
482
483 <#macro fieldInputPassword i18nLabelKey inputName mandatory=false value="" maxlength=0 i18nHelpBlockKey='' cssClass='form-control'>
484 <div class="form-group">
485 <label class="col-xs-12 col-sm-3 col-md-3 col-lg-3 control-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>*</#if> :</label>
486 <div class="col-xs-12 col-sm-9 col-md-6 col-lg-6">
487 <input class="${cssClass}" id="${inputName}" name="${inputName}" type="password" value="${value}" <#if maxlength > 0>maxlength=${maxlength}</#if>>
488 <#if i18nHelpBlockKey != ''><p class="help-block">#i18n{${i18nHelpBlockKey}}</p></#if>
489 </div>
490 </div>
491 </#macro>
492
493 <#macro fieldInputWrapper i18nLabelKey inputName mandatory=false value="" maxlength=0 i18nHelpBlockKey='' cssClass='form-control'>
494 <div class="form-group">
495 <label class="col-xs-12 col-sm-3 col-md-3 col-lg-3 control-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>*</#if> :</label>
496 <div class="col-xs-12 col-sm-9 col-md-6 col-lg-6">
497 <#nested>
498 <#if i18nHelpBlockKey != ''><p class="help-block">#i18n{${i18nHelpBlockKey}}</p></#if>
499 </div>
500 </div>
501 </#macro>
502
503 <#macro fieldStaticText i18nLabelKey cssClass='form-control' >
504 <div class="form-group">
505 <label class="col-xs-12 col-sm-3 col-md-3 col-lg-3 control-label">#i18n{${i18nLabelKey}} :</label>
506 <div class="col-xs-12 col-sm-9 col-md-6 col-lg-6">
507 <p class="form-control-static">
508 <#nested>
509 </p>
510 </div>
511 </div>
512 </#macro>
513
514 <#macro fieldInputCalendar i18nLabelKey inputName mandatory=false value="" i18nHelpBlockKey='' cssClass='form-control' language='fr'>
515 <div class="form-group">
516 <label class="col-xs-12 col-sm-3 col-md-3 col-lg-3 control-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>*</#if> :</label>
517 <div class="col-xs-12 col-sm-9 col-md-6 col-lg-6">
518 <div class="input-group">
519 <div class="input-group-addon"><i class="fa fa-calendar"> </i></div>
520 <input class="${cssClass}" id="${inputName}" name="${inputName}" type="text" value="${value}" >
521 </div>
522 <#if i18nHelpBlockKey != ''><p class="help-block">#i18n{${i18nHelpBlockKey}}</p></#if>
523 </div>
524 </div>
525 <@getDatePickerBootstrap idField=inputName language=language />
526 </#macro>
527
528 <#macro fieldInputCheckBox i18nLabelKey inputName value="" disabled=false checked=false i18nHelpBlockKey='' cssClass='' >
529 <div class="form-group">
530 <div class="col-xs-12 col-sm-offset-3 col-sm-6 col-md-offset-3 col-md-6 col-lg-offset-3 col-lg-6">
531 <div class="checkbox<#if disabled> disabled</#if> ">
532 <label>
533 <input class="${cssClass}" id="${inputName}" name="${inputName}" type="checkbox" value="${value}" <#if checked>checked</#if> <#if disabled>disabled</#if> >
534 #i18n{${i18nLabelKey}}
535 </label>
536 </div>
537 <#if i18nHelpBlockKey != ''><p class="help-block">#i18n{${i18nHelpBlockKey}}</p></#if>
538 </div>
539 </div>
540 </#macro>
541
542 <#macro fieldInputRadioBox i18nLabelKey inputName value="" disabled=false checked=false i18nHelpBlockKey='' cssClass='' >
543 <div class="form-group">
544 <div class="col-xs-12 col-sm-offset-3 col-sm-6 col-md-offset-3 col-md-6 col-lg-offset-3 col-lg-6">
545 <div class="radio<#if disabled> disabled</#if> ">
546 <label>
547 <input class="${cssClass}" id="${inputName}" name="${inputName}" type="radio" value="${value}" <#if checked>checked</#if> <#if disabled>disabled</#if> >
548 #i18n{${i18nLabelKey}}
549 </label>
550 </div>
551 <#if i18nHelpBlockKey != ''><p class="help-block">#i18n{${i18nHelpBlockKey}}</p></#if>
552 </div>
553 </div>
554 </#macro>
555
556 <#macro fieldInputCheckBoxInline inputName value="" disabled=false checked=false >
557 <label class="checkbox-inline<#if disabled> disabled</#if> ">
558 <input class="${cssClass}" id="${inputName}" name="${inputName}" type="checkbox" value="${value}" <#if checked>checked</#if> <#if disabled>disabled</#if> > #i18n{${i18nLabelKey}}
559 </label>
560 </#macro>
561
562 <#macro fieldInputRadioBoxInline inputName value="" disabled=false checked=false >
563 <label class="radio-inline<#if disabled> disabled</#if> ">
564 <input class="${cssClass}" id="${inputName}" name="${inputName}" type="radio" value="${value}" <#if checked>checked</#if> <#if disabled>disabled</#if> > #i18n{${i18nLabelKey}}
565 </label>
566 </#macro>
567
568 <#macro fieldInputCombo i18nLabelKey inputName items value="" mandatory=false i18nHelpBlockKey='' cssClass='form-control' >
569 <div class="form-group">
570 <label class="col-xs-12 col-sm-3 col-md-3 col-lg-3 control-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>* </#if>:</label>
571 <div class="col-xs-12 col-sm-9 col-md-6 col-lg-6">
572 <#assign params = "class='" + cssClass + "'" >
573 <@comboWithParams name=inputName items=items default_value=value additionalParameters=params />
574 <#if i18nHelpBlockKey != ''><p class="help-block">#i18n{${i18nHelpBlockKey}}</p></#if>
575 </div>
576 </div>
577 </#macro>
578
579 <#macro fieldTextArea i18nLabelKey inputName mandatory=false value="" maxlength=0 i18nHelpBlockKey='' cssClass='form-control'>
580 <div class="form-group">
581 <label class="col-xs-12 col-sm-3 col-md-3 col-lg-3 control-label" for="${inputName}">#i18n{${i18nLabelKey}} <#if mandatory>*</#if> :</label>
582 <div class="col-xs-12 col-sm-9 col-md-6 col-lg-6">
583 <textarea class="${cssClass}" id="${inputName}" name="${inputName}" <#if maxlength > 0>maxlength=255</#if> >${value}</textarea>
584 <#if i18nHelpBlockKey != ''><p class="help-block">#i18n{${i18nHelpBlockKey}}</p></#if>
585 </div>
586 </div>
587 </#macro>
588
589 <#macro actionButtons button1Name='' button2Name='' i18nValue1Key='portal.admin.message.buttonValidate' i18nValue2Key='portal.admin.message.buttonCancel' url1='' url2='' icon1='fa fa-check' icon2='fa fa-close' offset=3 >
590 <#assign col = 11 - offset />
591 <div class="form-group">
592 <div class="col-xs-12 col-sm-offset-${offset} col-sm-${col} col-md-offset-${offset} col-md-${col}">
593 <#if url1 != ''>
594 <a class="btn btn-primary" href="${url1}" >
595 <i class="${icon1}"></i> #i18n{${i18nValue1Key}}
596 </a>
597 <#else>
598 <button class="btn btn-primary" name="${button1Name}" type="submit">
599 <i class="${icon1}"></i> #i18n{${i18nValue1Key}}
600 </button>
601 </#if>
602 <#if url2 != ''>
603 <a class="btn btn-default" href="${url2}" >
604 <i class="${icon2}"></i> #i18n{${i18nValue2Key}}
605 </a>
606 <#else>
607 <#if button2Name != ''>
608 <button class="btn btn-default" name="${button2Name}" type="submit" >
609 <i class="${icon2}"></i> #i18n{${i18nValue2Key}}
610 </button>
611 </#if>
612 </#if>
613 </div>
614 </div>
615 </#macro>
616
617 <#macro boxSized col i18nTitleKey boxClass='box-primary' >
618 <div class="col-md-${col}">
619 <div class="box ${boxClass}">
620 <@boxHeader title=i18nTitleKey />
621 <div class="box-body">
622 <#nested>
623 </div>
624 </div>
625 </div>
626 </#macro>
627
628 <#macro rowBox boxClass='box-primary' col=12>
629 <div class="row">
630 <div class="col-xs-${col} col-sm-${col} col-md-${col}">
631 <div class="box ${boxClass}">
632 <#nested>
633 </div>
634 </div>
635 </div>
636 </#macro>
637
638 <#macro rowBoxHeader i18nTitleKey boxClass='box-primary' col=12>
639 <@rowBox boxClass=boxClass col=col >
640 <@boxHeader i18nTitleKey=i18nTitleKey />
641 <div class="box-body">
642 <#nested>
643 </div>
644 </@rowBox>
645 </#macro>
646
647 <#--
648 This is now empty because it should not be used anymore
649 and is kept only for backwards compatibility
650 -->
651 <#macro headerButtons>
652 <#nested>
653 </#macro>
654
655 <#macro tableHeadBodySeparator>
656 </thead>
657 <tbody>
658 </#macro>
659
660
661 <#---------------------------NEW MACROS------------------------------>
662
663 <#-- TABLE -->
664 <#-- class: striped/bordered/hover/condensed -->
665 <#macro table responsive=true class='' id='' params=''>
666 <#if responsive>
667 <div class="table-responsive">
668 </#if>
669 <table class="table table-hover table-condensed<#if class!=''> ${class}</#if>" id="${id}"<#if params!=''> ${params}</#if>>
670 <#nested>
671 </table>
672 <#if responsive>
673 </div>
674 </#if>
675 </#macro>
676
677 <#macro td xs=0 sm=0 md=0 lg=0 xl=0 class='' id='' params=''>
678 <td class="<#if xs!=0>col-xs-${xs}</#if><#if sm!=0> col-sm-${sm}</#if><#if md!=0> col-md-${md}</#if><#if lg!=0> col-lg-${lg}</#if><#if xl!=0> col-xl-${xl}</#if><#if class!=''>${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
679 <#nested>
680 </td>
681 </#macro>
682
683 <#--- MACRO SELECT (TO REPLACE "COMBO" MACROS) --->
684 <#macro select name items='' default_value=0 id=name size='' sort=false multiple=0 params='' title=''>
685 <select id="${id}" name="${name}" class="form-control<#if size!=''> input-${size}</#if>" <#if (multiple > 0)>multiple size="${multiple}"</#if><#if params!=''> ${params}</#if><#if title!=''> ${title}</#if>>
686 <#if items?has_content>
687 <#if sort=true>
688 <#list items?sort_by("name") as item>
689 <#if default_value="${item.code}">
690 <option selected="selected" value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
691 <#else>
692 <option value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
693 </#if>
694 </#list>
695 <#else>
696 <#list items as item>
697 <#if default_value="${item.code}">
698 <option selected="selected" value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
699 <#else>
700 <option value="${item.code}" <#if !item.name?has_content>label="${i18n("portal.util.labelEmpty")}"</#if>>${item.name}</option>
701 </#if>
702 </#list>
703 </#if>
704 <#else>
705 <#nested>
706 </#if>
707 </select>
708 </#macro>
709
710 <#-- ICONS -->
711 <#-- Icons from FontAwesome -->
712 <#macro icon prefix='fa fa-' style='' class='' title='' id='' params=''>
713 <i class="${prefix}${style}<#if class!=''> ${class}</#if>" aria-hidden="true"<#if title!=''> title='${title}'</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>></i>
714 </#macro>
715
716 <#-- FORM -->
717 <#-- class: form-inline/form-horizontal/navbar-form/navbar-left/search-form... Default is horizontal -->
718 <#macro tform class='form-horizontal' class2='' action='' method='post' name='' id='' role='form' params=''>
719 <form class="${class}<#if class2!=''> ${class2}</#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 params!=''> ${params}</#if>>
720 <#nested>
721 </form>
722 </#macro>
723
724 <#-- FORM ELEMENT STRUCTURE -->
725 <#-- formStyle values: empty/inline/horizontal/navbar-form/navbar-left... Default is horizontal -->
726 <#-- groupStyle: success/warning/error... -->
727
728 <#macro formGroup formStyle='horizontal' class='' groupStyle='' rows=1 labelKey='' labelFor='' labelId='' helpKey='' id='' mandatory=false showLabel=true params=''>
729 <div class="form-group<#if groupStyle!=''> has-${groupStyle} has-feedback</#if><#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
730 <#if rows=1>
731 <#if labelKey!='' && formStyle='horizontal'>
732 <#assign labelClass = "col-xs-12 col-sm-3 control-label">
733 <#assign divClass = "col-xs-12 col-sm-9 col-md-6 col-lg-6">
734 <#elseif formStyle = 'inline'>
735 <#assign labelClass = ''>
736 <#else>
737 <#assign divClass="col-xs-12 col-sm-offset-3 col-sm-6">
738 </#if>
739 <#else>
740 <#assign labelClass = "col-xs-12">
741 <#assign divClass = "col-xs-12">
742 </#if>
743 <#if labelKey!=''>
744 <label class="${labelClass}<#if showLabel=false> sr-only</#if>" for="${labelFor}"<#if labelId!=''> id="${labelId}"</#if>>
745 ${labelKey}
746 <#if mandatory=false>
747  
748 <#elseif mandatory=true>
749  <@icon style='asterisk' />
750 </#if>
751 </label>
752 </#if>
753 <#if formStyle="horizontal">
754 <div class="${divClass}">
755 </#if>
756 <#assign mandatory = mandatory>
757 <#assign labelFor = labelFor>
758 <#assign helpKey = helpKey>
759 <#nested>
760 <#if class='success'>
761 <@icon style='check' class='form-control-feedback' />
762 <#elseif class='warning'>
763 <@icon style='warning' class='form-control-feedback' />
764 <#elseif class='error'>
765 <@icon style='close' class='form-control-feedback' />
766 </#if>
767 <#if helpKey!='' && formStyle!='inline'><span class="help-block" <#if labelFor!=''>id="${labelFor}_help"</#if>>${helpKey}</span></#if>
768 <#if formStyle="horizontal">
769 </div>
770 </#if>
771 </div>
772 </#macro>
773
774 <#-- INPUT TEXT/TEXTAREA/SEARCH/PASSWORD/EMAIL/FILE -->
775 <#-- type : text/textarea/password/email/file/number. Default is text -->
776 <#-- size: input-xs/input-sm/input-lg -->
777 <#-- incoming Bootstrap 4 size: form-control-sm/form-control-lg or empty for the normal size -->
778 <#-- pattern: [A-F][0-9]{5} -->
779 <#macro input name type='text' value='' class='' size='' inputSize=0 maxlength=0 placeHolder='' rows=4 cols=40 richtext=false tabIndex='' id='' mandatory=mandatory disabled=false readonly=false pattern='' params='' title='' min=0 max=0>
780 <#if type='textarea'>
781 <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!='' && helpKey!=''> aria-describedby="${labelFor}_help"</#if>><#nested></textarea>
782 <#elseif type='text' || type='search' || type='password' || type='email' || type='file' || type='number'>
783 <input class="form-control<#if size!=''> input-${size}</#if><#if class!=''> ${class}</#if> " id="${id}" name="${name}" type="${type}" value="${value}"<#if tabIndex!=''> tabindex="${tabIndex}"</#if><#if placeHolder!=''> placeholder="${placeHolder}"</#if><#if title!=''> title="${title}"</#if><#if maxlength > 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!=0> min="${min}"</#if><#if max!=0> max="${max}"</#if><#if mandatory> required</#if><#if labelFor!='' && helpKey!=''> aria-describedby="${labelFor}_help"</#if> />
784 <#else><@icon style='warning' />Type not supported
785 </#if>
786 </#macro>
787
788 <#-- STATIC TEXT -->
789 <#-- Bootstrap colors: muted/primary/success/info/warning/danger -->
790 <#-- AdminLTE colors: red/yellow/aqua/blue/black/light-blue/green/gray/navy/teal/olive/lime/orange/fuchsia/purple/maroon -->
791 <#macro staticText inForm=true color='' id='' params=''>
792 <p class="<#if inForm>form-control-static</#if><#if color!=''> text-${color}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
793 <#nested>
794 </p>
795 </#macro>
796
797 <#-- CHECKBOX -->
798 <#-- orientation: vertical/horizontal. Default is vertical -->
799 <#macro checkBox name id='' labelKey='' labelFor='' orientation='vertical' value='' tabIndex='' title='' disabled=false readonly=false checked=false mandatory=mandatory params=''>
800 <#if orientation='vertical'>
801 <div class="checkbox">
802 </#if>
803 <label<#if orientation='horizontal'> class="checkbox-inline"</#if><#if labelFor!=''> for="${labelFor}"</#if>>
804 <input type="checkbox" id="${id}" name="${name}"<#if value!=''> value="${value}"</#if><#if tabIndex!=''> tabindex="${tabIndex}"</#if><#if checked> checked</#if><#if disabled> disabled</#if><#if readonly> readonly</#if><#if params!=''> ${params}</#if> />
805 <#if labelKey!=''>
806 ${labelKey}
807 <#else>
808  
809 </#if>
810 </label>
811 <#if orientation='vertical'></div></#if>
812 </#macro>
813
814 <#-- RADIO BUTTON -->
815 <#-- orientation: vertical/horizontal. Default is vertical -->
816 <#macro radioButton name id='' value='' labelKey='' labelFor='' orientation='vertical' tabIndex='' title='' disabled=false readonly=false checked=false mandatory=mandatory params=''>
817 <#if orientation='vertical'>
818 <div class="radio">
819 </#if>
820 <label<#if orientation='horizontal'> class="radio-inline"</#if>>
821 <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> />
822 <#if labelKey!=''>
823 ${labelKey}
824 <#else>
825  
826 </#if>
827 </label>
828 <#if orientation='vertical'></div></#if>
829 </#macro>
830
831
832 <#-- INPUT-GROUP -->
833 <#-- size: sm/lg/no size-->
834 <#macro inputGroup size='' id='' params=''>
835 <div class="input-group<#if size!=''> input-group-${size}</#if>" <#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
836 <#nested>
837 </div>
838 </#macro>
839
840 <#macro inputGroupItem type='btn' id='' params=''>
841 <#-- type: btn/addon. default is btn-->
842 <span class="input-group-${type}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
843 <#nested>
844 </span>
845 </#macro>
846
847 <#-- DROPDOWN MENU -->
848 <#-- class: dropdown-menu-right -->
849 <#-- Expected content : <li><a>Your link here</a></li> -->
850 <#macro dropdownMenu class='' id='' params=''>
851 <ul class="dropdown-menu ${class}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
852 <#nested>
853 </ul>
854 </#macro>
855
856 <#-- ROW -->
857 <#macro row class='' id='' params=''>
858 <div class="row<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
859 <#nested>
860 </div>
861 </#macro>
862
863 <#-- COLUMNS -->
864 <#-- cols = col-xs- (<544px)/col-sm- (>=544px)/col-md- (>=768px)/col-lg- (>=992px)/col-xl- (>=1200px) -->
865 <#macro columns offsetXs=0 offsetSm=0 offsetMd=0 offsetLg=0 offsetXl=0 pushXs=0 pushSm=0 pushMd=0 pushLg=0 pushXl=0 pullXs=0 pullSm=0 pullMd=0 pullLg=0 pullXl=0 xs=12 sm=0 md=0 lg=0 xl=0 id='' class='' params=''>
866 <div class="col-xs-${xs}<#if sm!=0> col-sm-${sm}</#if><#if md!=0> col-md-${md}</#if><#if lg!=0> col-lg-${lg}</#if><#if xl!=0> col-xl-${xl}</#if><#if offsetXs!=0> col-xs-offset-${offsetXs}</#if><#if offsetSm!=0> col-sm-offset-${offsetSm}</#if><#if offsetMd!=0> col-md-offset-${offsetMd}</#if><#if offsetLg!=0> col-lg-offset-${offsetLg}</#if><#if offsetXl!=0> col-xl-offset-${offsetXl}</#if><#if pushXs!=0> col-xs-push-${pushXs}</#if><#if pushSm!=0> col-sm-push-${pushSm}</#if><#if pushMd!=0> col-md-push-${pushMd}</#if><#if pushLg!=0> col-lg-push-${pushLg}</#if><#if pushXl!=0> col-xl-push-${pushXl}</#if><#if pullXs!=0> col-xs-pull-${pullXs}</#if><#if pullSm!=0> col-sm-pull-${pullSm}</#if><#if pullMd!=0> col-md-pull-${pullMd}</#if><#if pullLg!=0> col-lg-pull-${pullLg}</#if><#if pullXl!=0> col-xl-pull-${pullXl}</#if><#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
867 <#nested>
868 </div>
869 </#macro>
870
871 <#-- TABS -->
872
873 <#-- TAB Custom AdminLTE -->
874 <#macro tabs color='' id='' params=''>
875 <div class="nav-tabs-custom<#if color!=''> ${color}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
876 <#nested>
877 </div>
878 </#macro>
879
880 <#-- Bootstrap UL tabs -->
881 <#-- type: tabs/tabs nav-justified/pills/pills nav-stacked/pills nav-justified -->
882 <#macro listTabs type='tabs' id='' params=''>
883 <ul class="nav nav-${type}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
884 <#nested>
885 </ul>
886 </#macro>
887
888 <#-- TAB Content AdminLTE -->
889 <#macro tabContent id='' params=''>
890 <div class="tab-content"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
891 <#nested>
892 </div>
893 </#macro>
894
895
896 <#-- ACCORDION -->
897 <#-- The accordionContainer is the container for accordionPanel, which itself is the container for accordionHeader and accordionBody -->
898 <#-- The childId argument in accordionPanel is meant to be used in the two sub-macros: accordionHeader and accordionBody -->
899 <#macro accordionContainer id='' params=''>
900 <div class="box-group"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
901 <#assign parentId = id>
902 <#nested>
903 </div>
904 </#macro>
905
906 <#macro accordionPanel color='' collapsed=true childId='' id='' params=''>
907 <div class="panel box box-${color}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
908 <#if collapsed = true>
909 <#assign aClass = 'collapsed'>
910 <#assign expanded = 'false'>
911 <#assign childClass = 'panel-collapse collapse'>
912 <#else>
913 <#assign aClass = ''>
914 <#assign expanded = 'true'>
915 <#assign childClass = 'panel-collapse collapse in'>
916 </#if>
917 <#assign childId = childId>
918 <#nested>
919 </div>
920 </#macro>
921
922 <#-- ACCORDION ELEMENT -->
923 <#-- The boxTools parameter is unused, kept for backwards compatibility -->
924 <#macro accordionHeader title='' parentId=parentId childId=childId boxTools=false id='' params=''>
925 <div class="box-header with-border"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
926 <h2 class="box-title">
927 <a class="${aClass}" data-toggle="collapse" data-parent="#${parentId}" href="#${childId}" aria-expanded="${expanded}">
928 ${title}
929 </a>
930 </h2>
931 <#local nested><#nested></#local>
932 <#if nested?has_content>
933 <div class="box-tools">
934 ${nested}
935 </div>
936 </#if>
937 </div>
938 </#macro>
939
940 <#macro accordionBody id=childId class=childClass expanded=expanded params=''>
941 <div id="${id}" class="${class}" aria-expanded="${expanded}"<#if params!=''> ${params}</#if>>
942 <@boxBody>
943 <#nested>
944 </@boxBody>
945 </div>
946 </#macro>
947
948 <#macro progressBar description='' id='' params=''>
949 <div class="progress"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
950 <div id="progressbar" class="progress-bar progress-bar-striped" role="progressbar">
951 <div id="complexity">0%</div>
952 </div>
953 </div>
954 <#if description!=''>
955 <span class="progress-description">${description}</span>
956 </#if>
957 </#macro>
958
959
960
961
962 <#-- INFO-BOX AdminTLE (widget) -->
963 <#-- color: only for the left side showing the icon. -->
964 <#-- bgColor: for the right side containing the text -->
965 <#macro infoBox color='' boxText='' boxIcon='' boxNumber='' unit='' bgColor='' progressBar='' progressDescription='' id='' params=''>
966 <div class="info-box<#if bgColor!=''> ${bgColor}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
967 <span class="info-box-icon<#if color!=''> ${color}</#if>"><@icon style=boxIcon /></span>
968 <div class="info-box-content">
969 <span class="info-box-text">${boxText}</span>
970 <span class="info-box-number">${boxNumber?string(",000")}<#if unit!=''> <small>${unit}</small></#if></span>
971 <#if bgColor!='' && progressBar!=''>
972 <div class="progress">
973 <div class="progress-bar" style="width: ${progressBar}%"></div>
974 </div>
975 </#if>
976 <#if progressDescription!=''>
977 <span class="progress-description">${progressDescription}</span>
978 </#if>
979 </div>
980 </div>
981 </#macro>
982
983 <#-- TAG -->
984 <#-- color: default/primary/success/info/warning/danger/ -->
985 <#macro tag color='default' title='' type='span' id='' params=''>
986 <${type} class="label label-${color}"<#if title!=''> title='${title}'</#if><#if id!=''>id='${id}'</#if><#if params!=''>${params}</#if>>
987 <#nested>
988 </${type}>
989 </#macro>
990
991 <#-- BUTTON -->
992 <#-- bootstrap 3 : size: btn-xs/btn-sm/btn-lg -->
993 <#-- upcoming bootstrap 4 : size: btn-sm for small buttons/empty for medium buttons/btn-lg for large buttons -->
994 <#-- color: btn-default[bootstrap4 : btn-secondary]/btn-primary/btn-success/btn-warning/btn-danger/btn-info/bg-purple/bg-blue/bg-navy/bg-teal/bg-maroon/bg-black/bg-gray/bg-olive/bg-lime/bg-orange/bg-fuchsia -->
995 <#-- color (upcoming bootstrap 4): btn-outline-default/btn-outline-primary/btn-outline-success/btn-outline-warning/btn-outline-danger/btn-outline-info/ -->
996 <#-- style: btn-block/btn-flat/close/navbar-toggle/collapsed... -->
997 <#-- type: button/submit/reset -->
998 <#-- params: data-toggle/data-target/data-dismiss... -->
999 <#-- buttonIcon: icon name ex: info/check/comment/envelope... -->
1000 <#-- iconPosition: left/right -->
1001 <#-- cancel: switch to true for a cancellation form button. Adds the "formnovalidate" attribute to the button, as well as the right class -->
1002 <#macro button name='' id='' type='button' size='' color='' style='btn-flat' class='' params='' value='' title='' tabIndex='' showTitle=true showTitleXs=true showTitleSm=true showTitleMd=true showTitleLg=true buttonIcon='' disabled=false iconPosition='left' dropdownMenu=false cancel=false>
1003 <#if cancel>
1004 <#assign buttonColor = 'btn-default' />
1005 <#elseif !cancel && color=''>
1006 <#assign buttonColor = 'btn-primary' />
1007 <#else>
1008 <#assign buttonColor = color />
1009 </#if>
1010
1011 <#-- Visibility of button title -->
1012 <#assign showTitleClass = '' />
1013 <#if showTitle = false><#assign showTitleClass = 'sr-only' /></#if>
1014 <#if showTitleXs = false><#assign showTitleClass = showTitleClass + 'hidden-xs' /></#if>
1015 <#if showTitleSm = false><#assign showTitleClass = showTitleClass + ' ' + 'hidden-sm' /></#if>
1016 <#if showTitleMd = false><#assign showTitleClass = showTitleClass + ' ' + 'hidden-md' /></#if>
1017 <#if showTitleLg = false><#assign showTitleClass = showTitleClass + ' ' + 'hidden-lg' /></#if>
1018
1019 <#if dropdownMenu>
1020 <div class="dropdown">
1021 </#if>
1022
1023 <button class="<#if style!='close'>btn</#if><#if size!='' && style!='btn-box-tool'> btn-${size}</#if><#if buttonColor!='' && style!='btn-box-tool'> ${buttonColor}</#if><#if style!=''> ${style}</#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 cancel> formnovalidate</#if>>
1024 <#if buttonIcon!='' && iconPosition='left'><@icon style=buttonIcon /></#if>
1025 <#if showTitleClass!='' && style!='btn-box-tool'><span class="${showTitleClass}"></#if>${title}<#if showTitleClass!='' && style!='btn-box-tool'></span></#if>
1026 <#if buttonIcon!='' && iconPosition='right'><@icon style=buttonIcon /></#if>
1027 <#if dropdownMenu>
1028  <@icon style='caret-down' />
1029 </#if>
1030 </button>
1031
1032 <#if dropdownMenu>
1033 <ul class="dropdown-menu"<#if id!=''> aria-labelledby="${id}"</#if>>
1034 <#nested>
1035 </ul>
1036 </div>
1037 </#if>
1038 </#macro>
1039
1040 <#-- A BUTTON (LINK STYLED AS A BUTTON) -->
1041 <#-- size: btn-xs/btn-sm/btn-lg -->
1042 <#-- color: btn-default/btn-primary/btn-success/btn-warning/btn-danger/btn-info/bg-purple/bg-blue/bg-navy/bg-teal/bg-maroon/bg-black/bg-gray/bg-olive/bg-lime/bg-orange/bg-fuchsia -->
1043 <#-- style: btn-block/btn-flat/disabled/btn-app -->
1044 <#-- icon: icon name ex: info/check/comment/envelope... -->
1045 <#macro aButton name='' id='' href='' size='' color='btn-primary' style='btn-flat' class='' params='' title='' tabIndex='' showTitle=true showTitleXs=true showTitleSm=true showTitleMd=true showTitleLg=true buttonIcon='' disabled=false iconPosition='left' dropdownMenu=false>
1046 <#-- Bootstrap 4 transition -->
1047 <#if color='btn-secondary'>
1048 <#assign color_temp='btn-default'>
1049 <#else>
1050 <#assign color_temp=color>
1051 </#if>
1052
1053 <#-- Visibility of button title -->
1054 <#assign showTitleClass = '' />
1055 <#if showTitle = false><#assign showTitleClass = 'sr-only' /></#if>
1056 <#if showTitleXs = false><#assign showTitleClass = showTitleClass + 'hidden-xs' /></#if>
1057 <#if showTitleSm = false><#assign showTitleClass = showTitleClass + ' ' + 'hidden-sm' /></#if>
1058 <#if showTitleMd = false><#assign showTitleClass = showTitleClass + ' ' + 'hidden-md' /></#if>
1059 <#if showTitleLg = false><#assign showTitleClass = showTitleClass + ' ' + 'hidden-lg' /></#if>
1060
1061 <a class="btn<#if size!=''> btn-${size}</#if><#if color_temp!=''> ${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 params!=''> ${params}</#if><#if disabled> disabled</#if><#if dropdownMenu> data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"</#if>>
1062 <#if buttonIcon!='' && iconPosition='left'><@icon style=buttonIcon /></#if>
1063 <span class="${showTitleClass}">${title}</span>
1064 <#if buttonIcon!='' && iconPosition='right'><@icon style=buttonIcon /></#if>
1065 <#if dropdownMenu>
1066  <@icon style='caret-down' />
1067 </#if>
1068 <#nested>
1069 </a>
1070 </#macro>
1071
1072 <#-- BTN TOOLBAR -->
1073 <#macro btnToolbar id='' params='' ariaLabel=''>
1074 <div class="btn-toolbar" role="toolbar"<#if ariaLabel!=''> aria-label="${ariaLabel}"</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1075 <#nested>
1076 </div>
1077 </#macro>
1078
1079 <#-- BTN GROUP -->
1080 <#-- size: sm/empty/lg -->
1081 <#macro btnGroup size='' class='' id='' params='' ariaLabel=''>
1082 <div class="btn-group<#if size!=''> btn-group-${size}</#if><#if class!=''> ${class}</#if>" role="group"<#if ariaLabel!=''> aria-label="${ariaLabel}"</#if><#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1083 <#nested>
1084 </div>
1085 </#macro>
1086
1087 <#-- Radio button/Checkbox as buttons (to use with btnGroup) -->
1088 <#-- type: radio/checkbox -->
1089 <#macro btnGroupRadioCheckbox type='checkbox' color='primary' size='' name='' id='' params='' ariaLabel='' labelFor='' labelKey='' labelParams='' tabIndex='' value='' checked=false>
1090 <label class="btn btn-${color}<#if size!=''> btn-${size}</#if>" for="${labelFor}"<#if labelParams!=''> ${labelParams}</#if>>
1091 <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>
1092 </label>
1093 </#macro>
1094
1095
1096
1097 <#-- MODAL -->
1098 <#-- bgColor: modal-default/modal-primary/modal-info/modal-warning/modal-danger -->
1099 <#macro modal id params='' bgColor=''>
1100 <div class="modal ${bgColor} fade" tabindex="-1" role="dialog" id="${id}" data-toggle="modal"<#if params!=''> ${params}</#if>>
1101 <div class="modal-dialog" role="document">
1102 <div class="modal-content">
1103 <#nested>
1104 </div>
1105 </div>
1106 </div>
1107 </#macro>
1108
1109 <#macro modalHeader titleLevel='h4' modalTitle='' id='' params=''>
1110 <div class="modal-header"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1111 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
1112 <span aria-hidden="true">×</span>
1113 </button>
1114 <${titleLevel} class="modal-title">${modalTitle}</${titleLevel}>
1115 </div>
1116 </#macro>
1117
1118 <#macro modalBody id='' params=''>
1119 <div class="modal-body"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1120 <#nested>
1121 </div>
1122 </#macro>
1123
1124 <#macro modalFooter id='' params=''>
1125 <div class="modal-footer"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1126 <#nested>
1127 </div>
1128 </#macro>
1129
1130 <#-- BREADCRUMBS -->
1131 <#macro breadcrumbs id='' params=''>
1132 <ol class="breadcrumb"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1133 <#nested>
1134 </ol>
1135 </#macro>
1136
1137 <#-- CALLOUT -->
1138 <#-- AdminLTE classes: info/warning/danger/success -->
1139 <#macro callOut color='' titleLevel='h3' title='' callOutIcon='' id='' params=''>
1140 <div class="callout callout-${color}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1141 <#if title!=''><${titleLevel}><@icon style=callOutIcon /> ${title}</${titleLevel}></#if>
1142 <#nested>
1143 </div>
1144 </#macro>
1145
1146 <#-- ALERT -->
1147 <#-- classes: alert-success/alert-info/alert-warning/alert-danger + alert-dismissible -->
1148 <#macro alert class='' titleLevel='h3' title='' iconTitle='' dismissible=false id='' params=''>
1149 <div class="alert alert-${class}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1150 <#if dismissible>
1151 <@button color='' size='' style='close' params='data-dismiss="alert" aria-hidden="true"'>
1152 ×
1153 </@button>
1154 </#if>
1155 <#if title!=''>
1156 <${titleLevel}>
1157 <#if iconTitle!=''><@icon style=iconTitle /></#if>
1158 ${title}
1159 </${titleLevel}>
1160 </#if>
1161 <#nested>
1162 </div>
1163 </#macro>
1164
1165
1166 <#---------------------------------------->
1167 <#-- AdminLTE Box -->
1168 <#-- color: default/primary/info/success/warning/danger -->
1169 <#-- style: solid (no top border) -->
1170 <#-- collapsed: true/false -->
1171 <#macro box color='' id='' style='' class='' params='' collapsed=false>
1172 <div class="box<#if color!=''> box-${color}</#if><#if style!=''> box-${style}</#if><#if class!=''> ${class}</#if><#if collapsed> collapsed-box</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1173 <#nested>
1174 </div>
1175 </#macro>
1176
1177 <#-- The boxTools parameter is unused, kept for backwards compatibility -->
1178 <#macro boxHeader title='' i18nTitleKey='' showTitle=true id='' params='' boxTools=false titleLevel='h2'>
1179 <div class="box-header with-border"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1180 <${titleLevel} class="box-title<#if showTitle=false> sr-only</#if>"><#if title!=''>${title}</#if><#if i18nTitleKey!=''>#i18n{${i18nTitleKey}}</#if></${titleLevel}>
1181 <#local nested><#nested></#local>
1182 <#if nested?has_content>
1183 <div class="box-tools">
1184 ${nested}
1185 </div>
1186 </#if>
1187 </div>
1188 </#macro>
1189
1190 <#macro boxBody class='' id='' params=''>
1191 <div class="box-body<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1192 <#nested>
1193 </div>
1194 </#macro>
1195
1196 <#macro boxFooter class='' id='' params=''>
1197 <div class="box-footer<#if class!=''> ${class}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1198 <#nested>
1199 </div>
1200 </#macro>
1201 <#---------------------------------------->
1202
1203
1204
1205 <#-- AdminLTE Small Box -->
1206 <#-- color:Bootstrap + AdminLTE colors -->
1207 <#-- unit: %,... -->
1208 <#macro smallBox color='' title='' text='' boxIcon='' titleLevel='h3' unit='' url='' urlText='' id='' params=''>
1209 <div class="small-box<#if color!=''> ${color}</#if>"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1210 <div class="inner">
1211 <${titleLevel}>${title}<#if unit!=''><sup style="font-size:20px;">${unit}</sup></#if></${titleLevel}>
1212 <p>${text}</p>
1213 </div>
1214 <div class="icon">
1215 <@icon style=boxIcon />
1216 </div>
1217 <#if url!=''>
1218 <a class="small-box-footer" href="${url}">${urlText} <@icon style='arrow-circle-right' /></a>
1219 </#if>
1220 </div>
1221 </#macro>
1222
1223 <#-- AdminLTE Error Page -->
1224 <#-- Error Type: 500,404... -->
1225 <#-- Color: primary/blue/navy/aqua/teal/green/orange/yellow/red/purple/maroon/gray/black... -->
1226 <#macro errorPage color='' errorType='' id='' params=''>
1227 <div class="error-page"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1228 <h2 class="headline text-${color}">${errorType}</h2>
1229 <div class="error-content">
1230 <h3>
1231 <@icon style='warning' class='text-${color}' />
1232 <#if errorType=='404'>
1233 #i18n{portal.util.error404.title}
1234 <#elseif errorType='500'>
1235 #i18n{portal.util.error500.title}
1236 <#else>...
1237 </#if>
1238 </h3>
1239 <p>
1240 <#if errorType=='404'>
1241 #i18n{portal.util.error404.text}
1242 <#elseif errorType='500'>
1243 #i18n{portal.util.error500.text}
1244 <#else>...
1245 </#if>
1246 </p>
1247 <@aButton href='' size='' color='bg-${color}' style='btn-flat'>
1248 <@icon style='home' />
1249 #i18n{portal.util.labelBackHome}
1250 </@aButton>
1251 </div>
1252 </div>
1253 </#macro>
1254
1255 <#-- CONTEXTUAL BACKGROUND P-->
1256 <#-- Bootstrap colors: primary/success/info/warning/danger -->
1257 <#-- AdminTLE colors: gray/gray-light/black/red/yellow/aqua/blue/light-blue/green/navy/teal/olive/lime/orange/fuchsia/purple/maroon -->
1258 <#macro coloredBg color='' type='p' id='' params=''>
1259 <${type} class="bg-${color}"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1260 <#nested>
1261 </${type}>
1262 </#macro>
1263
1264 <#macro listGroup id='' params=''>
1265 <ul class="list-group"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1266 <#assign listElementClass = "list-group-item list-group-item-action">
1267 <#nested>
1268 </ul>
1269 </#macro>
1270
1271 <#macro unstyledList id='' params=''>
1272 <ul class="unstyled"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1273 <#assign liClass = "margin">
1274 <#nested>
1275 </ul>
1276 </#macro>
1277
1278 <#-- DROPDOWN MENU LIST -->
1279 <#macro dropdownList id='' params=''>
1280 <ul class="dropdown-menu"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1281 <#nested>
1282 </ul>
1283 </#macro>
1284
1285 <#-- Will no longer exist in Boostrap 4. Use label/tag + .tag-pill instead -->
1286 <#macro badge id='' params=''>
1287 <span class="badge"<#if id!=''> id="${id}"</#if><#if params!=''> ${params}</#if>>
1288 <#nested>
1289 </span>
1290 </#macro>
1291
1292 <#-- CARDS -->
1293 <#macro card header=false headerTitle='' headerIcon=false headerTitleIcon=''>
1294 <div class="panel panel-default">
1295 <#if header><div class="panel-heading"><#if headerIcon><@icon style='${headerTitleIcon}' /> </#if>${headerTitle}</div></#if>
1296 <div class="panel-body">
1297 <#nested>
1298 </div>
1299 </div>
1300 </#macro>