+ * Updated version of $element.
+ */
+function dpl_admin_datetime_set_format(array $element): array {
+ // Remove seconds in browsers that support HTML5 type=date.
+ $element['time']['#attributes']['step'] = 60;
+ return $element;
+}
diff --git a/web/modules/custom/dpl_event/dpl_event.module b/web/modules/custom/dpl_event/dpl_event.module
index 277b748a4..8cde24d22 100644
--- a/web/modules/custom/dpl_event/dpl_event.module
+++ b/web/modules/custom/dpl_event/dpl_event.module
@@ -8,7 +8,6 @@
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\FieldableEntityInterface;
-use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\dpl_event\EventState;
use Drupal\file\Entity\File;
@@ -121,20 +120,6 @@ function dpl_event_set_occurred_callback(JobSchedule $job): void {
}
}
-/**
- * Implements hook_form_node_event_form_alter().
- */
-function dpl_event_form_node_event_form_alter(array &$form, FormStateInterface $form_state, string $form_id): void {
- // Use the generic "Access" value as the default for the first ticket
- // category when creating events.
- if (isset($form["field_ticket_categories"]["widget"][0]["subform"]["field_ticket_category_name"]["widget"][0]["value"])) {
- $form["field_ticket_categories"]["widget"][0]["subform"]["field_ticket_category_name"]["widget"][0]["value"]["#default_value"] = t('Access', [], ['context' => 'dpl_event']);
- }
- else {
- throw new DomainException("Unable to locate name field for first ticket category. Cannot set default value.");
- }
-}
-
/**
* Implements hook_preprocess_HOOK() for field templates.
*
diff --git a/web/modules/custom/dpl_example_content/content/eventseries/2ce9d9b0-7f10-4a17-9a5e-383d36c1ed93.yml b/web/modules/custom/dpl_example_content/content/eventseries/2ce9d9b0-7f10-4a17-9a5e-383d36c1ed93.yml
new file mode 100644
index 000000000..1280afca1
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/eventseries/2ce9d9b0-7f10-4a17-9a5e-383d36c1ed93.yml
@@ -0,0 +1,150 @@
+_meta:
+ version: '1.0'
+ entity_type: eventseries
+ uuid: 2ce9d9b0-7f10-4a17-9a5e-383d36c1ed93
+ bundle: default
+ default_langcode: en
+ depends:
+ ddd9453d-56bc-4ad1-b10d-1e9615fe2c00: eventinstance
+ 0fa7245a-3434-4d96-9793-a1848a22d37a: taxonomy_term
+ a0176f8c-bb7e-4f5a-bf23-b48cd8bab05f: media
+default:
+ revision_uid:
+ -
+ target_id: 1
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ title:
+ -
+ value: 'Juleballet - Nøddeknækkeren'
+ recur_type:
+ -
+ value: custom
+ consecutive_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ end_time: '11:30 pm'
+ duration: 5
+ duration_units: minute
+ buffer: 0
+ buffer_units: minute
+ daily_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ duration: 900
+ end_time: '08:00 am'
+ duration_or_end_time: duration
+ weekly_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ duration: 900
+ end_time: '08:00 am'
+ duration_or_end_time: duration
+ days: ''
+ monthly_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ duration: 900
+ end_time: '08:00 am'
+ duration_or_end_time: duration
+ days: ''
+ type: ''
+ day_occurrence: ''
+ day_of_month: ''
+ yearly_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ duration: 900
+ end_time: '08:00 am'
+ duration_or_end_time: duration
+ days: ''
+ type: ''
+ day_occurrence: ''
+ day_of_month: ''
+ year_interval: 1
+ months: ''
+ custom_date:
+ -
+ value: '2030-02-23T09:00:00'
+ end_value: '2030-02-23T14:00:00'
+ created:
+ -
+ value: 1706868456
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: '| DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/user/login'
+ event_instances:
+ -
+ entity: ddd9453d-56bc-4ad1-b10d-1e9615fe2c00
+ field_categories:
+ -
+ entity: 0fa7245a-3434-4d96-9793-a1848a22d37a
+ field_event_address:
+ -
+ langcode: en
+ country_code: DK
+ locality: Aarhus
+ postal_code: '8000'
+ address_line1: 'Kampmanns Plads 2'
+ field_event_image:
+ -
+ entity: a0176f8c-bb7e-4f5a-bf23-b48cd8bab05f
+ field_event_place:
+ -
+ value: 'Hovedbibliotek '
+ field_event_state:
+ -
+ value: Active
+ field_ticket_categories:
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: e8f08fd9-e09b-4e37-ba63-055cc7f30f29
+ bundle: event_ticket_category
+ default_langcode: en
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1706868456
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_ticket_category_name:
+ -
+ value: Standard
+ field_ticket_category_price:
+ -
+ value: '100.00'
diff --git a/web/modules/custom/dpl_example_content/content/eventseries/c8177097-1438-493e-8177-e8ef968cc133.yml b/web/modules/custom/dpl_example_content/content/eventseries/c8177097-1438-493e-8177-e8ef968cc133.yml
index b851a6e43..4b312711d 100644
--- a/web/modules/custom/dpl_example_content/content/eventseries/c8177097-1438-493e-8177-e8ef968cc133.yml
+++ b/web/modules/custom/dpl_example_content/content/eventseries/c8177097-1438-493e-8177-e8ef968cc133.yml
@@ -5,10 +5,17 @@ _meta:
bundle: default
default_langcode: en
depends:
- a3a4aa80-7380-4a87-aa02-a0ba240410ba: eventinstance
+ cb0b18d2-eb87-4dcd-ae98-efd0e657473a: eventinstance
+ f457c4c2-dc28-45cd-9b6e-fda4248d9d45: taxonomy_term
618e176a-a45a-4c36-a197-664230aa0a34: media
dc33677f-8894-4717-b34b-d985f6ad875f: media
65432ee1-43f1-4130-9565-5683467d4b5a: media
+ 1006441f-bb39-43b5-8c08-1a79344abf8b: taxonomy_term
+ 53133c2e-1023-43a9-baf2-64a5081eea0f: taxonomy_term
+ 190beb00-d5af-4c9a-be8d-65a646b37bbb: taxonomy_term
+ 725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4: taxonomy_term
+ ec76c707-898d-4dfd-8cd2-e258aef1d6dd: taxonomy_term
+ 0502836d-0f7b-4b21-9371-c40ae9e01495: taxonomy_term
default:
revision_uid:
-
@@ -101,7 +108,10 @@ default:
href: 'http://dapple-cms.docker/user/login'
event_instances:
-
- entity: a3a4aa80-7380-4a87-aa02-a0ba240410ba
+ entity: cb0b18d2-eb87-4dcd-ae98-efd0e657473a
+ field_categories:
+ -
+ entity: f457c4c2-dc28-45cd-9b6e-fda4248d9d45
field_event_address:
-
langcode: en
@@ -112,7 +122,7 @@ default:
field_event_description:
-
value: 'Foreningen for Integreret Moderne Dans arbejder med at udvide normalitetsbegrebet i scenekunsten. For hvad er normalt? Rosenreglen og Mødrenes hus. I 2022 udgav hun også den stærkt politiske digtsamling Jeg vil have en statsminister.
'
- format: basic
+ format: limited
field_event_image:
-
entity: 618e176a-a45a-4c36-a197-664230aa0a34
@@ -263,6 +273,19 @@ default:
field_event_state:
-
value: Active
+ field_tags:
+ -
+ entity: 1006441f-bb39-43b5-8c08-1a79344abf8b
+ -
+ entity: 53133c2e-1023-43a9-baf2-64a5081eea0f
+ -
+ entity: 190beb00-d5af-4c9a-be8d-65a646b37bbb
+ -
+ entity: 725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4
+ -
+ entity: ec76c707-898d-4dfd-8cd2-e258aef1d6dd
+ -
+ entity: 0502836d-0f7b-4b21-9371-c40ae9e01495
field_ticket_categories:
-
entity:
diff --git a/web/modules/custom/dpl_example_content/content/eventseries/fb8b4d62-de14-4620-9ca1-be60cab74a65.yml b/web/modules/custom/dpl_example_content/content/eventseries/fb8b4d62-de14-4620-9ca1-be60cab74a65.yml
new file mode 100644
index 000000000..3f7b1a3d4
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/eventseries/fb8b4d62-de14-4620-9ca1-be60cab74a65.yml
@@ -0,0 +1,150 @@
+_meta:
+ version: '1.0'
+ entity_type: eventseries
+ uuid: fb8b4d62-de14-4620-9ca1-be60cab74a65
+ bundle: default
+ default_langcode: en
+ depends:
+ ebf61b95-99a3-4263-a2e5-76030362cfa2: eventinstance
+ 807e6053-86ed-4dce-b6a9-a48b566b5910: taxonomy_term
+ d6d67fd2-775c-46e7-a1bf-6af46290a5c8: media
+default:
+ revision_uid:
+ -
+ target_id: 1
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ title:
+ -
+ value: 'Genbrugsstof fremfor plastik'
+ recur_type:
+ -
+ value: custom
+ consecutive_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ end_time: '11:30 pm'
+ duration: 5
+ duration_units: minute
+ buffer: 0
+ buffer_units: minute
+ daily_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ duration: 900
+ end_time: '08:00 am'
+ duration_or_end_time: duration
+ weekly_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ duration: 900
+ end_time: '08:00 am'
+ duration_or_end_time: duration
+ days: ''
+ monthly_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ duration: 900
+ end_time: '08:00 am'
+ duration_or_end_time: duration
+ days: ''
+ type: ''
+ day_occurrence: ''
+ day_of_month: ''
+ yearly_recurring_date:
+ -
+ value: ''
+ end_value: ''
+ time: '08:00 am'
+ duration: 900
+ end_time: '08:00 am'
+ duration_or_end_time: duration
+ days: ''
+ type: ''
+ day_occurrence: ''
+ day_of_month: ''
+ year_interval: 1
+ months: ''
+ custom_date:
+ -
+ value: '2030-03-16T08:30:00'
+ end_value: '2030-03-16T09:30:00'
+ created:
+ -
+ value: 1706869918
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: '| DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/user/login'
+ event_instances:
+ -
+ entity: ebf61b95-99a3-4263-a2e5-76030362cfa2
+ field_categories:
+ -
+ entity: 807e6053-86ed-4dce-b6a9-a48b566b5910
+ field_event_address:
+ -
+ langcode: en
+ country_code: DK
+ locality: Aarhus
+ postal_code: '8000'
+ address_line1: 'Kampmanns Plads 2'
+ field_event_image:
+ -
+ entity: d6d67fd2-775c-46e7-a1bf-6af46290a5c8
+ field_event_place:
+ -
+ value: Hovedbibliotek
+ field_event_state:
+ -
+ value: Active
+ field_ticket_categories:
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: d52f7fa6-b50c-43aa-9eb3-74d3fb9b8c5a
+ bundle: event_ticket_category
+ default_langcode: en
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1706869918
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_ticket_category_name:
+ -
+ value: Standard
+ field_ticket_category_price:
+ -
+ value: '0.00'
diff --git a/web/modules/custom/dpl_example_content/content/file/24244298-ff4d-4662-bc7f-5b9aa529f89e.yml b/web/modules/custom/dpl_example_content/content/file/24244298-ff4d-4662-bc7f-5b9aa529f89e.yml
new file mode 100644
index 000000000..7f8383a1c
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/file/24244298-ff4d-4662-bc7f-5b9aa529f89e.yml
@@ -0,0 +1,27 @@
+_meta:
+ version: '1.0'
+ entity_type: file
+ uuid: 24244298-ff4d-4662-bc7f-5b9aa529f89e
+ default_langcode: en
+default:
+ uid:
+ -
+ target_id: 1
+ filename:
+ -
+ value: ed-robertson-eeSdJfLfx1A-unsplash.jpg
+ uri:
+ -
+ value: 'public://2024-02/ed-robertson-eeSdJfLfx1A-unsplash.jpg'
+ filemime:
+ -
+ value: image/jpeg
+ filesize:
+ -
+ value: 90482
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1706868717
diff --git a/web/modules/custom/dpl_example_content/content/file/50b4d50b-9c75-4698-b803-a125b46daaac.yml b/web/modules/custom/dpl_example_content/content/file/50b4d50b-9c75-4698-b803-a125b46daaac.yml
new file mode 100644
index 000000000..a08dc2fd9
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/file/50b4d50b-9c75-4698-b803-a125b46daaac.yml
@@ -0,0 +1,27 @@
+_meta:
+ version: '1.0'
+ entity_type: file
+ uuid: 50b4d50b-9c75-4698-b803-a125b46daaac
+ default_langcode: en
+default:
+ uid:
+ -
+ target_id: 1
+ filename:
+ -
+ value: inaki-del-olmo-NIJuEQw0RKg-unsplash.jpg
+ uri:
+ -
+ value: 'public://2024-01/inaki-del-olmo-NIJuEQw0RKg-unsplash_0.jpg'
+ filemime:
+ -
+ value: image/jpeg
+ filesize:
+ -
+ value: 109223
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1705564087
diff --git a/web/modules/custom/dpl_example_content/content/file/7fb4d332-81ef-4dc0-af9a-dfcd29ecf367.yml b/web/modules/custom/dpl_example_content/content/file/7fb4d332-81ef-4dc0-af9a-dfcd29ecf367.yml
new file mode 100644
index 000000000..f15fd531f
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/file/7fb4d332-81ef-4dc0-af9a-dfcd29ecf367.yml
@@ -0,0 +1,27 @@
+_meta:
+ version: '1.0'
+ entity_type: file
+ uuid: 7fb4d332-81ef-4dc0-af9a-dfcd29ecf367
+ default_langcode: en
+default:
+ uid:
+ -
+ target_id: 1
+ filename:
+ -
+ value: janko-ferlic-sfL_QOnmy00-unsplash.jpg
+ uri:
+ -
+ value: 'public://2024-01/janko-ferlic-sfL_QOnmy00-unsplash_0.jpg'
+ filemime:
+ -
+ value: image/jpeg
+ filesize:
+ -
+ value: 74588
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1705564087
diff --git a/web/modules/custom/dpl_example_content/content/file/ed-robertson-eeSdJfLfx1A-unsplash.jpg b/web/modules/custom/dpl_example_content/content/file/ed-robertson-eeSdJfLfx1A-unsplash.jpg
new file mode 100644
index 000000000..7a71f641e
Binary files /dev/null and b/web/modules/custom/dpl_example_content/content/file/ed-robertson-eeSdJfLfx1A-unsplash.jpg differ
diff --git a/web/modules/custom/dpl_example_content/content/file/ed301960-e40f-42b5-9229-4ac20fd07a7e.yml b/web/modules/custom/dpl_example_content/content/file/ed301960-e40f-42b5-9229-4ac20fd07a7e.yml
new file mode 100644
index 000000000..f0875c4ea
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/file/ed301960-e40f-42b5-9229-4ac20fd07a7e.yml
@@ -0,0 +1,27 @@
+_meta:
+ version: '1.0'
+ entity_type: file
+ uuid: ed301960-e40f-42b5-9229-4ac20fd07a7e
+ default_langcode: en
+default:
+ uid:
+ -
+ target_id: 1
+ filename:
+ -
+ value: markus-spiske-i5tesTFPBjw-unsplash.jpg
+ uri:
+ -
+ value: 'public://2024-02/markus-spiske-i5tesTFPBjw-unsplash.jpg'
+ filemime:
+ -
+ value: image/jpeg
+ filesize:
+ -
+ value: 62219
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1706869818
diff --git a/web/modules/custom/dpl_example_content/content/file/inaki-del-olmo-NIJuEQw0RKg-unsplash.jpg b/web/modules/custom/dpl_example_content/content/file/inaki-del-olmo-NIJuEQw0RKg-unsplash.jpg
new file mode 100644
index 000000000..142f1081a
Binary files /dev/null and b/web/modules/custom/dpl_example_content/content/file/inaki-del-olmo-NIJuEQw0RKg-unsplash.jpg differ
diff --git a/web/modules/custom/dpl_example_content/content/file/janko-ferlic-sfL_QOnmy00-unsplash.jpg b/web/modules/custom/dpl_example_content/content/file/janko-ferlic-sfL_QOnmy00-unsplash.jpg
new file mode 100644
index 000000000..54ba86745
Binary files /dev/null and b/web/modules/custom/dpl_example_content/content/file/janko-ferlic-sfL_QOnmy00-unsplash.jpg differ
diff --git a/web/modules/custom/dpl_example_content/content/file/markus-spiske-i5tesTFPBjw-unsplash.jpg b/web/modules/custom/dpl_example_content/content/file/markus-spiske-i5tesTFPBjw-unsplash.jpg
new file mode 100644
index 000000000..0e73da82c
Binary files /dev/null and b/web/modules/custom/dpl_example_content/content/file/markus-spiske-i5tesTFPBjw-unsplash.jpg differ
diff --git a/web/modules/custom/dpl_example_content/content/media/7b9d1894-7f9a-4f96-a7dc-efa3af5fc902.yml b/web/modules/custom/dpl_example_content/content/media/7b9d1894-7f9a-4f96-a7dc-efa3af5fc902.yml
new file mode 100644
index 000000000..2746017f7
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/media/7b9d1894-7f9a-4f96-a7dc-efa3af5fc902.yml
@@ -0,0 +1,42 @@
+_meta:
+ version: '1.0'
+ entity_type: media
+ uuid: 7b9d1894-7f9a-4f96-a7dc-efa3af5fc902
+ bundle: image
+ default_langcode: da
+ depends:
+ 50b4d50b-9c75-4698-b803-a125b46daaac: file
+default:
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ name:
+ -
+ value: inaki-del-olmo-NIJuEQw0RKg-unsplash.jpg
+ created:
+ -
+ value: 1705564087
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: '| DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/user/login'
+ field_media_image:
+ -
+ entity: 50b4d50b-9c75-4698-b803-a125b46daaac
+ alt: Library
+ title: ''
+ width: 640
+ height: 427
diff --git a/web/modules/custom/dpl_example_content/content/media/a0176f8c-bb7e-4f5a-bf23-b48cd8bab05f.yml b/web/modules/custom/dpl_example_content/content/media/a0176f8c-bb7e-4f5a-bf23-b48cd8bab05f.yml
new file mode 100644
index 000000000..1492fd4e3
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/media/a0176f8c-bb7e-4f5a-bf23-b48cd8bab05f.yml
@@ -0,0 +1,42 @@
+_meta:
+ version: '1.0'
+ entity_type: media
+ uuid: a0176f8c-bb7e-4f5a-bf23-b48cd8bab05f
+ bundle: image
+ default_langcode: da
+ depends:
+ 24244298-ff4d-4662-bc7f-5b9aa529f89e: file
+default:
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ name:
+ -
+ value: ed-robertson-eeSdJfLfx1A-unsplash.jpg
+ created:
+ -
+ value: 1706868717
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: '| DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/user/login'
+ field_media_image:
+ -
+ entity: 24244298-ff4d-4662-bc7f-5b9aa529f89e
+ alt: Books
+ title: ''
+ width: 640
+ height: 427
diff --git a/web/modules/custom/dpl_example_content/content/media/a6a77786-07db-48d8-98ff-3bda54f231bf.yml b/web/modules/custom/dpl_example_content/content/media/a6a77786-07db-48d8-98ff-3bda54f231bf.yml
new file mode 100644
index 000000000..ba14d74d6
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/media/a6a77786-07db-48d8-98ff-3bda54f231bf.yml
@@ -0,0 +1,42 @@
+_meta:
+ version: '1.0'
+ entity_type: media
+ uuid: a6a77786-07db-48d8-98ff-3bda54f231bf
+ bundle: image
+ default_langcode: da
+ depends:
+ 7fb4d332-81ef-4dc0-af9a-dfcd29ecf367: file
+default:
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ name:
+ -
+ value: janko-ferlic-sfL_QOnmy00-unsplash.jpg
+ created:
+ -
+ value: 1705564087
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: '| DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/user/login'
+ field_media_image:
+ -
+ entity: 7fb4d332-81ef-4dc0-af9a-dfcd29ecf367
+ alt: Library
+ title: ''
+ width: 640
+ height: 592
diff --git a/web/modules/custom/dpl_example_content/content/media/d6d67fd2-775c-46e7-a1bf-6af46290a5c8.yml b/web/modules/custom/dpl_example_content/content/media/d6d67fd2-775c-46e7-a1bf-6af46290a5c8.yml
new file mode 100644
index 000000000..1ae1aec7c
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/media/d6d67fd2-775c-46e7-a1bf-6af46290a5c8.yml
@@ -0,0 +1,42 @@
+_meta:
+ version: '1.0'
+ entity_type: media
+ uuid: d6d67fd2-775c-46e7-a1bf-6af46290a5c8
+ bundle: image
+ default_langcode: da
+ depends:
+ ed301960-e40f-42b5-9229-4ac20fd07a7e: file
+default:
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ name:
+ -
+ value: markus-spiske-i5tesTFPBjw-unsplash.jpg
+ created:
+ -
+ value: 1706869818
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: '| DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/user/login'
+ field_media_image:
+ -
+ entity: ed301960-e40f-42b5-9229-4ac20fd07a7e
+ alt: Recycling
+ title: ''
+ width: 640
+ height: 960
diff --git a/web/modules/custom/dpl_example_content/content/node/2cd0fe5e-4159-4452-86aa-e1a1ac8db4a1.yml b/web/modules/custom/dpl_example_content/content/node/2cd0fe5e-4159-4452-86aa-e1a1ac8db4a1.yml
index 2f18556b5..ffd8bd98e 100644
--- a/web/modules/custom/dpl_example_content/content/node/2cd0fe5e-4159-4452-86aa-e1a1ac8db4a1.yml
+++ b/web/modules/custom/dpl_example_content/content/node/2cd0fe5e-4159-4452-86aa-e1a1ac8db4a1.yml
@@ -5,11 +5,18 @@ _meta:
bundle: article
default_langcode: da
depends:
+ 92033694-15ac-4d9e-b275-ddfd18e48d9f: taxonomy_term
aba3cea8-cee5-42c1-a152-e30c2ab135e2: media
d97a25fd-a6ae-48b9-9a1a-7aec5372688e: media
eef50571-39dc-461a-96ff-b6b7180ade61: media
dc33677f-8894-4717-b34b-d985f6ad875f: media
f0204f0b-1f63-4c76-bb67-e3f7489ee392: media
+ 1006441f-bb39-43b5-8c08-1a79344abf8b: taxonomy_term
+ 53133c2e-1023-43a9-baf2-64a5081eea0f: taxonomy_term
+ 190beb00-d5af-4c9a-be8d-65a646b37bbb: taxonomy_term
+ 725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4: taxonomy_term
+ ec76c707-898d-4dfd-8cd2-e258aef1d6dd: taxonomy_term
+ 0502836d-0f7b-4b21-9371-c40ae9e01495: taxonomy_term
default:
revision_uid:
-
@@ -41,6 +48,9 @@ default:
attributes:
name: title
content: 'Jesper Stein vinder Læsernes Bogpris for Rampen | DPL CMS'
+ field_categories:
+ -
+ entity: 92033694-15ac-4d9e-b275-ddfd18e48d9f
field_override_author:
-
value: 'Lene Kuhlmann Frandsen '
@@ -339,3 +349,16 @@ default:
field_subtitle:
-
value: 'Jesper Stein har begået en hudløst ærlig og tankevækkende skildring af en skilsmisseramt familie. En selvbiografisk roman, som har ramt læserne i hjertet.'
+ field_tags:
+ -
+ entity: 1006441f-bb39-43b5-8c08-1a79344abf8b
+ -
+ entity: 53133c2e-1023-43a9-baf2-64a5081eea0f
+ -
+ entity: 190beb00-d5af-4c9a-be8d-65a646b37bbb
+ -
+ entity: 725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4
+ -
+ entity: ec76c707-898d-4dfd-8cd2-e258aef1d6dd
+ -
+ entity: 0502836d-0f7b-4b21-9371-c40ae9e01495
diff --git a/web/modules/custom/dpl_example_content/content/node/982e0d87-f6b8-4b84-8de8-c8c8bcfef557.yml b/web/modules/custom/dpl_example_content/content/node/982e0d87-f6b8-4b84-8de8-c8c8bcfef557.yml
new file mode 100644
index 000000000..ca87fc235
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/node/982e0d87-f6b8-4b84-8de8-c8c8bcfef557.yml
@@ -0,0 +1,204 @@
+_meta:
+ version: '1.0'
+ entity_type: node
+ uuid: 982e0d87-f6b8-4b84-8de8-c8c8bcfef557
+ bundle: article
+ default_langcode: da
+ depends:
+ eef50571-39dc-461a-96ff-b6b7180ade61: media
+ d97a25fd-a6ae-48b9-9a1a-7aec5372688e: media
+ 7b9d1894-7f9a-4f96-a7dc-efa3af5fc902: media
+ a6a77786-07db-48d8-98ff-3bda54f231bf: media
+ aba3cea8-cee5-42c1-a152-e30c2ab135e2: media
+default:
+ revision_uid:
+ -
+ target_id: 1
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ title:
+ -
+ value: 'Bibliotekarerne anbefaler læsning til den mørke tid'
+ created:
+ -
+ value: 1705495980
+ promote:
+ -
+ value: false
+ sticky:
+ -
+ value: false
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'Bibliotekarerne anbefaler læsning til den mørke tid | DPL CMS'
+ field_override_author:
+ -
+ value: 'Det Digitale Folkebibliotek'
+ field_paragraphs:
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: 7004a7cc-fdc8-442b-951c-fd394030cbda
+ bundle: medias
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1705496823
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_medias:
+ -
+ entity: eef50571-39dc-461a-96ff-b6b7180ade61
+ -
+ entity: d97a25fd-a6ae-48b9-9a1a-7aec5372688e
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: 6555217b-0bbc-4347-bb3e-32f856afe163
+ bundle: text_body
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1705495980
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_body:
+ -
+ value: 'En overset perle:
Hvis du bankede på min dør af Patrizia Cavalli
Hendes fanbase tæller Olga Ravn, Elsa Morante og Giorgio Agamben. Lillian Munk-Rösing er ifølge sin anmeldelse nyforelsket i hende. Hvem spørger du? Den for de fleste danskere hidtil ukendte italienske poesi-stjerne Patrizia Cavalli, der nyligt er udkommet på dansk i udvalg fra Forlaget Kronstork.
Patrizia Cavalli (1947-2022) skriver friskt og sensuelt om sin italienske hverdag med alt hvad det indebærer af pizza, katte, solbriller, stævnemøder, altopslugende begær og sporadisk dødsdrift. ”Mine digt vil helt sikkert ikke ændre verden” lyder det i et af digtene. Nej de vil de nok ikke. På sin vis er det hverdags-agtige digte, men Cavallis hverdag er bare 10.000 gange mere smægtende end din og min. Og som i alle gode digte er der selvfølgelig visdom at hente. Især af den pragmatiske slags som: ”Det er om dagen man skal drikke sig fuld // når kroppen stadig vil overraskes // af lys og bevægelse, // mens den stadig har energi nok // til at opfinde en katastrofe.” Vil man have en god november har Cavalli et særligt tip til netop denne måned. Man skal blot have følgende materialer klar: ”en formålsløs cykeltur // og ubeskæftigede læber at kysse.” Når november så er overstået og du sidder til et eller andet håbløst julearrangement kan du hente optimisme i dette lille digt: ”Åh, at spise mandariner som aldrig smager af død!”.
For flere poetiske lifehacks og lidt italiensk sanselighed til din hverdag: Læs Patrizia Cavalli!
/Benjamin
'
+ format: basic
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: 817a100f-107f-42be-8684-346b50cb237b
+ bundle: medias
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1705564074
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_medias:
+ -
+ entity: 7b9d1894-7f9a-4f96-a7dc-efa3af5fc902
+ -
+ entity: a6a77786-07db-48d8-98ff-3bda54f231bf
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: b0ea9863-8455-4b3f-b126-d48d15dc74bd
+ bundle: text_body
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1705496012
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_body:
+ -
+ value: 'En forunderlig læseoplevelse:
Detaljerne af Ia Genberg
Det er en forunderlig bog Ia Genberg har skrevet. En bog uden en egentlig intrige, men der sker bestemt en masse i løbet af bogens 156 sider.
Fortælleren er ramt af en febersygdom. Denne tilstand optræder som bogens ramme – sygdommen inspirerer den navnløse fortæller til at mindes 4 forskellige personer som alle har haft afgørende betydning for hende. Men som hun ikke mere har forbindelse til.
Johanna er den første – en kærlighedshistorie som spinder sig rundt om deres fælles interesse for litteratur. Johanna motiverer fortælleren til at forfølge drømmen om at skrive. Rodehovedet Niki er den næste. Hun drømmer også om at skrive, men producerer næppe en brugbar stavelse under deres relation. I stedet konsumeres uanede mængder te og hjemmelavet vin til deres konversationer. Niki afbryder relationer fra det ene øjeblik til det andet – og således også her.
Musikeren Alejandro er næste portræt – en sydlandsk orkan som kortvarigt er del af et lokalt band og sætter uudslettelige spor i fortællerens liv og erindring.
Sidste portræt viser sig at været et meget intenst portræt af fortællerens mor Birgitte. Birgitte udsættes for et overgreb i de tidlige teenageår og udvikler en tilbagetrukken personlighed domineret af permanent uro.
Det forunderlige er at fortælleren og disse 4 personer står lyslevende for læseren. Og måske især betydningen af deres indbyrdes relationer.
Sprogligt fremtræder siderne tætskrevne og den sparsomme direkte dialog er i reglen integreret i fortællingen. Men sproget er enkelt, klart og letlæst. En studie i identitetsdannelse og en lovprisning af hvor afgørende venskaber og fællesskaber er.
Jeg overdriver ikke når jeg siger at bogen er en helt særlig læseoplevelse.
/Kasper
'
+ format: basic
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: fc3a6f2e-3cc6-4873-a55c-7b437a3fc9bc
+ bundle: medias
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1705496927
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_medias:
+ -
+ entity: aba3cea8-cee5-42c1-a152-e30c2ab135e2
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: 7376d5a2-a58e-407b-b06b-6bed39287a53
+ bundle: text_body
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1705496052
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_body:
+ -
+ value: 'Fascinerende læsning:
Membraner af Chi Ta Wei
Chi Ta Wei´s lille fremtidsroman Membraner fra 1996 er på én gang en dystopi, en klimathriller og ikke mindst en queer roman, og den er fascinerende læsning.
Vi befinder os i en verden, hvor menneskeheden pga. den ødelagte tilværelse på landjorden har dannet et samfund i dybhavet.
Hovedpersonen Momo er 30 år og kosmetolog. Da menneskets største organ huden er truet, har hun opfundet en særlig membranhud, der gør hendes klinik meget efterspurgt. Denne ekstra hud ligger som et lag mellem omverdenen og den person, der bærer den og fungerer som en skanner, der gør Momo i stand til at sanse andre menneskers oplevelser og seksualitet. På denne måde mindskes behovet for direkte social kontakt med andre, da man til dels får dækket det behov gennem M-huden.
Momo blev som ganske lille angrebet af en virus, der medførte, at alle organer måtte erstattes af en donor på nær hjernen. Til at underholde Momo på hospitalet, får hun vennen Andy, der er en overnuttet androide, der meget ligner og tænker som Momo selv. Efter operationen forsvinder Andy og efterlader et stort savn hos Momo.
Et andet stort savn for Momo er fraværet af hendes mor. Et fravær der måske ikke er reelt, da følelsen af savn kan være inkorporeret i Momos hjerne, eftersom Momo i virkeligheden er et eksperiment for morens firma.
Bogen stiller en række spørgsmål – hvor lidt skal der være tilbage af et menneske, før man kan tale om at være sig selv, og hvornår bliver man en anden? Hvem er dreng og hvem er pige, og giver det mening at tale om to køn? Hvem er ægte og hvem er kunstigt skabt, og hvor langt vil vi gå i forhold til kunstig befrugtning og genetisk påvirkning? Er køn og seksualitet noget vi vælger? Er vores følelser ægte?
Bogen er smukt indbundet og den første udgivelse fra Taiwan, der er oversat til dansk her i 2023. Selvom fortællingen er kompleks, er sproget let og flydende. Jeg ser frem til at opleve Chi Ta-Wei på årets BogForum.
/Lasse
'
+ format: basic
+ field_show_override_author:
+ -
+ value: true
+ field_subtitle:
+ -
+ value: 'De læseglade bibliotekarer Benjamin, Lasse og Kasper anbefaler fremragende læsestof til dine mørke aftner.'
diff --git a/web/modules/custom/dpl_example_content/content/node/9cfd15df-32b4-4af9-b2da-56b039b5bf6b.yml b/web/modules/custom/dpl_example_content/content/node/9cfd15df-32b4-4af9-b2da-56b039b5bf6b.yml
new file mode 100644
index 000000000..079d46035
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/node/9cfd15df-32b4-4af9-b2da-56b039b5bf6b.yml
@@ -0,0 +1,96 @@
+_meta:
+ version: '1.0'
+ entity_type: node
+ uuid: 9cfd15df-32b4-4af9-b2da-56b039b5bf6b
+ bundle: article
+ default_langcode: da
+default:
+ revision_uid:
+ -
+ target_id: 1
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ title:
+ -
+ value: '3 gode til godnat 3-6 år'
+ created:
+ -
+ value: 1706877153
+ promote:
+ -
+ value: false
+ sticky:
+ -
+ value: false
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: '3 gode til godnat 3-6 år | DPL CMS'
+ field_paragraphs:
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: 2daf7604-e4e1-439e-928e-01aa5f809c75
+ bundle: text_body
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1706877153
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_body:
+ -
+ value: 'En overset perle:
Hvis du bankede på min dør af Patrizia Cavalli
Hendes fanbase tæller Olga Ravn, Elsa Morante og Giorgio Agamben. Lillian Munk-Rösing er ifølge sin anmeldelse nyforelsket i hende. Hvem spørger du? Den for de fleste danskere hidtil ukendte italienske poesi-stjerne Patrizia Cavalli, der nyligt er udkommet på dansk i udvalg fra Forlaget Kronstork.
Patrizia Cavalli (1947-2022) skriver friskt og sensuelt om sin italienske hverdag med alt hvad det indebærer af pizza, katte, solbriller, stævnemøder, altopslugende begær og sporadisk dødsdrift. ”Mine digt vil helt sikkert ikke ændre verden” lyder det i et af digtene. Nej de vil de nok ikke. På sin vis er det hverdags-agtige digte, men Cavallis hverdag er bare 10.000 gange mere smægtende end din og min. Og som i alle gode digte er der selvfølgelig visdom at hente. Især af den pragmatiske slags som: ”Det er om dagen man skal drikke sig fuld // når kroppen stadig vil overraskes // af lys og bevægelse, // mens den stadig har energi nok // til at opfinde en katastrofe.” Vil man have en god november har Cavalli et særligt tip til netop denne måned. Man skal blot have følgende materialer klar: ”en formålsløs cykeltur // og ubeskæftigede læber at kysse.” Når november så er overstået og du sidder til et eller andet håbløst julearrangement kan du hente optimisme i dette lille digt: ”Åh, at spise mandariner som aldrig smager af død!”.
For flere poetiske lifehacks og lidt italiensk sanselighed til din hverdag: Læs Patrizia Cavalli!
/Rasben
'
+ format: basic
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: 92e41347-deb0-4df3-a005-2d2a230ef279
+ bundle: recommendation
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1706877483
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_image_position_right:
+ -
+ value: false
+ field_work_id:
+ -
+ value: 'work-of:870970-basis:136336282'
+ field_show_override_author:
+ -
+ value: false
+ field_subtitle:
+ -
+ value: 'De læseglade bibliotekaren Rasben anbefaler fremragende læsestof til dine mørke aftner.'
diff --git a/web/modules/custom/dpl_example_content/content/node/fd774222-4b22-4803-ae45-2d4e80d84fac.yml b/web/modules/custom/dpl_example_content/content/node/fd774222-4b22-4803-ae45-2d4e80d84fac.yml
new file mode 100644
index 000000000..b35454d32
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/node/fd774222-4b22-4803-ae45-2d4e80d84fac.yml
@@ -0,0 +1,86 @@
+_meta:
+ version: '1.0'
+ entity_type: node
+ uuid: fd774222-4b22-4803-ae45-2d4e80d84fac
+ bundle: page
+ default_langcode: da
+ depends:
+ 92033694-15ac-4d9e-b275-ddfd18e48d9f: taxonomy_term
+ 65432ee1-43f1-4130-9565-5683467d4b5a: media
+default:
+ revision_uid:
+ -
+ target_id: 1
+ status:
+ -
+ value: true
+ uid:
+ -
+ target_id: 1
+ title:
+ -
+ value: Frontpage
+ created:
+ -
+ value: 1706712421
+ promote:
+ -
+ value: false
+ sticky:
+ -
+ value: false
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'Frontpage | DPL CMS'
+ field_paragraphs:
+ -
+ entity:
+ _meta:
+ version: '1.0'
+ entity_type: paragraph
+ uuid: 9017f62f-16ed-4b28-b341-de4a8486113e
+ bundle: hero
+ default_langcode: da
+ default:
+ status:
+ -
+ value: true
+ created:
+ -
+ value: 1706712441
+ behavior_settings:
+ -
+ value: { }
+ revision_translation_affected:
+ -
+ value: true
+ field_hero_categories:
+ -
+ entity: 92033694-15ac-4d9e-b275-ddfd18e48d9f
+ field_hero_content_type:
+ -
+ value: Arrangement
+ field_hero_date:
+ -
+ value: '2023-12-23'
+ field_hero_description:
+ -
+ value: "Boghandlernes store bogpris - De Gyldne går denne gang til Stine Pilgaard for hendes roman 'Meter i sekundet'. Stort tillykke til Stine Pilgaard.
"
+ format: basic
+ field_hero_image:
+ -
+ entity: 65432ee1-43f1-4130-9565-5683467d4b5a
+ field_hero_link:
+ -
+ uri: 'https://www.google.com/'
+ title: ''
+ options: { }
+ field_hero_title:
+ -
+ value: 'Stine Pilgaard vinder De Gyldne Laurbær'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/0502836d-0f7b-4b21-9371-c40ae9e01495.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/0502836d-0f7b-4b21-9371-c40ae9e01495.yml
new file mode 100644
index 000000000..7b2494363
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/0502836d-0f7b-4b21-9371-c40ae9e01495.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: 0502836d-0f7b-4b21-9371-c40ae9e01495
+ bundle: tags
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: '3-8 årige'
+ weight:
+ -
+ value: 0
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: '3-8 årige | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/9'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/0fa7245a-3434-4d96-9793-a1848a22d37a.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/0fa7245a-3434-4d96-9793-a1848a22d37a.yml
new file mode 100644
index 000000000..06a0cb43e
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/0fa7245a-3434-4d96-9793-a1848a22d37a.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: 0fa7245a-3434-4d96-9793-a1848a22d37a
+ bundle: categories
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: 'Vi anbefaler'
+ weight:
+ -
+ value: 2
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'Vi anbefaler | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/1'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/1006441f-bb39-43b5-8c08-1a79344abf8b.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/1006441f-bb39-43b5-8c08-1a79344abf8b.yml
new file mode 100644
index 000000000..3467dcd4c
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/1006441f-bb39-43b5-8c08-1a79344abf8b.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: 1006441f-bb39-43b5-8c08-1a79344abf8b
+ bundle: tags
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: dans
+ weight:
+ -
+ value: 0
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'dans | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/4'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/190beb00-d5af-4c9a-be8d-65a646b37bbb.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/190beb00-d5af-4c9a-be8d-65a646b37bbb.yml
new file mode 100644
index 000000000..da3a40a7c
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/190beb00-d5af-4c9a-be8d-65a646b37bbb.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: 190beb00-d5af-4c9a-be8d-65a646b37bbb
+ bundle: tags
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: modern
+ weight:
+ -
+ value: 0
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'modern | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/6'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/53133c2e-1023-43a9-baf2-64a5081eea0f.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/53133c2e-1023-43a9-baf2-64a5081eea0f.yml
new file mode 100644
index 000000000..92c758d97
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/53133c2e-1023-43a9-baf2-64a5081eea0f.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: 53133c2e-1023-43a9-baf2-64a5081eea0f
+ bundle: tags
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: contemporary
+ weight:
+ -
+ value: 0
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'contemporary | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/5'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4.yml
new file mode 100644
index 000000000..6e73f8337
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: 725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4
+ bundle: tags
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: scenekunst
+ weight:
+ -
+ value: 0
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'scenekunst | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/7'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/807e6053-86ed-4dce-b6a9-a48b566b5910.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/807e6053-86ed-4dce-b6a9-a48b566b5910.yml
new file mode 100644
index 000000000..b042c74be
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/807e6053-86ed-4dce-b6a9-a48b566b5910.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: 807e6053-86ed-4dce-b6a9-a48b566b5910
+ bundle: categories
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: Litteratur
+ weight:
+ -
+ value: 0
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'Litteratur | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/2'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/92033694-15ac-4d9e-b275-ddfd18e48d9f.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/92033694-15ac-4d9e-b275-ddfd18e48d9f.yml
new file mode 100644
index 000000000..9cfbced07
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/92033694-15ac-4d9e-b275-ddfd18e48d9f.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: 92033694-15ac-4d9e-b275-ddfd18e48d9f
+ bundle: categories
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: Netmedier
+ weight:
+ -
+ value: 1
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'Netmedier | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/3'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/ec76c707-898d-4dfd-8cd2-e258aef1d6dd.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/ec76c707-898d-4dfd-8cd2-e258aef1d6dd.yml
new file mode 100644
index 000000000..eff361c84
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/ec76c707-898d-4dfd-8cd2-e258aef1d6dd.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: ec76c707-898d-4dfd-8cd2-e258aef1d6dd
+ bundle: tags
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: digt
+ weight:
+ -
+ value: 0
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'digt | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/8'
diff --git a/web/modules/custom/dpl_example_content/content/taxonomy_term/f457c4c2-dc28-45cd-9b6e-fda4248d9d45.yml b/web/modules/custom/dpl_example_content/content/taxonomy_term/f457c4c2-dc28-45cd-9b6e-fda4248d9d45.yml
new file mode 100644
index 000000000..05b008c94
--- /dev/null
+++ b/web/modules/custom/dpl_example_content/content/taxonomy_term/f457c4c2-dc28-45cd-9b6e-fda4248d9d45.yml
@@ -0,0 +1,33 @@
+_meta:
+ version: '1.0'
+ entity_type: taxonomy_term
+ uuid: f457c4c2-dc28-45cd-9b6e-fda4248d9d45
+ bundle: categories
+ default_langcode: da
+default:
+ status:
+ -
+ value: true
+ name:
+ -
+ value: 'Design & Teknologi'
+ weight:
+ -
+ value: 0
+ parent:
+ -
+ target_id: 0
+ revision_translation_affected:
+ -
+ value: true
+ metatag:
+ -
+ tag: meta
+ attributes:
+ name: title
+ content: 'Design & Teknologi | DPL CMS'
+ -
+ tag: link
+ attributes:
+ rel: canonical
+ href: 'http://dapple-cms.docker/taxonomy/term/10'
diff --git a/web/modules/custom/dpl_example_content/dpl_example_content.info.yml b/web/modules/custom/dpl_example_content/dpl_example_content.info.yml
index 0d5d99337..7c5ed6ff3 100644
--- a/web/modules/custom/dpl_example_content/dpl_example_content.info.yml
+++ b/web/modules/custom/dpl_example_content/dpl_example_content.info.yml
@@ -7,35 +7,52 @@ dependencies:
- default_content:default_content
default_content:
node:
- # Article 1: From Figma
+ # Articles
# https://www.figma.com/file/Zx9GrkFA3l4ISvyZD2q0Qi/Designsystem?type=design&node-id=7477-39048&mode=dev
- 2cd0fe5e-4159-4452-86aa-e1a1ac8db4a1
+ - 982e0d87-f6b8-4b84-8de8-c8c8bcfef557
+ - 9cfd15df-32b4-4af9-b2da-56b039b5bf6b
+ # Pages
+ - fd774222-4b22-4803-ae45-2d4e80d84fac
eventseries:
- # Event 1: From Figma
# https://www.figma.com/file/Zx9GrkFA3l4ISvyZD2q0Qi/Designsystem?type=design&node-id=7477-39713&mode=dev
- c8177097-1438-493e-8177-e8ef968cc133
+ - 2ce9d9b0-7f10-4a17-9a5e-383d36c1ed93
+ - fb8b4d62-de14-4620-9ca1-be60cab74a65
#eventinstance:
# Do not export instances of event instances. This will result in
# duplicate UUIDs for entity reference fields with fallback values.
media:
- # Media used in article 1
- aba3cea8-cee5-42c1-a152-e30c2ab135e2
- d97a25fd-a6ae-48b9-9a1a-7aec5372688e
- eef50571-39dc-461a-96ff-b6b7180ade61
- # Media used in eventseries 1
- 618e176a-a45a-4c36-a197-664230aa0a34
- 65432ee1-43f1-4130-9565-5683467d4b5a
- # Document used in article 1 and eventseries 1
- dc33677f-8894-4717-b34b-d985f6ad875f
- # embed video in article 1
- f0204f0b-1f63-4c76-bb67-e3f7489ee392
+ - a0176f8c-bb7e-4f5a-bf23-b48cd8bab05f
+ - d6d67fd2-775c-46e7-a1bf-6af46290a5c8
+ - 7b9d1894-7f9a-4f96-a7dc-efa3af5fc902
+ - a6a77786-07db-48d8-98ff-3bda54f231bf
file:
- # Files used in article 1
- b0fea511-57df-4b49-b127-1c445beacfe7
- f19a4a4c-80b0-4290-a098-4f2f5fc137a2
- 4b4fee24-a6ed-497a-b1c4-964c7ed00cfd
- # Files used in eventseries 1
- 3d1cb5f0-b6a4-4235-b4b3-705d5185e90e
- 6d5e9b4c-389d-4735-a8a3-82883f64aeb0
- # PDF used in article 1 and eventseries 1
- 3403d0ba-cbdc-425d-93f4-6cdabb5378b1
+ - 24244298-ff4d-4662-bc7f-5b9aa529f89e
+ - ed301960-e40f-42b5-9229-4ac20fd07a7e
+ - 7fb4d332-81ef-4dc0-af9a-dfcd29ecf367
+ - 50b4d50b-9c75-4698-b803-a125b46daaac
+ taxonomy_term:
+ - f457c4c2-dc28-45cd-9b6e-fda4248d9d45
+ - 92033694-15ac-4d9e-b275-ddfd18e48d9f
+ - 1006441f-bb39-43b5-8c08-1a79344abf8b
+ - 53133c2e-1023-43a9-baf2-64a5081eea0f
+ - 190beb00-d5af-4c9a-be8d-65a646b37bbb
+ - 725e0059-9c5d-4c4e-8e3d-6d8cf2042fa4
+ - ec76c707-898d-4dfd-8cd2-e258aef1d6dd
+ - 0502836d-0f7b-4b21-9371-c40ae9e01495
+ - 0fa7245a-3434-4d96-9793-a1848a22d37a
+ - 807e6053-86ed-4dce-b6a9-a48b566b5910
diff --git a/web/modules/custom/dpl_filter_paragraphs/dpl_filter_paragraphs.info.yml b/web/modules/custom/dpl_filter_paragraphs/dpl_filter_paragraphs.info.yml
new file mode 100644
index 000000000..80cd10804
--- /dev/null
+++ b/web/modules/custom/dpl_filter_paragraphs/dpl_filter_paragraphs.info.yml
@@ -0,0 +1,5 @@
+name: "DPL Filtered Paragraphs"
+type: module
+description: "Filtered paragraphs, embedding views."
+package: "DPL"
+core_version_requirement: ^10
diff --git a/web/modules/custom/dpl_filter_paragraphs/dpl_filter_paragraphs.module b/web/modules/custom/dpl_filter_paragraphs/dpl_filter_paragraphs.module
new file mode 100644
index 000000000..b32f7ab99
--- /dev/null
+++ b/web/modules/custom/dpl_filter_paragraphs/dpl_filter_paragraphs.module
@@ -0,0 +1,115 @@
+ $variables
+ * See the $variables in theme_preprocess_paragraph__NAME().
+ *
+ * @return array
+ * See the $variables in theme_preprocess_paragraph__NAME().
+ */
+function _dpl_filter_paragraphs_prepare_filter_view(array $variables, string $item_view_mode): array {
+ // In the preview (AKA backend view), we don't want to load in the whole view.
+ if ($variables['view_mode'] === 'preview') {
+ return $variables;
+ }
+
+ // Drupal will cache the whole paragraph, as it does not know that it is
+ // embedding a view. We'll add a simple cache tag to the paragraph, so it
+ // be invalidated if any nodes have been updated - e.g. the same kind of
+ // cache tag that the view has.
+ $variables['#cache']['tags'][] = 'node_list';
+
+ $paragraph = $variables['paragraph'] ?? NULL;
+
+ if (!($paragraph instanceof Paragraph)) {
+ return $variables;
+ }
+
+ $view = Views::getView('content_paragraphs');
+ if (!$view instanceof ViewExecutable) {
+ return $variables;
+ }
+
+ $view->setDisplay($item_view_mode);
+
+ // The order of this list must be identical to the order of the contextual
+ // filters in the view!
+ $filters = [
+ 'field_filter_content_types',
+ ];
+
+ $arguments = [];
+
+ // Looping through our paragraph field filters, and setting any values
+ // as contextual values for the view.
+ foreach ($filters as $filter_name) {
+ // If the paragraph has no matching field, we'll just set the value to
+ // all. THIS IS IMPORTANT, as otherwise there will be a mismatch between
+ // the contextual filters and the keys.
+ if (!$paragraph->hasField($filter_name)) {
+ $arguments[] = 'all';
+
+ continue;
+ }
+
+ $field = $paragraph->get($filter_name);
+ $filter_value = $field->getString();
+ $filter_value = !empty($filter_value) ? $filter_value : 'all';
+
+ // getString() gets values as comma seperated.
+ // We want it to be seperated with + instead, to show view that it's
+ // OR instead of AND.
+ $filter_value = str_replace(', ', '+', $filter_value);
+
+ $arguments[] = $filter_value;
+ }
+
+ // Argument = Contextual filters.
+ $view->setArguments($arguments);
+
+ // Making a unique cache key, based on the chosen arguments.
+ // We need a unique cache key, as the view is getting embedded, and Drupal
+ // does not understand that different contextual filters should result in
+ // different caching.
+ $cache_key = "filter_paragraphs_{$item_view_mode}:" . md5(serialize($arguments));
+
+ $view->element['#cache'] = NestedArray::mergeDeep($view->element['#cache'], [
+ 'keys' => [$cache_key],
+ ]);
+
+ $view->execute();
+
+ if ($paragraph->hasField('field_title')) {
+ // Replacing the view title with our custom paragraph field_title.
+ $paragraph_title = $paragraph->get('field_title')->getString();
+
+ $view->setTitle($paragraph_title);
+ }
+
+ $variables['content']['view'] = $view->buildRenderable($item_view_mode);
+
+ return $variables;
+}
diff --git a/web/modules/custom/dpl_paragraphs/dpl_paragraphs.module b/web/modules/custom/dpl_paragraphs/dpl_paragraphs.module
index 8c798423b..1378bd17b 100644
--- a/web/modules/custom/dpl_paragraphs/dpl_paragraphs.module
+++ b/web/modules/custom/dpl_paragraphs/dpl_paragraphs.module
@@ -6,10 +6,24 @@
*/
use Drupal\Core\Url;
+use Drupal\dpl_react_apps\Controller\DplReactAppsController;
use Drupal\paragraphs\Entity\Paragraph;
+use Drupal\paragraphs\ParagraphInterface;
use function Safe\parse_url;
use function Safe\preg_match;
+/**
+ * Implements hook_preprocess_paragraph().
+ *
+ * Adds the absolute base URL to all paragraph entities. This is used to
+ * construct absolute paths for assets like icons in the paragraph templates.
+ */
+function dpl_paragraphs_preprocess_paragraph(array &$variables): void {
+ if (isset($variables['paragraph'])) {
+ $variables['absoluteBaseUrl'] = \Drupal::request()->getSchemeAndHttpHost();
+ }
+}
+
/**
* Implements hook_preprocess_paragraph__TYPE() for paragraph--links.html.twig.
*
@@ -108,3 +122,58 @@ function dpl_paragraphs_preprocess_paragraph__medias(array &$variables): void {
$alternative_images = $paragraph->get('field_medias')->view('alternative');
$variables['content']['field_medias'][1] = $alternative_images[1] ?? NULL;
}
+
+/**
+ * Implements hook_preprocess_paragraph__TYPE().
+ *
+ * Prepares variables for paragraph--recommendation.html.twig template.
+ *
+ * If the paragraph has a title or description, we use the recommended-material
+ * React app. Otherwise, we use the recommendation React app.
+ */
+function dpl_paragraphs_preprocess_paragraph__recommendation(array &$variables): void {
+
+ $paragraph = $variables['paragraph'] ?? NULL;
+ if (!($paragraph instanceof ParagraphInterface) || !$paragraph->hasField('field_work_id') || $paragraph->get('field_work_id')->isEmpty()) {
+ return;
+ }
+
+ $work_id = $paragraph->get('field_work_id')->getString();
+ // Check for the existence of additional fields.
+ if ($paragraph->hasField('field_recommendation_title') &&
+ $paragraph->hasField('field_recommendation_description') &&
+ $paragraph->hasField('field_image_position_right')) {
+
+ $paragraph_title = $paragraph->get('field_recommendation_title')->getString();
+ $paragraph_description = $paragraph->get('field_recommendation_description')->getString();
+ $paragraph_image_position_right = $paragraph->get('field_image_position_right')->getString();
+
+ if (!empty($paragraph_title) || !empty($paragraph_description)) {
+ // The URL is only needed for the recommended-material app.
+ $material_url_object = Url::fromRoute('dpl_react_apps.work', ['wid' => $work_id], ['absolute' => TRUE]);
+ $material_url = $material_url_object->toString();
+
+ $variables['react_app'] = [
+ '#theme' => 'dpl_react_app',
+ '#name' => 'recommended-material',
+ '#data' => [
+ 'wid' => $work_id,
+ ] + DplReactAppsController::externalApiBaseUrls(),
+ '#material_url' => $material_url,
+ '#position_image_right' => $paragraph_image_position_right,
+ ];
+ }
+ else {
+ // Align React's prop type: String '1' for true, boolean false otherwise.
+ $paragraph_image_position_right = $paragraph_image_position_right === '1' ? '1' : FALSE;
+ $variables['react_app'] = [
+ '#theme' => 'dpl_react_app',
+ '#name' => 'recommendation',
+ '#data' => [
+ 'wid' => $work_id,
+ 'position-image-right' => $paragraph_image_position_right,
+ ] + DplReactAppsController::externalApiBaseUrls(),
+ ];
+ }
+ }
+}
diff --git a/web/modules/custom/dpl_react/dpl_react.libraries.yml b/web/modules/custom/dpl_react/dpl_react.libraries.yml
index fbad5e6af..d2a0dc0bb 100644
--- a/web/modules/custom/dpl_react/dpl_react.libraries.yml
+++ b/web/modules/custom/dpl_react/dpl_react.libraries.yml
@@ -179,6 +179,30 @@ favorites-list:
- dpl_react/base
- dpl_react/handler
+recommended-material:
+ remote: https://github.com/danskernesdigitalebibliotek/dpl-react
+ license:
+ name: GNU AFFERO
+ url: https://github.com/danskernesdigitalebibliotek/dpl-react/blob/master/LICENSE
+ gpl-compatible: true
+ js:
+ /libraries/dpl-react/RecommendedMaterial.js: {}
+ dependencies:
+ - dpl_react/base
+ - dpl_react/handler
+
+recommendation:
+ remote: https://github.com/danskernesdigitalebibliotek/dpl-react
+ license:
+ name: GNU AFFERO
+ url: https://github.com/danskernesdigitalebibliotek/dpl-react/blob/master/LICENSE
+ gpl-compatible: true
+ js:
+ /libraries/dpl-react/recommendation.js: {}
+ dependencies:
+ - dpl_react/base
+ - dpl_react/handler
+
menu:
remote: https://github.com/danskernesdigitalebibliotek/dpl-react
license:
diff --git a/web/themes/custom/novel/novel.libraries.yml b/web/themes/custom/novel/novel.libraries.yml
index 381413739..92b3c51ad 100644
--- a/web/themes/custom/novel/novel.libraries.yml
+++ b/web/themes/custom/novel/novel.libraries.yml
@@ -10,6 +10,10 @@ base:
dependencies:
- core/drupal
+nav-grid:
+ js:
+ assets/dpl-design-system/js/init-nav-grid.js: {}
+
slider:
js:
assets/dpl-design-system/js/init-slider.js: {}
@@ -29,3 +33,7 @@ swiper:
theme:
"https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css":
{ type: external }
+
+show-more:
+ js:
+ assets/dpl-design-system/js/show-more.js: {}
diff --git a/web/themes/custom/novel/novel.theme b/web/themes/custom/novel/novel.theme
index 3d4059f00..9575d27de 100644
--- a/web/themes/custom/novel/novel.theme
+++ b/web/themes/custom/novel/novel.theme
@@ -7,6 +7,7 @@
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\paragraphs\ParagraphInterface;
use Spatie\Color\Hex;
use Spatie\Color\Hsl;
use function Safe\file_get_contents;
@@ -129,11 +130,24 @@ function novel_preprocess_page(array &$variables): void {
// Directly assign logo URL if it's set.
if ($logo_path = theme_get_setting('logo.path')) {
- $variables['logo']['#image'] = [
- '#theme' => 'image_style',
- '#style_name' => 'logo',
- '#uri' => $logo_path,
- ];
+
+ // SVG images does not support image-styles, and will fail if you attempt
+ // to render it with the 'logo' image style.
+ if (str_ends_with($logo_path, '.svg')) {
+ $logo_render_array = [
+ '#theme' => 'image',
+ '#uri' => $logo_path,
+ ];
+ }
+ else {
+ $logo_render_array = [
+ '#theme' => 'image_style',
+ '#style_name' => 'logo',
+ '#uri' => $logo_path,
+ ];
+ }
+
+ $variables['logo']['#image'] = $logo_render_array;
}
}
@@ -151,7 +165,7 @@ function novel_preprocess_page(array &$variables): void {
function novel_form_system_theme_settings_alter(array &$form, FormStateInterface $form_state): void {
$form['logo']['settings'] = $form['logo']['settings'] ?? [];
- $form['logo']['settings']['logo_upload']['#description'] = t('Upload logo in 224x96px in PNG or SVG', [], ['context' => 'Novel settings']);
+ $form['logo']['settings']['logo_upload']['#description'] = t('Upload the logo in PNG or SVG. You will get the best results with 11:5 format (e.g. width: 220px height: 100px), but any size will work.', [], ['context' => 'Novel settings']);
$form['logo']['settings']['logo_title'] = [
'#type' => 'textfield',
@@ -227,3 +241,46 @@ function novel_attach_identity_color_styles(array &$variables, Hsl $hslColor): v
'novel_custom_identity_color',
];
}
+
+/**
+ * Implements hook_theme_suggestions_field_alter().
+ */
+function novel_theme_suggestions_field_alter(array &$suggestions, array $variables) : void {
+ $element = $variables['element'];
+
+ // Add theme suggestions per view mode...
+ $suggestions[] = 'field__' . $element['#entity_type'] . '__' .
+ $element['#field_name'] . '__' . $element['#view_mode'];
+ // ... per bundle and view mode.
+ $suggestions[] = 'field__' . $element['#entity_type'] . '__' .
+ $element['#field_name'] . '__' . $element['#bundle'] . '__' .
+ $element['#view_mode'];
+}
+
+/**
+ * Implements hook_theme_suggestions_paragraph_alter().
+ *
+ * Adds a template suggestion for recommendation paragraphs that contain
+ * a title or description written by an editor. This enhances caching efficiency
+ * by using separate templates for the variations of the paragraph.
+ *
+ * @param string[] &$suggestions
+ * An array of theme suggestion strings.
+ * @param array $variables
+ * An array of variables of mixed types, passed to the theme layer.
+ */
+function novel_theme_suggestions_paragraph_alter(array &$suggestions, array $variables): void {
+
+ $paragraph = $variables['elements']['#paragraph'] ?? NULL;
+ if (!($paragraph instanceof ParagraphInterface)) {
+ return;
+ }
+
+ if ($paragraph->getType() == 'recommendation') {
+ // Check for title or description.
+ if (!empty($paragraph->get('field_recommendation_title')->getString()) ||
+ !empty($paragraph->get('field_recommendation_description')->getString())) {
+ $suggestions[] = 'paragraph__recommendation__recommended_material';
+ }
+ }
+}
diff --git a/web/themes/custom/novel/templates/components/full-event.html.twig b/web/themes/custom/novel/templates/components/full-event.html.twig
index a090176b7..a10e3551d 100644
--- a/web/themes/custom/novel/templates/components/full-event.html.twig
+++ b/web/themes/custom/novel/templates/components/full-event.html.twig
@@ -1,18 +1,16 @@
- {{ "Description"|trans }}
{{ description }}
-
+ {% if tags.0 %}
+ {{ tags }}
+ {% endif %}
diff --git a/web/themes/custom/novel/templates/components/horizontal-term-line.html.twig b/web/themes/custom/novel/templates/components/horizontal-term-line.html.twig
new file mode 100644
index 000000000..3c552005c
--- /dev/null
+++ b/web/themes/custom/novel/templates/components/horizontal-term-line.html.twig
@@ -0,0 +1,12 @@
+{% set heading = heading|default('h2') %}
+
+
+ <{{ heading }} class="text-label-bold">
+ {{ title }}
+ {{ heading }}>
+ {% for item in items %}
+
+ {{ item.content }}
+
+ {% endfor %}
+
diff --git a/web/themes/custom/novel/templates/components/nav-grid.html.twig b/web/themes/custom/novel/templates/components/nav-grid.html.twig
new file mode 100644
index 000000000..be86a95cc
--- /dev/null
+++ b/web/themes/custom/novel/templates/components/nav-grid.html.twig
@@ -0,0 +1,34 @@
+{{ attach_library('novel/nav-grid') }}
+
+{% set has_many = items|length > 6 %}
+
+{%
+ set classes = [
+ 'nav-grid',
+ 'nav-grid--count-' ~ items|length,
+ show_subtitles ? 'nav-grid--expanded' : 'nav-grid--simple',
+ has_many ? 'nav-grid--has-many' : '',
+ has_many ? 'nav-grid--folded' : '',
+ ]
+%}
+
+
+
+
+ {% for item in items %}
+
+ {{- item.content|default(item) -}}
+
+ {% endfor %}
+
+ {% if has_many %}
+
+ {% endif %}
+
+
diff --git a/web/themes/custom/novel/templates/components/nav-teaser.html.twig b/web/themes/custom/novel/templates/components/nav-teaser.html.twig
new file mode 100644
index 000000000..19a97c44f
--- /dev/null
+++ b/web/themes/custom/novel/templates/components/nav-teaser.html.twig
@@ -0,0 +1,11 @@
+
+
+ {{ title }}
+
+ {% if subtitle %}
+ {{ subtitle }}
+ {% endif %}
+
+ {{ source(baseIconPath ~ '/arrow-ui/icon-arrow-ui-nav.svg') }}
+
+
diff --git a/web/themes/custom/novel/templates/components/paragraphs.html.twig b/web/themes/custom/novel/templates/components/paragraphs.html.twig
new file mode 100644
index 000000000..a1dc77cf0
--- /dev/null
+++ b/web/themes/custom/novel/templates/components/paragraphs.html.twig
@@ -0,0 +1,7 @@
+
+ {% for item in items %}
+
+ {{ item.content }}
+
+ {% endfor %}
+
diff --git a/web/themes/custom/novel/templates/fields/field--event-paragraphs.html.twig b/web/themes/custom/novel/templates/fields/field--event-paragraphs.html.twig
new file mode 100644
index 000000000..dfa1c34d5
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--event-paragraphs.html.twig
@@ -0,0 +1,5 @@
+{% include '@novel/components/paragraphs.html.twig'
+ with {
+ attributes: attributes,
+ items: items
+} only %}
diff --git a/web/themes/custom/novel/templates/fields/field--eventinstance--event-categories--full.html.twig b/web/themes/custom/novel/templates/fields/field--eventinstance--event-categories--full.html.twig
new file mode 100644
index 000000000..966221f80
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--eventinstance--event-categories--full.html.twig
@@ -0,0 +1,4 @@
+{% for item in items %}
+ {% set item = item|merge({'attributes': item.attributes.addClass('tag--large')}) %}
+{% endfor %}
+{{ include('field--field-categories.html.twig') }}
diff --git a/web/themes/custom/novel/templates/fields/field--eventinstance--event-categories--list-teaser.html.twig b/web/themes/custom/novel/templates/fields/field--eventinstance--event-categories--list-teaser.html.twig
new file mode 100644
index 000000000..3f8e924f8
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--eventinstance--event-categories--list-teaser.html.twig
@@ -0,0 +1,4 @@
+{% for item in items %}
+ {% set item = item|merge({'attributes': item.attributes.addClass('tag--small').addClass('event-list-item__tag')}) %}
+{% endfor %}
+{% include 'field--field-categories.html.twig' %}
diff --git a/web/themes/custom/novel/templates/fields/field--eventinstance--event-tags.html.twig b/web/themes/custom/novel/templates/fields/field--eventinstance--event-tags.html.twig
new file mode 100644
index 000000000..ac5e84c30
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--eventinstance--event-tags.html.twig
@@ -0,0 +1,2 @@
+{# Reuse event field template #}
+{{ include('field--field-tags.html.twig') }}
diff --git a/web/themes/custom/novel/templates/fields/field--eventseries--field-categories--full.html.twig b/web/themes/custom/novel/templates/fields/field--eventseries--field-categories--full.html.twig
new file mode 100644
index 000000000..966221f80
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--eventseries--field-categories--full.html.twig
@@ -0,0 +1,4 @@
+{% for item in items %}
+ {% set item = item|merge({'attributes': item.attributes.addClass('tag--large')}) %}
+{% endfor %}
+{{ include('field--field-categories.html.twig') }}
diff --git a/web/themes/custom/novel/templates/fields/field--field-categories.html.twig b/web/themes/custom/novel/templates/fields/field--field-categories.html.twig
new file mode 100644
index 000000000..45d54fe9a
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--field-categories.html.twig
@@ -0,0 +1,31 @@
+{{ attach_library('novel/show-more') }}
+{% set show_more_text = '...'|t %}
+{% set show_less_text = 'Show less'|t %}
+
+{% set item_classes = [
+ 'tag',
+ 'tag--fill',
+ ] %}
+
+{% if items|length > 1 %}
+
+
+ {% for item in items %}
+ -
+ {{ item.content|raw }}
+
+ {% endfor %}
+
+
+
+{% else %}
+ {% for item in items %}
+
+
+ {{ item.content|raw }}
+
+
+ {% endfor %}
+{% endif %}
diff --git a/web/themes/custom/novel/templates/fields/field--field-hero-categories.html.twig b/web/themes/custom/novel/templates/fields/field--field-hero-categories.html.twig
new file mode 100644
index 000000000..419ebd7d9
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--field-hero-categories.html.twig
@@ -0,0 +1,4 @@
+{% for item in items %}
+ {% set item = item|merge({'attributes': item.attributes.addClass('tag--large')}) %}
+{% endfor %}
+{% include 'field--field-categories.html.twig' %}
diff --git a/web/themes/custom/novel/templates/fields/field--field-paragraphs.html.twig b/web/themes/custom/novel/templates/fields/field--field-paragraphs.html.twig
index 5b5035e0e..dfa1c34d5 100644
--- a/web/themes/custom/novel/templates/fields/field--field-paragraphs.html.twig
+++ b/web/themes/custom/novel/templates/fields/field--field-paragraphs.html.twig
@@ -1,7 +1,5 @@
-
- {% for item in items %}
-
- {{ item.content }}
-
- {% endfor %}
-
+{% include '@novel/components/paragraphs.html.twig'
+ with {
+ attributes: attributes,
+ items: items
+} only %}
diff --git a/web/themes/custom/novel/templates/fields/field--field-tags.html.twig b/web/themes/custom/novel/templates/fields/field--field-tags.html.twig
new file mode 100644
index 000000000..a7272f217
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--field-tags.html.twig
@@ -0,0 +1,4 @@
+{% include '@novel/components/horizontal-term-line.html.twig' with {
+ 'title': "Tags"|trans({}, {"context": "Tags"}),
+ 'items': items,
+} only %}
diff --git a/web/themes/custom/novel/templates/fields/field--node--field-categories--full.html.twig b/web/themes/custom/novel/templates/fields/field--node--field-categories--full.html.twig
new file mode 100644
index 000000000..730e6405e
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--node--field-categories--full.html.twig
@@ -0,0 +1,4 @@
+{% for item in items %}
+ {% set item = item|merge({'attributes': item.attributes.addClass('tag--large')}) %}
+{% endfor %}
+{% include 'field--field-categories.html.twig' %}
diff --git a/web/themes/custom/novel/templates/fields/field--node--field-tags--article--full.html.twig b/web/themes/custom/novel/templates/fields/field--node--field-tags--article--full.html.twig
new file mode 100644
index 000000000..a7272f217
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--node--field-tags--article--full.html.twig
@@ -0,0 +1,4 @@
+{% include '@novel/components/horizontal-term-line.html.twig' with {
+ 'title': "Tags"|trans({}, {"context": "Tags"}),
+ 'items': items,
+} only %}
diff --git a/web/themes/custom/novel/templates/fields/field--paragraph--field-content-references--nav-grid-manual.html.twig b/web/themes/custom/novel/templates/fields/field--paragraph--field-content-references--nav-grid-manual.html.twig
new file mode 100644
index 000000000..6b9894e97
--- /dev/null
+++ b/web/themes/custom/novel/templates/fields/field--paragraph--field-content-references--nav-grid-manual.html.twig
@@ -0,0 +1,19 @@
+{% set parent_entity = element['#object'] %}
+
+{% if parent_entity %}
+ {% if parent_entity.hasField('field_title') %}
+ {% set title = parent_entity.get('field_title').getString() %}
+ {% endif %}
+
+ {% if parent_entity.hasField('field_show_subtitles') %}
+ {% set show_subtitles = parent_entity.get('field_show_subtitles').getString() == "1" %}
+ {% endif %}
+{% endif %}
+
+{% include '@novel/components/nav-grid.html.twig'
+ with {
+ 'attributes': attributes,
+ 'title': title,
+ 'items': items,
+ 'show_subtitles': show_subtitles
+} only %}
diff --git a/web/themes/custom/novel/templates/layout/eventinstance--full.html.twig b/web/themes/custom/novel/templates/layout/eventinstance--full.html.twig
index 3d43c6af0..0b5c02903 100644
--- a/web/themes/custom/novel/templates/layout/eventinstance--full.html.twig
+++ b/web/themes/custom/novel/templates/layout/eventinstance--full.html.twig
@@ -6,7 +6,7 @@
},
{
label: "Price"|trans,
- value: content.ticket_categories.0 ? content.ticket_categories : null
+ value: content.event_ticket_categories.0 ? content.event_ticket_categories : null
},
{
label: "Place"|trans,
@@ -29,5 +29,7 @@
'paragraphs': content.event_paragraphs,
'date': content.date,
'description': content.event_description,
- 'description_items': description_items
+ 'description_items': description_items,
+ 'categories': content.event_categories,
+ 'tags': content.event_tags,
} only %}
diff --git a/web/themes/custom/novel/templates/layout/eventinstance--nav-teaser.html.twig b/web/themes/custom/novel/templates/layout/eventinstance--nav-teaser.html.twig
new file mode 100644
index 000000000..94571be67
--- /dev/null
+++ b/web/themes/custom/novel/templates/layout/eventinstance--nav-teaser.html.twig
@@ -0,0 +1,8 @@
+{% include '@novel/components/nav-teaser.html.twig'
+ with {
+ attributes: attributes,
+ title: content.title,
+ subtitle: content.field_teaser_text.0,
+ url: url('entity.eventseries.canonical', {'eventseries': eventseries.id()}),
+ baseIconPath: baseIconPath
+} only %}
diff --git a/web/themes/custom/novel/templates/layout/eventseries--full.html.twig b/web/themes/custom/novel/templates/layout/eventseries--full.html.twig
index 82fdd829c..67837777b 100644
--- a/web/themes/custom/novel/templates/layout/eventseries--full.html.twig
+++ b/web/themes/custom/novel/templates/layout/eventseries--full.html.twig
@@ -7,13 +7,15 @@
set instancelike_content = {
"date": formatted_date,
"event_address": content.field_event_address,
+ "event_categories": content.field_categories,
"event_description": content.field_event_description,
"event_image": content.field_event_image,
"event_link": content.field_event_link,
"event_paragraphs": content.field_event_paragraphs,
"event_place": content.field_event_place,
"event_state": content.field_event_state,
- "event_ticket_categories": content.field_ticket_categories
+ "event_ticket_categories": content.field_ticket_categories,
+ "event_tags": content.field_tags,
}
%}
{% include '@novel/layout/eventinstance--full.html.twig' with {
diff --git a/web/themes/custom/novel/templates/layout/eventseries--nav-teaser.html.twig b/web/themes/custom/novel/templates/layout/eventseries--nav-teaser.html.twig
new file mode 100644
index 000000000..94571be67
--- /dev/null
+++ b/web/themes/custom/novel/templates/layout/eventseries--nav-teaser.html.twig
@@ -0,0 +1,8 @@
+{% include '@novel/components/nav-teaser.html.twig'
+ with {
+ attributes: attributes,
+ title: content.title,
+ subtitle: content.field_teaser_text.0,
+ url: url('entity.eventseries.canonical', {'eventseries': eventseries.id()}),
+ baseIconPath: baseIconPath
+} only %}
diff --git a/web/themes/custom/novel/templates/layout/node--article--full.html.twig b/web/themes/custom/novel/templates/layout/node--article--full.html.twig
index 3fbae2099..def501cdc 100644
--- a/web/themes/custom/novel/templates/layout/node--article--full.html.twig
+++ b/web/themes/custom/novel/templates/layout/node--article--full.html.twig
@@ -1,5 +1,10 @@
+ {% if (content.field_categories.0) %}
+
+ {{ content.field_categories }}
+
+ {% endif %}
{{ label }}
{{ content.field_subtitle }}
@@ -11,6 +16,11 @@
{{ node.created.value|format_date('date_full_month') }}