hr-design-system-handlebars 1.124.10 → 1.125.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 (30) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/assets/index.css +6 -3
  3. package/dist/assets/js/alpine.js +1 -0
  4. package/dist/assets/js/components/appBanner/appBanner.alpine.js +24 -3
  5. package/dist/assets/js/components/appBanner/nativeAppBanner.alpine.js +7 -1
  6. package/dist/assets/js/components/external-service/dataWrapperContentRefresher.subfeature.js +73 -65
  7. package/dist/assets/js/components/external-service/dataWrapperNoResponsiveIframe.subfeature.js +50 -72
  8. package/dist/assets/js/components/external-service/externalServiceDs.feature.js +119 -149
  9. package/dist/views/components/appBanner/appBanner.hbs +1 -1
  10. package/dist/views/components/appBanner/nativeAppBanner.hbs +1 -1
  11. package/dist/views/components/external-service/external_service_with_datapolicy_check.hbs +1 -1
  12. package/dist/views/components/page/index/page.hbs +1 -0
  13. package/dist/views/components/top_button/top_button.hbs +1 -1
  14. package/dist/views_static/components/appBanner/appBanner.hbs +1 -1
  15. package/dist/views_static/components/appBanner/nativeAppBanner.hbs +1 -1
  16. package/dist/views_static/components/external-service/external_service_with_datapolicy_check.hbs +1 -1
  17. package/dist/views_static/components/page/index/page.hbs +1 -0
  18. package/dist/views_static/components/top_button/top_button.hbs +1 -1
  19. package/package.json +1 -1
  20. package/src/assets/js/alpine.js +1 -0
  21. package/src/stories/views/components/appBanner/appBanner.alpine.js +24 -3
  22. package/src/stories/views/components/appBanner/appBanner.hbs +1 -1
  23. package/src/stories/views/components/appBanner/nativeAppBanner.alpine.js +7 -1
  24. package/src/stories/views/components/appBanner/nativeAppBanner.hbs +1 -1
  25. package/src/stories/views/components/external-service/dataWrapperContentRefresher.subfeature.js +73 -65
  26. package/src/stories/views/components/external-service/dataWrapperNoResponsiveIframe.subfeature.js +50 -72
  27. package/src/stories/views/components/external-service/externalServiceDs.feature.js +119 -149
  28. package/src/stories/views/components/external-service/external_service_with_datapolicy_check.hbs +1 -1
  29. package/src/stories/views/components/page/index/page.hbs +1 -0
  30. package/src/stories/views/components/top_button/top_button.hbs +1 -1
