| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | 
							- <template lang='pug'>
 
-   v-card.editor-modal-conflict.animated.fadeIn(flat, tile)
 
-     .pa-4
 
-       v-toolbar.radius-7(flat, color='indigo', style='border-bottom-left-radius: 0; border-bottom-right-radius: 0;', dark)
 
-         v-icon.mr-3 mdi-merge
 
-         .subtitle-1 {{$t('editor:conflict.title')}}
 
-         v-spacer
 
-         v-btn(outlined, color='white', @click='useLocal', :title='$t(`editor:conflict.useLocalHint`)')
 
-           v-icon(left) mdi-alpha-l-box
 
-           span {{$t('editor:conflict.useLocal')}}
 
-         v-dialog(
 
-           v-model='isRemoteConfirmDiagShown'
 
-           width='500'
 
-           )
 
-           template(v-slot:activator='{ on }')
 
-             v-btn.ml-3(outlined, color='white', v-on='on', :title='$t(`editor:conflict.useRemoteHint`)')
 
-               v-icon(left) mdi-alpha-r-box
 
-               span {{$t('editor:conflict.useRemote')}}
 
-           v-card
 
-             .dialog-header.is-short.is-indigo
 
-               v-icon.mr-3(color='white') mdi-alpha-r-box
 
-               span {{$t('editor:conflict.overwrite.title')}}
 
-             v-card-text.pa-4
 
-               i18next.body-2(tag='div', path='editor:conflict.overwrite.description')
 
-                 strong(place='refEditsLost') {{$t('editor:conflict.overwrite.editsLost')}}
 
-             v-card-chin
 
-               v-spacer
 
-               v-btn(outlined, color='indigo', @click='isRemoteConfirmDiagShown = false')
 
-                 v-icon(left) mdi-close
 
-                 span {{$t('common:actions.cancel')}}
 
-               v-btn(@click='useRemote', color='indigo', dark)
 
-                 v-icon(left) mdi-check
 
-                 span {{$t('common:actions.confirm')}}
 
-         v-divider.mx-3(vertical)
 
-         v-btn(outlined, color='indigo lighten-4', @click='close')
 
-           v-icon(left) mdi-close
 
-           span {{$t('common:actions.cancel')}}
 
-       v-row.indigo.darken-1.body-2(no-gutters)
 
-         v-col.pa-4
 
-           v-icon.mr-3(color='white') mdi-alpha-l-box
 
-           i18next.white--text(tag='span', path='editor:conflict.localVersion')
 
-             em.indigo--text.text--lighten-4(place='refEditable') {{$t('editor:conflict.editable')}}
 
-         v-divider(vertical)
 
-         v-col.pa-4
 
-           v-icon.mr-3(color='white') mdi-alpha-r-box
 
-           i18next.white--text(tag='span', path='editor:conflict.remoteVersion')
 
-             em.indigo--text.text--lighten-4(place='refReadOnly') {{$t('editor:conflict.readonly')}}
 
-       v-row.grey.lighten-2.body-2(no-gutters)
 
-         v-col.px-4.py-2
 
-           i18next.grey--text.text--darken-2(tag='em', path='editor:conflict.leftPanelInfo')
 
-             span(place='date', :title='$options.filters.moment(checkoutDateActive, `LLL`)') {{ checkoutDateActive | moment('from') }}
 
-         v-divider(vertical)
 
-         v-col.px-4.py-2
 
-           i18next.grey--text.text--darken-2(tag='em', path='editor:conflict.rightPanelInfo')
 
-             strong(place='authorName') {{latest.authorName}}
 
-             span(place='date', :title='$options.filters.moment(latest.updatedAt, `LLL`)') {{ latest.updatedAt | moment('from') }}
 
-       v-row.grey.lighten-3.grey--text.text--darken-3(no-gutters)
 
-         v-col.pa-4
 
-           .body-2
 
-             strong.indigo--text {{$t('editor:conflict.pageTitle')}}
 
-             strong.pl-2 {{title}}
 
-           .caption
 
-             strong.indigo--text {{$t('editor:conflict.pageDescription')}}
 
-             span.pl-2 {{description}}
 
-         v-divider(vertical, light)
 
-         v-col.pa-4
 
-           .body-2
 
-             strong.indigo--text {{$t('editor:conflict.pageTitle')}}
 
-             strong.pl-2 {{latest.title}}
 
-           .caption
 
-             strong.indigo--text {{$t('editor:conflict.pageDescription')}}
 
-             span.pl-2 {{latest.description}}
 
-       v-card.radius-7(:light='!$vuetify.theme.dark', :dark='$vuetify.theme.dark')
 
