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 Move document
- section
- label.label Enter the new document path:
- p.control.is-fullwidth(v-bind:class='{ "is-loading": isLoading }')
- input.input(type='text', placeholder='page-name', v-model='movePath', ref='movePageInput', @keyup.enter='move', @keyup.esc='cancel')
- span.help.is-red(v-show='isInvalid') This document path is invalid or not allowed!
- span.note Note that moving or renaming documents can lead to broken links. Make sure to edit any page that links to this document afterwards!
- footer
- a.button.is-grey.is-outlined(v-on:click='cancel') Discard
- a.button.is-indigo(v-on:click='move') 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: function () {
- 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: function () {
- this.$store.dispatch('modalMovePage/close')
- },
- move: function () {
- 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: 'square-cross',
- msg: resp.msg
- })
- }
- }).catch(err => {
- this.loading = false
- self.$store.dispatch('alert', {
- style: 'red',
- icon: 'square-cross',
- msg: 'Error: ' + err.body.msg
- })
- })
- }
- }
- }
- }
- </script>
|