You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by ov...@apache.org on 2020/10/29 07:22:59 UTC

[incubator-echarts-handbook] branch master updated: chore: use example iframe

This is an automated email from the ASF dual-hosted git repository.

ovilia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-echarts-handbook.git


The following commit(s) were added to refs/heads/master by this push:
     new a35e41d  chore: use example iframe
a35e41d is described below

commit a35e41dad5252cd908c1d13b53e8bb9802f60118
Author: Ovilia <zw...@gmail.com>
AuthorDate: Thu Oct 29 15:20:00 2020 +0800

    chore: use example iframe
---
 components/partials/Sidebar.vue              | 116 ++++++++--
 configs/{config.js => config.asf.js}         |   2 +-
 configs/config.dev.js                        |   7 +
 configs/config.js                            |  14 +-
 contents/en/application/data/dynamic-data.md |  24 +--
 contents/en/best-practice/aria.md            |   6 +-
 contents/en/best-practice/canvas-vs-svg.md   |   6 +-
 contents/en/concepts/dataset.md              |  80 +++----
 contents/en/concepts/event.md                |  40 ++--
 contents/zh/application/data/dynamic-data.md |   6 +-
 contents/zh/best-practice/aria.md            |   2 +-
 contents/zh/best-practice/canvas-vs-svg.md   |   2 +-
 contents/zh/concepts/dataset.md              |  14 +-
 contents/zh/concepts/event.md                |   2 +-
 contents/zh/get-started.md                   |   2 +-
 contents/zh/posts.js                         |  10 -
 nuxt.config.js                               |   7 +-
 pages/helper/contributors.ts                 | 305 ++++++++++++++++++++++-----
 18 files changed, 468 insertions(+), 177 deletions(-)

diff --git a/components/partials/Sidebar.vue b/components/partials/Sidebar.vue
index 9e94e0a..1b89fa2 100644
--- a/components/partials/Sidebar.vue
+++ b/components/partials/Sidebar.vue
@@ -2,27 +2,64 @@
   <div class="bd-sidebar border-bottom-0 col-md-3 col-xl-2 col-12">
     <!-- active: {{ active }}. {{ posts }} -->
     <div class="bd-docs-nav">
-      <div class="bd-toc-item level0" v-for="level0Post in $store.state.posts.zh">
-        <a :href="level0Post.children ? 'javascript:;' : rootPath + level0Post.dir"
+      <div class="bd-toc-item level0"
+        v-for="level0Post in $store.state.posts.zh"
+        :key="level0Post.dir"
+      >
+        <a class="bd-toc-link"
+          :href="level0Post.children ? 'javascript:;' : rootPath + level0Post.dir"
           v-if="!level0Post.draft"
-          class="bd-toc-link">{{ level0Post.title }}</a>
-        <ul class="nav bd-sidenav level1" v-if="!level0Post.draft && level0Post.children">
-          <li class="nav-item" v-for="level1Post in level0Post.children">
+        >
+          {{ level0Post.title }}
+        </a>
+        <ul class="nav bd-sidenav level1"
+          v-if="!level0Post.draft && level0Post.children"
+        >
+          <li class="nav-item"
+            v-for="level1Post in level0Post.children"
+            :key="level1Post.dir"
+          >
             <a :href="level1Post.children ? 'javascript:;' : rootPath + level0Post.dir + '_' + level1Post.dir"
               v-if="!level1Post.draft"
               class="nav-link">{{ level1Post.title }}</a>
-            <ul class="nav bd-sidenav level2" v-if="!level1Post.draft && level1Post.children">
-              <li class="nav-item" v-for="level2Post in level1Post.children">
-                <a :href="rootPath + level0Post.dir + '_' + level1Post.dir + '_' + level2Post.dir"
-                  v-if="!level2Post.draft"
-                  class="nav-link">{{ level2Post.title }}</a>
-                <ul class="nav bd-sidenav level3" v-if="!level2Post.draft && level2Post.children">
-                  <li class="nav-item" v-for="level3Post in level2Post.children">
-                    <a :href="rootPath + level0Post.dir + '_' + level1Post.dir + '_' + level2Post.dir + '_' + level3Post.dir"
-                      v-if="!level3Post.draft"
-                      class="nav-link">{{ level3Post.title }}</a>
-                  </li>
-                </ul>
+            <ul class="nav bd-sidenav level2"
+              v-if="!level1Post.draft && level1Post.children"
+            >
+              <li class="nav-item"
+                v-for="level2Post in level1Post.children"
+                :key="level2Post.dir"
+              >
+                <div v-if="!level2Post.draft">
+                  <a class="nav-link"
+                    v-if="!level2Post.children"
+                    :href="rootPath + level0Post.dir + '_' + level1Post.dir + '_' + level2Post.dir"
+                  >
+                    {{ level2Post.title }}
+                  </a>
+                  <a class="nav-link"
+                    v-if="level2Post.children"
+                    @click="toggleChildren($event)"
+                  >
+                    {{ level2Post.title }}
+                    <b-icon icon="chevron-down"></b-icon>
+                    <b-icon icon="chevron-up"></b-icon>
+                  </a>
+                  <ul class="nav bd-sidenav level3"
+                    v-if="!level2Post.draft && level2Post.children"
+                  >
+                    <li class="nav-item"
+                      v-for="level3Post in level2Post.children"
+                      :key="level3Post.dir"
+                    >
+                      <a class="nav-link"
+                        :href="rootPath + level0Post.dir + '_' + level1Post.dir + '_' + level2Post.dir + '_' + level3Post.dir"
+                        v-if="!level3Post.draft"
+                      >
+                        {{ level3Post.title }}
+                      </a>
+                    </li>
+                  </ul>
+                </div>
               </li>
             </ul>
           </li>
@@ -40,6 +77,26 @@ export default Vue.extend({
     rootPath(): string {
       return this.$store.state.config.rootPath + '/' + this.$store.state.locale + '/';
     }
+  },
+  methods: {
+    toggleChildren(event: MouseEvent) {
+      let el = event.target as any;
+      while (el.nodeName !== 'LI' && el.parentNode) {
+        el = el.parentNode;
+      }
+      if (el === document) {
+        return;
+      }
+      if (!el.className) {
+        el.className = ' active';
+      }
+      else if (el.className.indexOf(' active') > -1) {
+        el.className = el.className.replace(' active', '');
+      }
+      else {
+        el.className += ' active';
+      }
+    }
   }
 });
 
