templates/_snippets/accordion.html.twig line 1

Open in your IDE?
  1. {# ------------------------------------------------------------------------ #}
  2. {# ----------------------------- PARAMÉTRAGES ----------------------------- #}
  3. {# ------------------------------------------------------------------------ #}
  4. {% set content = accordion %}
  5. {% set accordionId = 'accordion-' ~ random() %}
  6. {% if accordion.isMenu|default(false) %}
  7. <div class="accordion-wrapper" id="{{ accordionId }}">
  8. <div class="accordion-menu">
  9. <ul>
  10. {% for group in accordion.groups %}
  11. <li><a href="#group-{{ loop.index }}">{{ group.titleGroup }}</a></li>
  12. {% endfor %}
  13. </ul>
  14. </div>
  15. <div class="accordion-content">
  16. {% for group in accordion.groups %}
  17. <{{ accordion.groupsTitleLevel|default('h2') }} class="group_title" id="group-{{ loop.index }}">{{ group.titleGroup }}</{{ accordion.groupsTitleLevel|default('h2') }}>
  18. <div class="accordion" id="accordion{{ loop.index }}">
  19. {% for element in group.elements %}
  20. <div class="accordion-item {{ accordion.borderElementsCheckbox is defined and accordion.borderElementsCheckbox is not same as(true) ? 'bordered' : '' }} {{ accordion.boxShadowElementsCheckbox is defined and accordion.boxShadowElementsCheckbox is same as(true) ? 'shadowed' : '' }}">
  21. <button class="accordion-button {% if element.active is not defined or not element.active %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ loop.parent.loop.index }}-{{ loop.index }}" aria-expanded="{{ element.active|default(false) ? 'true' : 'false' }}" aria-controls="collapse{{ loop.parent.loop.index }}-{{ loop.index }}">
  22. {{ element.title }}
  23. </button>
  24. <div id="collapse{{ loop.parent.loop.index }}-{{ loop.index }}" class="accordion-collapse collapse {% if element.active|default(false) %}show{% endif %}" aria-labelledby="heading{{ loop.parent.loop.index }}-{{ loop.index }}" data-bs-parent="#accordion{{ loop.parent.loop.index }}">
  25. <div class="accordion-body">
  26. {{ element.content|raw }}
  27. {% for subelement in element.subsection %}
  28. <div class="accordion-item">
  29. <button class="accordion-button collapsed" type="button"
  30. data-bs-toggle="collapse"
  31. data-bs-target="#collapse-sub{{ loop.parent.loop.parent.loop.index }}-{{ loop.parent.loop.index }}-{{ loop.index }}"
  32. aria-expanded="false"
  33. aria-controls="collapse-sub{{ loop.parent.loop.parent.loop.index }}-{{ loop.parent.loop.index }}-{{ loop.index }}">
  34. {{ subelement.subtitle }}
  35. </button>
  36. <div id="collapse-sub{{ loop.parent.loop.parent.loop.index }}-{{ loop.parent.loop.index }}-{{ loop.index }}"
  37. class="accordion-collapse collapse"
  38. data-bs-parent="#accordion-sub{{ loop.parent.loop.parent.loop.index }}-{{ loop.parent.loop.index }}">
  39. <div class="accordion-body">
  40. {{ subelement.subcontent|raw }}
  41. </div>
  42. </div>
  43. </div>
  44. {% endfor %}
  45. </div>
  46. </div>
  47. </div>
  48. {% endfor %}
  49. </div>
  50. {% endfor %}
  51. </div>
  52. </div>
  53. {% else %}
  54. <div id="{{ accordionId }}">
  55. {% for group in accordion.groups %}
  56. <h2 class="group_title" id="group-{{ loop.index }}">{{ group.titleGroup }}</h2>
  57. <div class="accordion-content">
  58. <div class="accordion" id="accordion{{ loop.index }}">
  59. {% for element in group.elements %}
  60. <div class="accordion-item {{ accordion.borderElementsCheckbox is defined and accordion.borderElementsCheckbox is not same as(true) ? 'bordered' : '' }} {{ accordion.boxShadowElementsCheckbox is defined and accordion.boxShadowElementsCheckbox is same as(true) ? 'shadowed' : '' }}">
  61. <button class="accordion-button {% if element.active is not defined or not element.active %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ loop.parent.loop.index }}-{{ loop.index }}" aria-expanded="{{ element.active|default(false) ? 'true' : 'false' }}" aria-controls="collapse{{ loop.parent.loop.index }}-{{ loop.index }}">
  62. {{ element.title }}
  63. </button>
  64. <div id="collapse{{ loop.parent.loop.index }}-{{ loop.index }}" class="accordion-collapse collapse {% if element.active|default(false) %}show{% endif %}" aria-labelledby="heading{{ loop.parent.loop.index }}-{{ loop.index }}" data-bs-parent="#accordion{{ loop.parent.loop.index }}">
  65. <div class="accordion-body">
  66. {{ element.content|raw }}
  67. {% for subelement in element.subsection %}
  68. <div class="accordion-item">
  69. <button class="accordion-button collapsed" type="button"
  70. data-bs-toggle="collapse"
  71. data-bs-target="#collapse-sub{{ loop.parent.loop.parent.loop.index }}-{{ loop.parent.loop.index }}-{{ loop.index }}"
  72. aria-expanded="false"
  73. aria-controls="collapse-sub{{ loop.parent.loop.parent.loop.index }}-{{ loop.parent.loop.index }}-{{ loop.index }}">
  74. {{ subelement.subtitle }}
  75. </button>
  76. <div id="collapse-sub{{ loop.parent.loop.parent.loop.index }}-{{ loop.parent.loop.index }}-{{ loop.index }}"
  77. class="accordion-collapse collapse"
  78. data-bs-parent="#accordion-sub{{ loop.parent.loop.parent.loop.index }}-{{ loop.parent.loop.index }}">
  79. <div class="accordion-body">
  80. {{ subelement.subcontent|raw }}
  81. </div>
  82. </div>
  83. </div>
  84. {% endfor %}
  85. </div>
  86. </div>
  87. </div>
  88. {% endfor %}
  89. </div>
  90. </div>
  91. {% endfor %}
  92. </div>
  93. {% endif %}
  94. <!-- Variables CSS dynamiques -->
  95. <style>
  96. #{{ accordionId }} {
  97. /* Paramétrage des couleurs */
  98. --active-tab-color: {{ accordion.tagActiveColor|default('#000') }};
  99. --active-tag-bg-color: {{ accordion.tagActiveBackgroundColor|default('#fff') }};
  100. --closed-tabs-color: {{ accordion.tagClosedColor|default('#000') }};
  101. --closed-tabs-bg-color: {{ accordion.tagClosedBackgroundColor|default('#fff') }}; */
  102. --chevrons-color: {{ accordion.chevronsColor|default('#000') }};
  103. --active-chevrons-color: {{ accordion.chevronsActiveColor|default('#000') }};
  104. --borders-color: {{ accordion.borderColorElements|default('#000') }};
  105. /* Paramétrage des titres */
  106. --groups-title-size: {{ accordion.groupsTitleSize|default('1.25') ~ accordion.groupsTitleSizeUnit|default('rem') }};
  107. --groups-title-margin-bottom: {{ accordion.marginBottomGroupsTitle|default('1') ~ accordion.marginBottomGroupsTitleUnit|default('rem') }};
  108. --elements-title-size: {{ accordion.elementsTitleSize|default('1') ~ accordion.elementsTitleSizeUnit|default('rem') }};
  109. --elements-title-weight: {{ accordion.elementsTitleWeight|default('700') }};
  110. /* Autres Paramètres */
  111. --borders-radius: {{ accordion.bordersRadius|default('0') ~ accordion.bordersRadiusUnit|default('px') }};
  112. --elements-margin-bottom: {{ accordion.marginBottomElements|default('1') ~ accordion.marginBottomElementsUnit|default('rem') }};
  113. /* Paramètres du menu */
  114. --elements-menu-color: {{ accordion.menuElementsColor|default('#000') }};
  115. --elements-menu-color-hovered: {{ accordion.menuElementsHoveredColor|default('#000') }};
  116. --elements-menu-size: {{ accordion.menuElementsSize|default('1') ~ accordion.menuElementsSizeUnit|default('rem') }};
  117. --menu-bg: {{ accordion.menuBackgroundColor|default('#fff') }};
  118. --groups-margin-bottom: {{ accordion.marginBottomGroups|default('1') ~ accordion.marginBottomGroupsUnit|default('rem') }};
  119. /* Paramètres de la bordure */
  120. --elements-border-size: {{ accordion.borderSizeElements|default('1') ~ accordion.borderSizeElementsUnit|default('rem') }};
  121. /* Paramètres de l'ombre portée */
  122. --elements-bs: {{ accordion.boxShadowPosXElements|default('0') ~ accordion.boxShadowUnitElements|default('px') ~ ' ' ~ accordion.boxShadowPosYElements|default('0') ~ accordion.boxShadowUnitElements|default('px') ~ ' ' ~ accordion.boxShadowSpreadElements|default('0') ~ accordion.boxShadowUnitElements|default('px') ~ ' ' ~ accordion.borderColorElements|default('#000') }};
  123. }
  124. </style>