hr-design-system-handlebars 1.63.14 → 1.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/chromatic.yml +1 -1
- package/CHANGELOG.md +24 -0
- package/build/handlebars/helpers/handlebar-helpers.js +72 -14
- package/dist/assets/brand/hessenschau/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr-bigband/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr-fernsehen/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr-inforadio/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr-rundfunkrat/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr-sinfonieorchester/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr-werbung/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr1/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr2/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr3/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/hr4/conf/locatags.merged.json +6 -0
- package/dist/assets/brand/you-fm/conf/locatags.merged.json +6 -0
- package/dist/assets/index.css +13 -3
- package/dist/assets/js/components/modal/defaultModal.subfeature.js +58 -0
- package/dist/assets/js/components/modal/modal.feature.js +11 -52
- package/dist/assets/js/components/modal/userConsentModal.subfeature.js +120 -0
- package/dist/views/components/banner/header/banner_image.hbs +1 -1
- package/dist/views/components/base/backlink.hbs +1 -1
- package/dist/views/components/base/link.hbs +1 -1
- package/dist/views/components/dataPolicySettings/data_policy_settings.hbs +4 -4
- package/dist/views/components/event/calendar/event_calendar.hbs +3 -0
- package/dist/views/components/event/event_ticket_button.hbs +10 -18
- package/dist/views/components/geoTag/geoTag_list.hbs +1 -1
- package/dist/views/components/mediaplayer/media_player.hbs +1 -1
- package/dist/views/components/modal/modal.hbs +1 -1
- package/dist/views/components/modal/user_consent.hbs +13 -0
- package/dist/views/components/navigation/breadcrumb/breadcrumb.hbs +1 -1
- package/dist/views/components/navigation/breadcrumb/breadcrumb_items.ssi.hbs +1 -1
- package/dist/views/components/page/components/author.hbs +1 -1
- package/dist/views/components/page/components/socialsharing.hbs +4 -4
- package/dist/views/components/podcast/components/podcast_subscribe_button.hbs +1 -1
- package/dist/views/components/podcast/podcast_player.hbs +1 -1
- package/dist/views/components/site_header/brand_navigation/brand_navigation_item.hbs +1 -1
- package/dist/views/components/site_header/navigation_flyout/navigation_flyout.hbs +1 -1
- package/dist/views/components/site_header/section_navigation/section_navigation_item.hbs +3 -3
- package/dist/views/components/site_header/service_logo.hbs +1 -1
- package/dist/views/components/site_header/service_navigation/service_navigation_item.hbs +3 -3
- package/dist/views/components/social_sharing/social_sharing_compact_icons.hbs +4 -4
- package/dist/views/components/socialmedia/socialmedia.hbs +4 -4
- package/dist/views/components/teaser/components/teaser_body.hbs +10 -1
- package/dist/views/components/teaser/components/teaser_lead.hbs +1 -1
- package/dist/views/components/teaser/group_teaser/group_teaser.hbs +1 -1
- package/dist/views/components/teaser/group_teaser/group_teaser_accented.hbs +1 -1
- package/dist/views/components/teaser/ticker/teaser_ticker_timeline.hbs +1 -1
- package/dist/views/components/topictag/topictag_list.hbs +1 -1
- package/dist/views_static/components/banner/header/banner_image.hbs +1 -1
- package/dist/views_static/components/base/backlink.hbs +1 -1
- package/dist/views_static/components/base/link.hbs +1 -1
- package/dist/views_static/components/dataPolicySettings/data_policy_settings.hbs +4 -4
- package/dist/views_static/components/event/calendar/event_calendar.hbs +3 -0
- package/dist/views_static/components/event/event_ticket_button.hbs +10 -18
- package/dist/views_static/components/geoTag/geoTag_list.hbs +1 -1
- package/dist/views_static/components/mediaplayer/media_player.hbs +1 -1
- package/dist/views_static/components/modal/modal.hbs +1 -1
- package/dist/views_static/components/modal/user_consent.hbs +13 -0
- package/dist/views_static/components/navigation/breadcrumb/breadcrumb.hbs +1 -1
- package/dist/views_static/components/navigation/breadcrumb/breadcrumb_items.ssi.hbs +1 -1
- package/dist/views_static/components/page/components/author.hbs +1 -1
- package/dist/views_static/components/page/components/socialsharing.hbs +4 -4
- package/dist/views_static/components/podcast/components/podcast_subscribe_button.hbs +1 -1
- package/dist/views_static/components/podcast/podcast_player.hbs +1 -1
- package/dist/views_static/components/site_header/brand_navigation/brand_navigation_item.hbs +1 -1
- package/dist/views_static/components/site_header/navigation_flyout/navigation_flyout.hbs +1 -1
- package/dist/views_static/components/site_header/section_navigation/section_navigation_item.hbs +3 -3
- package/dist/views_static/components/site_header/service_logo.hbs +1 -1
- package/dist/views_static/components/site_header/service_navigation/service_navigation_item.hbs +3 -3
- package/dist/views_static/components/social_sharing/social_sharing_compact_icons.hbs +4 -4
- package/dist/views_static/components/socialmedia/socialmedia.hbs +4 -4
- package/dist/views_static/components/teaser/components/teaser_body.hbs +10 -1
- package/dist/views_static/components/teaser/components/teaser_lead.hbs +1 -1
- package/dist/views_static/components/teaser/group_teaser/group_teaser.hbs +1 -1
- package/dist/views_static/components/teaser/group_teaser/group_teaser_accented.hbs +1 -1
- package/dist/views_static/components/teaser/ticker/teaser_ticker_timeline.hbs +1 -1
- package/dist/views_static/components/topictag/topictag_list.hbs +1 -1
- package/package.json +1 -1
- package/src/assets/brand/_default/conf/locatags.json +6 -0
- package/src/assets/brand/hessenschau/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr-bigband/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr-fernsehen/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr-inforadio/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr-rundfunkrat/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr-sinfonieorchester/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr-werbung/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr1/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr2/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr3/conf/locatags.merged.json +6 -0
- package/src/assets/brand/hr4/conf/locatags.merged.json +6 -0
- package/src/assets/brand/you-fm/conf/locatags.merged.json +6 -0
- package/src/assets/css/custom-components.css +2 -1
- package/src/assets/fixtures/teaser/teaser_standard_50_serif_link_two_click.json +22 -0
- package/src/assets/fixtures/teaser/teasers.inc.json +2 -1
- package/src/assets/tailwind.css +3 -0
- package/src/stories/views/components/banner/header/banner_image.hbs +1 -1
- package/src/stories/views/components/base/backlink.hbs +1 -1
- package/src/stories/views/components/base/link.hbs +1 -1
- package/src/stories/views/components/dataPolicySettings/data_policy_settings.hbs +4 -4
- package/src/stories/views/components/event/calendar/event_calendar.hbs +3 -0
- package/src/stories/views/components/event/event_ticket_button.hbs +10 -18
- package/src/stories/views/components/geoTag/geoTag_list.hbs +1 -1
- package/src/stories/views/components/mediaplayer/media_player.hbs +1 -1
- package/src/stories/views/components/modal/defaultModal.subfeature.js +58 -0
- package/src/stories/views/components/modal/modal.feature.js +11 -52
- package/src/stories/views/components/modal/modal.hbs +1 -1
- package/src/stories/views/components/modal/modal.mdx +104 -0
- package/src/stories/views/components/modal/modal.stories.js +79 -0
- package/src/stories/views/components/modal/userConsentModal.subfeature.js +120 -0
- package/src/stories/views/components/modal/user_consent.hbs +13 -0
- package/src/stories/views/components/navigation/breadcrumb/breadcrumb.hbs +1 -1
- package/src/stories/views/components/navigation/breadcrumb/breadcrumb_items.ssi.hbs +1 -1
- package/src/stories/views/components/page/components/author.hbs +1 -1
- package/src/stories/views/components/page/components/socialsharing.hbs +4 -4
- package/src/stories/views/components/pagination/fixtures/page_pagination.json +1 -1
- package/src/stories/views/components/podcast/components/podcast_subscribe_button.hbs +1 -1
- package/src/stories/views/components/podcast/podcast_player.hbs +1 -1
- package/src/stories/views/components/site_header/brand_navigation/brand_navigation_item.hbs +1 -1
- package/src/stories/views/components/site_header/navigation_flyout/navigation_flyout.hbs +1 -1
- package/src/stories/views/components/site_header/section_navigation/section_navigation_item.hbs +3 -3
- package/src/stories/views/components/site_header/service_logo.hbs +1 -1
- package/src/stories/views/components/site_header/service_navigation/service_navigation_item.hbs +3 -3
- package/src/stories/views/components/social_sharing/social_sharing_compact_icons.hbs +4 -4
- package/src/stories/views/components/socialmedia/socialmedia.hbs +4 -4
- package/src/stories/views/components/teaser/components/teaser_body.hbs +10 -1
- package/src/stories/views/components/teaser/components/teaser_lead.hbs +1 -1
- package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_link.json +1 -1
- package/src/stories/views/components/teaser/fixtures/teaser_alternative_50_serif_link.json +1 -1
- package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif_link.json +1 -1
- package/src/stories/views/components/teaser/fixtures/teaser_standard_100_serif_link.json +1 -1
- package/src/stories/views/components/teaser/fixtures/teaser_standard_25_serif_link.json +1 -1
- package/src/stories/views/components/teaser/fixtures/teaser_standard_33_serif_link.json +1 -1
- package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_link.json +1 -1
- package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_link_two_click.json +1 -0
- package/src/stories/views/components/teaser/fixtures/teaser_standard_hero_serif_link.json +1 -1
- package/src/stories/views/components/teaser/group_teaser/group_teaser.hbs +1 -1
- package/src/stories/views/components/teaser/group_teaser/group_teaser_accented.hbs +1 -1
- package/src/stories/views/components/teaser/teaser_standard.mdx +4 -0
- package/src/stories/views/components/teaser/teaser_standard.stories.js +7 -0
- package/src/stories/views/components/teaser/ticker/teaser_ticker_timeline.hbs +1 -1
- package/src/stories/views/components/topictag/topictag_list.hbs +1 -1
- package/tailwind.config.js +2 -0
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"livestream_plays": "Jetzt live",
|
|
113
113
|
"livestream_will_play": "Startet am {0}",
|
|
114
114
|
"livestream_will_play_with_time": "Startet am {0} um {1} Uhr",
|
|
115
|
+
"modal_user_consent_headline": "Sie verlassen unser Angebot",
|
|
116
|
+
"modal_user_consent_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
117
|
+
"modal_user_consent_label_cancel": "Abbrechen",
|
|
118
|
+
"modal_user_consent_label_ok": "Zur externen Internetseite",
|
|
115
119
|
"poster_copyright": "Bild © {0}",
|
|
116
120
|
"search_input_aria_submit": "Suche starten",
|
|
117
121
|
"search_input_placeholder": "Ort oder Thema suchen",
|
|
@@ -132,6 +136,8 @@
|
|
|
132
136
|
"story_program_supplier": "Thema in",
|
|
133
137
|
"ticket_modal_headline": "Weiterleitung zu einem Ticketservice",
|
|
134
138
|
"ticket_modal_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
139
|
+
"ticket_modal_label_ok": "Zum Ticketshop",
|
|
140
|
+
"ticket_modal_label_cancel": "Abbrechen",
|
|
135
141
|
"ticker_more": "Zum Ticker",
|
|
136
142
|
"topictag_headline": "Alle Beiträge zum Thema {0}",
|
|
137
143
|
"topictag_metadescription_prefix": "Alle Beiträge zum Thema ",
|
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"livestream_plays": "Jetzt live",
|
|
113
113
|
"livestream_will_play": "Startet am {0}",
|
|
114
114
|
"livestream_will_play_with_time": "Startet am {0} um {1} Uhr",
|
|
115
|
+
"modal_user_consent_headline": "Sie verlassen unser Angebot",
|
|
116
|
+
"modal_user_consent_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
117
|
+
"modal_user_consent_label_cancel": "Abbrechen",
|
|
118
|
+
"modal_user_consent_label_ok": "Zur externen Internetseite",
|
|
115
119
|
"poster_copyright": "Bild © {0}",
|
|
116
120
|
"search_input_aria_submit": "Suche starten",
|
|
117
121
|
"search_input_placeholder": "Ort oder Thema suchen",
|
|
@@ -132,6 +136,8 @@
|
|
|
132
136
|
"story_program_supplier": "Thema in",
|
|
133
137
|
"ticket_modal_headline": "Weiterleitung zu einem Ticketservice",
|
|
134
138
|
"ticket_modal_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
139
|
+
"ticket_modal_label_ok": "Zum Ticketshop",
|
|
140
|
+
"ticket_modal_label_cancel": "Abbrechen",
|
|
135
141
|
"ticker_more": "Zum Ticker",
|
|
136
142
|
"topictag_headline": "Alle Beiträge zum Thema {0}",
|
|
137
143
|
"topictag_metadescription_prefix": "Alle Beiträge zum Thema ",
|
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"livestream_plays": "Jetzt live",
|
|
113
113
|
"livestream_will_play": "Startet am {0}",
|
|
114
114
|
"livestream_will_play_with_time": "Startet am {0} um {1} Uhr",
|
|
115
|
+
"modal_user_consent_headline": "Sie verlassen unser Angebot",
|
|
116
|
+
"modal_user_consent_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
117
|
+
"modal_user_consent_label_cancel": "Abbrechen",
|
|
118
|
+
"modal_user_consent_label_ok": "Zur externen Internetseite",
|
|
115
119
|
"poster_copyright": "Bild © {0}",
|
|
116
120
|
"search_input_aria_submit": "Suche starten",
|
|
117
121
|
"search_input_placeholder": "Ort oder Thema suchen",
|
|
@@ -132,6 +136,8 @@
|
|
|
132
136
|
"story_program_supplier": "Thema in",
|
|
133
137
|
"ticket_modal_headline": "Weiterleitung zu einem Ticketservice",
|
|
134
138
|
"ticket_modal_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
139
|
+
"ticket_modal_label_ok": "Zum Ticketshop",
|
|
140
|
+
"ticket_modal_label_cancel": "Abbrechen",
|
|
135
141
|
"ticker_more": "Zum Ticker",
|
|
136
142
|
"topictag_headline": "Alle Beiträge zum Thema {0}",
|
|
137
143
|
"topictag_metadescription_prefix": "Alle Beiträge zum Thema ",
|
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"livestream_plays": "Jetzt live",
|
|
113
113
|
"livestream_will_play": "Startet am {0}",
|
|
114
114
|
"livestream_will_play_with_time": "Startet am {0} um {1} Uhr",
|
|
115
|
+
"modal_user_consent_headline": "Sie verlassen unser Angebot",
|
|
116
|
+
"modal_user_consent_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
117
|
+
"modal_user_consent_label_cancel": "Abbrechen",
|
|
118
|
+
"modal_user_consent_label_ok": "Zur externen Internetseite",
|
|
115
119
|
"poster_copyright": "Bild © {0}",
|
|
116
120
|
"search_input_aria_submit": "Suche starten",
|
|
117
121
|
"search_input_placeholder": "Ort oder Thema suchen",
|
|
@@ -132,6 +136,8 @@
|
|
|
132
136
|
"story_program_supplier": "Thema in",
|
|
133
137
|
"ticket_modal_headline": "Weiterleitung zu einem Ticketservice",
|
|
134
138
|
"ticket_modal_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
139
|
+
"ticket_modal_label_ok": "Zum Ticketshop",
|
|
140
|
+
"ticket_modal_label_cancel": "Abbrechen",
|
|
135
141
|
"ticker_more": "Zum Ticker",
|
|
136
142
|
"topictag_headline": "Alle Beiträge zum Thema {0}",
|
|
137
143
|
"topictag_metadescription_prefix": "Alle Beiträge zum Thema ",
|
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"livestream_plays": "Jetzt live",
|
|
113
113
|
"livestream_will_play": "Startet am {0}",
|
|
114
114
|
"livestream_will_play_with_time": "Startet am {0} um {1} Uhr",
|
|
115
|
+
"modal_user_consent_headline": "Sie verlassen unser Angebot",
|
|
116
|
+
"modal_user_consent_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
117
|
+
"modal_user_consent_label_cancel": "Abbrechen",
|
|
118
|
+
"modal_user_consent_label_ok": "Zur externen Internetseite",
|
|
115
119
|
"poster_copyright": "Bild © {0}",
|
|
116
120
|
"search_input_aria_submit": "Suche starten",
|
|
117
121
|
"search_input_placeholder": "Ort oder Thema suchen",
|
|
@@ -132,6 +136,8 @@
|
|
|
132
136
|
"story_program_supplier": "Thema in",
|
|
133
137
|
"ticket_modal_headline": "Weiterleitung zu einem Ticketservice",
|
|
134
138
|
"ticket_modal_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
139
|
+
"ticket_modal_label_ok": "Zum Ticketshop",
|
|
140
|
+
"ticket_modal_label_cancel": "Abbrechen",
|
|
135
141
|
"ticker_more": "Zum Ticker",
|
|
136
142
|
"topictag_headline": "Alle Beiträge zum Thema {0}",
|
|
137
143
|
"topictag_metadescription_prefix": "Alle Beiträge zum Thema ",
|
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"livestream_plays": "Jetzt live",
|
|
113
113
|
"livestream_will_play": "Startet am {0}",
|
|
114
114
|
"livestream_will_play_with_time": "Startet am {0} um {1} Uhr",
|
|
115
|
+
"modal_user_consent_headline": "Sie verlassen unser Angebot",
|
|
116
|
+
"modal_user_consent_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
117
|
+
"modal_user_consent_label_cancel": "Abbrechen",
|
|
118
|
+
"modal_user_consent_label_ok": "Zur externen Internetseite",
|
|
115
119
|
"poster_copyright": "Bild © {0}",
|
|
116
120
|
"search_input_aria_submit": "Suche starten",
|
|
117
121
|
"search_input_placeholder": "Ort oder Thema suchen",
|
|
@@ -132,6 +136,8 @@
|
|
|
132
136
|
"story_program_supplier": "Thema in",
|
|
133
137
|
"ticket_modal_headline": "Weiterleitung zu einem Ticketservice",
|
|
134
138
|
"ticket_modal_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
139
|
+
"ticket_modal_label_ok": "Zum Ticketshop",
|
|
140
|
+
"ticket_modal_label_cancel": "Abbrechen",
|
|
135
141
|
"ticker_more": "Zum Ticker",
|
|
136
142
|
"topictag_headline": "Alle Beiträge zum Thema {0}",
|
|
137
143
|
"topictag_metadescription_prefix": "Alle Beiträge zum Thema ",
|
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"livestream_plays": "Jetzt live",
|
|
113
113
|
"livestream_will_play": "Startet am {0}",
|
|
114
114
|
"livestream_will_play_with_time": "Startet am {0} um {1} Uhr",
|
|
115
|
+
"modal_user_consent_headline": "Sie verlassen unser Angebot",
|
|
116
|
+
"modal_user_consent_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
117
|
+
"modal_user_consent_label_cancel": "Abbrechen",
|
|
118
|
+
"modal_user_consent_label_ok": "Zur externen Internetseite",
|
|
115
119
|
"poster_copyright": "Bild © {0}",
|
|
116
120
|
"search_input_aria_submit": "Suche starten",
|
|
117
121
|
"search_input_placeholder": "Ort oder Thema suchen",
|
|
@@ -132,6 +136,8 @@
|
|
|
132
136
|
"story_program_supplier": "Thema in",
|
|
133
137
|
"ticket_modal_headline": "Weiterleitung zu einem Ticketservice",
|
|
134
138
|
"ticket_modal_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
139
|
+
"ticket_modal_label_ok": "Zum Ticketshop",
|
|
140
|
+
"ticket_modal_label_cancel": "Abbrechen",
|
|
135
141
|
"ticker_more": "Zum Ticker",
|
|
136
142
|
"topictag_headline": "Alle Beiträge zum Thema {0}",
|
|
137
143
|
"topictag_metadescription_prefix": "Alle Beiträge zum Thema ",
|
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"livestream_plays": "Jetzt live",
|
|
113
113
|
"livestream_will_play": "Startet am {0}",
|
|
114
114
|
"livestream_will_play_with_time": "Startet am {0} um {1} Uhr",
|
|
115
|
+
"modal_user_consent_headline": "Sie verlassen unser Angebot",
|
|
116
|
+
"modal_user_consent_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
117
|
+
"modal_user_consent_label_cancel": "Abbrechen",
|
|
118
|
+
"modal_user_consent_label_ok": "Zur externen Internetseite",
|
|
115
119
|
"poster_copyright": "Bild © {0}",
|
|
116
120
|
"search_input_aria_submit": "Suche starten",
|
|
117
121
|
"search_input_placeholder": "Ort oder Thema suchen",
|
|
@@ -132,6 +136,8 @@
|
|
|
132
136
|
"story_program_supplier": "Thema in",
|
|
133
137
|
"ticket_modal_headline": "Weiterleitung zu einem Ticketservice",
|
|
134
138
|
"ticket_modal_text": "Der Link öffnet eine Internetseite außerhalb unseres Angebots. Wir sind für den Inhalt externer Internetseiten nicht verantwortlich.",
|
|
139
|
+
"ticket_modal_label_ok": "Zum Ticketshop",
|
|
140
|
+
"ticket_modal_label_cancel": "Abbrechen",
|
|
135
141
|
"ticker_more": "Zum Ticker",
|
|
136
142
|
"topictag_headline": "Alle Beiträge zum Thema {0}",
|
|
137
143
|
"topictag_metadescription_prefix": "Alle Beiträge zum Thema ",
|
|
@@ -170,7 +170,8 @@
|
|
|
170
170
|
@apply text-base;
|
|
171
171
|
@apply font-copy;
|
|
172
172
|
@apply list-none;
|
|
173
|
-
@apply border-button--dark;
|
|
173
|
+
@apply border-button--dark dark:border-navigation-border-color-dark;
|
|
174
|
+
@apply dark:border-opacity-75;
|
|
174
175
|
@apply fill-content-nav;
|
|
175
176
|
@apply text-content-nav;
|
|
176
177
|
@apply bg-white;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@->jsoninclude": "teaser/teasers.inc.json",
|
|
3
|
+
"@->contentpath": "teaser_link",
|
|
4
|
+
"@->overrides": [
|
|
5
|
+
{
|
|
6
|
+
"@->contentpath": "logicItem.includeModel.teaserSize",
|
|
7
|
+
"@->value": "50"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"@->contentpath": "logicItem.includeModel.realTeaserSize",
|
|
11
|
+
"@->value": "50"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"@->contentpath": "logicItem.includeModel.link.url",
|
|
15
|
+
"@->value": "https://tagesschau.de"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"@->contentpath": "logicItem.includeModel.link.isUserConsentNeeded",
|
|
19
|
+
"@->value": true
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
package/src/assets/tailwind.css
CHANGED
|
@@ -45,6 +45,9 @@
|
|
|
45
45
|
--color-search-footer-text: theme('colors.black.DEFAULT');
|
|
46
46
|
--search-icon-color: theme('colors.black.DEFAULT');
|
|
47
47
|
|
|
48
|
+
/* Content navi button border color for dark mode */
|
|
49
|
+
--color-navigation-border-color-dark: theme('colors.blue.danube');
|
|
50
|
+
|
|
48
51
|
/* Logo-Container Padding */
|
|
49
52
|
--logo-padding-top: 6px;
|
|
50
53
|
--logo-padding-bottom: 6px;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{{#with this.bannerImage}}
|
|
2
2
|
{{#if ../bannerLink}}
|
|
3
|
-
<a href="{{../bannerLink}}">
|
|
3
|
+
<a href="{{../bannerLink}}"{{#if (isUserConsentNeeded ../bannerLink)}} class="js-user-consent-needed"{{/if}}>
|
|
4
4
|
{{/if}}
|
|
5
5
|
{{#unless ../_hideOnMobile }}
|
|
6
6
|
{{~> components/base/image/responsive_image _type="banner" _variant="default" _addClass="print:hidden" _noDelay="true" _title=(loca "banner_image_copyright" (strip this.copyrightWithLinks html)) ~}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<a href="{{this}}" class="flex flex-nowrap items-center text-sm gap-x-2 text-primary hover:underline {{~#with _addClass }} {{this}}{{/with}}">
|
|
1
|
+
<a href="{{this}}" class="{{if (isUserConsentNeeded this) 'js-user-consent-needed ' ''}}flex flex-nowrap items-center text-sm gap-x-2 text-primary hover:underline {{~#with _addClass }} {{this}}{{/with}}">
|
|
2
2
|
{{~> components/base/image/icon _icon="arrow-left" _addClass="w-5 h-5 fill-current" ~}}
|
|
3
3
|
{{~loca "backlink_title" ~}}
|
|
4
4
|
</a>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<a {{#with _link.webviewUrl}}data-webviewurl="{{this}}"{{/with}} {{#if _link.isStaticUrl}}href="{{#if _link.site}}{{resourceUrl _link.url _site=_link.site}}{{else}}{{resourceUrl _link.url}}{{/if}}{{else}}href="{{_link.url}}{{/if}}{{#if this.hasComments}}#commentList{{/if}}"
|
|
2
|
-
class="sb-link ds-link js-load {{#if _isSelected}} {{defaultIfEmpty _selectedCssClass "-current"}}{{/if}}{{#if _css}} {{_css}}{{/if}} {{#> css}}{{/css}}"
|
|
2
|
+
class="sb-link ds-link js-load{{#if _link.isUserConsentNeeded}} js-user-consent-needed{{/if}} {{#if _isSelected}} {{defaultIfEmpty _selectedCssClass "-current"}}{{/if}}{{#if _css}} {{_css}}{{/if}} {{#> css}}{{/css}}"
|
|
3
3
|
{{#if _link.isTargetBlank}} target="_blank" rel="noopener{{#if _link.hasNoReferrerFlag}} noreferrer{{/if}}"{{/if}}
|
|
4
4
|
{{#if _isAriaHidden}} aria-hidden="true" tabindex="-1"{{/if}}
|
|
5
5
|
{{#> htmlProperties}}{{/htmlProperties}}
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
{{#with this.footerMetadata}}
|
|
32
32
|
{{#with this.dataProtectionLink}}
|
|
33
33
|
{{loca "cookies_setting_tracking_service_description_text"}}
|
|
34
|
-
<a class="block mt-2 ds-link text-link hover:underline" target="_blank"
|
|
34
|
+
<a class="{{if (isUserConsentNeeded this.url) 'js-user-consent-needed ' ''}}block mt-2 ds-link text-link hover:underline" target="_blank"
|
|
35
35
|
rel="noopener noreferrer" href="{{this.url}}"
|
|
36
36
|
title="Mehr Informationen zum Thema Datenschutz">Mehr Informationen zum Thema Datenschutz
|
|
37
37
|
{{#if this.isTargetBlank}}{{~> components/base/image/icon _icon="extern" _addClass="h-5 w-5 -mt-0.5 fill-current ml-1 inline-flex" _iconmap="icons"~}}{{/if}}
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
<ul class="{{#if _webview}} hidden{{/if}}">
|
|
49
49
|
<li class="px-6 py-3 flex justify-between items-center bg-white border-t border-[#e3e3e3] tracking_1">
|
|
50
50
|
<span class="text-base text-black">AGF <a
|
|
51
|
-
class="mt-3 -mb-1 ds-link text-link hover:underline" target="_blank" rel="noopener noreferrer"
|
|
51
|
+
class="{{if (isUserConsentNeeded 'https://www.agf.de/') 'js-user-consent-needed ' ''}}mt-3 -mb-1 ds-link text-link hover:underline" target="_blank" rel="noopener noreferrer"
|
|
52
52
|
href="https://www.agf.de/" title="AGF">(https://www.agf.de/){{~> components/base/image/icon _icon="extern" _addClass="h-5 w-5 -mt-0.5 fill-current ml-1 inline-flex" _iconmap="icons"~}}</a></span>
|
|
53
53
|
<div class="flex w-fit toggleSwitch">
|
|
54
54
|
{{> components/forms/toggle_button _id="agf" _addClass="js-toggleSwitch-checkbox js-toggleSwitch-tracking" _isInitiallyHidden=false _screenReaderText="agf aktivieren/deaktivieren" }}
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
</li>
|
|
57
57
|
<li class="px-6 py-3 flex justify-between items-center bg-white border-t border-[#e3e3e3] tracking_2">
|
|
58
58
|
<span class="text-base text-black">AT Internet <a
|
|
59
|
-
class="mt-3 -mb-1 ds-link text-link hover:underline" target="_blank" rel="noopener noreferrer"
|
|
59
|
+
class="{{if (isUserConsentNeeded 'https://www.atinternet.com/de/') 'js-user-consent-needed ' ''}}mt-3 -mb-1 ds-link text-link hover:underline" target="_blank" rel="noopener noreferrer"
|
|
60
60
|
href="https://www.atinternet.com/de/"
|
|
61
61
|
title="AT Internet">(https://www.atinternet.com/de/){{~> components/base/image/icon _icon="extern" _addClass="h-5 w-5 -mt-0.5 fill-current ml-1 inline-flex" _iconmap="icons"~}}</a></span>
|
|
62
62
|
<div class="flex w-fit toggleSwitch">
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
{{#with this.footerMetadata}}
|
|
72
72
|
{{#with this.dataProtectionLink}}
|
|
73
73
|
{{loca "cookies_setting_description_text"}}
|
|
74
|
-
<a class="block mt-2 ds-link text-link hover:underline" target="_blank"
|
|
74
|
+
<a class="{{if (isUserConsentNeeded this.url) 'js-user-consent-needed ' ''}}block mt-2 ds-link text-link hover:underline" target="_blank"
|
|
75
75
|
rel="noopener noreferrer" href="{{this.url}}"
|
|
76
76
|
title="Mehr Informationen zum Thema Datenschutz">Mehr Informationen zum Thema Datenschutz
|
|
77
77
|
{{#if this.isTargetBlank}}{{~> components/base/image/icon _icon="extern" _addClass="h-5 w-5 -mt-0.5 fill-current ml-1 inline-flex" _iconmap="icons"~}}{{/if}}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
<div class="flex flex-col border-event-calendar-secondary border gap-x-4 js-load" data-hr-filterer-ds="{}">
|
|
2
2
|
{{> @partial-block }}
|
|
3
|
+
{{#> components/modal/modal _type="userConsent" _trigger=".js-ticket-button-user-consent-needed"}}
|
|
4
|
+
{{> components/modal/user_consent _link=this.link _headline=(loca "ticket_modal_headline") _text=(loca "ticket_modal_text") _labelOk=(loca "ticket_modal_label_ok") _labelCancel=(loca "ticket_modal_label_cancel")}}
|
|
5
|
+
{{/components/modal/modal}}
|
|
3
6
|
</div>
|
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
<div class="static pt-1 pb-3 pl-4 sm:absolute sm:pl-0 sm:pt-0 sm:pb-0 sm:right-4 sm:bottom-4">
|
|
2
|
-
{{
|
|
3
|
-
{{
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
{{
|
|
8
|
-
|
|
9
|
-
{{
|
|
10
|
-
|
|
2
|
+
{{#with this}}
|
|
3
|
+
{{#> components/button/button _css="js-ticket-button-user-consent-needed"_id=(nextRandom) _size="lg"}}
|
|
4
|
+
{{> components/button/components/button_icon _icon="ticket" _iconmap="icons" _css="mr-2"}}
|
|
5
|
+
{{>components/button/components/button_label _css='' _label="Tickets"}}
|
|
6
|
+
{{/components/button/button}}
|
|
7
|
+
{{#*inline "htmlProperties"~}}
|
|
8
|
+
data-user-consent-link='{"url":"{{this.link.url}}","isTargetBlank":{{this.link.isTargetBlank}} }'
|
|
9
|
+
data-user-consent-tracking-data="{{this.link.cmsDocument.trackingInformations.ticketLink}}"
|
|
10
|
+
{{~/inline}}
|
|
11
|
+
{{/with}}
|
|
11
12
|
|
|
12
|
-
<div class="flex flex-wrap mt-4">
|
|
13
|
-
{{#> components/button/button _size="lg" _variant="tertiary" _value="cancel" _css="mr-4 mt-4"}}
|
|
14
|
-
{{>components/button/components/button_label _label="Abbrechen" _css=""}}
|
|
15
|
-
{{/components/button/button}}
|
|
16
|
-
{{#> components/button/link_button _link=this.link _size="lg" _css="js-ticket-ok-button js-modal-close mt-4"}}
|
|
17
|
-
{{>components/button/components/button_label _label="Zum Ticketshop" _css=""}}
|
|
18
|
-
{{/components/button/link_button}}
|
|
19
|
-
</div>
|
|
20
|
-
{{/components/modal/modal}}
|
|
21
13
|
<noscript>
|
|
22
14
|
<style>
|
|
23
15
|
#{{getRandom}} {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<ul class="flex flex-wrap gap-x-4 w-fit sm:w-full sm:pt-2 ">
|
|
6
6
|
{{~#each this~}}
|
|
7
7
|
<li class="w-fit sm:w-full text-primary dark:text-standard-text-dark">
|
|
8
|
-
<a class="block hover:underline gap-x-1" href="{{this.url}}">
|
|
8
|
+
<a class="{{if (isUserConsentNeeded this.url) 'js-user-consent-needed ' ''}}block hover:underline gap-x-1" href="{{this.url}}">
|
|
9
9
|
{{~> components/base/image/icon _icon="ortsmarke" _addClass="inline w-5 h-5 mr-2 fill-current"~}}
|
|
10
10
|
|
|
11
11
|
{{~this.title~}}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{{/with~}}
|
|
9
9
|
{{/unless}}
|
|
10
10
|
{{#with _teaser}}
|
|
11
|
-
{{#if this.isTickerTeaser}}<a href="{{this.link.url}}" aria-label="Zum Ticker" tabindex="-1">{{/if}}
|
|
11
|
+
{{#if this.isTickerTeaser}}<a href="{{this.link.url}}" aria-label="Zum Ticker" tabindex="-1"{{#if (isUserConsentNeeded this.link.url)}} class="js-user-consent-needed"{{/if}}>{{/if}}
|
|
12
12
|
{{~> components/base/image/responsive_image this.teaserImage _type=(if this.teaserType this.teaserType 'story') _variant=(if this.content.imageVariant this.content.imageVariant '100-copytext') _addClassImg=(appendToDefault _addClassImg-adjust_context "ar__content") _noDelay=this.dontLazyload ~}}
|
|
13
13
|
{{#if this.isTickerTeaser}}</a>{{/if}}
|
|
14
14
|
{{/with}}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { hr$, listen, unlisten, addLink } from 'hrQuery'
|
|
2
|
+
import dialogPolyfill from 'dialog-polyfill'
|
|
3
|
+
|
|
4
|
+
const DefaultModal = function (options, rootElement) {
|
|
5
|
+
const dialogPolyfillBaseUrl = options.dialogPolyfillBaseUrl || 'vendor/dialog-polyfill',
|
|
6
|
+
modalTrigger = options.trigger || null,
|
|
7
|
+
triggerRoot = document.body,
|
|
8
|
+
modal = hr$('.js-modal', rootElement)[0],
|
|
9
|
+
closeButtonTrigger = ".js-modal-close"
|
|
10
|
+
|
|
11
|
+
const configureEventListeners = () => {
|
|
12
|
+
listen('click', handleClick, triggerRoot)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const handleClick = (event) => {
|
|
16
|
+
if (null !== modalTrigger) {
|
|
17
|
+
let triggerNode = event.target.closest(modalTrigger)
|
|
18
|
+
let nodeToCloseModal = event.target.closest(closeButtonTrigger)
|
|
19
|
+
if (null !== triggerNode) {
|
|
20
|
+
event.preventDefault()
|
|
21
|
+
show()
|
|
22
|
+
} else if (null !== nodeToCloseModal) {
|
|
23
|
+
close()
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const configurePolyfillIfNeeded = () => {
|
|
29
|
+
if (undefined == modal.showModal) {
|
|
30
|
+
addLink('dialog-polyfill-css', `${dialogPolyfillBaseUrl}/dialog-polyfill.css`, {
|
|
31
|
+
type: 'text/css',
|
|
32
|
+
rel: 'stylesheet',
|
|
33
|
+
})
|
|
34
|
+
}
|
|
35
|
+
dialogPolyfill.registerDialog(modal)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const show = () => {
|
|
39
|
+
modal.showModal()
|
|
40
|
+
listen('click', closeFromOutside, modal)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const closeFromOutside = (event) => {
|
|
44
|
+
if (event.target === modal) {
|
|
45
|
+
unlisten('click', closeFromOutside, modal)
|
|
46
|
+
close()
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const close = () => {
|
|
51
|
+
modal.close()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
configurePolyfillIfNeeded()
|
|
55
|
+
configureEventListeners()
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default DefaultModal
|
|
@@ -1,60 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import dialogPolyfill from 'dialog-polyfill'
|
|
1
|
+
import DefaultModal from 'components/modal/defaultModal.subfeature'
|
|
2
|
+
import UserConsentModal from 'components/modal/userConsentModal.subfeature'
|
|
4
3
|
|
|
5
4
|
const Modal = (context) => {
|
|
6
5
|
const { options } = context,
|
|
7
6
|
{ element: rootElement } = context,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
listen('click', clickTracking, ticketShopButton)
|
|
18
|
-
listen('click', show, modalTrigger)
|
|
19
|
-
|
|
20
|
-
modalCloseTriggers.forEach((modalCloseTrigger) => {
|
|
21
|
-
listen('click', close, modalCloseTrigger)
|
|
22
|
-
})
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const configurePolyfillIfNeeded = () => {
|
|
26
|
-
if (undefined == modal.showModal) {
|
|
27
|
-
addLink('dialog-polyfill-css', `${dialogPolyfillBaseUrl}/dialog-polyfill.css`, {
|
|
28
|
-
type: 'text/css',
|
|
29
|
-
rel: 'stylesheet',
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
dialogPolyfill.registerDialog(modal)
|
|
7
|
+
type = options.type || "default"
|
|
8
|
+
|
|
9
|
+
switch (type) {
|
|
10
|
+
case "userConsent":
|
|
11
|
+
new UserConsentModal(options, rootElement)
|
|
12
|
+
break;
|
|
13
|
+
default:
|
|
14
|
+
new DefaultModal(options, rootElement)
|
|
15
|
+
break;
|
|
33
16
|
}
|
|
34
|
-
|
|
35
|
-
const clickTracking = () => {
|
|
36
|
-
console.log('tracking')
|
|
37
|
-
uxAction(trackingInformations)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const show = () => {
|
|
41
|
-
modal.showModal()
|
|
42
|
-
listen('click', closeFromOutside, modal)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const closeFromOutside = (event) => {
|
|
46
|
-
if (event.target === modal) {
|
|
47
|
-
unlisten('click', closeFromOutside, modal)
|
|
48
|
-
close()
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const close = () => {
|
|
53
|
-
modal.close()
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
configurePolyfillIfNeeded()
|
|
57
|
-
configureEventListeners()
|
|
58
17
|
}
|
|
59
18
|
|
|
60
19
|
export default Modal
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div class="js-load" data-hr-modal='{"
|
|
1
|
+
<div class="js-load" data-hr-modal='{"trigger":"{{if _trigger _trigger ""}}", "type":"{{defaultIfEmpty _type 'default'}}", "dialogPolyfillBaseUrl":"{{resourceUrl (configProperty 'dialogPolyfill.baseUrl')}}"}'>
|
|
2
2
|
<dialog class='js-modal p-0 backdrop:bg-gray-scorpion/90 shadow-md {{defaultIfEmpty _css "sm:max-w-xl"}}'>
|
|
3
3
|
<form method="dialog" class="js-dialog-content p-4">
|
|
4
4
|
{{> @partial-block }}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ArgsTable, Meta, Story, Canvas, Preview } from '@storybook/blocks'
|
|
2
|
+
import * as ModalStories from './modal.stories'
|
|
3
|
+
|
|
4
|
+
<Meta of={ModalStories} />
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# Modal
|
|
8
|
+
|
|
9
|
+
- [Übersicht](#übersicht)
|
|
10
|
+
- [Eigenschaften](#eigenschaften)
|
|
11
|
+
- [Varianten](#varianten)
|
|
12
|
+
- [Verwendung](#verwendung)
|
|
13
|
+
|
|
14
|
+
## Übersicht
|
|
15
|
+
|
|
16
|
+
Die Modal Komponente erlaubt es frei wählbare Inhalte in einem Modal anzuzeigen. Geöffnet werden kann ein Modal durch klicken auf einen
|
|
17
|
+
mit einer bestimmten CSS Klasse ausgezeichneten Link oder Button. Zur Anzeige des Modal wird das native [HTML Dialog Element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog?retiredLocale=de) verwendet.
|
|
18
|
+
Standardmäßig kann dieses durch Drücken der `ESC` Taste geschlossen werden.
|
|
19
|
+
Damit auch ältere Browser, die das Dialog Element noch nicht unterstützen, das Modal anzeigen können, wird ein Polyfill eingebunden.
|
|
20
|
+
|
|
21
|
+
<Canvas>
|
|
22
|
+
<Story of={ModalStories.defaultModal} />
|
|
23
|
+
</Canvas>
|
|
24
|
+
|
|
25
|
+
## Eigenschaften
|
|
26
|
+
|
|
27
|
+
<ArgsTable story="Default Modal" />
|
|
28
|
+
|
|
29
|
+
## Varianten
|
|
30
|
+
|
|
31
|
+
Das Modal existiert derzeit in zwei Varianten. Die zu nutzende Variante wird beim Einbinden der Modal Komponente
|
|
32
|
+
über den Parameter `_variant` konfiguriert.
|
|
33
|
+
|
|
34
|
+
<Canvas>
|
|
35
|
+
<Story of={ModalStories.defaultModal} />
|
|
36
|
+
</Canvas>
|
|
37
|
+
|
|
38
|
+
und `userConsent`
|
|
39
|
+
<Canvas>
|
|
40
|
+
<Story of={ModalStories.userConsentModal} />
|
|
41
|
+
</Canvas>
|
|
42
|
+
|
|
43
|
+
## Verwendung
|
|
44
|
+
|
|
45
|
+
Die Modal Komponente wird mit der Handlebar Komponente `components/modal/modal` eingebunden.
|
|
46
|
+
Die Komponente ist so konzipiert, dass sie im optimalen Fall nur einmal auf einer Seite eingebunden werden muss (am besten in der Nähe des Footers).
|
|
47
|
+
Jeder Link oder jeder Button auf einer Seite kann so konfiguriert werden, dass er das Modal öffnet. Mit welcher CSS Hook Klasse das Modal
|
|
48
|
+
geöffnet werden soll, wird bei der Einbindung der Komponente mit dem Parameter `_trigger` konfiguriert. Jeder Button oder jeder Link auf der Seite
|
|
49
|
+
in der die Komponente eingebunden ist und die im Modal konfigurierte CSS Hook Klasse besitzt, öffnet bei Klick das Modal.
|
|
50
|
+
|
|
51
|
+
Die Modal Komponente ist eine Block Komponente. Auf diese Weise ist es möglich ein Modal mit beliebigem Inhalt anzulegen.
|
|
52
|
+
|
|
53
|
+
### Default
|
|
54
|
+
|
|
55
|
+
Die Einbindung eines Default Modals erfolgt wie anhand folgenden Beispiels zu sehen.
|
|
56
|
+
|
|
57
|
+
```handlebars
|
|
58
|
+
{{#> components/modal/modal _variant="default" _trigger="js-modal"}}
|
|
59
|
+
{{#> components/teaser/components/teaser_headline}}
|
|
60
|
+
{{> components/teaser/components/teaser_title _text="Überschrift Default Modal" _css="text-2xl"}}
|
|
61
|
+
{{/components/teaser/components/teaser_headline}}
|
|
62
|
+
<p class="mt-2 text-base font-copy">Hier steht der Text des Modals. Dies ist nur ein Beispiel. Das modal Template stellt nur den Rahmen
|
|
63
|
+
des Modals zur Verfügung. In dem Modal kann dargestellt werden was man möchte.</p>
|
|
64
|
+
{{/components/modal/modal}}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Innerhalb des Modals kann beliebiges Markup und/oder beliebige andere Komponenten angezeigt werden. Die hier konfigurierte Trigger Klasse
|
|
68
|
+
`js-modal` ist lediglich ein Beispiel. Sie sollte jedoch, um sich klar von normalen CSS-Klassen zu unterscheiden das Prefix `js-` tragen.
|
|
69
|
+
Ein mit der Variante `default` erzeugtes Modal besitzt nur die Grundfunktionalität eines Modals. Sie erlaubt das Modal durch Klick auf ein mit der
|
|
70
|
+
Trigger Klasse ausgezeichneten Link oder Button zu öffnen. Weiterhin kann das geöffnete Modal durch Drücken der `ESC` Taste, durch Klicken in den
|
|
71
|
+
ausgegrauten Bereich außerhalb des Modals oder durch Klicken auf einen Button, dessen `value` Parameter den Wert `cancel` trägt, geschlossen werden.
|
|
72
|
+
Da als Basis der Modal Komponente das native HTML Dialog Element genutzt wird, ist sie auch bereits standarmäßig weitgehend barrierfrei. Ein Focus Trap,
|
|
73
|
+
das heißt sofern ich das Modal nicht explizit schließe bleibe ich bei Drücken der `Tab` Taste ausschließlich innerhalb des Modals, steht standardmäßig zur
|
|
74
|
+
Verfügung.
|
|
75
|
+
|
|
76
|
+
### User Consent
|
|
77
|
+
Dieses Variante wurde speziell für den Anwendungsfall einer Zweiklicklösung erstellt. Sie ermöglicht es, dass bei Klick auf einen Link
|
|
78
|
+
der Nutzer in einem Modal darauf hingewiesen wird, dass er nun das HR Internetangebot verlässt und er erst bei einer aktiven Bestätigung
|
|
79
|
+
mit Hilfe eines weiteren Klicks den eigentlichen Link aufrufen kann. Die Variante kann, wie im Folgenen gezeigt, eingebunden werden.
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
```handlebars
|
|
83
|
+
{{#> components/modal/modal _variant="userConsent" _trigger="js-user-consent-needed"}}
|
|
84
|
+
{{> components/modal/user_consent _headline=(loca "modal_user_consent_headline") _text=(loca "modal_user_consent_text") _labelOk=(loca "modal_user_consent_label_ok") _labelCancel=(loca "modal_user_consent_label_cancel")}}
|
|
85
|
+
{{/components/modal/modal}}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Für den Inhalt des Modals wurde eine eigene Komponente `components/modal/user_consent` erstellt. Sie erzeugt eine Überschrift, einen erläuternden Text sowie
|
|
89
|
+
einen Abbrechen- und einen Ok-Button. Die konkreten Texte können der Komponente entweder über die Parameter `_headline`, `_text`, `_labelOk` und `_labelCancel`
|
|
90
|
+
direkt beim Aufruf übergeben werden oder werden, wenn beim Aufruf keine Parameter übergeben werden, aus den Locatags `modal_user_consent_headline`, `modal_user_consent_text`,
|
|
91
|
+
`modal_user_consent_label_ok` und `modal_user_consent_label_cancel` gezogen.
|
|
92
|
+
Für die speziellen Funktionen dieser Variante wurde ein separates Javascript Subfeature erzeugt. Dies sorgt dafür, dass der Variante neben allen
|
|
93
|
+
Eigenschaften der `default` Variante, auch noch speziell für die Zweiklick Lösung benötigte Funktionalitäten zur Verfügung stehen.
|
|
94
|
+
Ist das das Modal aufrufende Element ein Link, werden aus diesem die Werte des `href`, des `target` und des `rel` Attributes ausgelesen und damit
|
|
95
|
+
der Link des `OK`-Buttons erzeugt. Ist das aufrufende Element ein Button (z.B. beim [Event-Ticket-Button](?path=/story/komponenten-teaser-eventkalender--teaser-100)),
|
|
96
|
+
müssen diese Information in dem `data-user-consent-link`-Attribut des Buttons als JSON in der Form
|
|
97
|
+
`{"url":"https://www.beispiel.de","isTargetBlank":true/false}` hinterlegt werden. Wird hier bei `isTargetBlank` der Wert `true` übergeben, erhält der
|
|
98
|
+
im Modal erzeugte Link des OK-Buttons automatisch das attribut `rel="noopener"` gesetzt.
|
|
99
|
+
|
|
100
|
+
### Neue Varianten
|
|
101
|
+
Wird ein Modal mit einer komplett neuen Funktionalität benötigt, muss eine neue Variante erstellt und der Komponente hinzugefügt werden. Hierzu muss
|
|
102
|
+
ein Name für die neue Variante gewählt und die `switch`-Anweisung in `components/modal/modal.feature.js` um einen neuen Fall mit diesem
|
|
103
|
+
Namen erweitert werden. Die eigentliche Funktionalität muss in einem Javascript Subfeature umgesetzt werden.
|
|
104
|
+
|