integrated evenements in drupal and front

This commit is contained in:
2026-09-11 19:14:00 +02:00
parent 32319f19bd
commit 4efafd0e22
22 changed files with 1457 additions and 274 deletions
+8
View File
@@ -0,0 +1,8 @@
uuid: b2cd3d8a-cea1-49bd-ba8b-3591cd0a587f
langcode: fr
status: true
dependencies: { }
id: y_m_d
label: 'y m d'
locked: false
pattern: d.m.y
@@ -7,16 +7,19 @@ dependencies:
- field.field.node.evenement.body
- field.field.node.evenement.field_artiste_s_invite_s
- field.field.node.evenement.field_dates
- field.field.node.evenement.field_images
- field.field.node.evenement.field_invite_accompagne_curate_p
- field.field.node.evenement.field_lieu
- field.field.node.evenement.field_partenaire_s
- field.field.node.evenement.field_portage
- field.field.node.evenement.field_projet_s_lie_s
- field.field.node.evenement.field_type_d_evenement
- image.style.thumbnail
- node.type.evenement
module:
- datetime_range
- field_group
- image
- inline_entity_form
- path
- text
@@ -26,6 +29,7 @@ third_party_settings:
children:
- group_description
- group_liens
- group_media
label: Tabs
region: content
parent_name: ''
@@ -68,7 +72,7 @@ third_party_settings:
label: Details
region: content
parent_name: ''
weight: 10
weight: 4
format_type: details_sidebar
format_settings:
classes: ''
@@ -98,6 +102,22 @@ third_party_settings:
formatter: closed
description: ''
required_fields: true
group_media:
children:
- field_images
label: Media
region: hidden
parent_name: group_tabs
weight: 13
format_type: tab
format_settings:
classes: ''
show_empty_fields: false
id: ''
label_as_html: false
formatter: closed
description: ''
required_fields: true
id: node.evenement.default
targetEntityType: node
bundle: evenement
@@ -137,6 +157,14 @@ content:
region: content
settings: { }
third_party_settings: { }
field_images:
type: image_image
weight: 3
region: content
settings:
progress_indicator: throbber
preview_image_style: thumbnail
third_party_settings: { }
field_invite_accompagne_curate_p:
type: inline_entity_form_complex
weight: 4
@@ -6,6 +6,7 @@ dependencies:
- field.field.node.evenement.body
- field.field.node.evenement.field_artiste_s_invite_s
- field.field.node.evenement.field_dates
- field.field.node.evenement.field_images
- field.field.node.evenement.field_invite_accompagne_curate_p
- field.field.node.evenement.field_lieu
- field.field.node.evenement.field_partenaire_s
@@ -15,6 +16,7 @@ dependencies:
- node.type.evenement
module:
- datetime_range
- image
- options
- text
- user
@@ -28,26 +30,37 @@ content:
label: hidden
settings: { }
third_party_settings: { }
weight: 101
weight: 5
region: content
field_artiste_s_invite_s:
type: entity_reference_label
label: above
label: hidden
settings:
link: false
third_party_settings: { }
weight: 105
weight: 3
region: content
field_dates:
type: daterange_default
label: above
label: hidden
settings:
timezone_override: ''
format_type: medium
from_to: both
separator: '-'
third_party_settings: { }
weight: 102
weight: 0
region: content
field_images:
type: image
label: above
settings:
image_link: ''
image_style: ''
image_loading:
attribute: lazy
third_party_settings: { }
weight: 8
region: content
field_invite_accompagne_curate_p:
type: entity_reference_label
@@ -55,7 +68,7 @@ content:
settings:
link: false
third_party_settings: { }
weight: 106
weight: 4
region: content
field_lieu:
type: entity_reference_label
@@ -63,7 +76,7 @@ content:
settings:
link: false
third_party_settings: { }
weight: 109
weight: 1
region: content
field_partenaire_s:
type: entity_reference_label
@@ -71,14 +84,14 @@ content:
settings:
link: false
third_party_settings: { }
weight: 104
weight: 7
region: content
field_portage:
type: list_default
label: above
settings: { }
third_party_settings: { }
weight: 107
weight: 6
region: content
field_projet_s_lie_s:
type: entity_reference_label
@@ -86,7 +99,7 @@ content:
settings:
link: true
third_party_settings: { }
weight: 108
weight: 9
region: content
field_type_d_evenement:
type: entity_reference_label
@@ -94,12 +107,12 @@ content:
settings:
link: false
third_party_settings: { }
weight: 107
weight: 2
region: content
links:
settings: { }
third_party_settings: { }
weight: 100
weight: 10
region: content
hidden:
langcode: true
@@ -0,0 +1,126 @@
uuid: 93672b39-7c9a-419f-a8bf-cc7ab49de28b
langcode: fr
status: true
dependencies:
config:
- core.entity_view_mode.node.full
- field.field.node.evenement.body
- field.field.node.evenement.field_artiste_s_invite_s
- field.field.node.evenement.field_dates
- field.field.node.evenement.field_images
- field.field.node.evenement.field_invite_accompagne_curate_p
- field.field.node.evenement.field_lieu
- field.field.node.evenement.field_partenaire_s
- field.field.node.evenement.field_portage
- field.field.node.evenement.field_projet_s_lie_s
- field.field.node.evenement.field_type_d_evenement
- image.style.wide
- node.type.evenement
module:
- datetime_range
- image_field_caption
- layout_builder
- options
- text
- user
third_party_settings:
layout_builder:
enabled: false
allow_custom: false
id: node.evenement.full
targetEntityType: node
bundle: evenement
mode: full
content:
body:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 5
region: content
field_artiste_s_invite_s:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 3
region: content
field_dates:
type: daterange_default
label: hidden
settings:
timezone_override: ''
format_type: y_m_d
from_to: both
separator: '-'
third_party_settings: { }
weight: 0
region: content
field_images:
type: image_caption
label: hidden
settings:
image_style: wide
image_link: file
image_loading:
attribute: lazy
third_party_settings: { }
weight: 10
region: content
field_invite_accompagne_curate_p:
type: entity_reference_label
label: inline
settings:
link: false
third_party_settings: { }
weight: 4
region: content
field_lieu:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 2
region: content
field_partenaire_s:
type: entity_reference_label
label: above
settings:
link: false
third_party_settings: { }
weight: 6
region: content
field_portage:
type: list_default
label: above
settings: { }
third_party_settings: { }
weight: 7
region: content
field_projet_s_lie_s:
type: entity_reference_label
label: above
settings:
link: true
third_party_settings: { }
weight: 8
region: content
field_type_d_evenement:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 1
region: content
links:
settings: { }
third_party_settings: { }
weight: 9
region: content
hidden:
langcode: true
search_api_excerpt: true
@@ -0,0 +1,98 @@
uuid: 1351d694-17a8-499f-a5ab-8cb73389a3ac
langcode: fr
status: true
dependencies:
config:
- core.entity_view_mode.node.tableau_liste
- field.field.node.evenement.body
- field.field.node.evenement.field_artiste_s_invite_s
- field.field.node.evenement.field_dates
- field.field.node.evenement.field_images
- field.field.node.evenement.field_invite_accompagne_curate_p
- field.field.node.evenement.field_lieu
- field.field.node.evenement.field_partenaire_s
- field.field.node.evenement.field_portage
- field.field.node.evenement.field_projet_s_lie_s
- field.field.node.evenement.field_type_d_evenement
- image.style.960x960
- node.type.evenement
module:
- datetime_range
- image_delta_formatter
- layout_builder
- text
- user
third_party_settings:
layout_builder:
enabled: false
allow_custom: false
id: node.evenement.tableau_liste
targetEntityType: node
bundle: evenement
mode: tableau_liste
content:
body:
type: text_summary_or_trimmed
label: hidden
settings:
trim_length: 600
third_party_settings: { }
weight: 4
region: content
field_artiste_s_invite_s:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 2
region: content
field_dates:
type: daterange_default
label: hidden
settings:
timezone_override: ''
format_type: y_m_d
from_to: both
separator: '-'
third_party_settings: { }
weight: 0
region: content
field_images:
type: image_delta_formatter
label: hidden
settings:
deltas:
- 0
deltas_reversed: false
image_link: content
image_style: 960x960
image_loading:
attribute: lazy
third_party_settings: { }
weight: 0
region: content
field_lieu:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 1
region: content
field_type_d_evenement:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 3
region: content
hidden:
field_invite_accompagne_curate_p: true
field_partenaire_s: true
field_portage: true
field_projet_s_lie_s: true
langcode: true
links: true
search_api_excerpt: true
@@ -7,14 +7,18 @@ dependencies:
- field.field.node.evenement.body
- field.field.node.evenement.field_artiste_s_invite_s
- field.field.node.evenement.field_dates
- field.field.node.evenement.field_images
- field.field.node.evenement.field_invite_accompagne_curate_p
- field.field.node.evenement.field_lieu
- field.field.node.evenement.field_partenaire_s
- field.field.node.evenement.field_portage
- field.field.node.evenement.field_projet_s_lie_s
- field.field.node.evenement.field_type_d_evenement
- image.style.960x960
- node.type.evenement
module:
- datetime_range
- image_delta_formatter
- text
- user
id: node.evenement.teaser
@@ -28,21 +32,62 @@ content:
settings:
trim_length: 600
third_party_settings: { }
weight: 101
weight: 4
region: content
links:
settings: { }
field_artiste_s_invite_s:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 100
weight: 3
region: content
field_dates:
type: daterange_default
label: hidden
settings:
timezone_override: ''
format_type: y_m_d
from_to: both
separator: '-'
third_party_settings: { }
weight: 0
region: content
field_images:
type: image_delta_formatter
label: hidden
settings:
deltas:
- 0
deltas_reversed: false
image_link: content
image_style: 960x960
image_loading:
attribute: lazy
third_party_settings: { }
weight: 0
region: content
field_lieu:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 1
region: content
field_type_d_evenement:
type: entity_reference_label
label: hidden
settings:
link: false
third_party_settings: { }
weight: 2
region: content
hidden:
field_artiste_s_invite_s: true
field_dates: true
field_invite_accompagne_curate_p: true
field_lieu: true
field_partenaire_s: true
field_portage: true
field_projet_s_lie_s: true
field_type_d_evenement: true
langcode: true
links: true
search_api_excerpt: true
@@ -0,0 +1,41 @@
uuid: e06f65d1-95bb-4669-97da-eac654134931
langcode: fr
status: true
dependencies:
config:
- field.storage.node.field_images
- node.type.evenement
module:
- image
id: node.evenement.field_images
field_name: field_images
entity_type: node
bundle: evenement
label: Images
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: 'default:file'
handler_settings: { }
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'png gif jpg jpeg webp'
max_filesize: ''
max_resolution: ''
min_resolution: ''
alt_field: true
alt_field_required: false
title_field: false
title_field_required: false
default_image:
uuid: ''
alt: ''
title: ''
width: null
height: null
caption: ''
caption_field: 1
caption_field_required: 0
field_type: image
@@ -10,7 +10,7 @@ id: node.evenement.field_invite_accompagne_curate_p
field_name: field_invite_accompagne_curate_p
entity_type: node
bundle: evenement
label: 'invite/accompagné/curaté par'
label: 'accompagné⋅e(s) par'
description: ''
required: false
translatable: false
+195 -4
View File
@@ -4,6 +4,7 @@ status: true
dependencies:
config:
- core.entity_view_mode.node.tableau_liste
- node.type.evenement
- node.type.projet
- system.menu.main
module:
@@ -127,11 +128,44 @@ display:
id: type
table: node_field_data
field: type
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: type
plugin_id: bundle
operator: in
value:
projet: projet
evenement: evenement
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
style:
type: default
row:
@@ -162,15 +196,81 @@ display:
tags: { }
page_1:
id: page_1
display_title: Page
display_title: 'Page Projets'
display_plugin: page
position: 1
display_options:
title: 'Archives Projets'
filters:
status:
id: status
table: node_field_data
field: status
entity_type: node
entity_field: status
plugin_id: boolean
value: '1'
group: 1
expose:
operator: ''
type:
id: type
table: node_field_data
field: type
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: type
plugin_id: bundle
operator: in
value:
projet: projet
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
filter_groups:
operator: AND
groups:
1: AND
defaults:
title: false
css_class: false
filters: false
filter_groups: false
css_class: 'views-archives views-archives-projets'
display_description: ''
display_extenders: { }
path: archives
path: archives-projets
menu:
type: normal
title: Archives
title: 'Archives Projets'
description: ''
weight: -48
expanded: false
@@ -185,3 +285,94 @@ display:
- 'user.node_grants:view'
- user.permissions
tags: { }
page_2:
id: page_2
display_title: 'Page Évenements'
display_plugin: page
position: 2
display_options:
title: 'Archives Évenments'
filters:
status:
id: status
table: node_field_data
field: status
entity_type: node
entity_field: status
plugin_id: boolean
value: '1'
group: 1
expose:
operator: ''
type:
id: type
table: node_field_data
field: type
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: type
plugin_id: bundle
operator: in
value:
evenement: evenement
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
filter_groups:
operator: AND
groups:
1: AND
defaults:
title: false
css_class: false
filters: false
filter_groups: false
css_class: 'views-archives views-archives-evenements'
display_description: ''
display_extenders: { }
path: archives-evenements
menu:
type: normal
title: 'Archives Évenements'
description: ''
weight: 0
expanded: false
menu_name: main
parent: ''
context: '0'
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- 'user.node_grants:view'
- user.permissions
tags: { }
+3 -3
View File
@@ -836,8 +836,8 @@ display:
operator_list: { }
identifier: type
required: false
remember: false
multiple: true
remember: true
multiple: false
remember_roles:
authenticated: authenticated
anonymous: '0'
@@ -972,7 +972,7 @@ display:
operator_list: { }
identifier: promote
required: false
remember: false
remember: true
multiple: false
remember_roles:
authenticated: authenticated
+324 -182
View File
@@ -4,16 +4,13 @@ status: true
dependencies:
config:
- core.entity_view_mode.node.teaser
- node.type.evenement
- node.type.projet
- taxonomy.vocabulary.type_de_projet
content:
- 'taxonomy_term:type_de_personne:6e522949-6651-4aba-bd4e-286db6851875'
- 'taxonomy_term:type_de_personne:8e4616e8-2936-4be5-ba22-d0ee4dd5c8d7'
- 'taxonomy_term:type_de_projet:1cf4c2f5-d006-41b8-a43b-edc2acd2353c'
- 'taxonomy_term:type_de_projet:51c41eee-15da-4117-a523-5d270006d17d'
- 'taxonomy_term:type_de_projet:54978b66-c2da-4a9f-ac35-4ef944456a74'
- 'taxonomy_term:type_de_projet:6d30006c-3b73-4952-bd30-e34fbcc2103d'
- 'taxonomy_term:type_de_projet:94b85be4-fbee-47e4-828f-1c86aaa7f6f4'
- 'taxonomy_term:type_de_projet:ce8368aa-f138-466e-bfa5-04bbe5ccb33f'
- 'taxonomy_term:type_de_projet:fb96e769-2477-43de-863b-5ef09c6ac6a8'
module:
- datetime
@@ -200,10 +197,19 @@ display:
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
distinct: true
replica: false
query_tags: { }
relationships: { }
relationships:
field_type_de_projet:
id: field_type_de_projet
table: node__field_type_de_projet
field: field_type_de_projet
relationship: none
group_type: group
admin_label: 'field_type_de_projet : Terme de taxonomie'
plugin_id: standard
required: false
header: { }
footer: { }
display_extenders: { }
@@ -233,64 +239,8 @@ display:
group: 1
expose:
operator: ''
field_type_de_projet_target_id:
id: field_type_de_projet_target_id
table: node__field_type_de_projet
field: field_type_de_projet_target_id
relationship: none
group_type: group
admin_label: ''
plugin_id: taxonomy_index_tid
operator: or
value:
11: 11
1: 1
2: 2
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
reduce_duplicates: false
vid: type_de_projet
type: select
hierarchy: false
limit: true
error_message: true
save_lineage: false
force_deepest: false
parent: null
level_labels: ''
hierarchy_depth: 0
required_depth: 0
none_label: '- Please select -'
allow_unpublished: false
promote:
id: promote
promote_1:
id: promote_1
table: node_field_data
field: promote
relationship: none
@@ -329,10 +279,220 @@ display:
default_group: All
default_group_multiple: { }
group_items: { }
status_1:
id: status_1
table: node_field_data
field: status
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: status
plugin_id: boolean
operator: '='
value: '1'
group: 2
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
promote:
id: promote
table: node_field_data
field: promote
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: promote
plugin_id: boolean
operator: '='
value: '1'
group: 2
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
type:
id: type
table: node_field_data
field: type
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: type
plugin_id: bundle
operator: in
value:
evenement: evenement
group: 2
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
type_1:
id: type_1
table: node_field_data
field: type
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: type
plugin_id: bundle
operator: in
value:
projet: projet
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
tid_raw:
id: tid_raw
table: taxonomy_term_field_data
field: tid_raw
relationship: field_type_de_projet
group_type: group
admin_label: ''
entity_type: taxonomy_term
plugin_id: numeric
operator: '='
value:
min: ''
max: ''
value: '1,4'
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
min_placeholder: ''
max_placeholder: ''
placeholder: ''
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
filter_groups:
operator: AND
operator: OR
groups:
1: AND
2: AND
defaults:
filters: false
filter_groups: false
@@ -365,121 +525,6 @@ display:
group: 1
expose:
operator: ''
field_type_de_projet_target_id:
id: field_type_de_projet_target_id
table: node__field_type_de_projet
field: field_type_de_projet_target_id
relationship: none
group_type: group
admin_label: ''
plugin_id: taxonomy_index_tid
operator: or
value:
10: 10
7: 7
6: 6
4: 4
3: 3
5: 5
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
reduce_duplicates: false
vid: type_de_projet
type: select
hierarchy: false
limit: true
error_message: true
save_lineage: false
force_deepest: false
parent: null
level_labels: ''
hierarchy_depth: 0
required_depth: 0
none_label: '- Please select -'
allow_unpublished: false
field_type_de_projet_target_id_1:
id: field_type_de_projet_target_id_1
table: node__field_type_de_projet
field: field_type_de_projet_target_id
relationship: none
group_type: group
admin_label: ''
plugin_id: taxonomy_index_tid
operator: not
value:
11: 11
1: 1
2: 2
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
reduce_duplicates: false
vid: type_de_projet
type: select
hierarchy: false
limit: true
error_message: true
save_lineage: false
force_deepest: false
parent: null
level_labels: ''
hierarchy_depth: 0
required_depth: 0
none_label: '- Please select -'
allow_unpublished: false
promote:
id: promote
table: node_field_data
@@ -520,8 +565,105 @@ display:
default_group: All
default_group_multiple: { }
group_items: { }
type:
id: type
table: node_field_data
field: type
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: type
plugin_id: bundle
operator: in
value:
projet: projet
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
field_type_de_projet_target_id_1:
id: field_type_de_projet_target_id_1
table: node__field_type_de_projet
field: field_type_de_projet_target_id
relationship: none
group_type: group
admin_label: ''
plugin_id: taxonomy_index_tid
operator: not
value:
1: 1
4: 4
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
reduce: false
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
reduce_duplicates: false
vid: type_de_projet
type: select
hierarchy: false
limit: true
error_message: true
save_lineage: false
force_deepest: false
parent: null
level_labels: ''
hierarchy_depth: 0
required_depth: 0
none_label: '- Please select -'
allow_unpublished: false
filter_groups:
operator: AND
operator: OR
groups:
1: AND
defaults:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+19 -10
View File
@@ -91,7 +91,16 @@ gsap.registerPlugin(ScrollTrigger);
};
function initTitles() {
const titles = document.querySelectorAll('#block-leshed-identitedusite>a, article.node-type-projet>header>h2, article.node-type-projet>.cols>.left>h2, article.node-type-projet.view-mode-full h2.node-title');
const titles = document.querySelectorAll('\
#block-leshed-identitedusite>a, \
article.node-type-projet>header>h2,\
article.node-type-projet>.cols>.left>h2,\
article.node-type-projet.view-mode-full h2.node-title,\
article.node-type-evenement>header>h2,\
article.node-type-evenement>header>.field_dates>time,\
article.node-type-evenement.view-mode-full h2.node-title,\
article.node-type-evenement.view-mode-full .field_dates.digit-dates span.date-part\
');
for (const txt of titles) {
txt.classList.add("variable-title");
const splitted = Splitting({ target: txt, by: 'chars' });
@@ -313,23 +322,23 @@ gsap.registerPlugin(ScrollTrigger);
console.log('initPageFull');
// PAGE TITLE SCALING DOWN
const pageTitle = document.querySelector('article.node-type-projet.view-mode-full h2.node-title');
console.log('pageTitle', pageTitle);
const pageHeader = document.querySelector('article.node-type-projet.view-mode-full .cols>.col.left>header, article.node-type-evenement.view-mode-full>.cols>.col.left>header');
console.log('pageHeader', pageHeader);
if (pageTitle) {
if (pageHeader) {
// needs requestAnimationFrame to get the real titleHeight after splitting
requestAnimationFrame(() => {
requestAnimationFrame(() => {
const initTitleH = pageTitle.offsetHeight;
// console.log(`initTitleH: ${initTitleH}`);
const titleScaleTarget = 0.4;
const end = initTitleH - initTitleH * titleScaleTarget;
const initheaderH = pageHeader.offsetHeight;
// console.log(`initheaderH: ${initheaderH}`);
const headerScaleTarget = 0.4;
const end = initheaderH - initheaderH * headerScaleTarget;
// console.log(`end: ${end}`);
gsap_mm.add('(min-width: 768px)', () => {
gsap.to(pageTitle, {
scale: titleScaleTarget,
gsap.to(pageHeader, {
scale: headerScaleTarget,
y: end,
ease: 'none',
scrollTrigger: {
+152 -43
View File
@@ -214,6 +214,12 @@ header[role="banner"]{
} // end of header[role="banner"]{
// ____ _ _ _
// / ___| | ___ | |__ __ _| |___
// | | _| |/ _ \| '_ \ / _` | / __|
// | |_| | | (_) | |_) | (_| | \__ \
// \____|_|\___/|_.__/ \__,_|_|___/
.variable-title{
margin: 0;
font-weight: 200;
@@ -231,23 +237,14 @@ header[role="banner"]{
// }
}
@mixin projetListe{
@mixin nodeListe{
>header{
>h2{
font-size: 5em;
}
}
// only with images, title overlap the image
div.field_artiste_s_invite_s.field-items.multiple{
// display: flex;
// flex-direction: row;
.field-item{
display: inline-block;
&:not(:last-of-type):after{
content: ", ";
}
}
}
&.has-image{
>header{
>h2{
@@ -275,6 +272,33 @@ header[role="banner"]{
}
}
@mixin projetListe{
@include nodeListe();
div.field_artiste_s_invite_s.field-items.multiple{
// display: flex;
// flex-direction: row;
.field-item{
display: inline-block;
&:not(:last-of-type):after{
content: ", ";
}
}
}
}
@mixin evenementListe{
@include nodeListe();
>header{
.field_dates{
font-size: 3em;
}
}
}
// _____ _____ __ ____ ___ _ ____
// |_ _/ _ \ \ / / / ___/ _ \| | / ___|
// | || | | \ \ /\ / / | | | | | | | \___ \
@@ -300,18 +324,15 @@ div.layout.layout--twocol-section--50-50{
article.node-type-projet{
@include projetListe();
}
article.node-type-evenement{
@include evenementListe();
}
}
}
}
// ____ _ _
// | _ \ _ __ ___ (_) ___| |_
// | |_) | '__/ _ \| |/ _ \ __|
// | __/| | | (_) | | __/ |_
// |_| |_| \___// |\___|\__|
// |__/
article.node-type-projet.view-mode-full{
@mixin nodefull{
div.cols{
display: flex;
flex-direction: row;
@@ -325,17 +346,20 @@ article.node-type-projet.view-mode-full{
z-index: 10;
// padding-bottom: 5em;
// box-sizing: border-box;
>h2.node-title{
position: relative;
font-size: 12em;
margin: 0;
z-index: 100;
width: 205%;//calc(50% - $colsgap / 2);
pointer-events: none;
&.leshed-svg-export-target{
pointer-events: painted;
}
>header{
transform-origin: 0 0;
width: 205%;//calc(50% - $colsgap / 2);
z-index: 100;
pointer-events: none;
>h2.node-title{
position: relative;
font-size: 12em;
margin: 0;
&.leshed-svg-export-target{
pointer-events: painted;
}
}
}
.field_artiste_s_invite_s{
@@ -459,7 +483,78 @@ article.node-type-projet.view-mode-full{
}
}
}
}
// ____ _ _
// | _ \ _ __ ___ (_) ___| |_
// | |_) | '__/ _ \| |/ _ \ __|
// | __/| | | (_) | | __/ |_
// |_| |_| \___// |\___|\__|
// |__/
article.node-type-projet.view-mode-full{
@include nodefull();
}
// _____ _
// | ____|_ _____ _ __ ___ _ __ ___ ___ _ __ | |_
// | _| \ \ / / _ \ '_ \ / _ \ '_ ` _ \ / _ \ '_ \| __|
// | |___ \ V / __/ | | | __/ | | | | | __/ | | | |_
// |_____| \_/ \___|_| |_|\___|_| |_| |_|\___|_| |_|\__|
article.node-type-evenement.view-mode-full{
@include nodefull();
.field_dates.digit-dates{
transform-origin: 0 0;
time{
display: grid;
grid-template-columns: 18em 7em;
grid-template-rows: auto auto;
grid-template-areas:
"day month"
"day year";
// align-items: baseline;
span.date-day{
grid-area: day;
font-size: 18em;
}
span.date-month{
grid-area: month;
align-self: end;
}
span.date-year{
grid-area: year;
}
span.date-month,
span.date-year{
font-size: 6em;
}
}
}
}
// __ ___ _ _ _
// \ \ / (_) _____ __ / \ _ __ ___| |__ (_)_ _____ ___
// \ \ / /| |/ _ \ \ /\ / / / _ \ | '__/ __| '_ \| \ \ / / _ \/ __|
// \ V / | | __/\ V V / / ___ \| | | (__| | | | |\ V / __/\__ \
// \_/ |_|\___| \_/\_/ /_/ \_\_| \___|_| |_|_| \_/ \___||___/
@mixin views-archives{
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: 2em;
gap: $colsgap;
div.views-row{
flex: 1 0 calc(25% - $colsgap);
width: calc(25% - $colsgap);
}
}
// __ ___ _ _ _ ____ _ _
@@ -469,22 +564,36 @@ article.node-type-projet.view-mode-full{
// \_/ |_|\___| \_/\_/ |___/ /_/ \_\_| \___|_| |_|_| \_/ \___||___/ |_| |_| \___// |\___|\__|
// |__/
div.views-archives-projets{
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: 2em;
gap: $colsgap;
div.views-row{
flex: 1 0 calc(25% - $colsgap);
width: calc(25% - $colsgap);
article.node-type-projet.view-mode-tableau_liste{
@include views-archives();
@include projetListe();
>header{
>h2{
font-size: 3em;
}
article.node-type-projet.view-mode-tableau_liste{
@include projetListe();
>header{
>h2{
font-size: 3em;
}
}
}
}
// __ ___ _ _ _ _____ _
// \ \ / (_) _____ _____ / \ _ __ ___| |__ (_)_ _____ ___ | ____|_ _____ _ __ ___ _ __ ___ ___ _ __ | |_ ___
// \ \ / /| |/ _ \ \ /\ / / __| / _ \ | '__/ __| '_ \| \ \ / / _ \/ __| | _| \ \ / / _ \ '_ \ / _ \ '_ ` _ \ / _ \ '_ \| __/ __|
// \ V / | | __/\ V V /\__ \ / ___ \| | | (__| | | | |\ V / __/\__ \ | |___ \ V / __/ | | | __/ | | | | | __/ | | | |_\__ \
// \_/ |_|\___| \_/\_/ |___/ /_/ \_\_| \___|_| |_|_| \_/ \___||___/ |_____| \_/ \___|_| |_|\___|_| |_| |_|\___|_| |_|\__|___/
div.views-archives-evenementskorganizer {
@include views-archives();
article.node-type-evenement.view-mode-tableau_liste{
@include evenementListe();
>header{
>h2{
font-size: 3em;
}
}
}
}
+24
View File
@@ -111,6 +111,26 @@ function leshed_preprocess_field(&$variables) {
$variables["attributes"]['class'] = [];
}
$variables['attributes']['class'][] = $variables['field_name'];
if ($variables['field_name'] === 'field_dates') {
$field_items = $variables['element']['#items'];
foreach ($variables['items'] as $delta => &$item) {
$field_item = $field_items[$delta];
foreach (['start_date', 'end_date'] as $key) {
/** @var \Drupal\Core\Datetime\DrupalDateTime|null $date */
$date = $field_item->{$key};
if ($date instanceof \Drupal\Core\Datetime\DrupalDateTime) {
$item[$key] = [
'year' => $date->format('y'),
'month' => $date->format('m'),
'month_name' => $date->format('F'),
'day' => $date->format('d'),
'iso' => $date->format('Y-m-d\TH:i:s') . 'Z',
];
}
}
}
}
}
function leshed_preprocess_links__language_block(&$variables){
@@ -119,3 +139,7 @@ function leshed_preprocess_links__language_block(&$variables){
$variables['links'][$langcode]['link']['#title'] = $langcode;
}
}
function leshed_preprocess_time(&$variables){
}
@@ -0,0 +1,62 @@
{#
/**
* @file
* Theme override for field_dates on "evenement" nodes.
*
* Splits the daterange value into separate year/month/day parts (see
* leshed_preprocess_field() in leshed.theme) so start/end can be styled
* independently instead of relying on the default <time> rendering.
*
* Available on each item, in addition to the default `content`/`attributes`:
* - item.start_date: { year, month, month_name, day } or unset if empty.
* - item.end_date: { year, month, month_name, day } or unset if empty.
*
* @see template_preprocess_field()
* @see leshed_preprocess_field()
*
* @ingroup themeable
*/
#}
{%
set title_classes = [
label_display == 'visually_hidden' ? 'visually-hidden',
]
%}
{% macro date_parts(date) %}
<time datetime="{{ date.iso }}">
<span class="date-part date-day">{{ date.day }}</span>
<span class="date-part date-month">{{ date.month }}</span>
<span class="date-part date-year">{{ date.year }}</span>
</time>
{% endmacro %}
{% import _self as dates %}
{% if label_hidden %}
{% for item in items %}
<div{{ attributes.addClass("field-item", "digit-dates") }}>
{% if item.start_date %}
{{ dates.date_parts(item.start_date) }}
{% endif %}
{% if item.end_date and (item.end_date.year != item.start_date.year or item.end_date.day != item.start_date.day) %}
<span class="date-sep"></span>
{{ dates.date_parts(item.end_date) }}
{% endif %}
</div>
{% endfor %}
{% else %}
<div{{ attributes }}>
<div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div>
{% for item in items %}
<div{{ item.attributes.addClass("field-item", "field-dates") }}>
{% if item.start_date %}
{{ dates.date_parts(item.start_date) }}
{% endif %}
{% if item.end_date and (item.end_date.year != item.start_date.year or item.end_date.day != item.start_date.day) %}
<span class="date-sep"></span>
{{ dates.date_parts(item.end_date) }}
{% endif %}
</div>
{% endfor %}
</div>
{% endif %}
@@ -0,0 +1,83 @@
{#
/**
* @file
* Default theme implementation 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'.
*
* @see template_preprocess_node()
*
* @ingroup themeable
*/
#}
<article{{ attributes }}>
<div class="cols">
<div class="col left">
<header>
<h2{{ title_attributes.addClass('node-title') }}>
{{ label }}
</h2>
{{ content.field_dates }}
</header>
{{ content|without('field_images')|without('field_dates') }}
<div class="spacer"></div>
</div>
<div class="col right">
{{ content.field_images }}
</div>
</div>
</article>
@@ -0,0 +1,90 @@
{#
/**
* @file
* Default theme implementation 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'.
*
* @see template_preprocess_node()
*
* @ingroup themeable
*/
#}
{#
{% if content.field_images.getvalue|length %}
{% set attributes = attributes.addClass('has-image') %}
{% endif %} #}
<article{{ attributes }}>
{# {{ title_prefix }} #}
{# {% if label and not page %} #}
<header>
{{ content.field_dates }}
<h2{{ title_attributes }}>
<a href="{{ url }}" rel="bookmark">{{ label }}</a>
</h2>
{{ content.field_images }}
</header>
{# {% endif %} #}
{# {{ title_suffix }} #}
<div{{ content_attributes }}>
{{ content|without('field_images')|without('field_dates') }}
</div>
</article>
@@ -0,0 +1,90 @@
{#
/**
* @file
* Default theme implementation 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'.
*
* @see template_preprocess_node()
*
* @ingroup themeable
*/
#}
{#
{% if content.field_images.getvalue|length %}
{% set attributes = attributes.addClass('has-image') %}
{% endif %} #}
<article{{ attributes }}>
{# {{ title_prefix }} #}
{# {% if label and not page %} #}
<header>
{{ content.field_dates }}
<h2{{ title_attributes }}>
<a href="{{ url }}" rel="bookmark">{{ label }}</a>
</h2>
{{ content.field_images }}
</header>
{# {% endif %} #}
{# {{ title_suffix }} #}
<div{{ content_attributes }}>
{{ content|without('field_images')|without('field_dates') }}
</div>
</article>
@@ -66,9 +66,11 @@
<div class="cols">
<div class="col left">
<h2{{ title_attributes.addClass('node-title') }}>
{{ label }}
</h2>
<header>
<h2{{ title_attributes.addClass('node-title') }}>
{{ label }}
</h2>
</header>
{{ content|without('field_images') }}
<div class="spacer"></div>
</div>
@@ -0,0 +1,22 @@
{#
/**
* @file
* Default theme implementation for a date / time element.
*
* Available variables
* - timestamp: (optional) A UNIX timestamp for the datetime attribute. If the
* datetime cannot be represented as a UNIX timestamp, use a valid datetime
* attribute value in attributes.datetime.
* - text: (optional) The content to display within the <time> element.
* Defaults to a human-readable representation of the timestamp value or the
* datetime attribute value using DateFormatter::format().
* - attributes: (optional) HTML attributes to apply to the <time> element.
* A datetime attribute in 'attributes' overrides the 'timestamp'. To
* create a valid datetime attribute value from a UNIX timestamp, use
* DateFormatter::format() with one of the predefined 'html_*' formats.
*
* @see template_preprocess_time()
* @see https://www.w3.org/TR/html5-author/the-time-element.html#attr-time-datetime
*/
#}
<time{{ attributes }}>{{ text }}</time>