aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/css/guest.css11
-rw-r--r--core/src/components/login/LoginForm.vue50
2 files changed, 37 insertions, 24 deletions
diff --git a/core/css/guest.css b/core/css/guest.css
index d859e121f2d..6608a18992d 100644
--- a/core/css/guest.css
+++ b/core/css/guest.css
@@ -296,17 +296,6 @@ input[type='password'].password-with-toggle, input[type='text'].password-with-to
width: 219px;
padding-right: 40px;
}
-.toggle-password {
- position: absolute;
- top: 1px;
- right: 5px;
- padding: 14px;
- height: 16px;
-}
-.toggle-password:hover,
-.toggle-password:focus {
- opacity: .6;
-}
input.login {
width: 260px;
height: 50px;
diff --git a/core/src/components/login/LoginForm.vue b/core/src/components/login/LoginForm.vue
index 9114c0a728a..3fa02d5fa0b 100644
--- a/core/src/components/login/LoginForm.vue
+++ b/core/src/components/login/LoginForm.vue
@@ -84,9 +84,15 @@
required>
<label for="password"
class="infield">{{ t('Password') }}</label>
- <a href="#" class="toggle-password" @click.stop.prevent="togglePassword">
- <img :src="toggleIcon" :alt="t('core', 'Toggle password visibility')">
- </a>
+ <Button class="toggle-password"
+ type="tertiary-no-background"
+ :aria-label="isPasswordHidden ? t('core', 'Show password') : t('core', 'Hide password')"
+ @click.stop.prevent="togglePassword">
+ <template #icon>
+ <Eye v-if="isPasswordHidden" :size="20" />
+ <EyeOff v-else :size="20" />
+ </template>
+ </Button>
</p>
<LoginButton :loading="loading" />
@@ -128,15 +134,24 @@
<script>
import jstz from 'jstimezonedetect'
+import { generateUrl, imagePath } from '@nextcloud/router'
+
+import Button from '@nextcloud/vue/dist/Components/Button'
+import Eye from 'vue-material-design-icons/Eye'
+import EyeOff from 'vue-material-design-icons/EyeOff'
+
import LoginButton from './LoginButton'
-import {
- generateUrl,
- imagePath,
-} from '@nextcloud/router'
export default {
name: 'LoginForm',
- components: { LoginButton },
+
+ components: {
+ Button,
+ Eye,
+ EyeOff,
+ LoginButton,
+ },
+
props: {
username: {
type: String,
@@ -167,6 +182,7 @@ export default {
default: false,
},
},
+
data() {
return {
loading: false,
@@ -177,6 +193,7 @@ export default {
passwordInputType: 'password',
}
},
+
computed: {
apacheAuthFailed() {
return this.errors.indexOf('apacheAuthFailed') !== -1
@@ -190,16 +207,17 @@ export default {
userDisabled() {
return this.errors.indexOf('userdisabled') !== -1
},
- toggleIcon() {
- return imagePath('core', 'actions/toggle.svg')
- },
loadingIcon() {
return imagePath('core', 'loading-dark.gif')
},
loginActionUrl() {
return generateUrl('login')
},
+ isPasswordHidden() {
+ return this.passwordInputType === 'password'
+ },
},
+
mounted() {
if (this.username === '') {
this.$refs.user.focus()
@@ -207,6 +225,7 @@ export default {
this.$refs.password.focus()
}
},
+
methods: {
togglePassword() {
if (this.passwordInputType === 'password') {
@@ -226,6 +245,11 @@ export default {
}
</script>
-<style scoped>
-
+<style lang="scss" scoped>
+.toggle-password {
+ position: absolute;
+ top: 6px;
+ right: 10px;
+ color: var(--color-text-lighter);
+}
</style>