hr-design-system-handlebars 1.34.7 → 1.35.1

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/assets/brand/_default/conf/locatags.json +15 -1
  3. package/dist/assets/icons/icons/svgmap/suche-ds.svg +4 -0
  4. package/dist/assets/icons/icons/svgmap/twitter-ds.svg +1 -1
  5. package/dist/assets/icons/icons/svgmap.min.svg +1 -1
  6. package/dist/assets/index.css +127 -16
  7. package/dist/assets/js/components/dataPolicySettings/dataPolicySettingsDs.feature.js +285 -0
  8. package/dist/assets/js/components/externalService/datapolicyCookie.subfeature.js +41 -0
  9. package/dist/views/components/dataPolicySettings/data_policy_settings.hbs +99 -0
  10. package/dist/views/components/footer/page_footer_column.hbs +1 -3
  11. package/dist/views/components/footer/page_footer_content.hbs +1 -6
  12. package/dist/views/components/footer/page_footer_nav_link.hbs +1 -1
  13. package/dist/views/components/footer/page_footer_social_media.hbs +2 -2
  14. package/dist/views/components/forms/toggle_button.hbs +2 -0
  15. package/dist/views/components/site_header/navigation_search/quick_search_form.hbs +2 -8
  16. package/dist/views_static/components/dataPolicySettings/data_policy_settings.hbs +99 -0
  17. package/dist/views_static/components/footer/page_footer_column.hbs +1 -3
  18. package/dist/views_static/components/footer/page_footer_content.hbs +1 -6
  19. package/dist/views_static/components/footer/page_footer_nav_link.hbs +1 -1
  20. package/dist/views_static/components/footer/page_footer_social_media.hbs +2 -2
  21. package/dist/views_static/components/forms/toggle_button.hbs +2 -0
  22. package/dist/views_static/components/site_header/navigation_search/quick_search_form.hbs +2 -8
  23. package/package.json +1 -1
  24. package/src/assets/brand/_default/conf/locatags.json +15 -1
  25. package/src/assets/brand/hessenschau/conf/locatags.merged.json +13 -0
  26. package/src/assets/brand/hr/conf/locatags.merged.json +13 -0
  27. package/src/assets/brand/hr-bigband/conf/locatags.merged.json +13 -0
  28. package/src/assets/brand/hr-fernsehen/conf/locatags.merged.json +13 -0
  29. package/src/assets/brand/hr-inforadio/conf/locatags.merged.json +13 -0
  30. package/src/assets/brand/hr-rundfunkrat/conf/locatags.merged.json +13 -0
  31. package/src/assets/brand/hr-sinfonieorchester/conf/locatags.merged.json +13 -0
  32. package/src/assets/brand/hr-werbung/conf/locatags.merged.json +13 -0
  33. package/src/assets/brand/hr1/conf/locatags.merged.json +13 -0
  34. package/src/assets/brand/hr2/conf/locatags.merged.json +13 -0
  35. package/src/assets/brand/hr3/conf/locatags.merged.json +13 -0
  36. package/src/assets/brand/hr4/conf/locatags.merged.json +13 -0
  37. package/src/assets/brand/you-fm/conf/locatags.merged.json +13 -0
  38. package/src/assets/css/custom-utilities.css +16 -0
  39. package/src/assets/fixtures/footer/footer_hessenschau.json +42 -1
  40. package/src/assets/icons/icons/svgmap/suche-ds.svg +4 -0
  41. package/src/assets/icons/icons/svgmap/twitter-ds.svg +1 -1
  42. package/src/assets/icons/icons/svgmap.min.svg +1 -1
  43. package/src/assets/tailwind.css +2 -0
  44. package/src/stories/views/components/dataPolicySettings/dataPolicySettingsDs.feature.js +285 -0
  45. package/src/stories/views/components/dataPolicySettings/data_policy_settings.hbs +99 -0
  46. package/src/stories/views/components/externalService/datapolicyCookie.subfeature.js +41 -0
  47. package/src/stories/views/components/footer/fixtures/footer_hessenschau.json +1 -1
  48. package/src/stories/views/components/footer/page_footer_column.hbs +1 -3
  49. package/src/stories/views/components/footer/page_footer_content.hbs +1 -6
  50. package/src/stories/views/components/footer/page_footer_nav_link.hbs +1 -1
  51. package/src/stories/views/components/footer/page_footer_social_media.hbs +2 -2
  52. package/src/stories/views/components/forms/toggle_button.hbs +2 -0
  53. package/src/stories/views/components/site_header/navigation_search/quick_search_form.hbs +2 -8
  54. package/tailwind.config.js +5 -2
