diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js index e5ead8bc..a6c79e87 100644 --- a/src/components/registration/registration.js +++ b/src/components/registration/registration.js @@ -11,7 +11,8 @@ const registration = { username: '', password: '', confirm: '' - } + }, + captcha: {} }), validations: { user: { @@ -29,6 +30,8 @@ const registration = { if ((!this.registrationOpen && !this.token) || this.signedIn) { this.$router.push('/main/all') } + + this.setCaptcha() }, computed: { token () { return this.$route.params.token }, @@ -41,10 +44,12 @@ const registration = { }) }, methods: { - ...mapActions(['signUp']), + ...mapActions(['signUp', 'getCaptcha']), async submit () { this.user.nickname = this.user.username this.user.token = this.token + this.user.captcha_solution = this.captcha.solution + this.user.captcha_token = this.captcha.token this.$v.$touch() @@ -56,6 +61,9 @@ const registration = { console.warn('Registration failed: ' + error) } } + }, + setCaptcha () { + this.getCaptcha().then(cpt => { this.captcha = cpt }) } } } diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index 8cb1392b..f187e215 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -75,6 +75,19 @@ +
+ +
+
diff --git a/src/components/tab_switcher/tab_switcher.jsx b/src/components/tab_switcher/tab_switcher.jsx index 9e3dee04..2f362c4d 100644 --- a/src/components/tab_switcher/tab_switcher.jsx +++ b/src/components/tab_switcher/tab_switcher.jsx @@ -18,12 +18,18 @@ export default Vue.component('tab-switcher', { const tabs = this.$slots.default .filter(slot => slot.data) .map((slot, index) => { - const classes = ['tab'] + const classesTab = ['tab'] + const classesWrapper = ['tab-wrapper'] if (index === this.active) { - classes.push('active') + classesTab.push('active') + classesWrapper.push('active') } - return () + return ( +
+ +
+ ) }); const contents = this.$slots.default.filter(_=>_.data).map(( slot, index ) => { const active = index === this.active diff --git a/src/components/tab_switcher/tab_switcher.scss b/src/components/tab_switcher/tab_switcher.scss index fbd3321b..428335c0 100644 --- a/src/components/tab_switcher/tab_switcher.scss +++ b/src/components/tab_switcher/tab_switcher.scss @@ -9,57 +9,67 @@ .tabs { display: flex; position: relative; - justify-content: center; width: 100%; overflow-y: hidden; overflow-x: auto; padding-top: 5px; - height: 32px; box-sizing: border-box; &::after, &::before { display: block; content: ''; flex: 1 1 auto; - } - - .tab, &::after, &::before { border-bottom: 1px solid; border-bottom-color: $fallback--border; border-bottom-color: var(--border, $fallback--border); } - .tab { + .tab-wrapper { + height: 28px; + overflow: hidden; position: relative; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - padding: 5px 1em 99px; - white-space: nowrap; + display: flex; + flex: 0 0 auto; - &:not(.active) { - z-index: 4; + .tab { + width: 100%; + min-width: 1px; + position: relative; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + padding: 6px 1em; + padding-bottom: 99px; + margin-bottom: 6px - 99px; + white-space: nowrap; - &:hover { - z-index: 6; + &:not(.active) { + z-index: 4; + + &:hover { + z-index: 6; + } } + &.active { + background: transparent; + z-index: 5; + } + } + + &:not(.active) { &::after { content: ''; position: absolute; left: 0; right: 0; - top: 26px; + bottom: 0; + z-index: 7; border-bottom: 1px solid; border-bottom-color: $fallback--border; border-bottom-color: var(--border, $fallback--border); } } - - &.active { - background: transparent; - border-bottom: none; - z-index: 5; - } } + } } diff --git a/src/modules/users.js b/src/modules/users.js index 220e16d6..31fe94fc 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -159,6 +159,10 @@ const users = { throw Error(errors) } }, + async getCaptcha (store) { + return await store.rootState.api.backendInteractor.getCaptcha() + }, + logout (store) { store.commit('clearCurrentUser') store.commit('setToken', false) diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index ae876b7f..b509c905 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -167,6 +167,8 @@ const register = (params) => { }) } +const getCaptcha = () => fetch('/api/pleroma/captcha').then(resp => resp.json()) + const authHeaders = (accessToken) => { if (accessToken) { return { 'Authorization': `Bearer ${accessToken}` } @@ -496,6 +498,7 @@ const apiService = { setUserMute, fetchMutes, register, + getCaptcha, updateAvatar, updateBg, updateProfile, diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index c84373ac..cc72f607 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -71,6 +71,7 @@ const backendInteractorService = (credentials) => { const fetchMutes = () => apiService.fetchMutes({credentials}) const fetchFollowRequests = () => apiService.fetchFollowRequests({credentials}) + const getCaptcha = () => apiService.getCaptcha() const register = (params) => apiService.register(params) const updateAvatar = ({params}) => apiService.updateAvatar({credentials, params}) const updateBg = ({params}) => apiService.updateBg({credentials, params}) @@ -100,6 +101,7 @@ const backendInteractorService = (credentials) => { setUserMute, fetchMutes, register, + getCaptcha, updateAvatar, updateBg, updateBanner,