@@ -29,10 +29,7 @@ const ExternalService = function (context) {
29
29
  let embedCode = options.embedCode,
30
30
  iframe,
31
31
  settingsCookie = new SettingsCookie(),
32
- noResponsiveIframe,
33
- contentRefresher,
34
32
  gemeindewahlergebnis,
35
- uniqueId,
36
33
  isExternalServiceLoaded = false,
37
34
  tiktokOnPage = []
38
35
 
@@ -74,61 +71,34 @@ const ExternalService = function (context) {
74
71
  }
75
72
 
76
73
  const insertExternalService = function () {
77
- switch (embedType) {
78
- case 'js':
79
- switch (id) {
80
- case '23degrees':
81
- createTwentyThreeDegreesEmbed()
82
- break
83
- case 'facebook-post':
84
- createFacebookEmbed()
85
- break
86
- case 'instagram':
87
- createInstagramEmbed()
88
- break
89
- case 'tiktok':
90
- createTikTokEmbed()
91
- break
92
- case 'twitter':
93
- createTwitterEmbed()
94
- break
95
- case 'twitter-post':
96
- createTwitterPostEmbed()
97
- break
98
- case 'datawrapper_cdn':
99
- createDataWrapperEmbed()
100
- break
101
- case 'wahlmonitor':
102
- createWahlEmbed()
103
- break
104
- case 'wahlmonitor_v2':
105
- createWahlEmbed()
106
- break
107
- case 'wahlkreiskarte':
108
- createWahlEmbed()
109
- break
110
- case 'wahlkreiskarte_v2':
111
- createWahlEmbed()
112
- break
113
- case 'wahlomat-euwa':
114
- createWahlOMatEuwaEmbed()
115
- break
116
- case 'wahlomat-butawa':
117
- createWahlOMatButawaEmbed()
118
- break
119
- case 'wahl-gemeinde-ergebnis':
120
- createWahlGemeindeErgebnisEmbed()
121
- break
122
- case 'wer-waehlte-wen':
123
- werWaehlteWenEmbed()
124
- break
125
- default:
126
- console.error('No JS Config for external service ' + id)
127
- break
128
- }
129
- break
130
- default:
131
- loadIframe() //für alle Dienste die nicht der DSGVO Datapolicy unterliegen
74
+ if (embedType !== 'js') {
75
+ loadIframe() // Für alle Dienste, die nicht der DSGVO Datapolicy unterliegen
76
+ return
77
+ }
78
+
79
+ const externalServiceMap = {
80
+ '23degrees': createTwentyThreeDegreesEmbed,
81
+ 'facebook-post': createFacebookEmbed,
82
+ 'instagram': createInstagramEmbed,
83
+ 'tiktok': createTikTokEmbed,
84
+ 'twitter': createTwitterEmbed,
85
+ 'twitter-post': createTwitterPostEmbed,
86
+ 'datawrapper_cdn': createDataWrapperEmbed,
87
+ 'wahlmonitor': createWahlEmbed,
88
+ 'wahlmonitor_v2': createWahlEmbed,
89
+ 'wahlkreiskarte': createWahlEmbed,
90
+ 'wahlkreiskarte_v2': createWahlEmbed,
91
+ 'wahlomat-euwa': createWahlOMatEuwaEmbed,
92
+ 'wahlomat-butawa': createWahlOMatButawaEmbed,
93
+ 'wahl-gemeinde-ergebnis': createWahlGemeindeErgebnisEmbed,
94
+ 'wer-waehlte-wen': werWaehlteWenEmbed,
95
+ }
96
+
97
+ const service = externalServiceMap[id]
98
+ if (service) {
99
+ service()
100
+ } else {
101
+ console.error(`No JS Config for external service ${id}`)
132
102
  }
133
103
  }
134
104
 
@@ -206,14 +176,6 @@ const ExternalService = function (context) {
206
176
  })
207
177
  }
208
178
 
