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