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 f608db8 fix code update in live example after diff algorithm changed
f608db8 is described below
commit f608db8d19fda1e32b1e09a36da3f935199f5bba
Author: pissang <[email protected]>
AuthorDate: Thu Dec 31 12:50:14 2020 +0800
fix code update in live example after diff algorithm changed
---
src/components/LiveExample.vue | 43 +++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 19 deletions(-)
diff --git a/src/components/LiveExample.vue b/src/components/LiveExample.vue
index 72d23c1..9beba87 100644
--- a/src/components/LiveExample.vue
+++ b/src/components/LiveExample.vue
@@ -71,7 +71,7 @@ import 'codemirror/theme/dracula.css';
// import 'codemirror/mode/javascript/javascript.js'
import beautifier from 'js-beautify';
import throttle from 'lodash.throttle';
-import arrayDiff from 'zrender/esm/core/arrayDiff';
+import arrayDiff from 'zrender/lib/core/arrayDiff';
import scrollIntoView from 'scroll-into-view';
import {ECHARTS_LIB} from '../config';
@@ -93,27 +93,32 @@ function fetchECharts() {
function diffUpdateCode(oldCode, newCode, cmInstance) {
const oldLines = oldCode.split(/\n/);
const newLines = newCode.split(/\n/);
- const result = arrayDiff(oldLines, newLines);
+ const diff = arrayDiff(oldLines, newLines);
const changedLines = [];
- const len = result.length;
-
- for (let i = len - 1; i >= 0; i--) {
- const item = result[i];
- if (item.cmd === '-') {
- cmInstance.replaceRange(
- '', {line: item.idx, ch: 0}, {line: item.idx + 1, ch: 0}
- );
+
+ // Remove lines from bottom to top so the line number won't be changed.
+ for (let i = diff.length - 1; i >= 0; i--) {
+ const item = diff[i];
+ if (item.removed) {
+ for (let k = item.count - 1; k >= 0; k--) {
+ const idx = item.indices[k];
+ cmInstance.replaceRange(
+ '', {line: idx, ch: 0}, {line: idx + 1, ch: 0}
+ );
+ }
}
}
-
- for (let i = 0; i < len; i++) {
- const item = result[i];
- if (item.cmd === '+') {
- cmInstance.replaceRange(
- newLines[item.idx] + '\n', {line: item.idx, ch: 0}
- );
- changedLines.push(item.idx);
+ for (let i = 0; i < diff.length; i++) {
+ const item = diff[i];
+ if (item.added) {
+ for (let k = 0; k < item.count; k++) {
+ const idx = item.indices[k];
+ cmInstance.replaceRange(
+ newLines[idx] + '\n', {line: idx, ch: 0}
+ );
+ changedLines.push(idx);
+ }
}
}
@@ -121,7 +126,7 @@ function diffUpdateCode(oldCode, newCode, cmInstance) {
cmInstance.addLineClass(idx, 'wrap', 'option-changed');
});
- if (len) {
+ if (diff.length) {
setTimeout(() => {
cmInstance.scrollIntoView({
line: changedLines[0],
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]