b4um_generators 0.1.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.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +28 -0
- data/CHANGELOG.md +5 -0
- data/LICENSE.txt +21 -0
- data/README.de.md +821 -0
- data/README.md +815 -0
- data/Rakefile +12 -0
- data/b4um_generators.gemspec +30 -0
- data/bin/console +11 -0
- data/bin/setup +8 -0
- data/lib/b4um_generators/version.rb +5 -0
- data/lib/b4um_generators.rb +8 -0
- data/lib/generators/b4um/bento/bento_generator.rb +81 -0
- data/lib/generators/b4um/bento/templates/_alternating.html.erb.tt +15 -0
- data/lib/generators/b4um/bento/templates/_bento.html.erb.tt +26 -0
- data/lib/generators/b4um/bento/templates/_grid.html.erb.tt +13 -0
- data/lib/generators/b4um/bento/templates/_list.html.erb.tt +15 -0
- data/lib/generators/b4um/comments/comments_generator.rb +259 -0
- data/lib/generators/b4um/comments/templates/_comments.html.erb.tt +63 -0
- data/lib/generators/b4um/comments/templates/comment.rb.tt +5 -0
- data/lib/generators/b4um/comments/templates/comments_controller.rb.tt +45 -0
- data/lib/generators/b4um/comments/templates/create_comments.rb.tt +14 -0
- data/lib/generators/b4um/controller/controller_generator.rb +397 -0
- data/lib/generators/b4um/help/help_generator.rb +755 -0
- data/lib/generators/b4um/infinite_scroll/infinite_scroll_generator.rb +199 -0
- data/lib/generators/b4um/infinite_scroll/templates/infinite_scroll_controller.js +61 -0
- data/lib/generators/b4um/install/install_generator.rb +492 -0
- data/lib/generators/b4um/install/templates/_cookie_consent.html.erb +27 -0
- data/lib/generators/b4um/install/templates/_footer.html.erb +17 -0
- data/lib/generators/b4um/install/templates/_hero.html.erb +33 -0
- data/lib/generators/b4um/install/templates/_navigation.html.erb +31 -0
- data/lib/generators/b4um/install/templates/_sitemap.html.erb +48 -0
- data/lib/generators/b4um/install/templates/_theme_switcher.html.erb +57 -0
- data/lib/generators/b4um/install/templates/b4um/badges.css +43 -0
- data/lib/generators/b4um/install/templates/b4um/base.css +42 -0
- data/lib/generators/b4um/install/templates/b4um/callouts.css +58 -0
- data/lib/generators/b4um/install/templates/b4um/cards.css +401 -0
- data/lib/generators/b4um/install/templates/b4um/comments.css +52 -0
- data/lib/generators/b4um/install/templates/b4um/cookie-consent.css +83 -0
- data/lib/generators/b4um/install/templates/b4um/empty-state.css +26 -0
- data/lib/generators/b4um/install/templates/b4um/flash.css +86 -0
- data/lib/generators/b4um/install/templates/b4um/footer.css +338 -0
- data/lib/generators/b4um/install/templates/b4um/forms.css +924 -0
- data/lib/generators/b4um/install/templates/b4um/hero.css +149 -0
- data/lib/generators/b4um/install/templates/b4um/layout.css +166 -0
- data/lib/generators/b4um/install/templates/b4um/lightbox.css +268 -0
- data/lib/generators/b4um/install/templates/b4um/navigation.css +257 -0
- data/lib/generators/b4um/install/templates/b4um/pagination.css +85 -0
- data/lib/generators/b4um/install/templates/b4um/resources.css +121 -0
- data/lib/generators/b4um/install/templates/b4um/search.css +41 -0
- data/lib/generators/b4um/install/templates/b4um/tables.css +67 -0
- data/lib/generators/b4um/install/templates/b4um/theme-switcher.css +178 -0
- data/lib/generators/b4um/install/templates/b4um/theme.css +132 -0
- data/lib/generators/b4um/install/templates/b4um.css +20 -0
- data/lib/generators/b4um/install/templates/b4um.yml +12 -0
- data/lib/generators/b4um/install/templates/b4um_helper.rb +27 -0
- data/lib/generators/b4um/install/templates/cookie_consent_controller.js +76 -0
- data/lib/generators/b4um/install/templates/dismissible_controller.js +7 -0
- data/lib/generators/b4um/install/templates/image_lightbox_controller.js +414 -0
- data/lib/generators/b4um/install/templates/image_preview_controller.js +85 -0
- data/lib/generators/b4um/install/templates/navigation_controller.js +25 -0
- data/lib/generators/b4um/install/templates/navigation_helper.rb +26 -0
- data/lib/generators/b4um/install/templates/sitemap_controller.js +35 -0
- data/lib/generators/b4um/install/templates/theme_controller.js +122 -0
- data/lib/generators/b4um/pagination/pagination_generator.rb +179 -0
- data/lib/generators/b4um/pagination/templates/_pagination.html.erb.tt +48 -0
- data/lib/generators/b4um/pagination/templates/pagination.rb +36 -0
- data/lib/generators/b4um/scaffold/scaffold_generator.rb +333 -0
- data/lib/generators/b4um/scaffold/templates/_bento.html.erb.tt +26 -0
- data/lib/generators/b4um/scaffold/templates/_form.html.erb.tt +218 -0
- data/lib/generators/b4um/scaffold/templates/_resource.html.erb.tt +144 -0
- data/lib/generators/b4um/scaffold/templates/_table.html.erb.tt +40 -0
- data/lib/generators/b4um/scaffold/templates/edit.html.erb.tt +21 -0
- data/lib/generators/b4um/scaffold/templates/index.html.erb.tt +24 -0
- data/lib/generators/b4um/scaffold/templates/new.html.erb.tt +17 -0
- data/lib/generators/b4um/scaffold/templates/show.html.erb.tt +31 -0
- data/lib/generators/b4um/search/search_generator.rb +165 -0
- data/lib/generators/b4um/search/templates/search.rb +34 -0
- data/lib/generators/b4um/search/templates/search_form.html.erb.tt +15 -0
- data/lib/generators/b4um/table/table_generator.rb +63 -0
- data/lib/generators/b4um/table/templates/_table.html.erb.tt +40 -0
- data/lib/generators/b4um/trix/templates/b4um_rich_text_helper.rb +58 -0
- data/lib/generators/b4um/trix/templates/b4um_trix.js +551 -0
- data/lib/generators/b4um/trix/trix_generator.rb +383 -0
- data/sig/b4um_generators.rbs +4 -0
- metadata +148 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/* -------------------------------------------------------
|
|
2
|
+
Theme switcher
|
|
3
|
+
------------------------------------------------------- */
|
|
4
|
+
|
|
5
|
+
.b4um-theme-switcher {
|
|
6
|
+
position: fixed;
|
|
7
|
+
right: 1.25rem;
|
|
8
|
+
bottom: 1.25rem;
|
|
9
|
+
z-index: 1000;
|
|
10
|
+
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
align-items: flex-end;
|
|
14
|
+
gap: 0.5rem;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* -------------------------------------------------------
|
|
18
|
+
Toggle
|
|
19
|
+
------------------------------------------------------- */
|
|
20
|
+
|
|
21
|
+
.b4um-theme-switcher__toggle {
|
|
22
|
+
display: inline-flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
justify-content: center;
|
|
25
|
+
|
|
26
|
+
width: 40px;
|
|
27
|
+
height: 40px;
|
|
28
|
+
padding: 0;
|
|
29
|
+
|
|
30
|
+
border: 1px solid var(--b4um-border);
|
|
31
|
+
border-radius: 50%;
|
|
32
|
+
|
|
33
|
+
background-color: var(--b4um-surface);
|
|
34
|
+
color: var(--b4um-text-secondary);
|
|
35
|
+
|
|
36
|
+
font: inherit;
|
|
37
|
+
font-size: 1rem;
|
|
38
|
+
line-height: 1;
|
|
39
|
+
|
|
40
|
+
box-shadow: 0 2px 8px var(--b4um-primary-shadow-soft);
|
|
41
|
+
|
|
42
|
+
cursor: pointer;
|
|
43
|
+
|
|
44
|
+
transition:
|
|
45
|
+
background-color 0.18s ease,
|
|
46
|
+
border-color 0.18s ease,
|
|
47
|
+
color 0.18s ease,
|
|
48
|
+
box-shadow 0.18s ease,
|
|
49
|
+
transform 0.18s ease;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.b4um-theme-switcher__toggle:hover {
|
|
53
|
+
border-color: var(--b4um-primary);
|
|
54
|
+
background-color: var(--b4um-surface-soft);
|
|
55
|
+
color: var(--b4um-primary);
|
|
56
|
+
|
|
57
|
+
transform: translateY(-1px);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.b4um-theme-switcher__toggle:focus-visible {
|
|
61
|
+
outline: none;
|
|
62
|
+
|
|
63
|
+
border-color: var(--b4um-primary);
|
|
64
|
+
|
|
65
|
+
box-shadow:
|
|
66
|
+
0 0 0 3px var(--b4um-primary-soft),
|
|
67
|
+
0 2px 8px var(--b4um-primary-shadow-soft);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* -------------------------------------------------------
|
|
71
|
+
Menu
|
|
72
|
+
------------------------------------------------------- */
|
|
73
|
+
|
|
74
|
+
.b4um-theme-switcher__menu {
|
|
75
|
+
min-width: 148px;
|
|
76
|
+
padding: 0.4rem;
|
|
77
|
+
|
|
78
|
+
border: 1px solid var(--b4um-border);
|
|
79
|
+
border-radius: 10px;
|
|
80
|
+
|
|
81
|
+
background-color: var(--b4um-surface);
|
|
82
|
+
color: var(--b4um-text);
|
|
83
|
+
|
|
84
|
+
box-shadow: 0 4px 16px var(--b4um-primary-shadow-soft);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.b4um-theme-switcher__menu[hidden] {
|
|
88
|
+
display: none;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.b4um-theme-switcher__title {
|
|
92
|
+
padding: 0.35rem 0.6rem 0.45rem;
|
|
93
|
+
|
|
94
|
+
color: var(--b4um-text-muted);
|
|
95
|
+
|
|
96
|
+
font-size: 0.68rem;
|
|
97
|
+
font-weight: 600;
|
|
98
|
+
letter-spacing: 0.055em;
|
|
99
|
+
text-transform: uppercase;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* -------------------------------------------------------
|
|
103
|
+
Options
|
|
104
|
+
------------------------------------------------------- */
|
|
105
|
+
|
|
106
|
+
.b4um-theme-switcher__option {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
gap: 0.55rem;
|
|
110
|
+
|
|
111
|
+
width: 100%;
|
|
112
|
+
padding: 0.48rem 0.6rem;
|
|
113
|
+
|
|
114
|
+
border: 0;
|
|
115
|
+
border-radius: 6px;
|
|
116
|
+
|
|
117
|
+
background-color: transparent;
|
|
118
|
+
color: var(--b4um-text-secondary);
|
|
119
|
+
|
|
120
|
+
font: inherit;
|
|
121
|
+
font-size: 0.84rem;
|
|
122
|
+
text-align: left;
|
|
123
|
+
|
|
124
|
+
cursor: pointer;
|
|
125
|
+
|
|
126
|
+
transition:
|
|
127
|
+
background-color 0.15s ease,
|
|
128
|
+
color 0.15s ease;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.b4um-theme-switcher__option:hover {
|
|
132
|
+
background-color: var(--b4um-surface-soft);
|
|
133
|
+
color: var(--b4um-text);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.b4um-theme-switcher__option.is-active {
|
|
137
|
+
background-color: var(--b4um-primary-soft);
|
|
138
|
+
color: var(--b4um-primary);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* -------------------------------------------------------
|
|
142
|
+
Selection indicator
|
|
143
|
+
------------------------------------------------------- */
|
|
144
|
+
|
|
145
|
+
.b4um-theme-switcher__indicator {
|
|
146
|
+
width: 7px;
|
|
147
|
+
height: 7px;
|
|
148
|
+
|
|
149
|
+
flex: 0 0 7px;
|
|
150
|
+
|
|
151
|
+
border: 1px solid var(--b4um-border-hover);
|
|
152
|
+
border-radius: 50%;
|
|
153
|
+
|
|
154
|
+
transition:
|
|
155
|
+
border-color 0.15s ease,
|
|
156
|
+
background-color 0.15s ease;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.b4um-theme-switcher__option.is-active .b4um-theme-switcher__indicator {
|
|
160
|
+
border-color: var(--b4um-primary);
|
|
161
|
+
background-color: var(--b4um-primary);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* -------------------------------------------------------
|
|
165
|
+
Mobile
|
|
166
|
+
------------------------------------------------------- */
|
|
167
|
+
|
|
168
|
+
@media (max-width: 48rem) {
|
|
169
|
+
.b4um-theme-switcher {
|
|
170
|
+
right: 0.9rem;
|
|
171
|
+
bottom: 0.9rem;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.b4um-theme-switcher__toggle {
|
|
175
|
+
width: 38px;
|
|
176
|
+
height: 38px;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/* -------------------------------------------------------
|
|
2
|
+
Theme
|
|
3
|
+
------------------------------------------------------- */
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
/* Backgrounds */
|
|
7
|
+
--b4um-page-background: #c2e7ff;
|
|
8
|
+
--b4um-surface: #ffffff;
|
|
9
|
+
--b4um-surface-soft: #f3f5ff;
|
|
10
|
+
|
|
11
|
+
/* Text */
|
|
12
|
+
--b4um-text: #222222;
|
|
13
|
+
--b4um-text-secondary: #555d6b;
|
|
14
|
+
--b4um-text-muted: #666666;
|
|
15
|
+
--b4um-text-checkbox: #333333;
|
|
16
|
+
--b4um-text-on-primary: #ffffff;
|
|
17
|
+
|
|
18
|
+
/* Primary color */
|
|
19
|
+
--b4um-primary: #2e47d2;
|
|
20
|
+
--b4um-primary-hover: #243bb8;
|
|
21
|
+
--b4um-primary-soft: rgba(46, 71, 210, 0.12);
|
|
22
|
+
--b4um-primary-focus: rgba(46, 71, 210, 0.22);
|
|
23
|
+
|
|
24
|
+
/* Links */
|
|
25
|
+
--b4um-link: #0000ff;
|
|
26
|
+
--b4um-link-visited: #2e47d2;
|
|
27
|
+
|
|
28
|
+
/* Borders */
|
|
29
|
+
--b4um-border: #b9bec8;
|
|
30
|
+
--b4um-border-hover: #8d95a3;
|
|
31
|
+
--b4um-border-checkbox: #aeb5c0;
|
|
32
|
+
--b4um-border-light: #e5e7eb;
|
|
33
|
+
--b4um-border-list: #dddddd;
|
|
34
|
+
--b4um-radius: 20px;
|
|
35
|
+
|
|
36
|
+
/* Success */
|
|
37
|
+
--b4um-success-background: #ccffcc;
|
|
38
|
+
--b4um-success-border: #66cc66;
|
|
39
|
+
|
|
40
|
+
/* Warning */
|
|
41
|
+
--b4um-warning: #854d0e;
|
|
42
|
+
--b4um-warning-background: #fef9c3;
|
|
43
|
+
--b4um-warning-border: #fde68a;
|
|
44
|
+
|
|
45
|
+
/* Danger */
|
|
46
|
+
--b4um-danger: #cc0000;
|
|
47
|
+
--b4um-danger-hover: #990000;
|
|
48
|
+
--b4um-danger-border: #cf0000;
|
|
49
|
+
--b4um-danger-soft-border: #cc6666;
|
|
50
|
+
--b4um-danger-background: #ffcccc;
|
|
51
|
+
|
|
52
|
+
/* Neutral */
|
|
53
|
+
--b4um-neutral-background: #f0f0f0;
|
|
54
|
+
|
|
55
|
+
/* Code */
|
|
56
|
+
--b4um-code-background: #1e293b;
|
|
57
|
+
--b4um-code-text: #f8fafc;
|
|
58
|
+
--b4um-code-border: #334155;
|
|
59
|
+
|
|
60
|
+
/* Shadows */
|
|
61
|
+
--b4um-container-shadow: rgba(1, 1, 1, 0.7);
|
|
62
|
+
--b4um-primary-shadow: rgba(46, 71, 210, 0.22);
|
|
63
|
+
--b4um-primary-shadow-soft: rgba(46, 71, 210, 0.12);
|
|
64
|
+
--b4um-danger-shadow: rgba(204, 0, 0, 0.18);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* -------------------------------------------------------
|
|
68
|
+
Dark theme
|
|
69
|
+
------------------------------------------------------- */
|
|
70
|
+
|
|
71
|
+
[data-b4um-theme='dark'] {
|
|
72
|
+
/* Backgrounds */
|
|
73
|
+
--b4um-page-background: #11151c;
|
|
74
|
+
--b4um-surface: #1c222b;
|
|
75
|
+
--b4um-surface-soft: #252c36;
|
|
76
|
+
|
|
77
|
+
/* Text */
|
|
78
|
+
--b4um-text: #f1f3f5;
|
|
79
|
+
--b4um-text-secondary: #c3c8d0;
|
|
80
|
+
--b4um-text-muted: #a8afb9;
|
|
81
|
+
--b4um-text-checkbox: #e5e7eb;
|
|
82
|
+
--b4um-text-on-primary: #ffffff;
|
|
83
|
+
|
|
84
|
+
/* Primary color */
|
|
85
|
+
--b4um-primary: #8ea2ff;
|
|
86
|
+
--b4um-primary-hover: #a9b8ff;
|
|
87
|
+
--b4um-primary-soft: rgba(142, 162, 255, 0.16);
|
|
88
|
+
--b4um-primary-focus: rgba(142, 162, 255, 0.32);
|
|
89
|
+
|
|
90
|
+
/* Links */
|
|
91
|
+
--b4um-link: #9aabff;
|
|
92
|
+
--b4um-link-visited: #b1a7ff;
|
|
93
|
+
|
|
94
|
+
/* Borders */
|
|
95
|
+
--b4um-border: #555c66;
|
|
96
|
+
--b4um-border-hover: #737c89;
|
|
97
|
+
--b4um-border-checkbox: #666e79;
|
|
98
|
+
--b4um-border-light: #383d45;
|
|
99
|
+
--b4um-border-list: #444a53;
|
|
100
|
+
|
|
101
|
+
/* Success */
|
|
102
|
+
--b4um-success-background: #173c2b;
|
|
103
|
+
--b4um-success-border: #3c8c65;
|
|
104
|
+
|
|
105
|
+
/* Warning */
|
|
106
|
+
--b4um-warning: #f6cf73;
|
|
107
|
+
--b4um-warning-background: #3b3217;
|
|
108
|
+
--b4um-warning-border: #756323;
|
|
109
|
+
|
|
110
|
+
/* Danger */
|
|
111
|
+
--b4um-danger: #ff8585;
|
|
112
|
+
--b4um-danger-hover: #ffa0a0;
|
|
113
|
+
--b4um-danger-border: #d65f5f;
|
|
114
|
+
--b4um-danger-soft-border: #8f4c4c;
|
|
115
|
+
--b4um-danger-background: #452323;
|
|
116
|
+
|
|
117
|
+
/* Neutral */
|
|
118
|
+
--b4um-neutral-background: #30343a;
|
|
119
|
+
|
|
120
|
+
/* Code */
|
|
121
|
+
--b4um-code-background: #0f1115;
|
|
122
|
+
--b4um-code-text: #f8fafc;
|
|
123
|
+
--b4um-code-border: #3b424d;
|
|
124
|
+
|
|
125
|
+
/* Shadows */
|
|
126
|
+
--b4um-container-shadow: rgba(0, 0, 0, 0.55);
|
|
127
|
+
--b4um-primary-shadow: rgba(142, 162, 255, 0.24);
|
|
128
|
+
--b4um-primary-shadow-soft: rgba(142, 162, 255, 0.14);
|
|
129
|
+
--b4um-danger-shadow: rgba(255, 133, 133, 0.18);
|
|
130
|
+
|
|
131
|
+
color-scheme: dark;
|
|
132
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
@import 'b4um/theme.css';
|
|
2
|
+
@import 'b4um/base.css';
|
|
3
|
+
@import 'b4um/layout.css';
|
|
4
|
+
@import 'b4um/navigation.css';
|
|
5
|
+
@import 'b4um/forms.css';
|
|
6
|
+
@import 'b4um/search.css';
|
|
7
|
+
@import 'b4um/resources.css';
|
|
8
|
+
@import 'b4um/lightbox.css';
|
|
9
|
+
@import 'b4um/hero.css';
|
|
10
|
+
@import 'b4um/cards.css';
|
|
11
|
+
@import 'b4um/tables.css';
|
|
12
|
+
@import 'b4um/pagination.css';
|
|
13
|
+
@import 'b4um/badges.css';
|
|
14
|
+
@import 'b4um/callouts.css';
|
|
15
|
+
@import 'b4um/empty-state.css';
|
|
16
|
+
@import 'b4um/flash.css';
|
|
17
|
+
@import 'b4um/comments.css';
|
|
18
|
+
@import 'b4um/footer.css';
|
|
19
|
+
@import 'b4um/cookie-consent.css';
|
|
20
|
+
@import 'b4um/theme-switcher.css';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "yaml"
|
|
4
|
+
|
|
5
|
+
module B4umHelper
|
|
6
|
+
def b4um_sitemap_columns
|
|
7
|
+
config_path = Rails.root.join("config/b4um.yml")
|
|
8
|
+
|
|
9
|
+
return [] unless File.exist?(config_path)
|
|
10
|
+
|
|
11
|
+
config = YAML.safe_load_file(config_path) || {}
|
|
12
|
+
|
|
13
|
+
Array(config["sitemap"])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def b4um_sitemap_path(route)
|
|
17
|
+
route_name = route.to_s
|
|
18
|
+
|
|
19
|
+
return unless route_name.match?(/\A[a-z0-9_]+_path\z/)
|
|
20
|
+
|
|
21
|
+
route_helpers = Rails.application.routes.url_helpers
|
|
22
|
+
|
|
23
|
+
return unless route_helpers.respond_to?(route_name)
|
|
24
|
+
|
|
25
|
+
route_helpers.public_send(route_name)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Controller } from '@hotwired/stimulus'
|
|
2
|
+
|
|
3
|
+
const STORAGE_KEY = 'b4um-cookie-consent'
|
|
4
|
+
const OPEN_EVENT = 'b4um:cookie-consent-open'
|
|
5
|
+
|
|
6
|
+
export default class extends Controller {
|
|
7
|
+
static targets = ['banner']
|
|
8
|
+
|
|
9
|
+
connect() {
|
|
10
|
+
this.open = this.open.bind(this)
|
|
11
|
+
|
|
12
|
+
window.addEventListener(OPEN_EVENT, this.open)
|
|
13
|
+
document.addEventListener('click', this.handleSettingsClick)
|
|
14
|
+
|
|
15
|
+
const consent = window.localStorage.getItem(STORAGE_KEY)
|
|
16
|
+
|
|
17
|
+
if (consent === null) {
|
|
18
|
+
this.show()
|
|
19
|
+
return
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
this.dispatchConsentEvent(consent)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
disconnect() {
|
|
26
|
+
window.removeEventListener(OPEN_EVENT, this.open)
|
|
27
|
+
document.removeEventListener('click', this.handleSettingsClick)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
accept() {
|
|
31
|
+
this.storeConsent('accepted')
|
|
32
|
+
this.hide()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
reject() {
|
|
36
|
+
this.storeConsent('rejected')
|
|
37
|
+
this.hide()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
handleSettingsClick(event) {
|
|
41
|
+
const trigger = event.target.closest('[data-b4um-cookie-consent-open]')
|
|
42
|
+
|
|
43
|
+
if (!trigger) return
|
|
44
|
+
|
|
45
|
+
event.preventDefault()
|
|
46
|
+
|
|
47
|
+
window.dispatchEvent(new CustomEvent(OPEN_EVENT))
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
open() {
|
|
51
|
+
this.show()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
show() {
|
|
55
|
+
this.bannerTarget.hidden = false
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
hide() {
|
|
59
|
+
this.bannerTarget.hidden = true
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
storeConsent(consent) {
|
|
63
|
+
window.localStorage.setItem(STORAGE_KEY, consent)
|
|
64
|
+
this.dispatchConsentEvent(consent)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
dispatchConsentEvent(consent) {
|
|
68
|
+
if (consent === 'accepted') {
|
|
69
|
+
window.dispatchEvent(new CustomEvent('b4um:cookie-consent-accepted'))
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (consent === 'rejected') {
|
|
73
|
+
window.dispatchEvent(new CustomEvent('b4um:cookie-consent-rejected'))
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|