feat: admin - contribute

This commit is contained in:
NGPixel 2018-04-14 15:22:45 -04:00
parent a5173fcf56
commit 8726494340
4 changed files with 119 additions and 37 deletions

View File

@ -62,6 +62,10 @@
v-list-tile(to='/dev')
v-list-tile-action: v-icon weekend
v-list-tile-title Developer Tools
v-divider.my-2
v-list-tile(to='/contribute')
v-list-tile-action: v-icon favorite
v-list-tile-title Contribute to Wiki.js
v-content
transition(name='admin-router')
@ -108,7 +112,8 @@ const router = new VueRouter({
{ path: '/api', component: () => import(/* webpackChunkName: "admin" */ './admin/admin-api.vue') },
{ path: '/system', component: () => import(/* webpackChunkName: "admin" */ './admin/admin-system.vue') },
{ path: '/utilities', component: () => import(/* webpackChunkName: "admin" */ './admin/admin-utilities.vue') },
{ path: '/dev', component: () => import(/* webpackChunkName: "admin-dev" */ './admin/admin-dev.vue') }
{ path: '/dev', component: () => import(/* webpackChunkName: "admin-dev" */ './admin/admin-dev.vue') },
{ path: '/contribute', component: () => import(/* webpackChunkName: "admin-dev" */ './admin/admin-contribute.vue') }
]
})

View File

@ -0,0 +1,60 @@
<template lang='pug'>
v-card(flat)
v-card(color='grey lighten-5')
.pa-3.pt-4
.headline.primary--text Contribute
.subheading.grey--text Help support Wiki.js development and operations
v-card.pa-3
.body-1.pl-3 Wiki.js is a #[strong free and open-source software] brought to you with #[v-icon(color='red') favorite] by #[a(href='https://requarks.io', target='_blank') requarks.io] and #[a(href='https://github.com/Requarks/wiki/graphs/contributors', target='_blank') contributors].
.body-1.pt-3.pl-3 We need your help to keep improving the software and run the various associated services (e.g. hosting and networking).
v-divider
v-subheader Fund our work
.body-1.pl-3 Wiki.js is part of the Open Collective initiative. You can contribute financially by making a monthly or one-time donation:
v-card-actions.mt-3.ml-2
v-btn(depressed, color='primary', href='https://opencollective.com/wikijs')
v-icon(left) local_atm
| Make a donation
v-divider
v-subheader Contribute
.body-1.pl-3
ul
li Submit an idea or vote on a proposed one on the #[a(href='https://requests.requarks.io/wiki', target='_blank') feature requests board].
li Found a bug? Submit an issue on #[a(href='https://github.com/Requarks/wiki/issues', target='_blank') Github].
li Help translate Wiki.js in your language. Let us know on #[a(href='https://gitter.im/Requarks/wiki', target='_blank') Gitter].
v-divider
v-subheader Spread the word
.body-1.pl-3
ul
li Talk to your friends and colleagues about how awesome Wiki.js is!
li Follow us on #[a(href='https://twitter.com/requarks', target='_blank') Twitter].
</template>
<script>
import IconGithubCircle from 'mdi/github-circle'
export default {
components: {
IconGithubCircle
},
data() {
return {
tab: '0',
telemetry: true
}
},
methods: {
resetClientID() {
}
}
}
</script>
<style lang='scss' scoped>
ul {
margin-left: 1rem;
list-style-type: square;
}
</style>

View File

@ -3,7 +3,7 @@
v-layout(row wrap)
v-flex(xs12)
.headline.primary--text Dashboard
.subheading.grey--text Coming soon
.subheading.grey--text Wiki.js v2 ALPHA Build - NOT FOR PRODUCTION USE
</template>
<script>

View File

