comand-component-library 3.1.73 → 3.1.76
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/dist/comand-component-library.css +1 -1
- package/dist/comand-component-library.umd.min.js +1 -1
- package/package.json +3 -3
- package/src/App.vue +112 -79
- package/src/assets/data/cookie-disclaimer.json +7 -6
- package/src/assets/data/input-group-radiobuttons.json +23 -0
- package/src/assets/data/input-group-replaced-radiobuttons.json +23 -0
- package/src/assets/data/input-group-toggle-switch-radiobuttons.json +23 -0
- package/src/assets/styles/global-styles.scss +20 -59
- package/src/components/CmdAddressData.vue +7 -7
- package/src/components/CmdBankAccountData.vue +7 -7
- package/src/components/CmdBox.vue +25 -31
- package/src/components/CmdBoxSiteSearch.vue +9 -9
- package/src/components/CmdCookieDisclaimer.vue +93 -25
- package/src/components/CmdFakeSelect.vue +36 -52
- package/src/components/CmdFormElement.vue +36 -57
- package/src/components/{CmdCustomHeadline.vue → CmdHeadline.vue} +1 -1
- package/src/components/CmdInputGroup.vue +156 -24
- package/src/components/CmdListOfLinks.vue +8 -8
- package/src/components/CmdListOfRequirements.vue +150 -0
- package/src/components/CmdLoginForm.vue +17 -17
- package/src/components/CmdMainNavigation.vue +2 -2
- package/src/components/CmdOpeningHours.vue +5 -5
- package/src/components/CmdSiteFooter.vue +76 -0
- package/src/components/CmdSiteHeader.vue +2 -1
- package/src/components/CmdSlideshow.vue +6 -6
- package/src/components/CmdSystemMessage.vue +28 -11
- package/src/components/CmdTabs.vue +8 -8
- package/src/components/CmdToggleDarkMode.vue +42 -5
- package/src/components/CmdTooltip.vue +13 -13
- package/src/components/CmdTooltipForInputElements.vue +122 -0
- package/src/components/CmdUploadForm.vue +32 -32
- package/src/components/CmdWidthLimitationWrapper.vue +0 -17
- package/src/documentation/generated/CmdAddressDataPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdBankAccountDataPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdBoxPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdBoxSiteSearchPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdCookieDisclaimerPropertyDescriptions.json +7 -2
- package/src/documentation/generated/CmdFormElementPropertyDescriptions.json +7 -2
- package/src/documentation/generated/CmdHeadlinePropertyDescriptions.json +22 -0
- package/src/documentation/generated/CmdInputGroupPropertyDescriptions.json +32 -1
- package/src/documentation/generated/CmdListOfLinksPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdListOfRequirementsPropertyDescriptions.json +32 -0
- package/src/documentation/generated/CmdLoginFormPropertyDescriptions.json +4 -4
- package/src/documentation/generated/CmdOpeningHoursPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdSiteFooterPropertyDescriptions.json +12 -0
- package/src/documentation/generated/CmdSystemMessagePropertyDescriptions.json +5 -0
- package/src/documentation/generated/CmdTabsPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdTooltipForInputElementsPropertyDescriptions.json +42 -0
- package/src/documentation/generated/CmdTooltipPropertyDescriptions.json +1 -1
- package/src/documentation/generated/CmdUploadFormPropertyDescriptions.json +14 -14
- package/src/index.js +2 -1
- package/src/mixins/CmdCookieDisclaimer/DefaultMessageProperties.js +10 -0
- package/src/mixins/FieldValidation.js +16 -6
- package/src/mixins/Tooltip.js +1 -1
|
@@ -33,6 +33,11 @@
|
|
|
33
33
|
@import 'variables'; /* scss-variables (only used for media-query-breakpoints) */
|
|
34
34
|
/* ---------------------------------------------- END IMPORTS -------------------------------------------------- */
|
|
35
35
|
|
|
36
|
+
body, .cmd-site-header, .cmd-site-footer, .cmd-copyright-information {
|
|
37
|
+
transition: background linear .5s;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
36
41
|
/* ---------------------------------------------- BEGIN COMPONENTS AND GLOBAL STYLES -------------------------------------------------- */
|
|
37
42
|
/* begin .avoid-scrolling --------------------------------------------------------------------------------------------------------------------------------------------------- */
|
|
38
43
|
body.avoid-scrolling {
|
|
@@ -173,11 +178,18 @@ body.avoid-scrolling {
|
|
|
173
178
|
/* end product-listing --------------------------------------------------------------------------------------------------------------------------------------------------- */
|
|
174
179
|
|
|
175
180
|
/* begin tooltip for cmd-form-element and cmd-fake-select ---------------------------------------------------------------------------------------------------------------- */
|
|
176
|
-
.cmd-form-element, .cmd-fake-select {
|
|
181
|
+
.cmd-form-element, .cmd-fake-select, .cmd-input-group {
|
|
182
|
+
.cmd-tooltip {
|
|
183
|
+
position: absolute;
|
|
184
|
+
right: 0;
|
|
185
|
+
transform: translateY(calc(-100% - calc(var(--default-margin) / 2)));
|
|
186
|
+
left: auto !important; /* overwrite calculated inline-styles from javascript for cmd-tooltip-component */
|
|
187
|
+
top: 0 !important; /* overwrite calculated inline-styles from javascript for cmd-tooltip-component */
|
|
188
|
+
}
|
|
177
189
|
|
|
178
190
|
&.has-state, & + .cmd-tooltip {
|
|
179
191
|
.label-text {
|
|
180
|
-
span, sup {
|
|
192
|
+
> span, > a, sup {
|
|
181
193
|
color: var(--status-color);
|
|
182
194
|
}
|
|
183
195
|
}
|
|
@@ -190,7 +202,6 @@ body.avoid-scrolling {
|
|
|
190
202
|
--status-color: var(--warning-color);
|
|
191
203
|
}
|
|
192
204
|
|
|
193
|
-
|
|
194
205
|
&.success {
|
|
195
206
|
--status-color: var(--success-color);
|
|
196
207
|
}
|
|
@@ -202,44 +213,6 @@ body.avoid-scrolling {
|
|
|
202
213
|
|
|
203
214
|
& + .cmd-tooltip {
|
|
204
215
|
border-color: var(--status-color);
|
|
205
|
-
|
|
206
|
-
h6:last-of-type {
|
|
207
|
-
margin-top: 0;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
.list-of-requirements {
|
|
211
|
-
.error {
|
|
212
|
-
color: var(--error-color);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
.warning {
|
|
216
|
-
color: var(--warning-color);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
.success {
|
|
220
|
-
color: var(--success-color);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
.info {
|
|
224
|
-
color: var(--info-color);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
span[class*="icon"] {
|
|
228
|
-
font-size: 1.2rem;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
& ~ a {
|
|
232
|
-
display: flex;
|
|
233
|
-
align-items: center;
|
|
234
|
-
justify-content: center;
|
|
235
|
-
text-align: center;
|
|
236
|
-
text-decoration: none;
|
|
237
|
-
|
|
238
|
-
span[class*="icon"] {
|
|
239
|
-
font-size: 1.2rem;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
216
|
}
|
|
244
217
|
}
|
|
245
218
|
/* end tooltip for cmd-form-element and cmd-fake-select ------------------------------------------------------------------------------------------------------------------ */
|
|
@@ -252,14 +225,6 @@ body.avoid-scrolling {
|
|
|
252
225
|
--grid-small-span: 3; /* default column span smaller part */
|
|
253
226
|
--grid-large-span: 3; /* default column span larger part */
|
|
254
227
|
}
|
|
255
|
-
|
|
256
|
-
#site-footer {
|
|
257
|
-
footer {
|
|
258
|
-
li {
|
|
259
|
-
margin-bottom: calc(var(--default-margin) * 2);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
228
|
}
|
|
264
229
|
/* end styles for medium screens --------------------------------------------------------------------------------------------------------------------------------------------------- */
|
|
265
230
|
|
|
@@ -278,16 +243,6 @@ body.avoid-scrolling {
|
|
|
278
243
|
padding: calc(var(--default-padding) * 2) 0;
|
|
279
244
|
}
|
|
280
245
|
|
|
281
|
-
#site-footer {
|
|
282
|
-
a {
|
|
283
|
-
text-decoration: underline;
|
|
284
|
-
|
|
285
|
-
&:active {
|
|
286
|
-
text-decoration: none;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
246
|
a[href^="tel"] {
|
|
292
247
|
text-decoration: underline;
|
|
293
248
|
}
|
|
@@ -300,6 +255,7 @@ html {
|
|
|
300
255
|
&.light-mode {
|
|
301
256
|
/* assign default colors for custom light-mode set by class */
|
|
302
257
|
--color-scheme-text-color: var(--light-mode-text-color);
|
|
258
|
+
--color-scheme-text-color-buttons: var(--light-mode-text-color-buttons);
|
|
303
259
|
--color-scheme-background-color: var(--light-mode-background-color);
|
|
304
260
|
--color-scheme-text-color-inverted: var(--dark-mode-text-color);
|
|
305
261
|
--color-scheme-background-inverted: var(--dark-mode-background-color);
|
|
@@ -309,10 +265,15 @@ html {
|
|
|
309
265
|
&.dark-mode {
|
|
310
266
|
/* assign default colors for custom dark-mode set by class */
|
|
311
267
|
--color-scheme-text-color: var(--dark-mode-text-color);
|
|
268
|
+
--color-scheme-text-color-buttons: var(--dark-mode-background-color);
|
|
312
269
|
--color-scheme-background-color: var(--dark-mode-background-color);
|
|
313
270
|
--color-scheme-text-color-inverted: var(--light-mode-text-color);
|
|
314
271
|
--color-scheme-background-inverted: var(--light-mode-background-color);
|
|
315
272
|
--default-background-color-lightness: 20%;
|
|
273
|
+
|
|
274
|
+
:where(label, .label) .label-text [class*="icon"] {
|
|
275
|
+
background: var(--dark-gray);
|
|
276
|
+
}
|
|
316
277
|
}
|
|
317
278
|
}
|
|
318
279
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="cmd-address-data vcard">
|
|
3
|
-
<!-- begin
|
|
4
|
-
<
|
|
5
|
-
<!-- end
|
|
3
|
+
<!-- begin CmdHeadline -->
|
|
4
|
+
<CmdHeadline v-if="CmdHeadline" v-bind="CmdHeadline" />
|
|
5
|
+
<!-- end CmdHeadline -->
|
|
6
6
|
|
|
7
7
|
<!-- begin address-data in vCard microformat -->
|
|
8
8
|
<address class="adr">
|
|
@@ -120,13 +120,13 @@ import I18n from "../mixins/I18n"
|
|
|
120
120
|
import DefaultMessageProperties from "../mixins/CmdAddressData/DefaultMessageProperties"
|
|
121
121
|
|
|
122
122
|
// import components
|
|
123
|
-
import
|
|
123
|
+
import CmdHeadline from "./CmdHeadline"
|
|
124
124
|
|
|
125
125
|
export default {
|
|
126
126
|
name: "CmdAddressData",
|
|
127
127
|
mixins: [I18n, DefaultMessageProperties],
|
|
128
128
|
components: {
|
|
129
|
-
|
|
129
|
+
CmdHeadline
|
|
130
130
|
},
|
|
131
131
|
props: {
|
|
132
132
|
/**
|
|
@@ -144,9 +144,9 @@ export default {
|
|
|
144
144
|
default: true
|
|
145
145
|
},
|
|
146
146
|
/**
|
|
147
|
-
* properties for
|
|
147
|
+
* properties for CmdHeadline-component
|
|
148
148
|
*/
|
|
149
|
-
|
|
149
|
+
CmdHeadline: {
|
|
150
150
|
type: Object,
|
|
151
151
|
required: false
|
|
152
152
|
},
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="cmd-bank-account-data">
|
|
3
|
-
<!-- begin
|
|
4
|
-
<
|
|
5
|
-
<!-- end
|
|
3
|
+
<!-- begin CmdHeadline -->
|
|
4
|
+
<CmdHeadline v-if="CmdHeadline" v-bind="CmdHeadline"/>
|
|
5
|
+
<!-- end CmdHeadline -->
|
|
6
6
|
|
|
7
7
|
<!-- begin account data -->
|
|
8
8
|
<dl>
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
|
|
28
28
|
<script>
|
|
29
29
|
// import components
|
|
30
|
-
import
|
|
30
|
+
import CmdHeadline from "./CmdHeadline"
|
|
31
31
|
|
|
32
32
|
export default {
|
|
33
33
|
name: "CmdBankAccountData",
|
|
34
|
-
components: {
|
|
34
|
+
components: {CmdHeadline},
|
|
35
35
|
props: {
|
|
36
36
|
/**
|
|
37
37
|
* bank account data
|
|
@@ -71,9 +71,9 @@ export default {
|
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
73
|
/**
|
|
74
|
-
* properties for
|
|
74
|
+
* properties for CmdHeadline-component
|
|
75
75
|
*/
|
|
76
|
-
|
|
76
|
+
CmdHeadline: {
|
|
77
77
|
type: Object,
|
|
78
78
|
required: false
|
|
79
79
|
}
|
|
@@ -3,17 +3,12 @@
|
|
|
3
3
|
<div v-if="boxType === 'content'" :class="['cmd-box box content', {open : open, collapsible: collapsible, 'stretch-vertically': stretchVertically}]">
|
|
4
4
|
<template v-if="useSlots?.includes('header')">
|
|
5
5
|
<!-- begin collapsible header with slot -->
|
|
6
|
-
<
|
|
6
|
+
<a v-if="collapsible" href="#" class="box-header" @click.prevent="toggleContentVisibility" :title="open ? iconOpen.tooltip : iconClosed.tooltip">
|
|
7
7
|
<!-- begin slot 'header' -->
|
|
8
8
|
<slot name="header"></slot>
|
|
9
9
|
<!-- end slot 'header' -->
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
:title="open ? iconOpen.tooltip : iconClosed.tooltip"
|
|
13
|
-
@click.prevent="toggleContentVisibility">
|
|
14
|
-
<span :class="[open ? iconOpen.iconClass : iconClosed.iconClass]"></span>
|
|
15
|
-
</a>
|
|
16
|
-
</div>
|
|
10
|
+
<span class="toggle-icon" :class="[open ? iconOpen.iconClass : iconClosed.iconClass]"></span>
|
|
11
|
+
</a>
|
|
17
12
|
<!-- end collapsible header with slot -->
|
|
18
13
|
|
|
19
14
|
<!-- begin default header with slot -->
|
|
@@ -27,24 +22,23 @@
|
|
|
27
22
|
<template v-else>
|
|
28
23
|
<!-- begin header for collapsible -->
|
|
29
24
|
<a v-if="collapsible" class="box-header" href="#" :title="open ? iconOpen.tooltip : iconClosed.tooltip" @click.prevent="toggleContentVisibility">
|
|
30
|
-
<!-- begin
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
<!-- end CmdCustomHeadline -->
|
|
25
|
+
<!-- begin CmdHeadline -->
|
|
26
|
+
<CmdHeadline v-if="CmdHeadline?.headlineText" v-bind="CmdHeadline"/>
|
|
27
|
+
<!-- end CmdHeadline -->
|
|
34
28
|
<span class="toggle-icon" :class="[open ? iconOpen.iconClass : iconClosed.iconClass]"></span>
|
|
35
29
|
</a>
|
|
36
30
|
<!-- end header for collapsible -->
|
|
37
31
|
|
|
38
|
-
<!-- begin
|
|
39
|
-
<
|
|
32
|
+
<!-- begin CmdHeadline -->
|
|
33
|
+
<CmdHeadline v-else-if="!collapsible && CmdHeadline?.headlineText"
|
|
40
34
|
class="box-header"
|
|
41
|
-
v-bind="
|
|
35
|
+
v-bind="CmdHeadline"
|
|
42
36
|
/>
|
|
43
|
-
<!-- end
|
|
37
|
+
<!-- end CmdHeadline -->
|
|
44
38
|
</template>
|
|
45
39
|
|
|
46
40
|
<!-- begin box-body -->
|
|
47
|
-
<div v-if="open" class="box-body" aria-expanded="true">
|
|
41
|
+
<div v-if="open" class="box-body" aria-expanded="true" role="article">
|
|
48
42
|
<!-- begin slot 'body' -->
|
|
49
43
|
<slot name="body">
|
|
50
44
|
<transition :name="toggleTransition">
|
|
@@ -73,11 +67,11 @@
|
|
|
73
67
|
<div v-if="product.discount" class="ribbon-discount">
|
|
74
68
|
<span>{{ product.discount }}</span>
|
|
75
69
|
</div>
|
|
76
|
-
<!-- begin
|
|
77
|
-
<
|
|
78
|
-
v-bind="
|
|
79
|
-
:headlineText="
|
|
80
|
-
<!-- end
|
|
70
|
+
<!-- begin CmdHeadline -->
|
|
71
|
+
<CmdHeadline v-if="CmdHeadline?.headlineText || product.name"
|
|
72
|
+
v-bind="CmdHeadline || {}"
|
|
73
|
+
:headlineText="CmdHeadline?.headlineText ? CmdHeadline?.headlineText : product.name"/>
|
|
74
|
+
<!-- end CmdHeadline -->
|
|
81
75
|
</div>
|
|
82
76
|
<div class="box-body">
|
|
83
77
|
<p v-if="product.articleNumber">{{ getMessage("cmdbox.productbox.article_no") }} {{ product.articleNumber }}</p>
|
|
@@ -94,11 +88,11 @@
|
|
|
94
88
|
<div class="box-header">
|
|
95
89
|
<img v-if="user.image" :src="user.image.src" :alt="user.image.alt"/>
|
|
96
90
|
<div v-else :class="defaultProfileIconClass" :title="user.name"></div>
|
|
97
|
-
<!-- begin
|
|
98
|
-
<
|
|
99
|
-
v-bind="
|
|
100
|
-
:headlineText="
|
|
101
|
-
<!-- end
|
|
91
|
+
<!-- begin CmdHeadline -->
|
|
92
|
+
<CmdHeadline v-if="CmdHeadline?.headlineText || user.name"
|
|
93
|
+
v-bind="CmdHeadline || {}"
|
|
94
|
+
:headlineText="CmdHeadline?.headlineText ? CmdHeadline?.headlineText : user.name"/>
|
|
95
|
+
<!-- end CmdHeadline -->
|
|
102
96
|
</div>
|
|
103
97
|
<div class="box-body">
|
|
104
98
|
<p v-if="user.profession">{{ user.profession }}</p>
|
|
@@ -119,13 +113,13 @@ import DefaultMessageProperties from "../mixins/CmdBox/DefaultMessageProperties"
|
|
|
119
113
|
import GlobalCurrency from "../mixins/GlobalCurrency"
|
|
120
114
|
|
|
121
115
|
// import components
|
|
122
|
-
import
|
|
116
|
+
import CmdHeadline from "./CmdHeadline"
|
|
123
117
|
import CmdListOfLinks from "./CmdListOfLinks"
|
|
124
118
|
|
|
125
119
|
export default {
|
|
126
120
|
name: "CmdBox",
|
|
127
121
|
components: {
|
|
128
|
-
|
|
122
|
+
CmdHeadline,
|
|
129
123
|
CmdListOfLinks,
|
|
130
124
|
},
|
|
131
125
|
mixins: [
|
|
@@ -250,9 +244,9 @@ export default {
|
|
|
250
244
|
default: true
|
|
251
245
|
},
|
|
252
246
|
/**
|
|
253
|
-
* properties for
|
|
247
|
+
* properties for CmdHeadline-component
|
|
254
248
|
*/
|
|
255
|
-
|
|
249
|
+
CmdHeadline: {
|
|
256
250
|
type: Object,
|
|
257
251
|
required: false
|
|
258
252
|
}
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
<legend v-if="showLegend">{{ textLegend }}</legend>
|
|
5
5
|
<!-- begin legend -->
|
|
6
6
|
|
|
7
|
-
<!-- begin
|
|
8
|
-
<
|
|
9
|
-
v-if="
|
|
10
|
-
v-bind="
|
|
7
|
+
<!-- begin CmdHeadline -->
|
|
8
|
+
<CmdHeadline
|
|
9
|
+
v-if="CmdHeadline"
|
|
10
|
+
v-bind="CmdHeadline"
|
|
11
11
|
/>
|
|
12
|
-
<!-- end
|
|
12
|
+
<!-- end CmdHeadline -->
|
|
13
13
|
|
|
14
14
|
<!-- begin form-elements -->
|
|
15
15
|
<div class="flex-container">
|
|
@@ -95,7 +95,7 @@ import I18n from "../mixins/I18n"
|
|
|
95
95
|
import DefaultMessageProperties from "../mixins/CmdSiteSearch/DefaultMessageProperties"
|
|
96
96
|
|
|
97
97
|
// import files for components
|
|
98
|
-
import
|
|
98
|
+
import CmdHeadline from "./CmdHeadline"
|
|
99
99
|
import CmdFakeSelect from "./CmdFakeSelect"
|
|
100
100
|
import CmdFormElement from "./CmdFormElement"
|
|
101
101
|
import CmdFormFilters from "./CmdFormFilters"
|
|
@@ -111,7 +111,7 @@ export default {
|
|
|
111
111
|
name: "CmdBoxSiteSearch",
|
|
112
112
|
mixins: [I18n, DefaultMessageProperties],
|
|
113
113
|
components: {
|
|
114
|
-
|
|
114
|
+
CmdHeadline,
|
|
115
115
|
CmdFakeSelect,
|
|
116
116
|
CmdFormElement,
|
|
117
117
|
CmdFormFilters
|
|
@@ -183,9 +183,9 @@ export default {
|
|
|
183
183
|
required: false
|
|
184
184
|
},
|
|
185
185
|
/**
|
|
186
|
-
* properties for
|
|
186
|
+
* properties for CmdHeadline-component
|
|
187
187
|
*/
|
|
188
|
-
|
|
188
|
+
CmdHeadline: {
|
|
189
189
|
type: Object,
|
|
190
190
|
required: false
|
|
191
191
|
},
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<transition name="fade">
|
|
3
3
|
<div class="cmd-cookie-disclaimer flex-container vertical">
|
|
4
|
-
<!-- begin
|
|
5
|
-
<
|
|
6
|
-
v-if="
|
|
7
|
-
v-bind="
|
|
8
|
-
:headlineText="
|
|
9
|
-
:headlineLevel="
|
|
4
|
+
<!-- begin CmdHeadline -->
|
|
5
|
+
<CmdHeadline
|
|
6
|
+
v-if="CmdHeadlineCookieDisclaimer?.show && CmdHeadlineCookieDisclaimer?.headlineText && CmdHeadlineCookieDisclaimer?.headlineLevel"
|
|
7
|
+
v-bind="CmdHeadlineCookieDisclaimer"
|
|
8
|
+
:headlineText="CmdHeadlineCookieDisclaimer.headlineText"
|
|
9
|
+
:headlineLevel="CmdHeadlineCookieDisclaimer.headlineLevel"
|
|
10
10
|
/>
|
|
11
|
-
<!-- end
|
|
11
|
+
<!-- end CmdHeadline -->
|
|
12
12
|
|
|
13
13
|
<!-- begin slot for cookie-options -->
|
|
14
14
|
<slot name="cookie-options">
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
<!-- begin required cookies -->
|
|
16
|
+
<div v-if="cookieOptions?.required" class="flex-container vertical">
|
|
17
|
+
<CmdHeadline v-if="cmdBoxRequiredCookies?.showHeadline" :headline-text="cmdBoxRequiredCookies?.headlineText" :headline-level="cmdBoxRequiredCookies?.headlineLevel "/>
|
|
17
18
|
<!-- begin CmdBox -->
|
|
18
|
-
<CmdBox v-for="(cookie, index) in cookieOptions.required.cookies"
|
|
19
|
+
<CmdBox v-for="(cookie, index) in cookieOptions.required.cookies || []"
|
|
19
20
|
:useSlots="['header', 'body']"
|
|
20
21
|
v-bind="cmdBoxRequiredCookies"
|
|
21
22
|
:key="index"
|
|
@@ -25,9 +26,13 @@
|
|
|
25
26
|
<CmdFormElement
|
|
26
27
|
element="input"
|
|
27
28
|
type="checkbox"
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
v-model="acceptedCookies"
|
|
30
|
+
:inputValue="cookie.value"
|
|
31
|
+
:labelText="cookie.labelText"
|
|
32
|
+
:disabled="cookie.disabled"
|
|
33
|
+
:id="cookie.id"
|
|
30
34
|
:toggleSwitch="true"
|
|
35
|
+
:title="getMessage('cmdcookiedisclaimer.title.cookie_cannot_be_disabled')"
|
|
31
36
|
/>
|
|
32
37
|
<!-- end CmdFormElement -->
|
|
33
38
|
</template>
|
|
@@ -46,11 +51,15 @@
|
|
|
46
51
|
</CmdBox>
|
|
47
52
|
<!-- end CmdBox -->
|
|
48
53
|
</div>
|
|
54
|
+
<!-- end required cookies -->
|
|
55
|
+
|
|
49
56
|
<hr/>
|
|
50
|
-
|
|
51
|
-
|
|
57
|
+
|
|
58
|
+
<!-- begin optional cookies -->
|
|
59
|
+
<div v-if="cookieOptions?.optional" class="flex-container vertical">
|
|
60
|
+
<CmdHeadline v-if="cmdBoxOptionalCookies?.showHeadline" :headline-text="cmdBoxOptionalCookies?.headlineText" :headline-level="cmdBoxOptionalCookies?.headlineLevel "/>
|
|
52
61
|
<!-- begin CmdBox -->
|
|
53
|
-
<CmdBox v-for="(cookie, index) in cookieOptions.optional.cookies"
|
|
62
|
+
<CmdBox v-for="(cookie, index) in cookieOptions.optional.cookies || []"
|
|
54
63
|
:useSlots="['header', 'body']"
|
|
55
64
|
v-bind="cmdBoxOptionalCookies"
|
|
56
65
|
:key="index"
|
|
@@ -60,9 +69,13 @@
|
|
|
60
69
|
<CmdFormElement
|
|
61
70
|
element="input"
|
|
62
71
|
type="checkbox"
|
|
63
|
-
|
|
64
|
-
|
|
72
|
+
v-model="acceptedCookies"
|
|
73
|
+
:inputValue="cookie.value"
|
|
74
|
+
:labelText="cookie.labelText"
|
|
75
|
+
:disabled="cookie.disabled"
|
|
76
|
+
:id="cookie.id"
|
|
65
77
|
:toggleSwitch="true"
|
|
78
|
+
:title="getMessage('cmdcookiedisclaimer.title.toggle_to_accept_cookie')"
|
|
66
79
|
/>
|
|
67
80
|
<!-- end CmdFormElement -->
|
|
68
81
|
</template>
|
|
@@ -81,6 +94,7 @@
|
|
|
81
94
|
</CmdBox>
|
|
82
95
|
<!-- end CmdBox -->
|
|
83
96
|
</div>
|
|
97
|
+
<!-- end optional cookies -->
|
|
84
98
|
</slot>
|
|
85
99
|
<!-- end slot for cookie-options -->
|
|
86
100
|
|
|
@@ -90,10 +104,10 @@
|
|
|
90
104
|
|
|
91
105
|
<!-- begin button-wrapper for 'accept'-buttons -->
|
|
92
106
|
<div class="button-wrapper align-center">
|
|
93
|
-
<button v-if="buttonLabelAcceptCurrentSettings" type="button" @click="
|
|
107
|
+
<button v-if="buttonLabelAcceptCurrentSettings" type="button" @click="acceptCurrentCookies">
|
|
94
108
|
<span>{{ buttonLabelAcceptCurrentSettings }}</span>
|
|
95
109
|
</button>
|
|
96
|
-
<button v-if="buttonLabelAcceptAllCookies" type="button" class="primary" @click="
|
|
110
|
+
<button v-if="buttonLabelAcceptAllCookies" type="button" class="primary" @click="acceptAllCookies">
|
|
97
111
|
<span>{{ buttonLabelAcceptAllCookies }}</span>
|
|
98
112
|
</button>
|
|
99
113
|
</div>
|
|
@@ -103,16 +117,21 @@
|
|
|
103
117
|
</template>
|
|
104
118
|
|
|
105
119
|
<script>
|
|
120
|
+
// import mixins
|
|
121
|
+
import I18n from "../mixins/I18n"
|
|
122
|
+
import DefaultMessageProperties from "../mixins/CmdCookieDisclaimer/DefaultMessageProperties"
|
|
123
|
+
|
|
106
124
|
// import components
|
|
107
125
|
import CmdBox from "./CmdBox"
|
|
108
|
-
import
|
|
126
|
+
import CmdHeadline from "./CmdHeadline"
|
|
109
127
|
import CmdFormElement from "./CmdFormElement"
|
|
110
128
|
|
|
111
129
|
export default {
|
|
112
130
|
name: "CmdCookieDisclaimer",
|
|
131
|
+
mixins: [I18n, DefaultMessageProperties],
|
|
113
132
|
components: {
|
|
114
133
|
CmdBox,
|
|
115
|
-
|
|
134
|
+
CmdHeadline,
|
|
116
135
|
CmdFormElement
|
|
117
136
|
},
|
|
118
137
|
data() {
|
|
@@ -123,9 +142,16 @@ export default {
|
|
|
123
142
|
},
|
|
124
143
|
props: {
|
|
125
144
|
/**
|
|
126
|
-
*
|
|
145
|
+
* set default v-model (must be named modelValue in Vue3)
|
|
127
146
|
*/
|
|
128
|
-
|
|
147
|
+
modelValue: {
|
|
148
|
+
type: Array,
|
|
149
|
+
required: false
|
|
150
|
+
},
|
|
151
|
+
/**
|
|
152
|
+
* properties for CmdHeadline-component at top of cookie disclaimer
|
|
153
|
+
*/
|
|
154
|
+
CmdHeadlineCookieDisclaimer: {
|
|
129
155
|
type: Object,
|
|
130
156
|
default() {
|
|
131
157
|
return {
|
|
@@ -185,9 +211,43 @@ export default {
|
|
|
185
211
|
default: "Proceed with current settings!"
|
|
186
212
|
}
|
|
187
213
|
},
|
|
214
|
+
computed: {
|
|
215
|
+
acceptedCookies: {
|
|
216
|
+
get() {
|
|
217
|
+
const cookies = this.modelValue ? [...this.modelValue] : []
|
|
218
|
+
const requiredCookies = this.cookieOptions?.required?.cookies || []
|
|
219
|
+
for (let i = 0; i < requiredCookies.length; i++) {
|
|
220
|
+
if(!cookies.includes(requiredCookies[i].value)) {
|
|
221
|
+
cookies.push(requiredCookies[i].value)
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return cookies
|
|
225
|
+
},
|
|
226
|
+
set(value) {
|
|
227
|
+
this.$emit("update:modelValue", value)
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
},
|
|
188
231
|
methods: {
|
|
189
|
-
|
|
190
|
-
this.$emit("close-cookie-disclaimer",
|
|
232
|
+
acceptCurrentCookies() {
|
|
233
|
+
this.$emit("close-cookie-disclaimer", this.acceptedCookies)
|
|
234
|
+
},
|
|
235
|
+
acceptAllCookies() {
|
|
236
|
+
const allCookies = []
|
|
237
|
+
|
|
238
|
+
// push all required cookies to array
|
|
239
|
+
const requiredCookies = this.cookieOptions?.required?.cookies
|
|
240
|
+
for(let i = 0; i < requiredCookies.length ; i++) {
|
|
241
|
+
allCookies.push(requiredCookies[i].value)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// push all optional cookies to array
|
|
245
|
+
const optionalCookies = this.cookieOptions?.optional?.cookies
|
|
246
|
+
for(let i = 0; i < optionalCookies.length ; i++) {
|
|
247
|
+
allCookies.push(optionalCookies[i].value)
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
this.$emit("close-cookie-disclaimer", allCookies)
|
|
191
251
|
},
|
|
192
252
|
openDataPrivacy(event) {
|
|
193
253
|
/* first 'target' = clicked-element, second 'target' = target-attribute */
|
|
@@ -215,6 +275,14 @@ export default {
|
|
|
215
275
|
top: auto;
|
|
216
276
|
|
|
217
277
|
.cmd-box {
|
|
278
|
+
.box-header {
|
|
279
|
+
label.disabled {
|
|
280
|
+
.label-text span {
|
|
281
|
+
color: var(--pure-white) !important;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
218
286
|
.box-body {
|
|
219
287
|
padding: var(--default-padding);
|
|
220
288
|
}
|