hr-design-system-handlebars 1.11.10 → 1.11.11
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/.babelrc.json +14 -0
- package/.storybook/main.js +34 -52
- package/.storybook/preview-head.html +4 -1
- package/.storybook/preview.js +25 -35
- package/CHANGELOG.md +17 -0
- package/dist/assets/index.css +11 -3
- package/package.json +20 -13
- package/src/assets/css/custom-utilities.css +3 -3
- package/src/stories/BrandColors.data.js +42 -0
- package/src/stories/BrandColors.mdx +25 -0
- package/src/stories/{Colors.stories.mdx → Colors.data.js} +2 -18
- package/src/stories/Colors.mdx +19 -0
- package/src/stories/Example.mdx +56 -0
- package/src/stories/Example.stories.js +57 -0
- package/src/stories/{Fixtures.stories.mdx → Fixtures.mdx} +3 -5
- package/src/stories/{InstallAndUpdate.stories.mdx → InstallAndUpdate.mdx} +0 -2
- package/src/stories/Introduction.mdx +3 -0
- package/src/stories/{SvgOptimization.stories.mdx → SvgOptimization.mdx} +0 -2
- package/src/stories/{Typography.stories.mdx → Typography.mdx} +13 -14
- package/src/stories/{conventions-and-datastructure.stories.mdx → conventions-and-datastructure.mdx} +7 -9
- package/src/stories/views/components/Button.mdx +30 -0
- package/src/stories/views/components/Button_.stories.js +77 -0
- package/src/stories/views/components/event/calendar/{event_calendar_components.stories.mdx → event_calendar_components.mdx} +31 -87
- package/src/stories/views/components/event/calendar/event_calendar_components.stories.js +129 -0
- package/src/stories/views/components/geoTag/geoTag.mdx +32 -0
- package/src/stories/views/components/geoTag/geoTag.stories.js +35 -0
- package/src/stories/views/components/grid/grid.mdx +210 -0
- package/src/stories/views/components/grid/grid.stories.js +148 -0
- package/src/stories/views/components/label/label.mdx +54 -0
- package/src/stories/views/components/label/label.stories.js +183 -0
- package/src/stories/views/components/page/page.data.js +17 -0
- package/src/stories/views/components/page/page.mdx +110 -0
- package/src/stories/views/components/page/page.stories.js +50 -0
- package/src/stories/views/components/page/page_pagination.data.js +8 -0
- package/src/stories/views/components/page/page_pagination.mdx +8 -0
- package/src/stories/views/components/page/page_pagination.stories.js +34 -0
- package/src/stories/views/components/page/page_player.mdx +21 -0
- package/src/stories/views/components/page/page_player.stories.js +34 -0
- package/src/stories/views/components/site_header/{header.stories.mdx → header.mdx} +218 -152
- package/src/stories/views/components/site_header/header.stories.js +62 -0
- package/src/stories/views/components/teaser/cluster/teaser_cluster.mdx +32 -0
- package/src/stories/views/components/teaser/cluster/teaser_cluster.stories.js +146 -0
- package/src/stories/views/components/teaser/components/teaser_byline.mdx +97 -0
- package/src/stories/views/components/teaser/components/teaser_byline.stories.js +30 -0
- package/src/stories/views/components/teaser/components/teaser_heading.mdx +96 -0
- package/src/stories/views/components/teaser/components/teaser_heading.stories.js +158 -0
- package/src/stories/views/components/teaser/components/teaser_text.mdx +36 -0
- package/src/stories/views/components/teaser/components/teaser_text.stories.js +74 -0
- package/src/stories/views/components/teaser/components/teaser_title.mdx +42 -0
- package/src/stories/views/components/teaser/components/teaser_title.stories.js +85 -0
- package/src/stories/views/components/teaser/components/teaser_topline.mdx +29 -0
- package/src/stories/views/components/teaser/components/teaser_topline.stories.js +27 -0
- package/src/stories/views/components/teaser/content_nav/teaser_content_nav.mdx +54 -0
- package/src/stories/views/components/teaser/content_nav/{teaser_content_nav.stories.mdx → teaser_content_nav.stories.js} +80 -61
- package/src/stories/views/components/teaser/group_teaser/group.mdx +18 -0
- package/src/stories/views/components/teaser/group_teaser/group.stories.js +85 -0
- package/src/stories/views/components/teaser/podcast/podcast.mdx +11 -0
- package/src/stories/views/components/teaser/podcast/{podcast.stories.mdx → podcast.stories.js} +50 -39
- package/src/stories/views/components/teaser/podcast/podcast_subscribe_button.mdx +10 -0
- package/src/stories/views/components/teaser/podcast/podcast_subscribe_button.stories.js +51 -0
- package/src/stories/views/components/teaser/tabbox/teaser_tabbox.mdx +10 -0
- package/src/stories/views/components/teaser/tabbox/teaser_tabbox.stories.js +40 -0
- package/src/stories/views/components/teaser/teaser_alternativ.mdx +76 -0
- package/src/stories/views/components/teaser/teaser_alternativ.stories.js +126 -0
- package/src/stories/views/components/teaser/teaser_alternativ_av.mdx +75 -0
- package/src/stories/views/components/teaser/teaser_alternativ_av.stories.js +111 -0
- package/src/stories/views/components/teaser/teaser_event_calendar.mdx +57 -0
- package/src/stories/views/components/teaser/teaser_event_calendar.stories.js +92 -0
- package/src/stories/views/components/teaser/teaser_indextext.mdx +35 -0
- package/src/stories/views/components/teaser/teaser_indextext.stories.js +85 -0
- package/src/stories/views/components/teaser/teaser_logic/teaser_logic.mdx +23 -0
- package/src/stories/views/components/teaser/teaser_logic/teaser_logic.stories.js +36 -0
- package/src/stories/views/components/teaser/teaser_poster.mdx +95 -0
- package/src/stories/views/components/teaser/teaser_poster.stories.js +67 -0
- package/src/stories/views/components/teaser/teaser_stage.mdx +15 -0
- package/src/stories/views/components/teaser/teaser_stage.stories.js +60 -0
- package/src/stories/views/components/teaser/teaser_standard.mdx +129 -0
- package/src/stories/views/components/teaser/teaser_standard.stories.js +166 -0
- package/src/stories/views/components/teaser/teaser_standard_av.mdx +38 -0
- package/src/stories/views/components/teaser/teaser_standard_av.stories.js +117 -0
- package/src/stories/views/components/teaser/teaser_standard_event.mdx +103 -0
- package/src/stories/views/components/teaser/teaser_standard_event.stories.js +119 -0
- package/src/stories/views/components/teaser/ticker/teaser_ticker.mdx +10 -0
- package/src/stories/views/components/teaser/ticker/{teaser_ticker.stories.mdx → teaser_ticker.stories.js} +25 -24
- package/.storybook/withThemeDecorator.js +0 -12
- package/src/stories/BrandColors.stories.mdx +0 -39
- package/src/stories/Example.stories.mdx +0 -93
- package/src/stories/Introduction.stories.mdx +0 -211
- package/src/stories/views/components/Button.stories.mdx +0 -82
- package/src/stories/views/components/geoTag/geoTag.stories.mdx +0 -61
- package/src/stories/views/components/grid/grid.stories.mdx +0 -275
- package/src/stories/views/components/label/label.stories.mdx +0 -200
- package/src/stories/views/components/page/page.stories.mdx +0 -144
- package/src/stories/views/components/page/page_pagination.stories.mdx +0 -36
- package/src/stories/views/components/page/page_player.stories.mdx +0 -43
- package/src/stories/views/components/teaser/cluster/teaser_cluster.stories.mdx +0 -97
- package/src/stories/views/components/teaser/components/teaser_byline.stories.mdx +0 -78
- package/src/stories/views/components/teaser/components/teaser_heading.stories.mdx +0 -219
- package/src/stories/views/components/teaser/components/teaser_text.stories.mdx +0 -94
- package/src/stories/views/components/teaser/components/teaser_title.stories.mdx +0 -124
- package/src/stories/views/components/teaser/components/teaser_topline.stories.mdx +0 -63
- package/src/stories/views/components/teaser/group_teaser/group.stories.mdx +0 -85
- package/src/stories/views/components/teaser/podcast/podcast_subscribe_button.stories.mdx +0 -52
- package/src/stories/views/components/teaser/tabbox/teaser_tabbox.stories.mdx +0 -39
- package/src/stories/views/components/teaser/teaser_alternativ.stories.mdx +0 -163
- package/src/stories/views/components/teaser/teaser_alternativ_av.stories.mdx +0 -142
- package/src/stories/views/components/teaser/teaser_event_calendar.stories.mdx +0 -131
- package/src/stories/views/components/teaser/teaser_indextext.stories.mdx +0 -111
- package/src/stories/views/components/teaser/teaser_logic/teaser_logic.stories.mdx +0 -39
- package/src/stories/views/components/teaser/teaser_poster.stories.mdx +0 -130
- package/src/stories/views/components/teaser/teaser_stage.stories.mdx +0 -53
- package/src/stories/views/components/teaser/teaser_standard.stories.mdx +0 -170
- package/src/stories/views/components/teaser/teaser_standard_av.stories.mdx +0 -95
- package/src/stories/views/components/teaser/teaser_standard_event.stories.mdx +0 -150
|
@@ -1,64 +1,41 @@
|
|
|
1
|
-
import { ArgsTable, Meta, Story, Canvas, Preview } from '@storybook/
|
|
2
|
-
import
|
|
3
|
-
import navigation from './header.hbs'
|
|
4
|
-
import brandnav from './brand_navigation/brand_navigation.hbs'
|
|
5
|
-
import JsonData from './fixtures/site_header_default.json'
|
|
6
|
-
import JsonData2 from './fixtures/site_header_mit_warnung.json'
|
|
7
|
-
import JsonData3 from './fixtures/site_header_mit_submenu.json'
|
|
8
|
-
import JsonDataTopTopics from './fixtures/site_header_mit_top_topics.json'
|
|
9
|
-
|
|
10
|
-
<Meta title="Komponenten/Header/Header"
|
|
11
|
-
argTypes={{}}
|
|
12
|
-
parameters={{
|
|
13
|
-
chromatic: {
|
|
14
|
-
viewports: [360, 768, 1024],
|
|
15
|
-
},
|
|
16
|
-
layout: 'fullscreen',
|
|
17
|
-
docs: { inlineStories : false, iframeHeight: 240 },
|
|
18
|
-
viewport: {
|
|
19
|
-
viewports: INITIAL_VIEWPORTS
|
|
20
|
-
},
|
|
21
|
-
}}
|
|
22
|
-
|
|
23
|
-
/>
|
|
24
|
-
|
|
25
|
-
export const Template = (args, { globals: { customConditionalToolbar } }) => {
|
|
26
|
-
// You can either use a function to create DOM elements or use a plain html string!
|
|
27
|
-
// return `<div>${label}</div>`;
|
|
28
|
-
let brand =
|
|
29
|
-
undefined !== customConditionalToolbar ? customConditionalToolbar['brands'] : 'hessenschau'
|
|
30
|
-
return navigation({ brand, ...args })
|
|
31
|
-
}
|
|
32
|
-
|
|
1
|
+
import { ArgsTable, Meta, Story, Canvas, Preview } from '@storybook/blocks'
|
|
2
|
+
import * as HeaderStories from './header.stories'
|
|
33
3
|
|
|
4
|
+
<Meta of={HeaderStories} />
|
|
34
5
|
|
|
35
6
|
# Header
|
|
36
7
|
|
|
37
8
|
[Frameworks](#frameworks) - [Varianten](#varianten) - [Scrollverhalten](#scrollverhalten) - [Templates & Codes](#templates) - [Sub-Komponenten](#subkomponenten)
|
|
38
9
|
|
|
39
10
|
<Canvas>
|
|
40
|
-
<Story
|
|
41
|
-
args={JsonData}
|
|
42
|
-
parameters={{}}>
|
|
43
|
-
{Template.bind({})}
|
|
44
|
-
</Story>
|
|
11
|
+
<Story of={HeaderStories.Default} />
|
|
45
12
|
</Canvas>
|
|
46
13
|
|
|
47
14
|
## Beschreibung
|
|
48
15
|
|
|
49
|
-
Die <b>Header</b>-Komponente ist die Haupt-Navigation der Hessenschau. Sie ist in der Komponente 'Page' eingebunden und besteht grundsätzlich aus 4 Subkomponenten:
|
|
16
|
+
Die <b>Header</b>-Komponente ist die Haupt-Navigation der Hessenschau. Sie ist in der Komponente 'Page' eingebunden und besteht grundsätzlich aus 4 Subkomponenten:
|
|
50
17
|
|
|
51
18
|
<ul>
|
|
52
|
-
<li>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
<li>
|
|
19
|
+
<li>
|
|
20
|
+
components/site\_header/<b>anchor\_navigation</b>
|
|
21
|
+
</li>
|
|
22
|
+
<li>
|
|
23
|
+
components/site\_header/<b>brand\_navigation</b>
|
|
24
|
+
</li>
|
|
25
|
+
<li>
|
|
26
|
+
components/site\_header/<b>service\_navigation</b>
|
|
27
|
+
</li>
|
|
28
|
+
<li>
|
|
29
|
+
components/site\_header/<b>section\_navigation</b>
|
|
30
|
+
</li>
|
|
56
31
|
</ul>
|
|
32
|
+
|
|
57
33
|
<br />
|
|
34
|
+
|
|
58
35
|
Die Header-Komponente wird in handlebars wie folgt eingebaut:
|
|
59
36
|
|
|
60
37
|
```html
|
|
61
|
-
{{> components/site_header/header}}
|
|
38
|
+
{{> components/site_header/header}}
|
|
62
39
|
```
|
|
63
40
|
|
|
64
41
|
<a name="frameworks" />
|
|
@@ -66,72 +43,83 @@ Die Header-Komponente wird in handlebars wie folgt eingebaut:
|
|
|
66
43
|
### Frameworks
|
|
67
44
|
|
|
68
45
|
Die wesentlichen Funktionen und Features der Navigation sind mit dem Javascript-Framework [**Alpine.js**](https://alpinejs.dev/) realisiert. Alpine regelt u.a. die Sichtbarkeit der einzelnen Elemente und ist für die Interaktivität der Navigation zuständig. Alle Codes, die in der Header-Komponente Alpine.js direkt betreffen, sind in der Datei **"header_alpine.js** ausgelagert. Hier finden sich global verwendete dynamische Variablen (via Alpine.store) und zu verwendende Kontexte (via Alpine.data).
|
|
69
|
-
|
|
70
|
-
Für das CSS wird das Framework [**TailwindCSS**](https://www.tailwindcss.com) verwendet.
|
|
71
46
|
|
|
47
|
+
Für das CSS wird das Framework [**TailwindCSS**](https://www.tailwindcss.com) verwendet.
|
|
72
48
|
|
|
73
49
|
<a name="varianten" />
|
|
74
50
|
|
|
75
51
|
### Varianten
|
|
76
52
|
|
|
77
|
-
Die Navigation ist sticky und responsiv mit drei Breakpoints für Smartphone, Tablet und Desktop. Für diese drei Viewportgrößen gibt es jeweils unterschiedliche Darstellungen der Subkomponenten innerhalb der Navigation. Grundsätzlich kann die Navigation z.B. in der Anzahl der ServiceNavigation-Items und der Sichtbarkeit von Flyouts und/oder Submenus variieren.
|
|
53
|
+
Die Navigation ist sticky und responsiv mit drei Breakpoints für Smartphone, Tablet und Desktop. Für diese drei Viewportgrößen gibt es jeweils unterschiedliche Darstellungen der Subkomponenten innerhalb der Navigation. Grundsätzlich kann die Navigation z.B. in der Anzahl der ServiceNavigation-Items und der Sichtbarkeit von Flyouts und/oder Submenus variieren.
|
|
78
54
|
|
|
79
55
|
Desktop:
|
|
56
|
+
|
|
80
57
|
<img src="/images/navi_default.png" />
|
|
58
|
+
|
|
81
59
|
<br />
|
|
82
60
|
|
|
83
|
-
|
|
61
|
+
---
|
|
84
62
|
|
|
85
63
|
Tablet:
|
|
64
|
+
|
|
86
65
|
<img src="/images/navi_tablet.PNG" />
|
|
66
|
+
|
|
87
67
|
<br />
|
|
88
68
|
|
|
89
|
-
|
|
69
|
+
---
|
|
90
70
|
|
|
91
71
|
Mobil:
|
|
72
|
+
|
|
92
73
|
<img src="/images/navi_mobil_default.png" />
|
|
74
|
+
|
|
93
75
|
<br />
|
|
94
76
|
|
|
95
|
-
|
|
77
|
+
---
|
|
96
78
|
|
|
97
79
|
<br />
|
|
80
|
+
|
|
98
81
|
<br />
|
|
82
|
+
|
|
99
83
|
<br />
|
|
84
|
+
|
|
100
85
|
<br />
|
|
101
|
-
|
|
86
|
+
|
|
87
|
+
Navigation mit zusätzlichem Service-Item:{' '}
|
|
102
88
|
|
|
103
89
|
<Canvas>
|
|
104
|
-
<Story
|
|
105
|
-
{Template.bind({})}
|
|
106
|
-
</Story>
|
|
90
|
+
<Story of={HeaderStories.MitWarnung} />
|
|
107
91
|
</Canvas>
|
|
108
92
|
|
|
109
|
-
|
|
93
|
+
---
|
|
110
94
|
|
|
111
95
|
<br />
|
|
96
|
+
|
|
112
97
|
<br />
|
|
98
|
+
|
|
113
99
|
<br />
|
|
100
|
+
|
|
114
101
|
<br />
|
|
115
|
-
|
|
102
|
+
|
|
103
|
+
Navigation mit zusätzlicher Subnavigation:{' '}
|
|
116
104
|
|
|
117
105
|
<Canvas>
|
|
118
|
-
<Story
|
|
119
|
-
{Template.bind({})}
|
|
120
|
-
</Story>
|
|
106
|
+
<Story of={HeaderStories.MitSubnavigation} />
|
|
121
107
|
</Canvas>
|
|
122
108
|
|
|
123
|
-
|
|
109
|
+
---
|
|
124
110
|
|
|
125
111
|
<br />
|
|
112
|
+
|
|
126
113
|
<br />
|
|
114
|
+
|
|
127
115
|
<br />
|
|
116
|
+
|
|
128
117
|
<br />
|
|
129
|
-
|
|
118
|
+
|
|
119
|
+
Navigation mit Top Topics:{' '}
|
|
130
120
|
|
|
131
121
|
<Canvas>
|
|
132
|
-
<Story
|
|
133
|
-
{Template.bind({})}
|
|
134
|
-
</Story>
|
|
122
|
+
<Story of={HeaderStories.MitTopTopics} />
|
|
135
123
|
</Canvas>
|
|
136
124
|
|
|
137
125
|
<br />
|
|
@@ -140,59 +128,72 @@ Navigation mit Top Topics:
|
|
|
140
128
|
|
|
141
129
|
### Scrollverhalten
|
|
142
130
|
|
|
143
|
-
Es gibt 3 Scrollpositionen, die relevant sind: 0%, 50% und 90%. Die Höhe des Viewports wird hierbei als Referenz bzw. 100% angenommen. (Programmatisch wird die Scrollposition in der Variable **"percent"** abgebildet und zur Verarbeitung genutzt) Scrollt man bei ausgeblendeter Navigation die Seite wieder um 1px zurück, wird im Desktop-Viewport die Section-Navigation wieder eingeblendet, im Tablet und Mobil-Viewport kommt je nach Scrollposition die Navigation wieder in den sichtbaren Bereich bzw. die Service-List mit den Service-Icons wird wieder eingeblendet. Die Brand-Navigation wird erst wieder angezeigt, wenn ganz nach oben gescrollt wird.
|
|
131
|
+
Es gibt 3 Scrollpositionen, die relevant sind: 0%, 50% und 90%. Die Höhe des Viewports wird hierbei als Referenz bzw. 100% angenommen. (Programmatisch wird die Scrollposition in der Variable **"percent"** abgebildet und zur Verarbeitung genutzt) Scrollt man bei ausgeblendeter Navigation die Seite wieder um 1px zurück, wird im Desktop-Viewport die Section-Navigation wieder eingeblendet, im Tablet und Mobil-Viewport kommt je nach Scrollposition die Navigation wieder in den sichtbaren Bereich bzw. die Service-List mit den Service-Icons wird wieder eingeblendet. Die Brand-Navigation wird erst wieder angezeigt, wenn ganz nach oben gescrollt wird.
|
|
144
132
|
|
|
145
|
-
| Scrollposition | Viewport
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
133
|
+
| Scrollposition | Viewport | Beschreibung |
|
|
134
|
+
| :------------- | :------------- | :------------------------------------------------------ |
|
|
135
|
+
| `>0%` | alle Viewports | Brand-Navigation wird ausgeblendet |
|
|
136
|
+
| `>50%` | Desktop | Section-Navigation wird ausgeblendet & Logo verkleinert |
|
|
137
|
+
| | Tablet | Logo wird verkleinert |
|
|
138
|
+
| | Mobil | Logo wird verkleinert & ServiceList wird ausgeblendet |
|
|
139
|
+
| `>90%` | Desktop | keine weitere Änderung |
|
|
140
|
+
| | Tablet | Navigation verschwindet ganz |
|
|
141
|
+
| | Mobil | Navigation verschwindet ganz |
|
|
154
142
|
|
|
155
143
|
<br />
|
|
156
144
|
|
|
157
145
|
**Desktop >0%:**
|
|
146
|
+
|
|
158
147
|
<img src="/images/navi_scroll_50percent.png" />
|
|
159
148
|
|
|
160
149
|
**Desktop >50%:**
|
|
150
|
+
|
|
161
151
|
<img src="/images/navi_scroll_90percent.png" />
|
|
152
|
+
|
|
162
153
|
<br />
|
|
163
154
|
|
|
164
|
-
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
**Tablet > 0% / \< 50%:**
|
|
165
158
|
|
|
166
|
-
**Tablet > 0% / < 50%:**
|
|
167
159
|
<img src="/images/navi_tablet_scroll_1percent.PNG" />
|
|
160
|
+
|
|
168
161
|
<br />
|
|
169
162
|
|
|
170
|
-
**Tablet > 50% /
|
|
163
|
+
**Tablet > 50% / \< 90%:**
|
|
164
|
+
|
|
171
165
|
<img src="/images/navi_tablet_scroll_50percent.PNG" />
|
|
166
|
+
|
|
172
167
|
<br />
|
|
173
168
|
|
|
174
|
-
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
**Mobil >0% / \< 50%:**
|
|
175
172
|
|
|
176
|
-
**Mobil >0% / < 50%:**
|
|
177
173
|
<img src="/images/navi_mobil_scroll_1percent.png" />
|
|
174
|
+
|
|
178
175
|
<br />
|
|
179
176
|
|
|
180
|
-
**Mobil >50% /
|
|
177
|
+
**Mobil >50% / \< 90%:**
|
|
178
|
+
|
|
181
179
|
<img src="/images/navi_mobil_scroll_50percent.PNG" />
|
|
180
|
+
|
|
182
181
|
<br />
|
|
183
182
|
|
|
184
|
-
|
|
183
|
+
---
|
|
185
184
|
|
|
186
185
|
<br />
|
|
186
|
+
|
|
187
187
|
<a href="#top">Back to top</a>
|
|
188
|
+
|
|
188
189
|
<a name="templates" />
|
|
189
190
|
|
|
190
191
|
### Template & Codes
|
|
191
192
|
|
|
192
|
-
Im Haupt-Template **header.hbs** wird für den umschließenden Hauptcontainer mittels der Alpine-Direktive **"x-data"** der Kontext auf das Data-Objekt **"mainNavigationHandler()"** gesetzt und beim erstmaligen Initialisieren die Unter-Funktion **"init()"** aufgerufen. Durch den angegebenen Kontext stehen innerhalb der Navigation nun alle Unterfunktionen von mainNavigationHandler() bereit. Hier finden sich neben der "init()"-Funktion z.B. auch alle Hilfsfunktionen, die zur Ermittlung der Scrollposition bzw. der
|
|
193
|
+
Im Haupt-Template **header.hbs** wird für den umschließenden Hauptcontainer mittels der Alpine-Direktive **"x-data"** der Kontext auf das Data-Objekt **"mainNavigationHandler()"** gesetzt und beim erstmaligen Initialisieren die Unter-Funktion **"init()"** aufgerufen. Durch den angegebenen Kontext stehen innerhalb der Navigation nun alle Unterfunktionen von mainNavigationHandler() bereit. Hier finden sich neben der "init()"-Funktion z.B. auch alle Hilfsfunktionen, die zur Ermittlung der Scrollposition bzw. der Sichtbarkeit der jeweiligen Elemente benötig werden.
|
|
193
194
|
|
|
194
195
|
```html
|
|
195
|
-
<div class="sb-main-navigation" x-data="mainNavigationHandler()" x-init="init()">
|
|
196
|
+
<div class="sb-main-navigation" x-data="mainNavigationHandler()" x-init="init()"></div>
|
|
196
197
|
```
|
|
197
198
|
|
|
198
199
|
Innerhalb von "init()" werden die Listener und deren Handler für das Scrollen via Scrollrad oder Mouse- bzw. Touch-Aktionen definiert:
|
|
@@ -209,8 +210,8 @@ init(){
|
|
|
209
210
|
window.userScroll = true;
|
|
210
211
|
}
|
|
211
212
|
const clickedOnScrollbar = mouseX => {
|
|
212
|
-
return document.documentElement.offsetWidth <= mouseX ? true : false;
|
|
213
|
-
}
|
|
213
|
+
return document.documentElement.offsetWidth <= mouseX ? true : false;
|
|
214
|
+
}
|
|
214
215
|
const mouseDownHandler = e => {
|
|
215
216
|
clickedOnScrollbar(e.clientX) ? mouseEvent() : null
|
|
216
217
|
};
|
|
@@ -229,18 +230,19 @@ init(){
|
|
|
229
230
|
}
|
|
230
231
|
```
|
|
231
232
|
|
|
232
|
-
|
|
233
|
+
_Beispielhaft wird hier eine der weiteren Hilfsfunktionen aus dem mainNavigationHandler() erklärt:_
|
|
233
234
|
|
|
234
|
-
Innerhalb des serviceNavWrappers wird mit Alpine die Function "shouldServiceNavBeHidden()" zum Setzen der korrekten CSS-Klassen via Ternary Expression verwendet: Wenn shouldServiceNavBeHidden() den Wert '_true_' zurückgibt, wird die CSS-Klasse "-mt-40" gesetzt, welche den Wrapper mit einem negativen Margin von -10rem aus dem Viewport schiebt:
|
|
235
|
+
Innerhalb des serviceNavWrappers wird mit Alpine die Function "shouldServiceNavBeHidden()" zum Setzen der korrekten CSS-Klassen via Ternary Expression verwendet: Wenn shouldServiceNavBeHidden() den Wert '_true_' zurückgibt, wird die CSS-Klasse "-mt-40" gesetzt, welche den Wrapper mit einem negativen Margin von -10rem aus dem Viewport schiebt:
|
|
235
236
|
|
|
236
237
|
**header.hbs:**
|
|
237
238
|
|
|
238
239
|
```html
|
|
239
|
-
<div id="serviceNavWrapper"
|
|
240
|
-
:class="shouldServiceNavBeHidden() ? '-mt-40' : ''"
|
|
240
|
+
<div id="serviceNavWrapper"
|
|
241
|
+
:class="shouldServiceNavBeHidden() ? '-mt-40' : ''"
|
|
241
242
|
```
|
|
242
|
-
|
|
243
|
-
|
|
243
|
+
|
|
244
|
+
WENN _percent > 90_ ist, der _Viewport NICHT Desktop_ ist, die _Scrollrichtung nach unten_ ist und es _kein offenes Burger-Menu_ gibt, sendet die Funktion _true_ als Rückgabewert zurück. Wenn die Seite _via JS_ (z.B. durch einen Ankerlink) gescrollt wird, verstecke die ServiceNavigation unter den gleichen Bedingungen, aber _unabhängig von der Scrollrichtung_:
|
|
245
|
+
|
|
244
246
|
**header_alpine.js:**
|
|
245
247
|
|
|
246
248
|
```js
|
|
@@ -251,147 +253,211 @@ shouldServiceNavBeHidden() {
|
|
|
251
253
|
return (this.percent > 90 && !this.$screen('lg') && this.$store.burgeropen == false)
|
|
252
254
|
}
|
|
253
255
|
}
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
+
```
|
|
256
257
|
|
|
257
|
-
|
|
258
|
+
---
|
|
258
259
|
|
|
259
|
-
Weiterhin sind in der Datei **header_alpine.js** weitere Alpine.data-Kontexte für das Overlay, die Dropdown-Menus und die Flyouts hinterlegt.
|
|
260
|
-
Für die Erklärung können die Kommentare direkt in der Datei herangezogen werden.
|
|
260
|
+
Weiterhin sind in der Datei **header_alpine.js** weitere Alpine.data-Kontexte für das Overlay, die Dropdown-Menus und die Flyouts hinterlegt.
|
|
261
|
+
Für die Erklärung können die Kommentare direkt in der Datei herangezogen werden.
|
|
261
262
|
|
|
262
263
|
<a href="#top">Back to top</a>
|
|
264
|
+
|
|
263
265
|
<br />
|
|
266
|
+
|
|
264
267
|
<a name="subkomponenten" />
|
|
265
268
|
|
|
266
269
|
### Sub-Komponenten
|
|
270
|
+
|
|
267
271
|
<br />
|
|
268
272
|
|
|
269
|
-
<b>Anchor Navigation</b>
|
|
273
|
+
<b>Anchor Navigation</b>
|
|
274
|
+
|
|
270
275
|
<br />
|
|
271
276
|
|
|
272
277
|
**anchor_navigation.hbs** Inkludiert folgende Subkomponenten:
|
|
273
278
|
|
|
274
|
-
|
|
279
|
+
- featurebox_anchor.hbs
|
|
275
280
|
|
|
276
281
|
In dieser (nicht sichtbaren) Sub-Komponente werden Anchorlinks zu den Teilbereichen der Navigation bereitgestellt, um sie für Screen-Reader direkt erreichbar zu machen.
|
|
277
282
|
|
|
278
283
|
**header.hbs:**
|
|
284
|
+
|
|
279
285
|
```html
|
|
280
|
-
<div id="anchorNavWrapper" class="hidden">
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
286
|
+
<div id="anchorNavWrapper" class="hidden">{{> components/site_header/anchor_navigation}}</div>
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
284
290
|
|
|
285
|
-
|
|
291
|
+
<br />
|
|
286
292
|
|
|
287
|
-
<br/>
|
|
288
293
|
<b>Brand Navigation</b>
|
|
294
|
+
|
|
289
295
|
<br />
|
|
290
296
|
|
|
291
297
|
**brand_navigation.hbs** inkludiert folgende Subkomponenten:
|
|
292
298
|
|
|
293
|
-
|
|
299
|
+
- brand_navigation_item
|
|
294
300
|
|
|
295
|
-
Die Brand-Navigation stellt im obersten Bereich des Headers direkte Links zu den einzelnen Angeboten des HR zur Verfügung.
|
|
301
|
+
Die Brand-Navigation stellt im obersten Bereich des Headers direkte Links zu den einzelnen Angeboten des HR zur Verfügung.
|
|
296
302
|
|
|
297
|
-
```html
|
|
298
|
-
<div
|
|
299
|
-
|
|
303
|
+
```html
|
|
304
|
+
<div
|
|
305
|
+
id="brandNavWrapper"
|
|
306
|
+
class="relative flex items-center justify-center order-1 w-full bg-white z-10000 print:hidden"
|
|
307
|
+
>
|
|
308
|
+
{{> components/site_header/brand_navigation/brand_navigation }}
|
|
300
309
|
</div>
|
|
301
310
|
```
|
|
302
311
|
|
|
303
|
-
|
|
312
|
+
---
|
|
304
313
|
|
|
305
314
|
<br />
|
|
315
|
+
|
|
306
316
|
<b>Service Navigation</b>
|
|
317
|
+
|
|
307
318
|
<br />
|
|
308
319
|
|
|
309
320
|
**service_navigation.hbs** inkludiert folgende Subkomponenten:
|
|
310
321
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
<br />
|
|
322
|
+
- service_logo.hbs
|
|
323
|
+
- service_list.hbs
|
|
324
|
+
- service_navigation_item.hbs
|
|
325
|
+
- navigation_flyout.hbs
|
|
326
|
+
- navigation_search.hbs
|
|
327
|
+
- burger.hbs
|
|
328
|
+
<br />
|
|
318
329
|
|
|
319
|
-
Die Service-Navigation beinhaltet das Logo **(service_logo.hbs)**, die Service-List **(service_list.hbs)** und die Suchfunktion **(navigation_search.hbs)**, sowie bei mobilen Viewports das Burger-Menu **(burger.hbs)**, welches die mobile Variante der **SectionNavigation** darstellt.<br />
|
|
320
|
-
Die gesamte ServiceNavigation liegt innerhalb des **"serviceNavWrapper"**. Bei mobilem Viewport wird dieser Wrapper beim Scrollen der Seite mit Hilfe der Funktion **"shouldServiceNavBeHidden()"** ein- bzw. ausgeblendet.
|
|
330
|
+
Die Service-Navigation beinhaltet das Logo **(service_logo.hbs)**, die Service-List **(service_list.hbs)** und die Suchfunktion **(navigation_search.hbs)**, sowie bei mobilen Viewports das Burger-Menu **(burger.hbs)**, welches die mobile Variante der **SectionNavigation** darstellt.<br />
|
|
331
|
+
Die gesamte ServiceNavigation liegt innerhalb des **"serviceNavWrapper"**. Bei mobilem Viewport wird dieser Wrapper beim Scrollen der Seite mit Hilfe der Funktion **"shouldServiceNavBeHidden()"** ein- bzw. ausgeblendet.
|
|
321
332
|
|
|
322
|
-
Innerhalb des Hauptwrappers liegt der **"serviceNavMainContainer"** welcher die serviceNavHeadline, einen Wrapper für das Logo sowie den **"serviceItemsWrapper"** beinhaltet. In diesem wiederum liegt die Service-List **(service_list.hbs)** , die Komponente für die Suchfunktion **(navigation_search.hbs)** sowie für mobil/Tablet das Burger-Menu **(burger.hbs)**.
|
|
333
|
+
Innerhalb des Hauptwrappers liegt der **"serviceNavMainContainer"** welcher die serviceNavHeadline, einen Wrapper für das Logo sowie den **"serviceItemsWrapper"** beinhaltet. In diesem wiederum liegt die Service-List **(service_list.hbs)** , die Komponente für die Suchfunktion **(navigation_search.hbs)** sowie für mobil/Tablet das Burger-Menu **(burger.hbs)**.
|
|
323
334
|
|
|
324
335
|
**header.hbs:**
|
|
325
336
|
|
|
326
|
-
```html
|
|
327
|
-
<div
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
337
|
+
```html
|
|
338
|
+
<div
|
|
339
|
+
id="serviceNavWrapper"
|
|
340
|
+
:class="shouldServiceNavBeHidden() ? '-mt-40' : ''"
|
|
341
|
+
class="relative flex justify-center order-2 w-full transition-all duration-500 ease-in-out md:border-white lg:border-b bg-blue-congress z-10002"
|
|
342
|
+
>
|
|
343
|
+
<div
|
|
344
|
+
id="serviceNavMainContainer"
|
|
345
|
+
class="flex w-full h-10 lg:container md:h-12 lg:px-10 lg:h-16 z-10001"
|
|
346
|
+
>
|
|
347
|
+
<span id="serviceNavHeadline" class="hidden print:hidden">Service Navigation</span>
|
|
348
|
+
<div
|
|
349
|
+
id="serviceLogoWrapper"
|
|
350
|
+
class="flex items-center order-1 w-full pl-4 pr-2 tablet:pl-5 lg:items-end lg:pb-3 bg-blue-congress md:px-0 md:h-12 lg:h-16 md:w-1/2 md:max-w-1/2 lg:w-1/4 lg:max-w-1/4"
|
|
351
|
+
>
|
|
352
|
+
{{> components/site_header/service_logo }}
|
|
353
|
+
</div>
|
|
354
|
+
<div
|
|
355
|
+
id="serviceItemsWrapper"
|
|
356
|
+
class="flex items-center justify-end flex-initial order-2 inline-block w-full max-w-full align-top bg-blue-congress md:h-12 lg:h-16 lg:order-2 lg:w-3/4 lg:max-w-3/4 md:mt-0 md:w-1/2 md:max-w-1/2 md:order-2 md:border-0 print:hidden "
|
|
357
|
+
>
|
|
358
|
+
{{> components/site_header/service_navigation/service_list }} {{>
|
|
359
|
+
components/site_header/navigation_search/quick_search_button }}
|
|
360
|
+
|
|
361
|
+
<div class="hidden lg:flex">
|
|
362
|
+
{{> components/site_header/navigation_search/quick_search_form }}
|
|
333
363
|
</div>
|
|
334
|
-
<div
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
<div class="hidden lg:flex">
|
|
340
|
-
{{> components/site_header/navigation_search/quick_search_form }}
|
|
341
|
-
</div>
|
|
342
|
-
<div id="burgerWrapper" class="flex justify-end flex-none order-2 lg:order-4 md:order-4 lg:hidden ">
|
|
343
|
-
{{> components/site_header/burger }}
|
|
344
|
-
</div>
|
|
364
|
+
<div
|
|
365
|
+
id="burgerWrapper"
|
|
366
|
+
class="flex justify-end flex-none order-2 lg:order-4 md:order-4 lg:hidden "
|
|
367
|
+
>
|
|
368
|
+
{{> components/site_header/burger }}
|
|
345
369
|
</div>
|
|
346
370
|
</div>
|
|
347
|
-
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
348
373
|
```
|
|
349
374
|
|
|
350
|
-
Innerhalb der Service-List Komponente **(service_list.hbs)** befinden sich die Service-Navigation-Items. Ein Click auf ein Item öffnet entweder direkt eine Zielseite oder ein Flyout mit Links zu den Unterseiten des jeweiligen Strukturknotens/Bereichs oder externen Zielen. Standard-Items sind "Video/Podcast", "Verkehr" und "Wetter". Bei Unwetterwarnungen wird zusätzlich ein "Warnung"-Item angezeigt.
|
|
351
|
-
Innerhalb der Service-List können mittels der Funktion **"shouldServiceIconsBeHidden()"** je nach Scrollposition die Service-Icons ausgeblendet werden.
|
|
375
|
+
Innerhalb der Service-List Komponente **(service_list.hbs)** befinden sich die Service-Navigation-Items. Ein Click auf ein Item öffnet entweder direkt eine Zielseite oder ein Flyout mit Links zu den Unterseiten des jeweiligen Strukturknotens/Bereichs oder externen Zielen. Standard-Items sind "Video/Podcast", "Verkehr" und "Wetter". Bei Unwetterwarnungen wird zusätzlich ein "Warnung"-Item angezeigt.
|
|
376
|
+
Innerhalb der Service-List können mittels der Funktion **"shouldServiceIconsBeHidden()"** je nach Scrollposition die Service-Icons ausgeblendet werden.
|
|
377
|
+
|
|
352
378
|
<br />
|
|
379
|
+
|
|
353
380
|
Service-Navigation Flyout Desktop:
|
|
354
|
-
|
|
381
|
+
|
|
382
|
+
<br />
|
|
383
|
+
|
|
384
|
+
<br />
|
|
385
|
+
|
|
355
386
|
<img src="/images/navi_flyout_service.png" />
|
|
387
|
+
|
|
356
388
|
<br />
|
|
357
389
|
|
|
358
|
-
|
|
390
|
+
---
|
|
359
391
|
|
|
360
392
|
<br />
|
|
393
|
+
|
|
361
394
|
<br />
|
|
395
|
+
|
|
362
396
|
Service-Navigation Flyout Tablet/Mobil:
|
|
363
|
-
|
|
397
|
+
|
|
398
|
+
<br />
|
|
399
|
+
|
|
400
|
+
<br />
|
|
401
|
+
|
|
364
402
|
<img src="/images/navi_tablet_flyout_service.png" />
|
|
403
|
+
|
|
365
404
|
<br />
|
|
405
|
+
|
|
366
406
|
<br />
|
|
407
|
+
|
|
367
408
|
<a href="#top">Back to top</a>
|
|
409
|
+
|
|
368
410
|
<br />
|
|
369
411
|
|
|
370
|
-
|
|
412
|
+
---
|
|
413
|
+
|
|
371
414
|
<br />
|
|
415
|
+
|
|
372
416
|
<b>Section Navigation</b>
|
|
373
417
|
|
|
374
418
|
**section_navigation.hbs** inkludiert folgende Subkomponenten:
|
|
375
419
|
|
|
376
|
-
|
|
377
|
-
|
|
420
|
+
- section_navigation_item.hbs
|
|
421
|
+
- navigation_flyout.hbs
|
|
378
422
|
|
|
379
423
|
<br />
|
|
380
|
-
|
|
424
|
+
|
|
425
|
+
Die Section-Navigation stellt die Links zu den einzelnen Themenbereichen der Hessenschau bereit. Die
|
|
426
|
+
Navigation-Items der Section Navigation können je nach Einstellung vom CMS direkt zur Themen-Indexseite
|
|
427
|
+
verlinken oder ihrerseits ein Flyout öffnen, über dessen Einträge dann Themenbereiche angesteuert werden
|
|
428
|
+
können:
|
|
429
|
+
|
|
381
430
|
<br />
|
|
431
|
+
|
|
382
432
|
<br />
|
|
433
|
+
|
|
383
434
|
Section-Navigation Flyout Desktop:
|
|
435
|
+
|
|
384
436
|
<br />
|
|
437
|
+
|
|
385
438
|
<br />
|
|
439
|
+
|
|
386
440
|
<img src="/images/navi_flyout_section.png" />
|
|
387
|
-
|
|
388
|
-
Bei den Viewports "mobil" und "tablet" wird die Section-Navigation in Form eines Burger-Menus dargstellt:
|
|
441
|
+
|
|
389
442
|
<br />
|
|
443
|
+
|
|
444
|
+
<br />
|
|
445
|
+
|
|
446
|
+
Bei den Viewports "mobil" und "tablet" wird die Section-Navigation in Form eines Burger-Menus
|
|
447
|
+
dargstellt:
|
|
448
|
+
|
|
449
|
+
<br />
|
|
450
|
+
|
|
390
451
|
<br />
|
|
452
|
+
|
|
391
453
|
<img src="/images/navi_mobil_burger_open.png" />
|
|
392
|
-
<br /><br />
|
|
393
454
|
|
|
394
|
-
|
|
455
|
+
<br />
|
|
456
|
+
|
|
457
|
+
<br />{' '}
|
|
458
|
+
|
|
459
|
+
---
|
|
395
460
|
|
|
396
461
|
<br />
|
|
397
|
-
|
|
462
|
+
|
|
463
|
+
<a href="#top">Back to top</a>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'
|
|
2
|
+
import navigation from './header.hbs'
|
|
3
|
+
import brandnav from './brand_navigation/brand_navigation.hbs'
|
|
4
|
+
import JsonData from './fixtures/site_header_default.json'
|
|
5
|
+
import JsonData2 from './fixtures/site_header_mit_warnung.json'
|
|
6
|
+
import JsonData3 from './fixtures/site_header_mit_submenu.json'
|
|
7
|
+
import JsonDataTopTopics from './fixtures/site_header_mit_top_topics.json'
|
|
8
|
+
|
|
9
|
+
const Template = (args, { globals: { customConditionalToolbar } }) => {
|
|
10
|
+
// You can either use a function to create DOM elements or use a plain html string!
|
|
11
|
+
// return `<div>${label}</div>`;
|
|
12
|
+
let brand =
|
|
13
|
+
undefined !== customConditionalToolbar ? customConditionalToolbar['brands'] : 'hessenschau'
|
|
14
|
+
return navigation({ brand, ...args })
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default {
|
|
18
|
+
title: 'Komponenten/Header/Header',
|
|
19
|
+
argTypes: {},
|
|
20
|
+
|
|
21
|
+
parameters: {
|
|
22
|
+
chromatic: {
|
|
23
|
+
viewports: [360, 768, 1024],
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
layout: 'fullscreen',
|
|
27
|
+
|
|
28
|
+
docs: {
|
|
29
|
+
inlineStories: false,
|
|
30
|
+
iframeHeight: 240,
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
viewport: {
|
|
34
|
+
viewports: INITIAL_VIEWPORTS,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const Default = {
|
|
40
|
+
render: Template.bind({}),
|
|
41
|
+
name: 'Default',
|
|
42
|
+
args: JsonData,
|
|
43
|
+
parameters: {},
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export const MitWarnung = {
|
|
47
|
+
render: Template.bind({}),
|
|
48
|
+
name: 'Mit Warnung',
|
|
49
|
+
args: JsonData2,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const MitSubnavigation = {
|
|
53
|
+
render: Template.bind({}),
|
|
54
|
+
name: 'Mit Subnavigation',
|
|
55
|
+
args: JsonData3,
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const MitTopTopics = {
|
|
59
|
+
render: Template.bind({}),
|
|
60
|
+
name: 'Mit Top Topics',
|
|
61
|
+
args: JsonDataTopTopics,
|
|
62
|
+
}
|