first commit

This commit is contained in:
2024-07-15 12:33:27 +02:00
commit ce50ae282b
22084 changed files with 2623791 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
{#
/**
* @file
* Theme override for the content of an administrative block.
*
* Available variables:
* - content: List of administrative menu items. Each menu item contains:
* - link: Link to the admin section.
* - title: Short name of the section.
* - description: Description of the administrative menu item.
* - url: URI to the admin section.
* - options: URL options. See \Drupal\Core\Url::fromUri() for details.
* - attributes: HTML attributes to be added to the element.
* - compact: Boolean indicating whether compact mode is turned on or not.
*
* @see template_preprocess_admin_block_content()
*/
#}
{%
set classes = [
'list-group',
compact ? 'compact',
]
%}
{% if content %}
<dl{{ attributes.addClass(classes) }}>
{% for item in content %}
<dt class="list-group__link">{{ item.link }}</dt>
{% if item.description %}
<dd class="list-group__description">{{ item.description }}</dd>
{% endif %}
{% endfor %}
</dl>
{% endif %}

View File

@@ -0,0 +1,30 @@
{#
/**
* @file
* Theme override for an administrative block.
*
* Available variables:
* - block: An array of information about the block, including:
* - show: A flag indicating if the block should be displayed.
* - title: The block title.
* - content: (optional) The content of the block.
* - description: (optional) A description of the block.
* (Description should only be output if content is not available).
* - attributes: HTML attributes for the containing div element.
*/
#}
{%
set classes = [
'panel',
]
%}
<div{{ attributes.addClass(classes) }}>
{% if block.title %}
<h3 class="panel__title">{{ block.title }}</h3>
{% endif %}
{% if block.content %}
<div class="panel__content">{{ block.content }}</div>
{% elseif block.description %}
<div class="panel__description">{{ block.description }}</div>
{% endif %}
</div>

View File

@@ -0,0 +1,25 @@
{#
/**
* @file
* Theme override for an administrative page.
*
* Available variables:
* - system_compact_link: Themed link to toggle compact view.
* - containers: An list of administrative blocks keyed by position: left or
* right. Contains:
* - blocks: A list of blocks within a container.
*
* @see template_preprocess_admin_page()
*/
#}
<div class="clearfix">
{{ system_compact_link }}
{% for container in containers %}
<div class="layout-column layout-column--half">
{% for block in container.blocks %}
{{ block }}
{% endfor %}
</div>
{% endfor %}
</div>

View File

@@ -0,0 +1,21 @@
{#
/**
* @file
* Theme override for authorize.php operation report templates.
*
* This report displays the results of an operation run via authorize.php.
*
* Available variables:
* - messages: A list of result messages.
* - attributes: HTML attributes for the element.
*
* @see template_preprocess_authorize_report()
*/
#}
{% if messages %}
<div{{ attributes.addClass('authorize-results') }}>
{% for message_group in messages %}
{{ message_group }}
{% endfor %}
</div>
{% endif %}

View File

@@ -0,0 +1,22 @@
{#
/**
* @file
* Theme override to present a list of content block types.
*
* Available variables:
* - types: A collection of all the available content block types.
* Each block type contains the following:
* - link: A link to add a block of this type.
* - description: A description of this content block type.
*
* @see template_preprocess_block_content_add_list()
*/
#}
{% apply spaceless %}
<dl>
{% for type in types %}
<dt>{{ type.link }}</dt>
<dd>{{ type.description }}</dd>
{% endfor %}
</dl>
{% endapply %}

View File

@@ -0,0 +1,21 @@
{#
/**
* @file
* Theme override for a form element in config_translation.
*
* Available variables:
* - element: Array that represents the element shown in the form.
* - source: The source of the translation.
* - translation: The translation for the target language.
*
* @see template_preprocess()
*/
#}
<div class="translation-set clearfix">
<div class="layout-column layout-column--half translation-set__source">
{{ element.source }}
</div>
<div class="layout-column layout-column--half translation-set__translated">
{{ element.translation }}
</div>
</div>

View File

@@ -0,0 +1,45 @@
{#
/**
* @file
* Theme override to display a Field UI table.
*
* Available variables:
* - attributes: HTML attributes to apply to the <table> tag.
* - caption: A localized string for the <caption> tag.
* - colgroups: Column groups. Each group contains the following properties:
* - attributes: HTML attributes to apply to the <col> tag.
* Note: Drupal currently supports only one table header row, see
* https://www.drupal.org/node/893530 and
* http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109.
* - header: Table header cells. Each cell contains the following properties:
* - tag: The HTML tag name to use; either 'th' or 'td'.
* - attributes: HTML attributes to apply to the tag.
* - content: A localized string for the title of the column.
* - field: Field name (required for column sorting).
* - sort: Default sort order for this column ("asc" or "desc").
* - sticky: A flag indicating whether to use a "sticky" table header.
* - rows: Table rows. Each row contains the following properties:
* - attributes: HTML attributes to apply to the <tr> tag.
* - data: Table cells.
* - no_striping: A flag indicating that the row should receive no
* 'even / odd' styling. Defaults to FALSE.
* - cells: Table cells of the row. Each cell contains the following keys:
* - tag: The HTML tag name to use; either 'th' or 'td'.
* - attributes: Any HTML attributes, such as "colspan", to apply to the
* table cell.
* - content: The string to display in the table cell.
* - active_table_sort: A boolean indicating whether the cell is the active
table sort.
* - footer: Table footer rows, in the same format as the rows variable.
* - empty: The message to display in an extra row if table does not have
* any rows.
* - no_striping: A boolean indicating that the row should receive no striping.
* - header_columns: The number of columns in the header.
*
* @see template_preprocess_field_ui_table()
*/
#}
{# Add Ajax wrapper. #}
<div id="field-display-overview-wrapper">
{% include 'table.html.twig' %}
</div>

View File

@@ -0,0 +1,46 @@
{#
/**
* @file
* Theme override for a storage type option form element.
*
* Available variables:
* - attributes: HTML attributes for the containing element.
* - errors: (optional) Any errors for this form element, may not be set.
* - label: A rendered label element.
* - description: (optional) A list of description properties containing:
* - content: A description of the form element, may not be set.
* - attributes: (optional) A list of HTML attributes to apply to the
* description content wrapper. Will only be set when description is set.
* - variant: specifies option type. Typically 'field-option' or 'field-suboption'.
*
* @see template_preprocess_form_element()
*
* @ingroup themeable
*/
#}
{%
set classes = [
errors ? 'form-item--error',
variant ? variant ~ '__item'
]
%}
<div{{ attributes.addClass(classes) }}>
{% if variant == 'field-option' %}
{{ label }}
<div{{ description.attributes }}>
{{ description.content }}
</div>
{% endif %}
{{ children }}
{% if variant == 'field-suboption' %}
{{ label }}
<div{{ description.attributes.addClass(description_classes) }}>
{{ description.content }}
</div>
{% endif %}
{% if errors %}
<div class="form-item--error-message">
{{ errors }}
</div>
{% endif %}
</div>

View File

@@ -0,0 +1,23 @@
{#
/**
* @file
* Theme override for a section of the help page.
*
* Available variables:
* - title: The section title.
* - description: The description text for the section.
* - links: Links to display in the section.
* - empty: Text to display if there are no links.
*/
#}
<h2>{{ title }}</h2>
<p>{{ description }}</p>
{% if links %}
<ul>
{% for link in links %}
<li>{{ link }}</li>
{% endfor %}
</ul>
{% else %}
<p>{{ empty }}</p>
{% endif %}

View File

@@ -0,0 +1,14 @@
{#
/**
* @file
* Theme override for a help topic.
*
* Available variables:
* - body: The body of the topic.
* - related: List of related topic links.
*/
#}
<article>
{{ body }}
{{ related }}
</article>

View File

@@ -0,0 +1,12 @@
{#
/**
* @file
* Theme override for a 3x3 grid of checkboxes for image anchors.
*
* Available variables:
* - table: HTML for the table of image anchors.
*
* @see template_preprocess_image_anchor()
*/
#}
{{ table }}

View File

@@ -0,0 +1,30 @@
{#
/**
* @file
* Theme override for a summary of an image crop effect.
*
* Available variables:
* - data: The current configuration for this resize effect, including:
* - width: The width of the resized image.
* - height: The height of the resized image.
* - anchor: The part of the image that will be retained after cropping.
* - anchor_label: The translated label of the crop anchor.
* - effect: The effect information, including:
* - id: The effect identifier.
* - label: The effect name.
* - description: The effect description.
*/
#}
{% if data.width and data.height -%}
{{ data.width }}×{{ data.height }}
{%- else -%}
{% if data.width %}
{% trans %}
width {{ data.width }}
{% endtrans %}
{% elseif data.height %}
{% trans %}
height {{ data.height }}
{% endtrans %}
{% endif %}
{%- endif %}

View File

@@ -0,0 +1,28 @@
{#
/**
* @file
* Theme override for a summary of an image resize effect.
*
* Available variables:
* - data: The current configuration for this resize effect, including:
* - width: The width of the resized image.
* - height: The height of the resized image.
* - effect: The effect information, including:
* - id: The effect identifier.
* - label: The effect name.
* - description: The effect description.
*/
#}
{% if data.width and data.height -%}
{{ data.width }}×{{ data.height }}
{%- else -%}
{% if data.width %}
{% trans %}
width {{ data.width }}
{% endtrans %}
{% elseif data.height %}
{% trans %}
height {{ data.height }}
{% endtrans %}
{% endif %}
{%- endif %}

View File

@@ -0,0 +1,26 @@
{#
/**
* @file
* Theme override for a summary of an image rotate effect.
*
* Available variables:
* - data: The current configuration for this resize effect, including:
* - degrees: Degrees to rotate the image, positive values will rotate the
* image clockwise, negative values counter-clockwise.
* - bgcolor: The hex background color of the new areas created as consequence
* of rotation.
* - random: If the rotation angle is randomized.
* - effect: The effect information, including:
* - id: The effect identifier.
* - label: The effect name.
* - description: The effect description.
*/
#}
{% if data.random %}
{% set degrees = data.degrees|abs %}
{% trans %}
random between -{{ degrees }}° and {{ degrees }}°
{% endtrans %}
{% else %}
{{ data.degrees }}°
{% endif %}

View File

@@ -0,0 +1,30 @@
{#
/**
* @file
* Theme override for a summary of an image scale and crop effect.
*
* Available variables:
* - data: The current configuration for this resize effect, including:
* - width: The width of the resized image.
* - height: The height of the resized image.
* - anchor: The part of the image that will be retained after cropping.
* - anchor_label: The translated label of the crop anchor.
* - effect: The effect information, including:
* - id: The effect identifier.
* - label: The effect name.
* - description: The effect description.
*/
#}
{% if data.width and data.height -%}
{{ data.width }}×{{ data.height }}
{%- else -%}
{% if data.width %}
{% trans %}
width {{ data.width }}
{% endtrans %}
{% elseif data.height %}
{% trans %}
height {{ data.height }}
{% endtrans %}
{% endif %}
{%- endif %}

View File

@@ -0,0 +1,35 @@
{#
/**
* @file
* Theme override for a summary of an image scale effect.
*
* Available variables:
* - data: The current configuration for this resize effect, including:
* - width: The width of the resized image.
* - height: The height of the resized image.
* - upscale: If images larger than their original size can scale.
* - effect: The effect information, including:
* - id: The effect identifier.
* - label: The effect name.
* - description: The effect description.
*/
#}
{% if data.width and data.height -%}
{{ data.width }}×{{ data.height }}
{%- else -%}
{% if data.width %}
{% trans %}
width {{ data.width }}
{% endtrans %}
{% elseif data.height %}
{% trans %}
height {{ data.height }}
{% endtrans %}
{% endif %}
{%- endif %}
{% if data.upscale %}
{% trans %}
(upscaling allowed)
{% endtrans %}
{% endif %}

View File

@@ -0,0 +1,55 @@
{#
/**
* @file
* Theme override to display a preview of an image style.
*
* Available variables:
* - style_id: The ID of the image style.
* - style_name: The name of the image style.
* - cache_bypass: A timestamp token used to avoid browser caching of images.
* - original: An associative array containing:
* - url: The URL of the original image.
* - width: The width in pixels of the original image.
* - height: The height in pixels of the original image.
* - rendered: The render array for the original image.
* - derivative: An associative array containing:
* - url: The URL of the derivative image.
* - width: The width in pixels of the derivative image.
* - height: The height in pixels of the derivative image.
* - rendered: The rendered derivative image.
* - preview: An associative array containing:
* - original: An associative array containing:
* - width: The width in pixels of the original image in the preview.
* - height: The height in pixels of the original image in the preview.
* - derivative: An associative array containing:
* - width: The width in pixels of the derivative image in the preview.
* - height: The height in pixels of the derivative image in the preview.
*
* @see template_preprocess_image_style_preview()
*/
#}
<div class="image-style-preview preview clearfix">
{# Preview of the original image. #}
<div class="preview-image-wrapper">
{{ 'original'|t }} (<a href="{{ original.url }}">{{ 'view actual size'|t }}</a>)
<div class="preview-image original-image" style="width: {{ preview.original.width }}px; height: {{ preview.original.height }}px;">
<a href="{{ original.url }}">
{{ original.rendered }}
</a>
<div class="height" style="height: {{ preview.original.height }}px"><span>{{ original.height }}px</span></div>
<div class="width" style="width: {{ preview.original.width }}px"><span>{{ original.width }}px</span></div>
</div>
</div>
{# Derivative of the image style. #}
<div class="preview-image-wrapper">
{{ style_name }} (<a href="{{ derivative.url }}?{{ cache_bypass }}">{{ 'view actual size'|t }}</a>)
<div class="preview-image modified-image" style="width: {{ preview.derivative.width }}px; height: {{ preview.derivative.height }}px;">
<a href="{{ derivative.url }}?{{ cache_bypass }}">
{{ derivative.rendered }}
</a>
<div class="height" style="height: {{ preview.derivative.height }}px"><span>{{ derivative.height }}px</span></div>
<div class="width" style="width: {{ preview.derivative.width }}px"><span>{{ derivative.width }}px</span></div>
</div>
</div>
</div>

View File

@@ -0,0 +1,12 @@
{#
/**
* @file
* Theme override for a set of indentation divs.
*
* These <div> tags are used for drag and drop tables.
*
* Available variables:
* - size: Optional. The number of indentations to create.
*/
#}
{% if size > 0 %}{% for i in 1..size %}<div class="js-indentation indentation">&nbsp;</div>{% endfor %}{% endif %}

View File

@@ -0,0 +1,14 @@
{#
/**
* @file
* Theme override to display a language content settings table.
*
* Available variables:
* - title: The title of the table.
* - build: Table of content language settings.
*
* @see template_preprocess_language_content_settings_table()
*/
#}
<h4>{{ title }}</h4>
{{ build }}

View File

@@ -0,0 +1,39 @@
{#
/**
* @file
* Theme override for a language negotiation configuration form.
*
* Available variables:
* - language_types: A list of language negotiation types. Each language type
* contains the following:
* - type: The machine name for the negotiation type.
* - title: The language negotiation type name.
* - description: A description for how the language negotiation type
* operates.
* - configurable: A radio element to toggle the table.
* - table: A draggable table for the language detection methods of this type.
* - children: Remaining form items for the group.
* - attributes: A list of HTML attributes for the wrapper element.
* - children: Remaining form items for all groups.
*
* @see template_preprocess_language_negotiation_configure_form()
*/
#}
{% for language_type in language_types %}
{%
set language_classes = [
'js-form-item',
'form-item',
'table-language-group',
'table-' ~ language_type.type ~ '-wrapper',
]
%}
<div{{ language_type.attributes.addClass(language_classes) }}>
<h2>{{ language_type.title }}</h2>
<div class="description">{{ language_type.description }}</div>
{{ language_type.configurable }}
{{ language_type.table }}
{{ language_type.children }}
</div>
{% endfor %}
{{ children }}

View File

@@ -0,0 +1,23 @@
{#
/**
* @file
* Theme override for the last time we checked for update data.
*
* Available variables:
* - last_checked: Whether or not locale updates have been checked before.
* - time: The formatted time ago when the site last checked for available
* updates.
* - link: A link to manually check available updates.
*
* @see template_preprocess_locale_translation_last_check()
*/
#}
<div class="locale checked">
<p>
{% if last_checked %}
{% trans %} Last checked: {{ time }} ago {% endtrans %}
{% else %}
{{ 'Last checked: never'|t }}
{% endif %}
<span class="check-manually">({{ link }})</span></p>
</div>

View File

@@ -0,0 +1,57 @@
{#
/**
* @file
* Theme override for displaying translation status information.
*
* Displays translation status information per language.
*
* Available variables:
* - modules: A list of modules names that have available translation updates.
* - updates: A list of available translation updates.
* - not_found: A list of modules missing translation updates.
*
* @see template_preprocess_locale_translation_update_info()
*/
#}
<div class="locale-translation-update__wrapper" tabindex="0" role="button">
<span class="locale-translation-update__prefix visually-hidden">Show description</span>
{% if modules %}
{% set module_list = modules|safe_join(', ') %}
<span class="locale-translation-update__message">{% trans %}Updates for: {{ module_list }}{% endtrans %}</span>
{% elseif not_found %}
<span class="locale-translation-update__message">
{%- trans -%}
Missing translations for one project
{%- plural not_found|length -%}
Missing translations for @count projects
{%- endtrans -%}
</span>
{% endif %}
{% if updates or not_found %}
<div class="locale-translation-update__details">
{% if updates %}
<ul>
{% for update in updates %}
<li>{{ update.name }} ({{ update.timestamp|format_date('html_date') }})</li>
{% endfor %}
</ul>
{% endif %}
{% if not_found %}
{#
Prefix the missing updates list if there is an available updates lists
before it.
#}
{% if updates %}
{{ 'Missing translations for:'|t }}
{% endif %}
{% if not_found %}
<ul>
{% for update in not_found %}
<li>{{ update.name }} ({{ update.version|default('no version'|t) }}). {{ update.info }}</li>
{% endfor %}
</ul>
{% endif %}
{% endif %}
</div>
{% endif %}
</div>

View File

@@ -0,0 +1,23 @@
{#
/**
* @file
* Theme override for a list of maintenance tasks to perform.
*
* Available variables:
* - tasks: A list of maintenance tasks to perform. Each item in the list has
* the following variables:
* - item: The maintenance task.
* - attributes: HTML attributes for the maintenance task.
* - status: (optional) Text describing the status of the maintenance task,
* 'active' or 'done'.
*/
#}
<h2 class="visually-hidden">{{ 'Installation tasks'|t }}</h2>
<ol class="task-list">
{% for task in tasks %}
<li{{ task.attributes }}>
{{ task.item }}
{% if task.status %}<span class="visually-hidden"> ({{ task.status }})</span>{% endif %}
</li>
{% endfor %}
</ol>

View File

@@ -0,0 +1,16 @@
{#
/**
* @file
* Theme override for menu_link_form.
*
* Two-column template for the menu link add/edit form.
*
* This template will be used when a menu link form specifies
* 'menu_link_form' as its #theme callback. Otherwise, by default,
* menu_link add/edit forms will be themed by form.html.twig.
*
* Available variables:
* - form: The menu link add/edit form.
*/
#}
{{ form }}

View File

@@ -0,0 +1,14 @@
{#
/**
* @file
* Theme override for the status report counter.
*
* Available variables:
* - amount: The number shown on counter.
* - text: The text shown on counter.
* - severity: The severity of the counter.
*/
#}
<span class="system-status-counter__status-icon system-status-counter__status-icon--{{ severity }}"></span>
<span>{{ amount }} {{ text }}</span>
<a href="#{{ severity }}"><span class="visually-hidden">{{ text }} </span>{{ 'Details'|t }}</a>

View File

@@ -0,0 +1,81 @@
{#
/**
* @file
* Theme override for the status report general info.
*
* Available variables:
* - drupal: The status of Drupal installation:
* - value: The current status of Drupal installation.
* - description: The description for current status of Drupal installation.
* - cron: The status of cron:
* - value: The current status of cron.
* - description: The description for current status of cron.
* - cron.run_cron: An array to render a button for running cron.
* - database_system: The status of database system:
* - value: The current status of database system.
* - description: The description for current status of cron.
* - database_system_version: The info about current database version:
* - value: The current version of database.
* - description: The description for current version of database.
* - php: The current version of PHP:
* - value: The status of currently installed PHP version.
* - description: The description for current installed PHP version.
* - php_memory_limit: The info about current PHP memory limit:
* - value: The status of currently set PHP memory limit.
* - description: The description for currently set PHP memory limit.
* - webserver: The info about currently installed web server:
* - value: The status of currently installed web server.
* - description: The description for the status of currently installed web
* server.
*/
#}
<h2>{{ 'General System Information'|t }}</h2>
<div class="system-status-general-info__item">
<h3 class="system-status-general-info__item-title">{{ 'Drupal Version'|t }}</h3>
{{ drupal.value }}
{% if drupal.description %}
{{ drupal.description }}
{% endif %}
</div>
<div class="system-status-general-info__item">
<h3 class="system-status-general-info__item-title">{{ 'Last Cron Run'|t }}</h3>
{{ cron.value }}
{% if cron.run_cron %}
{{ cron.run_cron }}
{% endif %}
{% if cron.description %}
{{ cron.description }}
{% endif %}
</div>
<div class="system-status-general-info__item">
<h3 class="system-status-general-info__item-title">{{ 'Web Server'|t }}</h3>
{{ webserver.value }}
{% if webserver.description %}
{{ webserver.description }}
{% endif %}
</div>
<div class="system-status-general-info__item">
<h3 class="system-status-general-info__item-title">{{ 'PHP'|t }}</h3>
<h4>{{ 'Version'|t }}</h4> {{ php.value }}
{% if php.description %}
{{ php.description }}
{% endif %}
<h4>{{ 'Memory limit'|t }}</h4>{{ php_memory_limit.value }}
{% if php_memory_limit.description %}
{{ php_memory_limit.description }}
{% endif %}
</div>
<div class="system-status-general-info__item">
<h3 class="system-status-general-info__item-title">{{ 'Database'|t }}</h3>
<h4>{{ 'Version'|t }}</h4>{{ database_system_version.value }}
{% if database_system_version.description %}
{{ database_system_version.description }}
{% endif %}
<h4>{{ 'System'|t }}</h4>{{ database_system.value }}
{% if database_system.description %}
{{ database_system.description }}
{% endif %}
</div>

View File

@@ -0,0 +1,49 @@
{#
/**
* @file
* Theme override of grouped status report requirements.
*
* - grouped_requirements: Contains grouped requirements.
* Each group contains:
* - title: The title of the group.
* - type: The severity of the group.
* - items: The requirement instances.
* Each requirement item contains:
* - title: The title of the requirement.
* - value: (optional) The requirement's status.
* - description: (optional) The requirement's description.
* - severity_title: The title of the severity.
* - severity_status: Indicates the severity status.
*/
#}
{{ attach_library('core/drupal.collapse') }}
<div>
{% for group in grouped_requirements %}
<div>
<h3 id="{{ group.type }}">{{ group.title }}</h3>
{% for requirement in group.items %}
<details class="system-status-report__entry" open>
{%
set summary_classes = [
'system-status-report__status-title',
group.type in ['warning', 'error'] ? 'system-status-report__status-icon system-status-report__status-icon--' ~ group.type
]
%}
<summary{{ create_attribute({'class': summary_classes}) }} role="button">
{% if requirement.severity_title %}
<span class="visually-hidden">{{ requirement.severity_title }}</span>
{% endif %}
{{ requirement.title }}
</summary>
<div class="system-status-report__entry__value">
{{ requirement.value }}
{% if requirement.description %}
<div class="description">{{ requirement.description }}</div>
{% endif %}
</div>
</details>
{% endfor %}
</div>
{% endfor %}
</div>

View File

@@ -0,0 +1,28 @@
{#
/**
* @file
* Theme override for the status report page.
*
* Available variables:
* - counters: The list of counter elements.
* - general_info: A render array to create general info element.
* - requirements: A render array to create requirements table.
*
* @see template_preprocess_status_report()
*/
#}
{% if counters|length == 3 %}
{% set element_width_class = ' system-status-report-counters__item--third-width' %}
{% elseif counters|length == 2 %}
{% set element_width_class = ' system-status-report-counters__item--half-width' %}
{% endif %}
<div class="system-status-report-counters">
{% for counter in counters %}
<div class="system-status-report-counters__item{{ element_width_class }}">
{{ counter }}
</div>
{% endfor %}
</div>
{{ general_info }}
{{ requirements }}

View File

@@ -0,0 +1,37 @@
{#
/**
* @file
* Theme override for the status report.
*
* Available variables:
* - grouped_requirements: Contains grouped requirements.
* Each group contains:
* - title: The title of the group.
* - type: The severity of the group.
* - items: The requirement instances.
* Each requirement item contains:
* - title: The title of the requirement.
* - value: (optional) The requirement's status.
* - description: (optional) The requirement's description.
* - severity_title: The title of the severity.
* - severity_status: Indicates the severity status.
* - requirements: Ungrouped requirements
*/
#}
{% for group in grouped_requirements %}
<h3 id="{{ group.type }}">{{ group.title }}</h3>
{% for requirement in group.items %}
<details>
<summary role="button">
{% if requirement.severity_title %}
<span class="visually-hidden">{{ requirement.severity_title }}</span>
{% endif %}
{{ requirement.title }}
</summary>
{{ requirement.value }}
{% if requirement.description %}
<div>{{ requirement.description }}</div>
{% endif %}
</details>
{% endfor %}
{% endfor %}

View File

@@ -0,0 +1,25 @@
{#
/**
* @file
* Theme override for the admin index page.
*
* Available variables:
* - system_compact_link: Themed link to toggle compact view.
* - containers: A list of administrative containers keyed by position: left or
* right. Each container in the list contains:
* - blocks: A list of administrative blocks, rendered
* through admin-block.html.twig.
*
* @see template_preprocess_system_admin_index()
*/
#}
<div class="admin clearfix">
{{ system_compact_link }}
{% for position, blocks in containers %}
<div class="{{ position }} clearfix">
{% for block in blocks %}
{{ block }}
{% endfor %}
</div>
{% endfor %}
</div>

View File

@@ -0,0 +1,15 @@
{#
/**
* @file
* Theme override for a system settings form.
*
* This template will be used when a system config form specifies 'config_form'
* as its #theme callback. Otherwise, by default, system config forms will be
* themed by form.html.twig. This does not alter the appearance of a form at
* all, but is provided as a convenience for themers.
*
* Available variables:
* - form: The confirm form.
*/
#}
{{ form }}

View File

@@ -0,0 +1,74 @@
{#
/**
* @file
* Theme override for the modules listing page.
*
* Displays a list of all packages in a project.
*
* Available variables:
* - modules: Contains multiple module instances. Each module contains:
* - attributes: Attributes on the row.
* - checkbox: A checkbox for enabling the module.
* - name: The human-readable name of the module.
* - id: A unique identifier for interacting with the details element.
* - enable_id: A unique identifier for interacting with the checkbox element.
* - description: The description of the module.
* - machine_name: The module's machine name.
* - version: Information about the module version.
* - requires: A list of modules that this module requires.
* - required_by: A list of modules that require this module.
* - links: A list of administration links provided by the module.
*
* @see template_preprocess_system_modules_details()
*/
#}
<table class="responsive-enabled">
<thead>
<tr>
<th class="checkbox visually-hidden">{{ 'Installed'|t }}</th>
<th class="name visually-hidden">{{ 'Name'|t }}</th>
<th class="description visually-hidden priority-low">{{ 'Description'|t }}</th>
</tr>
</thead>
<tbody>
{% for module in modules %}
{% set zebra = cycle(['odd', 'even'], loop.index0) %}
<tr{{ module.attributes.addClass(zebra) }}>
<td class="checkbox">
{{ module.checkbox }}
</td>
<td class="module">
<label id="{{ module.id }}" for="{{ module.enable_id }}" class="module-name table-filter-text-source">{{ module.name }}</label>
</td>
<td class="description expand priority-low">
<details class="js-form-wrapper form-wrapper" id="{{ module.enable_id }}-description">
<summary aria-controls="{{ module.enable_id }}-description" role="button" aria-expanded="false"><span class="text module-description">{{ module.description }}</span></summary>
<div class="details-wrapper">
<div class="details-description">
<div class="requirements">
<div class="admin-requirements">{{ 'Machine name: <span dir="ltr" class="table-filter-text-source">@machine-name</span>'|t({'@machine-name': module.machine_name}) }}</div>
{% if module.version %}
<div class="admin-requirements">{{ 'Version: @module-version'|t({'@module-version': module.version}) }}</div>
{% endif %}
{% if module.requires %}
<div class="admin-requirements">{{ 'Requires: @module-list'|t({'@module-list': module.requires}) }}</div>
{% endif %}
{% if module.required_by %}
<div class="admin-requirements">{{ 'Required by: @module-list'|t({'@module-list': module.required_by}) }}</div>
{% endif %}
</div>
{% if module.links %}
<div class="links">
{% for link_type in ['help', 'permissions', 'configure'] %}
{{ module.links[link_type] }}
{% endfor %}
</div>
{% endif %}
</div>
</div>
</details>
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,73 @@
{#
/**
* @file
* Theme override for the modules uninstall page.
*
* Available variables:
* - form: The modules uninstall form.
* - modules: Contains multiple module instances. Each module contains:
* - attributes: Attributes on the row.
* - module_name: The name of the module.
* - checkbox: A checkbox for uninstalling the module.
* - checkbox_id: A unique identifier for interacting with the checkbox
* element.
* - name: The human-readable name of the module.
* - description: The description of the module.
* - disabled_reasons: (optional) A list of reasons why this module cannot be
* uninstalled.
*
* @see template_preprocess_system_modules_uninstall()
*/
#}
{{ form.filters }}
<table class="responsive-enabled">
<thead>
<tr>
<th>{{ 'Uninstall'|t }}</th>
<th>{{ 'Name'|t }}</th>
<th>{{ 'Description'|t }}</th>
</tr>
</thead>
<tbody>
{% for module in modules %}
{% set zebra = cycle(['odd', 'even'], loop.index0) -%}
<tr{{ module.attributes.addClass(zebra) }}>
<td align="center">
{{- module.checkbox -}}
</td>
<td>
<label for="{{ module.checkbox_id }}" class="module-name table-filter-text-source">{{ module.name }}</label>
</td>
<td class="description">
<span class="text module-description">{{ module.description }}</span>
{% if module.reasons_count > 0 %}
<div class="admin-requirements">
{%- trans -%}
The following reason prevents {{ module.module_name }} from being uninstalled:
{%- plural module.reasons_count -%}
The following reasons prevent {{ module.module_name }} from being uninstalled:
{%- endtrans %}
<div class="item-list">
<ul>
{%- for reason in module.validation_reasons -%}
<li>{{ reason }}</li>
{%- endfor -%}
{%- if module.required_by -%}
<li>{{ 'Required by: @module-list'|t({'@module-list': module.required_by|safe_join(', ')}) }}</li>
{%- endif -%}
</ul>
</div>
</div>
{% endif %}
</td>
</tr>
{% else %}
<tr class="odd">
<td colspan="3" class="empty message">{{ 'No modules are available to uninstall.'|t }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{{ form|without('filters', 'modules', 'uninstall') }}

View File

@@ -0,0 +1,16 @@
{#
/**
* @file
* Theme override for the message when fetching security advisories fails.
*
* This error message is displayed on the status report page.
*
* Available variables:
* - error_message: A render array containing the appropriate error message.
*
* @see template_preprocess_system_security_advisories_fetch_error_message()
*
* @ingroup themeable
*/
#}
{{ error_message }}

View File

@@ -0,0 +1,74 @@
{#
/**
* @file
* Theme override for the Appearance page.
*
* Available variables:
* - attributes: HTML attributes for the main container.
* - theme_groups: A list of theme groups. Each theme group contains:
* - attributes: HTML attributes specific to this theme group.
* - title: Title for the theme group.
* - state: State of the theme group, e.g. installed or uninstalled.
* - themes: A list of themes within the theme group. Each theme contains:
* - attributes: HTML attributes specific to this theme.
* - screenshot: A screenshot representing the theme.
* - description: Description of the theme.
* - name: Theme name.
* - version: The theme's version number.
* - is_default: Boolean indicating whether the theme is the default theme
* or not.
* - is_admin: Boolean indicating whether the theme is the admin theme or
* not.
* - notes: Identifies what context this theme is being used in, e.g.,
* default theme, admin theme.
* - incompatible: Text describing any compatibility issues.
* - operations: A list of operation links, e.g., Settings, Enable, Disable,
* etc. these links should only be displayed if the theme is compatible.
*
* @see template_preprocess_system_themes_page()
*/
#}
<div{{ attributes }}>
{% for theme_group in theme_groups %}
{%
set theme_group_classes = [
'system-themes-list',
'system-themes-list-' ~ theme_group.state,
'clearfix',
]
%}
<div{{ theme_group.attributes.addClass(theme_group_classes) }}>
<h2 class="system-themes-list__header">{{ theme_group.title }}</h2>
{% for theme in theme_group.themes %}
{%
set theme_classes = [
theme.is_default ? 'theme-default',
theme.is_admin ? 'theme-admin',
'theme-selector',
'clearfix',
]
%}
<div{{ theme.attributes.addClass(theme_classes) }}>
{% if theme.screenshot %}
{{ theme.screenshot }}
{% endif %}
<div class="theme-info">
<h3 class="theme-info__header">
{{- theme.name }} {{ theme.version -}}
{% if theme.notes %}
({{ theme.notes|safe_join(', ') }})
{%- endif -%}
</h3>
<div class="theme-info__description">{{ theme.description }}</div>
{# Display operation links if the theme is compatible. #}
{% if theme.incompatible %}
<div class="incompatible">{{ theme.incompatible }}</div>
{% else %}
{{ theme.operations }}
{% endif %}
</div>
</div>
{% endfor %}
</div>
{% endfor %}
</div>

View File

@@ -0,0 +1,24 @@
{#
/**
* @file
* Theme override for displaying a tablesort indicator.
*
* Available variables:
* - style: Either 'asc' or 'desc', indicating the sorting direction.
*/
#}
{%
set classes = [
'tablesort',
'tablesort--' ~ style,
]
%}
<span{{ attributes.addClass(classes) }}>
<span class="visually-hidden">
{% if style == 'asc' -%}
{{ 'Sort ascending'|t }}
{% else -%}
{{ 'Sort descending'|t }}
{% endif %}
</span>
</span>

View File

@@ -0,0 +1,14 @@
{#
/**
* @file
* Default theme implementation for the message when fetching data fails.
*
* Available variables:
* - error_message: A render array containing the appropriate error message.
*
* @see template_preprocess_update_fetch_error_message()
*
* @ingroup themeable
*/
#}
{{ error_message }}

View File

@@ -0,0 +1,21 @@
{#
/**
* @file
* Theme override for the last time update data was checked.
*
* Available variables:
* - last: The timestamp that the site was last checked for updates.
* - time: The formatted time since the site last checked for updates.
* - link: A link to check for updates manually.
*
* @see template_preprocess_update_last_check()
*/
#}
<p>
{% if last %}
{{ 'Last checked: @time ago'|t({'@time': time}) }}
{% else %}
{{ 'Last checked: never'|t }}
{% endif %}
({{ link }})
</p>

View File

@@ -0,0 +1,104 @@
{#
/**
* @file
* Theme override for the project status report.
*
* Available variables:
* - title: The project title.
* - url: The project URL.
* - status: The project status.
* - label: The project status label.
* - attributes: HTML attributes for the project status.
* - reason: The reason you should update the project.
* - icon: The project status version indicator icon.
* - existing_version: The version of the installed project.
* - versions: The available versions of the project.
* - install_type: The type of project (e.g., dev).
* - datestamp: The date/time of a project version's release.
* - extras: HTML attributes and additional information about the project.
* - attributes: HTML attributes for the extra item.
* - label: The label for an extra item.
* - data: The data about an extra item.
* - includes: The projects within the project.
* - disabled: The currently disabled projects in the project.
*
* @see template_preprocess_update_project_status()
*/
#}
{%
set status_classes = [
project.status == constant('Drupal\\update\\UpdateManagerInterface::NOT_SECURE') ? 'project-update__status--security-error',
project.status == constant('Drupal\\update\\UpdateManagerInterface::REVOKED') ? 'project-update__status--revoked',
project.status == constant('Drupal\\update\\UpdateManagerInterface::NOT_SUPPORTED') ? 'project-update__status--not-supported',
project.status == constant('Drupal\\update\\UpdateManagerInterface::NOT_CURRENT') ? 'project-update__status--not-current',
project.status == constant('Drupal\\update\\UpdateManagerInterface::CURRENT') ? 'project-update__status--current',
]
%}
<div{{ status.attributes.addClass('project-update__status', status_classes) }}>
{%- if status.label -%}
<span>{{ status.label }}</span>
{%- else -%}
{{ status.reason }}
{%- endif %}
<span class="project-update__status-icon">
{{ status.icon }}
</span>
</div>
<div class="project-update__title">
{%- if url -%}
<a href="{{ url }}">{{ title }}</a>
{%- else -%}
{{ title }}
{%- endif %}
{{ existing_version }}
{% if install_type == 'dev' and datestamp %}
<span class="project-update__version-date">({{ datestamp }})</span>
{% endif %}
</div>
{% if versions %}
{% for version in versions %}
{{ version }}
{% endfor %}
{% endif %}
{%
set extra_classes = [
project.status == constant('Drupal\\update\\UpdateManagerInterface::NOT_SECURE') ? 'project-not-secure',
project.status == constant('Drupal\\update\\UpdateManagerInterface::REVOKED') ? 'project-revoked',
project.status == constant('Drupal\\update\\UpdateManagerInterface::NOT_SUPPORTED') ? 'project-not-supported',
]
%}
<div class="project-updates__details">
{% if extras %}
<div class="extra">
{% for extra in extras %}
<div{{ extra.attributes.addClass(extra_classes) }}>
{{ extra.label }}: {{ extra.data }}
</div>
{% endfor %}
</div>
{% endif %}
{% set includes = includes|join(', ') %}
{% if disabled %}
{{ 'Includes:'|t }}
<ul>
<li>
{% trans %}
Enabled: {{ includes|placeholder }}
{% endtrans %}
</li>
<li>
{% set disabled = disabled|join(', ') %}
{% trans %}
Disabled: {{ disabled|placeholder }}
{% endtrans %}
</li>
</ul>
{% else %}
{% trans %}
Includes: {{ includes|placeholder }}
{% endtrans %}
{% endif %}
</div>

View File

@@ -0,0 +1,23 @@
{#
/**
* @file
* Theme override for the project status report.
*
* Available variables:
* - last_checked: Themed last time update data was checked.
* - no_updates_message: Message when there are no project updates.
* - project_types: A list of project types.
* - label: The project type label.
* - table: The project status table.
*
* @see template_preprocess_update_report()
*/
#}
{{ last_checked }}
{% for project_type in project_types %}
<h3>{{ project_type.label }}</h3>
{{ project_type.table }}
{% else %}
<p>{{ no_updates_message }}</p>
{% endfor %}

View File

@@ -0,0 +1,51 @@
{#
/**
* @file
* Theme override for the version display of a project.
*
* Available variables:
* - attributes: HTML attributes suitable for a container element.
* - title: The title of the project.
* - core_compatibility_details: Render array of core compatibility details.
* - version: A list of data about the latest released version, containing:
* - version: The version number.
* - date: The date of the release.
* - download_link: The URL for the downloadable file.
* - release_link: The URL for the release notes.
* - core_compatible: A flag indicating whether the project is compatible
* with the currently installed version of Drupal core. This flag is not
* set for the Drupal core project itself.
* - core_compatibility_message: A message indicating the versions of Drupal
* core with which this project is compatible. This message is also
* contained within the 'core_compatibility_details' variable documented
* above. This message is not set for the Drupal core project itself.
*
* @see template_preprocess_update_version()
*/
#}
<div class="{{ attributes.class }} project-update__version"{{ attributes|without('class') }}>
<div class="clearfix">
<div class="project-update__version-title layout-column layout-column--quarter">{{ title }}</div>
<div class="project-update__version-details layout-column layout-column--quarter">
<a href="{{ version.release_link }}">{{ version.version }}</a>
<span class="project-update__version-date">({{ version.date|date('Y-M-d') }})</span>
</div>
<div class="layout-column layout-column--half">
<ul class="project-update__version-links">
{% if version.core_compatible is not defined or version.core_compatible %}
<li class="project-update__download-link">
<a href="{{ version.download_link }}">{{ 'Download'|t }}</a>
</li>
{% endif %}
<li class="project-update__release-notes-link">
<a href="{{ version.release_link }}">{{ 'Release notes'|t }}</a>
</li>
{% if core_compatibility_details %}
<li class="project-update__compatibility-details">
{{ core_compatibility_details }}
</li>
{% endif %}
</ul>
</div>
</div>
</div>

View File

@@ -0,0 +1,55 @@
{#
/**
* @file
* Theme override for Views UI build group filter form.
*
* Available variables:
* - form: A render element representing the form. Contains the following:
* - form_description: The exposed filter's description.
* - expose_button: The button to toggle the expose filter form.
* - group_button: Toggle options between single and grouped filters.
* - label: A filter label input field.
* - description: A filter description field.
* - value: The filters available values.
* - optional: A checkbox to require this filter or not.
* - remember: A checkbox to remember selected filter value(s) (per user).
* - widget: Radio Buttons to select the filter widget.
* - add_group: A button to add another row to the table.
* - more: A details element for additional field exposed filter fields.
* - table: A rendered table element of the group filter form.
*
* @see template_preprocess_views_ui_build_group_filter_form()
*/
#}
{{ form.form_description }}
{{ form.expose_button }}
{{ form.group_button }}
<div class="views-left-40">
{{ form.optional }}
{{ form.remember }}
</div>
<div class="views-right-60">
{{ form.widget }}
{{ form.label }}
{{ form.description }}
</div>
{#
Render the rest of the form elements excluding elements that are rendered
elsewhere.
#}
{{ form|without(
'form_description',
'expose_button',
'group_button',
'optional',
'remember',
'widget',
'label',
'description',
'add_group',
'more'
)
}}
{{ table }}
{{ form.add_group }}
{{ form.more }}

View File

@@ -0,0 +1,11 @@
{#
/**
* @file
* Theme override for a generic views UI container/wrapper.
*
* Available variables:
* - attributes: HTML attributes to apply to the container element.
* - children: The remaining elements such as dropbuttons and tabs.
*/
#}
<div{{ attributes }}>{{ children }}</div>

View File

@@ -0,0 +1,33 @@
{#
/**
* @file
* Theme override for each "box" on the display query edit screen.
*
* Available variables:
* - attributes: HTML attributes to apply to the container element.
* - actions: Action links such as "Add", "And/Or, Rearrange" for the content.
* - title: The title of the bucket, e.g. "Fields", "Filter Criteria", etc.
* - content: Content items such as fields or settings in this container.
* - name: The name of the bucket, e.g. "Fields", "Filter Criteria", etc.
* - overridden: A boolean indicating the setting has been overridden from the
* default.
*
* @see template_preprocess_views_ui_display_tab_bucket()
*/
#}
{%
set classes = [
'views-ui-display-tab-bucket',
name ? name|clean_class,
overridden ? 'overridden',
]
%}
<div{{ attributes.addClass(classes) }}>
{% if title -%}
<h3 class="views-ui-display-tab-bucket__title">{{ title }}</h3>
{%- endif %}
{% if actions -%}
{{ actions }}
{%- endif %}
{{ content }}
</div>

View File

@@ -0,0 +1,35 @@
{#
/**
* @file
* Theme override for Views UI display tab settings.
*
* Template for each row inside the "boxes" on the display query edit screen.
*
* Available variables:
* - attributes: HTML attributes such as class for the container.
* - description: The description or label for this setting.
* - settings_links: A list of links for this setting.
* - defaulted: A boolean indicating the setting is in its default state.
* - overridden: A boolean indicating the setting has been overridden from the
* default.
*
* @see template_preprocess_views_ui_display_tab_setting()
*/
#}
{%
set classes = [
'views-display-setting',
'clearfix',
'views-ui-display-tab-setting',
defaulted ? 'defaulted',
overridden ? 'overridden',
]
%}
<div{{ attributes.addClass(classes) }}>
{% if description -%}
<span class="label">{{ description }}</span>
{%- endif %}
{% if settings_links %}
{{ settings_links|safe_join('<span class="label">&nbsp;|&nbsp;</span>') }}
{% endif %}
</div>

View File

@@ -0,0 +1,65 @@
{#
/**
* @file
* Theme override for exposed filter form.
*
* Available variables:
* - form_description: The exposed filter's description.
* - expose_button: The button to toggle the expose filter form.
* - group_button: Toggle options between single and grouped filters.
* - required: A checkbox to require this filter or not.
* - label: A filter label input field.
* - description: A filter description field.
* - operator: The operators for how the filters value should be treated.
* - #type: The operator type.
* - value: The filters available values.
* - use_operator: Checkbox to allow the user to expose the operator.
* - more: A details element for additional field exposed filter fields.
*/
#}
{{ form.form_description }}
{{ form.expose_button }}
{{ form.group_button }}
{{ form.required }}
{{ form.label }}
{{ form.description }}
{{ form.operator }}
{{ form.value }}
{% if form.use_operator %}
<div class="views-left-40">
{{ form.use_operator }}
</div>
{% endif %}
{#
Collect a list of elements printed to exclude when printing the
remaining elements.
#}
{% set remaining_form = form|without(
'form_description',
'expose_button',
'group_button',
'required',
'label',
'description',
'operator',
'value',
'use_operator',
'more'
)
%}
{#
Only output the right column markup if there's a left column to begin with.
#}
{% if form.operator['#type'] %}
<div class="views-right-60">
{{ remaining_form }}
</div>
{% else %}
{{ remaining_form }}
{% endif %}
{{ form.more }}

View File

@@ -0,0 +1,25 @@
{#
/**
* @file
* Theme override for Views UI rearrange filter form.
*
* Available variables:
* - form: A render element representing the form.
* - grouping: A flag whether or not there is more than one group.
* - ungroupable_table: The ungroupable filter table.
* - table: The groupable filter table.
*
* @see template_preprocess_views_ui_rearrange_filter_form()
*/
#}
{{ form.override }}
<div class="scroll" data-drupal-views-scroll>
{% if grouping %}
{{ form.filter_groups.operator }}
{% else %}
{{ form.filter_groups.groups.0 }}
{% endif %}
{{ ungroupable_table }}
{{ table }}
</div>
{{ form|without('override', 'filter_groups', 'remove_groups', 'filters') }}

View File

@@ -0,0 +1,16 @@
{#
/**
* @file
* Theme override for the settings of a table style views display.
*
* Available variables:
* - table: A table of options for each field in this display.
* - form: Any remaining form fields not included in the table.
* - description_markup: An overview for the settings of this display.
*
* @see template_preprocess_views_ui_style_plugin_table()
*/
#}
{{ form.description_markup }}
{{ table }}
{{ form }}

View File

@@ -0,0 +1,22 @@
{#
/**
* @file
* Theme override for views displays on the views listing page.
*
* Available variables:
* - displays: Contains multiple display instances. Each display contains:
* - display: Display name.
* - path: Path to display, if any.
*/
#}
<ul>
{% for display in displays %}
<li>
{% if display.path %}
{{ display.display }} <span data-drupal-selector="views-table-filter-text-source">({{ display.path }})</span>
{% else %}
{{ display.display }}
{% endif %}
</li>
{% endfor %}
</ul>

View File

@@ -0,0 +1,26 @@
{#
/**
* @file
* Theme override for basic administrative info about a View.
*
* Available variables:
* - displays: List of displays.
*/
#}
<h3 class="views-ui-view-title" data-drupal-selector="views-table-filter-text-source">{{ view.label }}</h3>
<div class="views-ui-view-displays">
{% if displays %}
{% trans %}
Display
{% plural displays %}
Displays
{% endtrans %}:
<em>{{ displays|safe_join(', ') }}</em>
{% else %}
{{ 'None'|t }}
{% endif %}
</div>
<div class="views-ui-view-machine-name">
{{ 'Machine name:'|t }}
<span data-drupal-selector="views-table-filter-text-source">{{ view.id }}</span>
</div>

View File

@@ -0,0 +1,18 @@
{#
/**
* @file
* Theme override for a views UI preview section.
*
* Available variables:
* - title: The human readable section title.
* - links: A list of contextual links.
* - content: The content for this section preview.
*
* @see template_preprocess_views_ui_view_preview_section()
*/
#}
<h1 class="section-title">{{ title }}</h1>
{% if links %}
<div class="contextual">{{ links }}</div>
{% endif %}
<div class="preview-section">{{ content }}</div>

View File

@@ -0,0 +1,47 @@
{#
/**
* @file
* Theme override for views listing table.
*
* Available variables:
* - headers: Contains table headers.
* - rows: Contains multiple rows. Each row contains:
* - view_name: The human-readable name of the view.
* - machine_name: Machine name of the view.
* - description: The description of the view.
* - displays: List of displays attached to the view.
* - operations: List of available operations.
*
* @see template_preprocess_views_ui_views_listing_table()
*/
#}
<table{{ attributes.addClass('responsive-enabled') }}>
<thead>
<tr>
{% for header in headers %}
<th{{ header.attributes }}>{{ header.data }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in rows %}
<tr{{ row.attributes }}>
<td class="views-ui-view-name">
<strong data-drupal-selector="views-table-filter-text-source">{{ row.data.view_name.data }}</strong>
</td>
<td class="views-ui-view-machine-name" data-drupal-selector="views-table-filter-text-source">
{{ row.data.machine_name.data }}
</td>
<td class="views-ui-view-description" data-drupal-selector="views-table-filter-text-source">
{{ row.data.description.data }}
</td>
<td class="views-ui-view-displays">
{{ row.data.displays.data }}
</td>
<td class="views-ui-view-operations">
{{ row.data.operations.data }}
</td>
</tr>
{% endfor %}
</tbody>
</table>