@@ -0,0 +1,285 @@
1
+ import DatapolicyCookie from 'components/externalService/datapolicyCookie.subfeature'
2
+ import TrackingCookie from 'components/externalService/trackingCookie.subfeature'
3
+ import { fireEvent, getJSONCookie, hr$, setJSONCookie, listen } from 'hrQuery'
4
+ import { uxAction } from 'base/tracking/atiHelper.subfeature'
5
+
6
+ const DataPolicySettings = function (context) {
7
+ const { options } = context,
8
+ { element: rootElement } = context,
9
+ settingsButtons = hr$('.js-data-policy-settings-button', document),
10
+ overlay = hr$('.js-data-policy-settings-overlay', rootElement)[0],
11
+ closeButton = hr$('.js-data-policy-settings-close-button', rootElement)[0],
12
+ bodyElement = document.getElementsByTagName('html')[0],
13
+ datapolicyCookie = new DatapolicyCookie(),
14
+ trackingCookie = new TrackingCookie(),
15
+ toggleSwitches = hr$('.js-toggleSwitch-checkbox', rootElement),
16
+ toggleSwitchesExternal = hr$('.js-toggleSwitch-external', rootElement),
17
+ toggleSwitchesTracking = hr$('.js-toggleSwitch-tracking', rootElement),
18
+ toggleAllSwitch = hr$('.js-toggleSwitch-checkbox-all', rootElement)[0],
19
+ providerTitle = hr$('.js-providerTitle', rootElement)[0],
20
+ trackingCookieLifetime = 1000 * 60 * 60 * 24 * 365 * 10
21
+ let atiSecondLevelId = window.xtn2,
22
+ isWebview = window.parent.document.documentElement.classList.contains('webview'),
23
+ //isWebview = window.location.href.match(/(app)(\.[a-zA-Z]*)(\.de)/i), //App URL ...app.hr.de
24
+ //isWebview = window.location.href.match(/(app)/i), //App URL ...app.hr.de
25
+ cookie = {}
26
+
27
+ console.log("gelaaaadeeeeeeeen")
28
+ ///////////////////
29
+ // OVERLAY START //
30
+ ///////////////////
31
+ const showSettingsButton = function () {
32
+ let settingsButton = document.getElementById('globalSettingsButton')
33
+ if (isWebview) {
34
+ console.log('Button Anzeige steuern')
35
+ readAppSettingsButtonCookie()
36
+ console.log(cookie['hidePrivacySettingsButton'])
37
+ if (cookie['hidePrivacySettingsButton'] === true) {
38
+ settingsButton.style.display = 'none'
39
+ } else {
40
+ settingsButton.style.display = 'inline-flex'
41
+ }
42
+ } else {
43
+ settingsButton.style.display = 'inline-flex'
44
+ console.log('Button immer anzeigen, weil nicht App')
45
+ }
46
+ }
47
+ const readAppSettingsButtonCookie = function () {
48
+ cookie = getJSONCookie('appSettings') || {}
49
+ }
50
+ const writeAppSettingsButtonCookie = function () {
51
+ cookie = 'true'
52
+ setJSONCookie('hsAppSettingsButton', cookie, trackingCookieLifetime)
53
+ }
54
+ const initializeSettingsButtons = function () {
55
+ for (let i = 0; i < settingsButtons.length; ++i) {
56
+ if (settingsButtons.length - i == 1) {
57
+ listen(
58
+ 'click',
59
+ function () {
60
+ openDialog('Footer')
61
+ atiSecondLevelId = 1
62
+ },
63
+ settingsButtons[i]
64
+ )
65
+ } else {
66
+ if (!settingsButtons[i].getAttribute('listener')) {
67
+ listen(
68
+ 'click',
69
+ function () {
70
+ openDialog('DSGVO-Overlay')
71
+ },
72
+ settingsButtons[i]
73
+ )
74
+ settingsButtons[i].setAttribute('listener', 'true')
75
+ }
76
+ }
77
+ }
78
+ }
79
+ const openDialog = function (settingsButtonLocation) {
80
+ overlay.classList.add('!flex')
81
+ bodyElement.classList.add('optionOpen')
82
+ uxAction('Einstellungsdialog geöffnet - ' + settingsButtonLocation, atiSecondLevelId)
83
+ }
84
+ const closeDialogeOnOverlay = function (e) {
85
+ if (e.target !== this) return
86
+ closeDialog()
87
+ }
88
+ const closeDialog = function () {
89
+ overlay.classList.remove('!flex')
90
+ bodyElement.classList.remove('optionOpen')
91
+ }
92
+ const shouldDialogBeOpendOnLoad = function () {
93
+ const urlParam = getUrlVars()['openDialog']
94
+ if (typeof urlParam !== 'undefined' && urlParam === 'true') {
95
+ openDialog('Datenschutzerklärung')
96
+ }
97
+ }
98
+ const getUrlVars = function () {
99
+ let vars = {}
100
+ const parts = window.location.href.replace(
101
+ /[?&]+([^=&]+)=([^&]*)/gi,
102
+ function (m, key, value) {
103
+ vars[key] = value
104
+ }
105
+ )
106
+ return vars
107
+ }
108
+ ///////////////////
109
+ // OVERLAY END ////
110
+ ///////////////////
111
+
112
+ /////////////////////
113
+ // TOGGLES START ////
114
+ /////////////////////
115
+
116
+ const initializeToggleStateExternal = function () {
117
+ for (let i = 0; i < toggleSwitchesExternal.length; ++i) {
118
+ initializeEventListenerForService(i)
119
+
120
+ setListenerForService(toggleSwitchesExternal[i])
121
+
122
+ if (isCookieSetForService(toggleSwitchesExternal[i].id)) {
123
+ toggleSwitchesExternal[i].checked = true
124
+ } else if (
125
+ !isCookieExistForService(toggleSwitchesExternal[i].id) &&
126
+ toggleSwitchesExternal[i].getAttribute('initial') == 'checked'
127
+ ) {
128
+ toggleSwitchesExternal[i].checked = true
129
+ setCookieForService(toggleSwitchesExternal[i])
130
+ }
131
+ }
132
+
133
+ toggleAllSwitch.checked = allTogglesChecked()
134
+ changeProviderTitle()
135
+ }
136
+ const initializeToggleStateTracking = function () {
137
+ for (let i = 0; i < toggleSwitchesTracking.length; ++i) {
138
+ initializeEventListenerForTracking(i)
139
+
140
+ setListenerForTracking(toggleSwitchesTracking[i])
141
+
142
+ if (isCookieSetForTracking(toggleSwitchesTracking[i].id)) {
143
+ toggleSwitchesTracking[i].checked = true
144
+ }
145
+
146
+ if (
147
+ !isCookieExistForTracking(toggleSwitchesTracking[i].id) &&
148
+ toggleSwitchesTracking[i].getAttribute('initial') == 'checked'
149
+ ) {
150
+ toggleSwitchesTracking[i].checked = true
151
+ setCookieForTracking(toggleSwitchesTracking[i])
152
+ }
153
+ }
154
+ }
155
+ const initializeEventListenerForService = function (serviceId) {
156
+ listen(
157
+ 'hr:externalService-activate-' + toggleSwitchesExternal[serviceId].id,
158
+ function () {
159
+ toggleSwitchesExternal[serviceId].checked = true
160
+ },
161
+ document
162
+ )
163
+ }
164
+ const initializeEventListenerForTracking = function (serviceId) {
165
+ listen(
166
+ 'hr:trackingService-activate-' + toggleSwitchesTracking[serviceId].id,
167
+ function () {
168
+ toggleSwitchesTracking[serviceId].checked = true
169
+ },
170
+ document
171
+ )
172
+ }
173
+ const setListenerForService = function (element) {
174
+ listen(
175
+ 'change',
176
+ function () {
177
+ setCookieForService(element)
178
+ toggleAllSwitch.checked = allTogglesChecked()
179
+ changeProviderTitle()
180
+ },
181
+ element
182
+ )
183
+ }
184
+ const setListenerForTracking = function (element) {
185
+ listen(
186
+ 'change',
187
+ function () {
188
+ setCookieForTracking(element)
189
+ },
190
+ element
191
+ )
192
+ }
193
+ const setCookieForService = function (element) {
194
+ datapolicyCookie.setCookieForExternalService(element.id, element.checked)
195
+ if (element.checked) {
196
+ fireEvent('hr:externalService-activate-' + element.id)
197
+ } else {
198
+ console.log('fireEvent: hr:externalService-deactivate-' + element.id)
199
+ fireEvent('hr:externalService-deactivate-' + element.id)
200
+ }
201
+ }
202
+ const setCookieForTracking = function (element) {
203
+ trackingCookie.setCookieForTracking(element.id, element.checked)
204
+ if (element.checked) {
205
+ fireEvent('hr:trackingService-activate-' + element.id)
206
+ } else {
207
+ fireEvent('hr:trackingService-deactivate-' + element.id)
208
+ }
209
+ }
210
+ const toggleAll = function () {
211
+ console.log('Toggle All' + toggleAllSwitch.checked)
212
+
213
+ for (let i = 0; i < toggleSwitchesExternal.length; ++i) {
214
+ if (toggleSwitchesExternal[i].checked != toggleAllSwitch.checked) {
215
+ toggleSwitchesExternal[i].checked = toggleAllSwitch.checked
216
+ setCookieForService(toggleSwitchesExternal[i])
217
+ }
218
+ }
219
+
220
+ changeProviderTitle()
221
+ }
222
+ const allTogglesChecked = function () {
223
+ let allChecked
224
+
225
+ for (let i = 0; i < toggleSwitchesExternal.length; ++i) {
226
+ if (toggleSwitchesExternal[i].checked) {
227
+ allChecked = true
228
+ } else {
229
+ allChecked = false
230
+
231
+ break
232
+ }
233
+ }
234
+ return allChecked
235
+ }
236
+ const changeProviderTitle = function () {
237
+ if (toggleAllSwitch.checked == true) {
238
+ providerTitle.textContent = 'Alle Anbieter deaktivieren'
239
+ } else {
240
+ providerTitle.textContent = 'Alle Anbieter aktivieren'
241
+ }
242
+ }
243
+ const isCookieSetForService = function (externalService) {
244
+ return datapolicyCookie.isDatapolicyAccepted(externalService)
245
+ }
246
+ const isCookieSetForTracking = function (trackingService) {
247
+ return trackingCookie.isTrackingAccepted(trackingService)
248
+ }
249
+ const isCookieExistForService = function (externalService) {
250
+ return datapolicyCookie.isDatapolicyExistent(externalService)
251
+ }
252
+ const isCookieExistForTracking = function (trackingService) {
253
+ return trackingCookie.isTrackingCookieExistent(trackingService)
254
+ }
255
+ const initializeEventListeners = function () {
256
+ listen('hr:settingsButtonInsideDataPolicyBoxClicked', function () {
257
+ openDialog('DSGVO-Overlay')
258
+ })
259
+ listen('change', toggleAll, toggleAllSwitch)
260
+ listen('click', closeDialog, closeButton)
261
+ listen('click', closeDialogeOnOverlay, overlay)
262
+ }
263
+ // steuert die Darstellung des Buttons für die hs-App ///
264
+ showSettingsButton()
265
+ //// 1. Alle Settings Buttons initialisieren ////
266
+ initializeSettingsButtons()
267
+
268
+ //// 2. Toggle States aller Switches setzen ////
269
+ //// Cookies setzen usw. ////
270
+ initializeToggleStateExternal()
271
+
272
+ initializeToggleStateTracking()
273
+
274
+ //// 3. Event Listener initialisieren ////
275
+ initializeEventListeners()
276
+
277
+ shouldDialogBeOpendOnLoad()
278
+
279
+ //// 4. Funktion extern aufrufbar machen ////
280
+ return {
281
+ initializeSettingsButtons: initializeSettingsButtons,
282
+ }
283
+ }
284
+
285
+ export default DataPolicySettings
@@ -0,0 +1,99 @@
1
+ <div class="flex items-center justify-center mt-4 md:mt-0 md:justify-end js-load" data-hr-data-policy-settings-ds='{}'>
2
+ {{#> components/button/button _size="md" _id="globalSettingsButton" _css="hover:text-secondary border-footer-text js-data-policy-settings-button" _variant="secondary" _onBackground="true" }}
3
+ {{> components/button/components/button_icon _icon="settings" _iconmap="icons" _css="w-5 h-5"}}
4
+ {{> components/button/components/button_label _label=(loca "cookies_setting_button_text")}}
5
+ {{/components/button/button}}
6
+
7
+ <div class="hidden fixed overflow-scroll w-full h-full top-0 left-0 right-0 bottom-0 z-300 pb-6 bg-black/[0.5] js-data-policy-settings-overlay{{#if _webview}} hidden{{/if}}">
8
+ <div class="m-auto pt-0 max-w-[480px] bg-white">
9
+ <div class="flex w-full px-6 bg-primary z-100">
10
+ <span class="flex justify-start w-full py-4">
11
+ <span
12
+ class="pr-4 -ml-1 fill-white"> {{> components/base/image/icon _icon="settings" _addClass="h-7 w-7 inline" }}</span>
13
+ <span class="w-full text-2xl text-white font-headingSerif">Einstellungen</span>
14
+ <button class="text-white bg-transparent fill-current button js-data-policy-settings-close-button">
15
+ {{> components/base/image/icon _icon="close" _addClass="h-6 w-6 inline"}}
16
+ </button>
17
+ </span>
18
+ </div>
19
+
20
+ <div class="bg-[#d8e9f6] p-6 {{#if _webview}} hidden{{/if}}">
21
+ <span class="block text-lg text-black font-headingSerif">{{loca "cookies_setting_tracking_service_description_title"}}</span>
22
+ <p class="mt-4 text-black">
23
+ {{#with this.footerMetadata}}
24
+ {{#with this.dataProtectionLink}}
25
+ {{loca "cookies_setting_tracking_service_description_text"}}
26
+ <a class="block mt-2 text-link hover:underline" target="_blank"
27
+ rel="noopener noreferrer" href="{{this.url}}"
28
+ title="Mehr Informationen zum Thema Datenschutz">Mehr Informationen zum Thema Datenschutz
29
+ {{#if this.targetBlank}}{{~> components/base/image/icon _icon="extern" _addClass="icon--primary icon--textRight" _iconmap="icons"~}}{{/if}}
30
+ </a>
31
+ {{/with}}
32
+ {{/with}}
33
+ </p>
34
+ </div>
35
+
36
+ <div class="bg-[#e3e3e3] py-2.5 px-6{{#if _webview}} hidden{{/if}}">
37
+ <span class="text-lg text-black font-headingSerif">{{loca "cookies_setting_tracking_service_section_title"}}</span>
38
+ </div>
39
+
40
+ <ul class="{{#if _webview}} hidden{{/if}}">
41
+ <li class="px-6 py-3 flex justify-between items-center bg-white border-t border-[#e3e3e3] tracking_1">
42
+ <span class="text-base text-black">AGF <a
43
+ class="mt-3 -mb-1 text-link" target="_blank" rel="noopener noreferrer"
44
+ href="https://www.agf.de/" title="AGF">(https://www.agf.de/)</a></span>
45
+ <div class="flex w-fit toggleSwitch">
46
+ {{> components/forms/toggle_button _id="agf" _addClass="js-toggleSwitch-checkbox js-toggleSwitch-tracking" _isInitiallyHidden=false }}
47
+ </div>
48
+ </li>
49
+ <li class="px-6 py-3 flex justify-between items-center bg-white border-t border-[#e3e3e3] tracking_2">
50
+ <span class="text-base text-black">AT Internet <a
51
+ class="mt-3 -mb-1 text-link" target="_blank" rel="noopener noreferrer"
52
+ href="https://www.atinternet.com/de/"
53
+ title="AT Internet">(https://www.atinternet.com/de/)</a></span>
54
+ <div class="flex w-fit toggleSwitch">
55
+ {{> components/forms/toggle_button _id="ati" _addClass="js-toggleSwitch-checkbox js-toggleSwitch-tracking" _isInitiallyHidden=false }}
56
+ </div>
57
+ </li>
58
+ </ul>
59
+
60
+ <div class="bg-[#d8e9f6] p-6">
61
+ <span class="block text-lg text-black font-headingSerif ">{{loca "cookies_setting_description_title"}}</span>
62
+ <p class="mt-4 text-base text-black">
63
+ {{#with this.footerMetadata}}
64
+ {{#with this.dataProtectionLink}}
65
+ {{loca "cookies_setting_description_text"}}
66
+ <a class="block mt-2 text-link hover:underline" target="_blank"
67
+ rel="noopener noreferrer" href="{{this.url}}"
68
+ title="Mehr Informationen zum Thema Datenschutz">Mehr Informationen zum Thema Datenschutz
69
+ {{#if this.targetBlank}}{{~> components/base/image/icon _icon="extern" _addClass="icon--primary icon--textRight" _iconmap="icons"~}}{{/if}}
70
+ </a>
71
+ {{/with}}
72
+ {{/with}}
73
+ </p>
74
+ </div>
75
+ <div class="bg-[#e3e3e3] py-2.5 px-6">
76
+ <span class="block pb-2 text-lg text-black font-headingSerif">{{loca "cookies_setting_section_title"}}</span>
77
+ <div class="all">
78
+ <span class="inline-flex text-base text-black js-providerTitle">x</span>
79
+ <div class="flex float-right toggleSwitch">
80
+ {{> components/forms/toggle_button _id="all" _addClass="js-toggleSwitch-checkbox-all"}}
81
+ </div>
82
+ </div>
83
+ </div>
84
+
85
+ <ul>
86
+ {{#with this.serviceList}}
87
+ {{#each this}}
88
+ <li class="bg-white py-2.5 px-6 border-t border-[#e3e3e3] {{this.key}}">
89
+ <span class="inline-flex text-base leading-6 text-black align-text-top">{{this.value}}</span>
90
+ <div class="flex float-right toggleSwitch">
91
+ {{> components/forms/toggle_button _id=this.key _addClass="js-toggleSwitch-checkbox js-toggleSwitch-external" _isInitiallyHidden=this.isInitiallyHidden }}
92
+ </div>
93
+ </li>
94
+ {{/each}}
95
+ {{/with}}
96
+ </ul>
97
+ </div>
98
+ </div>
99
+ </div>
@@ -0,0 +1,41 @@
1
+ import { getJSONCookie, setJSONCookie } from 'hrQuery'
2
+
3
+ const DataPolicyCookie = function () {
4
+ const datapolicyCookieLifetime = 1000 * 60 * 60 * 24 * 365 * 10 /* 10 years */
5
+ let cookie = {}
6
+
7
+ const setCookieForExternalService = function (externalService, state) {
8
+ if (state == null) {
9
+ state = true
10
+ }
11
+ console.log('Schreibe Cookie: ' + externalService + ': ' + state)
12
+ readDatapolicyCookie()
13
+ cookie[externalService] = state
14
+ writeCookie()
15
+ }
16
+
17
+ const isDatapolicyAccepted = function (externalService) {
18
+ readDatapolicyCookie()
19
+ return cookie[externalService] === true
20
+ }
21
+
22
+ const writeCookie = function () {
23
+ setJSONCookie('datapolicy', cookie, datapolicyCookieLifetime)
24
+ }
25
+
26
+ const readDatapolicyCookie = function () {
27
+ cookie = getJSONCookie('datapolicy') || {}
28
+ }
29
+
30
+ const isDatapolicyExistent = function (externalService) {
31
+ readDatapolicyCookie()
32
+ return cookie.hasOwnProperty(externalService)
33
+ }
34
+ return {
35
+ setCookieForExternalService: setCookieForExternalService,
36
+ isDatapolicyAccepted: isDatapolicyAccepted,
37
+ isDatapolicyExistent: isDatapolicyExistent,
38
+ }
39
+ }
40
+
41
+ export default DataPolicyCookie
@@ -1 +1 @@
1
- {"groups":[{"title":"hessenschau","columnSize":3,"columns":[{"links":[{"hiddenText":"hessenschau","labelText":"Startseite der hessenschau","text":"Start","url":"index.html"},{"text":"Nordhessen","url":"nordhessen/index.html"},{"text":"Osthessen","url":"osthessen/index.html"},{"text":"Mittelhessen","url":"mittelhessen/index.html"},{"text":"Rhein-Main","url":"rheinmain/index.html"},{"text":"Südhessen","url":"suedhessen/index.html"}]},{"links":[{"text":"Politik","url":"politik/index.html"},{"text":"Gesellschaft","url":"gesellschaft/index.html"},{"text":"Wirtschaft","url":"wirtschaft/index.html"},{"text":"Kultur","url":"kultur/index.html"},{"text":"Sport","url":"sport/index.html"},{"text":"Panorama","url":"panorama/index.html"},{"text":"Freizeit","url":"freizeit/index.html"}]},{"links":[{"text":"Video & Podcast","url":"video-podcast/index.html"},{"text":"Wetter","url":"wetter/index.html"},{"text":"Verkehr","url":"verkehr/index.html"},{"text":"TV-Sendung","url":"tv-sendung/index.html"},{"text":"Themen","url":"themen/index.html","paragraphed":true},{"text":"Archiv","url":"archiv/index.html"}]}]},{"title":"Service","columnSize":1,"columns":[{"links":[{"text":"Kontakt","url":"kontakt/index.html"},{"text":"Redaktion","url":"redaktion/das-informationsportal-fuer-hessen,redaktion-info-100.html"},{"text":"Hilfe","url":"hilfe/index.html"},{"text":"hessenschau-App","url":"hr-apps/index.html"},{"text":"Newsletter","url":"newsletter/index.html"},{"text":"Korrekturen","url":"unternehmen/korrekturen/index.html","site":"hr","isTargetBlank":true},{"text":"hr-text","url":"https://www.hr-text.hr-fernsehen.de/ttxHtmlGenerator/index.jsp","extern":true,"isTargetBlank":true},{"text":"hr-ticketcenter","url":"https://www.hr-ticketcenter.de/","extern":true,"isTargetBlank":true},{"text":"hr werbung","url":"index.html","site":"hr-werbung","isTargetBlank":true}]}]}],"socialMedia":{"title":"Social Media","columnSize":1,"columns":[{"links":[{"text":"twitter-ds","url":"https://twitter.com/hessenschau","extern":true,"isTargetBlank":true,"title":"hessenschau Twitter"},{"text":"instagram-ds","url":"https://www.instagram.com/hessenschau/","extern":true,"isTargetBlank":true,"title":"hessenschau Instagram"},{"text":"facebook-ds","url":"https://www.facebook.com/hessenschau","extern":true,"isTargetBlank":true,"title":"hessenschau Facebook"},{"text":"youtube-ds","url":"https://www.youtube.com/c/hessenschau","extern":true,"isTargetBlank":true,"title":"hessenschau YouTube"}]},{"links":[{"text":"push-ds","url":"push/index.html","title":"Push-Benachrichtigung in der App"},{"text":"voice-ds","url":"voice/index.html","title":"hessenschau in 100 Sekunden"},{"text":"kontakt-ds","url":"kontakt/index.html","title":"Zum Kontaktformular"},{"text":"rss-ds","url":"rss/index.html","title":"hessenschau.de RSS-Feed"}]}]},"footerMetadata":{"hrDeLink":{"currentTime":{"year":"2023"},"text":"Hessischer Rundfunk","url":"index.html","site":"hr","isTargetBlank":true,"title":"Hessischer Rundfunk"},"ardDeLink":{"text":"ARD.de","url":"https://www.ard.de/","extern":true,"isTargetBlank":true,"title":"ard.de"},"dataProtectionLink":{"text":"Datenschutz","url":"https://www.hr.de/datenschutz/index.html","extern":true,"isTargetBlank":true,"title":"Datenschutz"},"imprintLink":{"text":"Impressum","url":"impressum/index.html","site":"hr","isTargetBlank":true,"title":"Impressum"}}}
1
+ {"groups":[{"title":"hessenschau","columnSize":3,"columns":[{"links":[{"hiddenText":"hessenschau","labelText":"Startseite der hessenschau","text":"Start","url":"index.html"},{"text":"Nordhessen","url":"nordhessen/index.html"},{"text":"Osthessen","url":"osthessen/index.html"},{"text":"Mittelhessen","url":"mittelhessen/index.html"},{"text":"Rhein-Main","url":"rheinmain/index.html"},{"text":"Südhessen","url":"suedhessen/index.html"}]},{"links":[{"text":"Politik","url":"politik/index.html"},{"text":"Gesellschaft","url":"gesellschaft/index.html"},{"text":"Wirtschaft","url":"wirtschaft/index.html"},{"text":"Kultur","url":"kultur/index.html"},{"text":"Sport","url":"sport/index.html"},{"text":"Panorama","url":"panorama/index.html"},{"text":"Freizeit","url":"freizeit/index.html"}]},{"links":[{"text":"Video & Podcast","url":"video-podcast/index.html"},{"text":"Wetter","url":"wetter/index.html"},{"text":"Verkehr","url":"verkehr/index.html"},{"text":"TV-Sendung","url":"tv-sendung/index.html"},{"text":"Themen","url":"themen/index.html","paragraphed":true},{"text":"Archiv","url":"archiv/index.html"}]}]},{"title":"Service","columnSize":1,"columns":[{"links":[{"text":"Kontakt","url":"kontakt/index.html"},{"text":"Redaktion","url":"redaktion/das-informationsportal-fuer-hessen,redaktion-info-100.html"},{"text":"Hilfe","url":"hilfe/index.html"},{"text":"hessenschau-App","url":"hr-apps/index.html"},{"text":"Newsletter","url":"newsletter/index.html"},{"text":"Korrekturen","url":"unternehmen/korrekturen/index.html","site":"hr","isTargetBlank":true},{"text":"hr-text","url":"https://www.hr-text.hr-fernsehen.de/ttxHtmlGenerator/index.jsp","extern":true,"isTargetBlank":true},{"text":"hr-ticketcenter","url":"https://www.hr-ticketcenter.de/","extern":true,"isTargetBlank":true},{"text":"hr werbung","url":"index.html","site":"hr-werbung","isTargetBlank":true}]}]}],"socialMedia":{"title":"Social Media","columnSize":1,"columns":[{"links":[{"text":"twitter-ds","url":"https://twitter.com/hessenschau","extern":true,"isTargetBlank":true,"title":"hessenschau Twitter"},{"text":"instagram-ds","url":"https://www.instagram.com/hessenschau/","extern":true,"isTargetBlank":true,"title":"hessenschau Instagram"},{"text":"facebook-ds","url":"https://www.facebook.com/hessenschau","extern":true,"isTargetBlank":true,"title":"hessenschau Facebook"},{"text":"youtube-ds","url":"https://www.youtube.com/c/hessenschau","extern":true,"isTargetBlank":true,"title":"hessenschau YouTube"}]},{"links":[{"text":"push-ds","url":"push/index.html","title":"Push-Benachrichtigung in der App"},{"text":"voice-ds","url":"voice/index.html","title":"hessenschau in 100 Sekunden"},{"text":"kontakt-ds","url":"kontakt/index.html","title":"Zum Kontaktformular"},{"text":"rss-ds","url":"rss/index.html","title":"hessenschau.de RSS-Feed"}]}]},"footerMetadata":{"hrDeLink":{"currentTime":{"year":"2023"},"text":"Hessischer Rundfunk","url":"index.html","site":"hr","isTargetBlank":true,"title":"Hessischer Rundfunk"},"ardDeLink":{"text":"ARD.de","url":"https://www.ard.de/","extern":true,"isTargetBlank":true,"title":"ard.de"},"dataProtectionLink":{"text":"Datenschutz","url":"https://www.hr.de/datenschutz/index.html","extern":true,"isTargetBlank":true,"title":"Datenschutz"},"imprintLink":{"text":"Impressum","url":"impressum/index.html","site":"hr","isTargetBlank":true,"title":"Impressum"}},"serviceList":[{"key":"ard_mediathek","value":"ARD Mediathek (Video)"},{"key":"arte_concert","value":"Arte Concert"},{"key":"arte_concert_new","value":"Arte Concert 2.0"},{"key":"datawrapper_cdn","value":"Datawrapper (Datengrafik)"},{"key":"esri","value":"Esri (Notfallkarte)"},{"key":"facebook_post","value":"Facebook"},{"key":"flourish","value":"Flourish (Datengrafik)"},{"key":"giphy","value":"Giphy (animiertes GIF)"},{"key":"instagram","value":"Instagram"},{"key":"twitter_post","value":"Twitter"},{"key":"vimeo","value":"Vimeo (Video)"},{"key":"youtube","value":"YouTube (Video)"},{"key":"youtube360","value":"YouTube 360 (360° Video)"}]}
@@ -11,11 +11,9 @@
11
11
 
12
12
  <div x-show="!$screen('lg') && !$screen('md') ? dropped : true" x-transition.opacity class="flex flex-col md:flex-row flex-nowrap">
13
13
  {{#each _columns}}
14
- <ul class="flex flex-col text-footer-text md:pt-8 w-full md:w-1/{{../_columnSize}}">
14
+ <ul class="flex flex-col text-primary md:text-footer-text md:pt-8 w-full md:w-1/{{../_columnSize}}">
15
15
  {{#each this.links}}
16
-
17
16
  {{> components/footer/page_footer_item _css="hover:underline" _iconName="extern" }}
18
-
19
17
  {{/each}}
20
18
  </ul>
21
19
  {{/each}}
@@ -14,12 +14,7 @@
14
14
 
15
15
  {{> components/footer/page_footer_social_media _columns=this.socialMedia.columns _title=this.socialMedia.title}}
16
16
 
17
- <div class="flex items-center justify-center pt-4 md:justify-end">
18
- {{#> components/button/button _size="md" _css="text-footer-text border-footer-text " _variant="secondary" _onBackground="true" }}
19
- {{> components/button/components/button_icon _icon="settings" _iconmap="icons"}}
20
- {{> components/button/components/button_label _label="Einstellungen"}}
21
- {{/components/button/button}}
22
- </div>
17
+ {{> components/dataPolicySettings/data_policy_settings }}
23
18
 
24
19
  </div>
25
20
 
@@ -6,7 +6,7 @@
6
6
  </span>
7
7
  {{~/if~}}
8
8
  {{~#if _link-adjust_context.isTargetBlank}}
9
- <span class="inline-flex md:mt-0.5 md:ml-1">
9
+ <span class="inline-flex mt-0.5 ml-1">
10
10
  {{> components/base/image/icon _icon=_iconName-adjust_context _iconmap="icons" _addClass="w-4 h-4 fill-current"}}
11
11
  </span>
12
12
  {{/if~}}
@@ -6,7 +6,7 @@
6
6
  {{#if this.extern}}
7
7
  <li class="pr-2 last:pr-0">
8
8
  {{#> components/base/link _link=this _css="text-footer-text" _isTargetBlank=this.isTargetBlank}}
9
- {{> components/base/image/icon _icon=this.text _iconmap="icons" _addClass="w-8 h-8 fill-current"}}
9
+ {{> components/base/image/icon _icon=this.text _iconmap="icons" _addClass="w-8 h-8 fill-current hover:scale-105"}}
10
10
  {{/components/base/link}}
11
11
  {{#*inline "htmlProperties"}}
12
12
  title="{{this.title}}"
@@ -16,7 +16,7 @@
16
16
  {{else}}
17
17
  <li class="pr-2 last:pr-0">
18
18
  {{#> components/base/link _link=this _css="text-footer-text" _isTargetBlank=this.isTargetBlank}}
19
- {{> components/base/image/icon _icon=this.text _iconmap="icons" _addClass="w-8 h-8 fill-current"}}
19
+ {{> components/base/image/icon _icon=this.text _iconmap="icons" _addClass="w-8 h-8 fill-current hover:scale-105"}}
20
20
  {{/components/base/link}}
21
21
  {{#*inline "htmlProperties"}}
22
22
  title="{{this.title}}"
@@ -0,0 +1,2 @@
1
+ <input class="h-0 w-0 invisible toggleSwitch-checkbox {{_addClass}}" type="checkbox" id="{{_id}}" {{#unless _isInitiallyHidden}}initial="checked"{{/unless}}/>
2
+ <label class="bg-toggle-default cursor-pointer w-[50px] h-[25px] block rounded-3xl relative toggleSwitch-label" for="{{_id}}">{{> components/base/image/icon _icon="check" _addClass="fill-white inline absolute h-[19px] w-[19px] left-[4px] top-[3px] toggleSwitch-labelIcon"}}</label>
@@ -65,15 +65,9 @@
65
65
  <button
66
66
  aria-label='{{loca "search_input_aria_submit" }}'
67
67
  type="submit"
68
- class="pl-3 pr-2 border-l cursor-pointer lg:search-border-desktop lg:rounded-r link-focus-inset bg-primary lg:bg-white text-primary z-120"
68
+ class="pl-2 pr-2 border-l cursor-pointer lg:search-border-desktop lg:rounded-r link-focus-inset bg-primary md:bg-white text-primary "
69
69
  >
70
- <svg class="w-6 h-6 text-white fill-current bg-primary lg:fill-current lg:text-primary lg:bg-white"
71
- xmlns="http://www.w3.org/2000/svg"
72
- viewBox="0 0 20 20"
73
- aria-hidden="true"
74
- >
75
- <path d="M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z"></path>
76
- </svg>
70
+ {{> components/base/image/icon _icon="suche-ds" _addClass="w-7 h-7 text-white fill-current bg-primary md:fill-current md:text-secondary md:bg-white"}}
77
71
  </button>
78
72
  </form>
79
73
 
@@ -108,7 +108,8 @@ module.exports = {
108
108
  '50': '50',
109
109
  '100': '100',
110
110
  '110': '110',
111
- '120': '120'
111
+ '120': '120',
112
+ '300': '300'
112
113
  },
113
114
  spacing: {
114
115
  '9.5': '2.375rem',
@@ -387,7 +388,9 @@ module.exports = {
387
388
  'tickerTeaserlabelByline': 'var(--color-ticker-teaser-label-byline)',
388
389
  'tickerTeaserTimelineScore': 'var(--color-ticker-teaser-timeline-score)',
389
390
  'tickerTeaserFooter': 'var(--color-ticker-teaser-footer)',
390
- 'tickerTeaserHeadlineUnderline': 'var(--color-ticker-teaser-headline-underline)'
391
+ 'tickerTeaserHeadlineUnderline': 'var(--color-ticker-teaser-headline-underline)',
392
+ 'toggle-confirmation': 'var(--color-toggle-confirmation)',
393
+ 'toggle-default': 'var(--color-toggle-default)'
391
394
  },
392
395
  },
393
396
  },