hr-design-system-handlebars 1.34.7 → 1.35.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/CHANGELOG.md +12 -0
- package/dist/assets/brand/_default/conf/locatags.json +15 -1
- package/dist/assets/icons/icons/svgmap/suche-ds.svg +4 -0
- package/dist/assets/icons/icons/svgmap/twitter-ds.svg +1 -1
- package/dist/assets/icons/icons/svgmap.min.svg +1 -1
- package/dist/assets/index.css +119 -8
- package/dist/assets/js/components/dataPolicySettings/dataPolicySettingsDs.feature.js +285 -0
- package/dist/assets/js/components/externalService/datapolicyCookie.subfeature.js +41 -0
- package/dist/views/components/dataPolicySettings/data_policy_settings.hbs +99 -0
- package/dist/views/components/footer/page_footer_content.hbs +1 -6
- package/dist/views/components/footer/page_footer_social_media.hbs +2 -2
- package/dist/views/components/forms/toggle_button.hbs +2 -0
- package/dist/views/components/site_header/navigation_search/quick_search_form.hbs +2 -8
- package/dist/views_static/components/dataPolicySettings/data_policy_settings.hbs +99 -0
- package/dist/views_static/components/footer/page_footer_content.hbs +1 -6
- package/dist/views_static/components/footer/page_footer_social_media.hbs +2 -2
- package/dist/views_static/components/forms/toggle_button.hbs +2 -0
- package/dist/views_static/components/site_header/navigation_search/quick_search_form.hbs +2 -8
- package/package.json +1 -1
- package/src/assets/brand/_default/conf/locatags.json +15 -1
- package/src/assets/brand/hessenschau/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr-bigband/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr-fernsehen/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr-inforadio/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr-rundfunkrat/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr-sinfonieorchester/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr-werbung/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr1/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr2/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr3/conf/locatags.merged.json +13 -0
- package/src/assets/brand/hr4/conf/locatags.merged.json +13 -0
- package/src/assets/brand/you-fm/conf/locatags.merged.json +13 -0
- package/src/assets/css/custom-utilities.css +16 -0
- package/src/assets/fixtures/footer/footer_hessenschau.json +42 -1
- package/src/assets/icons/icons/svgmap/suche-ds.svg +4 -0
- package/src/assets/icons/icons/svgmap/twitter-ds.svg +1 -1
- package/src/assets/icons/icons/svgmap.min.svg +1 -1
- package/src/assets/tailwind.css +2 -0
- package/src/stories/views/components/dataPolicySettings/dataPolicySettingsDs.feature.js +285 -0
- package/src/stories/views/components/dataPolicySettings/data_policy_settings.hbs +99 -0
- package/src/stories/views/components/externalService/datapolicyCookie.subfeature.js +41 -0
- package/src/stories/views/components/footer/fixtures/footer_hessenschau.json +1 -1
- package/src/stories/views/components/footer/page_footer_content.hbs +1 -6
- package/src/stories/views/components/footer/page_footer_social_media.hbs +2 -2
- package/src/stories/views/components/forms/toggle_button.hbs +2 -0
- package/src/stories/views/components/site_header/navigation_search/quick_search_form.hbs +2 -8
- 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 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 bg-white border-t border-[#e3e3e3] tracking_1">
|
|
42
|
+
<span class="inline-block 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 float-right 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 bg-white border-t border-[#e3e3e3] tracking_2">
|
|
50
|
+
<span class="inline-block 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 float-right 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-block 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-block text-base leading-6 text-black">{{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)"}]}
|
|
@@ -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
|
-
|
|
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
|
{{#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-
|
|
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
|
-
|
|
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
|
|
package/tailwind.config.js
CHANGED
|
@@ -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
|
},
|