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

sushuang pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-echarts-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 3cf992e  update build page.
3cf992e is described below

commit 3cf992e7d909d8e0bb39f7ecc0d73cba84d90d3e
Author: sushuang <[email protected]>
AuthorDate: Sat Mar 30 06:06:13 2019 +0800

    update build page.
---
 api.html                                           |  8 +--
 builder.html                                       |  6 +-
 builder/echarts.html                               |  2 +-
 builder/src/echarts/chart/graph/forceHelper.js     | 35 +++++------
 builder/src/echarts/chart/sankey/sankeyLayout.js   | 31 +++++-----
 .../echarts/chart/themeRiver/ThemeRiverSeries.js   | 51 ++++++++--------
 builder/src/echarts/chart/tree/layoutHelper.js     | 67 ++++++++++++++++++----
 builder/src/echarts/chart/treemap/treemapLayout.js | 20 ++++---
 builder/src/echarts/model/mixin/textStyle.js       |  2 +-
 builder/src/echarts/scale/Time.js                  | 18 ++++--
 builder/src/echarts/util/format.js                 | 28 ++++++++-
 builder/src/echarts/util/model.js                  | 24 ++++++++
 builder/src/echarts/util/number.js                 | 45 ++++-----------
 builder/src/zrender/contain/text.js                |  2 +-
 builder/src/zrender/graphic/Text.js                |  2 +-
 builder/src/zrender/zrender.js                     |  2 +-
 changelog.html                                     |  2 +-
 coding-standard.html                               |  2 +-
 committers.html                                    |  2 +-
 css/main.css                                       |  2 +-
 dependencies.html                                  |  2 +-
 documents/en/option.json                           |  2 +-
 documents/en/tutorial.json                         |  2 +-
 download.html                                      | 41 ++++---------
 faq.html                                           |  2 +-
 index.html                                         |  2 +-
 js/download.js                                     |  1 +
 license.html                                       |  2 +-
 maillist.html                                      |  2 +-
 option.html                                        |  8 +--
 option3.html                                       |  8 +--
 tutorial.html                                      |  8 +--
 32 files changed, 246 insertions(+), 185 deletions(-)

diff --git a/api.html b/api.html
index e480b1c..7f8f515 100644
--- a/api.html
+++ b/api.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -6,7 +6,7 @@
         + '@font-face {font-family:"noto-light";src:local("Microsoft 
Yahei");}';
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
-</script><title>ECharts Documentation</title><link rel="stylesheet" 
type="text/css" href="css/ecOption.css?_v_=1548317446197"><link 
rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/jquery-autocomplete/jquery.auto-complete.css"><link 
rel="stylesheet" type="text/css" href="vendors/twentytwenty/twentytwenty.css" 
[...]
+</script><title>ECharts Documentation</title><link rel="stylesheet" 
type="text/css" href="css/ecOption.css?_v_=1553895396796"><link 
rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/jquery-autocomplete/jquery.auto-complete.css"><link 
rel="stylesheet" type="text/css" href="vendors/twentytwenty/twentytwenty.css" 
[...]
 <!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div 
id="main"><nav class="navbar navbar-default navbar-fixed-top"><div 
class="container-fluid"><div class="navbar-header"><button type="button" 
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" 
aria-expanded="false" class="navbar-toggle collapsed"><span 
class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span 
class="icon-bar"></span><span class="icon-bar"></span></button><a href="./in 
[...]
     pageName: 'api',
     initHash: 'echarts',
