cTable.ftl
1 <#-- Macro: cTable
2
3 Description: affiche un tableau de contenu.
4
5 Parameters:
6 @param - id - string - optional - Défaut "changeme", l'ID du table, ATTENTION changer l'identifiant par défaut si vous utilisez le macro cTableResponsive
7 @param - class - string - optional - permet d'ajouter une classe CSS au tableau
8 @param - caption - string - optional - permet de définir le titre "Caption" du tableau
9 @param - captionClass - string - optional - Défaut "visually-hidden" class du caption du tableau. Accessibilité: permet de masquer le titre du tableau pour les lecteurs d'écran si ele titre précédent le tableau est suffisant.
10 @param - summary - string - optional - permet de définir l'attribut "summary" du tableau
11 @param - breakpoint - string - optional - permet de définir le breakpoint du tableau (valeurs possibles: '-sm','-md','-lg','-xl','-xxl')
12 @param - themed - boolean - optional - permet d'ajouter les style du thème par défaut sinon ce sont les styles de table de BS4 qui seront appliqués (par défaut: true)
13 @param - collapsible - boolean - optional - par défaut pour les petits écran, seule la prmière cellule de la ligne est affichée -en colonne- et les autres sont masquée. Si false tout est en colonne sauf si le paramètre themed est false les styles BS4 seront alors appliqués par défauts (par défaut: true)
14 @param - params - string - optional - permet d'ajouter des parametres HTML au tableau
15 -->
16 <#macro cTable caption='' captionClass='visually-hidden' summary='' breakpoint='' themed=true collapsible=true class='' id='changeme' params='' deprecated...>
17 <@deprecatedWarning args=deprecated />
18 <#if id='changeme'><!-- ATTENTION : Risque de duplication d'id ! --></#if>
19 <div class="<#if id!=''>d-none d-md-block </#if>table-responsive<#if breakpoint!=''>${breakpoint}</#if>">
20 <table class="table<#if themed> ctable<#if collapsible> xs-collapsed</#if></#if><#if class !=''> ${class}</#if>"<#if summary !=''> summary="${summary!}"</#if><#if id !=''> id="${id!}"</#if><#if params!=''> ${params}</#if> >
21 <#if caption !=''> <caption class="visually-hidden">${caption!}</caption></#if>
22 <#nested>
23 </table>
24 </div>
25 <#if id !=''><@cTableResponsive id=id /></#if>
26 </#macro>
27 <#macro sortSite jsp_url attribute asc=false desc=true id="" >
28 <#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>
29 <#if asc>
30 <a id="sort${id!}_${attribute!}" href="${sort_url}true#sort${id!}_${attribute!}" title="#i18n{portal.util.sort.asc}" class="text-decoration-none" role="button">
31 <@parisIcon name='arrow-up' class='main-color' />
32 </a>
33 </#if>
34 <#if desc>
35 <a href="${sort_url}false#sort${id!}_${attribute!}" title="#i18n{portal.util.sort.desc}" class="text-decoration-none" role="button">
36 <@parisIcon name='arrow-down' class='main-color' />
37 </a>
38 </#if>
39 </#macro>
40 <#macro cTableResponsive id>
41 <div class="d-md-none" id="accordion-table-${id!}"></div>
42 <script>
43 document.addEventListener('DOMContentLoaded', function() {
44 <#if id='changeme'>console.warn( ' [Thème Paris fr] macro cTable : ATTENTION : Risque de duplication d\'id. Modifier l\'id de la macro cTable !' )</#if>
45 const rows = document.querySelectorAll('table#${id} tbody tr');
46 rows.forEach(function(row, index) {
47 const cells = row.querySelectorAll('td');
48 let accordionContent = '';
49
50 cells.forEach(function(cell, i) {
51 const headerText = document.querySelector('table#${id} thead th:nth-child(' + (i + 1) + ')').textContent;
52 const cellText = cell.textContent;
53 <#noparse>accordionContent += `<p>${headerText}</p><p class='mb-4'><strong>${cellText}</strong></p>`;</#noparse>
54 });
55
56 const accordionItem = `
57 <@cAccordion id='heading${id}` + index + `' title='` + cells[0].textContent + `' btnClass='btn-outline-action' state=false params="class='m-0'">
58 ` + accordionContent + `
59 </@cAccordion>`;
60
61 document.getElementById('accordion-table-${id}').insertAdjacentHTML('beforeend', accordionItem);
62 });
63 });
64 </script>
65 </#macro>