comand-component-library 3.1.74 → 3.1.75
Sign up to get free protection for your applications and to get access to all the features.
- 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 +65 -71
- 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 +10 -19
- package/src/components/CmdAddressData.vue +7 -7
- package/src/components/CmdBankAccountData.vue +7 -7
- package/src/components/CmdBox.vue +24 -30
- package/src/components/CmdBoxSiteSearch.vue +9 -9
- package/src/components/CmdCookieDisclaimer.vue +17 -17
- package/src/components/CmdFakeSelect.vue +32 -29
- package/src/components/CmdFormElement.vue +34 -35
- package/src/components/{CmdCustomHeadline.vue → CmdHeadline.vue} +1 -1
- package/src/components/CmdInputGroup.vue +51 -53
- package/src/components/CmdListOfLinks.vue +8 -8
- package/src/components/CmdListOfRequirements.vue +37 -15
- package/src/components/CmdLoginForm.vue +17 -17
- package/src/components/CmdOpeningHours.vue +5 -5
- package/src/components/CmdSiteFooter.vue +76 -0
- package/src/components/CmdSiteHeader.vue +2 -1
- package/src/components/CmdSystemMessage.vue +28 -11
- package/src/components/CmdTabs.vue +8 -8
- package/src/components/CmdToggleDarkMode.vue +42 -2
- 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 +2 -2
- package/src/documentation/generated/CmdFormElementPropertyDescriptions.json +6 -1
- package/src/documentation/generated/CmdHeadlinePropertyDescriptions.json +22 -0
- package/src/documentation/generated/CmdInputGroupPropertyDescriptions.json +0 -5
- package/src/documentation/generated/CmdListOfLinksPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdListOfRequirementsPropertyDescriptions.json +14 -4
- 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/FieldValidation.js +15 -5
- package/src/mixins/Tooltip.js +1 -1
@@ -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,20 +22,19 @@
|
|
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 -->
|
@@ -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,22 +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
15
|
<!-- begin required cookies -->
|
16
|
-
<div v-if="cookieOptions
|
17
|
-
<
|
16
|
+
<div v-if="cookieOptions?.required" class="flex-container vertical">
|
17
|
+
<CmdHeadline v-if="cmdBoxRequiredCookies?.showHeadline" :headline-text="cmdBoxRequiredCookies?.headlineText" :headline-level="cmdBoxRequiredCookies?.headlineLevel "/>
|
18
18
|
<!-- begin CmdBox -->
|
19
|
-
<CmdBox v-for="(cookie, index) in cookieOptions.required.cookies"
|
19
|
+
<CmdBox v-for="(cookie, index) in cookieOptions.required.cookies || []"
|
20
20
|
:useSlots="['header', 'body']"
|
21
21
|
v-bind="cmdBoxRequiredCookies"
|
22
22
|
:key="index"
|
@@ -56,10 +56,10 @@
|
|
56
56
|
<hr/>
|
57
57
|
|
58
58
|
<!-- begin optional cookies -->
|
59
|
-
<div v-if="cookieOptions
|
60
|
-
<
|
59
|
+
<div v-if="cookieOptions?.optional" class="flex-container vertical">
|
60
|
+
<CmdHeadline v-if="cmdBoxOptionalCookies?.showHeadline" :headline-text="cmdBoxOptionalCookies?.headlineText" :headline-level="cmdBoxOptionalCookies?.headlineLevel "/>
|
61
61
|
<!-- begin CmdBox -->
|
62
|
-
<CmdBox v-for="(cookie, index) in cookieOptions.optional.cookies"
|
62
|
+
<CmdBox v-for="(cookie, index) in cookieOptions.optional.cookies || []"
|
63
63
|
:useSlots="['header', 'body']"
|
64
64
|
v-bind="cmdBoxOptionalCookies"
|
65
65
|
:key="index"
|
@@ -123,7 +123,7 @@ import DefaultMessageProperties from "../mixins/CmdCookieDisclaimer/DefaultMessa
|
|
123
123
|
|
124
124
|
// import components
|
125
125
|
import CmdBox from "./CmdBox"
|
126
|
-
import
|
126
|
+
import CmdHeadline from "./CmdHeadline"
|
127
127
|
import CmdFormElement from "./CmdFormElement"
|
128
128
|
|
129
129
|
export default {
|
@@ -131,7 +131,7 @@ export default {
|
|
131
131
|
mixins: [I18n, DefaultMessageProperties],
|
132
132
|
components: {
|
133
133
|
CmdBox,
|
134
|
-
|
134
|
+
CmdHeadline,
|
135
135
|
CmdFormElement
|
136
136
|
},
|
137
137
|
data() {
|
@@ -149,9 +149,9 @@ export default {
|
|
149
149
|
required: false
|
150
150
|
},
|
151
151
|
/**
|
152
|
-
* properties for
|
152
|
+
* properties for CmdHeadline-component at top of cookie disclaimer
|
153
153
|
*/
|
154
|
-
|
154
|
+
CmdHeadlineCookieDisclaimer: {
|
155
155
|
type: Object,
|
156
156
|
default() {
|
157
157
|
return {
|
@@ -9,6 +9,7 @@
|
|
9
9
|
disabled: $attrs.disabled
|
10
10
|
}
|
11
11
|
]"
|
12
|
+
:title="$attrs.title"
|
12
13
|
:aria-labelledby="labelId"
|
13
14
|
:aria-required="$attrs.required !== undefined"
|
14
15
|
ref="fakeselect"
|
@@ -18,28 +19,21 @@
|
|
18
19
|
<span class="label-text" :id="labelId">
|
19
20
|
<span>{{ labelText }}<sup v-if="$attrs.required !== undefined">*</sup></span>
|
20
21
|
|
21
|
-
<!-- begin
|
22
|
-
<
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
:inputModelValue="modelValue"
|
37
|
-
:inputAttributes="$attrs"
|
38
|
-
:helplink="helplink"
|
39
|
-
/>
|
40
|
-
<!-- end CmdListOfRequirements -->
|
41
|
-
</CmdTooltip>
|
42
|
-
<!-- end CmdTooltip -->
|
22
|
+
<!-- begin CmdTooltipForInputElements -->
|
23
|
+
<CmdTooltipForInputElements
|
24
|
+
v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
|
25
|
+
ref="tooltip"
|
26
|
+
:showRequirements="showRequirements"
|
27
|
+
:inputRequirements="inputRequirements"
|
28
|
+
:validationStatus="validationStatus"
|
29
|
+
:validationMessage="getValidationMessage"
|
30
|
+
:validationTooltip="validationTooltip"
|
31
|
+
:inputAttributes="$attrs"
|
32
|
+
:inputModelValue="modelValue"
|
33
|
+
:helplink="helplink"
|
34
|
+
:relatedId="tooltipId"
|
35
|
+
/>
|
36
|
+
<!-- end CmdTooltipForInputElements -->
|
43
37
|
|
44
38
|
<a v-if="$attrs.required || inputRequirements.length"
|
45
39
|
href="#"
|
@@ -139,9 +133,7 @@ import FieldValidation from "../mixins/FieldValidation.js"
|
|
139
133
|
import Tooltip from "../mixins/Tooltip.js"
|
140
134
|
|
141
135
|
// import components
|
142
|
-
import
|
143
|
-
import CmdSystemMessage from "./CmdSystemMessage"
|
144
|
-
import CmdTooltip from "./CmdTooltip"
|
136
|
+
import CmdTooltipForInputElements from "./CmdTooltipForInputElements"
|
145
137
|
|
146
138
|
export default {
|
147
139
|
name: 'CmdFakeSelect',
|
@@ -153,9 +145,7 @@ export default {
|
|
153
145
|
Tooltip
|
154
146
|
],
|
155
147
|
components: {
|
156
|
-
|
157
|
-
CmdSystemMessage,
|
158
|
-
CmdTooltip
|
148
|
+
CmdTooltipForInputElements
|
159
149
|
},
|
160
150
|
data() {
|
161
151
|
return {
|
@@ -258,6 +248,19 @@ export default {
|
|
258
248
|
}
|
259
249
|
},
|
260
250
|
computed: {
|
251
|
+
validationTooltip() {
|
252
|
+
if (!this.useCustomTooltip) {
|
253
|
+
return this.getValidationMessage
|
254
|
+
}
|
255
|
+
|
256
|
+
// set default-tooltip if customTooltip is not set
|
257
|
+
if (this.validationStatus === 'error') {
|
258
|
+
return this.getMessage("cmdformelement.validationTooltip.an_error_occurred")
|
259
|
+
} else if (this.validationStatus === 'success') {
|
260
|
+
return this.getMessage("cmdformelement.validationTooltip.information_is_filled_correctly")
|
261
|
+
}
|
262
|
+
return this.getMessage("cmdformelement.validationTooltip.open_field_requirements")
|
263
|
+
},
|
261
264
|
// get the displayed option name
|
262
265
|
optionName() {
|
263
266
|
// fake a native selectbox
|
@@ -558,7 +561,7 @@ export default {
|
|
558
561
|
margin: 0;
|
559
562
|
border-bottom-right-radius: var(--border-radius);
|
560
563
|
border-bottom-left-radius: var(--border-radius);
|
561
|
-
background: var(--
|
564
|
+
background: var(--color-scheme-background-color);
|
562
565
|
border: var(--primary-border);
|
563
566
|
|
564
567
|
li {
|
@@ -13,7 +13,8 @@
|
|
13
13
|
on: colored && isChecked,
|
14
14
|
off: colored && !isChecked,
|
15
15
|
'has-state': validationStatus
|
16
|
-
}
|
16
|
+
}
|
17
|
+
]"
|
17
18
|
:for="labelId"
|
18
19
|
:title="$attrs.title"
|
19
20
|
ref="label">
|
@@ -23,29 +24,21 @@
|
|
23
24
|
:class="['label-text', !showLabel ? 'hidden' : undefined]">
|
24
25
|
<span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span>
|
25
26
|
|
26
|
-
<!-- begin
|
27
|
-
<
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
:helplink="helplink"
|
42
|
-
:inputModelValue="modelValue"
|
43
|
-
:inputAttributes="$attrs"
|
44
|
-
:validationTooltip="validationTooltip"
|
45
|
-
/>
|
46
|
-
<!-- end CmdListOfRequirements -->
|
47
|
-
</CmdTooltip>
|
48
|
-
<!-- end CmdTooltip -->
|
27
|
+
<!-- begin CmdTooltipForInputElements -->
|
28
|
+
<CmdTooltipForInputElements
|
29
|
+
v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
|
30
|
+
ref="tooltip"
|
31
|
+
:showRequirements="showRequirements"
|
32
|
+
:inputRequirements="inputRequirements"
|
33
|
+
:validationStatus="validationStatus"
|
34
|
+
:validationMessage="getValidationMessage"
|
35
|
+
:validationTooltip="validationTooltip"
|
36
|
+
:inputAttributes="$attrs"
|
37
|
+
:inputModelValue="modelValue"
|
38
|
+
:helplink="helplink"
|
39
|
+
:relatedId="tooltipId"
|
40
|
+
/>
|
41
|
+
<!-- end CmdTooltipForInputElements -->
|
49
42
|
|
50
43
|
<a v-if="$attrs.required || inputRequirements.length"
|
51
44
|
href="#"
|
@@ -212,17 +205,13 @@ import FieldValidation from "../mixins/FieldValidation.js"
|
|
212
205
|
import Tooltip from "../mixins/Tooltip.js"
|
213
206
|
|
214
207
|
// import components
|
215
|
-
import
|
216
|
-
import CmdSystemMessage from "./CmdSystemMessage"
|
217
|
-
import CmdTooltip from "./CmdTooltip"
|
208
|
+
import CmdTooltipForInputElements from "./CmdTooltipForInputElements"
|
218
209
|
|
219
210
|
export default {
|
220
211
|
inheritAttrs: false,
|
221
212
|
name: "FormElement",
|
222
213
|
components: {
|
223
|
-
|
224
|
-
CmdSystemMessage,
|
225
|
-
CmdTooltip
|
214
|
+
CmdTooltipForInputElements
|
226
215
|
},
|
227
216
|
mixins: [
|
228
217
|
I18n,
|
@@ -269,6 +258,8 @@ export default {
|
|
269
258
|
},
|
270
259
|
/**
|
271
260
|
* text for label
|
261
|
+
*
|
262
|
+
* @requiredForAccessibility: true
|
272
263
|
*/
|
273
264
|
labelText: {
|
274
265
|
type: String,
|
@@ -703,12 +694,11 @@ export default {
|
|
703
694
|
}
|
704
695
|
return null
|
705
696
|
},
|
706
|
-
|
697
|
+
validateInput(event) {
|
707
698
|
// check if surrounding form with data-use-validation exists
|
708
699
|
const useValidation = event.target.closest("form")?.dataset.useValidation === "true"
|
709
700
|
|
710
701
|
if (useValidation) {
|
711
|
-
this.tooltip = false
|
712
702
|
this.validationStatus = ""
|
713
703
|
|
714
704
|
// if input is filled, set status to success (expect for checkboxes and radiobuttons)
|
@@ -733,6 +723,14 @@ export default {
|
|
733
723
|
}
|
734
724
|
}
|
735
725
|
},
|
726
|
+
onBlur(event) {
|
727
|
+
this.validateInput(event)
|
728
|
+
this.closeTooltipOnBlur()
|
729
|
+
},
|
730
|
+
onInput(event) {
|
731
|
+
this.validateInput(event)
|
732
|
+
this.$emit('update:modelValue', event.target.value)
|
733
|
+
},
|
736
734
|
onChange(event) {
|
737
735
|
if (typeof this.modelValue === "boolean") {
|
738
736
|
this.$emit("update:modelValue", event.target.checked)
|
@@ -754,9 +752,6 @@ export default {
|
|
754
752
|
this.$refs.label.focus()
|
755
753
|
}
|
756
754
|
},
|
757
|
-
onInput(event) {
|
758
|
-
this.$emit('update:modelValue', event.target.value)
|
759
|
-
},
|
760
755
|
showPassword() {
|
761
756
|
// get password-field
|
762
757
|
const passwordField = this.$refs.input
|
@@ -777,6 +772,10 @@ export default {
|
|
777
772
|
},
|
778
773
|
executeSearch() {
|
779
774
|
this.$emit("search", this.value)
|
775
|
+
},
|
776
|
+
closeTooltipOnBlur() {
|
777
|
+
// close tooltip by calling function from CmdTooltipForInputElements using $refs
|
778
|
+
this.$refs.tooltip.hideTooltip()
|
780
779
|
}
|
781
780
|
},
|
782
781
|
watch: {
|
@@ -12,28 +12,21 @@
|
|
12
12
|
<span :class="['label-text', { hidden: !showLabel}]" :id="labelId" :aria-labelledby="labelId">
|
13
13
|
<span>{{ labelText }}<sup v-if="required">*</sup></span>
|
14
14
|
|
15
|
-
<!-- begin
|
16
|
-
<
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
:helplink="helplink"
|
31
|
-
:inputModelValue="modelValue"
|
32
|
-
:inputAttributes="$attrs"
|
33
|
-
/>
|
34
|
-
<!-- end CmdListOfRequirements -->
|
35
|
-
</CmdTooltip>
|
36
|
-
<!-- end CmdTooltip -->
|
15
|
+
<!-- begin CmdTooltipForInputElements -->
|
16
|
+
<CmdTooltipForInputElements
|
17
|
+
v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
|
18
|
+
ref="tooltip"
|
19
|
+
:showRequirements="showRequirements"
|
20
|
+
:inputRequirements="inputRequirements"
|
21
|
+
:validationStatus="validationStatus"
|
22
|
+
:validationMessage="getValidationMessage"
|
23
|
+
:validationTooltip="validationTooltip"
|
24
|
+
:inputAttributes="$attrs"
|
25
|
+
:inputModelValue="modelValue"
|
26
|
+
:helplink="helplink"
|
27
|
+
:relatedId="tooltipId"
|
28
|
+
/>
|
29
|
+
<!-- end CmdTooltipForInputElements -->
|
37
30
|
|
38
31
|
<a v-if="required || inputRequirements.length"
|
39
32
|
href="#"
|
@@ -80,15 +73,11 @@ import FieldValidation from "../mixins/FieldValidation.js"
|
|
80
73
|
import Tooltip from "../mixins/Tooltip.js"
|
81
74
|
|
82
75
|
// import components
|
83
|
-
import
|
84
|
-
import CmdSystemMessage from "./CmdSystemMessage"
|
85
|
-
import CmdTooltip from "./CmdTooltip"
|
76
|
+
import CmdTooltipForInputElements from "./CmdTooltipForInputElements"
|
86
77
|
|
87
78
|
export default {
|
88
79
|
components: {
|
89
|
-
|
90
|
-
CmdSystemMessage,
|
91
|
-
CmdTooltip
|
80
|
+
CmdTooltipForInputElements
|
92
81
|
},
|
93
82
|
mixins: [
|
94
83
|
FieldValidation,
|
@@ -96,8 +85,7 @@ export default {
|
|
96
85
|
],
|
97
86
|
data() {
|
98
87
|
return {
|
99
|
-
value: ""
|
100
|
-
validationStatus: ""
|
88
|
+
value: ""
|
101
89
|
}
|
102
90
|
},
|
103
91
|
props: {
|
@@ -115,13 +103,6 @@ export default {
|
|
115
103
|
type: Boolean,
|
116
104
|
default: false
|
117
105
|
},
|
118
|
-
/**
|
119
|
-
* tooltip for validation
|
120
|
-
*/
|
121
|
-
validationTooltip: {
|
122
|
-
type: String,
|
123
|
-
default: ""
|
124
|
-
},
|
125
106
|
/**
|
126
107
|
* list of input-elements inside group
|
127
108
|
*
|
@@ -231,7 +212,33 @@ export default {
|
|
231
212
|
default: false
|
232
213
|
}
|
233
214
|
},
|
215
|
+
methods: {
|
216
|
+
updateStatus() {
|
217
|
+
if (this.required) {
|
218
|
+
if(this.inputValue?.length) {
|
219
|
+
this.validationStatus = ""
|
220
|
+
return
|
221
|
+
}
|
222
|
+
this.validationStatus = "error"
|
223
|
+
return
|
224
|
+
}
|
225
|
+
this.validationStatus = this.status
|
226
|
+
}
|
227
|
+
},
|
234
228
|
computed: {
|
229
|
+
validationTooltip() {
|
230
|
+
if (!this.useCustomTooltip) {
|
231
|
+
return this.getValidationMessage
|
232
|
+
}
|
233
|
+
|
234
|
+
// set default-tooltip if customTooltip is not set
|
235
|
+
if (this.validationStatus === 'error') {
|
236
|
+
return this.getMessage("cmdformelement.validationTooltip.an_error_occurred")
|
237
|
+
} else if (this.validationStatus === 'success') {
|
238
|
+
return this.getMessage("cmdformelement.validationTooltip.information_is_filled_correctly")
|
239
|
+
}
|
240
|
+
return this.getMessage("cmdformelement.validationTooltip.open_field_requirements")
|
241
|
+
},
|
235
242
|
// get ID for accessibility
|
236
243
|
labelId() {
|
237
244
|
if (this.$attrs.id !== undefined) {
|
@@ -250,25 +257,16 @@ export default {
|
|
250
257
|
}
|
251
258
|
}
|
252
259
|
},
|
253
|
-
methods: {
|
254
|
-
onChange(e) {
|
255
|
-
if (typeof this.value === "string") {
|
256
|
-
this.$emit("update:value", e.target.value)
|
257
|
-
} else if (this.value !== undefined) {
|
258
|
-
let values = [...this.value]
|
259
|
-
if (e.target.checked) {
|
260
|
-
values.push(e.target.value)
|
261
|
-
} else {
|
262
|
-
values = values.filter(value => value !== e.target.value)
|
263
|
-
}
|
264
|
-
this.$emit("update:modelValue", values)
|
265
|
-
}
|
266
|
-
}
|
267
|
-
},
|
268
260
|
watch: {
|
269
261
|
status: {
|
270
262
|
handler() {
|
271
|
-
this.
|
263
|
+
this.updateStatus()
|
264
|
+
},
|
265
|
+
immediate: true
|
266
|
+
},
|
267
|
+
modelValue: {
|
268
|
+
handler() {
|
269
|
+
this.updateStatus()
|
272
270
|
},
|
273
271
|
immediate: true
|
274
272
|
}
|