209
- const createUniqueID = function () {
210
- console.log('Erzeuge einzigartige ID')
211
- uniqueId = Math.random()
212
- .toString(36)
213
- .replace(/[^a-z]+/g, '')
214
- .substring(2, 10)
215
- }
216
-
217
179
  const getAspectRatioClass = function () {
218
180
  switch (iFrameConfig.aspectRatio) {
219
181
  case '16x9':
@@ -237,96 +199,104 @@ const ExternalService = function (context) {
237
199
 
238
200
  const createDataWrapperEmbed = function () {
239
201
  removeDatapolicyBox()
240
- createUniqueID()
241
- console.log('UniqueID' + uniqueId)
242
- if (iFrameConfig.noResponsiveIframe == 'true') {
202
+ const uniqueId = createUniqueID()
203
+ const {
204
+ isNoResponsiveIframe,
205
+ isWebcomponent,
206
+ refreshContent,
207
+ aspectRatio,
208
+ fixedHeight,
209
+ refreshIntervall,
210
+ } = iFrameConfig
211
+
212
+ const addContentRefresher = (isWebcomponent) => {
213
+ new DataWrapperContentRefresher({
214
+ rootElement,
215
+ id: uniqueId,
216
+ refreshIntervall,
217
+ isWebcomponent,
218
+ }).createRefresher()
219
+ }
220
+
221
+ if (isNoResponsiveIframe == 'true') {
243
222
  //Klassisches Iframe mit AR-Wrapper oder fester Höhe
244
- noResponsiveIframe = new DataWrapperNoResponsiveIframe(
245
- context,
246
- iFrameConfig.aspectRatio,
247
- iFrameConfig.fixedHeight,
248
- uniqueId,
249
- embedCode,
250
- lazyLoad
251
- )
252
- noResponsiveIframe.createNoResponsiveIframe()
253
-
254
- if (iFrameConfig.refreshContent == 'true') {
255
- console.log('contentRefresher anfügen')
256
- contentRefresher = new DataWrapperContentRefresher(
257
- context,
258
- uniqueId,
259
- iFrameConfig.refreshIntervall,
260
- false
261
- )
262
- contentRefresher.createRefresher()
223
+ new DataWrapperNoResponsiveIframe({
224
+ rootElement: rootElement,
225
+ aspectRatio: aspectRatio,
226
+ fixedHeight: fixedHeight,
227
+ id: uniqueId,
228
+ embedCode: embedCode,
229
+ lazyLoad: lazyLoad,
230
+ }).createNoResponsiveIframe()
231
+
232
+ if (refreshContent == 'true') {
233
+ addContentRefresher(false)
263
234
  }
264
- } else {
265
- if (iFrameConfig.webcomponent == 'true') {
266
- // Webcomponent
267
- const divTag = document.createElement('div')
268
- divTag.id = 'datawrapper-chart-' + uniqueId
269
- rootElement.insertBefore(divTag, null)
270
- const scriptTag = document.createElement('script')
271
- scriptTag.setAttribute('id', 'datawrapper-component-js')
272
- scriptTag.setAttribute('type', 'text/javascript')
273
- scriptTag.setAttribute('defer', 'defer')
274
- scriptTag.setAttribute('src', embedCode + 'embed.js?v=1')
275
- scriptTag.setAttribute('charset', 'utf-8')
276
- const noScriptTag = document.createElement('noscript')
277
- const imageTag = document.createElement('img')
278
- imageTag.src = embedCode + 'full.png'
279
- imageTag.alt = ''
280
- noScriptTag.appendChild(imageTag)
281
- divTag.appendChild(scriptTag)
282
- divTag.appendChild(noScriptTag)
283
-
284
- if (iFrameConfig.refreshContent == 'true') {
285
- console.log('contentRefresher anfügen')
286
- contentRefresher = new DataWrapperContentRefresher(
287
- context,
288
- uniqueId,
289
- iFrameConfig.refreshIntervall,
290
- true
291
- )
292
- contentRefresher.createRefresher()
293
- }
294
- } else {
295
- //Responsives Iframe
296
- var iframe = document.createElement('iframe')
297
- //Auflösen nach Tailwind-Klassen //dataWrapper-embed
298
- iframe.className = 'w-0 !min-w-full border-0'
299
- iframe.setAttribute('webkitallowfullscreen', '')
300
- iframe.setAttribute('mozallowfullscreen', '')
301
- iframe.setAttribute('allowfullscreen', '')
302
- iframe.setAttribute('scrolling', 'no')
303
- iframe.setAttribute('frameborder', '0')
304
- iframe.src = embedCode
305
- iframe.id = 'datawrapper-chart-' + uniqueId
306
- if (lazyLoad) {
307
- iframe.loading = 'lazy'
308
- }
309
- rootElement.insertBefore(iframe, null)
235
+ return
236
+ }
310
237
 
311
- loadScript(
312
- 'datawrapper-js',
313
- 'https://static.hr.de/hessenschau/datawrapper/responsiveIframe.js',
314
- true
315
- )
316
- if (iFrameConfig.refreshContent == 'true') {
317
- console.log('contentRefresher anfügen')
318
- contentRefresher = new DataWrapperContentRefresher(
319
- context,
320
- uniqueId,
321
- iFrameConfig.refreshIntervall,
322
- false
323
- )
324
- contentRefresher.createRefresher()
325
- }
238
+ if (isWebcomponent == 'true') {
239
+ // Webcomponent
240
+ const divTag = document.createElement('div')
241
+ divTag.id = `datawrapper-chart-${uniqueId}`
242
+ rootElement.appendChild(divTag)
243
+
244
+ const scriptTag = document.createElement('script')
245
+ Object.assign(scriptTag, {
246
+ id: 'datawrapper-component-js',
247
+ type: 'text/javascript',
248
+ defer: true,
249
+ src: `${embedCode}embed.js?v=1`,
250
+ charset: 'utf-8',
251
+ })
252
+
253
+ const noScriptTag = document.createElement('noscript')
254
+ const imageTag = document.createElement('img')
255
+ imageTag.src = `${embedCode}full.png`
256
+ imageTag.alt = ''
257
+ noScriptTag.appendChild(imageTag)
258
+
259
+ divTag.append(scriptTag, noScriptTag)
260
+
261
+ if (refreshContent == 'true') {
262
+ addContentRefresher(true)
326
263
  }
264
+ return
265
+ }
266
+ //Responsives Iframe
267
+ const iframe = document.createElement('iframe')
268
+ //Auflösen nach Tailwind-Klassen //dataWrapper-embed
269
+ iframe.className = 'w-0 !min-w-full border-0'
270
+ iframe.setAttribute('webkitallowfullscreen', '')
271
+ iframe.setAttribute('mozallowfullscreen', '')
272
+ iframe.setAttribute('allowfullscreen', '')
273
+ iframe.setAttribute('scrolling', 'no')
274
+ iframe.setAttribute('frameborder', '0')
275
+ iframe.src = embedCode
276
+ iframe.id = `datawrapper-chart-${uniqueId}`
277
+ if (lazyLoad) {
278
+ iframe.loading = 'lazy'
279
+ }
280
+ rootElement.appendChild(iframe)
281
+
282
+ loadScript(
283
+ 'datawrapper-js',
284
+ 'https://static.hr.de/hessenschau/datawrapper/responsiveIframe.js',
285
+ true
286
+ )
287
+ if (refreshContent == 'true') {
288
+ addContentRefresher(false)
327
289
  }
328
290
  }
329
291
 
292
+ const createUniqueID = function () {
293
+ console.log('Erzeuge einzigartige ID')
294
+ return Math.random()
295
+ .toString(36)
296
+ .replace(/[^a-z]+/g, '')
297
+ .substring(2, 10)
298
+ }
299
+
330
300
  const createTwentyThreeDegreesEmbed = function () {
331
301
  removeDatapolicyBox()
332
302
 
@@ -1,6 +1,6 @@
1
1
  <div
2
2
  x-data="appBanner()" x-cloak x-show="showBanner" ax-load x-ignore
3
- id="marketing-banner" tabindex="-1" class="fixed bottom-0 z-50 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
3
+ id="marketing-banner" tabindex="-1" class="fixed bottom-0 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 z-300 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
4
4
  <div class="flex flex-row items-center gap-4 grow">
5
5
  <div class="flex items-center justify-center rounded-lg w-11 h-11 bg-blue-congress-hex shrink-0">
6
6
  <img width="24" height="24" src="{{resourceUrl "assets/base/icons/logo/brandlogo--mobile.min.svg" _brand=(defaultIfEmpty this.brand "hessenschau")}}"
@@ -1,6 +1,6 @@
1
1
  <div
2
2
  x-data="nativeAppBanner()" x-cloak x-show="showBanner" ax-load x-ignore
3
- id="marketing-banner" tabindex="-1" class="fixed bottom-0 z-50 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
3
+ id="marketing-banner" tabindex="-1" class="fixed bottom-0 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 z-300 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
4
4
  <div class="flex flex-row items-center gap-4 grow">
5
5
  <div class="flex items-center justify-center rounded-lg w-11 h-11 bg-blue-congress-hex shrink-0">
6
6
  <img width="24" height="24" src="{{resourceUrl "assets/base/icons/logo/brandlogo--mobile.min.svg" _brand=(defaultIfEmpty this.brand "hessenschau")}}"
@@ -3,7 +3,7 @@
3
3
  <div class="c-externalService c-externalService__{{this.externalServiceConfig.externalServiceId}}{{#unless
4
4
  this.fixedHeight }} -noFixedHeight{{/unless}} js-load"
5
5
  data-hr-external-service-ds='{"id":"{{this.externalServiceConfig.externalServiceId}}","embedCode":"{{this.serviceUrl}}","embedType":"{{this.externalServiceConfig.externalServiceEmbedType}}","lazyLoad":{{defaultIfEmpty _lazyLoad false}},"dataPolicyCheck": true, "whiteList":{{this.externalServiceConfig.isWhitelisted}},"iFrameConfig": { {{~#if this.fixedHeight~}}
6
- "fixedHeight":"{{this.fixedHeight}}"{{~else~}}{{~#if this.aspectRatio}}"aspectRatio":"{{this.aspectRatio}}"{{~else~}}"aspectRatio":"16x9"{{/if}}{{~/if}},"noResponsiveIframe":"{{{this.setResponsiveIframe}}}","webcomponent":"{{{this.setWebcomponent}}}"{{~#if this.setTimedReloadIframe}},"refreshContent":"{{{this.setTimedReloadIframe}}}","refreshIntervall":"{{this.setTimeForReload}}"{{~/if}} }}'>
6
+ "fixedHeight":"{{this.fixedHeight}}"{{~else~}}{{~#if this.aspectRatio}}"aspectRatio":"{{this.aspectRatio}}"{{~else~}}"aspectRatio":"16x9"{{/if}}{{~/if}},"isNoResponsiveIframe":"{{{this.setResponsiveIframe}}}","isWebcomponent":"{{{this.setWebcomponent}}}"{{~#if this.setTimedReloadIframe}},"refreshContent":"{{{this.setTimedReloadIframe}}}","refreshIntervall":"{{this.setTimeForReload}}"{{~/if}} }}'>
7
7
  {{~> components/external-service/components/external_service_data_policy ~}}
8
8
  </div>
9
9
  {{~> components/external-service/components/external_service_caption ~}}
@@ -18,6 +18,7 @@
18
18
  </head>
19
19
 
20
20
  <body itemscope itemtype="http://schema.org/WebPage">
21
+ {{~> components/appBanner/appBanner ~}}
21
22
  <div class="js-pageSwap">
22
23
 
23
24
  {{> components/site_header/header }}
@@ -1,7 +1,7 @@
1
1
  <div class="h-8" x-data="{ isVisible: false }">
2
2
  <div class="grid grid-page z-100" :class="{ 'fixed bottom-feature-box-height left-0 w-full': !$store.footerIsVisible }">
3
3
  <div class="flex justify-between h-0 col-full sm:col-main"
4
- :class="{ 'bg-white h-8': $store.footerIsVisible }"
4
+ :class="{ 'bg-white h-8': $store.footerIsVisible, 'h-22': $store.appBannerIsVisible && !$store.footerIsVisible}"
5
5
  x-show="!$store.sharingIsVisible && isVisible"
6
6
  x-transition:enter="transition ease-[cubic-bezier(0.68,-0.3,0.32,1)] duration-500 transform order-first"
7
7
  x-transition:enter-start="opacity-0 translate-y-8"
@@ -1,6 +1,6 @@
1
1
  <div
2
2
  x-data="appBanner()" x-cloak x-show="showBanner" ax-load x-ignore
3
- id="marketing-banner" tabindex="-1" class="fixed bottom-0 z-50 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
3
+ id="marketing-banner" tabindex="-1" class="fixed bottom-0 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 z-300 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
4
4
  <div class="flex flex-row items-center gap-4 grow">
5
5
  <div class="flex items-center justify-center rounded-lg w-11 h-11 bg-blue-congress-hex shrink-0">
6
6
  <img width="24" height="24" src="{{resourceUrl "assets/base/icons/logo/brandlogo--mobile.min.svg" _brand=(defaultIfEmpty this.brand "hessenschau")}}"
@@ -1,6 +1,6 @@
1
1
  <div
2
2
  x-data="nativeAppBanner()" x-cloak x-show="showBanner" ax-load x-ignore
3
- id="marketing-banner" tabindex="-1" class="fixed bottom-0 z-50 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
3
+ id="marketing-banner" tabindex="-1" class="fixed bottom-0 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 z-300 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
4
4
  <div class="flex flex-row items-center gap-4 grow">
5
5
  <div class="flex items-center justify-center rounded-lg w-11 h-11 bg-blue-congress-hex shrink-0">
6
6
  <img width="24" height="24" src="{{resourceUrl "assets/base/icons/logo/brandlogo--mobile.min.svg" _brand=(defaultIfEmpty this.brand "hessenschau")}}"
@@ -3,7 +3,7 @@
3
3
  <div class="c-externalService c-externalService__{{this.externalServiceConfig.externalServiceId}}{{#unless
4
4
  this.fixedHeight }} -noFixedHeight{{/unless}} js-load"
5
5
  data-hr-external-service-ds='{"id":"{{this.externalServiceConfig.externalServiceId}}","embedCode":"{{this.serviceUrl}}","embedType":"{{this.externalServiceConfig.externalServiceEmbedType}}","lazyLoad":{{defaultIfEmpty _lazyLoad false}},"dataPolicyCheck": true, "whiteList":{{this.externalServiceConfig.isWhitelisted}},"iFrameConfig": { {{~#if this.fixedHeight~}}
6
- "fixedHeight":"{{this.fixedHeight}}"{{~else~}}{{~#if this.aspectRatio}}"aspectRatio":"{{this.aspectRatio}}"{{~else~}}"aspectRatio":"16x9"{{/if}}{{~/if}},"noResponsiveIframe":"{{{this.setResponsiveIframe}}}","webcomponent":"{{{this.setWebcomponent}}}"{{~#if this.setTimedReloadIframe}},"refreshContent":"{{{this.setTimedReloadIframe}}}","refreshIntervall":"{{this.setTimeForReload}}"{{~/if}} }}'>
6
+ "fixedHeight":"{{this.fixedHeight}}"{{~else~}}{{~#if this.aspectRatio}}"aspectRatio":"{{this.aspectRatio}}"{{~else~}}"aspectRatio":"16x9"{{/if}}{{~/if}},"isNoResponsiveIframe":"{{{this.setResponsiveIframe}}}","isWebcomponent":"{{{this.setWebcomponent}}}"{{~#if this.setTimedReloadIframe}},"refreshContent":"{{{this.setTimedReloadIframe}}}","refreshIntervall":"{{this.setTimeForReload}}"{{~/if}} }}'>
7
7
  {{~> components/external-service/components/external_service_data_policy ~}}
8
8
  </div>
9
9
  {{~> components/external-service/components/external_service_caption ~}}
@@ -18,6 +18,7 @@
18
18
  </head>
19
19
 
20
20
  <body itemscope itemtype="http://schema.org/WebPage">
21
+ {{~> components/appBanner/appBanner ~}}
21
22
  <div class="js-pageSwap">
22
23
 
23
24
  {{> components/site_header/header }}
@@ -1,7 +1,7 @@
1
1
  <div class="h-8" x-data="{ isVisible: false }">
2
2
  <div class="grid grid-page z-100" :class="{ 'fixed bottom-feature-box-height left-0 w-full': !$store.footerIsVisible }">
3
3
  <div class="flex justify-between h-0 col-full sm:col-main"
4
- :class="{ 'bg-white h-8': $store.footerIsVisible }"
4
+ :class="{ 'bg-white h-8': $store.footerIsVisible, 'h-22': $store.appBannerIsVisible && !$store.footerIsVisible}"
5
5
  x-show="!$store.sharingIsVisible && isVisible"
6
6
  x-transition:enter="transition ease-[cubic-bezier(0.68,-0.3,0.32,1)] duration-500 transform order-first"
7
7
  x-transition:enter-start="opacity-0 translate-y-8"
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "repository": "https://github.com/szuelch/hr-design-system-handlebars",
9
- "version": "1.124.10",
9
+ "version": "1.125.1",
10
10
  "scripts": {
11
11
  "test": "echo \"Error: no test specified\" && exit 1",
12
12
  "storybook": "storybook dev -p 6006 public",
@@ -46,6 +46,7 @@ Alpine.store('serviceID', {
46
46
  Alpine.store('navIsVisible', true)
47
47
  Alpine.store('subNavIsVisible', false)
48
48
  Alpine.store('footerIsVisible', false)
49
+ Alpine.store('appBannerIsVisible', false)
49
50
  Alpine.store('sectionNavIsVisible', false)
50
51
  Alpine.store('sharingIsVisible', false)
51
52
  Alpine.store('sharingIsOpen', {
@@ -1,4 +1,5 @@
1
1
  import { uxAction } from 'base/tracking/pianoHelper.subfeature'
2
+ import { getJSONCookie, setJSONCookie } from 'hrQuery'
2
3
 
3
4
  export default function appBanner() {
4
5
  return {
@@ -6,24 +7,37 @@ export default function appBanner() {
6
7
  deferredPrompt: null,
7
8
  isAndroid: /Android/i.test(navigator.userAgent),
8
9
  packageId: "de.hr.hessenschau",
10
+ cookie: {},
11
+ cookieLifetime: 1000 * 60 * 60 * 24 * 30,
9
12
  init: function () {
10
-
11
- if(this.isAndroid){
13
+ this.readTrackingCookie()
14
+ if(this.cookie["closed"] !== true){
15
+ if(this.isAndroid){
16
+ this.showBanner = true;
17
+ this.$store.appBannerIsVisible = true;
18
+ }
19
+ }
20
+ if(window.IS_STORYBOOK){
12
21
  this.showBanner = true;
22
+ this.$store.appBannerIsVisible = true;
13
23
  }
14
24
 
15
- if(window.IS_STORYBOOK){ this.showBanner = true;}
16
25
  },
17
26
  installClickHandler: function(){
18
27
  this.openPlayStore()
28
+ this.writeCookie()
19
29
  this.showBanner = false
30
+ this.$store.appBannerIsVisible = false
20
31
  },
21
32
  closeClickHandler: function(){
22
33
  uxAction('appBanner::bannerClosed');
23
34
  this.showBanner = false
35
+ this.$store.appBannerIsVisible = false
36
+ this.writeCookie()
24
37
  },
25
38
  openPlayStore: function() {
26
39
  let fallbackTriggered = false;
40
+ uxAction('appBanner::playStoreOpened');
27
41
 
28
42
  const fallback = () => {
29
43
  if (fallbackTriggered) return;
@@ -45,6 +59,13 @@ export default function appBanner() {
45
59
  `#Intent;scheme=market;package=com.android.vending;end`;
46
60
 
47
61
  setTimeout(fallback, 700);
62
+ },
63
+ writeCookie: function() {
64
+ this.cookie["closed"] = true
65
+ setJSONCookie('appBanner', this.cookie, this.cookieLifetime)
66
+ },
67
+ readTrackingCookie: function() {
68
+ this.cookie = getJSONCookie('appBanner') || {}
48
69
  }
49
70
  }
50
71
  }
@@ -1,6 +1,6 @@
1
1
  <div
2
2
  x-data="appBanner()" x-cloak x-show="showBanner" ax-load x-ignore
3
- id="marketing-banner" tabindex="-1" class="fixed bottom-0 z-50 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
3
+ id="marketing-banner" tabindex="-1" class="fixed bottom-0 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 z-300 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
4
4
  <div class="flex flex-row items-center gap-4 grow">
5
5
  <div class="flex items-center justify-center rounded-lg w-11 h-11 bg-blue-congress-hex shrink-0">
6
6
  <img width="24" height="24" src="{{resourceUrl "assets/base/icons/logo/brandlogo--mobile.min.svg" _brand=(defaultIfEmpty this.brand "hessenschau")}}"
@@ -14,9 +14,13 @@ export default function nativeAppBanner() {
14
14
  // Update UI notify the user they can add to home screen
15
15
  if(this.isAndroid){
16
16
  this.showBanner = true;
17
+ this.$store.appBannerIsVisible = true;
17
18
  }
18
19
  });
19
- if(window.IS_STORYBOOK){ this.showBanner = true;}
20
+ if(window.IS_STORYBOOK){
21
+ this.showBanner = true;
22
+ this.$store.appBannerIsVisible = true;
23
+ }
20
24
  },
21
25
  installClickHandler: function(){
22
26
  if(this.deferredPrompt){
@@ -35,10 +39,12 @@ export default function nativeAppBanner() {
35
39
  });
36
40
  }
37
41
  this.showBanner = false
42
+ this.$store.appBannerIsVisible = false
38
43
  },
39
44
  closeClickHandler: function(){
40
45
  uxAction('nativeAppBanner::bannerClosed');
41
46
  this.showBanner = false
47
+ this.$store.appBannerIsVisible = false
42
48
  }
43
49
  }
44
50
  }
@@ -1,6 +1,6 @@
1
1
  <div
2
2
  x-data="nativeAppBanner()" x-cloak x-show="showBanner" ax-load x-ignore
3
- id="marketing-banner" tabindex="-1" class="fixed bottom-0 z-50 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
3
+ id="marketing-banner" tabindex="-1" class="fixed bottom-0 flex flex-row justify-end w-full gap-4 p-4 -translate-x-1/2 z-300 flex-nowrap bg-blue-aqua lg:max-w-7xl left-1/2">
4
4
  <div class="flex flex-row items-center gap-4 grow">
5
5
  <div class="flex items-center justify-center rounded-lg w-11 h-11 bg-blue-congress-hex shrink-0">
6
6
  <img width="24" height="24" src="{{resourceUrl "assets/base/icons/logo/brandlogo--mobile.min.svg" _brand=(defaultIfEmpty this.brand "hessenschau")}}"