templates/areas/wysiwyg/view.html.twig line 1

Open in your IDE?
  1. {% set enable_accordion = pimcore_checkbox('enable_accordion').getValue() %}
  2. {% set accordion_title = pimcore_input('accordion_title').getData() %}
  3. {% set accordion_style = pimcore_select('accordion_style').getData() %}
  4. {% set title_font_size = pimcore_select('title_font_size').getData() %}
  5. {% set initially_expanded = pimcore_checkbox('initially_expanded').getValue() %}
  6. {% set single_expansion = pimcore_checkbox('single_expansion').getValue() %}
  7. {% if enable_accordion %}
  8.     <style>
  9.         /* Base Accordion Styles */
  10.         .wysiwyg-accordion {
  11.             --accordion-border-color: #e9ecef;
  12.             --accordion-text-color: #212529;
  13.             --accordion-active-color: var(--bs-primary, #0d6efd);
  14.             --accordion-bg: #fff;
  15.             --accordion-hover-bg: #f8f9fa;
  16.             --accordion-icon-size: 24px;
  17.             --accordion-icon-right-spacing: 8px; /* New spacing variable */
  18.         }
  19.         
  20.         .wysiwyg-accordion .accordion-button {
  21.             padding: 1rem 0;
  22.             background: none;
  23.             font-size: 1rem;
  24.             font-weight: 400;
  25.             color: var(--accordion-text-color);
  26.             border: none;
  27.             width: 100%;
  28.             text-align: left;
  29.             position: relative;
  30.             padding-right: calc(var(--accordion-icon-size) + var(--accordion-icon-right-spacing) * 2);
  31.         }
  32.         /* Font Size Variations */
  33.         .wysiwyg-accordion .accordion-button.font-small {
  34.             font-size: 14px;
  35.         }
  36.         .wysiwyg-accordion .accordion-button.font-default {
  37.             font-size: 16px;
  38.         }
  39.         .wysiwyg-accordion .accordion-button.font-medium {
  40.             font-size: 18px;
  41.         }
  42.         .wysiwyg-accordion .accordion-button.font-large {
  43.             font-size: 20px;
  44.         }
  45.         .wysiwyg-accordion .accordion-button.font-xlarge {
  46.             font-size: 24px;
  47.         }
  48.         /* Custom Plus/Minus Icon */
  49.         .wysiwyg-accordion .accordion-button::after {
  50.             display: none; /* Hide default bootstrap arrow */
  51.         }
  52.         .wysiwyg-accordion .accordion-button::before,
  53.         .wysiwyg-accordion .accordion-button::after {
  54.             content: '';
  55.             position: absolute;
  56.             right: var(--accordion-icon-right-spacing);
  57.             top: 50%;
  58.             background-color: currentColor;
  59.             transition: transform 0.2s ease, opacity 0.2s ease;
  60.         }
  61.         /* Horizontal line */
  62.         .wysiwyg-accordion .accordion-button::before {
  63.             width: 16px;
  64.             height: 2px;
  65.             margin-top: -1px;
  66.         }
  67.         /* Vertical line (plus) */
  68.         .wysiwyg-accordion .accordion-button::after {
  69.             width: 2px;
  70.             height: 16px;
  71.             margin-right: 7px;
  72.             margin-top: -8px;
  73.             display: block;
  74.         }
  75.         /* Animation for minus state */
  76.         .wysiwyg-accordion .accordion-button:not(.collapsed)::after {
  77.             transform: rotate(90deg);
  78.             opacity: 0;
  79.         }
  80.         .wysiwyg-accordion .accordion-body {
  81.             padding: 0.5rem 0 1.5rem;
  82.             font-size: 0.9rem;
  83.             line-height: 1.6;
  84.             color: var(--accordion-text-color);
  85.         }
  86.         /* Minimal Style - Like in the image */
  87.         .wysiwyg-accordion .accordion-item.minimal {
  88.             border-bottom: 1px solid var(--accordion-border-color);
  89.             background: transparent;
  90.             margin: 0;
  91.             padding: 0;
  92.         }
  93.         .wysiwyg-accordion .accordion-item.minimal .accordion-button {
  94.             transition: color 0.2s ease;
  95.         }
  96.         .wysiwyg-accordion .accordion-item.minimal .accordion-button:hover {
  97.             color: var(--accordion-active-color);
  98.         }
  99.         .wysiwyg-accordion .accordion-item.minimal .accordion-button:not(.collapsed) {
  100.             color: var(--accordion-active-color);
  101.         }
  102.         /* Modern Style */
  103.         .wysiwyg-accordion .accordion-item.modern {
  104.             border-bottom: 1px solid var(--accordion-border-color);
  105.             background: transparent;
  106.         }
  107.         .wysiwyg-accordion .accordion-item.modern .accordion-button {
  108.             padding: 1.25rem 0;
  109.         }
  110.         .wysiwyg-accordion .accordion-item.modern .accordion-button:not(.collapsed) {
  111.             color: var(--accordion-active-color);
  112.         }
  113.         .wysiwyg-accordion .accordion-item.modern .accordion-body {
  114.             padding: 0 0 1.25rem;
  115.         }
  116.         /* Card Style */
  117.         .wysiwyg-accordion .accordion-item.card {
  118.             border: 1px solid var(--accordion-border-color);
  119.             border-radius: 0.25rem;
  120.             margin-bottom: 0.5rem;
  121.         }
  122.         .wysiwyg-accordion .accordion-item.card .accordion-button {
  123.             padding: 1rem 1.25rem;
  124.             padding-right: calc(1.25rem + var(--accordion-icon-size));
  125.         }
  126.         .wysiwyg-accordion .accordion-item.card .accordion-button:not(.collapsed) {
  127.             background-color: var(--accordion-hover-bg);
  128.             color: var(--accordion-active-color);
  129.         }
  130.         .wysiwyg-accordion .accordion-item.card .accordion-body {
  131.             padding: 0 1.25rem 1rem;
  132.         }
  133.         /* Floating Style */
  134.         .wysiwyg-accordion .accordion-item.floating {
  135.             border: 1px solid var(--accordion-border-color);
  136.             border-radius: 0.25rem;
  137.             margin-bottom: 0.5rem;
  138.             transition: border-color 0.2s ease;
  139.         }
  140.         .wysiwyg-accordion .accordion-item.floating:hover {
  141.             border-color: var(--accordion-active-color);
  142.         }
  143.         .wysiwyg-accordion .accordion-item.floating .accordion-button {
  144.             padding: 1rem 1.25rem;
  145.             padding-right: calc(1.25rem + var(--accordion-icon-size));
  146.         }
  147.         .wysiwyg-accordion .accordion-item.floating .accordion-button:not(.collapsed) {
  148.             color: var(--accordion-active-color);
  149.         }
  150.         .wysiwyg-accordion .accordion-item.floating .accordion-body {
  151.             padding: 0 1.25rem 1rem;
  152.         }
  153.         /* Bordered Style */
  154.         .wysiwyg-accordion .accordion-item.bordered {
  155.             border-bottom: 2px solid var(--accordion-border-color);
  156.             margin: 0;
  157.             transition: border-color 0.2s ease;
  158.         }
  159.         .wysiwyg-accordion .accordion-item.bordered:hover {
  160.             border-color: var(--accordion-active-color);
  161.         }
  162.         .wysiwyg-accordion .accordion-item.bordered .accordion-button:not(.collapsed) {
  163.             color: var(--accordion-active-color);
  164.         }
  165.         /* Common Focus States */
  166.         .wysiwyg-accordion .accordion-button:focus {
  167.             box-shadow: none;
  168.             outline: none;
  169.         }
  170.         
  171.         /* Smooth Animation */
  172.         .wysiwyg-accordion .accordion-collapse {
  173.             transition: height 0.2s ease;
  174.         }
  175.         /* Dark Mode Support */
  176.         @media (prefers-color-scheme: dark) {
  177.             .wysiwyg-accordion {
  178.                 --accordion-border-color: rgba(255,255,255,0.1);
  179.                 --accordion-text-color: #fff;
  180.                 --accordion-bg: #1a1a1a;
  181.                 --accordion-hover-bg: #2a2a2a;
  182.             }
  183.         }
  184.     </style>
  185.     <div class="wysiwyg-accordion mb-4">
  186.         {% set accordion_id = 'accordion_' ~ (editmode ? 'preview' : random()) %}
  187.         {% set content_id = 'content_' ~ (editmode ? 'preview' : random()) %}
  188.         
  189.         <div class="accordion{% if single_expansion %} single-expansion{% endif %}" 
  190.              id="{{ accordion_id }}"
  191.              {% if single_expansion %}data-single-expansion="true"{% endif %}>
  192.             <div class="accordion-item {{ accordion_style }}">
  193.                 <h2 class="accordion-header m-0">
  194.                     <button class="accordion-button font-{{ title_font_size|default('default') }} {{ not initially_expanded ? 'collapsed' : '' }}" 
  195.                             type="button" 
  196.                             data-bs-toggle="collapse" 
  197.                             data-bs-target="#{{ content_id }}" 
  198.                             aria-expanded="{{ initially_expanded ? 'true' : 'false' }}"
  199.                             aria-controls="{{ content_id }}">
  200.                         {{ accordion_title }}
  201.                     </button>
  202.                 </h2>
  203.                 <div id="{{ content_id }}" 
  204.                      class="accordion-collapse collapse {{ initially_expanded ? 'show' : '' }}"
  205.                      {% if single_expansion %}
  206.                          data-bs-parent=".single-expansion"
  207.                      {% else %}
  208.                          data-bs-parent="#{{ accordion_id }}"
  209.                      {% endif %}>
  210.                     <div class="accordion-body">
  211.                         {{ pimcore_wysiwyg("wysiwyg-area") }}
  212.                     </div>
  213.                 </div>
  214.             </div>
  215.         </div>
  216.     </div>
  217.     {% if single_expansion %}
  218.         <script>
  219.             document.addEventListener('DOMContentLoaded', function() {
  220.                 // Wenn Single Expansion aktiv ist, schließe alle anderen Accordions beim Öffnen eines neuen
  221.                 const accordions = document.querySelectorAll('.single-expansion .accordion-collapse');
  222.                 accordions.forEach(collapse => {
  223.                     collapse.addEventListener('show.bs.collapse', function() {
  224.                         const otherAccordions = document.querySelectorAll('.single-expansion .accordion-collapse.show');
  225.                         otherAccordions.forEach(other => {
  226.                             if (other !== collapse) {
  227.                                 bootstrap.Collapse.getInstance(other).hide();
  228.                             }
  229.                         });
  230.                     });
  231.                 });
  232.             });
  233.         </script>
  234.     {% endif %}
  235. {% else %}
  236.     <div class="wysiwyg-area mb-4">
  237.         {{ pimcore_wysiwyg("wysiwyg-area") }}
  238.     </div>
  239. {% endif %}