comand-component-library 3.1.91 → 3.1.93
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 +2 -2
- package/src/App.vue +33 -32
- package/src/assets/styles/global-styles.scss +0 -1
- package/src/components/CmdBox.vue +7 -3
- package/src/components/CmdCookieDisclaimer.vue +19 -3
- package/src/components/CmdFormElement.vue +32 -22
- package/src/components/CmdLoginForm.vue +80 -103
- package/src/components/CmdNewsletterSubscription.vue +8 -2
- package/src/components/CmdSiteHeader.vue +35 -7
- package/src/components/{CmdBoxSiteSearch.vue → CmdSiteSearch.vue} +32 -12
- package/src/components/CmdTooltipForInputElements.vue +1 -19
- package/src/documentation/generated/CmdLoginFormPropertyDescriptions.json +3 -3
- package/src/documentation/generated/CmdSiteHeaderPropertyDescriptions.json +15 -0
- package/src/documentation/generated/CmdSiteSearchPropertyDescriptions.json +79 -0
- package/src/documentation/generated/CmdTooltipForInputElementsPropertyDescriptions.json +1 -6
- package/src/index.js +1 -1
- package/src/mixins/CmdFormElement/DefaultMessageProperties.js +2 -1
- package/src/mixins/FieldValidation.js +11 -6
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "comand-component-library",
|
3
|
-
"version": "3.1.
|
3
|
+
"version": "3.1.93",
|
4
4
|
"private": false,
|
5
5
|
"scripts": {
|
6
6
|
"serve": "vue-cli-service serve",
|
@@ -18,7 +18,7 @@
|
|
18
18
|
],
|
19
19
|
"dependencies": {
|
20
20
|
"clickout-event": "^1.1.2",
|
21
|
-
"comand-frontend-framework": "^3.2.
|
21
|
+
"comand-frontend-framework": "^3.2.77",
|
22
22
|
"core-js": "^3.20.1",
|
23
23
|
"prismjs": "^1.27.0",
|
24
24
|
"sass": "^1.54.9",
|
package/src/App.vue
CHANGED
@@ -30,26 +30,26 @@
|
|
30
30
|
<CmdWidthLimitationWrapper>
|
31
31
|
<div class="flex-container">
|
32
32
|
<ul>
|
33
|
-
<li><a href="#section-accordion">Accordion</a></li>
|
34
33
|
<li><a href="#section-advanced-form-elements">Advanced Form Elements</a></li>
|
35
34
|
<li><a href="#section-bank-account-data">Bank Account Data</a></li>
|
36
35
|
<li><a href="#section-boxes">Boxes</a></li>
|
37
36
|
<li><a href="#section-breadcrumbs">Breadcrumbs</a></li>
|
38
37
|
<li><a href="#section-cookie-disclaimer">Cookie-Disclaimer</a></li>
|
38
|
+
<li><a href="#section-custom-headline">Custom Headline</a></li>
|
39
39
|
</ul>
|
40
40
|
<ul>
|
41
|
-
<li><a href="#section-custom-headline">Custom Headline</a></li>
|
42
41
|
<li><a href="#section-fancybox">Fancybox</a></li>
|
43
42
|
<li><a href="#section-google-maps-integration">Google-Maps™-Integration</a></li>
|
44
43
|
<li><a href="#section-image-gallery">Image Gallery</a></li>
|
45
44
|
<li><a href="#section-image-zoom">Image-Zoom</a></li>
|
46
45
|
<li><a href="#section-login-form">Login Form</a></li>
|
46
|
+
<li><a href="#section-main-navigation">Main-Navigation</a></li>
|
47
47
|
</ul>
|
48
48
|
<ul>
|
49
|
-
<li><a href="#section-main-navigation">Main-Navigation</a></li>
|
50
49
|
<li><a href="#section-multistep-form-progress-bar">Multistepform-Progressbar</a></li>
|
51
50
|
<li><a href="#section-pager">Pager</a></li>
|
52
51
|
<li><a href="#section-share-buttons">Share Buttons</a></li>
|
52
|
+
<li><a href="#section-site-search">Site Search</a></li>
|
53
53
|
<li><a href="#section-slideshow">Slideshow</a></li>
|
54
54
|
<li><a href="#section-system-message">System-Message</a></li>
|
55
55
|
</ul>
|
@@ -840,7 +840,7 @@
|
|
840
840
|
</CmdBox>
|
841
841
|
</div>
|
842
842
|
<div class="grid-small-item">
|
843
|
-
<CmdBox :cmdHeadline="{headlineText: '
|
843
|
+
<CmdBox :cmdHeadline="{headlineText: 'Collapsible box', headlineLevel: 4}" :collapsible="true" :stretchVertically="false">
|
844
844
|
<template v-slot:header>
|
845
845
|
<h3>
|
846
846
|
Collapsible box with image
|
@@ -885,25 +885,6 @@
|
|
885
885
|
<CmdBox boxType="user" :user="user" :cmdHeadline="{headlineLevel: 4}"/>
|
886
886
|
</div>
|
887
887
|
</div>
|
888
|
-
<h3>Box Site Search</h3>
|
889
|
-
<CmdBoxSiteSearch
|
890
|
-
v-model:modelValueInput1="siteSearchInput1"
|
891
|
-
v-model:modelValueInput2="siteSearchInput2"
|
892
|
-
v-model:modelValueRadius="radius"
|
893
|
-
v-model:modelValueSearchFilters="filters"
|
894
|
-
@search="siteSearchOutput"
|
895
|
-
textLegend="Search"
|
896
|
-
:cmdFakeSelect="siteSearchFilters"/>
|
897
|
-
<dl>
|
898
|
-
<dt>siteSearchInput1:</dt>
|
899
|
-
<dd>{{ siteSearchInput1 }}</dd>
|
900
|
-
<dt>siteSearchInput2:</dt>
|
901
|
-
<dd>{{ siteSearchInput2 }}</dd>
|
902
|
-
<dt>Radius:</dt>
|
903
|
-
<dd>{{ radius }}</dd>
|
904
|
-
<dt>Filters:</dt>
|
905
|
-
<dd>{{ filters }}</dd>
|
906
|
-
</dl>
|
907
888
|
</CmdWidthLimitationWrapper>
|
908
889
|
<!-- end boxes ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
909
890
|
|
@@ -973,7 +954,9 @@
|
|
973
954
|
<a id="section-login-form"></a>
|
974
955
|
<CmdWidthLimitationWrapper>
|
975
956
|
<h2 class="headline-demopage">Login Form</h2>
|
976
|
-
<
|
957
|
+
<CmdForm :use-validation="true" :use-fieldset="false">
|
958
|
+
<CmdLoginForm v-model="loginData" textLegendLoginForm="Please log in" />
|
959
|
+
</CmdForm>
|
977
960
|
<p>LoginData: {{ loginData }}</p>
|
978
961
|
</CmdWidthLimitationWrapper>
|
979
962
|
|
@@ -1019,7 +1002,7 @@
|
|
1019
1002
|
<a id="section-newsletter-subscription"></a>
|
1020
1003
|
<CmdWidthLimitationWrapper>
|
1021
1004
|
<h2 class="headline-demopage">Newsletter Subscription</h2>
|
1022
|
-
<CmdForm textLegend="Stay-up-to-date">
|
1005
|
+
<CmdForm textLegend="Stay-up-to-date" :use-fieldset="false">
|
1023
1006
|
<CmdNewsletterSubscription v-model="newsletter" buttonType="submit" @buttonClick="submitNewsletterRegistration" />
|
1024
1007
|
</CmdForm>
|
1025
1008
|
</CmdWidthLimitationWrapper>
|
@@ -1048,6 +1031,22 @@
|
|
1048
1031
|
</CmdWidthLimitationWrapper>
|
1049
1032
|
<!-- end share-buttons ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
1050
1033
|
|
1034
|
+
<!-- begin site-search ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
1035
|
+
<a id="section-site-search"></a>
|
1036
|
+
<CmdWidthLimitationWrapper>
|
1037
|
+
<h2 class="headline-demopage">Site Search</h2>
|
1038
|
+
<CmdSiteSearch
|
1039
|
+
v-model:modelValueInput1="siteSearchInput1"
|
1040
|
+
v-model:modelValueInput2="siteSearchInput2"
|
1041
|
+
v-model:modelValueRadius="radius"
|
1042
|
+
v-model:modelValueSearchFilters="filters"
|
1043
|
+
@search="siteSearchOutput"
|
1044
|
+
textLegend="Search"
|
1045
|
+
:cmdFakeSelect="siteSearchFilters"
|
1046
|
+
/>
|
1047
|
+
</CmdWidthLimitationWrapper>
|
1048
|
+
<!-- end site-search ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
1049
|
+
|
1051
1050
|
<!-- begin slideshow ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
1052
1051
|
<a id="section-slideshow"></a>
|
1053
1052
|
<CmdWidthLimitationWrapper>
|
@@ -1281,7 +1280,6 @@ import CmdAddressData from "@/components/CmdAddressData"
|
|
1281
1280
|
import CmdBackToTopButton from "@/components/CmdBackToTopButton.vue"
|
1282
1281
|
import CmdBankAccountData from "./components/CmdBankAccountData"
|
1283
1282
|
import CmdBox from "@/components/CmdBox.vue"
|
1284
|
-
import CmdBoxSiteSearch from "@/components/CmdBoxSiteSearch.vue"
|
1285
1283
|
import CmdBreadcrumbs from "@/components/CmdBreadcrumbs.vue"
|
1286
1284
|
import CmdCompanyLogo from "@/components/CmdCompanyLogo.vue"
|
1287
1285
|
import CmdCopyrightInformation from "@/components/CmdCopyrightInformation.vue"
|
@@ -1307,6 +1305,7 @@ import CmdProgressBar from "@/components/CmdProgressBar.vue"
|
|
1307
1305
|
import CmdShareButtons from "@/components/CmdShareButtons.vue"
|
1308
1306
|
import CmdSiteFooter from "./components/CmdSiteFooter"
|
1309
1307
|
import CmdSiteHeader from "./components/CmdSiteHeader"
|
1308
|
+
import CmdSiteSearch from "@/components/CmdSiteSearch.vue"
|
1310
1309
|
import CmdSlideshow from "@/components/CmdSlideshow.vue"
|
1311
1310
|
import CmdSwitchLanguage from "@/components/CmdSwitchLanguage.vue"
|
1312
1311
|
import CmdSystemMessage from "@/components/CmdSystemMessage.vue"
|
@@ -1332,7 +1331,6 @@ export default {
|
|
1332
1331
|
CmdBackToTopButton,
|
1333
1332
|
CmdBankAccountData,
|
1334
1333
|
CmdBox,
|
1335
|
-
CmdBoxSiteSearch,
|
1336
1334
|
CmdBreadcrumbs,
|
1337
1335
|
CmdCompanyLogo,
|
1338
1336
|
CmdCopyrightInformation,
|
@@ -1357,6 +1355,7 @@ export default {
|
|
1357
1355
|
CmdShareButtons,
|
1358
1356
|
CmdSiteFooter,
|
1359
1357
|
CmdSiteHeader,
|
1358
|
+
CmdSiteSearch,
|
1360
1359
|
CmdSlideshow,
|
1361
1360
|
CmdSwitchLanguage,
|
1362
1361
|
CmdSystemMessage,
|
@@ -1375,6 +1374,10 @@ export default {
|
|
1375
1374
|
showTooltip: false,
|
1376
1375
|
disabledStatus: undefined,
|
1377
1376
|
validationStatus: "",
|
1377
|
+
loginData: {
|
1378
|
+
username: "",
|
1379
|
+
password: ""
|
1380
|
+
},
|
1378
1381
|
newsletter: {
|
1379
1382
|
subscription: "",
|
1380
1383
|
email: ""
|
@@ -1423,7 +1426,6 @@ export default {
|
|
1423
1426
|
selectedCountry: "de",
|
1424
1427
|
selectedColor: "",
|
1425
1428
|
rangeValue: 50,
|
1426
|
-
loginData: {},
|
1427
1429
|
siteSearchFilters: {
|
1428
1430
|
show: true,
|
1429
1431
|
selectData: fakeSelectFilterOptionsData,
|
@@ -1433,7 +1435,7 @@ export default {
|
|
1433
1435
|
},
|
1434
1436
|
siteSearchInput1: "Doctor",
|
1435
1437
|
siteSearchInput2: "New York",
|
1436
|
-
radius:
|
1438
|
+
radius: 5,
|
1437
1439
|
filters: ["2"],
|
1438
1440
|
switchButtonRadio: "radio1",
|
1439
1441
|
switchButtonCheckboxToggleSwitch: false,
|
@@ -1517,10 +1519,9 @@ export default {
|
|
1517
1519
|
this.disabledStatus = disabledStatus
|
1518
1520
|
},
|
1519
1521
|
siteSearchOutput(event) {
|
1520
|
-
|
1522
|
+
alert(JSON.stringify(event))
|
1521
1523
|
},
|
1522
|
-
showError(
|
1523
|
-
console.log("EventMessages", event.messages)
|
1524
|
+
showError() {
|
1524
1525
|
alert("Error")
|
1525
1526
|
},
|
1526
1527
|
showFancyBox(type, content, altText) {
|
@@ -26,7 +26,10 @@
|
|
26
26
|
<!-- begin header for collapsible -->
|
27
27
|
<a v-if="collapsible" class="box-header" href="#" :title="open ? iconOpen.tooltip : iconClosed.tooltip" @click.prevent="toggleContentVisibility">
|
28
28
|
<!-- begin CmdHeadline -->
|
29
|
-
<CmdHeadline
|
29
|
+
<CmdHeadline
|
30
|
+
v-if="cmdHeadline?.headlineText"
|
31
|
+
v-bind="cmdHeadline"
|
32
|
+
/>
|
30
33
|
<!-- end CmdHeadline -->
|
31
34
|
<span class="toggle-icon" :class="[open ? iconOpen.iconClass : iconClosed.iconClass]"></span>
|
32
35
|
</a>
|
@@ -343,13 +346,14 @@ export default {
|
|
343
346
|
|
344
347
|
> .toggle-icon, .toggle-icon > [class*="icon"] {
|
345
348
|
font-size: 1rem;
|
346
|
-
margin-left: auto;
|
347
349
|
}
|
350
|
+
}
|
348
351
|
|
352
|
+
.box-header {
|
349
353
|
&:hover, &:active, &:focus {
|
350
354
|
background: var(--pure-white);
|
351
355
|
|
352
|
-
|
356
|
+
* {
|
353
357
|
color: var(--primary-color);
|
354
358
|
}
|
355
359
|
}
|
@@ -295,9 +295,25 @@ export default {
|
|
295
295
|
|
296
296
|
.cmd-box {
|
297
297
|
.box-header {
|
298
|
-
|
299
|
-
|
300
|
-
|
298
|
+
justify-content: unset; /* overwrite setting for collapsible boxes */
|
299
|
+
|
300
|
+
label {
|
301
|
+
&.disabled {
|
302
|
+
.label-text span {
|
303
|
+
color: var(--pure-white) !important; /* required to set label-text in header to white */
|
304
|
+
}
|
305
|
+
}
|
306
|
+
|
307
|
+
& + .toggle-icon {
|
308
|
+
width: 100%;
|
309
|
+
justify-content: flex-end;
|
310
|
+
text-align: right;
|
311
|
+
}
|
312
|
+
}
|
313
|
+
|
314
|
+
&:hover, &:active, &:focus {
|
315
|
+
label.disabled .label-text span {
|
316
|
+
color: var(--disabled-color) !important; /* required to set label-text on hover back to disabled-color */
|
301
317
|
}
|
302
318
|
}
|
303
319
|
}
|
@@ -1,23 +1,24 @@
|
|
1
1
|
<template>
|
2
|
-
<label
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
2
|
+
<label
|
3
|
+
v-if="(element === 'input' || element === 'select' || element === 'textarea')"
|
4
|
+
:class="[
|
5
|
+
'cmd-form-element',
|
6
|
+
validationStatus,
|
7
|
+
$attrs.class,
|
8
|
+
{
|
9
|
+
disabled: $attrs.disabled,
|
10
|
+
inline : displayLabelInline,
|
11
|
+
checked: isChecked,
|
12
|
+
'toggle-switch': toggleSwitch,
|
13
|
+
colored: colored,
|
14
|
+
on: colored && isChecked,
|
15
|
+
off: colored && !isChecked,
|
16
|
+
'has-state': validationStatus
|
17
|
+
}
|
18
|
+
]"
|
19
|
+
:for="htmlId"
|
20
|
+
:title="$attrs.title"
|
21
|
+
ref="label">
|
21
22
|
|
22
23
|
<!-- begin label-text (+ required asterisk) -->
|
23
24
|
<span v-if="(labelText || $slots.labeltext) && $attrs.type !== 'checkbox' && $attrs.type !== 'radio'"
|
@@ -687,6 +688,17 @@ export default {
|
|
687
688
|
}
|
688
689
|
},
|
689
690
|
methods: {
|
691
|
+
additionalStandardRequirements() {
|
692
|
+
const requirements = []
|
693
|
+
// check if field is type "email"
|
694
|
+
if(this.$attrs.type === "email") {
|
695
|
+
requirements.push({
|
696
|
+
message: this.getMessage("cmdformelement.validationTooltip.is_valid_email"),
|
697
|
+
valid: () => this.$refs.input.checkValidity()
|
698
|
+
})
|
699
|
+
}
|
700
|
+
return requirements
|
701
|
+
},
|
690
702
|
getDomElement() {
|
691
703
|
return this.$refs.label
|
692
704
|
},
|
@@ -706,8 +718,6 @@ export default {
|
|
706
718
|
const useValidation = event.target.closest("form")?.dataset.useValidation === "true"
|
707
719
|
|
708
720
|
if (useValidation) {
|
709
|
-
this.validationStatus = ""
|
710
|
-
|
711
721
|
// if input is filled, set status to success (expect for checkboxes and radiobuttons)
|
712
722
|
if (!["checkbox", "radio"].includes(this.$attrs.type) && this.modelValue) {
|
713
723
|
this.validationStatus = "success"
|
@@ -792,7 +802,7 @@ export default {
|
|
792
802
|
watch: {
|
793
803
|
status: {
|
794
804
|
handler() {
|
795
|
-
this.validationStatus = this.status
|
805
|
+
this.validationStatus = this.status || ""
|
796
806
|
},
|
797
807
|
immediate: true
|
798
808
|
}
|
@@ -1,10 +1,12 @@
|
|
1
1
|
<template>
|
2
2
|
<!-- begin login-form -->
|
3
|
-
<fieldset v-
|
4
|
-
<legend :class="{hidden : !showLegend}">{{
|
3
|
+
<fieldset v-show="!sendLogin" class="cmd-login-form flex-container">
|
4
|
+
<legend :class="{hidden : !showLegend}">{{ textLegendLoginForm }}</legend>
|
5
5
|
<!-- begin CmdHeadline -->
|
6
|
-
<CmdHeadline
|
7
|
-
|
6
|
+
<CmdHeadline
|
7
|
+
v-if="cmdHeadlineLoginForm"
|
8
|
+
v-bind="cmdHeadlineLoginForm"
|
9
|
+
/>
|
8
10
|
<!-- end CmdHeadline -->
|
9
11
|
|
10
12
|
<!-- being form elements -->
|
@@ -19,6 +21,8 @@
|
|
19
21
|
:fieldIconClass="cmdFormElementUsername.innerIconClass"
|
20
22
|
:labelText="cmdFormElementUsername.labelText"
|
21
23
|
:placeholder="cmdFormElementUsername.placeholder"
|
24
|
+
:required="cmdFormElementUsername.required"
|
25
|
+
@validationStatusChange="checkValidationStatus($event, 'username')"
|
22
26
|
/>
|
23
27
|
<!-- end CmdFormElement -->
|
24
28
|
|
@@ -32,6 +36,8 @@
|
|
32
36
|
v-model="password"
|
33
37
|
:labelText="cmdFormElementPassword.labelText"
|
34
38
|
:placeholder="cmdFormElementPassword.placeholder"
|
39
|
+
:required="cmdFormElementPassword.required"
|
40
|
+
@validationStatusChange="checkValidationStatus($event, 'password')"
|
35
41
|
/>
|
36
42
|
<!-- end CmdFormElement -->
|
37
43
|
</div>
|
@@ -39,6 +45,7 @@
|
|
39
45
|
|
40
46
|
<div class="option-wrapper flex-container" v-focus>
|
41
47
|
<template v-if="options.forgotPassword || options.createAccount">
|
48
|
+
<!-- begin link for 'forgot password' -->
|
42
49
|
<a v-if="options.forgotPassword" href="#" @click.prevent="sendLogin = true">
|
43
50
|
<span v-if="options.forgotPassword.icon && options.forgotPassword.icon.show && options.forgotPassword.icon.iconClass"
|
44
51
|
:class="options.forgotPassword.icon.iconClass"
|
@@ -46,7 +53,9 @@
|
|
46
53
|
</span>
|
47
54
|
<span v-if="options.forgotPassword.text">{{ options.forgotPassword.text }}</span>
|
48
55
|
</a>
|
49
|
-
<!--
|
56
|
+
<!-- end link for 'forgot password' -->
|
57
|
+
|
58
|
+
<!-- begin link-type 'href' for 'create account' -->
|
50
59
|
<a v-if="options.createAccount && options.createAccount.linkType === 'href'" :href="options.createAccount.path">
|
51
60
|
<span v-if="options.createAccount.icon && options.createAccount.icon.show && options.createAccount.icon.iconClass"
|
52
61
|
:class="options.createAccount.icon.iconClass"
|
@@ -54,9 +63,9 @@
|
|
54
63
|
</span>
|
55
64
|
<span v-if="options.createAccount.text">{{ options.createAccount.text }}</span>
|
56
65
|
</a>
|
57
|
-
<!-- end link-type 'href' -->
|
66
|
+
<!-- end link-type 'href' for 'create account' -->
|
58
67
|
|
59
|
-
<!-- begin link-type 'router' -->
|
68
|
+
<!-- begin link-type 'router' for 'create account' -->
|
60
69
|
<router-link v-else-if="options.createAccount && options.createAccount.linkType === 'router'" :to="options.createAccount.path">
|
61
70
|
<span v-if="options.createAccount.icon && options.createAccount.icon.show && options.createAccount.icon.iconClass"
|
62
71
|
:class="options.createAccount.icon.iconClass"
|
@@ -64,47 +73,16 @@
|
|
64
73
|
</span>
|
65
74
|
<span v-if="options.createAccount.text">{{ options.createAccount.text }}</span>
|
66
75
|
</router-link>
|
67
|
-
<!-- end link-type 'router -->
|
76
|
+
<!-- end link-type 'router' for 'create account' -->
|
68
77
|
</template>
|
69
78
|
|
70
|
-
<!-- begin link-type 'href' -->
|
71
|
-
<a
|
72
|
-
v-if="buttons.login.linkType === 'href'"
|
73
|
-
:class="['button', { primary: buttons.login.primary }]"
|
74
|
-
:href="buttons.login.path"
|
75
|
-
@click.prevent="onClick"
|
76
|
-
>
|
77
|
-
<span
|
78
|
-
v-if="buttons.login.icon.iconClass"
|
79
|
-
:class="buttons.login.icon.iconClass"
|
80
|
-
:title="buttons.login.icon.tooltip"
|
81
|
-
></span>
|
82
|
-
<span v-if="buttons.login.text">{{ buttons.login.text }}</span>
|
83
|
-
</a>
|
84
|
-
<!-- begin link-type 'href' -->
|
85
|
-
|
86
|
-
<!-- begin link-type 'router' -->
|
87
|
-
<router-link
|
88
|
-
v-if="buttons.login.linkType === 'router'"
|
89
|
-
:class="['button', { primary: buttons.login.primary }]"
|
90
|
-
:to="buttons.login.path"
|
91
|
-
@click.prevent="onClick"
|
92
|
-
>
|
93
|
-
<span
|
94
|
-
v-if="buttons.login.icon.iconClass"
|
95
|
-
:class="buttons.login.icon.iconClass"
|
96
|
-
:title="buttons.login.icon.tooltip"
|
97
|
-
></span>
|
98
|
-
<span v-if="buttons.login.text">{{ buttons.login.text }}</span>
|
99
|
-
</router-link>
|
100
|
-
<!-- begin link-type 'router' -->
|
101
|
-
|
102
79
|
<!-- begin link-type 'button' -->
|
103
80
|
<button
|
104
81
|
v-if="buttons.login.linkType === 'button'"
|
105
82
|
:type="buttons.login.type === 'submit' ? 'submit' : 'button'"
|
106
83
|
:class="['button', { primary: buttons.login.primary }]"
|
107
84
|
@click="onClick"
|
85
|
+
:disabled="buttonLoginDisabled"
|
108
86
|
>
|
109
87
|
<span
|
110
88
|
v-if="buttons.login.icon.iconClass"
|
@@ -119,14 +97,13 @@
|
|
119
97
|
<!-- end login-form -->
|
120
98
|
|
121
99
|
<!-- begin send-login-form -->
|
122
|
-
<fieldset v-
|
123
|
-
<legend :class="{'hidden' : !
|
100
|
+
<fieldset v-show="sendLogin" class="cmd-login-form flex-container">
|
101
|
+
<legend :class="{'hidden' : !showLegend}">{{ textLegendForgotLoginForm }}</legend>
|
124
102
|
<!-- begin CmdHeadline -->
|
125
|
-
<CmdHeadline
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
:headlineText="cmdHeadlineSendLoginForm.headlineText"/>
|
103
|
+
<CmdHeadline
|
104
|
+
v-if="cmdHeadlineSendLoginForm"
|
105
|
+
v-bind="cmdHeadlineSendLoginForm"
|
106
|
+
/>
|
130
107
|
<!-- end CmdHeadline -->
|
131
108
|
|
132
109
|
<!-- begin CmdFormElement -->
|
@@ -137,8 +114,10 @@
|
|
137
114
|
:labelText="cmdFormElementSendLogin.labelText"
|
138
115
|
:placeholder="cmdFormElementSendLogin.placeholder"
|
139
116
|
:name="cmdFormElementSendLogin.name"
|
117
|
+
:required="cmdFormElementSendLogin.required"
|
140
118
|
:id="cmdFormElementSendLogin.id"
|
141
|
-
|
119
|
+
@validationStatusChange="checkValidationStatus($event, 'email')"
|
120
|
+
v-model="sendLoginMail"
|
142
121
|
/>
|
143
122
|
<!-- end CmdFormElement -->
|
144
123
|
|
@@ -153,43 +132,12 @@
|
|
153
132
|
</span>
|
154
133
|
</a>
|
155
134
|
|
156
|
-
<!-- begin link-type 'href' -->
|
157
|
-
<a
|
158
|
-
v-if="buttons.sendLogin.linkType === 'href'"
|
159
|
-
:class="['button', { primary: buttons.sendLogin.primary }]"
|
160
|
-
:href="buttons.sendLogin.path"
|
161
|
-
@click.prevent="sendLogin"
|
162
|
-
>
|
163
|
-
<span
|
164
|
-
v-if="buttons.sendLogin.icon.iconClass"
|
165
|
-
:class="buttons.sendLogin.icon.iconClass"
|
166
|
-
:title="buttons.sendLogin.icon.tooltip"
|
167
|
-
></span>
|
168
|
-
<span v-if="buttons.sendLogin.text">{{ buttons.sendLogin.text }}</span>
|
169
|
-
</a>
|
170
|
-
<!-- end link-type 'href' -->
|
171
|
-
|
172
|
-
<!-- begin link-type 'router' -->
|
173
|
-
<router-link
|
174
|
-
v-if="buttons.sendLogin.linkType === 'router'"
|
175
|
-
:class="['button', { primary: buttons.sendLogin.primary }]"
|
176
|
-
:to="buttons.sendLogin.path"
|
177
|
-
@click.prevent="sendLogin"
|
178
|
-
>
|
179
|
-
<span
|
180
|
-
v-if="buttons.sendLogin.icon.iconClass"
|
181
|
-
:class="buttons.sendLogin.icon.iconClass"
|
182
|
-
:title="buttons.sendLogin.icon.tooltip"
|
183
|
-
></span>
|
184
|
-
<span v-if="buttons.sendLogin.text">{{ buttons.sendLogin.text }}</span>
|
185
|
-
</router-link>
|
186
|
-
<!-- end link-type 'router' -->
|
187
|
-
|
188
135
|
<!-- begin link-type 'button' -->
|
189
136
|
<button
|
190
137
|
v-if="buttons.sendLogin.linkType === 'button'"
|
191
138
|
:type="buttons.sendLogin.type === 'submit' ? 'submit' : 'button'"
|
192
139
|
:class="['button', { primary: buttons.sendLogin.primary }]"
|
140
|
+
:disabled="buttonSendLoginDisabled"
|
193
141
|
>
|
194
142
|
<span
|
195
143
|
v-if="buttons.sendLogin.icon?.iconClass"
|
@@ -216,8 +164,9 @@ export default {
|
|
216
164
|
name: "CmdLoginForm",
|
217
165
|
data() {
|
218
166
|
return {
|
219
|
-
|
220
|
-
|
167
|
+
usernameValidationStatus: false,
|
168
|
+
passwordValidationStatus: false,
|
169
|
+
emailValidationStatus: false,
|
221
170
|
sendLoginMail: "",
|
222
171
|
sendLogin: false
|
223
172
|
}
|
@@ -244,7 +193,7 @@ export default {
|
|
244
193
|
*
|
245
194
|
* @requiredForAccessibility: true
|
246
195
|
*/
|
247
|
-
|
196
|
+
textLegendLoginForm: {
|
248
197
|
type: String,
|
249
198
|
default: "Login form"
|
250
199
|
},
|
@@ -256,18 +205,13 @@ export default {
|
|
256
205
|
default: true
|
257
206
|
},
|
258
207
|
/**
|
259
|
-
* legend for
|
208
|
+
* legend for forgot-login-fieldset
|
260
209
|
*
|
261
210
|
* @requiredForAccessibility: true
|
262
|
-
|
263
|
-
|
264
|
-
type:
|
265
|
-
default
|
266
|
-
return {
|
267
|
-
show: false,
|
268
|
-
text: "Forgot login form"
|
269
|
-
}
|
270
|
-
}
|
211
|
+
*/
|
212
|
+
textLegendForgotLoginForm: {
|
213
|
+
type: String,
|
214
|
+
default: "Forgot login form"
|
271
215
|
},
|
272
216
|
/**
|
273
217
|
* properties for CmdHeadline-component for login-form
|
@@ -281,13 +225,7 @@ export default {
|
|
281
225
|
*/
|
282
226
|
cmdHeadlineSendLoginForm: {
|
283
227
|
type: Object,
|
284
|
-
|
285
|
-
return {
|
286
|
-
show: true,
|
287
|
-
headlineText: "Send Login",
|
288
|
-
headlineLevel: 2
|
289
|
-
}
|
290
|
-
}
|
228
|
+
required: false
|
291
229
|
},
|
292
230
|
/**
|
293
231
|
* properties for CmdFormElement-component for username-field
|
@@ -302,7 +240,8 @@ export default {
|
|
302
240
|
placeholder: "Type in username",
|
303
241
|
innerIconClass: "icon-user-profile",
|
304
242
|
name: "login-username",
|
305
|
-
id: "login-username"
|
243
|
+
id: "login-username",
|
244
|
+
required: true
|
306
245
|
}
|
307
246
|
}
|
308
247
|
},
|
@@ -319,7 +258,8 @@ export default {
|
|
319
258
|
placeholder: "Type in password",
|
320
259
|
innerIconClass: "icon-security-settings",
|
321
260
|
name: "login-password",
|
322
|
-
id: "login-password"
|
261
|
+
id: "login-password",
|
262
|
+
required: true
|
323
263
|
}
|
324
264
|
}
|
325
265
|
},
|
@@ -336,7 +276,8 @@ export default {
|
|
336
276
|
placeholder: "Type in email-address you are registered with",
|
337
277
|
innerIconClass: "icon-mail",
|
338
278
|
name: "login-send-login",
|
339
|
-
id: "login-send-login"
|
279
|
+
id: "login-send-login",
|
280
|
+
required: true
|
340
281
|
}
|
341
282
|
}
|
342
283
|
},
|
@@ -416,6 +357,30 @@ export default {
|
|
416
357
|
}
|
417
358
|
}
|
418
359
|
},
|
360
|
+
computed: {
|
361
|
+
buttonLoginDisabled() {
|
362
|
+
return !(this.usernameValidationStatus && this.passwordValidationStatus)
|
363
|
+
},
|
364
|
+
buttonSendLoginDisabled() {
|
365
|
+
return !this.emailValidationStatus
|
366
|
+
},
|
367
|
+
username: {
|
368
|
+
get() {
|
369
|
+
return this.modelValue.username
|
370
|
+
},
|
371
|
+
set(value) {
|
372
|
+
this.$emit("update:modelValue", {username: value, password: this.password})
|
373
|
+
}
|
374
|
+
},
|
375
|
+
password: {
|
376
|
+
get() {
|
377
|
+
return this.modelValue.password
|
378
|
+
},
|
379
|
+
set(value) {
|
380
|
+
this.$emit("update:modelValue", {username: this.username, password: value})
|
381
|
+
}
|
382
|
+
}
|
383
|
+
},
|
419
384
|
methods: {
|
420
385
|
modelChange() {
|
421
386
|
this.$emit("update:modelValue", { "username": this.username, "password": this.password })
|
@@ -425,6 +390,18 @@ export default {
|
|
425
390
|
},
|
426
391
|
getRoute(language) {
|
427
392
|
return getRoute(language)
|
393
|
+
},
|
394
|
+
checkValidationStatus(event, fieldType) {
|
395
|
+
if (event == null) {
|
396
|
+
return
|
397
|
+
}
|
398
|
+
if(fieldType === "username") {
|
399
|
+
this.usernameValidationStatus = event === "success";
|
400
|
+
} else if(fieldType === "password") {
|
401
|
+
this.passwordValidationStatus = event === "success";
|
402
|
+
} else {
|
403
|
+
this.emailValidationStatus = event === "success";
|
404
|
+
}
|
428
405
|
}
|
429
406
|
},
|
430
407
|
watch: {
|