mirror of https://github.com/Requarks/wiki.git
10 changed files with 331 additions and 2 deletions
Unified View
Diff Options
-
14client/components/common/nav-header.vue
-
122client/components/common/page-convert.vue
-
1client/store/page.js
-
22client/themes/default/components/page.vue
-
2package.json
-
16server/graph/resolvers/page.js
-
5server/graph/schemas/page.graphql
-
133server/models/pages.js
-
1server/views/page.pug
-
17yarn.lock
@ -0,0 +1,122 @@ |
|||||
|
<template lang='pug'> |
||||
|
v-dialog( |
||||
|
v-model='isShown' |
||||
|
max-width='550' |
||||
|
persistent |
||||
|
overlay-color='blue-grey darken-4' |
||||
|
overlay-opacity='.7' |
||||
|
) |
||||
|
v-card |
||||
|
.dialog-header.is-short.is-dark |
||||
|
v-icon.mr-2(color='white') mdi-lightning-bolt |
||||
|
span {{$t('common:page.convert')}} |
||||
|
v-card-text.pt-5 |
||||
|
i18next.body-2(path='common:page.convertTitle', tag='div') |
||||
|
span.blue-grey--text.text--darken-2(place='title') {{pageTitle}} |
||||
|
v-select.mt-5( |
||||
|
:items=`[ |
||||
|
{ value: 'markdown', text: 'Markdown' }, |
||||
|
{ value: 'ckeditor', text: 'Visual Editor' }, |
||||
|
{ value: 'code', text: 'Raw HTML' } |
||||
|
]` |
||||
|
outlined |
||||
|
dense |
||||
|
hide-details |
||||
|
v-model='newEditor' |
||||
|
) |
||||
|
.caption.mt-5 {{$t('common:page.convertSubtitle')}} |
||||
|
v-card-chin |
||||
|
v-spacer |
||||
|
v-btn(text, @click='discard', :disabled='loading') {{$t('common:actions.cancel')}} |
||||
|
v-btn.px-4(color='grey darken-3', @click='convertPage', :loading='loading').white--text {{$t('common:actions.convert')}} |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import _ from 'lodash' |
||||
|
import { get } from 'vuex-pathify' |
||||
|
import gql from 'graphql-tag' |
||||
|
|
||||
|
export default { |
||||
|
props: { |
||||
|
value: { |
||||
|
type: Boolean, |
||||
|
default: false |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
loading: false, |
||||
|
newEditor: '' |
||||
|
} |
||||
|
}, |
||||
|
computed: { |
||||
|
isShown: { |
||||
|
get() { return this.value }, |
||||
|
set(val) { this.$emit('input', val) } |
||||
|
}, |
||||
|
pageTitle: get('page/title'), |
||||
|
pagePath: get('page/path'), |
||||
|
pageLocale: get('page/locale'), |
||||
|
pageId: get('page/id'), |
||||
|
pageEditor: get('page/editor') |
||||
|
}, |
||||
|
mounted () { |
||||
|
this.newEditor = this.pageEditor |
||||
|
}, |
||||
|
methods: { |
||||
|
discard() { |
||||
|
this.isShown = false |
||||
|
}, |
||||
|
async convertPage() { |
||||
|
this.loading = true |
||||
|
this.$store.commit(`loadingStart`, 'page-convert') |
||||
|
this.$nextTick(async () => { |
||||
|
try { |
||||
|
const resp = await this.$apollo.mutate({ |
||||
|
mutation: gql` |
||||
|
mutation ( |
||||
|
$id: Int! |
||||
|
$editor: String! |
||||
|
) { |
||||
|
pages { |
||||
|
convert( |
||||
|
id: $id |
||||
|
editor: $editor |
||||
|
) { |
||||
|
responseResult { |
||||
|
succeeded |
||||
|
errorCode |
||||
|
slug |
||||
|
message |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
`, |
||||
|
variables: { |
||||
|
id: this.pageId, |
||||
|
editor: this.newEditor |
||||
|
} |
||||
|
}) |
||||
|
if (_.get(resp, 'data.pages.convert.responseResult.succeeded', false)) { |
||||
|
this.isShown = false |
||||
|
_.delay(() => { |
||||
|
window.location.assign(`/e/${this.pageLocale}/${this.pagePath}`) |
||||
|
}, 400) |
||||
|
} else { |
||||
|
throw new Error(_.get(resp, 'data.pages.convert.responseResult.message', this.$t('common:error.unexpected'))) |
||||
|
} |
||||
|
} catch (err) { |
||||
|
this.$store.commit('pushGraphError', err) |
||||
|
} |
||||
|
this.$store.commit(`loadingStop`, 'page-convert') |
||||
|
this.loading = false |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang='scss'> |
||||
|
|
||||
|
</style> |
Write
Preview
Loading…
Cancel
Save