mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Merge branch 'master' of github.com:gradido/gradido into 1840-refactor-to-filter-object--sub-rename+filters-obj
This commit is contained in:
commit
72e67194c4
@ -20,6 +20,9 @@ const connection = async (): Promise<Connection | null> => {
|
|||||||
logger: new FileLogger('all', {
|
logger: new FileLogger('all', {
|
||||||
logPath: CONFIG.TYPEORM_LOGGING_RELATIVE_PATH,
|
logPath: CONFIG.TYPEORM_LOGGING_RELATIVE_PATH,
|
||||||
}),
|
}),
|
||||||
|
extra: {
|
||||||
|
charset: 'utf8mb4_unicode_ci',
|
||||||
|
},
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// eslint-disable-next-line no-console
|
// eslint-disable-next-line no-console
|
||||||
|
|||||||
@ -50,6 +50,7 @@ module.exports = {
|
|||||||
'/time./',
|
'/time./',
|
||||||
'/decay.types./',
|
'/decay.types./',
|
||||||
'settings.password.resend_subtitle',
|
'settings.password.resend_subtitle',
|
||||||
|
'settings.password.reset',
|
||||||
'settings.password.reset-password.text',
|
'settings.password.reset-password.text',
|
||||||
'settings.password.set',
|
'settings.password.set',
|
||||||
'settings.password.set-password.text',
|
'settings.password.set-password.text',
|
||||||
|
|||||||
@ -45,7 +45,6 @@
|
|||||||
"jest": "^26.6.3",
|
"jest": "^26.6.3",
|
||||||
"jest-canvas-mock": "^2.3.1",
|
"jest-canvas-mock": "^2.3.1",
|
||||||
"jest-environment-jsdom-sixteen": "^2.0.0",
|
"jest-environment-jsdom-sixteen": "^2.0.0",
|
||||||
"particles-bg-vue": "1.2.3",
|
|
||||||
"portal-vue": "^2.1.7",
|
"portal-vue": "^2.1.7",
|
||||||
"prettier": "^2.2.1",
|
"prettier": "^2.2.1",
|
||||||
"qrcanvas-vue": "2.1.1",
|
"qrcanvas-vue": "2.1.1",
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 25 KiB |
BIN
frontend/public/img/template/Foto_01_2400_small.jpg
Normal file
BIN
frontend/public/img/template/Foto_01_2400_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 791 KiB |
BIN
frontend/public/img/template/Foto_02_2400_small.jpg
Normal file
BIN
frontend/public/img/template/Foto_02_2400_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 504 KiB |
BIN
frontend/public/img/template/Foto_03_2400_small.jpg
Normal file
BIN
frontend/public/img/template/Foto_03_2400_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 353 KiB |
BIN
frontend/public/img/template/Foto_04_2400_small.jpg
Normal file
BIN
frontend/public/img/template/Foto_04_2400_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 350 KiB |
61
frontend/src/App.spec.js
Normal file
61
frontend/src/App.spec.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import { mount, RouterLinkStub } from '@vue/test-utils'
|
||||||
|
import App from './App'
|
||||||
|
|
||||||
|
const localVue = global.localVue
|
||||||
|
const mockStoreCommit = jest.fn()
|
||||||
|
|
||||||
|
const stubs = {
|
||||||
|
RouterLink: RouterLinkStub,
|
||||||
|
RouterView: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('App', () => {
|
||||||
|
const mocks = {
|
||||||
|
$i18n: {
|
||||||
|
locale: 'en',
|
||||||
|
},
|
||||||
|
$t: jest.fn((t) => t),
|
||||||
|
$store: {
|
||||||
|
commit: mockStoreCommit,
|
||||||
|
state: {
|
||||||
|
token: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
$route: {
|
||||||
|
meta: {
|
||||||
|
requiresAuth: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
let wrapper
|
||||||
|
|
||||||
|
const Wrapper = () => {
|
||||||
|
return mount(App, { localVue, mocks, stubs })
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('mount', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
wrapper = Wrapper()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('renders the App', () => {
|
||||||
|
expect(wrapper.find('#app').exists()).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has a component AuthLayout', () => {
|
||||||
|
expect(wrapper.findComponent({ name: 'AuthLayout' }).exists()).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('route requires authorization', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
mocks.$route.meta.requiresAuth = true
|
||||||
|
wrapper = Wrapper()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has a component DashboardLayout', () => {
|
||||||
|
expect(wrapper.findComponent({ name: 'DashboardLayout' }).exists()).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
@ -1,47 +1,49 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="app" class="font-sans text-gray-800">
|
<div id="app" class="h-100">
|
||||||
<div>
|
<component :is="$route.meta.requiresAuth ? 'DashboardLayout' : 'AuthLayout'" />
|
||||||
<particles-bg v-if="$store.state.coinanimation" type="custom" :config="config" :bg="true" />
|
<div class="goldrand position-fixed w-100 fixed-bottom zindex1000"></div>
|
||||||
<component :is="$route.meta.requiresAuth ? 'DashboardLayout' : 'AuthLayoutGDD'" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { ParticlesBg } from 'particles-bg-vue'
|
import DashboardLayout from '@/layouts/DashboardLayout.vue'
|
||||||
import icon from './icon.js'
|
import AuthLayout from '@/layouts/AuthLayout.vue'
|
||||||
import DashboardLayout from '@/layouts/DashboardLayout_gdd.vue'
|
|
||||||
import AuthLayoutGDD from '@/layouts/AuthLayout_gdd.vue'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'app',
|
name: 'App',
|
||||||
components: {
|
components: {
|
||||||
ParticlesBg,
|
|
||||||
DashboardLayout,
|
DashboardLayout,
|
||||||
AuthLayoutGDD,
|
AuthLayout,
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
config: {
|
|
||||||
num: [1, 7],
|
|
||||||
rps: 15,
|
|
||||||
radius: [5, 50],
|
|
||||||
life: [6.5, 15],
|
|
||||||
v: [1, 1],
|
|
||||||
tha: [-40, 40],
|
|
||||||
body: icon,
|
|
||||||
alpha: [0.6, 0],
|
|
||||||
scale: [0.1, 0.4],
|
|
||||||
position: 'all',
|
|
||||||
cross: 'dead',
|
|
||||||
random: 2,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.pointer {
|
@font-face {
|
||||||
cursor: pointer;
|
font-family: 'WorkSans', sans-serif !important;
|
||||||
|
src: url(./assets/scss/fonts/WorkSans-VariableFont_wght.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
#app {
|
||||||
|
min-width: 360px;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-family: 'WorkSans', sans-serif !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 500px) {
|
||||||
|
#app {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.goldrand {
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
rgba(197, 141, 56, 1) 6%,
|
||||||
|
rgba(243, 205, 124, 1) 30%,
|
||||||
|
rgba(219, 176, 86, 1) 54%,
|
||||||
|
rgba(238, 192, 95, 1) 63%,
|
||||||
|
rgba(204, 157, 61, 1) 88%
|
||||||
|
);
|
||||||
|
height: 13px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// Body
|
// Body
|
||||||
|
|
||||||
$body-bg: #f8f9fe !default;
|
$body-bg: #fff !default;
|
||||||
$body-color: $gray-700 !default;
|
$body-color: $gray-700 !default;
|
||||||
|
|||||||
@ -16,7 +16,9 @@ $custom-control-indicator-active-bg: $component-active-bg !default;
|
|||||||
$custom-control-indicator-active-border-color: $component-active-border-color !default;
|
$custom-control-indicator-active-border-color: $component-active-border-color !default;
|
||||||
$custom-control-indicator-active-box-shadow: $custom-control-indicator-box-shadow !default;
|
$custom-control-indicator-active-box-shadow: $custom-control-indicator-box-shadow !default;
|
||||||
$custom-control-indicator-checked-color: $component-active-color !default;
|
$custom-control-indicator-checked-color: $component-active-color !default;
|
||||||
$custom-control-indicator-checked-bg: $component-active-bg !default;
|
|
||||||
|
// $custom-control-indicator-checked-bg: $component-active-bg !default;
|
||||||
|
$custom-control-indicator-checked-bg: #047006 !default;
|
||||||
$custom-control-indicator-checked-border-color: $component-active-border-color !default;
|
$custom-control-indicator-checked-border-color: $component-active-border-color !default;
|
||||||
$custom-control-indicator-checked-box-shadow: $custom-control-indicator-box-shadow !default;
|
$custom-control-indicator-checked-box-shadow: $custom-control-indicator-box-shadow !default;
|
||||||
|
|
||||||
@ -24,6 +26,8 @@ $custom-control-indicator-checked-box-shadow: $custom-control-indicator-box-shad
|
|||||||
$custom-control-indicator-checked-disabled-bg: theme-color("primary") !default;
|
$custom-control-indicator-checked-disabled-bg: theme-color("primary") !default;
|
||||||
$custom-control-indicator-disabled-bg: $gray-200 !default;
|
$custom-control-indicator-disabled-bg: $gray-200 !default;
|
||||||
$custom-control-label-disabled-color: $gray-600 !default;
|
$custom-control-label-disabled-color: $gray-600 !default;
|
||||||
$custom-checkbox-indicator-border-radius: $border-radius-sm !default;
|
|
||||||
|
// $custom-checkbox-indicator-border-radius: $border-radius-sm !default;
|
||||||
|
$custom-checkbox-indicator-border-radius: 50px !default;
|
||||||
|
|
||||||
// $custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml !default;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
// $custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml !default;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
|||||||
@ -4,7 +4,7 @@ $grid-breakpoints: (
|
|||||||
xs: 0,
|
xs: 0,
|
||||||
sm: 576px,
|
sm: 576px,
|
||||||
md: 768px,
|
md: 768px,
|
||||||
lg: 992px,
|
lg: 1025px,
|
||||||
xl: 1200px
|
xl: 1200px
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,13 @@
|
|||||||
// Body
|
// Sections
|
||||||
|
|
||||||
$body-bg: #f8f9fe !default;
|
// $section-colors: () !default;
|
||||||
$body-color: $gray-700 !default;
|
// $section-colors: map-merge(
|
||||||
|
// (
|
||||||
|
// "primary": $body-bg,
|
||||||
|
// "secondary": $secondary,
|
||||||
|
// "light": $gray-400,
|
||||||
|
// "dark": $dark,
|
||||||
|
// "darker": $darker
|
||||||
|
// ),
|
||||||
|
// $section-colors
|
||||||
|
// );
|
||||||
|
|||||||
BIN
frontend/src/assets/scss/fonts/WorkSans-VariableFont_wght.ttf
Normal file
BIN
frontend/src/assets/scss/fonts/WorkSans-VariableFont_wght.ttf
Normal file
Binary file not shown.
183
frontend/src/assets/scss/gradido-template.scss
Normal file
183
frontend/src/assets/scss/gradido-template.scss
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
html,
|
||||||
|
body {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pointer {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-grey {
|
||||||
|
color: #383838 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-blau {
|
||||||
|
color: #0e79bc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navbar */
|
||||||
|
a,
|
||||||
|
.navbar-light .navbar-nav .nav-link {
|
||||||
|
color: #047006;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-light .navbar-nav .nav-link.active {
|
||||||
|
color: rgb(35 121 188 / 90%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-gradido {
|
||||||
|
color: rgb(249 205 105 / 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradient-gradido {
|
||||||
|
background-image: linear-gradient(146deg, rgb(220 167 44) 50%, rgb(197 141 56 / 100%) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Button */
|
||||||
|
.btn {
|
||||||
|
border-radius: 25px;
|
||||||
|
padding-right: 50px;
|
||||||
|
padding-left: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-gradido {
|
||||||
|
background-image: linear-gradient(146deg, rgb(220 167 44) 50%, rgb(197 141 56 / 100%) 100%);
|
||||||
|
background-size: auto;
|
||||||
|
background-position: 0% 0%;
|
||||||
|
background-repeat: repeat;
|
||||||
|
border-style: none;
|
||||||
|
box-shadow: 10px 10px 50px 10px rgb(56 56 56 / 31%);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-gradido:hover {
|
||||||
|
color: #212529;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-gradido:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline-gradido {
|
||||||
|
color: rgb(140 121 88);
|
||||||
|
border: 1px solid #f5b805;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control,
|
||||||
|
.custom-select {
|
||||||
|
border-radius: 17px;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rounded-right {
|
||||||
|
border-top-right-radius: 17px !important;
|
||||||
|
border-bottom-right-radius: 17px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert-success {
|
||||||
|
background-color: #d4edda;
|
||||||
|
border-color: #c3e6cb;
|
||||||
|
color: #155724;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert-danger {
|
||||||
|
color: #721c24;
|
||||||
|
background-color: #f8d7da;
|
||||||
|
border-color: #f5c6cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.b-toast-danger .toast .toast-header {
|
||||||
|
color: #721c24;
|
||||||
|
background-color: rgb(248 215 218 / 85%);
|
||||||
|
border-bottom-color: rgb(245 198 203 / 85%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.b-toast-danger .toast .toast-body {
|
||||||
|
background-color: rgb(252 237 238 / 85%);
|
||||||
|
border-color: rgb(245 198 203 / 85%);
|
||||||
|
color: #721c24;
|
||||||
|
}
|
||||||
|
|
||||||
|
.b-toast-success .toast .toast-header {
|
||||||
|
color: #155724;
|
||||||
|
background-color: rgb(212 237 218 / 58%);
|
||||||
|
border-bottom-color: rgb(195 230 203 / 85%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.b-toast-success .toast .toast-body {
|
||||||
|
color: #155724;
|
||||||
|
background-color: rgb(212 237 218 / 85%);
|
||||||
|
border-bottom-color: rgb(195 230 203 / 85%);
|
||||||
|
}
|
||||||
|
|
||||||
|
// .btn-primary pim {
|
||||||
|
.btn-primary {
|
||||||
|
background-color: #5a7b02;
|
||||||
|
border-color: #5e72e4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-font-large {
|
||||||
|
font-size: large;
|
||||||
|
height: auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.font2em {
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zindex10 {
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zindex100 {
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zindex1000 {
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zindex10000 {
|
||||||
|
z-index: 10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zindex100000 {
|
||||||
|
z-index: 100000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-global-color-blue {
|
||||||
|
color: #0e79bc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-global-color-accent {
|
||||||
|
color: #047006;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-global-color-gray {
|
||||||
|
color: #858383;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-custom-background {
|
||||||
|
background-color: #ebebeba3 !important;
|
||||||
|
border-radius: 25pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-width-300 {
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-width-96 {
|
||||||
|
width: 96%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-no-border-radius {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-no-border {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradido-font-15rem {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
@ -51,165 +51,4 @@
|
|||||||
|
|
||||||
// Bootstrap-vue (2.21.1) scss
|
// Bootstrap-vue (2.21.1) scss
|
||||||
@import "~bootstrap-vue/src/index";
|
@import "~bootstrap-vue/src/index";
|
||||||
|
@import "gradido-template";
|
||||||
.alert-success {
|
|
||||||
color: #155724;
|
|
||||||
background-color: #d4edda;
|
|
||||||
border-color: #c3e6cb;
|
|
||||||
}
|
|
||||||
|
|
||||||
.alert-danger {
|
|
||||||
color: #721c24;
|
|
||||||
background-color: #f8d7da;
|
|
||||||
border-color: #f5c6cb;
|
|
||||||
}
|
|
||||||
|
|
||||||
.b-toast-danger .toast .toast-header {
|
|
||||||
color: #721c24;
|
|
||||||
background-color: rgb(248 215 218 / 85%);
|
|
||||||
border-bottom-color: rgb(245 198 203 / 85%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.b-toast-danger .toast .toast-body {
|
|
||||||
background-color: rgb(252 237 238 / 85%);
|
|
||||||
border-color: rgb(245 198 203 / 85%);
|
|
||||||
color: #721c24;
|
|
||||||
}
|
|
||||||
|
|
||||||
.b-toast-success .toast .toast-header {
|
|
||||||
color: #155724;
|
|
||||||
background-color: rgb(212 237 218 / 58%);
|
|
||||||
border-bottom-color: rgb(195 230 203 / 85%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.b-toast-success .toast .toast-body {
|
|
||||||
color: #155724;
|
|
||||||
background-color: rgb(212 237 218 / 85%);
|
|
||||||
border-bottom-color: rgb(195 230 203 / 85%);
|
|
||||||
}
|
|
||||||
|
|
||||||
// .btn-primary pim {
|
|
||||||
.btn-primary {
|
|
||||||
background-color: #5a7b02;
|
|
||||||
border-color: #5e72e4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-font-large {
|
|
||||||
font-size: large;
|
|
||||||
height: auto !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
a,
|
|
||||||
.copyright {
|
|
||||||
color: #5a7b02;
|
|
||||||
}
|
|
||||||
|
|
||||||
.font12em {
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.font2em {
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-text {
|
|
||||||
color: #3d443b;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-accent {
|
|
||||||
color: #047006;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-6e0a9c9e {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-2d0fb154 {
|
|
||||||
color: #047006;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-16efe88c {
|
|
||||||
color: #7ebc55;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-1939326 {
|
|
||||||
color: #f6fff6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-9d79fc1 {
|
|
||||||
color: #047006;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-6347f4d {
|
|
||||||
color: #5a7b02;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-4fbc19a {
|
|
||||||
color: #014034;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-d341874 {
|
|
||||||
color: #b6d939;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-619d338 {
|
|
||||||
color: #8ebfb1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-44819a9 {
|
|
||||||
color: #026873;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-global-color-gray {
|
|
||||||
color: #858383;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-custom-background {
|
|
||||||
background-color: #ebebeba3 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-shadow-inset {
|
|
||||||
box-shadow: inset 0.3em rgba(241 187 187 / 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-max-width {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-width-300 {
|
|
||||||
width: 300px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-absolute {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-width-95-absolute {
|
|
||||||
width: 95%;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-width-96-absolute {
|
|
||||||
width: 96%;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-no-border-radius {
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-no-border {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-background-f1 {
|
|
||||||
background-color: #f1f1f1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-background-white {
|
|
||||||
background-color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradido-font-15rem {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|||||||
29
frontend/src/components/Auth/Carousel.vue
Normal file
29
frontend/src/components/Auth/Carousel.vue
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<b-carousel :interval="3000">
|
||||||
|
<b-carousel-slide img-src="/img/template/Foto_01_2400_small.jpg"></b-carousel-slide>
|
||||||
|
<b-carousel-slide img-src="/img/template/Foto_02_2400_small.jpg"></b-carousel-slide>
|
||||||
|
<b-carousel-slide img-src="/img/template/Foto_03_2400_small.jpg"></b-carousel-slide>
|
||||||
|
<b-carousel-slide img-src="/img/template/Foto_04_2400_small.jpg"></b-carousel-slide>
|
||||||
|
</b-carousel>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'AuthCarousel',
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.carousel {
|
||||||
|
position: relative;
|
||||||
|
height: 110%;
|
||||||
|
top: -16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-inner {
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 0% 49% 49% 0% / 0% 51% 49% 0%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
53
frontend/src/components/Auth/Footer.vue
Normal file
53
frontend/src/components/Auth/Footer.vue
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<template>
|
||||||
|
<footer class="footer bg-transparent">
|
||||||
|
<b-row class="mt-lg-7 mt-md-6 mt-4">
|
||||||
|
<b-col class="col-12 col-md-12 col-lg-6">
|
||||||
|
<div
|
||||||
|
class="d-flex justify-content-center justify-content-md-center justify-content-lg-start ml-3"
|
||||||
|
>
|
||||||
|
<b-nav class="nav-footer">
|
||||||
|
<b-nav-item :href="`https://gradido.net/${$i18n.locale}/impressum/`" target="_blank">
|
||||||
|
{{ $t('footer.imprint') }}
|
||||||
|
</b-nav-item>
|
||||||
|
<b-nav-item :href="`https://gradido.net/${$i18n.locale}/datenschutz/`" target="_blank">
|
||||||
|
{{ $t('footer.privacy_policy') }}
|
||||||
|
</b-nav-item>
|
||||||
|
</b-nav>
|
||||||
|
</div>
|
||||||
|
</b-col>
|
||||||
|
<b-col class="col-12 col-md-12 col-lg-6 mt-4 mb-4 mt-lg-0 mb-lg-0">
|
||||||
|
<div class="text-center ml-3 ml-lg-0 text-lg-right">
|
||||||
|
{{ $t('followUs') }}
|
||||||
|
<b-icon-facebook class="ml-3 mr-3" font-scale="1"></b-icon-facebook>
|
||||||
|
<b-icon-twitter class="mr-3" font-scale="1"></b-icon-twitter>
|
||||||
|
<b-icon-youtube class="mr-3" font-scale="1"></b-icon-youtube>
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
fill="currentColor"
|
||||||
|
class="bi bi-telegram"
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.287 5.906c-.778.324-2.334.994-4.666 2.01-.378.15-.577.298-.595.442-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294.26.006.549-.1.868-.32 2.179-1.471 3.304-2.214 3.374-2.23.05-.012.12-.026.166.016.047.041.042.12.037.141-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8.154 8.154 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629.093.06.183.125.27.187.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.426 1.426 0 0 0-.013-.315.337.337 0 0 0-.114-.217.526.526 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
</footer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'AuthFooter',
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.bi-telegram {
|
||||||
|
margin-top: -5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
124
frontend/src/components/Auth/MobileStart.vue
Normal file
124
frontend/src/components/Auth/MobileStart.vue
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="mobil-start-box position-fixed h-100 d-inline d-sm-inline d-md-inline d-lg-none zindex1000"
|
||||||
|
>
|
||||||
|
<div class="position-absolute h1 text-white zindex1000 w-100 text-center mt-8">
|
||||||
|
{{ $t('auth.left.gratitude') }}
|
||||||
|
</div>
|
||||||
|
<div class="position-absolute h2 text-white zindex1000 w-100 text-center mt-9">
|
||||||
|
{{ $t('auth.left.newCurrency') }}
|
||||||
|
</div>
|
||||||
|
<img
|
||||||
|
src="img/template/Blaetter.png"
|
||||||
|
class="sheet-img position-absolute d-block d-lg-none zindex1000"
|
||||||
|
/>
|
||||||
|
<b-img
|
||||||
|
id="img0"
|
||||||
|
class="position-absolute zindex1000"
|
||||||
|
src="img/template/logo-header.png"
|
||||||
|
alt="start background image"
|
||||||
|
></b-img>
|
||||||
|
<b-img
|
||||||
|
fluid
|
||||||
|
id="img1"
|
||||||
|
class="position-absolute h-100 w-100 overflow-hidden zindex100"
|
||||||
|
src="img/template/gold_03.png"
|
||||||
|
alt="start background image"
|
||||||
|
></b-img>
|
||||||
|
<b-img
|
||||||
|
id="img2"
|
||||||
|
class="position-absolute zindex100"
|
||||||
|
src="img/template/gradido_background_header.png"
|
||||||
|
alt="start background image"
|
||||||
|
></b-img>
|
||||||
|
<b-img
|
||||||
|
id="img3"
|
||||||
|
class="position-relative zindex10"
|
||||||
|
src="img/template/Foto_01.jpg"
|
||||||
|
alt="start background image"
|
||||||
|
></b-img>
|
||||||
|
<div class="mobil-start-box-text position-fixed w-100 text-center zindex1000">
|
||||||
|
<b-button variant="gradido" to="/register" @click="$emit('is-mobile-start', false)">
|
||||||
|
{{ $t('signup') }}
|
||||||
|
</b-button>
|
||||||
|
<div class="mt-3 h3 text-white">
|
||||||
|
{{ $t('auth.left.hasAccount') }}
|
||||||
|
<b-link
|
||||||
|
to="/login"
|
||||||
|
class="text-gradido gradido-global-color-blue"
|
||||||
|
@click="$emit('is-mobile-start', false)"
|
||||||
|
>
|
||||||
|
{{ $t('auth.left.hereLogin') }}
|
||||||
|
</b-link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'AuthMobileStart',
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.mobil-start-box-text {
|
||||||
|
bottom: 65px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* logo */
|
||||||
|
.mobil-start-box #img0 {
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* background logo */
|
||||||
|
.mobil-start-box #img2 {
|
||||||
|
width: 230px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* background maske */
|
||||||
|
@media screen and (max-width: 1024px) {
|
||||||
|
.mobil-start-box #img3 {
|
||||||
|
width: 100%;
|
||||||
|
top: -100px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 991px) {
|
||||||
|
.mobil-start-box #img3 {
|
||||||
|
width: 100%;
|
||||||
|
top: -148px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-height: 740px) {
|
||||||
|
.mobil-start-box #img3 {
|
||||||
|
width: 115%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 650px) {
|
||||||
|
.mobil-start-box #img3 {
|
||||||
|
width: 115%;
|
||||||
|
top: 66px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 450px) {
|
||||||
|
.mobil-start-box #img3 {
|
||||||
|
width: 160%;
|
||||||
|
left: -71px;
|
||||||
|
top: 35px;
|
||||||
|
min-width: 360px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 310px) {
|
||||||
|
.mobil-start-box #img3 {
|
||||||
|
width: 145%;
|
||||||
|
left: -94px;
|
||||||
|
top: 24px;
|
||||||
|
min-width: 360px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
73
frontend/src/components/Auth/Navbar.vue
Normal file
73
frontend/src/components/Auth/Navbar.vue
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
<template>
|
||||||
|
<div class="auth-header position-sticky">
|
||||||
|
<b-navbar toggleable="lg" class="pr-4">
|
||||||
|
<b-navbar-brand>
|
||||||
|
<b-img
|
||||||
|
class="imgLogo position-absolute ml--3 mt--3 p-2 zindex1000"
|
||||||
|
:src="logo"
|
||||||
|
width="200"
|
||||||
|
alt="..."
|
||||||
|
/>
|
||||||
|
<b-img
|
||||||
|
class="imgLogoBack mt--3 ml--3"
|
||||||
|
src="img/template/gradido_background_header.png"
|
||||||
|
width="230"
|
||||||
|
alt="start background image"
|
||||||
|
></b-img>
|
||||||
|
</b-navbar-brand>
|
||||||
|
<b-img class="sheet-img position-absolute d-block d-lg-none zindex1000" :src="sheet"></b-img>
|
||||||
|
<b-navbar-toggle target="nav-collapse" class="zindex1000"></b-navbar-toggle>
|
||||||
|
|
||||||
|
<b-collapse id="nav-collapse" is-nav class="mt-5 mt-lg-0">
|
||||||
|
<b-navbar-nav class="ml-auto" right>
|
||||||
|
<b-nav-item href="https://gradido.net/de/" target="_blank">
|
||||||
|
{{ $t('auth.navbar.aboutGradido') }}
|
||||||
|
</b-nav-item>
|
||||||
|
<b-nav-item to="/register" class="authNavbar ml-lg-5">{{ $t('signup') }}</b-nav-item>
|
||||||
|
<span class="d-none d-lg-block mt-1">{{ $t('math.pipe') }}</span>
|
||||||
|
<b-nav-item to="/login" class="authNavbar">{{ $t('signin') }}</b-nav-item>
|
||||||
|
</b-navbar-nav>
|
||||||
|
</b-collapse>
|
||||||
|
</b-navbar>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'AuthNavbar',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
logo: 'img/brand/green.png',
|
||||||
|
sheet: 'img/template/Blaetter.png',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.authNavbar > .nav-link {
|
||||||
|
color: #383838 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.authNavbar > .router-link-exact-active {
|
||||||
|
color: #0e79bc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-header {
|
||||||
|
font-family: 'Open Sans', sans-serif !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sheet-img {
|
||||||
|
top: -11px;
|
||||||
|
right: 7%;
|
||||||
|
max-width: 64%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 450px) {
|
||||||
|
.sheet-img {
|
||||||
|
top: -15px;
|
||||||
|
right: 0%;
|
||||||
|
max-width: 61%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
17
frontend/src/components/Auth/NavbarSmall.vue
Normal file
17
frontend/src/components/Auth/NavbarSmall.vue
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<template>
|
||||||
|
<div class="navbar-small">
|
||||||
|
<b-navbar>
|
||||||
|
<b-navbar-nav>
|
||||||
|
<b-nav-item to="/register" class="authNavbar">{{ $t('signup') }}</b-nav-item>
|
||||||
|
<span class="mt-1">{{ $t('math.pipe') }}</span>
|
||||||
|
<b-nav-item to="/login" class="authNavbar">{{ $t('signin') }}</b-nav-item>
|
||||||
|
</b-navbar-nav>
|
||||||
|
</b-navbar>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'NavbarSmall',
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="collapse-links-list">
|
<div class="collapse-links-list">
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<div class="gradido-max-width">
|
<div class="w-100">
|
||||||
<hr />
|
<hr />
|
||||||
<div>
|
<div>
|
||||||
<transaction-link
|
<transaction-link
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import { mount } from '@vue/test-utils'
|
|||||||
import TransactionForm from './TransactionForm'
|
import TransactionForm from './TransactionForm'
|
||||||
import flushPromises from 'flush-promises'
|
import flushPromises from 'flush-promises'
|
||||||
import { SEND_TYPES } from '@/pages/Send.vue'
|
import { SEND_TYPES } from '@/pages/Send.vue'
|
||||||
import DashboardLayout from '@/layouts/DashboardLayout_gdd.vue'
|
import DashboardLayout from '@/layouts/DashboardLayout.vue'
|
||||||
|
|
||||||
const localVue = global.localVue
|
const localVue = global.localVue
|
||||||
|
|
||||||
|
|||||||
75
frontend/src/components/LanguageSwitch2.vue
Normal file
75
frontend/src/components/LanguageSwitch2.vue
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<template>
|
||||||
|
<div class="language-switch">
|
||||||
|
<span
|
||||||
|
v-for="(lang, index) in locales"
|
||||||
|
@click.prevent="saveLocale(lang.code)"
|
||||||
|
:key="lang.code"
|
||||||
|
class="pointer pr-3"
|
||||||
|
:class="$store.state.language === lang.code ? 'c-blau' : 'c-grey'"
|
||||||
|
>
|
||||||
|
{{ lang.name }}
|
||||||
|
<span class="ml-3">{{ locales.length - 1 > index ? $t('math.pipe') : '' }}</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import locales from '@/locales/'
|
||||||
|
import { updateUserInfos } from '@/graphql/mutations'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LanguageSwitch',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
locales: locales,
|
||||||
|
currentLanguage: {},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setLocale(locale) {
|
||||||
|
this.$store.commit('language', locale)
|
||||||
|
this.currentLanguage = this.getLocaleObject(locale)
|
||||||
|
},
|
||||||
|
async saveLocale(locale) {
|
||||||
|
if (this.$i18n.locale === locale) return
|
||||||
|
this.setLocale(locale)
|
||||||
|
if (this.$store.state.email) {
|
||||||
|
this.$apollo
|
||||||
|
.mutate({
|
||||||
|
mutation: updateUserInfos,
|
||||||
|
variables: {
|
||||||
|
locale: locale,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
// toast success message
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
// toast error message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getLocaleObject(code) {
|
||||||
|
return this.locales.find((l) => l.code === code)
|
||||||
|
},
|
||||||
|
getNavigatorLanguage() {
|
||||||
|
const lang = navigator.language
|
||||||
|
if (lang) return lang.split('-')[0]
|
||||||
|
return lang
|
||||||
|
},
|
||||||
|
setCurrentLanguage() {
|
||||||
|
let locale = this.$store.state.language || this.getNavigatorLanguage() || 'en'
|
||||||
|
let object = this.getLocaleObject(locale)
|
||||||
|
if (!object) {
|
||||||
|
locale = 'en'
|
||||||
|
object = this.getLocaleObject(locale)
|
||||||
|
}
|
||||||
|
this.setLocale(locale)
|
||||||
|
this.currentLanguage = object
|
||||||
|
},
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.setCurrentLanguage()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="component-navbar gradido-background-white">
|
<div class="component-navbar">
|
||||||
<b-navbar toggleable="lg" type="light" variant="faded">
|
<b-navbar toggleable="lg" type="light" variant="faded">
|
||||||
<div class="navbar-brand">
|
<div class="navbar-brand">
|
||||||
<b-navbar-nav @click="$emit('set-visible', false)">
|
<b-navbar-nav @click="$emit('set-visible', false)">
|
||||||
|
|||||||
@ -3,12 +3,12 @@
|
|||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
<div class="list-group-item gdt-transaction-list-item" v-b-toggle="collapseId">
|
<div class="list-group-item gdt-transaction-list-item" v-b-toggle="collapseId">
|
||||||
<!-- icon -->
|
<!-- icon -->
|
||||||
<div class="text-right gradido-absolute">
|
<div class="text-right position-absolute">
|
||||||
<b-icon :icon="getLinesByType.icon" :class="getLinesByType.iconclasses"></b-icon>
|
<b-icon :icon="getLinesByType.icon" :class="getLinesByType.iconclasses"></b-icon>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- collaps Button -->
|
<!-- collaps Button -->
|
||||||
<div class="text-right gradido-width-96-absolute">
|
<div class="text-right gradido-width-96 position-absolute">
|
||||||
<b-icon
|
<b-icon
|
||||||
:icon="getCollapseState(id) ? 'caret-up-square' : 'caret-down-square'"
|
:icon="getCollapseState(id) ? 'caret-up-square' : 'caret-down-square'"
|
||||||
:class="getCollapseState(id) ? 'text-black' : 'text-muted'"
|
:class="getCollapseState(id) ? 'text-black' : 'text-muted'"
|
||||||
|
|||||||
79
frontend/src/layouts/AuthLayout.spec.js
Normal file
79
frontend/src/layouts/AuthLayout.spec.js
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import { mount, RouterLinkStub } from '@vue/test-utils'
|
||||||
|
import AuthLayout from './AuthLayout'
|
||||||
|
|
||||||
|
const localVue = global.localVue
|
||||||
|
|
||||||
|
describe('AuthLayout', () => {
|
||||||
|
let wrapper
|
||||||
|
|
||||||
|
const mocks = {
|
||||||
|
$i18n: {
|
||||||
|
locale: 'en',
|
||||||
|
},
|
||||||
|
$t: jest.fn((t) => t),
|
||||||
|
$store: {
|
||||||
|
state: {},
|
||||||
|
commit: jest.fn(),
|
||||||
|
},
|
||||||
|
$route: {
|
||||||
|
meta: {
|
||||||
|
requiresAuth: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const stubs = {
|
||||||
|
RouterLink: RouterLinkStub,
|
||||||
|
RouterView: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
const Wrapper = () => {
|
||||||
|
return mount(AuthLayout, { localVue, mocks, stubs })
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('mount', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
wrapper = Wrapper()
|
||||||
|
})
|
||||||
|
describe('Mobile Version Start', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
wrapper.vm.mobileStart = true
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has Component AuthMobileStart', () => {
|
||||||
|
expect(wrapper.findComponent({ name: 'AuthMobileStart' }).exists()).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('Desktop Version Start', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
wrapper.vm.mobileStart = false
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has Component AuthNavbar', () => {
|
||||||
|
expect(wrapper.findComponent({ name: 'AuthNavbar' }).exists()).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has Component AuthCarousel', () => {
|
||||||
|
expect(wrapper.findComponent({ name: 'AuthCarousel' }).exists()).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has Component AuthFooter', () => {
|
||||||
|
expect(wrapper.findComponent({ name: 'AuthFooter' }).exists()).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has no sidebar', () => {
|
||||||
|
expect(wrapper.find('nav#sidenav-main').exists()).not.toBeTruthy()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has LanguageSwitch', () => {
|
||||||
|
expect(wrapper.findComponent({ name: 'LanguageSwitch' }).exists()).toBeTruthy()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('test size in setTextSize ', () => {
|
||||||
|
wrapper.vm.setTextSize('85')
|
||||||
|
expect(wrapper.vm.$refs.pageFontSize.style.fontSize).toBe('85rem')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
178
frontend/src/layouts/AuthLayout.vue
Normal file
178
frontend/src/layouts/AuthLayout.vue
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
<template>
|
||||||
|
<div class="auth-template">
|
||||||
|
<mobile-start
|
||||||
|
v-if="mobileStart"
|
||||||
|
class="d-inline d-lg-none zindex10000"
|
||||||
|
@is-mobile-start="setMobileStart"
|
||||||
|
/>
|
||||||
|
<div class="h-100 align-middle">
|
||||||
|
<navbar class="zindex10" />
|
||||||
|
|
||||||
|
<div class="left-content-box position-fixed d-none d-lg-block">
|
||||||
|
<div class="bg-img-box position-absolute w-100">
|
||||||
|
<carousel class="carousel" />
|
||||||
|
</div>
|
||||||
|
<div class="bg-txt-box position-relative d-none d-lg-block text-center align-self-center">
|
||||||
|
<div class="h0 text-white">{{ $t('auth.left.gratitude') }}</div>
|
||||||
|
<div class="h1 text-white">{{ $t('auth.left.newCurrency') }}</div>
|
||||||
|
<div class="h2 text-white">{{ $t('auth.left.oneAnotherNature') }}</div>
|
||||||
|
<b-button variant="gradido">{{ $t('auth.left.learnMore') }}</b-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<b-row class="justify-content-md-center">
|
||||||
|
<b-col sm="12" md="8" offset-lg="6" lg="6" class="zindex1000">
|
||||||
|
<div class="right-content-box ml-3 ml-sm-4 mr-3 mr-sm-4">
|
||||||
|
<b-row class="d-none d-md-block d-lg-none">
|
||||||
|
<b-col class="mb--4 d-flex justify-content-end">
|
||||||
|
<navbar-small />
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
<b-row class="mt-5 pl-2 pl-md-0 pl-lg-0">
|
||||||
|
<b-col cols="9">
|
||||||
|
<div class="h1 mb--2">{{ $t('welcome') }}</div>
|
||||||
|
<div class="h1 mb-0">{{ $t('WelcomeBy', { name: communityName }) }}</div>
|
||||||
|
<div class="mb-0">{{ $t('1000thanks') }}</div>
|
||||||
|
</b-col>
|
||||||
|
<b-col cols="3" class="text-right d-none d-sm-none d-md-inline">
|
||||||
|
<b-avatar src="img/brand/gradido_coin●.png" size="6rem"></b-avatar>
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
<b-card no-body ref="pageFontSize" class="border-0 mt-4 gradido-custom-background">
|
||||||
|
<b-row class="p-4">
|
||||||
|
<b-col cols="10">
|
||||||
|
<language-switch class="ml-3" />
|
||||||
|
</b-col>
|
||||||
|
<b-col cols="2" class="text-right">
|
||||||
|
<div id="popover-target-1" class="pointer">
|
||||||
|
<b-img src="img/svg/type.svg" width="19" class="svgType"></b-img>
|
||||||
|
</div>
|
||||||
|
<b-popover
|
||||||
|
target="popover-target-1"
|
||||||
|
triggers="click"
|
||||||
|
placement="top"
|
||||||
|
variant="dark"
|
||||||
|
>
|
||||||
|
<div class="text-light">
|
||||||
|
<span class="pointer" @click="setTextSize(0.85)">{{ $t('85') }}</span>
|
||||||
|
{{ $t('math.pipe') }}
|
||||||
|
<span class="pointer" @click="setTextSize(1)">{{ $t('100') }}</span>
|
||||||
|
{{ $t('math.pipe') }}
|
||||||
|
<span class="pointer" @click="setTextSize(1.25)">{{ $t('125') }}</span>
|
||||||
|
</div>
|
||||||
|
</b-popover>
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
<b-row class="d-inline d-sm-inline d-md-none d-lg-none mb-3">
|
||||||
|
<b-col class="text-center">
|
||||||
|
<b-avatar src="img/brand/gradido_coin●.png" size="6rem"></b-avatar>
|
||||||
|
<b-row>
|
||||||
|
<b-col class="zindex1000 d-flex justify-content-center">
|
||||||
|
<navbar-small />
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
<b-card-body class="">
|
||||||
|
<router-view></router-view>
|
||||||
|
</b-card-body>
|
||||||
|
</b-card>
|
||||||
|
</div>
|
||||||
|
<auth-footer v-if="!$route.meta.hideFooter" class="pr-5"></auth-footer>
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
<!-- <auth-layout-gdd />-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import MobileStart from '@/components/Auth/MobileStart.vue'
|
||||||
|
import Navbar from '@/components/Auth/Navbar.vue'
|
||||||
|
import NavbarSmall from '@/components/Auth/NavbarSmall.vue'
|
||||||
|
import Carousel from '@/components/Auth/Carousel.vue'
|
||||||
|
import LanguageSwitch from '@/components/LanguageSwitch2'
|
||||||
|
import AuthFooter from '@/components/Auth/Footer.vue'
|
||||||
|
import CONFIG from '@/config'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'AuthLayout',
|
||||||
|
components: {
|
||||||
|
MobileStart,
|
||||||
|
Navbar,
|
||||||
|
NavbarSmall,
|
||||||
|
Carousel,
|
||||||
|
LanguageSwitch,
|
||||||
|
AuthFooter,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
mobileStart: true,
|
||||||
|
communityName: CONFIG.COMMUNITY_NAME,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setMobileStart(boolean) {
|
||||||
|
this.mobileStart = boolean
|
||||||
|
},
|
||||||
|
setTextSize(size) {
|
||||||
|
this.$refs.pageFontSize.style.fontSize = size + 'rem'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
/* left */
|
||||||
|
.left-content-box {
|
||||||
|
width: 40%;
|
||||||
|
top: 0px;
|
||||||
|
bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-img-box {
|
||||||
|
top: 0px;
|
||||||
|
bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* right */
|
||||||
|
.right-content-box {
|
||||||
|
max-width: 640px;
|
||||||
|
}
|
||||||
|
.page-font-size {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
.auth-template {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-txt-box {
|
||||||
|
margin-top: 317px;
|
||||||
|
text-shadow: 2px 2px 8px #000000;
|
||||||
|
max-width: 733px;
|
||||||
|
}
|
||||||
|
.bg-txt-box > .h0 {
|
||||||
|
font-size: 4em;
|
||||||
|
text-shadow: -2px -2px -8px #e4a907;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-txt-box .h1,
|
||||||
|
.bg-txt-box .h2 {
|
||||||
|
font-size: 1.5em;
|
||||||
|
text-shadow: -2px -2px -8px #e4a907;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-img {
|
||||||
|
border-radius: 0% 50% 70% 0% / 50% 70% 70% 50%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svgType:hover {
|
||||||
|
filter: invert(38%) sepia(18%) saturate(5307%) hue-rotate(179deg) brightness(89%) contrast(89%);
|
||||||
|
}
|
||||||
|
@media screen and (min-width: 2000px) {
|
||||||
|
.right-content-box {
|
||||||
|
max-width: 60%;
|
||||||
|
font-size: xx-large;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -1,67 +0,0 @@
|
|||||||
import { mount } from '@vue/test-utils'
|
|
||||||
import AuthLayoutGdd from './AuthLayout_gdd'
|
|
||||||
|
|
||||||
const localVue = global.localVue
|
|
||||||
|
|
||||||
describe('AuthLayoutGdd', () => {
|
|
||||||
let wrapper
|
|
||||||
|
|
||||||
const mocks = {
|
|
||||||
$i18n: {
|
|
||||||
locale: 'en',
|
|
||||||
},
|
|
||||||
$t: jest.fn((t) => t),
|
|
||||||
$route: {
|
|
||||||
meta: {
|
|
||||||
hideFooter: false,
|
|
||||||
},
|
|
||||||
path: '/',
|
|
||||||
},
|
|
||||||
$store: {
|
|
||||||
state: {},
|
|
||||||
commit: jest.fn(),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
const stubs = {
|
|
||||||
// RouterLink: RouterLinkStub,
|
|
||||||
RouterView: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
const Wrapper = () => {
|
|
||||||
return mount(AuthLayoutGdd, { localVue, mocks, stubs })
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('mount', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
wrapper = Wrapper()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has no sidebar', () => {
|
|
||||||
expect(wrapper.find('nav#sidenav-main').exists()).not.toBeTruthy()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a main content div', () => {
|
|
||||||
expect(wrapper.find('div.main-content').exists()).toBeTruthy()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a footer inside the main content', () => {
|
|
||||||
expect(wrapper.find('div.main-content').find('footer.footer').exists()).toBeTruthy()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has LanguageSwitch', () => {
|
|
||||||
expect(wrapper.findComponent({ name: 'LanguageSwitch' }).exists()).toBeTruthy()
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('check LanguageSwitch on register page', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
mocks.$route.path = '/register'
|
|
||||||
wrapper = Wrapper()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has not LanguageSwitch', () => {
|
|
||||||
expect(wrapper.findComponent({ name: 'LanguageSwitch' }).exists()).toBeFalsy()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="wrapper">
|
|
||||||
<div class="main-content mt-4">
|
|
||||||
<router-view></router-view>
|
|
||||||
<language-switch v-if="$route.path !== '/register'" class="text-center mb-5 mt-5" />
|
|
||||||
<content-footer v-if="!$route.meta.hideFooter"></content-footer>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
import ContentFooter from '@/components/ContentFooter.vue'
|
|
||||||
import LanguageSwitch from '@/components/LanguageSwitch.vue'
|
|
||||||
export default {
|
|
||||||
components: {
|
|
||||||
ContentFooter,
|
|
||||||
LanguageSwitch,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
import { mount, RouterLinkStub } from '@vue/test-utils'
|
import { mount, RouterLinkStub } from '@vue/test-utils'
|
||||||
import flushPromises from 'flush-promises'
|
import flushPromises from 'flush-promises'
|
||||||
import DashboardLayoutGdd from './DashboardLayout_gdd'
|
import DashboardLayout from './DashboardLayout'
|
||||||
|
|
||||||
import { toastErrorSpy } from '@test/testSetup'
|
import { toastErrorSpy } from '@test/testSetup'
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ const apolloMock = jest.fn().mockResolvedValue({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('DashboardLayoutGdd', () => {
|
describe('DashboardLayout', () => {
|
||||||
let wrapper
|
let wrapper
|
||||||
|
|
||||||
const mocks = {
|
const mocks = {
|
||||||
@ -61,7 +61,7 @@ describe('DashboardLayoutGdd', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const Wrapper = () => {
|
const Wrapper = () => {
|
||||||
return mount(DashboardLayoutGdd, { localVue, mocks, stubs })
|
return mount(DashboardLayout, { localVue, mocks, stubs })
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('mount', () => {
|
describe('mount', () => {
|
||||||
@ -15,7 +15,7 @@
|
|||||||
<sidebar class="main-sidebar" :elopageUri="elopageUri" @admin="admin" @logout="logout" />
|
<sidebar class="main-sidebar" :elopageUri="elopageUri" @admin="admin" @logout="logout" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="main-page gradido-max-width" @click="visible = false">
|
<div class="main-page w-100" @click="visible = false">
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<fade-transition :duration="200" origin="center top" mode="out-in">
|
<fade-transition :duration="200" origin="center top" mode="out-in">
|
||||||
<router-view
|
<router-view
|
||||||
@ -45,6 +45,7 @@ import { FadeTransition } from 'vue2-transitions'
|
|||||||
import CONFIG from '@/config'
|
import CONFIG from '@/config'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
name: 'DashboardLayout',
|
||||||
components: {
|
components: {
|
||||||
Navbar,
|
Navbar,
|
||||||
Sidebar,
|
Sidebar,
|
||||||
@ -1,5 +1,22 @@
|
|||||||
{
|
{
|
||||||
|
"100": "100%",
|
||||||
|
"1000thanks": "1000 Dank, weil du bei uns bist!",
|
||||||
|
"125": "125%",
|
||||||
|
"85": "85%",
|
||||||
"advanced-calculation": "Vorausberechnung",
|
"advanced-calculation": "Vorausberechnung",
|
||||||
|
"auth": {
|
||||||
|
"left": {
|
||||||
|
"gratitude": "Dankbarkeit",
|
||||||
|
"hasAccount": "Du hast schon einen Account?",
|
||||||
|
"hereLogin": "Hier Anmelden",
|
||||||
|
"learnMore": "Erfahre mehr …",
|
||||||
|
"newCurrency": "Die neue Währung",
|
||||||
|
"oneAnotherNature": "FÜR EINANDER, FÜR ALLE, FÜR DIE NATUR"
|
||||||
|
},
|
||||||
|
"navbar": {
|
||||||
|
"aboutGradido": "Über Gradido"
|
||||||
|
}
|
||||||
|
},
|
||||||
"back": "Zurück",
|
"back": "Zurück",
|
||||||
"community": {
|
"community": {
|
||||||
"choose-another-community": "Eine andere Gemeinschaft auswählen",
|
"choose-another-community": "Eine andere Gemeinschaft auswählen",
|
||||||
@ -40,6 +57,7 @@
|
|||||||
"unknown-error": "Unbekanter Fehler: ",
|
"unknown-error": "Unbekanter Fehler: ",
|
||||||
"user-already-exists": "Ein Benutzer mit diesen Daten existiert bereits."
|
"user-already-exists": "Ein Benutzer mit diesen Daten existiert bereits."
|
||||||
},
|
},
|
||||||
|
"followUs": "folge uns:",
|
||||||
"footer": {
|
"footer": {
|
||||||
"app_version": "App version {version}",
|
"app_version": "App version {version}",
|
||||||
"copyright": {
|
"copyright": {
|
||||||
@ -164,10 +182,6 @@
|
|||||||
"support": "Support",
|
"support": "Support",
|
||||||
"transactions": "Transaktionen"
|
"transactions": "Transaktionen"
|
||||||
},
|
},
|
||||||
"publisher": {
|
|
||||||
"infoText": "Wenn dir dein Empfehlungsgeber seine Publisher-Id gegeben hat, trage sie hier ein, sonst lass das Feld bitte unverändert!",
|
|
||||||
"publisherId": "Publisher-Id:"
|
|
||||||
},
|
|
||||||
"qrCode": "QR Code",
|
"qrCode": "QR Code",
|
||||||
"send_gdd": "GDD versenden",
|
"send_gdd": "GDD versenden",
|
||||||
"send_per_link": "GDD versenden per Link",
|
"send_per_link": "GDD versenden per Link",
|
||||||
@ -208,24 +222,28 @@
|
|||||||
"subtitle": "Wenn du dein Passwort vergessen hast, kannst du es hier zurücksetzen."
|
"subtitle": "Wenn du dein Passwort vergessen hast, kannst du es hier zurücksetzen."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"signin": "Anmelden",
|
||||||
"signup": "Registrieren",
|
"signup": "Registrieren",
|
||||||
"site": {
|
"site": {
|
||||||
|
"forgotPassword": {
|
||||||
|
"heading": "Bitte gib deine E-Mail an mit der du bei Gradido angemeldet bist."
|
||||||
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"community": "Tausend Dank, weil du bei uns bist!",
|
"heading": "Melde dich mit deinen Zugangsdaten an. Bewahre sie stets sicher auf!",
|
||||||
"heading": "Gradido",
|
"saveLogin": "Anmeldung speichern"
|
||||||
"new_wallet": "Neues Konto erstellen",
|
},
|
||||||
"signin": "Anmelden"
|
"resetPassword": {
|
||||||
|
"heading": "Trage bitte dein Passwort ein und wiederhole es."
|
||||||
},
|
},
|
||||||
"signup": {
|
"signup": {
|
||||||
"agree": "Ich stimme der <a href='https://gradido.net/de/datenschutz/' target='_blank' >Datenschutzerklärung</a> zu.",
|
"agree": "Ich stimme der <a href='https://gradido.net/de/datenschutz/' target='_blank' >Datenschutzerklärung</a> zu.",
|
||||||
"dont_match": "Die Passwörter stimmen nicht überein.",
|
"dont_match": "Die Passwörter stimmen nicht überein.",
|
||||||
|
"heading": "Registriere dich indem du alle Daten vollständig und in die richtigen Felder eingibst.",
|
||||||
"lowercase": "Ein Kleinbuchstabe erforderlich.",
|
"lowercase": "Ein Kleinbuchstabe erforderlich.",
|
||||||
"minimum": "Mindestens 8 Zeichen.",
|
"minimum": "Mindestens 8 Zeichen.",
|
||||||
"no-whitespace": "Keine Leerzeichen und Tabulatoren",
|
"no-whitespace": "Keine Leerzeichen und Tabulatoren",
|
||||||
"one_number": "Zahl erforderlich.",
|
"one_number": "Zahl erforderlich.",
|
||||||
"special-char": "Sonderzeichen erforderlich (z.B. _ oder ä)",
|
"special-char": "Sonderzeichen erforderlich (z.B. _ oder ä)",
|
||||||
"subtitle": "Werde Teil der Gemeinschaft!",
|
|
||||||
"title": "Erstelle dein Gradido-Konto",
|
|
||||||
"uppercase": "Großbuchstabe erforderlich."
|
"uppercase": "Großbuchstabe erforderlich."
|
||||||
},
|
},
|
||||||
"thx": {
|
"thx": {
|
||||||
@ -261,5 +279,7 @@
|
|||||||
"transaction-link": {
|
"transaction-link": {
|
||||||
"send_you": "sendet dir"
|
"send_you": "sendet dir"
|
||||||
},
|
},
|
||||||
"via_link": "über einen Link"
|
"via_link": "über einen Link",
|
||||||
|
"welcome": "Willkommen",
|
||||||
|
"WelcomeBy": "bei {name}"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,22 @@
|
|||||||
{
|
{
|
||||||
|
"100": "100%",
|
||||||
|
"1000thanks": "1000 thanks for being with us!",
|
||||||
|
"125": "125%",
|
||||||
|
"85": "85%",
|
||||||
"advanced-calculation": "Advanced calculation",
|
"advanced-calculation": "Advanced calculation",
|
||||||
|
"auth": {
|
||||||
|
"left": {
|
||||||
|
"gratitude": "Gratitude",
|
||||||
|
"hasAccount": "You already have an account?",
|
||||||
|
"hereLogin": "Log in here",
|
||||||
|
"learnMore": "Learn more …",
|
||||||
|
"newCurrency": "The new currency",
|
||||||
|
"oneAnotherNature": "FOR ONE ANOTHER, FOR ALL, FOR NATURE"
|
||||||
|
},
|
||||||
|
"navbar": {
|
||||||
|
"aboutGradido": "About Gradido"
|
||||||
|
}
|
||||||
|
},
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"community": {
|
"community": {
|
||||||
"choose-another-community": "Choose another community",
|
"choose-another-community": "Choose another community",
|
||||||
@ -40,6 +57,7 @@
|
|||||||
"unknown-error": "Unknown error: ",
|
"unknown-error": "Unknown error: ",
|
||||||
"user-already-exists": "A user with this data already exists."
|
"user-already-exists": "A user with this data already exists."
|
||||||
},
|
},
|
||||||
|
"followUs": "follow us:",
|
||||||
"footer": {
|
"footer": {
|
||||||
"app_version": "App version {version}",
|
"app_version": "App version {version}",
|
||||||
"copyright": {
|
"copyright": {
|
||||||
@ -164,10 +182,6 @@
|
|||||||
"support": "Support",
|
"support": "Support",
|
||||||
"transactions": "Transactions"
|
"transactions": "Transactions"
|
||||||
},
|
},
|
||||||
"publisher": {
|
|
||||||
"infoText": "If your referrer has given you his publisher id, enter it here, otherwise leave the field unchanged!",
|
|
||||||
"publisherId": "PublisherID:"
|
|
||||||
},
|
|
||||||
"qrCode": "QR Code",
|
"qrCode": "QR Code",
|
||||||
"send_gdd": "GDD send",
|
"send_gdd": "GDD send",
|
||||||
"send_per_link": "GDD send via link",
|
"send_per_link": "GDD send via link",
|
||||||
@ -208,24 +222,28 @@
|
|||||||
"subtitle": "If you have forgotten your password, you can reset it here."
|
"subtitle": "If you have forgotten your password, you can reset it here."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"signin": "Sign in",
|
||||||
"signup": "Sign up",
|
"signup": "Sign up",
|
||||||
"site": {
|
"site": {
|
||||||
|
"forgotPassword": {
|
||||||
|
"heading": "Please enter the email address by which you're registered here."
|
||||||
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"community": "A thousand thanks for being with us!",
|
"heading": "Log in with your access data. Keep them safe!",
|
||||||
"heading": "Gradido",
|
"saveLogin": "Save login"
|
||||||
"new_wallet": "Create new account",
|
},
|
||||||
"signin": "Sign in"
|
"resetPassword": {
|
||||||
|
"heading": "Please enter your password and repeat it."
|
||||||
},
|
},
|
||||||
"signup": {
|
"signup": {
|
||||||
"agree": "I agree to the <a href='https://gradido.net/en/datenschutz/' target='_blank' > privacy policy</a>.",
|
"agree": "I agree to the <a href='https://gradido.net/en/datenschutz/' target='_blank' > privacy policy</a>.",
|
||||||
"dont_match": "Passwords don't match.",
|
"dont_match": "Passwords don't match.",
|
||||||
|
"heading": "Register by entering all data completely and in the correct fields.",
|
||||||
"lowercase": "One lowercase letter required.",
|
"lowercase": "One lowercase letter required.",
|
||||||
"minimum": "8 characters minimum.",
|
"minimum": "8 characters minimum.",
|
||||||
"no-whitespace": "No white spaces and tabs",
|
"no-whitespace": "No white spaces and tabs",
|
||||||
"one_number": "One number required.",
|
"one_number": "One number required.",
|
||||||
"special-char": "One special character required (e.g. _ or ä)",
|
"special-char": "One special character required (e.g. _ or ä)",
|
||||||
"subtitle": "Become a part of the community!",
|
|
||||||
"title": "Create your Gradido account",
|
|
||||||
"uppercase": "One uppercase letter required."
|
"uppercase": "One uppercase letter required."
|
||||||
},
|
},
|
||||||
"thx": {
|
"thx": {
|
||||||
@ -261,5 +279,7 @@
|
|||||||
"transaction-link": {
|
"transaction-link": {
|
||||||
"send_you": "wants to send you"
|
"send_you": "wants to send you"
|
||||||
},
|
},
|
||||||
"via_link": "via Link"
|
"via_link": "via Link",
|
||||||
|
"welcome": "Welcome",
|
||||||
|
"WelcomeBy": "by {name}"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,14 +50,6 @@ describe('ForgotPassword', () => {
|
|||||||
expect(wrapper.find('div.forgot-password').exists()).toBe(true)
|
expect(wrapper.find('div.forgot-password').exists()).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('has a title', () => {
|
|
||||||
expect(wrapper.find('h1').text()).toEqual('settings.password.reset')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a subtitle', () => {
|
|
||||||
expect(wrapper.find('p.text-lead').text()).toEqual('settings.password.subtitle')
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('back button', () => {
|
describe('back button', () => {
|
||||||
it('has a "back" button', () => {
|
it('has a "back" button', () => {
|
||||||
expect(wrapper.findComponent(RouterLinkStub).text()).toEqual('back')
|
expect(wrapper.findComponent(RouterLinkStub).text()).toEqual('back')
|
||||||
@ -129,8 +121,6 @@ describe('ForgotPassword', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it.skip('click redirects to "/login"', async () => {
|
it.skip('click redirects to "/login"', async () => {
|
||||||
// wrapper.find('.test-message-button').trigger('click')
|
|
||||||
// await wrapper.vm.$nextTick()
|
|
||||||
expect(mockRouterPush).toBeCalledWith('/login')
|
expect(mockRouterPush).toBeCalledWith('/login')
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -162,23 +152,9 @@ describe('ForgotPassword', () => {
|
|||||||
it('button link redirects to "/login"', () => {
|
it('button link redirects to "/login"', () => {
|
||||||
expect(wrapper.find('.test-message-button').attributes('href')).toBe('/login')
|
expect(wrapper.find('.test-message-button').attributes('href')).toBe('/login')
|
||||||
})
|
})
|
||||||
|
|
||||||
it.skip('click redirects to "/login"', () => {
|
|
||||||
// expect(mockRouterPush).toBeCalledWith('/login')
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('comingFrom login', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
wrapper = Wrapper(createMockObject('resetPassword'))
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has another subtitle', () => {
|
|
||||||
expect(wrapper.find('p.text-lead').text()).toEqual('settings.password.resend_subtitle')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,21 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="forgot-password">
|
<div class="forgot-password">
|
||||||
<div class="header p-4">
|
<b-container v-if="enterData">
|
||||||
<b-container class="container">
|
<div class="pb-5">{{ $t('site.forgotPassword.heading') }}</div>
|
||||||
<div class="header-body text-center mb-7">
|
|
||||||
<b-row class="justify-content-center">
|
|
||||||
<b-col xl="5" lg="6" md="8" class="px-2">
|
|
||||||
<h1>{{ $t('settings.password.reset') }}</h1>
|
|
||||||
<!-- eslint-disable-next-line @intlify/vue-i18n/no-dynamic-keys-->
|
|
||||||
<p class="text-lead">{{ $t(subtitle) }}</p>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
</div>
|
|
||||||
</b-container>
|
|
||||||
</div>
|
|
||||||
<b-container v-if="enterData" class="mt--8 p-1">
|
|
||||||
<b-row class="justify-content-center">
|
<b-row class="justify-content-center">
|
||||||
<b-col lg="6" md="8">
|
<b-col>
|
||||||
<b-card no-body class="border-0 gradido-custom-background">
|
<b-card no-body class="border-0 gradido-custom-background">
|
||||||
<b-card-body class="p-4">
|
<b-card-body class="p-4">
|
||||||
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
||||||
@ -36,24 +24,17 @@
|
|||||||
<router-link to="/login" class="mt-3">{{ $t('back') }}</router-link>
|
<router-link to="/login" class="mt-3">{{ $t('back') }}</router-link>
|
||||||
</div>
|
</div>
|
||||||
</b-container>
|
</b-container>
|
||||||
<b-container v-else class="mt--8 p-1">
|
<b-container v-else>
|
||||||
<message
|
<message
|
||||||
v-if="success"
|
:headline="success ? $t('site.thx.title') : $t('site.thx.errorTitle')"
|
||||||
:headline="$t('site.thx.title')"
|
:subtitle="success ? $t('site.thx.email') : $t('error.email-already-sent')"
|
||||||
:subtitle="$t('site.thx.email')"
|
|
||||||
:buttonText="$t('login')"
|
|
||||||
linkTo="/login"
|
|
||||||
/>
|
|
||||||
<message
|
|
||||||
v-else
|
|
||||||
:headline="$t('site.thx.errorTitle')"
|
|
||||||
:subtitle="$t('error.email-already-sent')"
|
|
||||||
:buttonText="$t('login')"
|
:buttonText="$t('login')"
|
||||||
linkTo="/login"
|
linkTo="/login"
|
||||||
/>
|
/>
|
||||||
</b-container>
|
</b-container>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { forgotPassword } from '@/graphql/mutations'
|
import { forgotPassword } from '@/graphql/mutations'
|
||||||
import InputEmail from '@/components/Inputs/InputEmail'
|
import InputEmail from '@/components/Inputs/InputEmail'
|
||||||
|
|||||||
@ -62,42 +62,12 @@ describe('Login', () => {
|
|||||||
expect(wrapper.find('div.login-form').exists()).toBe(true)
|
expect(wrapper.find('div.login-form').exists()).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('Login header', () => {
|
|
||||||
it('has a welcome message', () => {
|
|
||||||
expect(wrapper.find('div.header').text()).toBe('site.login.heading site.login.community')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a Community name', () => {
|
|
||||||
expect(wrapper.find('.test-communitydata b').text()).toBe('Gradido Entwicklung')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a Community description', () => {
|
|
||||||
expect(wrapper.find('.test-communitydata p').text()).toBe(
|
|
||||||
'Die lokale Entwicklungsumgebung von Gradido.',
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('links', () => {
|
describe('links', () => {
|
||||||
it('has a link "Forgot Password"', () => {
|
it('has a link "Forgot Password"', () => {
|
||||||
expect(wrapper.findAllComponents(RouterLinkStub).at(0).text()).toEqual(
|
expect(wrapper.findAllComponents(RouterLinkStub).at(0).text()).toEqual(
|
||||||
'settings.password.forgot_pwd',
|
'settings.password.forgot_pwd',
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('links to /forgot-password when clicking "Forgot Password"', () => {
|
|
||||||
expect(wrapper.findAllComponents(RouterLinkStub).at(0).props().to).toBe('/forgot-password')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a link "Create new account"', () => {
|
|
||||||
expect(wrapper.findAllComponents(RouterLinkStub).at(1).text()).toEqual(
|
|
||||||
'site.login.new_wallet',
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('links to /register when clicking "Create new account"', () => {
|
|
||||||
expect(wrapper.findAllComponents(RouterLinkStub).at(1).props().to).toBe('/register')
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('Login form', () => {
|
describe('Login form', () => {
|
||||||
|
|||||||
@ -1,63 +1,45 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="login-form">
|
<div class="login-form">
|
||||||
<!-- Header -->
|
<b-container v-if="enterData">
|
||||||
<div class="p-3">
|
<div class="pb-5">{{ $t('site.login.heading') }}</div>
|
||||||
<b-container>
|
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
||||||
<div class="text-center mb-7 header">
|
<b-form @submit.stop.prevent="handleSubmit(onSubmit)">
|
||||||
<b-row class="justify-content-center">
|
<b-row>
|
||||||
<b-col xl="5" lg="6" md="8" class="px-2">
|
<b-col sm="12" md="12" lg="6"><input-email v-model="form.email"></input-email></b-col>
|
||||||
<h1>{{ $t('site.login.heading') }}</h1>
|
<b-col sm="12" md="12" lg="6">
|
||||||
<p class="text-lead">{{ $t('site.login.community') }}</p>
|
<input-password
|
||||||
|
:label="$t('form.password')"
|
||||||
|
:placeholder="$t('form.password')"
|
||||||
|
:name="$t('form.password')"
|
||||||
|
v-model="form.password"
|
||||||
|
></input-password>
|
||||||
</b-col>
|
</b-col>
|
||||||
</b-row>
|
</b-row>
|
||||||
</div>
|
<b-row>
|
||||||
</b-container>
|
<b-col class="d-flex justify-content-start">
|
||||||
</div>
|
<b-form-checkbox
|
||||||
<b-container v-if="enterData" class="mt--8 p-1">
|
class="mt-3"
|
||||||
<b-row class="justify-content-center">
|
v-model="status"
|
||||||
<b-col lg="5" md="7">
|
name="checkbox-1"
|
||||||
<b-card no-body class="border-0 mb-0 gradido-custom-background">
|
value="saved"
|
||||||
<b-card-body class="p-4">
|
unchecked-value="not_saved"
|
||||||
<div class="text-center text-muted mb-4 test-communitydata">
|
>
|
||||||
<b>{{ CONFIG.COMMUNITY_NAME }}</b>
|
{{ $t('site.login.saveLogin') }}
|
||||||
<p class="text-lead">
|
</b-form-checkbox>
|
||||||
{{ CONFIG.COMMUNITY_DESCRIPTION }}
|
</b-col>
|
||||||
</p>
|
<b-col class="d-flex justify-content-end">
|
||||||
{{ $t('login') }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
|
||||||
<b-form @submit.stop.prevent="handleSubmit(onSubmit)">
|
|
||||||
<input-email v-model="form.email"></input-email>
|
|
||||||
<input-password
|
|
||||||
:label="$t('form.password')"
|
|
||||||
:placeholder="$t('form.password')"
|
|
||||||
:name="$t('form.password')"
|
|
||||||
v-model="form.password"
|
|
||||||
></input-password>
|
|
||||||
<div class="text-center mt-4">
|
|
||||||
<b-button type="submit" variant="primary">{{ $t('login') }}</b-button>
|
|
||||||
</div>
|
|
||||||
</b-form>
|
|
||||||
</validation-observer>
|
|
||||||
</b-card-body>
|
|
||||||
</b-card>
|
|
||||||
<b-row class="mt-3">
|
|
||||||
<b-col cols="6" class="text-center text-sm-left col-12 col-sm-6 pb-5">
|
|
||||||
<router-link to="/forgot-password" class="mt-3">
|
<router-link to="/forgot-password" class="mt-3">
|
||||||
{{ $t('settings.password.forgot_pwd') }}
|
{{ $t('settings.password.forgot_pwd') }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-col>
|
</b-col>
|
||||||
<b-col cols="6" class="text-center text-sm-right col-12 col-sm-6">
|
|
||||||
<router-link to="/register" class="mt-3">
|
|
||||||
{{ $t('site.login.new_wallet') }}
|
|
||||||
</router-link>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
</b-row>
|
||||||
</b-col>
|
<div class="mt-5">
|
||||||
</b-row>
|
<b-button type="submit" variant="gradido">{{ $t('login') }}</b-button>
|
||||||
|
</div>
|
||||||
|
</b-form>
|
||||||
|
</validation-observer>
|
||||||
</b-container>
|
</b-container>
|
||||||
<b-container v-else class="mt--8 p-1">
|
<b-container v-else>
|
||||||
<message
|
<message
|
||||||
:headline="$t('site.thx.errorTitle')"
|
:headline="$t('site.thx.errorTitle')"
|
||||||
:subtitle="errorSubtitle"
|
:subtitle="errorSubtitle"
|
||||||
@ -73,7 +55,6 @@ import InputPassword from '@/components/Inputs/InputPassword'
|
|||||||
import InputEmail from '@/components/Inputs/InputEmail'
|
import InputEmail from '@/components/Inputs/InputEmail'
|
||||||
import Message from '@/components/Message/Message'
|
import Message from '@/components/Message/Message'
|
||||||
import { login } from '@/graphql/queries'
|
import { login } from '@/graphql/queries'
|
||||||
import CONFIG from '@/config'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Login',
|
name: 'Login',
|
||||||
@ -89,11 +70,11 @@ export default {
|
|||||||
password: '',
|
password: '',
|
||||||
},
|
},
|
||||||
passwordVisible: false,
|
passwordVisible: false,
|
||||||
|
status: false,
|
||||||
showPageMessage: false,
|
showPageMessage: false,
|
||||||
errorReason: null,
|
errorReason: null,
|
||||||
errorSubtitle: '',
|
errorSubtitle: '',
|
||||||
errorLinkTo: '',
|
errorLinkTo: '',
|
||||||
CONFIG,
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -135,10 +116,8 @@ export default {
|
|||||||
this.errorLinkTo = '/reset-password/login'
|
this.errorLinkTo = '/reset-password/login'
|
||||||
this.toastError(this.$t('error.no-account'))
|
this.toastError(this.$t('error.no-account'))
|
||||||
} else if (error.message.includes('No user with this credentials')) {
|
} else if (error.message.includes('No user with this credentials')) {
|
||||||
// don't show any error on the page! against boots
|
|
||||||
this.toastError(this.$t('error.no-user'))
|
this.toastError(this.$t('error.no-user'))
|
||||||
} else {
|
} else {
|
||||||
// don't show any error on the page! against boots
|
|
||||||
this.toastError(this.$t('error.unknown-error') + error.message)
|
this.toastError(this.$t('error.unknown-error') + error.message)
|
||||||
}
|
}
|
||||||
loader.hide()
|
loader.hide()
|
||||||
|
|||||||
@ -31,7 +31,6 @@ describe('Register', () => {
|
|||||||
state: {
|
state: {
|
||||||
email: 'peter@lustig.de',
|
email: 'peter@lustig.de',
|
||||||
language: 'en',
|
language: 'en',
|
||||||
publisherId: 12345,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -53,45 +52,6 @@ describe('Register', () => {
|
|||||||
expect(wrapper.find('div#registerform').exists()).toBe(true)
|
expect(wrapper.find('div#registerform').exists()).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('Register header', () => {
|
|
||||||
it('has a welcome message', () => {
|
|
||||||
expect(wrapper.find('div.header').text()).toBe('site.signup.title site.signup.subtitle')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('Community data already loaded', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
jest.clearAllMocks()
|
|
||||||
mocks.$store.state.community = {
|
|
||||||
name: 'Gradido Entwicklung',
|
|
||||||
url: 'http://localhost/',
|
|
||||||
registerUrl: 'http://localhost/register',
|
|
||||||
description: 'Die lokale Entwicklungsumgebung von Gradido.',
|
|
||||||
}
|
|
||||||
wrapper = Wrapper()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a Community name', () => {
|
|
||||||
expect(wrapper.find('.test-communitydata b').text()).toBe('Gradido Entwicklung')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a Community description', () => {
|
|
||||||
expect(wrapper.find('.test-communitydata p').text()).toBe(
|
|
||||||
'Die lokale Entwicklungsumgebung von Gradido.',
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('links', () => {
|
|
||||||
it('has a link "Back"', () => {
|
|
||||||
expect(wrapper.find('.test-button-back').text()).toEqual('back')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('links to /login when clicking "Back"', () => {
|
|
||||||
expect(wrapper.find('.test-button-back').props().to).toBe('/login')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('Register form', () => {
|
describe('Register form', () => {
|
||||||
it('has a register form', () => {
|
it('has a register form', () => {
|
||||||
expect(wrapper.find('form').exists()).toBe(true)
|
expect(wrapper.find('form').exists()).toBe(true)
|
||||||
@ -121,11 +81,6 @@ describe('Register', () => {
|
|||||||
expect(wrapper.find('#registerCheckbox').exists()).toBe(true)
|
expect(wrapper.find('#registerCheckbox').exists()).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('has PublisherId input fields', () => {
|
|
||||||
wrapper.find('.publisherCollaps').trigger('click')
|
|
||||||
expect(wrapper.find('#publisherid').exists()).toBe(true)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has disabled submit button when not completely filled', () => {
|
it('has disabled submit button when not completely filled', () => {
|
||||||
expect(wrapper.find('button[type="submit"]').attributes('disabled')).toBe('disabled')
|
expect(wrapper.find('button[type="submit"]').attributes('disabled')).toBe('disabled')
|
||||||
})
|
})
|
||||||
@ -155,26 +110,11 @@ describe('Register', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
/*
|
|
||||||
describe('link Choose another community', () => {
|
|
||||||
it('has a link "Choose another community"', () => {
|
|
||||||
expect(wrapper.find('.test-button-another-community').text()).toEqual(
|
|
||||||
'community.choose-another-community',
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('links to /select-community when clicking "Choose another community"', () => {
|
|
||||||
expect(wrapper.find('.test-button-another-community').props().to).toBe('/select-community')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
*/
|
|
||||||
|
|
||||||
describe('API calls when form is missing input', () => {
|
describe('API calls when form is missing input', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
wrapper.find('#registerFirstname').setValue('Max')
|
wrapper.find('#registerFirstname').setValue('Max')
|
||||||
wrapper.find('#registerLastname').setValue('Mustermann')
|
wrapper.find('#registerLastname').setValue('Mustermann')
|
||||||
wrapper.find('.language-switch-select').findAll('option').at(1).setSelected()
|
wrapper.find('.language-switch-select').findAll('option').at(1).setSelected()
|
||||||
wrapper.find('#publisherid').setValue('12345')
|
|
||||||
})
|
})
|
||||||
it('has disabled submit button when missing input checked box', () => {
|
it('has disabled submit button when missing input checked box', () => {
|
||||||
wrapper.find('#Email-input-field').setValue('max.mustermann@gradido.net')
|
wrapper.find('#Email-input-field').setValue('max.mustermann@gradido.net')
|
||||||
@ -187,34 +127,15 @@ describe('Register', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('API calls when completely filled and missing publisherid', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
wrapper.find('#registerFirstname').setValue('Max')
|
|
||||||
wrapper.find('#registerLastname').setValue('Mustermann')
|
|
||||||
wrapper.find('#Email-input-field').setValue('max.mustermann@gradido.net')
|
|
||||||
wrapper.find('.language-switch-select').findAll('option').at(1).setSelected()
|
|
||||||
wrapper.find('#registerCheckbox').setChecked()
|
|
||||||
})
|
|
||||||
it('has enabled submit button when completely filled', async () => {
|
|
||||||
await wrapper.vm.$nextTick()
|
|
||||||
expect(wrapper.find('button[type="submit"]').attributes('disabled')).toBe(undefined)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('API calls when completely filled', () => {
|
describe('API calls when completely filled', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
wrapper.find('#registerFirstname').setValue('Max')
|
wrapper.find('#registerFirstname').setValue('Max')
|
||||||
wrapper.find('#registerLastname').setValue('Mustermann')
|
wrapper.find('#registerLastname').setValue('Mustermann')
|
||||||
wrapper.find('#Email-input-field').setValue('max.mustermann@gradido.net')
|
wrapper.find('#Email-input-field').setValue('max.mustermann@gradido.net')
|
||||||
wrapper.find('.language-switch-select').findAll('option').at(1).setSelected()
|
wrapper.find('.language-switch-select').findAll('option').at(1).setSelected()
|
||||||
wrapper.find('#publisherid').setValue('12345')
|
|
||||||
wrapper.find('#registerCheckbox').setChecked()
|
wrapper.find('#registerCheckbox').setChecked()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('commits publisherId to store', () => {
|
|
||||||
expect(mockStoreCommit).toBeCalledWith('publisherId', 12345)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has enabled submit button when completely filled', async () => {
|
it('has enabled submit button when completely filled', async () => {
|
||||||
await wrapper.vm.$nextTick()
|
await wrapper.vm.$nextTick()
|
||||||
expect(wrapper.find('button[type="submit"]').attributes('disabled')).toBe(undefined)
|
expect(wrapper.find('button[type="submit"]').attributes('disabled')).toBe(undefined)
|
||||||
@ -285,7 +206,6 @@ describe('Register', () => {
|
|||||||
firstName: 'Max',
|
firstName: 'Max',
|
||||||
lastName: 'Mustermann',
|
lastName: 'Mustermann',
|
||||||
language: 'en',
|
language: 'en',
|
||||||
publisherId: 12345,
|
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
@ -335,7 +255,6 @@ describe('Register', () => {
|
|||||||
firstName: 'Max',
|
firstName: 'Max',
|
||||||
lastName: 'Mustermann',
|
lastName: 'Mustermann',
|
||||||
language: 'en',
|
language: 'en',
|
||||||
publisherId: 12345,
|
|
||||||
redeemCode: 'some-code',
|
redeemCode: 'some-code',
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
|||||||
@ -1,183 +1,104 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="registerform">
|
<div id="registerform">
|
||||||
<!-- Header -->
|
<b-container v-if="enterData">
|
||||||
<div class="header p-4">
|
<div class="pb-5">
|
||||||
<b-container class="container">
|
{{ $t('site.signup.heading') }}
|
||||||
<div class="header-body text-center mb-7">
|
</div>
|
||||||
<b-row class="justify-content-center">
|
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
||||||
<b-col xl="5" lg="6" md="8" class="px-2">
|
<b-form role="form" @submit.prevent="handleSubmit(onSubmit)">
|
||||||
<h1>{{ $t('site.signup.title') }}</h1>
|
<b-row>
|
||||||
<p class="text-lead">{{ $t('site.signup.subtitle') }}</p>
|
<b-col sm="12" md="6">
|
||||||
|
<validation-provider
|
||||||
|
:name="$t('form.firstname')"
|
||||||
|
:rules="{ required: true, min: 3 }"
|
||||||
|
v-slot="validationContext"
|
||||||
|
>
|
||||||
|
<b-form-group
|
||||||
|
class="mb-3"
|
||||||
|
:label="$t('form.firstname')"
|
||||||
|
label-for="registerFirstname"
|
||||||
|
>
|
||||||
|
<b-form-input
|
||||||
|
id="registerFirstname"
|
||||||
|
:name="$t('form.firstname')"
|
||||||
|
v-model="form.firstname"
|
||||||
|
:placeholder="$t('form.firstname')"
|
||||||
|
:state="getValidationState(validationContext)"
|
||||||
|
aria-describedby="registerFirstnameLiveFeedback"
|
||||||
|
></b-form-input>
|
||||||
|
|
||||||
|
<b-form-invalid-feedback id="registerFirstnameLiveFeedback">
|
||||||
|
{{ validationContext.errors[0] }}
|
||||||
|
</b-form-invalid-feedback>
|
||||||
|
</b-form-group>
|
||||||
|
</validation-provider>
|
||||||
|
</b-col>
|
||||||
|
<b-col sm="12" md="6">
|
||||||
|
<validation-provider
|
||||||
|
:name="$t('form.lastname')"
|
||||||
|
:rules="{ required: true, min: 2 }"
|
||||||
|
v-slot="validationContext"
|
||||||
|
>
|
||||||
|
<b-form-group
|
||||||
|
class="mb-3"
|
||||||
|
:label="$t('form.lastname')"
|
||||||
|
label-for="registerLastname"
|
||||||
|
>
|
||||||
|
<b-form-input
|
||||||
|
id="registerLastname"
|
||||||
|
:name="$t('form.lastname')"
|
||||||
|
v-model="form.lastname"
|
||||||
|
:placeholder="$t('form.lastname')"
|
||||||
|
:state="getValidationState(validationContext)"
|
||||||
|
aria-describedby="registerLastnameLiveFeedback"
|
||||||
|
></b-form-input>
|
||||||
|
|
||||||
|
<b-form-invalid-feedback id="registerLastnameLiveFeedback">
|
||||||
|
{{ validationContext.errors[0] }}
|
||||||
|
</b-form-invalid-feedback>
|
||||||
|
</b-form-group>
|
||||||
|
</validation-provider>
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
<b-row>
|
||||||
|
<b-col sm="12" md="6"><input-email v-model="form.email"></input-email></b-col>
|
||||||
|
<b-col sm="12" md="6">
|
||||||
|
<label>{{ $t('language') }}</label>
|
||||||
|
<language-switch-select @update-language="updateLanguage" />
|
||||||
</b-col>
|
</b-col>
|
||||||
</b-row>
|
</b-row>
|
||||||
</div>
|
|
||||||
</b-container>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Page content -->
|
<b-row class="mt-4 mb-4">
|
||||||
<b-container v-if="enterData" class="mt--8 p-1">
|
<b-col class="mb-4 mb-md-0">
|
||||||
<!-- Table -->
|
<b-form-checkbox
|
||||||
|
id="registerCheckbox"
|
||||||
|
v-model="form.agree"
|
||||||
|
:name="$t('site.signup.agree')"
|
||||||
|
>
|
||||||
|
<!-- eslint-disable-next-line @intlify/vue-i18n/no-v-html -->
|
||||||
|
<span class="text-muted" v-html="$t('site.signup.agree')"></span>
|
||||||
|
</b-form-checkbox>
|
||||||
|
</b-col>
|
||||||
|
|
||||||
<b-row class="justify-content-center">
|
<b-col class="d-flex justify-content-end">
|
||||||
<b-col lg="6" md="8">
|
<b-button
|
||||||
<b-card no-body class="border-0 gradido-custom-background">
|
type="submit"
|
||||||
<b-card-body class="p-4">
|
:disabled="disabled"
|
||||||
<div class="text-center text-muted mb-4 test-communitydata">
|
:variant="disabled ? 'outline-gradido' : 'gradido'"
|
||||||
<b>{{ CONFIG.COMMUNITY_NAME }}</b>
|
>
|
||||||
<p class="text-lead">
|
{{ $t('signup') }}
|
||||||
{{ CONFIG.COMMUNITY_DESCRIPTION }}
|
</b-button>
|
||||||
</p>
|
</b-col>
|
||||||
<div>{{ $t('signup') }}</div>
|
</b-row>
|
||||||
</div>
|
</b-form>
|
||||||
|
</validation-observer>
|
||||||
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
|
||||||
<b-form role="form" @submit.prevent="handleSubmit(onSubmit)">
|
|
||||||
<validation-provider
|
|
||||||
:name="$t('form.firstname')"
|
|
||||||
:rules="{ required: true, min: 3 }"
|
|
||||||
v-slot="validationContext"
|
|
||||||
>
|
|
||||||
<b-form-group
|
|
||||||
class="mb-3"
|
|
||||||
:label="$t('form.firstname')"
|
|
||||||
label-for="registerFirstname"
|
|
||||||
>
|
|
||||||
<b-form-input
|
|
||||||
id="registerFirstname"
|
|
||||||
:name="$t('form.firstname')"
|
|
||||||
v-model="form.firstname"
|
|
||||||
:placeholder="$t('form.firstname')"
|
|
||||||
:state="getValidationState(validationContext)"
|
|
||||||
aria-describedby="registerFirstnameLiveFeedback"
|
|
||||||
></b-form-input>
|
|
||||||
|
|
||||||
<b-form-invalid-feedback id="registerFirstnameLiveFeedback">
|
|
||||||
{{ validationContext.errors[0] }}
|
|
||||||
</b-form-invalid-feedback>
|
|
||||||
</b-form-group>
|
|
||||||
</validation-provider>
|
|
||||||
|
|
||||||
<validation-provider
|
|
||||||
:name="$t('form.lastname')"
|
|
||||||
:rules="{ required: true, min: 2 }"
|
|
||||||
v-slot="validationContext"
|
|
||||||
>
|
|
||||||
<b-form-group
|
|
||||||
class="mb-3"
|
|
||||||
:label="$t('form.lastname')"
|
|
||||||
label-for="registerLastname"
|
|
||||||
>
|
|
||||||
<b-form-input
|
|
||||||
id="registerLastname"
|
|
||||||
:name="$t('form.lastname')"
|
|
||||||
v-model="form.lastname"
|
|
||||||
:placeholder="$t('form.lastname')"
|
|
||||||
:state="getValidationState(validationContext)"
|
|
||||||
aria-describedby="registerLastnameLiveFeedback"
|
|
||||||
></b-form-input>
|
|
||||||
|
|
||||||
<b-form-invalid-feedback id="registerLastnameLiveFeedback">
|
|
||||||
{{ validationContext.errors[0] }}
|
|
||||||
</b-form-invalid-feedback>
|
|
||||||
</b-form-group>
|
|
||||||
</validation-provider>
|
|
||||||
|
|
||||||
<input-email v-model="form.email"></input-email>
|
|
||||||
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<b-row>
|
|
||||||
<b-col cols="12">
|
|
||||||
{{ $t('language') }}
|
|
||||||
<language-switch-select @update-language="updateLanguage" />
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
|
|
||||||
<b-row class="my-4">
|
|
||||||
<b-col cols="12">
|
|
||||||
<b-form-checkbox
|
|
||||||
id="registerCheckbox"
|
|
||||||
v-model="form.agree"
|
|
||||||
:name="$t('site.signup.agree')"
|
|
||||||
>
|
|
||||||
<!-- eslint-disable-next-line @intlify/vue-i18n/no-v-html -->
|
|
||||||
<span class="text-muted" v-html="$t('site.signup.agree')"></span>
|
|
||||||
</b-form-checkbox>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
|
|
||||||
<b-row v-b-toggle:my-collapse class="text-muted shadow-sm p-3 publisherCollaps">
|
|
||||||
<b-col>{{ $t('publisher.publisherId') }} {{ $store.state.publisherId }}</b-col>
|
|
||||||
<b-col class="text-right">
|
|
||||||
<b-icon icon="chevron-down" aria-hidden="true"></b-icon>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
|
|
||||||
<b-row>
|
|
||||||
<b-col>
|
|
||||||
<b-collapse id="my-collapse" class="">
|
|
||||||
<b-input-group class="shadow-sm p-2 bg-white rounded">
|
|
||||||
<b-input-group-prepend is-text>
|
|
||||||
<b-icon icon="person-fill"></b-icon>
|
|
||||||
</b-input-group-prepend>
|
|
||||||
<b-form-input
|
|
||||||
id="publisherid"
|
|
||||||
type="text"
|
|
||||||
placeholder="Publisher ID"
|
|
||||||
v-model="publisherId"
|
|
||||||
@input="commitStorePublisherId(publisherId)"
|
|
||||||
></b-form-input>
|
|
||||||
</b-input-group>
|
|
||||||
<div
|
|
||||||
v-b-toggle:my-collapse
|
|
||||||
class="text-center mt-1 shadow-lg p-3 mb-5 rounded"
|
|
||||||
>
|
|
||||||
{{ $t('publisher.infoText') }}
|
|
||||||
<div class="text-center">
|
|
||||||
<b-icon icon="chevron-up" aria-hidden="true"></b-icon>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</b-collapse>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
|
|
||||||
<div class="text-center mt-5">
|
|
||||||
<div class="text-center">
|
|
||||||
<router-link class="test-button-back" to="/login">
|
|
||||||
<b-button variant="outline-secondary" class="mr-4">
|
|
||||||
{{ $t('back') }}
|
|
||||||
</b-button>
|
|
||||||
</router-link>
|
|
||||||
<b-button
|
|
||||||
:disabled="disabled"
|
|
||||||
type="submit"
|
|
||||||
:variant="disabled ? 'outline-light' : 'primary'"
|
|
||||||
>
|
|
||||||
{{ $t('signup') }}
|
|
||||||
</b-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</b-form>
|
|
||||||
</validation-observer>
|
|
||||||
</b-card-body>
|
|
||||||
</b-card>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
</b-container>
|
</b-container>
|
||||||
<b-container v-else class="mt--8 p-1">
|
<b-container v-else>
|
||||||
<message :headline="$t('site.thx.title')" :subtitle="$t('site.thx.register')" />
|
<message :headline="$t('site.thx.title')" :subtitle="$t('site.thx.register')" />
|
||||||
</b-container>
|
</b-container>
|
||||||
<!--
|
|
||||||
<div class="text-center pt-4">
|
|
||||||
<router-link class="test-button-another-community" to="/select-community">
|
|
||||||
<b-button variant="outline-secondary">
|
|
||||||
{{ $t('community.choose-another-community') }}
|
|
||||||
</b-button>
|
|
||||||
</router-link>
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { createUser } from '@/graphql/mutations'
|
import { createUser } from '@/graphql/mutations'
|
||||||
import CONFIG from '@/config'
|
import CONFIG from '@/config'
|
||||||
@ -236,7 +157,6 @@ export default {
|
|||||||
this.showPageMessage = true
|
this.showPageMessage = true
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
// don't show any error on the page! against boots
|
|
||||||
let errorMessage
|
let errorMessage
|
||||||
switch (error.message) {
|
switch (error.message) {
|
||||||
case 'GraphQL error: User already exists.':
|
case 'GraphQL error: User already exists.':
|
||||||
|
|||||||
@ -79,36 +79,6 @@ describe('ResetPassword', () => {
|
|||||||
expect(wrapper.find('div.resetpwd-form').exists()).toBeTruthy()
|
expect(wrapper.find('div.resetpwd-form').exists()).toBeTruthy()
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('Register header', () => {
|
|
||||||
describe('from reset', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
mocks.$route.path.mock = 'reset-password'
|
|
||||||
wrapper = Wrapper()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a welcome message', async () => {
|
|
||||||
expect(wrapper.find('div.header').text()).toContain('settings.password.reset')
|
|
||||||
expect(wrapper.find('div.header').text()).toContain(
|
|
||||||
'settings.password.reset-password.text',
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('from checkEmail', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
mocks.$route.path.mock = 'checkEmail'
|
|
||||||
wrapper = Wrapper()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('has a welcome message', async () => {
|
|
||||||
expect(wrapper.find('div.header').text()).toContain('settings.password.set')
|
|
||||||
expect(wrapper.find('div.header').text()).toContain(
|
|
||||||
'settings.password.set-password.text',
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('links', () => {
|
describe('links', () => {
|
||||||
it('has a link "Back"', async () => {
|
it('has a link "Back"', async () => {
|
||||||
expect(wrapper.findAllComponents(RouterLinkStub).at(0).text()).toEqual('back')
|
expect(wrapper.findAllComponents(RouterLinkStub).at(0).text()).toEqual('back')
|
||||||
|
|||||||
@ -1,51 +1,26 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="resetpwd-form">
|
<div class="resetpwd-form">
|
||||||
<b-container>
|
<div class="pb-5">{{ $t('site.resetPassword.heading') }}</div>
|
||||||
<div class="header p-4" ref="header">
|
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
||||||
<div class="header-body text-center mb-7">
|
<b-form role="form" @submit.prevent="handleSubmit(onSubmit)">
|
||||||
<b-row class="justify-content-center">
|
<input-password-confirmation v-model="form" />
|
||||||
<b-col xl="5" lg="6" md="8" class="px-2">
|
<div class="text-center">
|
||||||
<!-- eslint-disable-next-line @intlify/vue-i18n/no-dynamic-keys-->
|
<b-button type="submit" variant="primary" class="mt-4">
|
||||||
<h1>{{ $t(displaySetup.title) }}</h1>
|
<!-- eslint-disable-next-line @intlify/vue-i18n/no-dynamic-keys-->
|
||||||
<div class="pb-4">
|
{{ $t(displaySetup.button) }}
|
||||||
<span>
|
</b-button>
|
||||||
<!-- eslint-disable-next-line @intlify/vue-i18n/no-dynamic-keys-->
|
|
||||||
{{ $t(displaySetup.text) }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</b-form>
|
||||||
</b-container>
|
</validation-observer>
|
||||||
<b-container class="mt--8 p-1">
|
|
||||||
<b-row class="justify-content-center">
|
<b-row v-if="displaySetup.linkTo">
|
||||||
<b-col lg="6" md="8">
|
<b-col class="text-center py-lg-4">
|
||||||
<b-card no-body class="border-0 gradido-custom-background">
|
<router-link :to="displaySetup.linkTo" class="mt-3">{{ $t('back') }}</router-link>
|
||||||
<b-card-body class="p-4">
|
</b-col>
|
||||||
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
</b-row>
|
||||||
<b-form role="form" @submit.prevent="handleSubmit(onSubmit)">
|
|
||||||
<input-password-confirmation v-model="form" />
|
|
||||||
<div class="text-center">
|
|
||||||
<b-button type="submit" variant="primary" class="mt-4">
|
|
||||||
<!-- eslint-disable-next-line @intlify/vue-i18n/no-dynamic-keys-->
|
|
||||||
{{ $t(displaySetup.button) }}
|
|
||||||
</b-button>
|
|
||||||
</div>
|
|
||||||
</b-form>
|
|
||||||
</validation-observer>
|
|
||||||
</b-card-body>
|
|
||||||
</b-card>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
<b-row v-if="displaySetup.linkTo">
|
|
||||||
<b-col class="text-center py-lg-4">
|
|
||||||
<router-link :to="displaySetup.linkTo" class="mt-3">{{ $t('back') }}</router-link>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
</b-container>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import InputPasswordConfirmation from '@/components/Inputs/InputPasswordConfirmation'
|
import InputPasswordConfirmation from '@/components/Inputs/InputPasswordConfirmation'
|
||||||
import { setPassword } from '@/graphql/mutations'
|
import { setPassword } from '@/graphql/mutations'
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import Send, { SEND_TYPES } from './Send'
|
|||||||
import { toastErrorSpy, toastSuccessSpy } from '@test/testSetup'
|
import { toastErrorSpy, toastSuccessSpy } from '@test/testSetup'
|
||||||
import { TRANSACTION_STEPS } from '@/components/GddSend.vue'
|
import { TRANSACTION_STEPS } from '@/components/GddSend.vue'
|
||||||
import { sendCoins, createTransactionLink } from '@/graphql/mutations.js'
|
import { sendCoins, createTransactionLink } from '@/graphql/mutations.js'
|
||||||
import DashboardLayout from '@/layouts/DashboardLayout_gdd.vue'
|
import DashboardLayout from '@/layouts/DashboardLayout.vue'
|
||||||
import flushPromises from 'flush-promises'
|
import flushPromises from 'flush-promises'
|
||||||
|
|
||||||
const apolloMutationMock = jest.fn()
|
const apolloMutationMock = jest.fn()
|
||||||
|
|||||||
@ -40,7 +40,7 @@ const textFields = {
|
|||||||
register: {
|
register: {
|
||||||
headline: 'site.thx.title',
|
headline: 'site.thx.title',
|
||||||
subtitle: 'site.thx.register',
|
subtitle: 'site.thx.register',
|
||||||
button: 'site.login.signin',
|
button: 'signin',
|
||||||
// linkTo: '/login',
|
// linkTo: '/login',
|
||||||
},
|
},
|
||||||
checkEmail: {
|
checkEmail: {
|
||||||
|
|||||||
@ -5214,7 +5214,7 @@ core-js-compat@^3.8.1:
|
|||||||
browserslist "^4.16.3"
|
browserslist "^4.16.3"
|
||||||
semver "7.0.0"
|
semver "7.0.0"
|
||||||
|
|
||||||
core-js@^2.4.0, core-js@^2.5.7, core-js@^2.6.5:
|
core-js@^2.4.0, core-js@^2.6.5:
|
||||||
version "2.6.12"
|
version "2.6.12"
|
||||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
|
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
|
||||||
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
|
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
|
||||||
@ -5543,14 +5543,6 @@ cyclist@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
|
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
|
||||||
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
|
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
|
||||||
|
|
||||||
d@1, d@^1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
|
|
||||||
integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
|
|
||||||
dependencies:
|
|
||||||
es5-ext "^0.10.50"
|
|
||||||
type "^1.0.1"
|
|
||||||
|
|
||||||
dashdash@^1.12.0:
|
dashdash@^1.12.0:
|
||||||
version "1.14.1"
|
version "1.14.1"
|
||||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||||
@ -6236,68 +6228,11 @@ es-to-primitive@^1.2.1:
|
|||||||
is-date-object "^1.0.1"
|
is-date-object "^1.0.1"
|
||||||
is-symbol "^1.0.2"
|
is-symbol "^1.0.2"
|
||||||
|
|
||||||
es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.14:
|
|
||||||
version "0.10.53"
|
|
||||||
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
|
|
||||||
integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
|
|
||||||
dependencies:
|
|
||||||
es6-iterator "~2.0.3"
|
|
||||||
es6-symbol "~3.1.3"
|
|
||||||
next-tick "~1.0.0"
|
|
||||||
|
|
||||||
es6-iterator@~2.0.1, es6-iterator@~2.0.3:
|
|
||||||
version "2.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
|
|
||||||
integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
|
|
||||||
dependencies:
|
|
||||||
d "1"
|
|
||||||
es5-ext "^0.10.35"
|
|
||||||
es6-symbol "^3.1.1"
|
|
||||||
|
|
||||||
es6-map@^0.1.5:
|
|
||||||
version "0.1.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
|
|
||||||
integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=
|
|
||||||
dependencies:
|
|
||||||
d "1"
|
|
||||||
es5-ext "~0.10.14"
|
|
||||||
es6-iterator "~2.0.1"
|
|
||||||
es6-set "~0.1.5"
|
|
||||||
es6-symbol "~3.1.1"
|
|
||||||
event-emitter "~0.3.5"
|
|
||||||
|
|
||||||
es6-promise@^4.1.1:
|
es6-promise@^4.1.1:
|
||||||
version "4.2.8"
|
version "4.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
|
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
|
||||||
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
|
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
|
||||||
|
|
||||||
es6-set@~0.1.5:
|
|
||||||
version "0.1.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
|
|
||||||
integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=
|
|
||||||
dependencies:
|
|
||||||
d "1"
|
|
||||||
es5-ext "~0.10.14"
|
|
||||||
es6-iterator "~2.0.1"
|
|
||||||
es6-symbol "3.1.1"
|
|
||||||
event-emitter "~0.3.5"
|
|
||||||
|
|
||||||
es6-symbol@3.1.1:
|
|
||||||
version "3.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
|
|
||||||
integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
|
|
||||||
dependencies:
|
|
||||||
d "1"
|
|
||||||
es5-ext "~0.10.14"
|
|
||||||
|
|
||||||
es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3:
|
|
||||||
version "3.1.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
|
|
||||||
integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
|
|
||||||
dependencies:
|
|
||||||
d "^1.0.1"
|
|
||||||
ext "^1.1.2"
|
|
||||||
|
|
||||||
escalade@^3.1.1:
|
escalade@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||||
@ -6692,14 +6627,6 @@ etag@~1.8.1:
|
|||||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||||
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
||||||
|
|
||||||
event-emitter@~0.3.5:
|
|
||||||
version "0.3.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
|
|
||||||
integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
|
|
||||||
dependencies:
|
|
||||||
d "1"
|
|
||||||
es5-ext "~0.10.14"
|
|
||||||
|
|
||||||
event-pubsub@4.3.0:
|
event-pubsub@4.3.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"
|
resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"
|
||||||
@ -6877,13 +6804,6 @@ express@^4.16.3, express@^4.17.1:
|
|||||||
utils-merge "1.0.1"
|
utils-merge "1.0.1"
|
||||||
vary "~1.1.2"
|
vary "~1.1.2"
|
||||||
|
|
||||||
ext@^1.1.2:
|
|
||||||
version "1.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
|
|
||||||
integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
|
|
||||||
dependencies:
|
|
||||||
type "^2.0.0"
|
|
||||||
|
|
||||||
extend-shallow@^2.0.1:
|
extend-shallow@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
|
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
|
||||||
@ -10617,11 +10537,6 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2:
|
|||||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||||
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
||||||
|
|
||||||
next-tick@~1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
|
|
||||||
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
|
|
||||||
|
|
||||||
nice-try@^1.0.4:
|
nice-try@^1.0.4:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||||
@ -11254,15 +11169,6 @@ parseurl@~1.3.2, parseurl@~1.3.3:
|
|||||||
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
||||||
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
|
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
|
||||||
|
|
||||||
particles-bg-vue@1.2.3:
|
|
||||||
version "1.2.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/particles-bg-vue/-/particles-bg-vue-1.2.3.tgz#5cfb944da1074ee6e61b773bfef0512ef6ddc2c2"
|
|
||||||
integrity sha512-VT72LfMYkqT4IRHNqvlbAtgTaDOgtjtJApXiqK13K/aUc28jhQuI9JN5tpPpMkRPIG4OpfmnWhSfE2hjZetmuw==
|
|
||||||
dependencies:
|
|
||||||
proton-engine "^4.1.3"
|
|
||||||
raf-manager "^0.3.0"
|
|
||||||
vue "^2.2.6"
|
|
||||||
|
|
||||||
pascalcase@^0.1.1:
|
pascalcase@^0.1.1:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
|
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
|
||||||
@ -11984,11 +11890,6 @@ proto-list@~1.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
|
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
|
||||||
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
|
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
|
||||||
|
|
||||||
proton-engine@^4.1.3:
|
|
||||||
version "4.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/proton-engine/-/proton-engine-4.2.1.tgz#db938e4f673ddbd91ac70628b0733283a4571ef7"
|
|
||||||
integrity sha512-c72hgcnwMyyvUoy7Jq/HX3HQZnAo5MUNvFbyZHiWZrwcERX9+lYzM9YyT0iueXVAJpt+r8nrPan9F3HTXj7IsA==
|
|
||||||
|
|
||||||
proxy-addr@~2.0.5:
|
proxy-addr@~2.0.5:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
|
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
|
||||||
@ -12133,14 +12034,6 @@ quick-lru@^4.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
|
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
|
||||||
integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
|
integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
|
||||||
|
|
||||||
raf-manager@^0.3.0:
|
|
||||||
version "0.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/raf-manager/-/raf-manager-0.3.0.tgz#ec9a659e8a50534e4d64200b7a39ce9905f10e9c"
|
|
||||||
integrity sha512-qLpVgVlUmwtlY35zoyCQwLWMOpLkVtiItPd/RxouHAh80XZjoh84CF5pFBVyIIUWXubypSJi1OBJS4jM7onOng==
|
|
||||||
dependencies:
|
|
||||||
core-js "^2.5.7"
|
|
||||||
es6-map "^0.1.5"
|
|
||||||
|
|
||||||
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
|
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
||||||
@ -14111,16 +14004,6 @@ type-is@~1.6.17, type-is@~1.6.18:
|
|||||||
media-typer "0.3.0"
|
media-typer "0.3.0"
|
||||||
mime-types "~2.1.24"
|
mime-types "~2.1.24"
|
||||||
|
|
||||||
type@^1.0.1:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
|
|
||||||
integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
|
|
||||||
|
|
||||||
type@^2.0.0:
|
|
||||||
version "2.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/type/-/type-2.3.0.tgz#ada7c045f07ead08abf9e2edd29be1a0c0661132"
|
|
||||||
integrity sha512-rgPIqOdfK/4J9FhiVrZ3cveAjRRo5rsQBAIhnylX874y1DX/kEKSVdLsnuHB6l1KTjHyU01VjiMBHgU2adejyg==
|
|
||||||
|
|
||||||
typedarray-to-buffer@^3.1.5:
|
typedarray-to-buffer@^3.1.5:
|
||||||
version "3.1.5"
|
version "3.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
|
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
|
||||||
@ -14604,7 +14487,7 @@ vue2-transitions@^0.2.3:
|
|||||||
resolved "https://registry.yarnpkg.com/vue2-transitions/-/vue2-transitions-0.2.3.tgz#69c9d75b1db05f231b80980c03459d68490ba27d"
|
resolved "https://registry.yarnpkg.com/vue2-transitions/-/vue2-transitions-0.2.3.tgz#69c9d75b1db05f231b80980c03459d68490ba27d"
|
||||||
integrity sha512-Ou5x74AOQbM8JjZV8pIssFFqavvj53QzrEEUr5QnElUYb1ZizPwaUJo0ZqmLPqjwPae7ON4SG8U2cSTI4tHKLg==
|
integrity sha512-Ou5x74AOQbM8JjZV8pIssFFqavvj53QzrEEUr5QnElUYb1ZizPwaUJo0ZqmLPqjwPae7ON4SG8U2cSTI4tHKLg==
|
||||||
|
|
||||||
vue@2.6.12, vue@^2.2.6, vue@^2.6.11:
|
vue@2.6.12, vue@^2.6.11:
|
||||||
version "2.6.12"
|
version "2.6.12"
|
||||||
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123"
|
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123"
|
||||||
integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==
|
integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user