http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/f629d0f4/griffin-ui/bower_components/echarts/dist/echarts.js
----------------------------------------------------------------------
diff --git a/griffin-ui/bower_components/echarts/dist/echarts.js 
b/griffin-ui/bower_components/echarts/dist/echarts.js
deleted file mode 100644
index 894d2b5..0000000
--- a/griffin-ui/bower_components/echarts/dist/echarts.js
+++ /dev/null
@@ -1,63245 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-       if(typeof exports === 'object' && typeof module === 'object')
-               module.exports = factory();
-       else if(typeof define === 'function' && define.amd)
-               define([], factory);
-       else if(typeof exports === 'object')
-               exports["echarts"] = factory();
-       else
-               root["echarts"] = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/       // The module cache
-/******/       var installedModules = {};
-
-/******/       // The require function
-/******/       function __webpack_require__(moduleId) {
-
-/******/               // Check if module is in cache
-/******/               if(installedModules[moduleId])
-/******/                       return installedModules[moduleId].exports;
-
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = installedModules[moduleId] = {
-/******/                       exports: {},
-/******/                       id: moduleId,
-/******/                       loaded: false
-/******/               };
-
-/******/               // Execute the module function
-/******/               modules[moduleId].call(module.exports, module, 
module.exports, __webpack_require__);
-
-/******/               // Flag the module as loaded
-/******/               module.loaded = true;
-
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-
-
-/******/       // expose the modules object (__webpack_modules__)
-/******/       __webpack_require__.m = modules;
-
-/******/       // expose the module cache
-/******/       __webpack_require__.c = installedModules;
-
-/******/       // __webpack_public_path__
-/******/       __webpack_require__.p = "";
-
-/******/       // Load entry module and return exports
-/******/       return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Export echarts as CommonJS module
-        */
-       module.exports = __webpack_require__(1);
-
-       // Import all charts and components
-       __webpack_require__(99);
-       __webpack_require__(133);
-       __webpack_require__(138);
-       __webpack_require__(147);
-       __webpack_require__(151);
-
-       __webpack_require__(161);
-       __webpack_require__(182);
-       __webpack_require__(194);
-       __webpack_require__(215);
-       __webpack_require__(219);
-       __webpack_require__(223);
-       __webpack_require__(238);
-       __webpack_require__(244);
-       __webpack_require__(251);
-       __webpack_require__(257);
-       __webpack_require__(261);
-       __webpack_require__(269);
-
-       __webpack_require__(112);
-       __webpack_require__(273);
-       __webpack_require__(279);
-       __webpack_require__(283);
-       __webpack_require__(294);
-       __webpack_require__(224);
-       __webpack_require__(297);
-       __webpack_require__(303);
-
-       __webpack_require__(315);
-
-       __webpack_require__(316);
-       __webpack_require__(329);
-
-       __webpack_require__(344);
-       __webpack_require__(350);
-       __webpack_require__(353);
-
-       __webpack_require__(356);
-       __webpack_require__(365);
-
-       __webpack_require__(378);
-
-
-/***/ },
-/* 1 */
-/***/ function(module, exports, __webpack_require__) {
-
-       // Enable DEV mode when using source code without build. which has no 
__DEV__ variable
-       // In build process 'typeof __DEV__' will be replace with 'boolean'
-       // So this code will be removed or disabled anyway after built.
-       if (false) {
-           // In browser
-           if (typeof window !== 'undefined') {
-               window.__DEV__ = true;
-           }
-           // In node
-           else if (typeof global !== 'undefined') {
-               global.__DEV__ = true;
-           }
-       }
-
-       /*!
-        * ECharts, a javascript interactive chart library.
-        *
-        * Copyright (c) 2015, Baidu Inc.
-        * All rights reserved.
-        *
-        * LICENSE
-        * https://github.com/ecomfe/echarts/blob/master/LICENSE.txt
-        */
-
-       /**
-        * @module echarts
-        */
-
-
-           var env = __webpack_require__(2);
-
-           var GlobalModel = __webpack_require__(3);
-           var ExtensionAPI = __webpack_require__(25);
-           var CoordinateSystemManager = __webpack_require__(26);
-           var OptionManager = __webpack_require__(27);
-
-           var ComponentModel = __webpack_require__(19);
-           var SeriesModel = __webpack_require__(28);
-
-           var ComponentView = __webpack_require__(29);
-           var ChartView = __webpack_require__(42);
-           var graphic = __webpack_require__(43);
-
-           var zrender = __webpack_require__(81);
-           var zrUtil = __webpack_require__(4);
-           var colorTool = __webpack_require__(39);
-           var Eventful = __webpack_require__(33);
-           var timsort = __webpack_require__(85);
-
-           var each = zrUtil.each;
-
-           var PRIORITY_PROCESSOR_FILTER = 1000;
-           var PRIORITY_PROCESSOR_STATISTIC = 5000;
-
-
-           var PRIORITY_VISUAL_LAYOUT = 1000;
-           var PRIORITY_VISUAL_GLOBAL = 2000;
-           var PRIORITY_VISUAL_CHART = 3000;
-           var PRIORITY_VISUAL_COMPONENT = 4000;
-           var PRIORITY_VISUAL_BRUSH = 5000;
-
-           // Main process have three entries: `setOption`, `dispatchAction` 
and `resize`,
-           // where they must not be invoked nestedly, except the only case: 
invoke
-           // dispatchAction with updateMethod "none" in main process.
-           // This flag is used to carry out this rule.
-           // All events will be triggered out side main process (i.e. when 
!this[IN_MAIN_PROCESS]).
-           var IN_MAIN_PROCESS = '__flag_in_main_process';
-           var HAS_GRADIENT_OR_PATTERN_BG = '_hasGradientOrPatternBg';
-
-           function createRegisterEventWithLowercaseName(method) {
-               return function (eventName, handler, context) {
-                   // Event name is all lowercase
-                   eventName = eventName && eventName.toLowerCase();
-                   Eventful.prototype[method].call(this, eventName, handler, 
context);
-               };
-           }
-           /**
-            * @module echarts~MessageCenter
-            */
-           function MessageCenter() {
-               Eventful.call(this);
-           }
-           MessageCenter.prototype.on = 
createRegisterEventWithLowercaseName('on');
-           MessageCenter.prototype.off = 
createRegisterEventWithLowercaseName('off');
-           MessageCenter.prototype.one = 
createRegisterEventWithLowercaseName('one');
-           zrUtil.mixin(MessageCenter, Eventful);
-           /**
-            * @module echarts~ECharts
-            */
-           function ECharts (dom, theme, opts) {
-               opts = opts || {};
-
-               // Get theme by name
-               if (typeof theme === 'string') {
-                   theme = themeStorage[theme];
-               }
-
-               /**
-                * @type {string}
-                */
-               this.id;
-               /**
-                * Group id
-                * @type {string}
-                */
-               this.group;
-               /**
-                * @type {HTMLDomElement}
-                * @private
-                */
-               this._dom = dom;
-               /**
-                * @type {module:zrender/ZRender}
-                * @private
-                */
-               this._zr = zrender.init(dom, {
-                   renderer: opts.renderer || 'canvas',
-                   devicePixelRatio: opts.devicePixelRatio
-               });
-
-               /**
-                * @type {Object}
-                * @private
-                */
-               this._theme = zrUtil.clone(theme);
-
-               /**
-                * @type {Array.<module:echarts/view/Chart>}
-                * @private
-                */
-               this._chartsViews = [];
-
-               /**
-                * @type {Object.<string, module:echarts/view/Chart>}
-                * @private
-                */
-               this._chartsMap = {};
-
-               /**
-                * @type {Array.<module:echarts/view/Component>}
-                * @private
-                */
-               this._componentsViews = [];
-
-               /**
-                * @type {Object.<string, module:echarts/view/Component>}
-                * @private
-                */
-               this._componentsMap = {};
-
-               /**
-                * @type {module:echarts/ExtensionAPI}
-                * @private
-                */
-               this._api = new ExtensionAPI(this);
-
-               /**
-                * @type {module:echarts/CoordinateSystem}
-                * @private
-                */
-               this._coordSysMgr = new CoordinateSystemManager();
-
-               Eventful.call(this);
-
-               /**
-                * @type {module:echarts~MessageCenter}
-                * @private
-                */
-               this._messageCenter = new MessageCenter();
-
-               // Init mouse events
-               this._initEvents();
-
-               // In case some people write `window.onresize = chart.resize`
-               this.resize = zrUtil.bind(this.resize, this);
-
-               // Can't dispatch action during rendering procedure
-               this._pendingActions = [];
-               // Sort on demand
-               function prioritySortFunc(a, b) {
-                   return a.prio - b.prio;
-               }
-               timsort(visualFuncs, prioritySortFunc);
-               timsort(dataProcessorFuncs, prioritySortFunc);
-           }
-
-           var echartsProto = ECharts.prototype;
-
-           /**
-            * @return {HTMLDomElement}
-            */
-           echartsProto.getDom = function () {
-               return this._dom;
-           };
-
-           /**
-            * @return {module:zrender~ZRender}
-            */
-           echartsProto.getZr = function () {
-               return this._zr;
-           };
-
-           /**
-            * @param {Object} option
-            * @param {boolean} notMerge
-            * @param {boolean} [notRefreshImmediately=false] Useful when 
setOption frequently.
-            */
-           echartsProto.setOption = function (option, notMerge, 
notRefreshImmediately) {
-               if (true) {
-                   zrUtil.assert(!this[IN_MAIN_PROCESS], '`setOption` should 
not be called during main process.');
-               }
-
-               this[IN_MAIN_PROCESS] = true;
-
-               if (!this._model || notMerge) {
-                   var optionManager = new OptionManager(this._api);
-                   var theme = this._theme;
-                   var ecModel = this._model = new GlobalModel(null, null, 
theme, optionManager);
-                   ecModel.init(null, null, theme, optionManager);
-               }
-
-               this._model.setOption(option, optionPreprocessorFuncs);
-
-               updateMethods.prepareAndUpdate.call(this);
-
-               this[IN_MAIN_PROCESS] = false;
-
-               this._flushPendingActions();
-
-               !notRefreshImmediately && this._zr.refreshImmediately();
-           };
-
-           /**
-            * @DEPRECATED
-            */
-           echartsProto.setTheme = function () {
-               console.log('ECharts#setTheme() is DEPRECATED in ECharts 3.0');
-           };
-
-           /**
-            * @return {module:echarts/model/Global}
-            */
-           echartsProto.getModel = function () {
-               return this._model;
-           };
-
-           /**
-            * @return {Object}
-            */
-           echartsProto.getOption = function () {
-               return this._model.getOption();
-           };
-
-           /**
-            * @return {number}
-            */
-           echartsProto.getWidth = function () {
-               return this._zr.getWidth();
-           };
-
-           /**
-            * @return {number}
-            */
-           echartsProto.getHeight = function () {
-               return this._zr.getHeight();
-           };
-
-           /**
-            * Get canvas which has all thing rendered
-            * @param {Object} opts
-            * @param {string} [opts.backgroundColor]
-            */
-           echartsProto.getRenderedCanvas = function (opts) {
-               if (!env.canvasSupported) {
-                   return;
-               }
-               opts = opts || {};
-               opts.pixelRatio = opts.pixelRatio || 1;
-               opts.backgroundColor = opts.backgroundColor
-                   || this._model.get('backgroundColor');
-               var zr = this._zr;
-               var list = zr.storage.getDisplayList();
-               // Stop animations
-               zrUtil.each(list, function (el) {
-                   el.stopAnimation(true);
-               });
-               return zr.painter.getRenderedCanvas(opts);
-           };
-           /**
-            * @return {string}
-            * @param {Object} opts
-            * @param {string} [opts.type='png']
-            * @param {string} [opts.pixelRatio=1]
-            * @param {string} [opts.backgroundColor]
-            */
-           echartsProto.getDataURL = function (opts) {
-               opts = opts || {};
-               var excludeComponents = opts.excludeComponents;
-               var ecModel = this._model;
-               var excludesComponentViews = [];
-               var self = this;
-
-               each(excludeComponents, function (componentType) {
-                   ecModel.eachComponent({
-                       mainType: componentType
-                   }, function (component) {
-                       var view = self._componentsMap[component.__viewId];
-                       if (!view.group.ignore) {
-                           excludesComponentViews.push(view);
-                           view.group.ignore = true;
-                       }
-                   });
-               });
-
-               var url = this.getRenderedCanvas(opts).toDataURL(
-                   'image/' + (opts && opts.type || 'png')
-               );
-
-               each(excludesComponentViews, function (view) {
-                   view.group.ignore = false;
-               });
-               return url;
-           };
-
-
-           /**
-            * @return {string}
-            * @param {Object} opts
-            * @param {string} [opts.type='png']
-            * @param {string} [opts.pixelRatio=1]
-            * @param {string} [opts.backgroundColor]
-            */
-           echartsProto.getConnectedDataURL = function (opts) {
-               if (!env.canvasSupported) {
-                   return;
-               }
-               var groupId = this.group;
-               var mathMin = Math.min;
-               var mathMax = Math.max;
-               var MAX_NUMBER = Infinity;
-               if (connectedGroups[groupId]) {
-                   var left = MAX_NUMBER;
-                   var top = MAX_NUMBER;
-                   var right = -MAX_NUMBER;
-                   var bottom = -MAX_NUMBER;
-                   var canvasList = [];
-                   var dpr = (opts && opts.pixelRatio) || 1;
-                   for (var id in instances) {
-                       var chart = instances[id];
-                       if (chart.group === groupId) {
-                           var canvas = chart.getRenderedCanvas(
-                               zrUtil.clone(opts)
-                           );
-                           var boundingRect = 
chart.getDom().getBoundingClientRect();
-                           left = mathMin(boundingRect.left, left);
-                           top = mathMin(boundingRect.top, top);
-                           right = mathMax(boundingRect.right, right);
-                           bottom = mathMax(boundingRect.bottom, bottom);
-                           canvasList.push({
-                               dom: canvas,
-                               left: boundingRect.left,
-                               top: boundingRect.top
-                           });
-                       }
-                   }
-
-                   left *= dpr;
-                   top *= dpr;
-                   right *= dpr;
-                   bottom *= dpr;
-                   var width = right - left;
-                   var height = bottom - top;
-                   var targetCanvas = zrUtil.createCanvas();
-                   targetCanvas.width = width;
-                   targetCanvas.height = height;
-                   var zr = zrender.init(targetCanvas);
-
-                   each(canvasList, function (item) {
-                       var img = new graphic.Image({
-                           style: {
-                               x: item.left * dpr - left,
-                               y: item.top * dpr - top,
-                               image: item.dom
-                           }
-                       });
-                       zr.add(img);
-                   });
-                   zr.refreshImmediately();
-
-                   return targetCanvas.toDataURL('image/' + (opts && opts.type 
|| 'png'));
-               }
-               else {
-                   return this.getDataURL(opts);
-               }
-           };
-
-           var updateMethods = {
-
-
-               /**
-                * @param {Object} payload
-                * @private
-                */
-               update: function (payload) {
-                   // console.time && console.time('update');
-
-                   var ecModel = this._model;
-                   var api = this._api;
-                   var coordSysMgr = this._coordSysMgr;
-                   var zr = this._zr;
-                   // update before setOption
-                   if (!ecModel) {
-                       return;
-                   }
-
-                   // Fixme First time update ?
-                   ecModel.restoreData();
-
-                   // TODO
-                   // Save total ecModel here for undo/redo (after restoring 
data and before processing data).
-                   // Undo (restoration of total ecModel) can be carried out 
in 'action' or outside API call.
-
-                   // Create new coordinate system each update
-                   // In LineView may save the old coordinate system and use 
it to get the orignal point
-                   coordSysMgr.create(this._model, this._api);
-
-                   processData.call(this, ecModel, api);
-
-                   stackSeriesData.call(this, ecModel);
-
-                   coordSysMgr.update(ecModel, api);
-
-                   doVisualEncoding.call(this, ecModel, payload);
-
-                   doRender.call(this, ecModel, payload);
-
-                   // Set background
-                   var backgroundColor = ecModel.get('backgroundColor') || 
'transparent';
-
-                   var painter = zr.painter;
-                   // TODO all use clearColor ?
-                   if (painter.isSingleCanvas && painter.isSingleCanvas()) {
-                       zr.configLayer(0, {
-                           clearColor: backgroundColor
-                       });
-                   }
-                   else {
-                       // In IE8
-                       if (!env.canvasSupported) {
-                           var colorArr = colorTool.parse(backgroundColor);
-                           backgroundColor = colorTool.stringify(colorArr, 
'rgb');
-                           if (colorArr[3] === 0) {
-                               backgroundColor = 'transparent';
-                           }
-                       }
-                       if (backgroundColor.colorStops || 
backgroundColor.image) {
-                           // Gradient background
-                           // FIXME Fixed layer?
-                           zr.configLayer(0, {
-                               clearColor: backgroundColor
-                           });
-                           this[HAS_GRADIENT_OR_PATTERN_BG] = true;
-
-                           this._dom.style.background = 'transparent';
-                       }
-                       else {
-                           if (this[HAS_GRADIENT_OR_PATTERN_BG]) {
-                               zr.configLayer(0, {
-                                   clearColor: null
-                               });
-                           }
-                           this[HAS_GRADIENT_OR_PATTERN_BG] = false;
-
-                           this._dom.style.background = backgroundColor;
-                       }
-                   }
-
-                   // console.time && console.timeEnd('update');
-               },
-
-               // PENDING
-               /**
-                * @param {Object} payload
-                * @private
-                */
-               updateView: function (payload) {
-                   var ecModel = this._model;
-
-                   // update before setOption
-                   if (!ecModel) {
-                       return;
-                   }
-
-                   ecModel.eachSeries(function (seriesModel) {
-                       seriesModel.getData().clearAllVisual();
-                   });
-
-                   doVisualEncoding.call(this, ecModel, payload);
-
-                   invokeUpdateMethod.call(this, 'updateView', ecModel, 
payload);
-               },
-
-               /**
-                * @param {Object} payload
-                * @private
-                */
-               updateVisual: function (payload) {
-                   var ecModel = this._model;
-
-                   // update before setOption
-                   if (!ecModel) {
-                       return;
-                   }
-
-                   ecModel.eachSeries(function (seriesModel) {
-                       seriesModel.getData().clearAllVisual();
-                   });
-
-                   doVisualEncoding.call(this, ecModel, payload);
-
-                   invokeUpdateMethod.call(this, 'updateVisual', ecModel, 
payload);
-               },
-
-               /**
-                * @param {Object} payload
-                * @private
-                */
-               updateLayout: function (payload) {
-                   var ecModel = this._model;
-
-                   // update before setOption
-                   if (!ecModel) {
-                       return;
-                   }
-
-                   doLayout.call(this, ecModel, payload);
-
-                   invokeUpdateMethod.call(this, 'updateLayout', ecModel, 
payload);
-               },
-
-               /**
-                * @param {Object} payload
-                * @private
-                */
-               highlight: function (payload) {
-                   toggleHighlight.call(this, 'highlight', payload);
-               },
-
-               /**
-                * @param {Object} payload
-                * @private
-                */
-               downplay: function (payload) {
-                   toggleHighlight.call(this, 'downplay', payload);
-               },
-
-               /**
-                * @param {Object} payload
-                * @private
-                */
-               prepareAndUpdate: function (payload) {
-                   var ecModel = this._model;
-
-                   prepareView.call(this, 'component', ecModel);
-
-                   prepareView.call(this, 'chart', ecModel);
-
-                   updateMethods.update.call(this, payload);
-               }
-           };
-
-           /**
-            * @param {Object} payload
-            * @private
-            */
-           function toggleHighlight(method, payload) {
-               var ecModel = this._model;
-
-               // dispatchAction before setOption
-               if (!ecModel) {
-                   return;
-               }
-
-               ecModel.eachComponent(
-                   {mainType: 'series', query: payload},
-                   function (seriesModel, index) {
-                       var chartView = this._chartsMap[seriesModel.__viewId];
-                       if (chartView && chartView.__alive) {
-                           chartView[method](
-                               seriesModel, ecModel, this._api, payload
-                           );
-                       }
-                   },
-                   this
-               );
-           }
-
-           /**
-            * Resize the chart
-            */
-           echartsProto.resize = function () {
-               if (true) {
-                   zrUtil.assert(!this[IN_MAIN_PROCESS], '`resize` should not 
be called during main process.');
-               }
-
-               this[IN_MAIN_PROCESS] = true;
-
-               this._zr.resize();
-
-               var optionChanged = this._model && 
this._model.resetOption('media');
-               updateMethods[optionChanged ? 'prepareAndUpdate' : 
'update'].call(this);
-
-               // Resize loading effect
-               this._loadingFX && this._loadingFX.resize();
-
-               this[IN_MAIN_PROCESS] = false;
-
-               this._flushPendingActions();
-           };
-
-           var defaultLoadingEffect = __webpack_require__(93);
-           /**
-            * Show loading effect
-            * @param  {string} [name='default']
-            * @param  {Object} [cfg]
-            */
-           echartsProto.showLoading = function (name, cfg) {
-               if (zrUtil.isObject(name)) {
-                   cfg = name;
-                   name = 'default';
-               }
-               this.hideLoading();
-               var el = defaultLoadingEffect(this._api, cfg);
-               var zr = this._zr;
-               this._loadingFX = el;
-
-               zr.add(el);
-           };
-
-           /**
-            * Hide loading effect
-            */
-           echartsProto.hideLoading = function () {
-               this._loadingFX && this._zr.remove(this._loadingFX);
-               this._loadingFX = null;
-           };
-
-           /**
-            * @param {Object} eventObj
-            * @return {Object}
-            */
-           echartsProto.makeActionFromEvent = function (eventObj) {
-               var payload = zrUtil.extend({}, eventObj);
-               payload.type = eventActionMap[eventObj.type];
-               return payload;
-           };
-
-           /**
-            * @pubilc
-            * @param {Object} payload
-            * @param {string} [payload.type] Action type
-            * @param {boolean} [silent=false] Whether trigger event.
-            */
-           echartsProto.dispatchAction = function (payload, silent) {
-               var actionWrap = actions[payload.type];
-               if (!actionWrap) {
-                   return;
-               }
-
-               var actionInfo = actionWrap.actionInfo;
-               var updateMethod = actionInfo.update || 'update';
-
-               // if (__DEV__) {
-               //     zrUtil.assert(
-               //         !this[IN_MAIN_PROCESS],
-               //         '`dispatchAction` should not be called during main 
process.'
-               //         + 'unless updateMathod is "none".'
-               //     );
-               // }
-
-               // May dispatchAction in rendering procedure
-               if (this[IN_MAIN_PROCESS]) {
-                   this._pendingActions.push(payload);
-                   return;
-               }
-
-               this[IN_MAIN_PROCESS] = true;
-
-               var payloads = [payload];
-               var batched = false;
-               // Batch action
-               if (payload.batch) {
-                   batched = true;
-                   payloads = zrUtil.map(payload.batch, function (item) {
-                       item = zrUtil.defaults(zrUtil.extend({}, item), 
payload);
-                       item.batch = null;
-                       return item;
-                   });
-               }
-
-               var eventObjBatch = [];
-               var eventObj;
-               var isHighlightOrDownplay = payload.type === 'highlight' || 
payload.type === 'downplay';
-               for (var i = 0; i < payloads.length; i++) {
-                   var batchItem = payloads[i];
-                   // Action can specify the event by return it.
-                   eventObj = actionWrap.action(batchItem, this._model);
-                   // Emit event outside
-                   eventObj = eventObj || zrUtil.extend({}, batchItem);
-                   // Convert type to eventType
-                   eventObj.type = actionInfo.event || eventObj.type;
-                   eventObjBatch.push(eventObj);
-
-                   // Highlight and downplay are special.
-                   isHighlightOrDownplay && 
updateMethods[updateMethod].call(this, batchItem);
-               }
-
-               (updateMethod !== 'none' && !isHighlightOrDownplay)
-                   && updateMethods[updateMethod].call(this, payload);
-
-               // Follow the rule of action batch
-               if (batched) {
-                   eventObj = {
-                       type: actionInfo.event || payload.type,
-                       batch: eventObjBatch
-                   };
-               }
-               else {
-                   eventObj = eventObjBatch[0];
-               }
-
-               this[IN_MAIN_PROCESS] = false;
-
-               !silent && this._messageCenter.trigger(eventObj.type, eventObj);
-
-               this._flushPendingActions();
-
-           };
-
-           echartsProto._flushPendingActions = function () {
-               var pendingActions = this._pendingActions;
-               while (pendingActions.length) {
-                   var payload = pendingActions.shift();
-                   this.dispatchAction(payload);
-               }
-           };
-
-           /**
-            * Register event
-            * @method
-            */
-           echartsProto.on = createRegisterEventWithLowercaseName('on');
-           echartsProto.off = createRegisterEventWithLowercaseName('off');
-           echartsProto.one = createRegisterEventWithLowercaseName('one');
-
-           /**
-            * @param {string} methodName
-            * @private
-            */
-           function invokeUpdateMethod(methodName, ecModel, payload) {
-               var api = this._api;
-
-               // Update all components
-               each(this._componentsViews, function (component) {
-                   var componentModel = component.__model;
-                   component[methodName](componentModel, ecModel, api, 
payload);
-
-                   updateZ(componentModel, component);
-               }, this);
-
-               // Upate all charts
-               ecModel.eachSeries(function (seriesModel, idx) {
-                   var chart = this._chartsMap[seriesModel.__viewId];
-                   chart[methodName](seriesModel, ecModel, api, payload);
-
-                   updateZ(seriesModel, chart);
-
-                   updateProgressiveAndBlend(seriesModel, chart);
-               }, this);
-
-               // If use hover layer
-               updateHoverLayerStatus(this._zr, ecModel);
-           }
-
-           /**
-            * Prepare view instances of charts and components
-            * @param  {module:echarts/model/Global} ecModel
-            * @private
-            */
-           function prepareView(type, ecModel) {
-               var isComponent = type === 'component';
-               var viewList = isComponent ? this._componentsViews : 
this._chartsViews;
-               var viewMap = isComponent ? this._componentsMap : 
this._chartsMap;
-               var zr = this._zr;
-
-               for (var i = 0; i < viewList.length; i++) {
-                   viewList[i].__alive = false;
-               }
-
-               ecModel[isComponent ? 'eachComponent' : 'eachSeries'](function 
(componentType, model) {
-                   if (isComponent) {
-                       if (componentType === 'series') {
-                           return;
-                       }
-                   }
-                   else {
-                       model = componentType;
-                   }
-
-                   // Consider: id same and type changed.
-                   var viewId = model.id + '_' + model.type;
-                   var view = viewMap[viewId];
-                   if (!view) {
-                       var classType = 
ComponentModel.parseClassType(model.type);
-                       var Clazz = isComponent
-                           ? ComponentView.getClass(classType.main, 
classType.sub)
-                           : ChartView.getClass(classType.sub);
-                       if (Clazz) {
-                           view = new Clazz();
-                           view.init(ecModel, this._api);
-                           viewMap[viewId] = view;
-                           viewList.push(view);
-                           zr.add(view.group);
-                       }
-                       else {
-                           // Error
-                           return;
-                       }
-                   }
-
-                   model.__viewId = viewId;
-                   view.__alive = true;
-                   view.__id = viewId;
-                   view.__model = model;
-               }, this);
-
-               for (var i = 0; i < viewList.length;) {
-                   var view = viewList[i];
-                   if (!view.__alive) {
-                       zr.remove(view.group);
-                       view.dispose(ecModel, this._api);
-                       viewList.splice(i, 1);
-                       delete viewMap[view.__id];
-                   }
-                   else {
-                       i++;
-                   }
-               }
-           }
-
-           /**
-            * Processor data in each series
-            *
-            * @param {module:echarts/model/Global} ecModel
-            * @private
-            */
-           function processData(ecModel, api) {
-               each(dataProcessorFuncs, function (process) {
-                   process.func(ecModel, api);
-               });
-           }
-
-           /**
-            * @private
-            */
-           function stackSeriesData(ecModel) {
-               var stackedDataMap = {};
-               ecModel.eachSeries(function (series) {
-                   var stack = series.get('stack');
-                   var data = series.getData();
-                   if (stack && data.type === 'list') {
-                       var previousStack = stackedDataMap[stack];
-                       if (previousStack) {
-                           data.stackedOn = previousStack;
-                       }
-                       stackedDataMap[stack] = data;
-                   }
-               });
-           }
-
-           /**
-            * Layout before each chart render there series, special visual 
encoding stage
-            *
-            * @param {module:echarts/model/Global} ecModel
-            * @private
-            */
-           function doLayout(ecModel, payload) {
-               var api = this._api;
-               each(visualFuncs, function (visual) {
-                   if (visual.isLayout) {
-                       visual.func(ecModel, api, payload);
-                   }
-               });
-           }
-
-           /**
-            * Encode visual infomation from data after data processing
-            *
-            * @param {module:echarts/model/Global} ecModel
-            * @private
-            */
-           function doVisualEncoding(ecModel, payload) {
-               var api = this._api;
-               ecModel.clearColorPalette();
-               ecModel.eachSeries(function (seriesModel) {
-                   seriesModel.clearColorPalette();
-               });
-               each(visualFuncs, function (visual) {
-                   visual.func(ecModel, api, payload);
-               });
-           }
-
-           /**
-            * Render each chart and component
-            * @private
-            */
-           function doRender(ecModel, payload) {
-               var api = this._api;
-               // Render all components
-               each(this._componentsViews, function (componentView) {
-                   var componentModel = componentView.__model;
-                   componentView.render(componentModel, ecModel, api, payload);
-
-                   updateZ(componentModel, componentView);
-               }, this);
-
-               each(this._chartsViews, function (chart) {
-                   chart.__alive = false;
-               }, this);
-
-               // Render all charts
-               ecModel.eachSeries(function (seriesModel, idx) {
-                   var chartView = this._chartsMap[seriesModel.__viewId];
-                   chartView.__alive = true;
-                   chartView.render(seriesModel, ecModel, api, payload);
-
-                   chartView.group.silent = !!seriesModel.get('silent');
-
-                   updateZ(seriesModel, chartView);
-
-                   updateProgressiveAndBlend(seriesModel, chartView);
-
-               }, this);
-
-               // If use hover layer
-               updateHoverLayerStatus(this._zr, ecModel);
-
-               // Remove groups of unrendered charts
-               each(this._chartsViews, function (chart) {
-                   if (!chart.__alive) {
-                       chart.remove(ecModel, api);
-                   }
-               }, this);
-           }
-
-           var MOUSE_EVENT_NAMES = [
-               'click', 'dblclick', 'mouseover', 'mouseout', 'mousedown', 
'mouseup', 'globalout'
-           ];
-           /**
-            * @private
-            */
-           echartsProto._initEvents = function () {
-               each(MOUSE_EVENT_NAMES, function (eveName) {
-                   this._zr.on(eveName, function (e) {
-                       var ecModel = this.getModel();
-                       var el = e.target;
-                       if (el && el.dataIndex != null) {
-                           var dataModel = el.dataModel || 
ecModel.getSeriesByIndex(el.seriesIndex);
-                           var params = dataModel && 
dataModel.getDataParams(el.dataIndex, el.dataType) || {};
-                           params.event = e;
-                           params.type = eveName;
-                           this.trigger(eveName, params);
-                       }
-                       // If element has custom eventData of components
-                       else if (el && el.eventData) {
-                           this.trigger(eveName, el.eventData);
-                       }
-                   }, this);
-               }, this);
-
-               each(eventActionMap, function (actionType, eventType) {
-                   this._messageCenter.on(eventType, function (event) {
-                       this.trigger(eventType, event);
-                   }, this);
-               }, this);
-           };
-
-           /**
-            * @return {boolean}
-            */
-           echartsProto.isDisposed = function () {
-               return this._disposed;
-           };
-
-           /**
-            * Clear
-            */
-           echartsProto.clear = function () {
-               this.setOption({}, true);
-           };
-           /**
-            * Dispose instance
-            */
-           echartsProto.dispose = function () {
-               if (this._disposed) {
-                   if (true) {
-                       console.warn('Instance ' + this.id + ' has been 
disposed');
-                   }
-                   return;
-               }
-               this._disposed = true;
-
-               var api = this._api;
-               var ecModel = this._model;
-
-               each(this._componentsViews, function (component) {
-                   component.dispose(ecModel, api);
-               });
-               each(this._chartsViews, function (chart) {
-                   chart.dispose(ecModel, api);
-               });
-
-               // Dispose after all views disposed
-               this._zr.dispose();
-
-               delete instances[this.id];
-           };
-
-           zrUtil.mixin(ECharts, Eventful);
-
-           function updateHoverLayerStatus(zr, ecModel) {
-               var storage = zr.storage;
-               var elCount = 0;
-               storage.traverse(function (el) {
-                   if (!el.isGroup) {
-                       elCount++;
-                   }
-               });
-               if (elCount > ecModel.get('hoverLayerThreshold') && !env.node) {
-                   storage.traverse(function (el) {
-                       if (!el.isGroup) {
-                           el.useHoverLayer = true;
-                       }
-                   });
-               }
-           }
-           /**
-            * Update chart progressive and blend.
-            * @param 
{module:echarts/model/Series|module:echarts/model/Component} model
-            * @param {module:echarts/view/Component|module:echarts/view/Chart} 
view
-            */
-           function updateProgressiveAndBlend(seriesModel, chartView) {
-               // Progressive configuration
-               var elCount = 0;
-               chartView.group.traverse(function (el) {
-                   if (el.type !== 'group' && !el.ignore) {
-                       elCount++;
-                   }
-               });
-               var frameDrawNum = +seriesModel.get('progressive');
-               var needProgressive = elCount > 
seriesModel.get('progressiveThreshold') && frameDrawNum && !env.node;
-               if (needProgressive) {
-                   chartView.group.traverse(function (el) {
-                       // FIXME marker and other components
-                       if (!el.isGroup) {
-                           el.progressive = needProgressive ?
-                               Math.floor(elCount++ / frameDrawNum) : -1;
-                           if (needProgressive) {
-                               el.stopAnimation(true);
-                           }
-                       }
-                   });
-               }
-
-               // Blend configration
-               var blendMode = seriesModel.get('blendMode') || null;
-               if (true) {
-                   if (!env.canvasSupported && blendMode && blendMode !== 
'source-over') {
-                       console.warn('Only canvas support blendMode');
-                   }
-               }
-               chartView.group.traverse(function (el) {
-                   // FIXME marker and other components
-                   if (!el.isGroup) {
-                       el.setStyle('blend', blendMode);
-                   }
-               });
-           }
-           /**
-            * @param 
{module:echarts/model/Series|module:echarts/model/Component} model
-            * @param {module:echarts/view/Component|module:echarts/view/Chart} 
view
-            */
-           function updateZ(model, view) {
-               var z = model.get('z');
-               var zlevel = model.get('zlevel');
-               // Set z and zlevel
-               view.group.traverse(function (el) {
-                   if (el.type !== 'group') {
-                       z != null && (el.z = z);
-                       zlevel != null && (el.zlevel = zlevel);
-                   }
-               });
-           }
-           /**
-            * @type {Array.<Function>}
-            * @inner
-            */
-           var actions = [];
-
-           /**
-            * Map eventType to actionType
-            * @type {Object}
-            */
-           var eventActionMap = {};
-
-           /**
-            * Data processor functions of each stage
-            * @type {Array.<Object.<string, Function>>}
-            * @inner
-            */
-           var dataProcessorFuncs = [];
-
-           /**
-            * @type {Array.<Function>}
-            * @inner
-            */
-           var optionPreprocessorFuncs = [];
-
-           /**
-            * Visual encoding functions of each stage
-            * @type {Array.<Object.<string, Function>>}
-            * @inner
-            */
-           var visualFuncs = [];
-           /**
-            * Theme storage
-            * @type {Object.<key, Object>}
-            */
-           var themeStorage = {};
-
-
-           var instances = {};
-           var connectedGroups = {};
-
-           var idBase = new Date() - 0;
-           var groupIdBase = new Date() - 0;
-           var DOM_ATTRIBUTE_KEY = '_echarts_instance_';
-           /**
-            * @alias module:echarts
-            */
-           var echarts = {
-               /**
-                * @type {number}
-                */
-               version: '3.2.2',
-               dependencies: {
-                   zrender: '3.1.2'
-               }
-           };
-
-           function enableConnect(chart) {
-
-               var STATUS_PENDING = 0;
-               var STATUS_UPDATING = 1;
-               var STATUS_UPDATED = 2;
-               var STATUS_KEY = '__connectUpdateStatus';
-               function updateConnectedChartsStatus(charts, status) {
-                   for (var i = 0; i < charts.length; i++) {
-                       var otherChart = charts[i];
-                       otherChart[STATUS_KEY] = status;
-                   }
-               }
-               zrUtil.each(eventActionMap, function (actionType, eventType) {
-                   chart._messageCenter.on(eventType, function (event) {
-                       if (connectedGroups[chart.group] && chart[STATUS_KEY] 
!== STATUS_PENDING) {
-                           var action = chart.makeActionFromEvent(event);
-                           var otherCharts = [];
-                           for (var id in instances) {
-                               var otherChart = instances[id];
-                               if (otherChart !== chart && otherChart.group 
=== chart.group) {
-                                   otherCharts.push(otherChart);
-                               }
-                           }
-                           updateConnectedChartsStatus(otherCharts, 
STATUS_PENDING);
-                           each(otherCharts, function (otherChart) {
-                               if (otherChart[STATUS_KEY] !== STATUS_UPDATING) 
{
-                                   otherChart.dispatchAction(action);
-                               }
-                           });
-                           updateConnectedChartsStatus(otherCharts, 
STATUS_UPDATED);
-                       }
-                   });
-               });
-
-           }
-           /**
-            * @param {HTMLDomElement} dom
-            * @param {Object} [theme]
-            * @param {Object} opts
-            */
-           echarts.init = function (dom, theme, opts) {
-               if (true) {
-                   // Check version
-                   if ((zrender.version.replace('.', '') - 0) < 
(echarts.dependencies.zrender.replace('.', '') - 0)) {
-                       throw new Error(
-                           'ZRender ' + zrender.version
-                           + ' is too old for ECharts ' + echarts.version
-                           + '. Current version need ZRender '
-                           + echarts.dependencies.zrender + '+'
-                       );
-                   }
-                   if (!dom) {
-                       throw new Error('Initialize failed: invalid dom.');
-                   }
-                   if (zrUtil.isDom(dom) && dom.nodeName.toUpperCase() !== 
'CANVAS' && (!dom.clientWidth || !dom.clientHeight)) {
-                       console.warn('Can\'t get dom width or height');
-                   }
-               }
-
-               var chart = new ECharts(dom, theme, opts);
-               chart.id = 'ec_' + idBase++;
-               instances[chart.id] = chart;
-
-               dom.setAttribute &&
-                   dom.setAttribute(DOM_ATTRIBUTE_KEY, chart.id);
-
-               enableConnect(chart);
-
-               return chart;
-           };
-
-           /**
-            * @return {string|Array.<module:echarts~ECharts>} groupId
-            */
-           echarts.connect = function (groupId) {
-               // Is array of charts
-               if (zrUtil.isArray(groupId)) {
-                   var charts = groupId;
-                   groupId = null;
-                   // If any chart has group
-                   zrUtil.each(charts, function (chart) {
-                       if (chart.group != null) {
-                           groupId = chart.group;
-                       }
-                   });
-                   groupId = groupId || ('g_' + groupIdBase++);
-                   zrUtil.each(charts, function (chart) {
-                       chart.group = groupId;
-                   });
-               }
-               connectedGroups[groupId] = true;
-               return groupId;
-           };
-
-           /**
-            * @return {string} groupId
-            */
-           echarts.disConnect = function (groupId) {
-               connectedGroups[groupId] = false;
-           };
-
-           /**
-            * Dispose a chart instance
-            * @param  {module:echarts~ECharts|HTMLDomElement|string} chart
-            */
-           echarts.dispose = function (chart) {
-               if (zrUtil.isDom(chart)) {
-                   chart = echarts.getInstanceByDom(chart);
-               }
-               else if (typeof chart === 'string') {
-                   chart = instances[chart];
-               }
-               if ((chart instanceof ECharts) && !chart.isDisposed()) {
-                   chart.dispose();
-               }
-           };
-
-           /**
-            * @param  {HTMLDomElement} dom
-            * @return {echarts~ECharts}
-            */
-           echarts.getInstanceByDom = function (dom) {
-               var key = dom.getAttribute(DOM_ATTRIBUTE_KEY);
-               return instances[key];
-           };
-           /**
-            * @param {string} key
-            * @return {echarts~ECharts}
-            */
-           echarts.getInstanceById = function (key) {
-               return instances[key];
-           };
-
-           /**
-            * Register theme
-            */
-           echarts.registerTheme = function (name, theme) {
-               themeStorage[name] = theme;
-           };
-
-           /**
-            * Register option preprocessor
-            * @param {Function} preprocessorFunc
-            */
-           echarts.registerPreprocessor = function (preprocessorFunc) {
-               optionPreprocessorFuncs.push(preprocessorFunc);
-           };
-
-           /**
-            * @param {number} [priority=1000]
-            * @param {Function} processorFunc
-            */
-           echarts.registerProcessor = function (priority, processorFunc) {
-               if (typeof priority === 'function') {
-                   processorFunc = priority;
-                   priority = PRIORITY_PROCESSOR_FILTER;
-               }
-               if (true) {
-                   if (isNaN(priority)) {
-                       throw new Error('Unkown processor priority');
-                   }
-               }
-               dataProcessorFuncs.push({
-                   prio: priority,
-                   func: processorFunc
-               });
-           };
-
-           /**
-            * Usage:
-            * registerAction('someAction', 'someEvent', function () { ... });
-            * registerAction('someAction', function () { ... });
-            * registerAction(
-            *     {type: 'someAction', event: 'someEvent', update: 
'updateView'},
-            *     function () { ... }
-            * );
-            *
-            * @param {(string|Object)} actionInfo
-            * @param {string} actionInfo.type
-            * @param {string} [actionInfo.event]
-            * @param {string} [actionInfo.update]
-            * @param {string} [eventName]
-            * @param {Function} action
-            */
-           echarts.registerAction = function (actionInfo, eventName, action) {
-               if (typeof eventName === 'function') {
-                   action = eventName;
-                   eventName = '';
-               }
-               var actionType = zrUtil.isObject(actionInfo)
-                   ? actionInfo.type
-                   : ([actionInfo, actionInfo = {
-                       event: eventName
-                   }][0]);
-
-               // Event name is all lowercase
-               actionInfo.event = (actionInfo.event || 
actionType).toLowerCase();
-               eventName = actionInfo.event;
-
-               if (!actions[actionType]) {
-                   actions[actionType] = {action: action, actionInfo: 
actionInfo};
-               }
-               eventActionMap[eventName] = actionType;
-           };
-
-           /**
-            * @param {string} type
-            * @param {*} CoordinateSystem
-            */
-           echarts.registerCoordinateSystem = function (type, 
CoordinateSystem) {
-               CoordinateSystemManager.register(type, CoordinateSystem);
-           };
-
-           /**
-            * Layout is a special stage of visual encoding
-            * Most visual encoding like color are common for different chart
-            * But each chart has it's own layout algorithm
-            *
-            * @param {string} [priority=1000]
-            * @param {Function} layoutFunc
-            */
-           echarts.registerLayout = function (priority, layoutFunc) {
-               if (typeof priority === 'function') {
-                   layoutFunc = priority;
-                   priority = PRIORITY_VISUAL_LAYOUT;
-               }
-               if (true) {
-                   if (isNaN(priority)) {
-                       throw new Error('Unkown layout priority');
-                   }
-               }
-               visualFuncs.push({
-                   prio: priority,
-                   func: layoutFunc,
-                   isLayout: true
-               });
-           };
-
-           /**
-            * @param {string} [priority=3000]
-            * @param {Function} visualFunc
-            */
-           echarts.registerVisual = function (priority, visualFunc) {
-               if (typeof priority === 'function') {
-                   visualFunc = priority;
-                   priority = PRIORITY_VISUAL_CHART;
-               }
-               if (true) {
-                   if (isNaN(priority)) {
-                       throw new Error('Unkown visual priority');
-                   }
-               }
-               visualFuncs.push({
-                   prio: priority,
-                   func: visualFunc
-               });
-           };
-
-           var parseClassType = ComponentModel.parseClassType;
-           /**
-            * @param {Object} opts
-            * @param {string} [superClass]
-            */
-           echarts.extendComponentModel = function (opts, superClass) {
-               var Clazz = ComponentModel;
-               if (superClass) {
-                   var classType = parseClassType(superClass);
-                   Clazz = ComponentModel.getClass(classType.main, 
classType.sub, true);
-               }
-               return Clazz.extend(opts);
-           };
-
-           /**
-            * @param {Object} opts
-            * @param {string} [superClass]
-            */
-           echarts.extendComponentView = function (opts, superClass) {
-               var Clazz = ComponentView;
-               if (superClass) {
-                   var classType = parseClassType(superClass);
-                   Clazz = ComponentView.getClass(classType.main, 
classType.sub, true);
-               }
-               return Clazz.extend(opts);
-           };
-
-           /**
-            * @param {Object} opts
-            * @param {string} [superClass]
-            */
-           echarts.extendSeriesModel = function (opts, superClass) {
-               var Clazz = SeriesModel;
-               if (superClass) {
-                   superClass = 'series.' + superClass.replace('series.', '');
-                   var classType = parseClassType(superClass);
-                   Clazz = SeriesModel.getClass(classType.main, classType.sub, 
true);
-               }
-               return Clazz.extend(opts);
-           };
-
-           /**
-            * @param {Object} opts
-            * @param {string} [superClass]
-            */
-           echarts.extendChartView = function (opts, superClass) {
-               var Clazz = ChartView;
-               if (superClass) {
-                   superClass.replace('series.', '');
-                   var classType = parseClassType(superClass);
-                   Clazz = ChartView.getClass(classType.main, true);
-               }
-               return ChartView.extend(opts);
-           };
-
-           /**
-            * ZRender need a canvas context to do measureText.
-            * But in node environment canvas may be created by node-canvas.
-            * So we need to specify how to create a canvas instead of using 
document.createElement('canvas')
-            *
-            * Be careful of using it in the browser.
-            *
-            * @param {Function} creator
-            * @example
-            *     var Canvas = require('canvas');
-            *     var echarts = require('echarts');
-            *     echarts.setCanvasCreator(function () {
-            *         // Small size is enough.
-            *         return new Canvas(32, 32);
-            *     });
-            */
-           echarts.setCanvasCreator = function (creator) {
-               zrUtil.createCanvas = creator;
-           };
-
-           echarts.registerVisual(PRIORITY_VISUAL_GLOBAL, 
__webpack_require__(94));
-           echarts.registerPreprocessor(__webpack_require__(95));
-
-           // Default action
-           echarts.registerAction({
-               type: 'highlight',
-               event: 'highlight',
-               update: 'highlight'
-           }, zrUtil.noop);
-           echarts.registerAction({
-               type: 'downplay',
-               event: 'downplay',
-               update: 'downplay'
-           }, zrUtil.noop);
-
-
-           // --------
-           // Exports
-           // --------
-           //
-           echarts.List = __webpack_require__(97);
-           echarts.Model = __webpack_require__(12);
-
-           echarts.graphic = __webpack_require__(43);
-           echarts.number = __webpack_require__(7);
-           echarts.format = __webpack_require__(6);
-           echarts.matrix = __webpack_require__(11);
-           echarts.vector = __webpack_require__(10);
-           echarts.color = __webpack_require__(39);
-
-           echarts.util = {};
-           each([
-                   'map', 'each', 'filter', 'indexOf', 'inherits',
-                   'reduce', 'filter', 'bind', 'curry', 'isArray',
-                   'isString', 'isObject', 'isFunction', 'extend', 'defaults'
-               ],
-               function (name) {
-                   echarts.util[name] = zrUtil[name];
-               }
-           );
-
-           // PRIORITY
-           echarts.PRIORITY = {
-               PROCESSOR: {
-                   FILTER: PRIORITY_PROCESSOR_FILTER,
-                   STATISTIC: PRIORITY_PROCESSOR_STATISTIC
-               },
-               VISUAL: {
-                   LAYOUT: PRIORITY_VISUAL_LAYOUT,
-                   GLOBAL: PRIORITY_VISUAL_GLOBAL,
-                   CHART: PRIORITY_VISUAL_CHART,
-                   COMPONENT: PRIORITY_VISUAL_COMPONENT,
-                   BRUSH: PRIORITY_VISUAL_BRUSH
-               }
-           };
-
-           module.exports = echarts;
-
-
-/***/ },
-/* 2 */
-/***/ function(module, exports) {
-
-       /**
-        * echarts设备环境识别
-        *
-        * @desc 
echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
-        * @author firede[[email protected]]
-        * @desc thanks zepto.
-        */
-
-           var env = {};
-           if (typeof navigator === 'undefined') {
-               // In node
-               env = {
-                   browser: {},
-                   os: {},
-                   node: true,
-                   // Assume canvas is supported
-                   canvasSupported: true
-               };
-           }
-           else {
-               env = detect(navigator.userAgent);
-           }
-
-           module.exports = env;
-
-           // Zepto.js
-           // (c) 2010-2013 Thomas Fuchs
-           // Zepto.js may be freely distributed under the MIT license.
-
-           function detect(ua) {
-               var os = {};
-               var browser = {};
-               // var webkit = ua.match(/Web[kK]it[\/]{0,1}([\d.]+)/);
-               // var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
-               // var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
-               // var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
-               // var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/);
-               // var webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/);
-               // var touchpad = webos && ua.match(/TouchPad/);
-               // var kindle = ua.match(/Kindle\/([\d.]+)/);
-               // var silk = ua.match(/Silk\/([\d._]+)/);
-               // var blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/);
-               // var bb10 = ua.match(/(BB10).*Version\/([\d.]+)/);
-               // var rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/);
-               // var playbook = ua.match(/PlayBook/);
-               // var chrome = ua.match(/Chrome\/([\d.]+)/) || 
ua.match(/CriOS\/([\d.]+)/);
-               var firefox = ua.match(/Firefox\/([\d.]+)/);
-               // var safari = webkit && ua.match(/Mobile\//) && !chrome;
-               // var webview = 
ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;
-               var ie = ua.match(/MSIE\s([\d.]+)/)
-                   // IE 11 Trident/7.0; rv:11.0
-                   || ua.match(/Trident\/.+?rv:(([\d.]+))/);
-               var edge = ua.match(/Edge\/([\d.]+)/); // IE 12 and 12+
-
-               // Todo: clean this up with a better OS/browser seperation:
-               // - discern (more) between multiple browsers on android
-               // - decide if kindle fire in silk mode is android or not
-               // - Firefox on Android doesn't specify the Android version
-               // - possibly devide in os, device and browser hashes
-
-               // if (browser.webkit = !!webkit) browser.version = webkit[1];
-
-               // if (android) os.android = true, os.version = android[2];
-               // if (iphone && !ipod) os.ios = os.iphone = true, os.version = 
iphone[2].replace(/_/g, '.');
-               // if (ipad) os.ios = os.ipad = true, os.version = 
ipad[2].replace(/_/g, '.');
-               // if (ipod) os.ios = os.ipod = true, os.version = ipod[3] ? 
ipod[3].replace(/_/g, '.') : null;
-               // if (webos) os.webos = true, os.version = webos[2];
-               // if (touchpad) os.touchpad = true;
-               // if (blackberry) os.blackberry = true, os.version = 
blackberry[2];
-               // if (bb10) os.bb10 = true, os.version = bb10[2];
-               // if (rimtabletos) os.rimtabletos = true, os.version = 
rimtabletos[2];
-               // if (playbook) browser.playbook = true;
-               // if (kindle) os.kindle = true, os.version = kindle[1];
-               // if (silk) browser.silk = true, browser.version = silk[1];
-               // if (!silk && os.android && ua.match(/Kindle Fire/)) 
browser.silk = true;
-               // if (chrome) browser.chrome = true, browser.version = 
chrome[1];
-               if (firefox) browser.firefox = true, browser.version = 
firefox[1];
-               // if (safari && (ua.match(/Safari/) || !!os.ios)) 
browser.safari = true;
-               // if (webview) browser.webview = true;
-               if (ie) {
-                   browser.ie = true; browser.version = ie[1];
-               }
-               if (ie) {
-                   browser.ie = true;
-                   browser.version = ie[1];
-               }
-               if (edge) {
-                   browser.edge = true;
-                   browser.version = edge[1];
-               }
-
-               // os.tablet = !!(ipad || playbook || (android && 
!ua.match(/Mobile/)) ||
-               //     (firefox && ua.match(/Tablet/)) || (ie && 
!ua.match(/Phone/) && ua.match(/Touch/)));
-               // os.phone  = !!(!os.tablet && !os.ipod && (android || iphone 
|| webos ||
-               //     (chrome && ua.match(/Android/)) || (chrome && 
ua.match(/CriOS\/([\d.]+)/)) ||
-               //     (firefox && ua.match(/Mobile/)) || (ie && 
ua.match(/Touch/))));
-
-               return {
-                   browser: browser,
-                   os: os,
-                   node: false,
-                   // 原生canvas支持,改极端点了
-                   // canvasSupported : !(browser.ie && 
parseFloat(browser.version) < 9)
-                   canvasSupported : 
document.createElement('canvas').getContext ? true : false,
-                   // @see 
<http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript>
-                   // works on most browsers
-                   // IE10/11 does not support touch event, and MS Edge 
supports them but not by
-                   // default, so we dont check navigator.maxTouchPoints for 
them here.
-                   touchEventsSupported: 'ontouchstart' in window && 
!browser.ie && !browser.edge,
-                   // <http://caniuse.com/#search=pointer%20event>.
-                   pointerEventsSupported: 'onpointerdown' in window
-                       // Firefox supports pointer but not by default,
-                       // only MS browsers are reliable on pointer events 
currently.
-                       && (browser.edge || (browser.ie && browser.version >= 
10))
-               };
-           }
-
-
-/***/ },
-/* 3 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * ECharts global model
-        *
-        * @module {echarts/model/Global}
-        *
-        */
-
-
-
-           var zrUtil = __webpack_require__(4);
-           var modelUtil = __webpack_require__(5);
-           var Model = __webpack_require__(12);
-           var each = zrUtil.each;
-           var filter = zrUtil.filter;
-           var map = zrUtil.map;
-           var isArray = zrUtil.isArray;
-           var indexOf = zrUtil.indexOf;
-           var isObject = zrUtil.isObject;
-
-           var ComponentModel = __webpack_require__(19);
-
-           var globalDefault = __webpack_require__(23);
-
-           var OPTION_INNER_KEY = '\0_ec_inner';
-
-           /**
-            * @alias module:echarts/model/Global
-            *
-            * @param {Object} option
-            * @param {module:echarts/model/Model} parentModel
-            * @param {Object} theme
-            */
-           var GlobalModel = Model.extend({
-
-               constructor: GlobalModel,
-
-               init: function (option, parentModel, theme, optionManager) {
-                   theme = theme || {};
-
-                   this.option = null; // Mark as not initialized.
-
-                   /**
-                    * @type {module:echarts/model/Model}
-                    * @private
-                    */
-                   this._theme = new Model(theme);
-
-                   /**
-                    * @type {module:echarts/model/OptionManager}
-                    */
-                   this._optionManager = optionManager;
-               },
-
-               setOption: function (option, optionPreprocessorFuncs) {
-                   zrUtil.assert(
-                       !(OPTION_INNER_KEY in option),
-                       'please use chart.getOption()'
-                   );
-
-                   this._optionManager.setOption(option, 
optionPreprocessorFuncs);
-
-                   this.resetOption();
-               },
-
-               /**
-                * @param {string} type null/undefined: reset all.
-                *                      'recreate': force recreate all.
-                *                      'timeline': only reset timeline option
-                *                      'media': only reset media query option
-                * @return {boolean} Whether option changed.
-                */
-               resetOption: function (type) {
-                   var optionChanged = false;
-                   var optionManager = this._optionManager;
-
-                   if (!type || type === 'recreate') {
-                       var baseOption = optionManager.mountOption(type === 
'recreate');
-
-                       if (!this.option || type === 'recreate') {
-                           initBase.call(this, baseOption);
-                       }
-                       else {
-                           this.restoreData();
-                           this.mergeOption(baseOption);
-                       }
-                       optionChanged = true;
-                   }
-
-                   if (type === 'timeline' || type === 'media') {
-                       this.restoreData();
-                   }
-
-                   if (!type || type === 'recreate' || type === 'timeline') {
-                       var timelineOption = 
optionManager.getTimelineOption(this);
-                       timelineOption && (this.mergeOption(timelineOption), 
optionChanged = true);
-                   }
-
-                   if (!type || type === 'recreate' || type === 'media') {
-                       var mediaOptions = optionManager.getMediaOption(this, 
this._api);
-                       if (mediaOptions.length) {
-                           each(mediaOptions, function (mediaOption) {
-                               this.mergeOption(mediaOption, optionChanged = 
true);
-                           }, this);
-                       }
-                   }
-
-                   return optionChanged;
-               },
-
-               /**
-                * @protected
-                */
-               mergeOption: function (newOption) {
-                   var option = this.option;
-                   var componentsMap = this._componentsMap;
-                   var newCptTypes = [];
-
-                   // 如果不存在对应的 component model 则直接 merge
-                   each(newOption, function (componentOption, mainType) {
-                       if (componentOption == null) {
-                           return;
-                       }
-
-                       if (!ComponentModel.hasClass(mainType)) {
-                           option[mainType] = option[mainType] == null
-                               ? zrUtil.clone(componentOption)
-                               : zrUtil.merge(option[mainType], 
componentOption, true);
-                       }
-                       else {
-                           newCptTypes.push(mainType);
-                       }
-                   });
-
-                   // FIXME OPTION 同步是否要改回原来的
-                   ComponentModel.topologicalTravel(
-                       newCptTypes, ComponentModel.getAllClassMainTypes(), 
visitComponent, this
-                   );
-
-                   function visitComponent(mainType, dependencies) {
-                       var newCptOptionList = 
modelUtil.normalizeToArray(newOption[mainType]);
-
-                       var mapResult = modelUtil.mappingToExists(
-                           componentsMap[mainType], newCptOptionList
-                       );
-
-                       makeKeyInfo(mainType, mapResult);
-
-                       var dependentModels = getComponentsByTypes(
-                           componentsMap, dependencies
-                       );
-
-                       option[mainType] = [];
-                       componentsMap[mainType] = [];
-
-                       each(mapResult, function (resultItem, index) {
-                           var componentModel = resultItem.exist;
-                           var newCptOption = resultItem.option;
-
-                           zrUtil.assert(
-                               isObject(newCptOption) || componentModel,
-                               'Empty component definition'
-                           );
-
-                           // Consider where is no new option and should be 
merged using {},
-                           // see removeEdgeAndAdd in topologicalTravel and
-                           // ComponentModel.getAllClassMainTypes.
-                           if (!newCptOption) {
-                               componentModel.mergeOption({}, this);
-                               componentModel.optionUpdated({}, false);
-                           }
-                           else {
-                               var ComponentModelClass = 
ComponentModel.getClass(
-                                   mainType, resultItem.keyInfo.subType, true
-                               );
-
-                               if (componentModel && componentModel instanceof 
ComponentModelClass) {
-                                   componentModel.mergeOption(newCptOption, 
this);
-                                   componentModel.optionUpdated(newCptOption, 
false);
-                               }
-                               else {
-                                   // PENDING Global as parent ?
-                                   var extraOpt = zrUtil.extend(
-                                       {
-                                           dependentModels: dependentModels,
-                                           componentIndex: index
-                                       },
-                                       resultItem.keyInfo
-                                   );
-                                   componentModel = new ComponentModelClass(
-                                       newCptOption, this, this, extraOpt
-                                   );
-                                   componentModel.init(newCptOption, this, 
this, extraOpt);
-                                   // Call optionUpdated after init.
-                                   // newCptOption has been used as 
componentModel.option
-                                   // and may be merged with theme and 
default, so pass null
-                                   // to avoid confusion.
-                                   componentModel.optionUpdated(null, true);
-                               }
-                           }
-
-                           componentsMap[mainType][index] = componentModel;
-                           option[mainType][index] = componentModel.option;
-                       }, this);
-
-                       // Backup series for filtering.
-                       if (mainType === 'series') {
-                           this._seriesIndices = 
createSeriesIndices(componentsMap.series);
-                       }
-                   }
-               },
-
-               /**
-                * Get option for output (cloned option and inner info removed)
-                * @public
-                * @return {Object}
-                */
-               getOption: function () {
-                   var option = zrUtil.clone(this.option);
-
-                   each(option, function (opts, mainType) {
-                       if (ComponentModel.hasClass(mainType)) {
-                           var opts = modelUtil.normalizeToArray(opts);
-                           for (var i = opts.length - 1; i >= 0; i--) {
-                               // Remove options with inner id.
-                               if (modelUtil.isIdInner(opts[i])) {
-                                   opts.splice(i, 1);
-                               }
-                           }
-                           option[mainType] = opts;
-                       }
-                   });
-
-                   delete option[OPTION_INNER_KEY];
-
-                   return option;
-               },
-
-               /**
-                * @return {module:echarts/model/Model}
-                */
-               getTheme: function () {
-                   return this._theme;
-               },
-
-               /**
-                * @param {string} mainType
-                * @param {number} [idx=0]
-                * @return {module:echarts/model/Component}
-                */
-               getComponent: function (mainType, idx) {
-                   var list = this._componentsMap[mainType];
-                   if (list) {
-                       return list[idx || 0];
-                   }
-               },
-
-               /**
-                * @param {Object} condition
-                * @param {string} condition.mainType
-                * @param {string} [condition.subType] If ignore, only query by 
mainType
-                * @param {number} [condition.index] Either input index or id 
or name.
-                * @param {string} [condition.id] Either input index or id or 
name.
-                * @param {string} [condition.name] Either input index or id or 
name.
-                * @return {Array.<module:echarts/model/Component>}
-                */
-               queryComponents: function (condition) {
-                   var mainType = condition.mainType;
-                   if (!mainType) {
-                       return [];
-                   }
-
-                   var index = condition.index;
-                   var id = condition.id;
-                   var name = condition.name;
-
-                   var cpts = this._componentsMap[mainType];
-
-                   if (!cpts || !cpts.length) {
-                       return [];
-                   }
-
-                   var result;
-
-                   if (index != null) {
-                       if (!isArray(index)) {
-                           index = [index];
-                       }
-                       result = filter(map(index, function (idx) {
-                           return cpts[idx];
-                       }), function (val) {
-                           return !!val;
-                       });
-                   }
-                   else if (id != null) {
-                       var isIdArray = isArray(id);
-                       result = filter(cpts, function (cpt) {
-                           return (isIdArray && indexOf(id, cpt.id) >= 0)
-                               || (!isIdArray && cpt.id === id);
-                       });
-                   }
-                   else if (name != null) {
-                       var isNameArray = isArray(name);
-                       result = filter(cpts, function (cpt) {
-                           return (isNameArray && indexOf(name, cpt.name) >= 0)
-                               || (!isNameArray && cpt.name === name);
-                       });
-                   }
-
-                   return filterBySubType(result, condition);
-               },
-
-               /**
-                * The interface is different from queryComponents,
-                * which is convenient for inner usage.
-                *
-                * @usage
-                * var result = findComponents(
-                *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}
-                * );
-                * var result = findComponents(
-                *     {mainType: 'series', subType: 'pie', query: {seriesName: 
'uio'}}
-                * );
-                * var result = findComponents(
-                *     {mainType: 'series'},
-                *     function (model, index) {...}
-                * );
-                * // result like [component0, componnet1, ...]
-                *
-                * @param {Object} condition
-                * @param {string} condition.mainType Mandatory.
-                * @param {string} [condition.subType] Optional.
-                * @param {Object} [condition.query] like {xxxIndex, xxxId, 
xxxName},
-                *        where xxx is mainType.
-                *        If query attribute is null/undefined or has no 
index/id/name,
-                *        do not filtering by query conditions, which is 
convenient for
-                *        no-payload situations or when target of action is 
global.
-                * @param {Function} [condition.filter] parameter: component, 
return boolean.
-                * @return {Array.<module:echarts/model/Component>}
-                */
-               findComponents: function (condition) {
-                   var query = condition.query;
-                   var mainType = condition.mainType;
-
-                   var queryCond = getQueryCond(query);
-                   var result = queryCond
-                       ? this.queryComponents(queryCond)
-                       : this._componentsMap[mainType];
-
-                   return doFilter(filterBySubType(result, condition));
-
-                   function getQueryCond(q) {
-                       var indexAttr = mainType + 'Index';
-                       var idAttr = mainType + 'Id';
-                       var nameAttr = mainType + 'Name';
-                       return q && (
-                               q.hasOwnProperty(indexAttr)
-                               || q.hasOwnProperty(idAttr)
-                               || q.hasOwnProperty(nameAttr)
-                           )
-                           ? {
-                               mainType: mainType,
-                               // subType will be filtered finally.
-                               index: q[indexAttr],
-                               id: q[idAttr],
-                               name: q[nameAttr]
-                           }
-                           : null;
-                   }
-
-                   function doFilter(res) {
-                       return condition.filter
-                            ? filter(res, condition.filter)
-                            : res;
-                   }
-               },
-
-               /**
-                * @usage
-                * eachComponent('legend', function (legendModel, index) {
-                *     ...
-                * });
-                * eachComponent(function (componentType, model, index) {
-                *     // componentType does not include subType
-                *     // (componentType is 'xxx' but not 'xxx.aa')
-                * });
-                * eachComponent(
-                *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}},
-                *     function (model, index) {...}
-                * );
-                * eachComponent(
-                *     {mainType: 'series', subType: 'pie', query: {seriesName: 
'uio'}},
-                *     function (model, index) {...}
-                * );
-                *
-                * @param {string|Object=} mainType When mainType is object, 
the definition
-                *                                  is the same as the method 
'findComponents'.
-                * @param {Function} cb
-                * @param {*} context
-                */
-               eachComponent: function (mainType, cb, context) {
-                   var componentsMap = this._componentsMap;
-
-                   if (typeof mainType === 'function') {
-                       context = cb;
-                       cb = mainType;
-                       each(componentsMap, function (components, 
componentType) {
-                           each(components, function (component, index) {
-                               cb.call(context, componentType, component, 
index);
-                           });
-                       });
-                   }
-                   else if (zrUtil.isString(mainType)) {
-                       each(componentsMap[mainType], cb, context);
-                   }
-                   else if (isObject(mainType)) {
-                       var queryResult = this.findComponents(mainType);
-                       each(queryResult, cb, context);
-                   }
-               },
-
-               /**
-                * @param {string} name
-                * @return {Array.<module:echarts/model/Series>}
-                */
-               getSeriesByName: function (name) {
-                   var series = this._componentsMap.series;
-                   return filter(series, function (oneSeries) {
-                       return oneSeries.name === name;
-                   });
-               },
-
-               /**
-                * @param {number} seriesIndex
-                * @return {module:echarts/model/Series}
-                */
-               getSeriesByIndex: function (seriesIndex) {
-                   return this._componentsMap.series[seriesIndex];
-               },
-
-               /**
-                * @param {string} subType
-                * @return {Array.<module:echarts/model/Series>}
-                */
-               getSeriesByType: function (subType) {
-                   var series = this._componentsMap.series;
-                   return filter(series, function (oneSeries) {
-                       return oneSeries.subType === subType;
-                   });
-               },
-
-               /**
-                * @return {Array.<module:echarts/model/Series>}
-                */
-               getSeries: function () {
-                   return this._componentsMap.series.slice();
-               },
-
-               /**
-                * After filtering, series may be different
-                * frome raw series.
-                *
-                * @param {Function} cb
-                * @param {*} context
-                */
-               eachSeries: function (cb, context) {
-                   assertSeriesInitialized(this);
-                   each(this._seriesIndices, function (rawSeriesIndex) {
-                       var series = this._componentsMap.series[rawSeriesIndex];
-                       cb.call(context, series, rawSeriesIndex);
-                   }, this);
-               },
-
-               /**
-                * Iterate raw series before filtered.
-                *
-                * @param {Function} cb
-                * @param {*} context
-                */
-               eachRawSeries: function (cb, context) {
-                   each(this._componentsMap.series, cb, context);
-               },
-
-               /**
-                * After filtering, series may be different.
-                * frome raw series.
-                *
-                * @parma {string} subType
-                * @param {Function} cb
-                * @param {*} context
-                */
-               eachSeriesByType: function (subType, cb, context) {
-                   assertSeriesInitialized(this);
-                   each(this._seriesIndices, function (rawSeriesIndex) {
-                       var series = this._componentsMap.series[rawSeriesIndex];
-                       if (series.subType === subType) {
-                           cb.call(context, series, rawSeriesIndex);
-                       }
-                   }, this);
-               },
-
-               /**
-                * Iterate raw series before filtered of given type.
-                *
-                * @parma {string} subType
-                * @param {Function} cb
-                * @param {*} context
-                */
-               eachRawSeriesByType: function (subType, cb, context) {
-                   return each(this.getSeriesByType(subType), cb, context);
-               },
-
-               /**
-                * @param {module:echarts/model/Series} seriesModel
-                */
-               isSeriesFiltered: function (seriesModel) {
-                   assertSeriesInitialized(this);
-                   return zrUtil.indexOf(this._seriesIndices, 
seriesModel.componentIndex) < 0;
-               },
-
-               /**
-                * @param {Function} cb
-                * @param {*} context
-                */
-               filterSeries: function (cb, context) {
-                   assertSeriesInitialized(this);
-                   var filteredSeries = filter(
-                       this._componentsMap.series, cb, context
-                   );
-                   this._seriesIndices = createSeriesIndices(filteredSeries);
-               },
-
-               restoreData: function () {
-                   var componentsMap = this._componentsMap;
-
-                   this._seriesIndices = 
createSeriesIndices(componentsMap.series);
-
-                   var componentTypes = [];
-                   each(componentsMap, function (components, componentType) {
-                       componentTypes.push(componentType);
-                   });
-
-                   ComponentModel.topologicalTravel(
-                       componentTypes,
-                       ComponentModel.getAllClassMainTypes(),
-                       function (componentType, dependencies) {
-                           each(componentsMap[componentType], function 
(component) {
-                               component.restoreData();
-                           });
-                       }
-                   );
-               }
-
-           });
-
-           /**
-            * @inner
-            */
-           function mergeTheme(option, theme) {
-               for (var name in theme) {
-                   // 如果有 component model 则把具体的 merge 
逻辑交给该 model 处理
-                   if (!ComponentModel.hasClass(name)) {
-                       if (typeof theme[name] === 'object') {
-                           option[name] = !option[name]
-                               ? zrUtil.clone(theme[name])
-                               : zrUtil.merge(option[name], theme[name], 
false);
-                       }
-                       else {
-                           if (option[name] == null) {
-                               option[name] = theme[name];
-                           }
-                       }
-                   }
-               }
-           }
-
-           function initBase(baseOption) {
-               baseOption = baseOption;
-
-               // Using OPTION_INNER_KEY to mark that this option can not be 
used outside,
-               // i.e. `chart.setOption(chart.getModel().option);` is forbiden.
-               this.option = {};
-               this.option[OPTION_INNER_KEY] = 1;
-
-               /**
-                * @type {Object.<string, Array.<module:echarts/model/Model>>}
-                * @private
-                */
-               this._componentsMap = {};
-
-               /**
-                * Mapping between filtered series list and raw series list.
-                * key: filtered series indices, value: raw series indices.
-                * @type {Array.<nubmer>}
-                * @private
-                */
-               this._seriesIndices = null;
-
-               mergeTheme(baseOption, this._theme.option);
-
-               // TODO Needs clone when merging to the unexisted property
-               zrUtil.merge(baseOption, globalDefault, false);
-
-               this.mergeOption(baseOption);
-           }
-
-           /**
-            * @inner
-            * @param {Array.<string>|string} types model types
-            * @return {Object} key: {string} type, value: {Array.<Object>} 
models
-            */
-           function getComponentsByTypes(componentsMap, types) {
-               if (!zrUtil.isArray(types)) {
-                   types = types ? [types] : [];
-               }
-
-               var ret = {};
-               each(types, function (type) {
-                   ret[type] = (componentsMap[type] || []).slice();
-               });
-
-               return ret;
-           }
-
-           /**
-            * @inner
-            */
-           function makeKeyInfo(mainType, mapResult) {
-               // We use this id to hash component models and view instances
-               // in echarts. id can be specified by user, or auto generated.
-
-               // The id generation rule ensures new view instance are able
-               // to mapped to old instance when setOption are called in
-               // no-merge mode. So we generate model id by name and plus
-               // type in view id.
-
-               // name can be duplicated among components, which is convenient
-               // to specify multi components (like series) by one name.
-
-               // Ensure that each id is distinct.
-               var idMap = {};
-
-               each(mapResult, function (item, index) {
-                   var existCpt = item.exist;
-                   existCpt && (idMap[existCpt.id] = item);
-               });
-
-               each(mapResult, function (item, index) {
-                   var opt = item.option;
-
-                   zrUtil.assert(
-                       !opt || opt.id == null || !idMap[opt.id] || 
idMap[opt.id] === item,
-                       'id duplicates: ' + (opt && opt.id)
-                   );
-
-                   opt && opt.id != null && (idMap[opt.id] = item);
-
-                   // Complete subType
-                   if (isObject(opt)) {
-                       var subType = determineSubType(mainType, opt, 
item.exist);
-                       item.keyInfo = {mainType: mainType, subType: subType};
-                   }
-               });
-
-               // Make name and id.
-               each(mapResult, function (item, index) {
-                   var existCpt = item.exist;
-                   var opt = item.option;
-                   var keyInfo = item.keyInfo;
-
-                   if (!isObject(opt)) {
-                       return;
-                   }
-
-                   // name can be overwitten. Consider case: axis.name = 
'20km'.
-                   // But id generated by name will not be changed, which 
affect
-                   // only in that case: setOption with 'not merge mode' and 
view
-                   // instance will be recreated, which can be accepted.
-                   keyInfo.name = opt.name != null
-                       ? opt.name + ''
-                       : existCpt
-                       ? existCpt.name
-                       : '\0-';
-
-                   if (existCpt) {
-                       keyInfo.id = existCpt.id;
-                   }
-                   else if (opt.id != null) {
-                       keyInfo.id = opt.id + '';
-                   }
-                   else {
-                       // Consider this situatoin:
-                       //  optionA: [{name: 'a'}, {name: 'a'}, {..}]
-                       //  optionB [{..}, {name: 'a'}, {name: 'a'}]
-                       // Series with the same name between optionA and optionB
-                       // should be mapped.
-                       var idNum = 0;
-                       do {
-                           keyInfo.id = '\0' + keyInfo.name + '\0' + idNum++;
-                       }
-                       while (idMap[keyInfo.id]);
-                   }
-
-                   idMap[keyInfo.id] = item;
-               });
-           }
-
-           /**
-            * @inner
-            */
-           function determineSubType(mainType, newCptOption, existComponent) {
-               var subType = newCptOption.type
-                   ? newCptOption.type
-                   : existComponent
-                   ? existComponent.subType
-                   // Use determineSubType only when there is no 
existComponent.
-                   : ComponentModel.determineSubType(mainType, newCptOption);
-
-               // tooltip, markline, markpoint may always has no subType
-               return subType;
-           }
-
-           /**
-            * @inner
-            */
-           function createSeriesIndices(seriesModels) {
-               return map(seriesModels, function (series) {
-                   return series.componentIndex;
-               }) || [];
-           }
-
-           /**
-            * @inner
-            */
-           function filterBySubType(components, condition) {
-               // Using hasOwnProperty for restrict. Consider
-               // subType is undefined in user payload.
-               return condition.hasOwnProperty('subType')
-                   ? filter(components, function (cpt) {
-                       return cpt.subType === condition.subType;
-                   })
-                   : components;
-           }
-
-           /**
-            * @inner
-            */
-           function assertSeriesInitialized(ecModel) {
-               // Components that use _seriesIndices should depends on series 
component,
-               // which make sure that their initialization is after series.
-               if (true) {
-                   if (!ecModel._seriesIndices) {
-                       throw new Error('Series has not been initialized yet.');
-                   }
-               }
-           }
-
-           zrUtil.mixin(GlobalModel, __webpack_require__(24));
-
-           module.exports = GlobalModel;
-
-
-/***/ },
-/* 4 */
-/***/ function(module, exports) {
-
-       /**
-        * @module zrender/core/util
-        */
-
-
-           // 用于处理merge时无法遍历Date等对象的问题
-           var BUILTIN_OBJECT = {
-               '[object Function]': 1,
-               '[object RegExp]': 1,
-               '[object Date]': 1,
-               '[object Error]': 1,
-               '[object CanvasGradient]': 1,
-               '[object CanvasPattern]': 1,
-               // In node-canvas Image can be Canvas.Image
-               '[object Image]': 1
-           };
-
-           var objToString = Object.prototype.toString;
-
-           var arrayProto = Array.prototype;
-           var nativeForEach = arrayProto.forEach;
-           var nativeFilter = arrayProto.filter;
-           var nativeSlice = arrayProto.slice;
-           var nativeMap = arrayProto.map;
-           var nativeReduce = arrayProto.reduce;
-
-           /**
-            * @param {*} source
-            * @return {*} 拷贝后的新对象
-            */
-           function clone(source) {
-               if (typeof source == 'object' && source !== null) {
-                   var result = source;
-                   if (source instanceof Array) {
-                       result = [];
-                       for (var i = 0, len = source.length; i < len; i++) {
-                           result[i] = clone(source[i]);
-                       }
-                   }
-                   else if (
-                       !isBuildInObject(source)
-                       // 是否为 dom 对象
-                       && !isDom(source)
-                   ) {
-                       result = {};
-                       for (var key in source) {
-                           if (source.hasOwnProperty(key)) {
-                               result[key] = clone(source[key]);
-                           }
-                       }
-                   }
-
-                   return result;
-               }
-
-               return source;
-           }
-
-           /**
-            * @memberOf module:zrender/core/util
-            * @param {*} target
-            * @param {*} source
-            * @param {boolean} [overwrite=false]
-            */
-           function merge(target, source, overwrite) {
-               // We should escapse that source is string
-               // and enter for ... in ...
-               if (!isObject(source) || !isObject(target)) {
-                   return overwrite ? clone(source) : target;
-               }
-
-               for (var key in source) {
-                   if (source.hasOwnProperty(key)) {
-                       var targetProp = target[key];
-                       var sourceProp = source[key];
-
-                       if (isObject(sourceProp)
-                           && isObject(targetProp)
-                           && !isArray(sourceProp)
-                           && !isArray(targetProp)
-                           && !isDom(sourceProp)
-                           && !isDom(targetProp)
-                           && !isBuildInObject(sourceProp)
-                           && !isBuildInObject(targetProp)
-                       ) {
-                           // 如果需要递归覆盖,就递归调用merge
-                           merge(targetProp, sourceProp, overwrite);
-                       }
-                       else if (overwrite || !(key in target)) {
-                           // 否则只处理overwrite为true,或者在目æ 
‡å¯¹è±¡ä¸­æ²¡æœ‰æ­¤å±žæ€§çš„æƒ…况
-                           // NOTE,在 target[key] 
不存在的时候也是直接覆盖
-                           target[key] = clone(source[key], true);
-                       }
-                   }
-               }
-
-               return target;
-           }
-
-           /**
-            * @param {Array} targetAndSources The first item is target, and 
the rests are source.
-            * @param {boolean} [overwrite=false]
-            * @return {*} target
-            */
-           function mergeAll(targetAndSources, overwrite) {
-               var result = targetAndSources[0];
-               for (var i = 1, len = targetAndSources.length; i < len; i++) {
-                   result = merge(result, targetAndSources[i], overwrite);
-               }
-               return result;
-           }
-
-           /**
-            * @param {*} target
-            * @param {*} source
-            * @memberOf module:zrender/core/util
-            */
-           function extend(target, source) {
-               for (var key in source) {
-                   if (source.hasOwnProperty(key)) {
-                       target[key] = source[key];
-                   }
-               }
-               return target;
-           }
-
-           /**
-            * @param {*} target
-            * @param {*} source
-            * @param {boolen} [overlay=false]
-            * @memberOf module:zrender/core/util
-         

<TRUNCATED>

Reply via email to