feat: edit menu speed-dial UX

pull/1080/head
Nick 5 years ago
parent 4f8a28f617
commit c7d6473401

@ -246,7 +246,7 @@ export default {
pictureUrl: get('user/pictureUrl'), pictureUrl: get('user/pictureUrl'),
isAuthenticated: get('user/authenticated'), isAuthenticated: get('user/authenticated'),
permissions: get('user/permissions'), permissions: get('user/permissions'),
picture() { picture () {
if (this.pictureUrl && this.pictureUrl.length > 1) { if (this.pictureUrl && this.pictureUrl.length > 1) {
return { return {
kind: 'image', kind: 'image',
@ -264,27 +264,44 @@ export default {
} }
} }
}, },
isAdmin() { isAdmin () {
return _.intersection(this.permissions, ['manage:system', 'write:users', 'manage:users', 'write:groups', 'manage:groups', 'manage:navigation', 'manage:theme', 'manage:api']).length > 0 return _.intersection(this.permissions, ['manage:system', 'write:users', 'manage:users', 'write:groups', 'manage:groups', 'manage:navigation', 'manage:theme', 'manage:api']).length > 0
} }
}, },
created() { created () {
if (this.hideSearch || this.dense || this.$vuetify.breakpoint.smAndDown) { if (this.hideSearch || this.dense || this.$vuetify.breakpoint.smAndDown) {
this.searchIsShown = false this.searchIsShown = false
} }
}, },
mounted () {
this.$root.$on('pageEdit', () => {
this.pageEdit()
})
this.$root.$on('pageHistory', () => {
this.pageHistory()
})
this.$root.$on('pageSource', () => {
this.pageSource()
})
this.$root.$on('pageMove', () => {
this.pageMove()
})
this.$root.$on('pageDelete', () => {
this.pageDelete()
})
},
methods: { methods: {
searchFocus() { searchFocus () {
this.searchIsFocused = true this.searchIsFocused = true
}, },
searchBlur() { searchBlur () {
this.searchIsFocused = false this.searchIsFocused = false
}, },
searchClose() { searchClose () {
this.search = '' this.search = ''
this.searchBlur() this.searchBlur()
}, },
searchToggle() { searchToggle () {
this.searchIsShown = !this.searchIsShown this.searchIsShown = !this.searchIsShown
if (this.searchIsShown) { if (this.searchIsShown) {
_.delay(() => { _.delay(() => {
@ -292,7 +309,7 @@ export default {
}, 200) }, 200)
} }
}, },
searchEnter() { searchEnter () {
this.$root.$emit('searchEnter', true) this.$root.$emit('searchEnter', true)
}, },
searchMove(dir) { searchMove(dir) {
@ -339,7 +356,7 @@ export default {
icon: 'ferry' icon: 'ferry'
}) })
}, },
async changeLocale(locale) { async changeLocale (locale) {
await this.$i18n.i18next.changeLanguage(locale.code) await this.$i18n.i18next.changeLanguage(locale.code)
switch (this.mode) { switch (this.mode) {
case 'view': case 'view':

@ -134,19 +134,86 @@
v-flex.page-col-content(xs12, lg9, xl10) v-flex.page-col-content(xs12, lg9, xl10)
v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl', v-if='isAuthenticated') v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl', v-if='isAuthenticated')
template(v-slot:activator='{ on }') template(v-slot:activator='{ on: onEditActivator }')
v-btn.btn-animate-edit( v-speed-dial(
fab v-model='pageEditFab'
direction='top'
open-on-hover
transition='scale-transition'
bottom bottom
:right='!$vuetify.rtl' :right='!$vuetify.rtl'
:left='$vuetify.rtl' :left='$vuetify.rtl'
color='primary'
fixed fixed
dark dark
:href='"/e/" + locale + "/" + path'
v-on='on'
) )
v-icon mdi-pencil template(v-slot:activator)
v-btn.btn-animate-edit(
fab
color='primary'
v-model='pageEditFab'
@click='pageEdit'
v-on='onEditActivator'
)
v-icon mdi-pencil
v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl')
template(v-slot:activator='{ on }')
v-btn(
fab
small
color='white'
light
v-on='on'
@click='pageHistory'
)
v-icon(size='20') mdi-history
span History
v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl')
template(v-slot:activator='{ on }')
v-btn(
fab
small
color='white'
light
v-on='on'
@click='pageSource'
)
v-icon(size='20') mdi-code-tags
span View Source
v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl')
template(v-slot:activator='{ on }')
v-btn(
fab
small
color='white'
light
v-on='on'
@click='pageMove'
)
v-icon(size='20') mdi-content-save-move-outline
span Move / Rename
v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl')
template(v-slot:activator='{ on }')
v-btn(
fab
dark
small
color='red'
v-on='on'
@click='pageDelete'
)
v-icon(size='20') mdi-trash-can-outline
span Delete
v-tooltip(:right='$vuetify.rtl', :left='!$vuetify.rtl')
template(v-slot:activator='{ on }')
v-btn.mb-4(
fab
color='teal'
dark
v-on='on'
@click='pageHistory'
)
v-icon mdi-plus
span New Page
span {{$t('common:page.editPage')}} span {{$t('common:page.editPage')}}
.contents(ref='container') .contents(ref='container')
slot(name='contents') slot(name='contents')
@ -251,6 +318,7 @@ export default {
navShown: false, navShown: false,
navExpanded: false, navExpanded: false,
upBtnShown: false, upBtnShown: false,
pageEditFab: false,
scrollOpts: { scrollOpts: {
duration: 1500, duration: 1500,
offset: 0, offset: 0,
@ -343,6 +411,21 @@ export default {
}, },
print () { print () {
window.print() window.print()
},
pageEdit () {
this.$root.$emit('pageEdit')
},
pageHistory () {
this.$root.$emit('pageHistory')
},
pageSource () {
this.$root.$emit('pageSource')
},
pageMove () {
this.$root.$emit('pageMove')
},
pageDelete () {
this.$root.$emit('pageDelete')
} }
} }
} }

Loading…
Cancel
Save