feat(editor): support uncompressed base64-encoded code
diff --git a/src/common/helper.js b/src/common/helper.js
index 7d43fb8..8b5a142 100644
--- a/src/common/helper.js
+++ b/src/common/helper.js
@@ -120,3 +120,7 @@
);
} catch {}
}
+
+export function decodeBase64(str) {
+ return decodeURIComponent(escape(window.atob(str)));
+}
diff --git a/src/common/store.js b/src/common/store.js
index d9ce3c6..346e39a 100644
--- a/src/common/store.js
+++ b/src/common/store.js
@@ -2,7 +2,12 @@
import { URL_PARAMS } from '../common/config';
import CHART_LIST from '../data/chart-list-data';
import CHART_LIST_GL from '../data/chart-list-data-gl';
-import { compressStr, decompressStr, isTrustedOpener } from './helper';
+import {
+ compressStr,
+ decompressStr,
+ decodeBase64,
+ isTrustedOpener
+} from './helper';
import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('1234567890abcdefghijklmnopqrstuvwxyz', 10);
@@ -109,11 +114,14 @@
}
return new Promise((resolve, reject) => {
// ignore c if code is provided
- // TODO support uncompressed base64 code like `code=xxxx&enc=base64`
- if (URL_PARAMS.code) {
+ let code = URL_PARAMS.code;
+ if (code) {
try {
// PENDING fallback to `c` if the decompressed code is not available?
- const code = decompressStr(URL_PARAMS.code);
+ code =
+ URL_PARAMS.enc === 'base64'
+ ? decodeBase64(code)
+ : decompressStr(code);
// not considered as shared code if it's opened by echarts website like echarts-doc
store.isSharedCode = !isTrustedOpener() && !!code;
// clear the opener