@ -35,12 +35,24 @@
.login-copyright
span {{ $t('footer.poweredBy') }}
a(href='https://wiki.js.org', rel='external', title='Wiki.js') Wiki.js
v-snackbar(
:color='notification.style'
bottom,
right,
multi-line,
v-model='notificationState'
)
.text-xs-left
v-icon.mr-3(dark) {{ notification.icon }}
span {{ notification.message }}
</template>
<script>
/* global siteConfig */
import _ from 'lodash'
import { mapState } from 'vuex'
import strategiesQuery from 'gql/login-query-strategies.gql'
import loginMutation from 'gql/login-mutation-login.gql'
@ -62,12 +74,16 @@ export default {
}
},
computed: {
...mapState(['notification']),
notificationState: {
get() { return this.notification.isActive },
set(newState) { this.$store.commit('updateNotificationState', newState) }
},
siteTitle () {
return siteConfig.title
}
},
mounted () {
this.$store.commit('navigator/subtitleStatic', 'Login')
this.refreshStrategies()
this.$refs.iptEmail.focus()
},
@ -95,27 +111,27 @@ export default {
this.isLoading = false
}).catch(err => {
console.error(err)
this.$store.dispatch('alert', {
style: 'error',
icon: 'gg-warning',
msg: err.message
this.$store.commit('showNotification', {
style: 'red',
message: err.message,
icon: 'warning'
})
this.isLoading = false
})
},
login () {
if (this.username.length < 2) {
this.$store.dispatch('alert', {
style: 'error',
icon: 'gg-warning',
msg: 'Enter a valid email / username.'
this.$store.commit('showNotification', {
style: 'red',
message: 'Enter a valid email / username.',
icon: 'warning'
})
this.$refs.iptEmail.focus()
} else if (this.password.length < 2) {
this.$store.dispatch('alert', {
style: 'error',
icon: 'gg-warning',
msg: 'Enter a valid password.'
this.$store.commit('showNotification', {
style: 'red',
message: 'Enter a valid password.',
icon: 'warning'
})
this.$refs.iptPassword.focus()
} else {
@ -130,7 +146,7 @@ export default {
}).then(resp => {
if (_.has(resp, 'data.authentication.login')) {
let respObj = _.get(resp, 'data.authentication.login', {})
if (respObj.operation.succeeded === true) {
if (respObj.responseResult.succeeded === true) {
if (respObj.tfaRequired === true) {
this.screen = 'tfa'
this.securityCode = ''
@ -139,25 +155,26 @@ export default {
this.$refs.iptTFA.focus()
})
} else {
this.$store.dispatch('alert', {
this.$store.commit('showNotification', {
message: 'Login successful!',
style: 'success',
icon: 'gg-check',
msg: 'Login successful!'
icon: 'check'
})
window.location.replace('/') // TEMPORARY - USE RETURNURL
}
this.isLoading = false
} else {
throw new Error(respObj.operation.message)
throw new Error(respObj.responseResult.message)
}
} else {
throw new Error('Authentication is unavailable.')
}
}).catch(err => {
console.error(err)
this.$store.dispatch('alert', {
style: 'error',
icon: 'gg-warning',
msg: err.message
this.$store.commit('showNotification', {
style: 'red',
message: err.message,
icon: 'warning'
})
this.isLoading = false
})
@ -165,10 +182,10 @@ export default {
},
verifySecurityCode () {
if (this.securityCode.length !== 6) {
this.$store.dispatch('alert', {
style: 'error',
icon: 'gg-warning',
msg: 'Enter a valid security code.'
this.$store.commit('showNotification', {
style: 'red',
message: 'Enter a valid security code.',
icon: 'warning'
})
this.$refs.iptTFA.focus()
} else {
@ -182,25 +199,25 @@ export default {
}).then(resp => {
if (_.has(resp, 'data.authentication.loginTFA')) {
let respObj = _.get(resp, 'data.authentication.loginTFA', {})
if (respObj.operation.succeeded === true) {
this.$store.dispatch('alert', {
if (respObj.responseResult.succeeded === true) {
this.$store.commit('showNotification', {
message: 'Login successful!',
style: 'success',
icon: 'gg-check',
msg: 'Login successful!'
icon: 'check'
})
this.isLoading = false
} else {
throw new Error(respObj.operation.message)
throw new Error(respObj.responseResult.message)
}
} else {
throw new Error('Authentication is unavailable.')
}
}).catch(err => {
console.error(err)
this.$store.dispatch('alert', {
style: 'error',
icon: 'gg-warning',
msg: err.message
this.$store.commit('showNotification', {
style: 'red',
message: err.message,
icon: 'warning'
})
this.isLoading = false
})