diff --git a/README.md b/README.md index f3db19b6..ffb4a5ed 100644 --- a/README.md +++ b/README.md @@ -270,3 +270,8 @@ Command: ``` ./bin/pg-backup-to-s3 ``` + + +# Note on component +Our own components remain in kebap-case, imported components from third party libraries will be used in PascalCase. +E.g. `` vs. `` diff --git a/client/package-lock.json b/client/package-lock.json index 5da81db3..aa14e16d 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2209,6 +2209,21 @@ } } }, + "@vue/composition-api": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@vue/composition-api/-/composition-api-1.4.2.tgz", + "integrity": "sha512-EqybqmMq835GISvlQXdDaV8dsbunpdmhClrnAqUJZLyxxV9pQXQYRtNDf+0e+fEwMfimLIsv7YmbKCbqxGRqXg==", + "requires": { + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, "@vue/test-utils": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.2.2.tgz", @@ -19743,9 +19758,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vee-validate": { - "version": "2.2.15", - "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-2.2.15.tgz", - "integrity": "sha512-4TOsI8XwVkKVLkg8Nhmy+jyoJrR6XcTRDyxBarzcCvYzU61zamipS1WsB6FlDze8eJQpgglS4NXAS6o4NDPs1g==" + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-3.4.14.tgz", + "integrity": "sha512-Hqqic8G9WcRSIzCxiCPqMZv4qB8JE1lIQqIOLDm2K5BXUiL8d4a2+kqkanv8gQSGDzYpnCQZ7BO/T99Aj05T1Q==" }, "vendors": { "version": "1.0.4", diff --git a/client/package.json b/client/package.json index a5b0dff2..c92cfaa6 100644 --- a/client/package.json +++ b/client/package.json @@ -31,6 +31,7 @@ "@babel/preset-stage-2": "^7.0.0", "@babel/runtime": "^7.5.4", "@iam4x/cypress-graphql-mock": "0.0.1", + "@vue/composition-api": "^1.4.2", "apollo-cache-inmemory": "^1.6.5", "apollo-client": "^2.6.8", "apollo-link": "^1.2.13", @@ -84,16 +85,16 @@ "uploadcare-widget": "^3.6.0", "url-loader": "^1.0.1", "uuid": "^3.2.1", - "vee-validate": "^2.2.15", + "vee-validate": "^3.4.14", "vue": "^2.6.14", "vue-analytics": "^5.16.2", "vue-apollo": "^3.0.0-beta.16", "vue-loader": "^15.9.8", - "vue-template-compiler": "^2.6.14", "vue-matomo": "^3.13.4-0", "vue-router": "^3.0.1", "vue-scrollto": "^2.11.0", "vue-style-loader": "^3.0.1", + "vue-template-compiler": "^2.6.14", "vue-toast-notification": "^0.4.1", "vue-vimeo-player": "0.0.6", "vuejs-logger": "1.5.5", diff --git a/client/src/components/LoadingButton.vue b/client/src/components/LoadingButton.vue index 069021b3..6f164586 100644 --- a/client/src/components/LoadingButton.vue +++ b/client/src/components/LoadingButton.vue @@ -1,6 +1,6 @@ {{ label }} diff --git a/client/src/components/profile/PasswordChangeForm.vue b/client/src/components/profile/PasswordChangeForm.vue deleted file mode 100644 index 57d9242c..00000000 --- a/client/src/components/profile/PasswordChangeForm.vue +++ /dev/null @@ -1,112 +0,0 @@ - - - - - Aktuelles Passwort - - {{ errors.first('oldPassword') }} - {{ error }} - - - Neues Passwort - - {{ errors.first('newPassword') }} - {{ error }} - Das Passwort muss mindestens 8 Zeichen lang sein und Grossbuchstaben, Zahlen und Sonderzeichen beinhalten. - - Speichern - - - - - - - diff --git a/client/src/main.js b/client/src/main.js index 954686e1..cb2aee49 100644 --- a/client/src/main.js +++ b/client/src/main.js @@ -7,10 +7,8 @@ import App from './App'; import {router, postLoginRedirectUrlKey} from './router'; import store from '@/store/index'; import VueScrollTo from 'vue-scrollto'; -import {Validator} from 'vee-validate/dist/vee-validate.minimal.esm.js'; -import VeeValidate from 'vee-validate'; -import {required, min, decimal, confirmed} from 'vee-validate/dist/rules.esm.js'; -import veeDe from 'vee-validate/dist/locale/de'; +import {extend, localize} from 'vee-validate'; +import {required, min, double, confirmed} from 'vee-validate/dist/rules'; import {dateFilter, dateTimeFilter} from './filters/date-filter'; import autoGrow from '@/directives/auto-grow'; import clickOutside from '@/directives/click-outside'; @@ -20,6 +18,7 @@ import VueRemoveEdges from '@/plugins/edges'; import VueMatomo from 'vue-matomo'; import VueToast from 'vue-toast-notification'; import VueLogger from 'vuejs-logger'; +import de from 'vee-validate/dist/locale/de.json'; Vue.config.productionTip = false; const isProduction = process.env.NODE_ENV === 'production'; @@ -63,28 +62,36 @@ const apolloProvider = new VueApollo({ defaultClient: privateApolloClient }); -Validator.extend('required', required); -Validator.extend('min', min); -Validator.extend('decimal', decimal); -Validator.extend('confirmed', confirmed); +extend('required', required); +extend('min', min); +extend('decimal', double); +extend('confirmed', confirmed); -const dict = { - custom: { - oldPassword: { - required: 'Dein aktuelles Passwort fehlt' - }, - newPassword: { - required: 'Dein neues Passwort fehlt', - min: 'Das neue Passwort muss mindestens 8 Zeichen lang sein' +// const dict = { +// custom: { +// oldPassword: { +// required: 'Dein aktuelles Passwort fehlt' +// }, +// newPassword: { +// required: 'Dein neues Passwort fehlt', +// min: 'Das neue Passwort muss mindestens 8 Zeichen lang sein' +// } +// } +// }; + +localize('de', { + de: { + ...de, + names: { + password: 'Password', + email: 'E-Mail', + coupon: 'Coupon' } } -}; - -Validator.localize('de', veeDe); -Validator.localize('de', dict); +}); // https://github.com/baianat/vee-validate/issues/51 -Validator.extend('strongPassword', { +extend('strongPassword', { getMessage: field => 'Das Passwort muss Grossbuchstaben, Zahlen und Sonderzeichen beinhalten und mindestens 8 Zeichen lang sein', validate: value => { const strongRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*?(),.":{}|<>+])(?=.{8,})/; @@ -92,7 +99,7 @@ Validator.extend('strongPassword', { } }); -Validator.extend('email', { +extend('email', { getMessage: field => 'Bitte geben Sie eine gülitge E-Mail an', validate: value => { const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/; @@ -100,10 +107,6 @@ Validator.extend('email', { } }); -Vue.use(VeeValidate, { - locale: 'de' -}); - Vue.filter('date', dateFilter); Vue.filter('datetime', dateTimeFilter); diff --git a/client/src/pages/beta-login.vue b/client/src/pages/beta-login.vue index 673fc9c2..501d47e7 100644 --- a/client/src/pages/beta-login.vue +++ b/client/src/pages/beta-login.vue @@ -1,175 +1,137 @@ Melden Sie sich jetzt an - - - E-Mail - + + + - {{ errors.first('email') }} - {{ error }} - - - Passwort - + + - {{ errors.first('password') }} - {{ error }} - - - {{ loginError }} - - - Anmelden - - + /> + + + {{ loginError }} + + + Anmelden + + + + diff --git a/client/src/pages/license-activation.vue b/client/src/pages/license-activation.vue index 0f4fe6b6..ec81f6d1 100644 --- a/client/src/pages/license-activation.vue +++ b/client/src/pages/license-activation.vue @@ -1,57 +1,44 @@ - Für {{ me.email }} haben wir keine gültige Lizenz gefunden + Für {{ me.email }} haben wir keine + gültige Lizenz gefunden - - Geben Sie einen Coupon-Code ein - - Coupon-Code - + + Geben Sie einen Coupon-Code ein + - {{ errors.first('coupon') }} - {{ error }} - - - - Abmelden - - - + + + Abmelden + + + + Oder, kaufen Sie eine Lizenz @@ -69,108 +56,103 @@ diff --git a/client/src/styles/_buttons.scss b/client/src/styles/_buttons.scss index 0610e307..1ce77ed3 100644 --- a/client/src/styles/_buttons.scss +++ b/client/src/styles/_buttons.scss @@ -12,17 +12,29 @@ &--white-bg { background-color: $color-white; } + @mixin disabled { cursor: default; } - &--disabled { - @include disabled; + @mixin disabled-default { + cursor: default; background-color: $color-silver-light; + border-color: $color-silver-light; } + + &:disabled { + @include disabled-default; + } + + &--disabled { + @include disabled-default; + } + &--disabled-alt { @include disabled; opacity: 0.3; } + &--big { padding: 15px; }
Das Passwort muss mindestens 8 Zeichen lang sein und Grossbuchstaben, Zahlen und Sonderzeichen beinhalten.
Für {{ me.email }} haben wir keine gültige Lizenz gefunden
Für {{ me.email }} haben wir keine + gültige Lizenz gefunden