1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <template lang="pug">
- transition(:duration="400")
- .modal(v-show='isShown', v-cloak)
- transition(name='modal-background')
- .modal-background(v-show='isShown')
- .modal-container
- transition(name='modal-content')
- .modal-content(v-show='isShown')
- header.is-indigo {{ $t('modal.movepagetitle') }}
- section
- label.label {{ $t('modal.movepagepath') }}
- p.control.is-fullwidth(v-bind:class='{ "is-loading": isLoading }')
- input.input(type='text', v-bind:placeholder='$t("modal.movepageplaceholder")', v-model='movePath', ref='movePageInput', @keyup.enter='move', @keyup.esc='cancel')
- span.help.is-red(v-show='isInvalid') {{ $t('modal.movepageinvalid') }}
- span.note {{ $t('modal.movepagewarning') }}
- footer
- a.button.is-grey.is-outlined(v-on:click='cancel') {{ $t('modal.discard') }}
- a.button.is-indigo(v-on:click='move') {{ $t('modal.move') }}
- </template>
- <script>
- export default {
- name: 'modal-move-page',
- props: ['currentPath'],
- data () {
- return {
- movePath: '',
- isLoading: false,
- isInvalid: false
- }
- },
- computed: {
- isShown () {
- if (this.$store.state.modalMovePage.shown) {
- this.movePath = this.currentPath
- this.makeSelection()
- }
- return this.$store.state.modalMovePage.shown
- }
- },
- methods: {
- makeSelection() {
- let self = this
- self._.delay(() => {
- let startPos = (self._.includes(self.currentPath, '/')) ? self._.lastIndexOf(self.movePath, '/') + 1 : 0
- self.$helpers.form.setInputSelection(self.$refs.movePageInput, startPos, self.movePath.length)
- }, 100)
- },
- cancel() {
- this.$store.dispatch('modalMovePage/close')
- },
- move () {
- this.isInvalid = false
- let newDocPath = this.$helpers.pages.makeSafePath(this.movePath)
- if (this._.isEmpty(newDocPath) || newDocPath === this.currentPath || newDocPath === 'home') {
- this.isInvalid = true
- } else {
- this.isLoading = true
- this.$http.put(window.location.href, {
- move: newDocPath
- }).then(resp => {
- return resp.json()
- }).then(resp => {
- if (resp.ok) {
- window.location.assign('/' + newDocPath)
- } else {
- this.loading = false
- self.$store.dispatch('alert', {
- style: 'red',
- icon: 'ui-2_square-remove-09',
- msg: resp.msg
- })
- }
- }).catch(err => {
- this.loading = false
- self.$store.dispatch('alert', {
- style: 'red',
- icon: 'ui-2_square-remove-09',
- msg: 'Error: ' + err.body.msg
- })
- })
- }
- }
- }
- }
- </script>
|