paragraphs_bundles-1.0.x-dev/modules/paragraph_bundle_accordion/templates/paragraph--accordion-bundle.html.twig
modules/paragraph_bundle_accordion/templates/paragraph--accordion-bundle.html.twig
{#
/**
* @file
* Default theme implementation to display a 'accordion' paragraph.
*
* Available variables:
* - paragraph: Full paragraph entity.
* Only method names starting with "get", "has", or "is" and a few common
* methods such as "id", "label", and "bundle" are available. For example:
* - paragraph.getCreatedTime() will return the paragraph creation timestamp.
* - paragraph.id(): The paragraph ID.
* - paragraph.bundle(): The type of the paragraph, for example, "image" or "text".
* - paragraph.getOwnerId(): The user ID of the paragraph author.
* See Drupal\paragraphs\Entity\Paragraph for a full list of public properties
* and methods for the paragraph object.
* - content: All paragraph items. Use {{ content }} to print them all,
* or print a subset such as {{ content.field_example }}. Use
* {{ content|without('field_example') }} to temporarily suppress the printing
* of a given child element.
* - attributes: HTML attributes for the containing element.
* The attributes.class element may contain one or more of the following
* classes:
* - paragraphs: The current template type (also known as a "theming hook").
* - paragraphs--type-[type]: The current paragraphs type. For example, if the paragraph is an
* "Image" it would result in "paragraphs--type--image". Note that the machine
* name will often be in a short form of the human readable label.
* - paragraphs--view-mode--[view_mode]: The View Mode of the paragraph; for example, a
* preview would result in: "paragraphs--view-mode--preview", and
* default: "paragraphs--view-mode--default".
* - view_mode: View mode; for example, "preview" or "full".
* - logged_in: Flag for authenticated user status. Will be true when the
* current user is a logged-in member.
* - is_admin: Flag for admin user status. Will be true when the current user
* is an administrator.
*
* @see template_preprocess_paragraph()
*
* @ingroup themeable
#}
{# Attach the necessary library. #}
{{ attach_library('paragraphs_bundles/paragraphs-bundles') }}
{{ attach_library('paragraph_bundle_accordion/paragraph-bundle-accordion') }}
{# Set the paragraph id. #}
{% set paragraph_id = 'pb__accor-wrap-' ~ paragraph.id.value %}
{# Set the inner classes for the paragraph. #}
{% set classes_inner = 'paragraph__inner pb__accor-wrap__inner' %}
{# Set the classes for the paragraph. #}
{% set classes = [
'paragraph',
'paragraph--type--' ~ paragraph.bundle|clean_class,
view_mode ? 'paragraph--view-mode--' ~ view_mode|clean_class,
not paragraph.isPublished() ? 'paragraph--unpublished',
'paragraph--id--' ~ paragraph.id.value,
paragraph_id,
] %}
{# Set the color styles for the paragraph. #}
{% set pb_styles = {
'pb-bg': 'pb_display_bg',
'pb-bg-h': 'pb_display_bg_hover',
'pb-br': 'pb_display_border_color',
'pb-br-h': 'pb_display_border_hover',
'pb-tx': 'pb_display_text',
'pb-tx-h': 'pb_display_text_hover',
'pb-bt-a': 'pb_display_accor_active_item'
} %}
{# Set the display properties for the paragraph. #}
{% set pb_displays = [
'pb_display_width',
'pb_display_border',
'pb_display_border_radius',
'pb_display_margin',
'pb_display_padding',
'pb_display_shadow',
] %}
{# Add display properties to the inner classes if they exist. #}
{% for pb_display in pb_displays %}
{% set display_value = content[pb_display]|render|striptags|trim %}
{% set classes_inner = display_value ? classes_inner ~ ' ' ~ display_value : classes_inner %}
{% endfor %}
{# Set the background opacity for the paragraph. #}
{% set pb_bg_opacity = content.pb_display_bg_opacity|render|striptags|trim %}
{% if pb_bg_opacity != 100 %}
{% set pb_bg_opacity = '0.' ~ "%02d"|format(pb_bg_opacity) %}
{% endif %}
{# Set the style attributes for the paragraph. #}
{% set pb_style_attributes = [] %}
{% for key, value in pb_styles %}
{% set style = content[value]|render|striptags|trim %}
{% if style %}
{% if value == 'pb_display_bg' %}
{% set pb_style_attributes = pb_style_attributes|merge(['--' ~ key ~ ':rgba(' ~ style ~ ', ' ~ pb_bg_opacity ~ ');']) %}
{% elseif style starts with '#' %}
{% set pb_style_attributes = pb_style_attributes|merge(['--' ~ key ~ ':' ~ style ~ ';']) %}
{% else %}
{# In case widget was changed. #}
{% set pb_style_attributes = pb_style_attributes|merge(['--' ~ key ~ ':rgb(' ~ style ~ ');']) %}
{% endif %}
{% endif %}
{% endfor %}
{# End of margin and height #}
{# Display or hide expand all #}
{% set pb_expand_all = content.pb_display_accor_show_expand|render|striptags|trim %}
{% set pb_show_indicator = content.pb_display_accor_indicator|render|striptags|trim %}
{% set pb_open_first = content.pb_display_accor_open_first|render|striptags|trim %}
{% set pb_animated_tab = content.pb_display_accor_animated|render|striptags|trim %}
{% set pb_title = content.pb_content_title|render|striptags|trim %}
{# Render the paragraph. #}
<div {{ attributes.addClass(classes).setAttribute('id', paragraph_id) }}>
<div class="{{ classes_inner }}" {% if pb_style_attributes|length > 0 %}style="{{ pb_style_attributes|join(' ') }}"{% endif %}>
<div class="pb__content-full">
{% set acc_id = 'pb__accor-' ~ paragraph.id.value %}
<div id="{{ acc_id }}" class="pb__accor pb__row">
{% if pb_title %}
<h3 class="pb__content-title">{{ content.pb_content_title }}</h3>
{% endif %}
{% if pb_expand_all == "On" %}
<div class="pb__row pb__ex-button">
<button class="pb__button pb__plus" aria-expanded="false" aria-controls="{{ acc_id }}" aria-label="{{ 'Expand all sections'|t }}" tabindex="0">
<span class="visually-hidden">{{ 'Expand all sections'|t }}</span>
<span>⊞</span>
</button>
<button class="pb__button pb__minus" aria-expanded="true" aria-controls="{{ acc_id }}" aria-label="{{ 'Collapse all sections'|t }}" tabindex="-1">
<span class="visually-hidden">{{ 'Collapse all sections'|t }}</span>
<span>⊟</span>
</button>
</div>
{% endif %}
{% for key, item in content.pb_content_accordion_section %}
{% if key|first != '#' %}
{% set total_panels = total_panels + 1 %}
<div id="pb__accor-wrap-btn-item-{{ paragraph.id.value }}-{{ key + 1 }}" class="pb__row pb__accor-wrap-btn-item {% if key == 0 %} {{ pb_open_first == 'On' ? 'pb__active' : 'pb__active-no' }} {% else %} pb__active-no{% endif %}">
{# Loops through the accordion sections to print the tab section titles. #}
<button
id="{{ acc_id }}-{{ key + 1 }}"
class="pb__button pb__bar pb__accor-button"
aria-label="{{ item['#paragraph'].pb_content_accordion_title.value|decode_entities }}"
aria-expanded="{% if key == 0 and pb_open_first %}true{% else %}false{% endif %}"
aria-controls="{{ acc_id }}-{{ key + 1 }}-pane"
type="button">
<!-- Button Title -->
<span class="pb__button-title">
{{ item['#paragraph'].pb_content_accordion_title.value|decode_entities }}
</span>
<!-- Plus-Minus Indicator -->
{% if pb_show_indicator == "On" %}
<div class="pb__plus-minus" aria-hidden="true">
<!-- Minus Symbol -->
<span
class="pb__minus"
{% if key != 0 or not pb_open_first %}style="display:none;"{% endif %}
aria-hidden="{{ key == 0 and pb_open_first ? 'false' : 'true' }}">
−
</span>
<!-- Plus Symbol -->
<span
class="pb__plus"
{% if key == 0 and pb_open_first %}style="display:none;"{% endif %}
aria-hidden="{{ key == 0 and pb_open_first ? 'true' : 'false' }}">
+
</span>
<!-- Hidden Accessible Text -->
<span class="visually-hidden">Close or Open tab</span>
</div>
{% endif %}
</button>
{# Loop through all of the accordion section bodies. #}
<div id="{{ acc_id }}-{{ key + 1 }}-pane" class="pb__row pb__accor-pane {{ pb_animated_tab == '' ? '' : ' ' ~ pb_animated_tab }}" role="region" aria-labelledby="{{ acc_id }}-{{ key + 1 }}" aria-hidden="{% if key == 0 and pb_open_first %}false{% else %}true{% endif %}" data-index="{{ key }}">
{% for body_key, body_item in item['#paragraph'].pb_content_accordion_body %}
{# Use the same render array as item and set the '#paragraph'. #}
{% set section_body = item %}
{% set lang = section_body['#paragraph'].langcode[0].value %}
{# Check if a translation exists #}
{% if section_body['#paragraph'].pb_content_accordion_body[body_key].entity.hasTranslation(lang) %}
{# Load the entity for the current translation #}
{% set section_translation = section_body['#paragraph'].pb_content_accordion_body[body_key].entity.getTranslation(lang) %}
{% else %}
{# Load the source entity #}
{% set section_translation = section_body['#paragraph'].pb_content_accordion_body[body_key].entity %}
{% endif %}
{% set section_body = section_body|merge({'#paragraph': section_translation}) %}
{# Remove the cache keys so it doesn't repeat the first value. #}
{% set section_body = section_body|merge({'#cache': {}}) %}
{# Print the compiled section body. #}
{{ section_body }}
{% endfor %}
</div>
</div>{# End of pb__accor-wrap-btn-item #}
{% endif %}
{% endfor %}
</div> {# End of paragraph ID #}
</div>
</div>
</div> {# End of main wrapper #}
