You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2020/09/01 02:59:26 UTC
[incubator-echarts-doc] branch next updated: editor: add language
switch
This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch next
in repository https://gitbox.apache.org/repos/asf/incubator-echarts-doc.git
The following commit(s) were added to refs/heads/next by this push:
new 05bcd4b editor: add language switch
05bcd4b is described below
commit 05bcd4bcac1b0d08774487a76db664751fd5950c
Author: pissang <bm...@gmail.com>
AuthorDate: Tue Sep 1 10:58:15 2020 +0800
editor: add language switch
---
editor/server/main.js | 18 ++++++-------
editor/src/components/Block.vue | 2 +-
editor/src/components/BlockContent.vue | 2 +-
editor/src/components/BlockUse.vue | 8 +++---
editor/src/components/Nav.vue | 5 +++-
editor/src/components/Target.vue | 6 ++---
editor/src/layouts/EditorLayout.vue | 47 ++++++++++++++++++++++++++++++----
editor/src/router/routes.js | 7 ++---
editor/src/store/store.js | 19 +++++++-------
9 files changed, 76 insertions(+), 38 deletions(-)
diff --git a/editor/server/main.js b/editor/server/main.js
index 9a520cd..cbc6a62 100644
--- a/editor/server/main.js
+++ b/editor/server/main.js
@@ -11,10 +11,6 @@ console.log('Server Started');
const fileModified = {};
-function fetchBlocks() {
- return parseBlocks(path.resolve(__dirname, '../../zh/option'));
-}
-
let globalSocket;
function manageFilesStatus(socket) {
@@ -61,16 +57,18 @@ io.on('connection', function (socket) {
const requestActions = {
- save(data) {
- for (let fileName in data) {
- const fileTargets = data[fileName];
- const filePath = path.resolve(__dirname, '../../zh/option/', fileName.replace('.', '/')) + '.md';
+ save({ blocks, lang }) {
+ lang = lang === 'zh' ? 'zh' : 'en';
+ for (let fileName in blocks) {
+ const fileTargets = blocks[fileName];
+ const filePath = path.resolve(__dirname, `../../${lang}/option/`, fileName.replace('.', '/')) + '.md';
fs.writeFileSync(filePath, compositeTargets(fileTargets), 'utf-8');
}
console.log('Saved');
},
- fetch() {
- return fetchBlocks();
+ fetch({ lang }) {
+ lang = lang === 'zh' ? 'zh' : 'en';
+ return parseBlocks(path.resolve(__dirname, `../../${lang}/option`));
}
}
diff --git a/editor/src/components/Block.vue b/editor/src/components/Block.vue
index 41c6438..1c4f003 100644
--- a/editor/src/components/Block.vue
+++ b/editor/src/components/Block.vue
@@ -23,7 +23,7 @@ export default {
}
};
}
-}
+};
</script>
<style lang="scss">
diff --git a/editor/src/components/BlockContent.vue b/editor/src/components/BlockContent.vue
index f06f0b7..de10008 100644
--- a/editor/src/components/BlockContent.vue
+++ b/editor/src/components/BlockContent.vue
@@ -45,7 +45,7 @@ export default {
}
}
}
-}
+};
</script>
<style lang="scss">
diff --git a/editor/src/components/BlockUse.vue b/editor/src/components/BlockUse.vue
index 896edc1..dce779e 100644
--- a/editor/src/components/BlockUse.vue
+++ b/editor/src/components/BlockUse.vue
@@ -50,7 +50,7 @@ export default {
data() {
return {
targetFilterKeyword: ''
- }
+ };
},
mounted() {
@@ -73,8 +73,8 @@ export default {
this.targetFilterKeyword = val;
}, ref => {
if (val !== '' && ref.options.length > 0) {
- ref.setOptionIndex(-1) // reset optionIndex in case there is something selected
- ref.moveOptionSelection(1, true) // focus the first selectable option and do not update the input-value
+ ref.setOptionIndex(-1); // reset optionIndex in case there is something selected
+ ref.moveOptionSelection(1, true); // focus the first selectable option and do not update the input-value
}
});
},
@@ -96,7 +96,7 @@ export default {
this.block.args.push(['', '']);
}
}
-}
+};
</script>
<style lang="scss">
diff --git a/editor/src/components/Nav.vue b/editor/src/components/Nav.vue
index a6e4acb..e618581 100644
--- a/editor/src/components/Nav.vue
+++ b/editor/src/components/Nav.vue
@@ -27,6 +27,9 @@
import { store } from '../store/store';
export default {
+
+ props: ['language'],
+
data() {
return {
shared: store,
@@ -40,7 +43,7 @@ export default {
watch: {
selected(newVal) {
if (newVal) {
- const newPath = `/edit/${newVal}`;
+ const newPath = `/edit/${this.language}/${newVal}`;
if (this.$route.path !== newPath) {
this.$router.push({
path: newPath
diff --git a/editor/src/components/Target.vue b/editor/src/components/Target.vue
index 941685f..be908fe 100644
--- a/editor/src/components/Target.vue
+++ b/editor/src/components/Target.vue
@@ -141,7 +141,7 @@ export default {
methods: {
startEdit() {
- this.editingLabel = this.target.name
+ this.editingLabel = this.target.name;
},
saveEdit() {
this.target.name = this.editingLabel;
@@ -192,7 +192,7 @@ export default {
type: blockType,
// Default has same level of previous block
level: blockBefore.level
- }
+ };
switch (blockType) {
case 'header':
block.propertyName = '';
@@ -209,7 +209,7 @@ export default {
}
}
}
-}
+};
</script>
<style lang="scss">
diff --git a/editor/src/layouts/EditorLayout.vue b/editor/src/layouts/EditorLayout.vue
index 942f1c7..0bc3d37 100644
--- a/editor/src/layouts/EditorLayout.vue
+++ b/editor/src/layouts/EditorLayout.vue
@@ -13,11 +13,12 @@
<q-btn flat icon="refresh" @click="restore" v-if="hasUnsaved">Reset Editing</q-btn>
<q-btn flat icon="save" @click="save"> {{ hasUnsaved ? 'Unsaved' : ''}}</q-btn>
<q-btn flat icon="arrow_downward" @click="fetchFromServer"></q-btn>
+ <q-btn flat icon="language" @click="switchLanguage">{{language}}</q-btn>
</q-toolbar>
</q-header>
<q-drawer :persistent="true" v-model="navOpen" side="left" overlay behavior="desktop" bordered>
- <Nav />
+ <Nav :language="language" />
</q-drawer>
<q-page-container>
@@ -33,14 +34,16 @@ import {
store,
saveToServer,
detectChangeAndSaveToLocal,
+ restoreFromLocalStorage,
clearLocalStorage,
fetchFromServer,
restore
} from '../store/store';
-import { socket } from '../store/socket';
import { Notify } from 'quasar';
export default {
+ props: ['language'],
+
components: {
Nav
},
@@ -54,9 +57,16 @@ export default {
};
},
+ mounted() {
+ fetchFromServer(this.language, () => {
+ // Try restore from local storage.
+ restoreFromLocalStorage();
+ });
+ },
+
methods: {
save() {
- saveToServer().then(() => {
+ saveToServer(this.language).then(() => {
this.hasUnsaved = false;
Notify.create({
message: 'Saved Successfuly'
@@ -90,7 +100,8 @@ export default {
persistent: true,
dark: true
}).onOk(() => {
- fetchFromServer().then(() => {
+ fetchFromServer(this.language).then(() => {
+ clearLocalStorage();
Notify.create({
message: 'Fetched Successfuly'
});
@@ -100,6 +111,25 @@ export default {
});
});
});
+ },
+
+ switchLanguage() {
+ this.$q.dialog({
+ title: 'Confirm',
+ message: 'Switch language will override the content you are editing. Are sure to do this?',
+ cancel: true,
+ persistent: true,
+ dark: true
+ }).onOk(() => {
+ const lang = this.language === 'zh' ? 'en' : 'zh';
+
+ const newPath = `/edit/${lang}/${this.$route.params.docPath}`;
+ if (this.$route.path !== newPath) {
+ this.$router.push({
+ path: newPath
+ });
+ }
+ });
}
},
@@ -109,10 +139,17 @@ export default {
detectChangeAndSaveToLocal(() => {
this.hasUnsaved = true;
}, () => {
- this.hasUnsaved = false
+ this.hasUnsaved = false;
});
},
deep: true
+ },
+
+ language() {
+ fetchFromServer(this.language, () => {
+ // Try restore from local storage.
+ restoreFromLocalStorage();
+ });
}
}
};
diff --git a/editor/src/router/routes.js b/editor/src/router/routes.js
index 8828ea9..7f74524 100644
--- a/editor/src/router/routes.js
+++ b/editor/src/router/routes.js
@@ -3,15 +3,16 @@ const routes = [
{
path: '/',
// TODO
- redirect: '/edit/series.bar'
+ redirect: '/edit/en/series.bar'
},
{
- path: '/',
+ path: '/edit/:language/',
component: () => import('layouts/EditorLayout.vue'),
+ props: true,
children: [
// { path: 'index', component: () => import('pages/Index.vue') },
- { path: 'edit/:docPath', component: () => import('pages/DocBlockEditor.vue'), props: true }
+ { path: '/edit/:language/:docPath', component: () => import('pages/DocBlockEditor.vue'), props: true }
]
},
diff --git a/editor/src/store/store.js b/editor/src/store/store.js
index 8a55634..6c1f608 100644
--- a/editor/src/store/store.js
+++ b/editor/src/store/store.js
@@ -4,7 +4,6 @@ import { Notify } from 'quasar';
export const store = {
blocks: {},
-
originalBlocks: null,
blocksToCopy: [],
@@ -28,17 +27,14 @@ function updateTargets() {
store.targetsMap = Object.freeze(targetsMap);
}
-fetchFromServer(() => {
- // Try restore from local storage.
- restoreFromLocalStorage();
-});
-
socket.on('editor-exists', function () {
store.editorExists = true;
});
-export function fetchFromServer(extraProcess) {
- return socketRequest('fetch').then((blocks) => {
+export function fetchFromServer(lang, extraProcess) {
+ return socketRequest('fetch', {
+ lang
+ }).then((blocks) => {
store.blocks = blocks;
store.originalBlocks = Object.freeze(_.cloneDeep(blocks));
@@ -48,8 +44,11 @@ export function fetchFromServer(extraProcess) {
});
}
-export function saveToServer() {
- return socketRequest('save').then(() => {
+export function saveToServer(lang) {
+ return socketRequest('save', {
+ blocks: store.blocks,
+ lang
+ }).then(() => {
// Reset the base
store.originalBlocks = Object.freeze(_.cloneDeep(store.blocks));
clearLocalStorage();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org