From ee375afb712b61f4a6547def3cd7d3b30ebaefc1 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Tue, 9 Apr 2024 18:00:52 +0100 Subject: [PATCH] Add events to talks --- config/sync/core.date_format.medium.yml | 2 +- config/sync/core.date_format.short.yml | 2 +- ....entity_view_display.node.talk.default.yml | 3 +- ...y_view_display.paragraph.event.default.yml | 18 ++-- ....field.paragraph.event.field_is_online.yml | 4 +- .../templates/content/node--talk.html.twig | 93 +++++++++++++++++++ .../field/field--field-events.html.twig | 79 ++++++++++++++++ .../field/field--field-slides.html.twig | 72 ++++++++++++++ .../field/field--field-video.html.twig | 72 ++++++++++++++ .../paragraph/paragraph--event.html.twig | 73 +++++++++++++++ 10 files changed, 404 insertions(+), 14 deletions(-) create mode 100644 web/themes/custom/opdavies/templates/content/node--talk.html.twig create mode 100644 web/themes/custom/opdavies/templates/field/field--field-events.html.twig create mode 100644 web/themes/custom/opdavies/templates/field/field--field-slides.html.twig create mode 100644 web/themes/custom/opdavies/templates/field/field--field-video.html.twig create mode 100644 web/themes/custom/opdavies/templates/paragraph/paragraph--event.html.twig diff --git a/config/sync/core.date_format.medium.yml b/config/sync/core.date_format.medium.yml index 0e5a500..cdd0590 100644 --- a/config/sync/core.date_format.medium.yml +++ b/config/sync/core.date_format.medium.yml @@ -7,4 +7,4 @@ _core: id: medium label: 'Default medium date' locked: false -pattern: 'D, m/d/Y - H:i' +pattern: 'jS F Y' diff --git a/config/sync/core.date_format.short.yml b/config/sync/core.date_format.short.yml index 9fa04ba..a365cb6 100644 --- a/config/sync/core.date_format.short.yml +++ b/config/sync/core.date_format.short.yml @@ -7,4 +7,4 @@ _core: id: short label: 'Default short date' locked: false -pattern: 'm/d/Y - H:i' +pattern: d/m/Y diff --git a/config/sync/core.entity_view_display.node.talk.default.yml b/config/sync/core.entity_view_display.node.talk.default.yml index aaa7498..7ecae92 100644 --- a/config/sync/core.entity_view_display.node.talk.default.yml +++ b/config/sync/core.entity_view_display.node.talk.default.yml @@ -26,9 +26,10 @@ content: weight: 101 region: content field_events: - type: entity_reference_label + type: entity_reference_entity_view label: above settings: + view_mode: default link: true third_party_settings: { } weight: 104 diff --git a/config/sync/core.entity_view_display.paragraph.event.default.yml b/config/sync/core.entity_view_display.paragraph.event.default.yml index e13c4a4..2e93022 100644 --- a/config/sync/core.entity_view_display.paragraph.event.default.yml +++ b/config/sync/core.entity_view_display.paragraph.event.default.yml @@ -19,7 +19,7 @@ mode: default content: field_date: type: datetime_default - label: above + label: hidden settings: timezone_override: '' format_type: medium @@ -28,7 +28,7 @@ content: region: content field_event_name: type: string - label: above + label: hidden settings: link_to_entity: false third_party_settings: { } @@ -36,7 +36,7 @@ content: region: content field_is_online: type: boolean - label: above + label: hidden settings: format: default format_custom_false: '' @@ -46,7 +46,7 @@ content: region: content field_location: type: string - label: above + label: hidden settings: link_to_entity: false third_party_settings: { } @@ -54,13 +54,13 @@ content: region: content field_url: type: link - label: above + label: hidden settings: trim_length: 80 - url_only: false - url_plain: false - rel: '' - target: '' + url_only: true + url_plain: true + rel: nofollow + target: '0' third_party_settings: { } weight: 3 region: content diff --git a/config/sync/field.field.paragraph.event.field_is_online.yml b/config/sync/field.field.paragraph.event.field_is_online.yml index 1b85986..2ec9e7d 100644 --- a/config/sync/field.field.paragraph.event.field_is_online.yml +++ b/config/sync/field.field.paragraph.event.field_is_online.yml @@ -16,6 +16,6 @@ translatable: false default_value: { } default_value_callback: '' settings: - on_label: 'On' - off_label: 'Off' + on_label: '1' + off_label: '0' field_type: boolean diff --git a/web/themes/custom/opdavies/templates/content/node--talk.html.twig b/web/themes/custom/opdavies/templates/content/node--talk.html.twig new file mode 100644 index 0000000..07dd676 --- /dev/null +++ b/web/themes/custom/opdavies/templates/content/node--talk.html.twig @@ -0,0 +1,93 @@ +{# +/** + * @file + * Theme override to display a node. + * + * Available variables: + * - node: The node entity with limited access to object properties and methods. + * Only method names starting with "get", "has", or "is" and a few common + * methods such as "id", "label", and "bundle" are available. For example: + * - node.getCreatedTime() will return the node creation timestamp. + * - node.hasField('field_example') returns TRUE if the node bundle includes + * field_example. (This does not indicate the presence of a value in this + * field.) + * - node.isPublished() will return whether the node is published or not. + * Calling other methods, such as node.delete(), will result in an exception. + * See \Drupal\node\Entity\Node for a full list of public properties and + * methods for the node object. + * - label: (optional) The title of the node. + * - content: All node 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. + * - author_picture: The node author user entity, rendered using the "compact" + * view mode. + * - metadata: Metadata for this node. + * - date: (optional) Themed creation date field. + * - author_name: (optional) Themed author name field. + * - url: Direct URL of the current node. + * - display_submitted: Whether submission information should be displayed. + * - attributes: HTML attributes for the containing element. + * The attributes.class element may contain one or more of the following + * classes: + * - node: The current template type (also known as a "theming hook"). + * - node--type-[type]: The current node type. For example, if the node is an + * "Article" it would result in "node--type-article". Note that the machine + * name will often be in a short form of the human readable label. + * - node--view-mode-[view_mode]: The View Mode of the node; for example, a + * teaser would result in: "node--view-mode-teaser", and + * full: "node--view-mode-full". + * The following are controlled through the node publishing options. + * - node--promoted: Appears on nodes promoted to the front page. + * - node--sticky: Appears on nodes ordered above other non-sticky nodes in + * teaser listings. + * - node--unpublished: Appears on unpublished nodes visible only to site + * admins. + * - title_attributes: Same as attributes, except applied to the main title + * tag that appears in the template. + * - content_attributes: Same as attributes, except applied to the main + * content tag that appears in the template. + * - author_attributes: Same as attributes, except applied to the author of + * the node tag that appears in the template. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * - view_mode: View mode; for example, "teaser" or "full". + * - teaser: Flag for the teaser state. Will be true if view_mode is 'teaser'. + * - page: Flag for the full page state. Will be true if view_mode is 'full'. + * - readmore: Flag for more state. Will be true if the teaser content of the + * node cannot hold the main body content. + * - 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_node() + * + */ +#} + + + {{ title_prefix }} + {% if label and not page %} + + {{ label }} + + {% endif %} + {{ title_suffix }} + + {% if display_submitted %} +
+ {{ author_picture }} + + {% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %} + {{ metadata }} + +
+ {% endif %} + + + {{ content }} + + diff --git a/web/themes/custom/opdavies/templates/field/field--field-events.html.twig b/web/themes/custom/opdavies/templates/field/field--field-events.html.twig new file mode 100644 index 0000000..7a2e7fa --- /dev/null +++ b/web/themes/custom/opdavies/templates/field/field--field-events.html.twig @@ -0,0 +1,79 @@ +{# +/** + * @file + * Theme override for a field. + * + * To override output, copy the "field.html.twig" from the templates directory + * to your theme's directory and customize it, just like customizing other + * Drupal templates such as page.html.twig or node.html.twig. + * + * Instead of overriding the theming for all fields, you can also just override + * theming for a subset of fields using + * @link themeable Theme hook suggestions. @endlink For example, + * here are some theme hook suggestions that can be used for a field_foo field + * on an article node type: + * - field--node--field-foo--article.html.twig + * - field--node--field-foo.html.twig + * - field--node--article.html.twig + * - field--field-foo.html.twig + * - field--text-with-summary.html.twig + * - field.html.twig + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - label_hidden: Whether to show the field label or not. + * - title_attributes: HTML attributes for the title. + * - label: The label for the field. + * - multiple: TRUE if a field can contain multiple items. + * - items: List of all the field items. Each item contains: + * - attributes: List of HTML attributes for each item. + * - content: The field item's content. + * - entity_type: The entity type to which the field belongs. + * - field_name: The name of the field. + * - field_type: The type of the field. + * - label_display: The display settings for the label. + * + * @see template_preprocess_field() + */ +#} +{% + set title_classes = [ + 'font-bold', + 'text-xl', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} + +{% if label_hidden %} + {% if multiple %} + + {% for item in items %} + {{ item.content }} + {% endfor %} + + {% else %} + {% for item in items %} + {{ item.content }} + {% endfor %} + {% endif %} +{% else %} + + {{ label }} + +
+
+ {% if multiple %} +
+
    + {% endif %} + {% for item in items %} + {{ item.content }} + {% endfor %} + {% if multiple %} +
+
+ {% endif %} +
+
+ +{% endif %} diff --git a/web/themes/custom/opdavies/templates/field/field--field-slides.html.twig b/web/themes/custom/opdavies/templates/field/field--field-slides.html.twig new file mode 100644 index 0000000..1dcafe3 --- /dev/null +++ b/web/themes/custom/opdavies/templates/field/field--field-slides.html.twig @@ -0,0 +1,72 @@ +{# +/** + * @file + * Theme override for a field. + * + * To override output, copy the "field.html.twig" from the templates directory + * to your theme's directory and customize it, just like customizing other + * Drupal templates such as page.html.twig or node.html.twig. + * + * Instead of overriding the theming for all fields, you can also just override + * theming for a subset of fields using + * @link themeable Theme hook suggestions. @endlink For example, + * here are some theme hook suggestions that can be used for a field_foo field + * on an article node type: + * - field--node--field-foo--article.html.twig + * - field--node--field-foo.html.twig + * - field--node--article.html.twig + * - field--field-foo.html.twig + * - field--text-with-summary.html.twig + * - field.html.twig + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - label_hidden: Whether to show the field label or not. + * - title_attributes: HTML attributes for the title. + * - label: The label for the field. + * - multiple: TRUE if a field can contain multiple items. + * - items: List of all the field items. Each item contains: + * - attributes: List of HTML attributes for each item. + * - content: The field item's content. + * - entity_type: The entity type to which the field belongs. + * - field_name: The name of the field. + * - field_type: The type of the field. + * - label_display: The display settings for the label. + * + * @see template_preprocess_field() + */ +#} +{% + set title_classes = [ + 'font-bold', + 'text-xl', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} + +{% if label_hidden %} + {% if multiple %} + + {% for item in items %} + {{ item.content }} + {% endfor %} + + {% else %} + {% for item in items %} + {{ item.content }} + {% endfor %} + {% endif %} +{% else %} + + {{ label }} + {% if multiple %} +
+ {% endif %} + {% for item in items %} + {{ item.content }}
+ {% endfor %} + {% if multiple %} + + {% endif %} + +{% endif %} diff --git a/web/themes/custom/opdavies/templates/field/field--field-video.html.twig b/web/themes/custom/opdavies/templates/field/field--field-video.html.twig new file mode 100644 index 0000000..1dcafe3 --- /dev/null +++ b/web/themes/custom/opdavies/templates/field/field--field-video.html.twig @@ -0,0 +1,72 @@ +{# +/** + * @file + * Theme override for a field. + * + * To override output, copy the "field.html.twig" from the templates directory + * to your theme's directory and customize it, just like customizing other + * Drupal templates such as page.html.twig or node.html.twig. + * + * Instead of overriding the theming for all fields, you can also just override + * theming for a subset of fields using + * @link themeable Theme hook suggestions. @endlink For example, + * here are some theme hook suggestions that can be used for a field_foo field + * on an article node type: + * - field--node--field-foo--article.html.twig + * - field--node--field-foo.html.twig + * - field--node--article.html.twig + * - field--field-foo.html.twig + * - field--text-with-summary.html.twig + * - field.html.twig + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - label_hidden: Whether to show the field label or not. + * - title_attributes: HTML attributes for the title. + * - label: The label for the field. + * - multiple: TRUE if a field can contain multiple items. + * - items: List of all the field items. Each item contains: + * - attributes: List of HTML attributes for each item. + * - content: The field item's content. + * - entity_type: The entity type to which the field belongs. + * - field_name: The name of the field. + * - field_type: The type of the field. + * - label_display: The display settings for the label. + * + * @see template_preprocess_field() + */ +#} +{% + set title_classes = [ + 'font-bold', + 'text-xl', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} + +{% if label_hidden %} + {% if multiple %} + + {% for item in items %} + {{ item.content }} + {% endfor %} + + {% else %} + {% for item in items %} + {{ item.content }} + {% endfor %} + {% endif %} +{% else %} + + {{ label }} + {% if multiple %} +
+ {% endif %} + {% for item in items %} + {{ item.content }}
+ {% endfor %} + {% if multiple %} + + {% endif %} + +{% endif %} diff --git a/web/themes/custom/opdavies/templates/paragraph/paragraph--event.html.twig b/web/themes/custom/opdavies/templates/paragraph/paragraph--event.html.twig new file mode 100644 index 0000000..52f044c --- /dev/null +++ b/web/themes/custom/opdavies/templates/paragraph/paragraph--event.html.twig @@ -0,0 +1,73 @@ +{# +/** + * @file + * Default theme implementation to display a 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 + */ +#} +{% + set classes = [ + 'paragraph', + 'paragraph--type--' ~ paragraph.bundle|clean_class, + view_mode ? 'paragraph--view-mode--' ~ view_mode|clean_class, + not paragraph.isPublished() ? 'paragraph--unpublished' + ] +%} +{% block paragraph %} + + {% block content %} + {% set eventName = content.field_event_name.0 %} + + {# If the event has a URL, create the event name as a link instead of plain text. #} + {% if content.field_url.0 %} + {{ link(eventName, content.field_url.0|render) }} + {% else %} + {{ eventName }} + {% endif %} + + {% if content.field_location.0 %} + in {{ content.field_location.0|render }} + {% endif %} + + - {{ content.field_date.0|render }} + + {% if content.field_is_online.0['#markup'] is same as '1' %} + ({{ 'online'|t }}) + {% endif %} + {{ content|without('field_date')|without('field_event_name')|without('field_is_online')|without('field_location')|without('field_url') }} + {% endblock %} + +{% endblock paragraph %}