-         div(ref='cm')
 
- </template>
 
- <script>
 
- import _ from 'lodash'
 
- import gql from 'graphql-tag'
 
- import { sync, get } from 'vuex-pathify'
 
- /* global siteConfig */
 
- // ========================================
 
- // IMPORTS
 
- // ========================================
 
- import '../../libs/codemirror-merge/diff-match-patch.js'
 
- // Code Mirror
 
- import CodeMirror from 'codemirror'
 
- import 'codemirror/lib/codemirror.css'
 
- // Language
 
- import 'codemirror/mode/markdown/markdown.js'
 
- import 'codemirror/mode/htmlmixed/htmlmixed.js'
 
- // Addons
 
- import 'codemirror/addon/selection/active-line.js'
 
- import 'codemirror/addon/merge/merge.js'
 
- import 'codemirror/addon/merge/merge.css'
 
- export default {
 
-   data() {
 
-     return {
 
-       cm: null,
 
-       latest: {
 
-         title: '',
 
-         description: '',
 
-         updatedAt: '',
 
-         authorName: ''
 
-       },
 
-       isRemoteConfirmDiagShown: false
 
-     }
 
-   },
 
-   computed: {
 
-     editorKey: get('editor/editorKey'),
 
-     activeModal: sync('editor/activeModal'),
 
-     pageId: get('page/id'),
 
-     title: get('page/title'),
 
-     description: get('page/description'),
 
-     updatedAt: get('page/updatedAt'),
 
-     checkoutDateActive: sync('editor/checkoutDateActive')
 
-   },
 
-   methods: {
 
-     close () {
 
-       this.isRemoteConfirmDiagShown = false
 
-       this.activeModal = ''
 
-     },
 
-     overwriteAndClose() {
 
-       this.checkoutDateActive = this.latest.updatedAt
 
-       this.$root.$emit('overwriteEditorContent')
 
-       this.$root.$emit('resetEditorConflict')
 
-       this.close()
 
-     },
 
-     useLocal () {
 
-       this.$store.set('editor/content', this.cm.edit.getValue())
 
-       this.overwriteAndClose()
 
-     },
 
-     useRemote () {
 
-       this.$store.set('editor/content', this.latest.content)
 
-       this.overwriteAndClose()
 
-     }
 
-   },
 
-   async mounted () {
 
-     let textMode = 'text/html'
 
-     switch (this.editorKey) {
 
-       case 'markdown':
 
-         textMode = 'text/markdown'
 
-         break
 
-     }
 
-     let resp = await this.$apollo.query({
 
-       query: gql`
 
-         query ($id: Int!) {
 
-           pages {
 
-             conflictLatest(id: $id) {
 
-               id
 
-               authorId
 
-               authorName
 
-               content
 
-               createdAt
 
-               description
 
-               isPublished
 
-               locale
 
-               path
 
-               tags
 
-               title
 
-               updatedAt
 
-             }
 
-           }
 
-         }
 
-       `,
 
-       fetchPolicy: 'network-only',
 
-       variables: {
 
-         id: this.$store.get('page/id')
 
-       }
 
-     })
 
-     resp = _.get(resp, 'data.pages.conflictLatest', false)
 
-     if (!resp) {
 
-       return this.$store.commit('showNotification', {
 
-         message: 'Failed to fetch latest version.',
 
-         style: 'warning',
 
-         icon: 'warning'
 
-       })
 
-     }
 
-     this.latest = resp
 
-     this.cm = CodeMirror.MergeView(this.$refs.cm, {
 
-       value: this.$store.get('editor/content'),
 
-       orig: resp.content,
 
-       tabSize: 2,
 
-       mode: textMode,
 
-       lineNumbers: true,
 
-       lineWrapping: true,
 
-       connect: null,
 
-       highlightDifferences: true,
 
-       styleActiveLine: true,
 
-       collapseIdentical: true,
 
-       direction: siteConfig.rtl ? 'rtl' : 'ltr'
 
-     })
 
-     this.cm.rightOriginal().setSize(null, 'calc(100vh - 265px)')
 
-     this.cm.editor().setSize(null, 'calc(100vh - 265px)')
 
-     this.cm.wrap.style.height = 'calc(100vh - 265px)'
 
-   }
 
- }
 
- </script>
 
- <style lang='scss'>
 
- .editor-modal-conflict {
 
-   position: fixed !important;
 
-   top: 0;
 
-   left: 0;
 
-   z-index: 10;
 
-   width: 100%;
 
-   height: 100vh;
 
-   background-color: rgba(0, 0, 0, .9) !important;
 
-   overflow: auto;
 
- }
 
- </style>
 
 
  |