@@ -28,7 +28,7 @@
 var vendorPath = '../vendors';
 
 define('globalArgs', extend({
-    version: '1548317446197',
+    version: '1553895396796',
     basePath: './',
     // Schema url is added by each doc page
     schemaUrl: '',
@@ -63,7 +63,7 @@ require.config({
         hasher: vendorPath + '/hasher/1.2.0/hasher.min',
         perfectScrollbar: vendorPath + 
'/perfect-scrollbar/0.6.8/js/perfect-scrollbar'
     },
-    urlArgs: '_v_=1548317446197'
+    urlArgs: '_v_=1553895396796'
 });
 
 require(['docTool/main'], function (main) {
diff --git a/builder.html b/builder.html
index c4c928c..05b4630 100644
--- a/builder.html
+++ b/builder.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -57,7 +57,7 @@ $("#build").click(function () {
     }
 
     parameters += '&version=4'
-        + '&versionCode=4.2.1-rc.1';
+        + '&versionCode=4.2.1';
 
     var email = $('#email').val();
     var log = parameters;
@@ -66,7 +66,7 @@ $("#build").click(function () {
     }
     ecLog({
         'page': 'builder',
-        'version': '4.2.1-rc.1',
+        'version': '4.2.1',
         'build-parameters-3': log
     });
 
diff --git a/builder/echarts.html b/builder/echarts.html
index 7fc101e..7c1851a 100644
--- a/builder/echarts.html
+++ b/builder/echarts.html
@@ -56,7 +56,7 @@
                 'esprima': 'lib/esprima',
                 'estraverse': 'lib/estraverse'
             },
-            urlArgs: 'v=4.2.1-rc.1'
+            urlArgs: 'v=4.2.1'
         });
 
         require(['build']);
diff --git a/builder/src/echarts/chart/graph/forceHelper.js 
b/builder/src/echarts/chart/graph/forceHelper.js
index 06a0702..d48a56e 100644
--- a/builder/src/echarts/chart/graph/forceHelper.js
+++ b/builder/src/echarts/chart/graph/forceHelper.js
@@ -18,10 +18,13 @@
 */
 
 /*
-* The layout implementation references to d3.js. The use of
-* the source code of this file is also subject to the terms
-* and consitions of its license (BSD-3Clause, see
-* <echarts/src/licenses/LICENSE-d3>).
+* A third-party license is embeded for some of the code in this file:
+* Some formulas were originally copied from "d3.js" with some
+* modifications made for this project.
+* (See more details in the comment of the method "step" below.)
+* The use of the source code of this file is also subject to the terms
+* and consitions of the license of "d3.js" (BSD-3Clause, see
+* </licenses/LICENSE-d3>).
 */
 import * as vec2 from 'zrender/src/core/vector';
 var scaleAndAdd = vec2.scaleAndAdd; // function adjacentNode(n, e) {
@@ -49,22 +52,7 @@ export function forceLayout(nodes, edges, opts) {
     var n = nodes[i];
 
     if (!n.p) {
-      // Use the position from first adjecent node with defined position
-      // Or use a random position
-      // From d3
-      // if (n.edges) {
-      //     var j = -1;
-      //     while (++j < n.edges.length) {
-      //         var e = n.edges[j];
-      //         var other = adjacentNode(n, e);
-      //         if (other.p) {
-      //             n.p = vec2.clone(other.p);
-      //             break;
-      //         }
-      //     }
-      // }
-      // if (!n.p) {
-      n.p = vec2.create(width * (Math.random() - 0.5) + center[0], height * 
(Math.random() - 0.5) + center[1]); // }
+      n.p = vec2.create(width * (Math.random() - 0.5) + center[0], height * 
(Math.random() - 0.5) + center[1]);
     }
 
     n.pp = vec2.clone(n.p);
@@ -85,6 +73,13 @@ export function forceLayout(nodes, edges, opts) {
     setUnfixed: function (idx) {
       nodes[idx].fixed = false;
     },
+
+    /**
+     * Some formulas were originally copied from "d3.js"
+     * 
https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/layout/force.js
+     * with some modifications made for this project.
+     * See the license statement at the head of this file.
+     */
     step: function (cb) {
       var v12 = [];
       var nLen = nodes.length;
diff --git a/builder/src/echarts/chart/sankey/sankeyLayout.js 
b/builder/src/echarts/chart/sankey/sankeyLayout.js
index e94f604..b4ac602 100644
--- a/builder/src/echarts/chart/sankey/sankeyLayout.js
+++ b/builder/src/echarts/chart/sankey/sankeyLayout.js
@@ -22,8 +22,8 @@
  * @author Deqing Li([email protected])
  */
 import * as layout from '../../util/layout';
-import nest from '../../util/nest';
 import * as zrUtil from 'zrender/src/core/util';
+import { groupData } from '../../util/model';
 import { __DEV__ } from '../../config';
 export default function (ecModel, api, payload) {
   ecModel.eachSeriesByType('sankey', function (seriesModel) {
@@ -229,11 +229,7 @@ function scaleNodeBreadths(nodes, kx, orient) {
 
 
 function computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, 
orient) {
-  var nodesByBreadth = nest().key(getKeyFunction(orient)).sortKeys(function 
(a, b) {
-    return a - b;
-  }).entries(nodes).map(function (d) {
-    return d.values;
-  });
+  var nodesByBreadth = prepareNodesByBreadth(nodes, orient);
   initializeNodeDepth(nodes, nodesByBreadth, edges, height, width, nodeGap, 
orient);
   resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);
 
@@ -248,16 +244,19 @@ function computeNodeDepths(nodes, edges, height, width, 
nodeGap, iterations, ori
   }
 }
 
-function getKeyFunction(orient) {
-  if (orient === 'vertical') {
-    return function (d) {
-      return d.getLayout().y;
-    };
-  }
-
-  return function (d) {
-    return d.getLayout().x;
-  };
+function prepareNodesByBreadth(nodes, orient) {
+  var nodesByBreadth = [];
+  var keyAttr = orient === 'vertical' ? 'y' : 'x';
+  var groupResult = groupData(nodes, function (node) {
+    return node.getLayout()[keyAttr];
+  });
+  groupResult.keys.sort(function (a, b) {
+    return a - b;
+  });
+  zrUtil.each(groupResult.keys, function (key) {
+    nodesByBreadth.push(groupResult.buckets.get(key));
+  });
+  return nodesByBreadth;
 }
 /**
  * Compute the original y-position for each node
diff --git a/builder/src/echarts/chart/themeRiver/ThemeRiverSeries.js 
b/builder/src/echarts/chart/themeRiver/ThemeRiverSeries.js
index 21f8238..11749d5 100644
--- a/builder/src/echarts/chart/themeRiver/ThemeRiverSeries.js
+++ b/builder/src/echarts/chart/themeRiver/ThemeRiverSeries.js
@@ -26,8 +26,8 @@ import createDimensions from 
'../../data/helper/createDimensions';
 import { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper';
 import List from '../../data/List';
 import * as zrUtil from 'zrender/src/core/util';
+import { groupData } from '../../util/model';
 import { encodeHTML } from '../../util/format';
-import nest from '../../util/nest';
 var DATA_NAME_INDEX = 2;
 var ThemeRiverSeries = SeriesModel.extend({
   type: 'series.themeRiver',
@@ -62,15 +62,15 @@ var ThemeRiverSeries = SeriesModel.extend({
   fixData: function (data) {
     var rawDataLength = data.length; // grouped data by name
 
-    var dataByName = nest().key(function (dataItem) {
-      return dataItem[2];
-    }).entries(data); // data group in each layer
-
-    var layData = zrUtil.map(dataByName, function (d) {
-      return {
-        name: d.key,
-        dataList: d.values
-      };
+    var groupResult = groupData(data, function (item) {
+      return item[2];
+    });
+    var layData = [];
+    groupResult.buckets.each(function (items, key) {
+      layData.push({
+        name: key,
+        dataList: items
+      });
     });
     var layerNum = layData.length;
     var largestLayer = -1;
@@ -187,28 +187,23 @@ var ThemeRiverSeries = SeriesModel.extend({
 
     for (var i = 0; i < lenCount; ++i) {
       indexArr[i] = i;
-    } // data group by name
+    }
 
+    var timeDim = data.mapDimension('single'); // data group by name
 
-    var dataByName = nest().key(function (index) {
+    var groupResult = groupData(indexArr, function (index) {
       return data.get('name', index);
-    }).entries(indexArr);
-    var layerSeries = zrUtil.map(dataByName, function (d) {
-      return {
-        name: d.key,
-        indices: d.values
-      };
     });
-    var timeDim = data.mapDimension('single');
-
-    for (var j = 0; j < layerSeries.length; ++j) {
-      layerSeries[j].indices.sort(comparer);
-    }
-
-    function comparer(index1, index2) {
-      return data.get(timeDim, index1) - data.get(timeDim, index2);
-    }
-
+    var layerSeries = [];
+    groupResult.buckets.each(function (items, key) {
+      items.sort(function (index1, index2) {
+        return data.get(timeDim, index1) - data.get(timeDim, index2);
+      });
+      layerSeries.push({
+        name: key,
+        indices: items
+      });
+    });
     return layerSeries;
   },
 
diff --git a/builder/src/echarts/chart/tree/layoutHelper.js 
b/builder/src/echarts/chart/tree/layoutHelper.js
index 0d8c5c5..3d86de9 100644
--- a/builder/src/echarts/chart/tree/layoutHelper.js
+++ b/builder/src/echarts/chart/tree/layoutHelper.js
@@ -18,21 +18,25 @@
 */
 
 /*
-* The tree layout implementation references to d3.js
-* (https://github.com/d3/d3-hierarchy). The use of the source
-* code of this file is also subject to the terms and consitions
-* of its license (BSD-3Clause, see <echarts/src/licenses/LICENSE-d3>).
+* A third-party license is embeded for some of the code in this file:
+* The tree layoutHelper implementation was originally copied from
+* "d3.js"(https://github.com/d3/d3-hierarchy) with
+* some modifications made for this project.
+* (see more details in the comment of the specific method below.)
+* The use of the source code of this file is also subject to the terms
+* and consitions of the licence of "d3.js" (BSD-3Clause, see
+* </licenses/LICENSE-d3>).
 */
 
 /**
  * @file The layout algorithm of node-link tree diagrams. Here we using 
Reingold-Tilford algorithm to drawing
  *       the tree.
- * @see https://github.com/d3/d3-hierarchy
  */
 import * as layout from '../../util/layout';
 /**
- * Initialize all computational message for following algorithm
- * @param  {module:echarts/data/Tree~TreeNode} root   The virtual root of the 
tree
+ * Initialize all computational message for following algorithm.
+ *
+ * @param  {module:echarts/data/Tree~TreeNode} root   The virtual root of the 
tree.
  */
 
 export function init(root) {
@@ -75,10 +79,16 @@ export function init(root) {
   }
 }
 /**
+ * The implementation of this function was originally copied from "d3.js"
+ * 
<https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>
+ * with some modifications made for this program.
+ * See the license statement at the head of this file.
+ *
  * Computes a preliminary x coordinate for node. Before that, this function is
  * applied recursively to the children of node, as well as the function
  * apportion(). After spacing out the children by calling executeShifts(), the
  * node is placed to the midpoint of its outermost children.
+ *
  * @param  {module:echarts/data/Tree~TreeNode} node
  * @param {Function} separation
  */
@@ -105,7 +115,13 @@ export function firstWalk(node, separation) {
   node.parentNode.hierNode.defaultAncestor = apportion(node, subtreeW, 
node.parentNode.hierNode.defaultAncestor || siblings[0], separation);
 }
 /**
+ * The implementation of this function was originally copied from "d3.js"
+ * 
<https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>
+ * with some modifications made for this program.
+ * See the license statement at the head of this file.
+ *
  * Computes all real x-coordinates by summing up the modifiers recursively.
+ *
  * @param  {module:echarts/data/Tree~TreeNode} node
  */
 
@@ -120,7 +136,8 @@ export function separation(cb) {
   return arguments.length ? cb : defaultSeparation;
 }
 /**
- * Transform the common coordinate to radial coordinate
+ * Transform the common coordinate to radial coordinate.
+ *
  * @param  {number} x
  * @param  {number} y
  * @return {Object}
@@ -134,7 +151,8 @@ export function radialCoordinate(x, y) {
   return radialCoor;
 }
 /**
- * Get the layout position of the whole view
+ * Get the layout position of the whole view.
+ *
  * @param {module:echarts/model/Series} seriesModel  the model object of 
sankey series
  * @param {module:echarts/ExtensionAPI} api  provide the API list that the 
developer can call
  * @return {module:zrender/core/BoundingRect}  size of rect to draw the sankey 
view
@@ -149,6 +167,12 @@ export function getViewRect(seriesModel, api) {
 /**
  * All other shifts, applied to the smaller subtrees between w- and w+, are
  * performed by this function.
+ *
+ * The implementation of this function was originally copied from "d3.js"
+ * 
<https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>
+ * with some modifications made for this program.
+ * See the license statement at the head of this file.
+ *
  * @param  {module:echarts/data/Tree~TreeNode} node
  */
 
@@ -167,6 +191,11 @@ function executeShifts(node) {
   }
 }
 /**
+ * The implementation of this function was originally copied from "d3.js"
+ * 
<https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>
+ * with some modifications made for this program.
+ * See the license statement at the head of this file.
+ *
  * The core of the algorithm. Here, a new subtree is combined with the
  * previous subtrees. Threads are used to traverse the inside and outside
  * contours of the left and right subtree up to the highest common level.
@@ -174,6 +203,7 @@ function executeShifts(node) {
  * one of the greatest uncommon ancestors using the function nextAncestor()
  * and call moveSubtree() to shift the subtree and prepare the shifts of
  * smaller subtrees. Finally, we add a new thread (if necessary).
+ *
  * @param  {module:echarts/data/Tree~TreeNode} subtreeV
  * @param  {module:echarts/data/Tree~TreeNode} subtreeW
  * @param  {module:echarts/data/Tree~TreeNode} ancestor
@@ -229,6 +259,7 @@ function apportion(subtreeV, subtreeW, ancestor, 
separation) {
  * This function is used to traverse the right contour of a subtree.
  * It returns the rightmost child of node or the thread of node. The function
  * returns null if and only if node is on the highest depth of its subtree.
+ *
  * @param  {module:echarts/data/Tree~TreeNode} node
  * @return {module:echarts/data/Tree~TreeNode}
  */
@@ -242,6 +273,7 @@ function nextRight(node) {
  * This function is used to traverse the left contour of a subtree (or a 
subforest).
  * It returns the leftmost child of node or the thread of node. The function
  * returns null if and only if node is on the highest depth of its subtree.
+ *
  * @param  {module:echarts/data/Tree~TreeNode} node
  * @return {module:echarts/data/Tree~TreeNode}
  */
@@ -254,6 +286,7 @@ function nextLeft(node) {
 /**
  * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s 
ancestor.
  * Otherwise, returns the specified ancestor.
+ *
  * @param  {module:echarts/data/Tree~TreeNode} nodeInLeft
  * @param  {module:echarts/data/Tree~TreeNode} node
  * @param  {module:echarts/data/Tree~TreeNode} ancestor
@@ -265,7 +298,14 @@ function nextAncestor(nodeInLeft, node, ancestor) {
   return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode ? 
nodeInLeft.hierNode.ancestor : ancestor;
 }
 /**
- * Shifts the current subtree rooted at wr. This is done by increasing 
prelim(w+) and modifier(w+) by shift.
+ * The implementation of this function was originally copied from "d3.js"
+ * 
<https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>
+ * with some modifications made for this program.
+ * See the license statement at the head of this file.
+ *
+ * Shifts the current subtree rooted at wr.
+ * This is done by increasing prelim(w+) and modifier(w+) by shift.
+ *
  * @param  {module:echarts/data/Tree~TreeNode} wl
  * @param  {module:echarts/data/Tree~TreeNode} wr
  * @param  {number} shift [description]
@@ -280,6 +320,13 @@ function moveSubtree(wl, wr, shift) {
   wr.hierNode.prelim += shift;
   wl.hierNode.change += change;
 }
+/**
+ * The implementation of this function was originally copied from "d3.js"
+ * 
<https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>
+ * with some modifications made for this program.
+ * See the license statement at the head of this file.
+ */
+
 
 function defaultSeparation(node1, node2) {
   return node1.parentNode === node2.parentNode ? 1 : 2;
diff --git a/builder/src/echarts/chart/treemap/treemapLayout.js 
b/builder/src/echarts/chart/treemap/treemapLayout.js
index 9e5f693..92ab6f1 100644
--- a/builder/src/echarts/chart/treemap/treemapLayout.js
+++ b/builder/src/echarts/chart/treemap/treemapLayout.js
@@ -18,11 +18,13 @@
 */
 
 /*
-* The treemap layout implementation references to the treemap
-* layout of d3.js (d3/src/layout/treemap.js in v3). The use of
-* the source code of this file is also subject to the terms
-* and consitions of its license (BSD-3Clause, see
-* <echarts/src/licenses/LICENSE-d3>).
+* A third-party license is embeded for some of the code in this file:
+* The treemap layout implementation was originally copied from
+* "d3.js" with some modifications made for this project.
+* (See more details in the comment of the method "squarify" below.)
+* The use of the source code of this file is also subject to the terms
+* and consitions of the license of "d3.js" (BSD-3Clause, see
+* </licenses/LICENSE-d3>).
 */
 import * as zrUtil from 'zrender/src/core/util';
 import BoundingRect from 'zrender/src/core/BoundingRect';
@@ -116,8 +118,12 @@ export default {
 };
 /**
  * Layout treemap with squarify algorithm.
- * @see 
https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf
- * The implementation references to the treemap layout of d3.js.
+ * The original presentation of this algorithm
+ * was made by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
+ * 
<https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf>.
+ * The implementation of this algorithm was originally copied from "d3.js"
+ * 
<https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/layout/treemap.js>
+ * with some modifications made for this program.
  * See the license statement at the head of this file.
  *
  * @protected
diff --git a/builder/src/echarts/model/mixin/textStyle.js 
b/builder/src/echarts/model/mixin/textStyle.js
index 0948ba7..f369965 100644
--- a/builder/src/echarts/model/mixin/textStyle.js
+++ b/builder/src/echarts/model/mixin/textStyle.js
@@ -43,6 +43,6 @@ export default {
     }, this.ecModel);
   },
   getTextRect: function (text) {
-    return textContain.getBoundingRect(text, this.getFont(), 
this.getShallow('align'), this.getShallow('verticalAlign') || 
this.getShallow('baseline'), this.getShallow('padding'), 
this.getShallow('rich'), this.getShallow('truncateText'));
+    return textContain.getBoundingRect(text, this.getFont(), 
this.getShallow('align'), this.getShallow('verticalAlign') || 
this.getShallow('baseline'), this.getShallow('padding'), 
this.getShallow('lineHeight'), this.getShallow('rich'), 
this.getShallow('truncateText'));
   }
 };
\ No newline at end of file
diff --git a/builder/src/echarts/scale/Time.js 
b/builder/src/echarts/scale/Time.js
index e537ef0..6f04dfd 100644
--- a/builder/src/echarts/scale/Time.js
+++ b/builder/src/echarts/scale/Time.js
@@ -18,9 +18,13 @@
 */
 
 /*
-* The `scaleLevels` references to d3.js. The use of the source
-* code of this file is also subject to the terms and consitions
-* of its license (BSD-3Clause, see <echarts/src/licenses/LICENSE-d3>).
+* A third-party license is embeded for some of the code in this file:
+* The "scaleLevels" was originally copied from "d3.js" with some
+* modifications made for this project.
+* (See more details in the comment on the definition of "scaleLevels" below.)
+* The use of the source code of this file is also subject to the terms
+* and consitions of the license of "d3.js" (BSD-3Clause, see
+* </licenses/LICENSE-d3>).
 */
 // [About UTC and local time zone]:
 // In most cases, `number.parseDate` will treat input data string as local time
@@ -154,7 +158,13 @@ zrUtil.each(['contain', 'normalize'], function 
(methodName) {
   TimeScale.prototype[methodName] = function (val) {
     return intervalScaleProto[methodName].call(this, this.parse(val));
   };
-}); // Steps from d3, see the license statement at the top of this file.
+});
+/**
+ * This implementation was originally copied from "d3.js"
+ * 
<https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/time/scale.js>
+ * with some modifications made for this program.
+ * See the license statement at the head of this file.
+ */
 
 var scaleLevels = [// Format              interval
 ['hh:mm:ss', ONE_SECOND], // 1s
diff --git a/builder/src/echarts/util/format.js 
b/builder/src/echarts/util/format.js
index 79c600b..15e927c 100644
--- a/builder/src/echarts/util/format.js
+++ b/builder/src/echarts/util/format.js
@@ -202,4 +202,30 @@ export function capitalFirst(str) {
   return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;
 }
 export var truncateText = textContain.truncateText;
-export var getTextRect = textContain.getBoundingRect;
\ No newline at end of file
+/**
+ * @public
+ * @param {Object} opt
+ * @param {string} opt.text
+ * @param {string} opt.font
+ * @param {string} [opt.textAlign='left']
+ * @param {string} [opt.textVerticalAlign='top']
+ * @param {Array.<number>} [opt.textPadding]
+ * @param {number} [opt.textLineHeight]
+ * @param {Object} [opt.rich]
+ * @param {Object} [opt.truncate]
+ * @return {Object} {x, y, width, height, lineHeight}
+ */
+
+export function getTextBoundingRect(opt) {
+  return textContain.getBoundingRect(opt.text, opt.font, opt.textAlign, 
opt.textVerticalAlign, opt.textPadding, opt.textLineHeight, opt.rich, 
opt.truncate);
+}
+/**
+ * @deprecated
+ * the `textLineHeight` was added later.
+ * For backward compatiblility, put it as the last parameter.
+ * But deprecated this interface. Please use `getTextBoundingRect` instead.
+ */
+
+export function getTextRect(text, font, textAlign, textVerticalAlign, 
textPadding, rich, truncate, textLineHeight) {
+  return textContain.getBoundingRect(text, font, textAlign, textVerticalAlign, 
textPadding, textLineHeight, rich, truncate);
+}
\ No newline at end of file
diff --git a/builder/src/echarts/util/model.js 
b/builder/src/echarts/util/model.js
index 26a9439..ae80a8f 100644
--- a/builder/src/echarts/util/model.js
+++ b/builder/src/echarts/util/model.js
@@ -466,4 +466,28 @@ export function getTooltipRenderMode(renderModeOption) {
   } else {
     return renderModeOption || 'html';
   }
+}
+/**
+ * Group a list by key.
+ *
+ * @param {Array} array
+ * @param {Function} getKey
+ *        param {*} Array item
+ *        return {string} key
+ * @return {Object} Result
+ *        {Array}: keys,
+ *        {module:zrender/core/util/HashMap} buckets: {key -> Array}
+ */
+
+export function groupData(array, getKey) {
+  var buckets = zrUtil.createHashMap();
+  var keys = [];
+  zrUtil.each(array, function (item) {
+    var key = getKey(item);
+    (buckets.get(key) || (keys.push(key), buckets.set(key, []))).push(item);
+  });
+  return {
+    keys: keys,
+    buckets: buckets
+  };
 }
\ No newline at end of file
diff --git a/builder/src/echarts/util/number.js 
b/builder/src/echarts/util/number.js
index 9a38f45..0856ee1 100644
--- a/builder/src/echarts/util/number.js
+++ b/builder/src/echarts/util/number.js
@@ -16,6 +16,15 @@
 * specific language governing permissions and limitations
 * under the License.
 */
+
+/*
+* A third-party license is embeded for some of the code in this file:
+* The method "quantile" was copied from "d3.js".
+* (See more details in the comment of the method below.)
+* The use of the source code of this file is also subject to the terms
+* and consitions of the license of "d3.js" (BSD-3Clause, see
+* </licenses/LICENSE-d3>).
+*/
 import * as zrUtil from 'zrender/src/core/util';
 var RADIAN_EPSILON = 1e-4;
 
@@ -408,39 +417,9 @@ export function nice(val, round) {
   return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;
 }
 /**
- * BSD 3-Clause
- *
- * Copyright (c) 2010-2015, Michael Bostock
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice, 
this
- *   list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- *
- * * The name Michael Bostock may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
ARE
- * DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
(INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * @see <https://github.com/mbostock/d3/blob/master/src/arrays/quantile.js>
- * @see <http://en.wikipedia.org/wiki/Quantile>
+ * This code was copied from "d3.js"
+ * 
<https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/arrays/quantile.js>.
+ * See the license statement at the head of this file.
  * @param {Array.<number>} ascArr
  */
 
diff --git a/builder/src/zrender/contain/text.js 
b/builder/src/zrender/contain/text.js
index 883a5c8..056ac8f 100644
--- a/builder/src/zrender/contain/text.js
+++ b/builder/src/zrender/contain/text.js
@@ -56,7 +56,7 @@ export function getWidth(text, font) {
  */
 
 export function getBoundingRect(text, font, textAlign, textVerticalAlign, 
textPadding, textLineHeight, rich, truncate) {
-  return rich ? getRichTextRect(text, font, textAlign, textVerticalAlign, 
textPadding, rich, textLineHeight, truncate) : getPlainTextRect(text, font, 
textAlign, textVerticalAlign, textPadding, textLineHeight, truncate);
+  return rich ? getRichTextRect(text, font, textAlign, textVerticalAlign, 
textPadding, textLineHeight, rich, truncate) : getPlainTextRect(text, font, 
textAlign, textVerticalAlign, textPadding, textLineHeight, truncate);
 }
 
 function getPlainTextRect(text, font, textAlign, textVerticalAlign, 
textPadding, textLineHeight, truncate) {
diff --git a/builder/src/zrender/graphic/Text.js 
b/builder/src/zrender/graphic/Text.js
index c8be7cb..261ee87 100644
--- a/builder/src/zrender/graphic/Text.js
+++ b/builder/src/zrender/graphic/Text.js
@@ -50,7 +50,7 @@ Text.prototype = {
     if (!this._rect) {
       var text = style.text;
       text != null ? text += '' : text = '';
-      var rect = textContain.getBoundingRect(style.text + '', style.font, 
style.textAlign, style.textVerticalAlign, style.textPadding, style.rich);
+      var rect = textContain.getBoundingRect(style.text + '', style.font, 
style.textAlign, style.textVerticalAlign, style.textPadding, 
style.textLineHeight, style.rich);
       rect.x += style.x || 0;
       rect.y += style.y || 0;
 
diff --git a/builder/src/zrender/zrender.js b/builder/src/zrender/zrender.js
index 8011137..2c6071e 100644
--- a/builder/src/zrender/zrender.js
+++ b/builder/src/zrender/zrender.js
@@ -25,7 +25,7 @@ var instances = {}; // ZRender实例map索引
  * @type {string}
  */
 
-export var version = '4.0.6';
+export var version = '4.0.7';
 /**
  * Initializing a zrender instance
  * @param {HTMLElement} dom
diff --git a/changelog.html b/changelog.html
index a95e7b9..5186ec2 100644
--- a/changelog.html
+++ b/changelog.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/coding-standard.html b/coding-standard.html
index 5b1b521..2c026a3 100644
--- a/coding-standard.html
+++ b/coding-standard.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/committers.html b/committers.html
index 5f5d150..fcfbfee 100644
--- a/committers.html
+++ b/committers.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/css/main.css b/css/main.css
index 98a1f07..f6778c9 100644
--- a/css/main.css
+++ b/css/main.css
@@ -1 +1 @@
-@font-face{font-family:'iconfont';src:url("font/iconfont.eot");src:url("font/iconfont.eot?#iefix")
 format("embedded-opentype"),url("font/iconfont.woff") 
format("woff"),url("font/iconfont.ttf") 
format("truetype"),url("font/iconfont.svg#iconfont") 
format("svg")}.iconfont{font-family:"iconfont" 
!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{height:100%}body{height:10
 [...]
+@font-face{font-family:'iconfont';src:url("font/iconfont.eot");src:url("font/iconfont.eot?#iefix")
 format("embedded-opentype"),url("font/iconfont.woff") 
format("woff"),url("font/iconfont.ttf") 
format("truetype"),url("font/iconfont.svg#iconfont") 
format("svg")}.iconfont{font-family:"iconfont" 
!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{height:100%}body{height:10
 [...]
diff --git a/dependencies.html b/dependencies.html
index d036410..c0aca49 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/documents/en/option.json b/documents/en/option.json
index 1a5cfa8..ecc9b1a 100644
--- a/documents/en/option.json
+++ b/documents/en/option.json
@@ -1 +1 @@
-{"$schema":"http://echarts.baidu.com/doc/json-schem","option":{"type":"Object","properties":{"title":{"type":["Object"],"description":";<p>Title
 component, including main title and subtitle.</p>\n<p>In ECharts 2.x, a single 
instance of ECharts could contains one title component at most. However, in 
ECharts 3, there could be one or more than one title components. It is more 
useful when multiple diagrams in one instance all need 
titles.</p>\n<p><strong>Here are some instances of different a [...]
\ No newline at end of file
+{"$schema":"http://echarts.baidu.com/doc/json-schem","option":{"type":"Object","properties":{"title":{"type":["Object"],"description":";<p>Title
 component, including main title and subtitle.</p>\n<p>In ECharts 2.x, a single 
instance of ECharts could contains one title component at most. However, in 
ECharts 3, there could be one or more than one title components. It is more 
useful when multiple diagrams in one instance all need 
titles.</p>\n<p><strong>Here are some instances of different a [...]
\ No newline at end of file
diff --git a/documents/en/tutorial.json b/documents/en/tutorial.json
index 27604b4..5af7598 100644
--- a/documents/en/tutorial.json
+++ b/documents/en/tutorial.json
@@ -1 +1 @@
-{"$schema":"http://echarts.baidu.com/doc/json-schem","option":{"type":"Object","properties":{"Get
 Started with ECharts in 5 minutes":{"type":["*"],"description":"<h2 
id=\"get-echarts\">Get ECharts</h2>\n<p>First, install ECharts using one of the 
following methods:</p>\n<ol>\n<li><p>The <a 
href=\"https://ecomfe.github.io/echarts-doc/public/en/download.html\"; 
target=\"_blank\">official download page</a>, which has different builds for 
common needs. If you want to include all packages, you  [...]
\ No newline at end of file
+{"$schema":"http://echarts.baidu.com/doc/json-schem","option":{"type":"Object","properties":{"Get
 Started with ECharts in 5 minutes":{"type":["*"],"description":"<h2 
id=\"get-echarts\">Get ECharts</h2>\n<p>First, install ECharts using one of the 
following methods:</p>\n<ol>\n<li><p>The <a 
href=\"https://ecomfe.github.io/echarts-doc/public/en/download.html\"; 
target=\"_blank\">official download page</a>, which has different builds for 
common needs. If you want to include all packages, you  [...]
\ No newline at end of file
diff --git a/download.html b/download.html
index 7439640..3c88f7a 100644
--- a/download.html
+++ b/download.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,17 +7,14 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><script type="text/javascript" 
src="./vendors/jquery/jquery.min.js"></script></head><!--[if lte IE 8]><body 
class="lower-ie"><div id="lowie-main"><img src="./images/forie.png" alt="ie 
tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div 
id="main"><style>#download-main h3 {
-    width: 650px;
-}
-#download-main .d-section-version .circle-wrap {
-    line-height: 120px;
-    font-size: 20px;
-    font-family: Helvetica;
-    color: #214d62;
-    font-weight: normal;
-}
-</style><nav class="navbar navbar-default navbar-fixed-top"><div 
class="container-fluid"><div class="navbar-header"><button type="button" 
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" 
aria-expanded="false" class="navbar-toggle collapsed"><span 
class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span 
class="icon-bar"></span><span class="icon-bar"></span></button><a 
href="./index.html" class="navbar-brand"><img src="./images/logo.png" 
alt="echarts lo [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div 
id="main"><style>//- #download-main .d-section-version .circle-wrap {
+//-     line-height: 120px;
+//-     font-size: 20px;
+//-     font-family: Helvetica;
+//-     color: #214d62;
+//-     font-weight: normal;
+//- }
+</style><nav class="navbar navbar-default navbar-fixed-top"><div 
class="container-fluid"><div class="navbar-header"><button type="button" 
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" 
aria-expanded="false" class="navbar-toggle collapsed"><span 
class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span 
class="icon-bar"></span><span class="icon-bar"></span></button><a 
href="./index.html" class="navbar-brand"><img src="./images/logo.png" 
alt="echarts lo [...]
 
 var list = [
         {
@@ -55,25 +52,7 @@ var list = [
                 .replace(/>/g, '&gt;')
                 .replace(/"/g, '&quot;')
                 .replace(/'/g, '&#39;');
-    }
-
-    
$.getJSON("https://api.github.com/repos/ecomfe/echarts/releases/latest";).done(function
 (param) {
-        // var tagName = param['tag_name'];
-        var tagName = '4.1.0';
-
-        $('#tag-name').html('Download ' + encodeHTML(tagName));
-
-        var htmls = [];
-        for (var i = 0; i < list.length; i++) {
-            var item = list[i];
-            var url = 'https://raw.githubusercontent.com/ecomfe/echarts/' + 
tagName + '/dist/' + item.fileName;
-
-            htmls.push(
-                '<li class="col-md-3 col-md-6"><a target="_blank" href="' + 
encodeHTML(url) + '" download="' + encodeHTML(item.fileName) + '" 
class="download-echarts"><div class="circle-wrap">' + encodeHTML(item.label) + 
'</div></a><div class="text">' + item.descHTML0 + '<br><span>' + item.descHTML1 
+ '</span></div></li>'
-            );
-        }
-        $('#download-list')[0].innerHTML = htmls.join('');
-    });</script><script type="text/javascript">var _hmt = _hmt || [];
+    }</script><script type="text/javascript">var _hmt = _hmt || [];
 (function() {
 var hm = document.createElement("script");
 hm.src = "//hm.baidu.com/hm.js?4bad1df23f079e0d12bdbef5e65b072f";
diff --git a/faq.html b/faq.html
index b276710..bf63eb2 100644
--- a/faq.html
+++ b/faq.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/index.html b/index.html
index f8d720d..558ad62 100644
--- a/index.html
+++ b/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/js/download.js b/js/download.js
new file mode 100644
index 0000000..f15941b
--- /dev/null
+++ b/js/download.js
@@ -0,0 +1 @@
+$.getJSON("https://api.github.com/repos/apache/incubator-echarts/releases";).done(function(e){for(var
 
a=document.getElementById("download-table"),t=0;t<e.length;++t)if(!e[t].prerelease){var
 r=new Date(e[t].published_at);if(r.getTime()>new Date("2018-05-21")){var 
n=document.createElement("tr"),c=e[t].name,i=document.createElement("td");i.innerHTML=e[t].name,n.appendChild(i);var
 
h=document.createElement("td");h.innerHTML=r.getFullYear()+"/"+(r.getMonth()+1)+"/"+r.getDate(),n.appendChild(h);
 [...]
\ No newline at end of file
diff --git a/license.html b/license.html
index aec6388..3cbb5c6 100644
--- a/license.html
+++ b/license.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/maillist.html b/maillist.html
index 6350fa1..29dfc63 100644
--- a/maillist.html
+++ b/maillist.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/option.html b/option.html
index f9f1042..d788ca0 100644
--- a/option.html
+++ b/option.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -6,7 +6,7 @@
         + '@font-face {font-family:"noto-light";src:local("Microsoft 
Yahei");}';
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
-</script><title>ECharts Documentation</title><link rel="stylesheet" 
type="text/css" href="css/ecOption.css?_v_=1548317446197"><link 
rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/jquery-autocomplete/jquery.auto-complete.css"><link 
rel="stylesheet" type="text/css" href="vendors/twentytwenty/twentytwenty.css" 
[...]
+</script><title>ECharts Documentation</title><link rel="stylesheet" 
type="text/css" href="css/ecOption.css?_v_=1553895396796"><link 
rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/jquery-autocomplete/jquery.auto-complete.css"><link 
rel="stylesheet" type="text/css" href="vendors/twentytwenty/twentytwenty.css" 
[...]
 <!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div 
id="main"><nav class="navbar navbar-default navbar-fixed-top"><div 
class="container-fluid"><div class="navbar-header"><button type="button" 
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" 
aria-expanded="false" class="navbar-toggle collapsed"><span 
class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span 
class="icon-bar"></span><span class="icon-bar"></span></button><a href="./in 
[...]
     pageName: 'option',
     initHash: 'title',
@@ -16,7 +16,7 @@
 var vendorPath = '../vendors';
 
 define('globalArgs', extend({
-    version: '1548317446197',
+    version: '1553895396796',
     basePath: './',
     // Schema url is added by each doc page
     schemaUrl: '',
@@ -51,7 +51,7 @@ require.config({
         hasher: vendorPath + '/hasher/1.2.0/hasher.min',
         perfectScrollbar: vendorPath + 
'/perfect-scrollbar/0.6.8/js/perfect-scrollbar'
     },
-    urlArgs: '_v_=1548317446197'
+    urlArgs: '_v_=1553895396796'
 });
 
 require(['docTool/main'], function (main) {
diff --git a/option3.html b/option3.html
index d6f8984..7f6bd95 100644
--- a/option3.html
+++ b/option3.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -6,7 +6,7 @@
         + '@font-face {font-family:"noto-light";src:local("Microsoft 
Yahei");}';
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
-</script><title>ECharts Documentation</title><link rel="stylesheet" 
type="text/css" href="css/ecOption.css?_v_=1548317446197"><link 
rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/jquery-autocomplete/jquery.auto-complete.css"><link 
rel="stylesheet" type="text/css" href="vendors/twentytwenty/twentytwenty.css" 
[...]
+</script><title>ECharts Documentation</title><link rel="stylesheet" 
type="text/css" href="css/ecOption.css?_v_=1553895396796"><link 
rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/jquery-autocomplete/jquery.auto-complete.css"><link 
rel="stylesheet" type="text/css" href="vendors/twentytwenty/twentytwenty.css" 
[...]
 <!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div 
id="main"><nav class="navbar navbar-default navbar-fixed-top"><div 
class="container-fluid"><div class="navbar-header"><button type="button" 
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" 
aria-expanded="false" class="navbar-toggle collapsed"><span 
class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span 
class="icon-bar"></span><span class="icon-bar"></span></button><a href="./in 
[...]
     pageName: 'option',
     schemaName: 'option3',
@@ -17,7 +17,7 @@
 var vendorPath = '../vendors';
 
 define('globalArgs', extend({
-    version: '1548317446197',
+    version: '1553895396796',
     basePath: './',
     // Schema url is added by each doc page
     schemaUrl: '',
@@ -52,7 +52,7 @@ require.config({
         hasher: vendorPath + '/hasher/1.2.0/hasher.min',
         perfectScrollbar: vendorPath + 
'/perfect-scrollbar/0.6.8/js/perfect-scrollbar'
     },
-    urlArgs: '_v_=1548317446197'
+    urlArgs: '_v_=1553895396796'
 });
 
 require(['docTool/main'], function (main) {
diff --git a/tutorial.html b/tutorial.html
index a079326..c5330ad 100644
--- a/tutorial.html
+++ b/tutorial.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta 
http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" 
content="width=device-width, initial-scale=1" user-scalable="no"><meta 
name="description" content="ECharts, a powerful, interactive charting and 
visualization library for browser"><link rel="shortcut icon" 
href="images/favicon.png"><link rel="stylesheet" type="text/css" 
href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js 
for IE [...]
 </script><script type="text/javascript" 
src="./vendors/pace/pace.min.js"></script><script id="font-hack" 
type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -6,7 +6,7 @@
         + '@font-face {font-family:"noto-light";src:local("Microsoft 
Yahei");}';
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
-</script><title>ECharts Documentation</title><link rel="stylesheet" 
type="text/css" href="css/ecOption.css?_v_=1548317446197"><link 
rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/jquery-autocomplete/jquery.auto-complete.css"><link 
rel="stylesheet" type="text/css" href="vendors/twentytwenty/twentytwenty.css" 
[...]
+</script><title>ECharts Documentation</title><link rel="stylesheet" 
type="text/css" href="css/ecOption.css?_v_=1553895396796"><link 
rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link 
rel="stylesheet" type="text/css" 
href="vendors/jquery-autocomplete/jquery.auto-complete.css"><link 
rel="stylesheet" type="text/css" href="vendors/twentytwenty/twentytwenty.css" 
[...]
 <!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div 
id="main"><nav class="navbar navbar-default navbar-fixed-top"><div 
class="container-fluid"><div class="navbar-header"><button type="button" 
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" 
aria-expanded="false" class="navbar-toggle collapsed"><span 
class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span 
class="icon-bar"></span><span class="icon-bar"></span></button><a href="./in 
[...]
 
 window.globalArgsExtra = {
@@ -30,7 +30,7 @@ window.globalArgsExtra = {
 var vendorPath = '../vendors';
 
 define('globalArgs', extend({
-    version: '1548317446197',
+    version: '1553895396796',
     basePath: './',
     // Schema url is added by each doc page
     schemaUrl: '',
@@ -65,7 +65,7 @@ require.config({
         hasher: vendorPath + '/hasher/1.2.0/hasher.min',
         perfectScrollbar: vendorPath + 
'/perfect-scrollbar/0.6.8/js/perfect-scrollbar'
     },
-    urlArgs: '_v_=1548317446197'
+    urlArgs: '_v_=1553895396796'
 });
 
 require(['docTool/main'], function (main) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to