@@ -69,11 +126,31 @@ export default Vue.extend({
       display: block;
     }
 
+      .nav .b-icon.bi {
+        font-size: 90%;
+        opacity: 0.6;
+        position: relative;
+        top: -2px;
+      }
+
       .nav-link {
         padding: 5px;
         color: #444;
+        cursor: pointer;
       }
 
+        .nav-link .bi-chevron-up {
+          display: none;
+        }
+
+        .active .nav-link .bi-chevron-up {
+          display: inline-block;
+        }
+
+        .active .nav-link .bi-chevron-down {
+          display: none;
+        }
+
         .level1 .nav-link {
           padding: 5px 0;
         }
@@ -90,6 +167,11 @@ export default Vue.extend({
           border-left: 1px solid #eee;
           padding-left: 10px;
           margin-left: 0;
+          display: none;
+        }
+
+        .level2 .active .level3 {
+          display: block;
         }
 
         .level3 .nav-link {
diff --git a/configs/config.js b/configs/config.asf.js
similarity index 83%
copy from configs/config.js
copy to configs/config.asf.js
index e01bb65..a441c77 100644
--- a/configs/config.js
+++ b/configs/config.asf.js
@@ -3,5 +3,5 @@ export default {
   galleryViewPath: 'https://echarts.apache.org/examples/zh/view.html?c=',
   mainSitePath: 'https://echarts.apache.org/',
   optionPath: 'https://echarts.apache.org/option.html#',
-  gitRepo: 'Ovilia/incubator-echarts-handbook'
+  gitRepo: 'apache/incubator-echarts-handbook'
 };
diff --git a/configs/config.dev.js b/configs/config.dev.js
new file mode 100644
index 0000000..720d1c3
--- /dev/null
+++ b/configs/config.dev.js
@@ -0,0 +1,7 @@
+export default {
+  rootPath: '/echarts-handbook/dist',
+  exampleViewPath: 'http://localhost/incubator-echarts-website/examples/zh/view.html?c=',
+  mainSitePath: 'http://localhost/incubator-echarts-website/',
+  optionPath: 'http://localhost/incubator-echarts-website/option.html#',
+  gitRepo: 'apache/incubator-echarts-handbook'
+};
diff --git a/configs/config.js b/configs/config.js
index e01bb65..eb44010 100644
--- a/configs/config.js
+++ b/configs/config.js
@@ -1,7 +1,7 @@
-export default {
-  rootPath: '/echarts-handbook/dist',
-  galleryViewPath: 'https://echarts.apache.org/examples/zh/view.html?c=',
-  mainSitePath: 'https://echarts.apache.org/',
-  optionPath: 'https://echarts.apache.org/option.html#',
-  gitRepo: 'Ovilia/incubator-echarts-handbook'
-};
+import configAsf from './config.asf';
+import configDev from './config.dev';
+
+const isProduction = process.env.NODE_ENV === 'production';
+const config = isProduction ? configAsf : configDev;
+
+export default config;
diff --git a/contents/en/application/data/dynamic-data.md b/contents/en/application/data/dynamic-data.md
index 5afee77..a4b96d6 100644
--- a/contents/en/application/data/dynamic-data.md
+++ b/contents/en/application/data/dynamic-data.md
@@ -3,7 +3,7 @@
 
 ## Asynchronous Loading
 
-Data in [Getting Started Example](~getting-started) is directly updated by using `setOption`. But in many cases, data need to be filled by asynchronous loading frequently. `ECharts` can implement asynchronous loading in a simple way. You can get data asynchronously through a function such as jQuery and use `setOption` to fill in data and configs after the chart initialized. 
+Data in [Getting Started Example](~getting-started) is directly updated by using `setOption`. But in many cases, data need to be filled by asynchronous loading frequently. `ECharts` can implement asynchronous loading in a simple way. You can get data asynchronously through a function such as jQuery and use `setOption` to fill in data and configs after the chart initialized.
 
 ```js
 var myChart = echarts.init(document.getElementById('main'));
@@ -33,7 +33,7 @@ $.get('data.json').done(function (data) {
 });
 ```
 
-Or display empty axes with all styles defined before fill in the data: 
+Or display empty axes with all styles defined before fill in the data:
 
 ```js
 var myChart = echarts.init(document.getElementById('main'));
@@ -73,17 +73,17 @@ $.get('data.json').done(function (data) {
 });
 ```
 
-For example: 
+For example:
 
-<iframe src="${galleryViewPath}doc-example/tutorial-async&edit=1&reset=1" width="400" height="300"></iframe>
+<iframe src="${exampleViewPath}doc-example/tutorial-async&edit=1&reset=1" width="400" height="300"></iframe>
 
-You need to use `name` to "navigate" ECharts when updating data. In the previous example, the chart can update normally depending on the order of series, but we recommend you to add the `name` data while updating data. 
+You need to use `name` to "navigate" ECharts when updating data. In the previous example, the chart can update normally depending on the order of series, but we recommend you to add the `name` data while updating data.
 
 ## loading animation
 
 When it takes a long time to load the data, the user is facing the empty chart with only axes will wonder if there are bugs appear.
 
-ECharts have a simple loading animation by default. You can call [showLoading](api.html#echartsInstance.showLoading) to display. When the data loading was completed, call [hideLoading](api.html#echartsInstance.hideLoading) to hide the animation. 
+ECharts have a simple loading animation by default. You can call [showLoading](api.html#echartsInstance.showLoading) to display. When the data loading was completed, call [hideLoading](api.html#echartsInstance.hideLoading) to hide the animation.
 
 
 ```js
@@ -94,16 +94,16 @@ $.get('data.json').done(function (data) {
 });
 ```
 
-Here is the effect: 
+Here is the effect:
 
-<iframe src="${galleryViewPath}doc-example/tutorial-loading&edit=1&reset=1" width="400" height="300"></iframe>
+<iframe src="${exampleViewPath}doc-example/tutorial-loading&edit=1&reset=1" width="400" height="300"></iframe>
 
 ## Dynamic Update
 
-ECharts was driven by data, change in data will drive changes in the presentation of the chart. Therefore, It's surprisingly simple to implement a dynamic update. 
+ECharts was driven by data, change in data will drive changes in the presentation of the chart. Therefore, It's surprisingly simple to implement a dynamic update.
 
-All data's update was implemented by [setOption](~api.html#echartsInstance.setOption). You only need to fetch the data periodically. ECharts will find the difference between two groups of data to use the proper way to choose the animation. 
+All data's update was implemented by [setOption](~api.html#echartsInstance.setOption). You only need to fetch the data periodically. ECharts will find the difference between two groups of data to use the proper way to choose the animation.
 
-Check the following example. 
+Check the following example.
 
-<iframe src="${galleryViewPath}doc-example/tutorial-dynamic-data&edit=1&reset=1" width="400" height="300"></iframe>
\ No newline at end of file
+<iframe src="${exampleViewPath}doc-example/tutorial-dynamic-data&edit=1&reset=1" width="400" height="300"></iframe>
\ No newline at end of file
diff --git a/contents/en/best-practice/aria.md b/contents/en/best-practice/aria.md
index fbcea30..60703b2 100644
--- a/contents/en/best-practice/aria.md
+++ b/contents/en/best-practice/aria.md
@@ -4,7 +4,7 @@
 
 The Accessibility function was turn off by default, turn it on by define the value of [aria.show](${optionPath}aria.show) as `true`. ECharts will automatically generate a description of the chart according to the title, chart, data, etc.. Users can also change the description through the configuration item.
 
-About the configuration item: 
+About the configuration item:
 
 ```js
 option = {
@@ -31,10 +31,10 @@ option = {
 };
 ```
 
-<iframe width="700" height="300" src="${galleryViewPath}doc-example/aria-pie&reset=1&edit=1"></iframe>
+<iframe width="700" height="300" src="${exampleViewPath}doc-example/aria-pie&reset=1&edit=1"></iframe>
 
 
-There will be an `area-label` attribute on the Chart DOM. With the help of the reading device, blind people can understand by hearing the following message: 
+There will be an `area-label` attribute on the Chart DOM. With the help of the reading device, blind people can understand by hearing the following message:
 
 ```
 This is a chart about "Referrer of a User" with type Pie chart named Referrer. The data is as follows: the data of Direct Visit is 335,the data of Mail Marketing is 310,the data of Union Ad is 234,the data of Video Ad is 135,the data of Search Engine is 1548.
diff --git a/contents/en/best-practice/canvas-vs-svg.md b/contents/en/best-practice/canvas-vs-svg.md
index 15372cc..f851289 100644
--- a/contents/en/best-practice/canvas-vs-svg.md
+++ b/contents/en/best-practice/canvas-vs-svg.md
@@ -8,9 +8,9 @@ Canvas has been used as the renderer (VML for IE8-) of ECharts from the beginnin
 
 ## How to Choose a Renderer?
 
-Generally, Canvas is more suitable for charts with a large number of elements (heat map, large-scale line or scatter plot in geo or parallel coordinates, etc.), and with visual [effect](examples/editor.html?c=lines-bmap-effect). However, SVG has an important advantage: It has less memory usage (which is important for mobile devices), higher rendering performance, no blur when using the browser zoom. For instance, we used Canvas and SVG renderer in some hardware environment to draw the ch [...]
+Generally, Canvas is more suitable for charts with a large number of elements (heat map, large-scale line or scatter plot in geo or parallel coordinates, etc.), and with visual [effect](examples/editor.html?c=lines-bmap-effect). However, SVG has an important advantage: It has less memory usage (which is important for mobile devices), higher rendering performance, no blur when using the browser zoom. For instance, we used Canvas and SVG renderer in some hardware environment to draw the ch [...]
 
-<iframe width="600" height="400" src="${galleryViewPath}doc-example/canvas-vs-svg&reset=1&edit=1"></iframe>
+<iframe width="600" height="400" src="${exampleViewPath}doc-example/canvas-vs-svg&reset=1&edit=1"></iframe>
 
 In those scenarios, SVG renderer has better overall performance than Canvas in mobile devices. This is not a comprehensive evaluation for sure, in other scenarios of huge data volume, the performance of Canvas is still better than SVG. We keep both renderers to provide a wider space for developers to optimize their program.
 
@@ -19,7 +19,7 @@ When choosing renderer, try to consider hardware and software environment, data
 + In some harsh environment, try to consider these points:
 
 	+ To create a huge amount of instance in a crash-prone browser (It perhaps because the number of Canvas exceeded the capacity of the phone.), Try to use SVG renderer to improve. Generally, if the chart is running on a low-end Android phone, or you are using some specific chart like [liquidfill](https://ecomfe.github.io/echarts-liquidfill/example/), the SVG render will perform better.
-	+ Use Canvas while visualizing a large amount of data. 
+	+ Use Canvas while visualizing a large amount of data.
 
 We strongly welcome developers to give us a [feedback](https://github.com/apache/incubator-echarts/issues/new). It will be very helpful for us to optimize ECharts. Thank you!
 
diff --git a/contents/en/concepts/dataset.md b/contents/en/concepts/dataset.md
index 9ed70e2..7a34d95 100644
--- a/contents/en/concepts/dataset.md
+++ b/contents/en/concepts/dataset.md
@@ -4,7 +4,7 @@
 
 ## Define `data` under `series`
 
-If data is defined under `series`, for example: 
+If data is defined under `series`, for example:
 
 ```js
 option = {
@@ -29,15 +29,15 @@ option = {
 }
 ```
 
-Define `data` under `series` is suitable for customization for some special data structures such as "tree", "graph" and large data. 
-However, it is not conducive to the data sharing for multiple series as well as mapping arrangement of chart types and series based on the original data. The other disadvantage is that programmers always need to divide the data in separate series (and categories) first. 
+Define `data` under `series` is suitable for customization for some special data structures such as "tree", "graph" and large data.
+However, it is not conducive to the data sharing for multiple series as well as mapping arrangement of chart types and series based on the original data. The other disadvantage is that programmers always need to divide the data in separate series (and categories) first.
 
 ## Define `data` in `dataset`
 
-Here are the advantages if you define `data` in `dataset`: 
+Here are the advantages if you define `data` in `dataset`:
 + Follow the ideas of data visualization: (I) Provide the data, (II)Mapping from data to visual to become a chart.
-+ Divide data from other configurations. The data often change but others not. It is 
-Easy to manage separately. 
++ Divide data from other configurations. The data often change but others not. It is
+Easy to manage separately.
 + Data can be reused by several series or component, you don't need to create copies of a large amount of data for every series.
 + Support more common data format, such as a 2D array, array of classes, etc., to avoid users from converting for data format to a certain extent.
 
@@ -57,12 +57,12 @@ option = {
             ['Walnut Brownie', 72.4, 53.9, 39.1]
         ]
     },
-    // Declare an x-axis (category axis). 
-	// The category map the first row in the dataset by default. 
+    // Declare an x-axis (category axis).
+	// The category map the first row in the dataset by default.
     xAxis: {type: 'category'},
-    // Declare a y-axis (value axis). 
+    // Declare a y-axis (value axis).
     yAxis: {},
-    // Declare several 'bar' series, 
+    // Declare several 'bar' series,
 	// every series will auto-map to each rows by default.
     series: [
         {type: 'bar'},
@@ -74,19 +74,19 @@ option = {
 
 The effect is as follows:
 
-<iframe width="600" height="300" src="${galleryViewPath}dataset-simple0&edit=1&reset=1"></iframe>
+<iframe width="600" height="300" src="${exampleViewPath}dataset-simple0&edit=1&reset=1"></iframe>
 
-Or try to use the "array of classes" format: 
+Or try to use the "array of classes" format:
 
 ```js
 option = {
     legend: {},
     tooltip: {},
     dataset: {
-		// Define the dimension of array. In cartesian coordinate system, 
-		// if the type of x-axis is category, map the first dimension to 
+		// Define the dimension of array. In cartesian coordinate system,
+		// if the type of x-axis is category, map the first dimension to
 		// x-axis by default, the second dimension to y-axis.
-		// You can also specify 'series.encode' to complete the map 
+		// You can also specify 'series.encode' to complete the map
 		// without specify dimensions. Please see below.
 
         dimensions: ['product', '2015', '2016', '2017'],
@@ -114,23 +114,23 @@ The ideas of data visualization: (I) Provide the data, (II)Mapping from data to
 
 In short, you can set these configs of mapping:
 
-+ Specify 'column' or 'row' of `dataset` to map the `series`. You can use [series.seriesLayoutBy](${optionPath}#series.seriesLayoutBy) to configure it. The default is to map according to the column. 
++ Specify 'column' or 'row' of `dataset` to map the `series`. You can use [series.seriesLayoutBy](${optionPath}#series.seriesLayoutBy) to configure it. The default is to map according to the column.
 + Rule of specifying dimension mapping: how to mapping from dimensions of 'dataset' to `axis`, `tooltip`, `label` and `visualMap`. To configure the mapping, please use [series.encode](${optionPath}#series.encode) and [visualMap](${optionPath}#visualMap). The previous case did not give the mapping configuration so that ECharts will follow the default: if x-axis is category, mapping to the first row in `dataset.source`; three-column chart mapping with each row in `dataset.source` one by one.
 
 
-The details of the configuration are shown below: 
+The details of the configuration are shown below:
 
 
 ## Map Row or Column of `dataset` to `series`
 
-After having the dataset, you can configure flexibly: how the data map to the axis and graph series. 
+After having the dataset, you can configure flexibly: how the data map to the axis and graph series.
 
-You can use `seriesLayoutBy` to change the understanding of row and column of the chart. `seriesLayoutBy` can be: 
+You can use `seriesLayoutBy` to change the understanding of row and column of the chart. `seriesLayoutBy` can be:
 + 'column': Default, the series are placed above the column of `dataset`.
 + 'row': The series is placed above the row of `dataset`.
 
 
-Check this case: 
+Check this case:
 
 ```js
 option = {
@@ -170,7 +170,7 @@ option = {
 }
 ```
 
-The effect of configuration is shown in [this case](${galleryViewPath}dataset-series-layout-by&edit=1&reset=1). 
+The effect of configuration is shown in [this case](${exampleViewPath}dataset-series-layout-by&edit=1&reset=1).
 
 ## Dimension
 
@@ -212,9 +212,9 @@ var option2 = {
 };
 ```
 
-In most cases, you don't need to define the dimension type because the ECharts will automatically judge it. If the judgment is inaccurate, you can define it manually. 
+In most cases, you don't need to define the dimension type because the ECharts will automatically judge it. If the judgment is inaccurate, you can define it manually.
 
-Dimension type can be the following values: 
+Dimension type can be the following values:
 + `'number'`: Default, normal data.
 + `'ordinal'`: String types data like categories, text can be used on the axis only with the dimension type 'ordinal'. ECharts will try to judge this type automatically but might be inaccurate, so you can specify manually.
 + `'time'`: To represent time data, ECharts can automatically analyze data as timestamp if the dimension type is defined as `'time'`. For instance, ECharts will auto-analyze if the data of this dimension is '2017-05-10'`. If the dimension is used as time axis ([axis.type](${optionPath}#xAxis.type) = `'time'`), the dimension type will also be `'time'`. See [data](${optionPath}#series.data) for more time type support.
@@ -224,7 +224,7 @@ Dimension type can be the following values:
 
 ## Map from Data to Charts (series.encode)
 
-After understand the concept of dimension, you can use [series.encode](${optionPath}#series.encode) to make a mapping: 
+After understand the concept of dimension, you can use [series.encode](${optionPath}#series.encode) to make a mapping:
 
 ```js
 var option = {
@@ -258,10 +258,10 @@ var option = {
 };
 ```
 
-[Here](${galleryViewPath}dataset-encode-simple0&edit=1&reset=1) shows the effect of this example.
+[Here](${exampleViewPath}dataset-encode-simple0&edit=1&reset=1) shows the effect of this example.
 
-The basic structure of `series.encode` declaration: 
-+ To the left of the colon: Specific name of axis or label. 
+The basic structure of `series.encode` declaration:
++ To the left of the colon: Specific name of axis or label.
 + To the right of the colon: Dimension name (string) or number(int, count from 0), to specify one or several dimensions (using array).
 
 Generally, the following info is not necessary to be defined. Fill in as needed.
@@ -270,13 +270,13 @@ Attribute suggested by `series.encode`
 
 
 ```js
-// Supported in every coordinate and series: 
+// Supported in every coordinate and series:
 encode: {
     // Display the value of dimension named "product" and "score" in tooltip.
     tooltip: ['product', 'score']
     // Connect dimension name of "Dimension 1" and "Dimension 3" as the series name. (Avoid to repeat longer names in series.name)
     seriesName: [1, 3],
-    // Means to use the value in "Dimension 2" as the id. It makes the new and old data correspond by id 
+    // Means to use the value in "Dimension 2" as the id. It makes the new and old data correspond by id
 	// when using setOption to update data, so that it can show animation properly.
     itemId: 2,
     // The itemName will show in the legend of Pie Charts.
@@ -314,27 +314,27 @@ encode: {
 }
 ```
 
-This is a richer [example](${galleryViewPath}dataset-encode1&edit=1&reset=1) of `series.encode`.
+This is a richer [example](${exampleViewPath}dataset-encode1&edit=1&reset=1) of `series.encode`.
 
 
 
 ## Default series.encode
 
-It is worth mentioning that ECharts will use some default mapping rules for some general charts (line, bar, scatter, candlestick, etc.) if `series.encode` is not specified. The default rule is: 
+It is worth mentioning that ECharts will use some default mapping rules for some general charts (line, bar, scatter, candlestick, etc.) if `series.encode` is not specified. The default rule is:
 + In coordinate system (eg. Cartesian, Polar):
 	+ If there is category axis (axis.type = 'category'), map the first column(row) to the axis and each subsequent column(row) to each series.
 	+ If both axes is not the category, then map every two columns in one series to two axes.
 + Without axis (such as Pie Chart):
 	+ Use the first column(row) as the name, second column(row) as value. ECharts will not set the name if there is only one column(row).
 
-While the default rule cannot fulfill the requirements, you can configure `encode` by yourself, which is not complicate. Here is an [example](${galleryViewPath}dataset-default&edit=1&reset=1).
+While the default rule cannot fulfill the requirements, you can configure `encode` by yourself, which is not complicate. Here is an [example](${exampleViewPath}dataset-default&edit=1&reset=1).
 
 
 ## Some Normal Settings of series.encode
 
 Q: How to set the 3rd column as x-axis, 5th column as y-axis?
 
-A: 
+A:
 ```js
 series: {
     // dimensionIndex count from 0, so the 3rd line is dimensions[2].
@@ -356,7 +356,7 @@ series: {
 
 Q: How to set the 2nd column as a label?
 
-A: 
+A:
 We now support to trace value from specific dimension for [label.formatter](${optionPath}#series.label.formatter):
 ```js
 series: {
@@ -383,7 +383,7 @@ series: {
 
 Q: How to define the dimension name if is not included in the dataset?
 
-A: 
+A:
 ```js
 dataset: {
     dimensions: ['score', 'amount'],
@@ -398,7 +398,7 @@ dataset: {
 
 Q: How to map the 3rd column to the size of the scatter chart?
 
-A: 
+A:
 ```js
 var option = {
     dataset: {
@@ -435,7 +435,7 @@ A: Check your spelling, such as misspell the dimension name `'Life Expectancy'`
 
 ## Visual Channel Mapping
 
-We can map visual channel by using [visualMap](${optionPath}#visualMap). Check details in the [visualMap](${optionPath}#visualMap) document. Here is an [example](${galleryViewPath}dataset-encode0&edit=1&reset=1).
+We can map visual channel by using [visualMap](${optionPath}#visualMap). Check details in the [visualMap](${optionPath}#visualMap) document. Here is an [example](${exampleViewPath}dataset-encode0&edit=1&reset=1).
 
 
 ## Formats of Charts
@@ -525,12 +525,12 @@ ECharts 4 still support the data declaration way in ECharts 3. If the series has
 }
 ```
 
-In fact, [series.data](${optionPath}#series.data) is an important setting method which will always exist. Some special non-table format chart like [treemap](${optionPath}#series-treemap), [graph](${optionPath}#series-graph) and [lines](${optionPath}#series-lines) still cannot be edit in dataset, you still need to use [series.data](${optionPath}#series.data). In another way, for render huge amount of data (over a million), you need to use [appendData](api.html#echartsInstance.appendData)  [...]
+In fact, [series.data](${optionPath}#series.data) is an important setting method which will always exist. Some special non-table format chart like [treemap](${optionPath}#series-treemap), [graph](${optionPath}#series-graph) and [lines](${optionPath}#series-lines) still cannot be edit in dataset, you still need to use [series.data](${optionPath}#series.data). In another way, for render huge amount of data (over a million), you need to use [appendData](api.html#echartsInstance.appendData)  [...]
 
 ## Others
 
-The following charts now support dataset: 
+The following charts now support dataset:
 `line`, `bar`, `pie`, `scatter`, `effectScatter`, `parallel`, `candlestick`, `map`, `funnel`, `custom`.
 ECharts will support more charts in the future.
 
-In the end, here is an [example](${galleryViewPath}dataset-link&edit=1&reset=1) of several charts shared one `dataset` with linkage interaction. 
\ No newline at end of file
+In the end, here is an [example](${exampleViewPath}dataset-link&edit=1&reset=1) of several charts shared one `dataset` with linkage interaction.
\ No newline at end of file
diff --git a/contents/en/concepts/event.md b/contents/en/concepts/event.md
index ee75a8e..8013516 100644
--- a/contents/en/concepts/event.md
+++ b/contents/en/concepts/event.md
@@ -1,8 +1,8 @@
 # Event and Behavior
 
-Users can trigger corresponding events by their operation. The developer can handle the callback function by mentoring these events, such as jump to a new website, pop-up a dialog box, or drill down the data. 
+Users can trigger corresponding events by their operation. The developer can handle the callback function by mentoring these events, such as jump to a new website, pop-up a dialog box, or drill down the data.
 
-In ECharts 3, you should use [on](${mainSitePath}api.html#EChartsInstance.on) method to bond events as same as in ECharts 2. However, the event name is simpler than in ECharts 2. The name of the event and the DOM event is both non-capitalized string. Here is an example of bonding `Click` function. 
+In ECharts 3, you should use [on](${mainSitePath}api.html#EChartsInstance.on) method to bond events as same as in ECharts 2. However, the event name is simpler than in ECharts 2. The name of the event and the DOM event is both non-capitalized string. Here is an example of bonding `Click` function.
 
 ```js
 myChart.on('click', function (params) {
@@ -11,7 +11,7 @@ myChart.on('click', function (params) {
 });
 ```
 
-There are two kinds of event in ECharts, one happened when the user clicks the mouse or hover the shape in charts, the other happened while the user triggered some interactive language. Such as ['legendselectchanged'](${mainSitePath}api.html#events.legendselectchanged) triggered while changing the legend selected (please notice that ['legendselectchanged'](${mainSitePath}api.html#events.legendselectchanged in this situation), ['datazoom'](${mainSitePath}api.html#events.legendselectchange [...]
+There are two kinds of event in ECharts, one happened when the user clicks the mouse or hover the shape in charts, the other happened while the user triggered some interactive language. Such as ['legendselectchanged'](${mainSitePath}api.html#events.legendselectchanged) triggered while changing the legend selected (please notice that ['legendselectchanged'](${mainSitePath}api.html#events.legendselectchanged in this situation), ['datazoom'](${mainSitePath}api.html#events.legendselectchange [...]
 
 
 ## Handling the Mouse Events
@@ -47,7 +47,7 @@ All mouse events included `params` which contained the data of the object.
 Format:
 ```js
 {
-    // The component name clicked, 
+    // The component name clicked,
 	// component type, could be 'series'、'markLine'、'markPoint'、'timeLine', etc..
     componentType: string,
     // series type, could be 'line'、'bar'、'pie', etc.. Works when componentType is 'series'.
@@ -68,7 +68,7 @@ Format:
     dataType: string,
     // incoming data value
     value: number|Array,
-	// color of the shape, works when componentType is 'series'. 
+	// color of the shape, works when componentType is 'series'.
     color: string
 }
 ```
@@ -80,7 +80,7 @@ myChart.on('click', function (params) {
     if (params.componentType === 'markPoint') {
         // Clicked on the markPoint
         if (params.seriesIndex === 5) {
-            // clicked on the markPoint of the series with index = 5 
+            // clicked on the markPoint of the series with index = 5
         }
     }
     else if (params.componentType === 'series') {
@@ -96,7 +96,7 @@ myChart.on('click', function (params) {
 });
 ```
 
-Use `query` to trigger callback for shapes of the specified component: 
+Use `query` to trigger callback for shapes of the specified component:
 
 ```js
 chart.on(eventName, query, handler);
@@ -126,7 +126,7 @@ If it is `Object`, `query` can include more than one attribute:
 }
 ```
 
-Such as: 
+Such as:
 
 ```js
 chart.setOption({
@@ -157,11 +157,11 @@ chart.setOption({
     }]
 });
 chart.on('mouseover', {seriesIndex: 1, name: 'xx'}, function () {
-    // when el named 'xx' in series index 1 triggered 'mouseover', callback this method. 
+    // when el named 'xx' in series index 1 triggered 'mouseover', callback this method.
 });
 ```
 
-For example: 
+For example:
 
 ```js
 chart.setOption({
@@ -173,14 +173,14 @@ chart.setOption({
     }]
 });
 chart.on('click', {dataType: 'node'}, function () {
-    // callback this method while the node of charts was clicked. 
+    // callback this method while the node of charts was clicked.
 });
 chart.on('click', {dataType: 'edge'}, function () {
-    // callback this method while the edge of charts was clicked. 
+    // callback this method while the edge of charts was clicked.
 });
 ```
 
-For example: 
+For example:
 
 ```js
 chart.setOption({
@@ -204,11 +204,11 @@ chart.setOption({
     }
 })
 chart.on('mouseup', {element: 'my_el'}, function () {
-    // when element named 'my_el' triggered 'mouseup', callback this function. 
+    // when element named 'my_el' triggered 'mouseup', callback this function.
 });
 ```
 
-You can display the floating layer, update the charts using the information found in your database by the data name or series name in the callback function. Here is an example: 
+You can display the floating layer, update the charts using the information found in your database by the data name or series name in the callback function. Here is an example:
 
 ```js
 myChart.on('click', function (parmas) {
@@ -226,9 +226,9 @@ myChart.on('click', function (parmas) {
 
 ## Behavioral Events of Component Interaction
 
-All Component Interaction in ECharts will trigger a corresponding event. Normal events and parameters listed in [events](${mainSitePath}/api.html#events) document. 
+All Component Interaction in ECharts will trigger a corresponding event. Normal events and parameters listed in [events](${mainSitePath}/api.html#events) document.
 
-Here is an example of monitoring a legend: 
+Here is an example of monitoring a legend:
 
 ```js
 // Show/hide the legend only trigger legendselectchanged event
@@ -244,12 +244,12 @@ myChart.on('legendselectchanged', function (params) {
 
 ## Use Code to Trigger Component Behavior
 
-You can trigger events such as `'legendselectchanged'` not only by the user but also by the program itself. It can be used to display the tooltip, select the legend. 
+You can trigger events such as `'legendselectchanged'` not only by the user but also by the program itself. It can be used to display the tooltip, select the legend.
 
-In ECharts 2, we use the method of `myChart.component.tooltip.showTip` to trigger the chart behavior. It is not good because the entry is deep, and involved many internal components. In ECharts 3, it changed to `myChart.dispatchAction({ type: '' })` to trigger the behavior. The new method manage all actions uniformly and can record the behavior path conveniently. 
+In ECharts 2, we use the method of `myChart.component.tooltip.showTip` to trigger the chart behavior. It is not good because the entry is deep, and involved many internal components. In ECharts 3, it changed to `myChart.dispatchAction({ type: '' })` to trigger the behavior. The new method manage all actions uniformly and can record the behavior path conveniently.
 
 Commonly used behavior and corresponding parameters were listed in [action](${mainSitePath}/api.html#action).
 
 The following example shows how to highlight each sector one by one in the pie chart using `dispatchAction`.
 
-<iframe width="600" height="400" src="${galleryViewPath}doc-example/pie-highlight&reset=1&edit=1"></iframe>
+<iframe width="600" height="400" src="${exampleViewPath}doc-example/pie-highlight&reset=1&edit=1"></iframe>
diff --git a/contents/zh/application/data/dynamic-data.md b/contents/zh/application/data/dynamic-data.md
index e6d6cba..3259858 100644
--- a/contents/zh/application/data/dynamic-data.md
+++ b/contents/zh/application/data/dynamic-data.md
@@ -75,7 +75,7 @@ $.get('data.json').done(function (data) {
 
 如下:
 
-<iframe src="${galleryViewPath}doc-example/tutorial-async&edit=1&reset=1" width="400" height="300"></iframe>
+<iframe src="${exampleViewPath}doc-example/tutorial-async&edit=1&reset=1" width="400" height="300"></iframe>
 
 ECharts 中在更新数据的时候需要通过`name`属性对应到相应的系列,上面示例中如果`name`不存在也可以根据系列的顺序正常更新,但是更多时候推荐更新数据的时候加上系列的`name`数据。
 
@@ -95,7 +95,7 @@ $.get('data.json').done(function (data) {
 
 效果如下:
 
-<iframe src="${galleryViewPath}doc-example/tutorial-loading&edit=1&reset=1" width="400" height="300"></iframe>
+<iframe src="${exampleViewPath}doc-example/tutorial-loading&edit=1&reset=1" width="400" height="300"></iframe>
 
 ## 数据的动态更新
 
@@ -105,4 +105,4 @@ ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动
 
 具体可以看下面示例:
 
-<iframe src="${galleryViewPath}doc-example/tutorial-dynamic-data&edit=1&reset=1" width="400" height="300"></iframe>
\ No newline at end of file
+<iframe src="${exampleViewPath}doc-example/tutorial-dynamic-data&edit=1&reset=1" width="400" height="300"></iframe>
\ No newline at end of file
diff --git a/contents/zh/best-practice/aria.md b/contents/zh/best-practice/aria.md
index 8d1d537..8147c56 100644
--- a/contents/zh/best-practice/aria.md
+++ b/contents/zh/best-practice/aria.md
@@ -31,7 +31,7 @@ option = {
 };
 ```
 
-<iframe width="700" height="300" src="${galleryViewPath}doc-example/aria-pie&reset=1&edit=1"></iframe>
+<iframe width="700" height="300" src="${exampleViewPath}doc-example/aria-pie&reset=1&edit=1"></iframe>
 
 生成的图表 DOM 上,会有一个 `aria-label` 属性,在朗读设备的帮助下,盲人能够了解图表的内容。其值为:
 
diff --git a/contents/zh/best-practice/canvas-vs-svg.md b/contents/zh/best-practice/canvas-vs-svg.md
index c4568ec..4864232 100644
--- a/contents/zh/best-practice/canvas-vs-svg.md
+++ b/contents/zh/best-practice/canvas-vs-svg.md
@@ -10,7 +10,7 @@ ECharts 从初始一直使用 Canvas 绘制图表(除了对 IE8- 使用 VML)
 
 一般来说,Canvas 更适合绘制图形元素数量非常大(这一般是由数据量大导致)的图表(如热力图、地理坐标系或平行坐标系上的大规模线图或散点图等),也利于实现某些视觉 [特效](examples/editor.html?c=lines-bmap-effect)。但是,在不少场景中,SVG 具有重要的优势:它的内存占用更低(这对移动端尤其重要)、渲染性能略高、并且用户使用浏览器内置的缩放功能时不会模糊。例如,我们在一些硬件环境中分别使用 Canvas 渲染器和 SVG 渲染器绘制中等数据量的折、柱、饼,统计初始动画阶段的帧率,得到了一个性能对比图:
 
-<iframe width="600" height="400" src="${galleryViewPath}doc-example/canvas-vs-svg&reset=1&edit=1"></iframe>
+<iframe width="600" height="400" src="${exampleViewPath}doc-example/canvas-vs-svg&reset=1&edit=1"></iframe>
 
 上图显示出,在这些场景中,SVG 渲染器相比 Canvas 渲染器在移动端的总体表现更好。当然,这个实验并非是全面的评测,在另一些数据量较大或者有图表交互动画的场景中,目前的 SVG 渲染器的性能还比不过 Canvas 渲染器。但是同时有这两个选项,为开发者们根据自己的情况优化性能提供了更广阔的空间。
 
diff --git a/contents/zh/concepts/dataset.md b/contents/zh/concepts/dataset.md
index 89a8ac0..fa5c85c 100644
--- a/contents/zh/concepts/dataset.md
+++ b/contents/zh/concepts/dataset.md
@@ -74,7 +74,7 @@ option = {
 
 效果如下:
 
-<iframe width="600" height="300" src="${galleryViewPath}dataset-simple0&edit=1&reset=1"></iframe>
+<iframe width="600" height="300" src="${exampleViewPath}dataset-simple0&edit=1&reset=1"></iframe>
 
 或者也可以使用常见的“对象数组”的格式:
 ```js
@@ -168,7 +168,7 @@ option = {
 }
 ```
 
-[这个例子](${galleryViewPath}dataset-series-layout-by&edit=1&reset=1) 里给出了设置的效果。
+[这个例子](${exampleViewPath}dataset-series-layout-by&edit=1&reset=1) 里给出了设置的效果。
 
 
 ## 维度( dimension )
@@ -257,7 +257,7 @@ var option = {
 };
 ```
 
-[这个例子](${galleryViewPath}dataset-encode-simple0&edit=1&reset=1) 里是上面设置的效果。
+[这个例子](${exampleViewPath}dataset-encode-simple0&edit=1&reset=1) 里是上面设置的效果。
 
 
 `series.encode` 声明的基本结构如下。其中冒号左边是坐标系、标签等特定名称,如 `'x'`, `'y'`, `'tooltip'` 等,冒号右边是数据中的维度名(string 格式)或者维度的序号(number 格式,从 0 开始计数),可以指定一个或多个维度(使用数组)。通常情况下,下面各种信息不需要所有的都写,按需写即可。
@@ -308,7 +308,7 @@ encode: {
 }
 ```
 
-这是个更丰富的 `series.encode` 的 [示例](${galleryViewPath}dataset-encode1&edit=1&reset=1) 。
+这是个更丰富的 `series.encode` 的 [示例](${exampleViewPath}dataset-encode1&edit=1&reset=1) 。
 
 
 
@@ -321,7 +321,7 @@ encode: {
 + 如果没有坐标系(如饼图)
     + 取第一列(行)为名字,第二列(行)为数值(如果只有一列,则取第一列为数值)。
 
-默认的规则不能满足要求时,就可以自己来配置 `encode`,也并不复杂。这是一个 [例子](${galleryViewPath}dataset-default&edit=1&reset=1)。
+默认的规则不能满足要求时,就可以自己来配置 `encode`,也并不复杂。这是一个 [例子](${exampleViewPath}dataset-default&edit=1&reset=1)。
 
 
 
@@ -431,7 +431,7 @@ var option = {
 
 ## 视觉通道(颜色、尺寸等)的映射
 
-我们可以使用 [visualMap](${optionPath}#visualMap) 组件进行视觉通道的映射。详见 [visualMap](${optionPath}#visualMap) 文档的介绍。这是一个 [示例](${galleryViewPath}dataset-encode0&edit=1&reset=1)。
+我们可以使用 [visualMap](${optionPath}#visualMap) 组件进行视觉通道的映射。详见 [visualMap](${optionPath}#visualMap) 文档的介绍。这是一个 [示例](${exampleViewPath}dataset-encode0&edit=1&reset=1)。
 
 
 
@@ -531,5 +531,5 @@ ECharts 4 之前一直以来的数据声明方式仍然被正常支持,如果
 后续会有更多的图表进行支持。
 
 
-最后,给出这个 [示例](${galleryViewPath}dataset-link&edit=1&reset=1),多个图表共享一个 `dataset`,并带有联动交互。
+最后,给出这个 [示例](${exampleViewPath}dataset-link&edit=1&reset=1),多个图表共享一个 `dataset`,并带有联动交互。
 
diff --git a/contents/zh/concepts/event.md b/contents/zh/concepts/event.md
index dc71a7b..2146045 100644
--- a/contents/zh/concepts/event.md
+++ b/contents/zh/concepts/event.md
@@ -250,4 +250,4 @@ myChart.on('legendselectchanged', function (params) {
 
 下面示例演示了如何通过 `dispatchAction` 去轮流高亮饼图的每个扇形。
 
-<iframe width="600" height="400" src="${galleryViewPath}doc-example/pie-highlight&reset=1&edit=1"></iframe>
+<iframe width="600" height="400" src="${exampleViewPath}doc-example/pie-highlight&reset=1&edit=1"></iframe>
diff --git a/contents/zh/get-started.md b/contents/zh/get-started.md
index cf2af6e..f7a3059 100644
--- a/contents/zh/get-started.md
+++ b/contents/zh/get-started.md
@@ -84,6 +84,6 @@ ECharts 支持多种下载方式,可以在下一篇教程[安装](zh/basics_in
 
 这样你的第一个图表就诞生了!
 
-<iframe width="600" height="400" src="${galleryViewPath}doc-example/getting-started&reset=1&edit=1"></iframe>
+<iframe width="600" height="400" src="${exampleViewPath}doc-example/getting-started&reset=1&edit=1"></iframe>
 
 你也可以直接进入 [ECharts Gallery](${galleryEditorPath}doc-example/getting-started) 中查看编辑示例
diff --git a/contents/zh/posts.js b/contents/zh/posts.js
index fc3ab20..88b3a74 100644
--- a/contents/zh/posts.js
+++ b/contents/zh/posts.js
@@ -4,16 +4,6 @@
  * title 是导航栏中显示的标题,md 文件中的一级标题是正文标题,两者可以不同。
  */
 export default [{
-    title: '关于本项目(临时)',
-    dir: 'meta',
-    children: [{
-        title: '项目结构说明',
-        dir: 'get-started'
-    }, {
-        title: '写作风格规范',
-        dir: 'writing'
-    }]
-}, {
     title: '快速上手',
     dir: 'get-started'
 }, {
diff --git a/nuxt.config.js b/nuxt.config.js
index 9945f5a..7c88d57 100644
--- a/nuxt.config.js
+++ b/nuxt.config.js
@@ -48,7 +48,12 @@ export default {
   */
   modules: [
     // Doc: https://bootstrap-vue.js.org
-    'bootstrap-vue/nuxt',
+    [
+      'bootstrap-vue/nuxt',
+      {
+        icons: true
+      }
+    ],
     [
       'nuxt-i18n',
       {
diff --git a/pages/helper/contributors.ts b/pages/helper/contributors.ts
index 8d413b5..6145f15 100644
--- a/pages/helper/contributors.ts
+++ b/pages/helper/contributors.ts
@@ -1,28 +1,7 @@
 export default {
-    "contents/zh/meta/get-started.md": [
-        "Ovilia"
-    ],
     "contents/zh/get-started.md": [
         "Ovilia"
     ],
-    "contents/zh/cookbook/mobile.md": [
-        "Ovilia"
-    ],
-    "contents/zh/cookbook/downplay.md": [
-        "Ovilia"
-    ],
-    "contents/zh/cookbook/down-play.md": [
-        "Ovilia"
-    ],
-    "contents/zh/cookbook/cross-platform.md": [
-        "Ovilia"
-    ],
-    "contents/zh/cookbook/connect.md": [
-        "Ovilia"
-    ],
-    "contents/zh/cookbook/aria.md": [
-        "Ovilia"
-    ],
     "contents/zh/concepts/visual-map.md": [
         "Ovilia"
     ],
@@ -36,7 +15,16 @@ export default {
         "Ovilia"
     ],
     "contents/zh/concepts/legend.md": [
-        "Ovilia"
+        "Ovilia",
+        "yufeng04"
+    ],
+    "contents/zh/concepts/event.md": [
+        "Ovilia",
+        "huanghan01\t\nplainheart"
+    ],
+    "contents/zh/concepts/dataset.md": [
+        "100pah",
+        "huanghan01"
     ],
     "contents/zh/concepts/coordinate.md": [
         "Ovilia"
@@ -45,56 +33,69 @@ export default {
         "Ovilia"
     ],
     "contents/zh/concepts/axis.md": [
-        "Ovilia"
+        "Ovilia",
+        "huanghan01\t\nplainheart\t\nyufeng04"
     ],
-    "contents/zh/chart-types/xxx.md": [
-        "Ovilia"
-    ],
-    "contents/zh/chart-types/line.md": [
-        "Ovilia"
-    ],
-    "contents/zh/chart-types/bar/waterfall.md": [
+    "contents/zh/best-practice/mobile.md": [
         "Ovilia"
     ],
-    "contents/zh/chart-types/bar/visual-map.md": [
-        "Ovilia"
+    "contents/zh/best-practice/design/color-enhance.md": [
+        "Hansz00",
+        "Wdingding"
     ],
-    "contents/zh/chart-types/bar/stacked-bar.md": [
-        "Ovilia"
+    "contents/zh/best-practice/chart-specificatio/scatter/scatter.md": [
+        "Hansz00",
+        "Wdingding"
     ],
-    "contents/zh/chart-types/bar/simple-bar.md": [
-        "Ovilia"
+    "contents/zh/best-practice/chart-specificatio/scatter/bubble.md": [
+        "Wdingding"
     ],
-    "contents/zh/chart-types/bar/polar-bar.md": [
-        "Ovilia"
+    "contents/zh/best-practice/chart-specificatio/radar.md": [
+        "Hansz00",
+        "Wdingding"
     ],
-    "contents/zh/best-practice/mobile.md": [
-        "Ovilia"
+    "contents/zh/best-practice/chart-specificatio/pie/basic-pie.md": [
+        "100pah",
+        "Wdingding"
     ],
-    "contents/zh/best-practice/design.md": [
+    "contents/zh/best-practice/chart-specificatio/line/stacked-area.md": [
         "Wdingding"
     ],
     "contents/zh/best-practice/chart-specificatio/line/basic-line.md": [
+        "Hansz00",
         "Wdingding"
     ],
     "contents/zh/best-practice/chart-specificatio/line/area.md": [
+        "Hansz00",
         "Wdingding"
     ],
-    "contents/zh/best-practice/chart-specificatio/line/stacked-area.md": [
+    "contents/zh/best-practice/chart-specificatio/gauger.md": [
+        "Hansz00",
         "Wdingding"
     ],
-    "contents/zh/best-practice/chart-specificatio/bar/basic-bar.md": [
+    "contents/zh/best-practice/chart-specificatio/funnel.md": [
         "Wdingding"
     ],
     "contents/zh/best-practice/chart-specificatio/bar/stacked-bar.md": [
         "Wdingding"
     ],
-    "contents/zh/best-practice/chart-specificatio/bar/bi-directiona-bar.md": [
+    "contents/zh/best-practice/chart-specificatio/bar/grouped-bar.md": [
+        "Hansz00",
         "Wdingding"
     ],
-    "contents/zh/best-practice/chart-specificatio/bar/grouped-bar.md": [
+    "contents/zh/best-practice/chart-specificatio/bar/bi-directional-bar.md": [
         "Wdingding"
     ],
+    "contents/zh/best-practice/chart-specificatio/bar/basic-bar.md": [
+        "Hansz00",
+        "Wdingding"
+    ],
+    "contents/zh/best-practice/canvas-vs-svg.md": [
+        "Ovilia"
+    ],
+    "contents/zh/best-practice/aria.md": [
+        "Ovilia"
+    ],
     "contents/zh/basics/resource.md": [
         "Ovilia"
     ],
@@ -102,21 +103,227 @@ export default {
         "Ovilia"
     ],
     "contents/zh/basics/help.md": [
-        "Ovilia"
+        "Ovilia",
+        "plainheart"
     ],
     "contents/zh/basics/download.md": [
         "Ovilia"
     ],
+    "contents/zh/application/mobile.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/data/dynamic-data.md": [
+        "pissang"
+    ],
+    "contents/zh/application/data/drilldown.md": [
+        "pissang"
+    ],
+    "contents/zh/application/custom-build.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/cross-platform/wechat-app.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/cross-platform/server.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/cross-platform/baidu-app.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/connect.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/scatter/basic-scatter.md": [
+        "Ovilia",
+        "Wdingding"
+    ],
+    "contents/zh/application/chart-types/pie/rose.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/pie/ring.md": [
+        "Hansz00",
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/pie/basic-pie.md": [
+        "Hansz00",
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/line/step-line.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/line/stacked-line.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/line/smooth-line.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/line/basic-line.md": [
+        "Hansz00",
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/line/area-line.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/bar/waterfall.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/bar/visual-map.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/bar/stacked-bar.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/bar/polar-bar.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/bar/basic-bar.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/chart-types/bar/bar-race.md": [
+        "Ovilia"
+    ],
+    "contents/zh/application/aria.md": [
+        "Ovilia"
+    ],
     "contents/en/posts.js": [
         "Ovilia"
     ],
+    "contents/en/concepts/tooltip.md": [
+        "huanghan01"
+    ],
+    "contents/en/concepts/series.md": [
+        "huanghan01"
+    ],
+    "contents/en/concepts/options.md": [
+        "huanghan01"
+    ],
+    "contents/en/concepts/legend.md": [
+        "huanghan01"
+    ],
+    "contents/en/concepts/event.md": [
+        "huanghan01"
+    ],
+    "contents/en/concepts/dataset.md": [
+        "huanghan01"
+    ],
+    "contents/en/concepts/coordinate.md": [
+        "huanghan01"
+    ],
+    "contents/en/concepts/chart-size.md": [
+        "huanghan01"
+    ],
+    "contents/en/concepts/axis.md": [
+        "huanghan01"
+    ],
+    "contents/en/best-practice/mobile.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/design/color-enhance.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/scatter/scatter.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/scatter/bubble.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/radar.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/pie/basic-pie.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/line/stacked-area.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/line/basic-line.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/line/area.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/gauger.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/funnel.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/bar/stacked-bar.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/bar/grouped-bar.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/bar/bi-directional-bar.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/chart-specificatio/bar/basic-bar.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/canvas-vs-svg.md": [
+        "Hansz00"
+    ],
+    "contents/en/best-practice/aria.md": [
+        "Hansz00"
+    ],
     "contents/en/bar.md": [
         "Ovilia"
     ],
-    "contents/zh/meta/writing.md": [
-        "Ovilia"
+    "contents/en/application/data/dynamic-data.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/data/drilldown.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/scatter/basic-scatter.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/pie/rose.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/pie/ring.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/pie/basic-pie.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/line/step-line.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/line/stacked-line.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/line/smooth-line.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/line/basic-line.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/line/area-line.md": [
+        "Hank",
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/bar/waterfall.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/bar/visual-map.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/bar/stacked-bar.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/bar/polar-bar.md": [
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/bar/basic-bar.md": [
+        "Hank",
+        "Hansz00"
+    ],
+    "contents/en/application/chart-types/bar/bar-race.md": [
+        "Hansz00"
     ],
     "contents/zh/posts.js": [
-        "Ovilia"
+        "100pah",
+        "Ovilia\t\nWdingding\t\npissang"
     ]
 };
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org