zhuohongkui 1 年之前
父節點
當前提交
c45324aef5
共有 100 個文件被更改,包括 0 次插入22671 次删除
  1. 0 327
      admin/node_modules/echarts/src/component/toolbox/feature/DataZoom.js
  2. 0 198
      admin/node_modules/echarts/src/component/toolbox/feature/MagicType.js
  3. 0 59
      admin/node_modules/echarts/src/component/toolbox/feature/Restore.js
  4. 0 104
      admin/node_modules/echarts/src/component/toolbox/feature/SaveAsImage.js
  5. 0 29
      admin/node_modules/echarts/src/component/toolbox/featureManager.js
  6. 0 55
      admin/node_modules/echarts/src/component/tooltip.js
  7. 0 350
      admin/node_modules/echarts/src/component/tooltip/TooltipContent.js
  8. 0 128
      admin/node_modules/echarts/src/component/tooltip/TooltipModel.js
  9. 0 191
      admin/node_modules/echarts/src/component/tooltip/TooltipRichContent.js
  10. 0 839
      admin/node_modules/echarts/src/component/tooltip/TooltipView.js
  11. 0 25
      admin/node_modules/echarts/src/component/visualMap.js
  12. 0 261
      admin/node_modules/echarts/src/component/visualMap/ContinuousModel.js
  13. 0 863
      admin/node_modules/echarts/src/component/visualMap/ContinuousView.js
  14. 0 540
      admin/node_modules/echarts/src/component/visualMap/PiecewiseModel.js
  15. 0 239
      admin/node_modules/echarts/src/component/visualMap/PiecewiseView.js
  16. 0 555
      admin/node_modules/echarts/src/component/visualMap/VisualMapModel.js
  17. 0 170
      admin/node_modules/echarts/src/component/visualMap/VisualMapView.js
  18. 0 76
      admin/node_modules/echarts/src/component/visualMap/helper.js
  19. 0 60
      admin/node_modules/echarts/src/component/visualMap/preprocessor.js
  20. 0 36
      admin/node_modules/echarts/src/component/visualMap/typeDefaulter.js
  21. 0 106
      admin/node_modules/echarts/src/component/visualMap/visualEncoding.js
  22. 0 35
      admin/node_modules/echarts/src/component/visualMap/visualMapAction.js
  23. 0 33
      admin/node_modules/echarts/src/component/visualMapContinuous.js
  24. 0 33
      admin/node_modules/echarts/src/component/visualMapPiecewise.js
  25. 0 41
      admin/node_modules/echarts/src/config.js
  26. 0 377
      admin/node_modules/echarts/src/coord/Axis.js
  27. 0 85
      admin/node_modules/echarts/src/coord/ICoordinateSystem
  28. 0 324
      admin/node_modules/echarts/src/coord/View.js
  29. 0 217
      admin/node_modules/echarts/src/coord/axisDefault.js
  30. 0 416
      admin/node_modules/echarts/src/coord/axisHelper.js
  31. 0 96
      admin/node_modules/echarts/src/coord/axisModelCommonMixin.js
  32. 0 112
      admin/node_modules/echarts/src/coord/axisModelCreator.js
  33. 0 375
      admin/node_modules/echarts/src/coord/axisTickLabelBuilder.js
  34. 0 488
      admin/node_modules/echarts/src/coord/calendar/Calendar.js
  35. 0 158
      admin/node_modules/echarts/src/coord/calendar/CalendarModel.js
  36. 0 46
      admin/node_modules/echarts/src/coord/calendar/prepareCustom.js
  37. 0 130
      admin/node_modules/echarts/src/coord/cartesian/Axis2D.js
  38. 0 90
      admin/node_modules/echarts/src/coord/cartesian/AxisModel.js
  39. 0 129
      admin/node_modules/echarts/src/coord/cartesian/Cartesian.js
  40. 0 157
      admin/node_modules/echarts/src/coord/cartesian/Cartesian2D.js
  41. 0 643
      admin/node_modules/echarts/src/coord/cartesian/Grid.js
  42. 0 55
      admin/node_modules/echarts/src/coord/cartesian/GridModel.js
  43. 0 87
      admin/node_modules/echarts/src/coord/cartesian/cartesianAxisHelper.js
  44. 0 54
      admin/node_modules/echarts/src/coord/cartesian/prepareCustom.js
  45. 0 212
      admin/node_modules/echarts/src/coord/geo/Geo.js
  46. 0 179
      admin/node_modules/echarts/src/coord/geo/GeoModel.js
  47. 0 182
      admin/node_modules/echarts/src/coord/geo/Region.js
  48. 0 44
      admin/node_modules/echarts/src/coord/geo/fix/diaoyuIsland.js
  49. 0 35
      admin/node_modules/echarts/src/coord/geo/fix/geoCoord.js
  50. 0 66
      admin/node_modules/echarts/src/coord/geo/fix/nanhai.js
  51. 0 39
      admin/node_modules/echarts/src/coord/geo/fix/textCoord.js
  52. 0 240
      admin/node_modules/echarts/src/coord/geo/geoCreator.js
  53. 0 95
      admin/node_modules/echarts/src/coord/geo/geoJSONLoader.js
  54. 0 143
      admin/node_modules/echarts/src/coord/geo/geoSVGLoader.js
  55. 0 127
      admin/node_modules/echarts/src/coord/geo/geoSourceManager.js
  56. 0 104
      admin/node_modules/echarts/src/coord/geo/mapDataStorage.js
  57. 0 147
      admin/node_modules/echarts/src/coord/geo/parseGeoJson.js
  58. 0 57
      admin/node_modules/echarts/src/coord/geo/prepareCustom.js
  59. 0 149
      admin/node_modules/echarts/src/coord/parallel/AxisModel.js
  60. 0 547
      admin/node_modules/echarts/src/coord/parallel/Parallel.js
  61. 0 73
      admin/node_modules/echarts/src/coord/parallel/ParallelAxis.js
  62. 0 142
      admin/node_modules/echarts/src/coord/parallel/ParallelModel.js
  63. 0 57
      admin/node_modules/echarts/src/coord/parallel/parallelCreator.js
  64. 0 69
      admin/node_modules/echarts/src/coord/parallel/parallelPreprocessor.js
  65. 0 127
      admin/node_modules/echarts/src/coord/polar/AngleAxis.js
  66. 0 78
      admin/node_modules/echarts/src/coord/polar/AxisModel.js
  67. 0 299
      admin/node_modules/echarts/src/coord/polar/Polar.js
  68. 0 60
      admin/node_modules/echarts/src/coord/polar/PolarModel.js
  69. 0 56
      admin/node_modules/echarts/src/coord/polar/RadiusAxis.js
  70. 0 187
      admin/node_modules/echarts/src/coord/polar/polarCreator.js
  71. 0 68
      admin/node_modules/echarts/src/coord/polar/prepareCustom.js
  72. 0 51
      admin/node_modules/echarts/src/coord/radar/IndicatorAxis.js
  73. 0 267
      admin/node_modules/echarts/src/coord/radar/Radar.js
  74. 0 158
      admin/node_modules/echarts/src/coord/radar/RadarModel.js
  75. 0 108
      admin/node_modules/echarts/src/coord/single/AxisModel.js
  76. 0 291
      admin/node_modules/echarts/src/coord/single/Single.js
  77. 0 112
      admin/node_modules/echarts/src/coord/single/SingleAxis.js
  78. 0 51
      admin/node_modules/echarts/src/coord/single/prepareCustom.js
  79. 0 78
      admin/node_modules/echarts/src/coord/single/singleAxisHelper.js
  80. 0 64
      admin/node_modules/echarts/src/coord/single/singleCreator.js
  81. 0 145
      admin/node_modules/echarts/src/data/DataDiffer.js
  82. 0 135
      admin/node_modules/echarts/src/data/DataDimensionInfo.js
  83. 0 536
      admin/node_modules/echarts/src/data/Graph.js
  84. 0 2038
      admin/node_modules/echarts/src/data/List.js
  85. 0 147
      admin/node_modules/echarts/src/data/OrdinalMeta.js
  86. 0 149
      admin/node_modules/echarts/src/data/Source.js
  87. 0 536
      admin/node_modules/echarts/src/data/Tree.js
  88. 0 298
      admin/node_modules/echarts/src/data/helper/completeDimensions.js
  89. 0 48
      admin/node_modules/echarts/src/data/helper/createDimensions.js
  90. 0 382
      admin/node_modules/echarts/src/data/helper/dataProvider.js
  91. 0 162
      admin/node_modules/echarts/src/data/helper/dataStackHelper.js
  92. 0 152
      admin/node_modules/echarts/src/data/helper/dimensionHelper.js
  93. 0 151
      admin/node_modules/echarts/src/data/helper/linkList.js
  94. 0 679
      admin/node_modules/echarts/src/data/helper/sourceHelper.js
  95. 0 30
      admin/node_modules/echarts/src/data/helper/sourceType.js
  96. 0 2473
      admin/node_modules/echarts/src/echarts.js
  97. 0 97
      admin/node_modules/echarts/src/export.js
  98. 0 107
      admin/node_modules/echarts/src/helper.js
  99. 0 126
      admin/node_modules/echarts/src/lang.js
  100. 0 126
      admin/node_modules/echarts/src/langEN.js

+ 0 - 327
admin/node_modules/echarts/src/component/toolbox/feature/DataZoom.js

@@ -1,327 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../../echarts';
-import * as zrUtil from 'zrender/src/core/util';
-import BrushController from '../../helper/BrushController';
-import BrushTargetManager from '../../helper/BrushTargetManager';
-import * as history from '../../dataZoom/history';
-import sliderMove from '../../helper/sliderMove';
-import lang from '../../../lang';
-import * as featureManager from '../featureManager';
-
-// Use dataZoomSelect
-import '../../dataZoomSelect';
-
-var dataZoomLang = lang.toolbox.dataZoom;
-var each = zrUtil.each;
-
-// Spectial component id start with \0ec\0, see echarts/model/Global.js~hasInnerId
-var DATA_ZOOM_ID_BASE = '\0_ec_\0toolbox-dataZoom_';
-
-function DataZoom(model, ecModel, api) {
-
-    /**
-     * @private
-     * @type {module:echarts/component/helper/BrushController}
-     */
-    (this._brushController = new BrushController(api.getZr()))
-        .on('brush', zrUtil.bind(this._onBrush, this))
-        .mount();
-
-    /**
-     * @private
-     * @type {boolean}
-     */
-    this._isZoomActive;
-}
-
-DataZoom.defaultOption = {
-    show: true,
-    filterMode: 'filter',
-    // Icon group
-    icon: {
-        zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',
-        back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'
-    },
-    // `zoom`, `back`
-    title: zrUtil.clone(dataZoomLang.title)
-};
-
-var proto = DataZoom.prototype;
-
-proto.render = function (featureModel, ecModel, api, payload) {
-    this.model = featureModel;
-    this.ecModel = ecModel;
-    this.api = api;
-
-    updateZoomBtnStatus(featureModel, ecModel, this, payload, api);
-    updateBackBtnStatus(featureModel, ecModel);
-};
-
-proto.onclick = function (ecModel, api, type) {
-    handlers[type].call(this);
-};
-
-proto.remove = function (ecModel, api) {
-    this._brushController.unmount();
-};
-
-proto.dispose = function (ecModel, api) {
-    this._brushController.dispose();
-};
-
-/**
- * @private
- */
-var handlers = {
-
-    zoom: function () {
-        var nextActive = !this._isZoomActive;
-
-        this.api.dispatchAction({
-            type: 'takeGlobalCursor',
-            key: 'dataZoomSelect',
-            dataZoomSelectActive: nextActive
-        });
-    },
-
-    back: function () {
-        this._dispatchZoomAction(history.pop(this.ecModel));
-    }
-};
-
-/**
- * @private
- */
-proto._onBrush = function (areas, opt) {
-    if (!opt.isEnd || !areas.length) {
-        return;
-    }
-    var snapshot = {};
-    var ecModel = this.ecModel;
-
-    this._brushController.updateCovers([]); // remove cover
-
-    var brushTargetManager = new BrushTargetManager(
-        retrieveAxisSetting(this.model.option), ecModel, {include: ['grid']}
-    );
-    brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {
-        if (coordSys.type !== 'cartesian2d') {
-            return;
-        }
-
-        var brushType = area.brushType;
-        if (brushType === 'rect') {
-            setBatch('x', coordSys, coordRange[0]);
-            setBatch('y', coordSys, coordRange[1]);
-        }
-        else {
-            setBatch(({lineX: 'x', lineY: 'y'})[brushType], coordSys, coordRange);
-        }
-    });
-
-    history.push(ecModel, snapshot);
-
-    this._dispatchZoomAction(snapshot);
-
-    function setBatch(dimName, coordSys, minMax) {
-        var axis = coordSys.getAxis(dimName);
-        var axisModel = axis.model;
-        var dataZoomModel = findDataZoom(dimName, axisModel, ecModel);
-
-        // Restrict range.
-        var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();
-        if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {
-            minMax = sliderMove(
-                0, minMax.slice(), axis.scale.getExtent(), 0,
-                minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan
-            );
-        }
-
-        dataZoomModel && (snapshot[dataZoomModel.id] = {
-            dataZoomId: dataZoomModel.id,
-            startValue: minMax[0],
-            endValue: minMax[1]
-        });
-    }
-
-    function findDataZoom(dimName, axisModel, ecModel) {
-        var found;
-        ecModel.eachComponent({mainType: 'dataZoom', subType: 'select'}, function (dzModel) {
-            var has = dzModel.getAxisModel(dimName, axisModel.componentIndex);
-            has && (found = dzModel);
-        });
-        return found;
-    }
-};
-
-/**
- * @private
- */
-proto._dispatchZoomAction = function (snapshot) {
-    var batch = [];
-
-    // Convert from hash map to array.
-    each(snapshot, function (batchItem, dataZoomId) {
-        batch.push(zrUtil.clone(batchItem));
-    });
-
-    batch.length && this.api.dispatchAction({
-        type: 'dataZoom',
-        from: this.uid,
-        batch: batch
-    });
-};
-
-function retrieveAxisSetting(option) {
-    var setting = {};
-    // Compatible with previous setting: null => all axis, false => no axis.
-    zrUtil.each(['xAxisIndex', 'yAxisIndex'], function (name) {
-        setting[name] = option[name];
-        setting[name] == null && (setting[name] = 'all');
-        (setting[name] === false || setting[name] === 'none') && (setting[name] = []);
-    });
-    return setting;
-}
-
-function updateBackBtnStatus(featureModel, ecModel) {
-    featureModel.setIconStatus(
-        'back',
-        history.count(ecModel) > 1 ? 'emphasis' : 'normal'
-    );
-}
-
-function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {
-    var zoomActive = view._isZoomActive;
-
-    if (payload && payload.type === 'takeGlobalCursor') {
-        zoomActive = payload.key === 'dataZoomSelect'
-            ? payload.dataZoomSelectActive : false;
-    }
-
-    view._isZoomActive = zoomActive;
-
-    featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal');
-
-    var brushTargetManager = new BrushTargetManager(
-        retrieveAxisSetting(featureModel.option), ecModel, {include: ['grid']}
-    );
-
-    view._brushController
-        .setPanels(brushTargetManager.makePanelOpts(api, function (targetInfo) {
-            return (targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared)
-                ? 'lineX'
-                : (!targetInfo.xAxisDeclared && targetInfo.yAxisDeclared)
-                ? 'lineY'
-                : 'rect';
-        }))
-        .enableBrush(
-            zoomActive
-            ? {
-                brushType: 'auto',
-                brushStyle: {
-                    // FIXME user customized?
-                    lineWidth: 0,
-                    fill: 'rgba(0,0,0,0.2)'
-                }
-            }
-            : false
-        );
-}
-
-
-featureManager.register('dataZoom', DataZoom);
-
-
-// Create special dataZoom option for select
-// FIXME consider the case of merge option, where axes options are not exists.
-echarts.registerPreprocessor(function (option) {
-    if (!option) {
-        return;
-    }
-
-    var dataZoomOpts = option.dataZoom || (option.dataZoom = []);
-    if (!zrUtil.isArray(dataZoomOpts)) {
-        option.dataZoom = dataZoomOpts = [dataZoomOpts];
-    }
-
-    var toolboxOpt = option.toolbox;
-    if (toolboxOpt) {
-        // Assume there is only one toolbox
-        if (zrUtil.isArray(toolboxOpt)) {
-            toolboxOpt = toolboxOpt[0];
-        }
-
-        if (toolboxOpt && toolboxOpt.feature) {
-            var dataZoomOpt = toolboxOpt.feature.dataZoom;
-            // FIXME: If add dataZoom when setOption in merge mode,
-            // no axis info to be added. See `test/dataZoom-extreme.html`
-            addForAxis('xAxis', dataZoomOpt);
-            addForAxis('yAxis', dataZoomOpt);
-        }
-    }
-
-    function addForAxis(axisName, dataZoomOpt) {
-        if (!dataZoomOpt) {
-            return;
-        }
-
-        // Try not to modify model, because it is not merged yet.
-        var axisIndicesName = axisName + 'Index';
-        var givenAxisIndices = dataZoomOpt[axisIndicesName];
-        if (givenAxisIndices != null
-            && givenAxisIndices !== 'all'
-            && !zrUtil.isArray(givenAxisIndices)
-        ) {
-            givenAxisIndices = (givenAxisIndices === false || givenAxisIndices === 'none') ? [] : [givenAxisIndices];
-        }
-
-        forEachComponent(axisName, function (axisOpt, axisIndex) {
-            if (givenAxisIndices != null
-                && givenAxisIndices !== 'all'
-                && zrUtil.indexOf(givenAxisIndices, axisIndex) === -1
-            ) {
-                return;
-            }
-            var newOpt = {
-                type: 'select',
-                $fromToolbox: true,
-                // Default to be filter
-                filterMode: dataZoomOpt.filterMode || 'filter',
-                // Id for merge mapping.
-                id: DATA_ZOOM_ID_BASE + axisName + axisIndex
-            };
-            // FIXME
-            // Only support one axis now.
-            newOpt[axisIndicesName] = axisIndex;
-            dataZoomOpts.push(newOpt);
-        });
-    }
-
-    function forEachComponent(mainType, cb) {
-        var opts = option[mainType];
-        if (!zrUtil.isArray(opts)) {
-            opts = opts ? [opts] : [];
-        }
-        each(opts, cb);
-    }
-});
-
-export default DataZoom;

+ 0 - 198
admin/node_modules/echarts/src/component/toolbox/feature/MagicType.js

@@ -1,198 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../../echarts';
-import * as zrUtil from 'zrender/src/core/util';
-import lang from '../../../lang';
-import * as featureManager from '../featureManager';
-
-var magicTypeLang = lang.toolbox.magicType;
-var INNER_STACK_KEYWORD = '__ec_magicType_stack__';
-
-function MagicType(model) {
-    this.model = model;
-}
-
-MagicType.defaultOption = {
-    show: true,
-    type: [],
-    // Icon group
-    icon: {
-        /* eslint-disable */
-        line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4',
-        bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7',
-        stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z' // jshint ignore:line
-        /* eslint-enable */
-    },
-    // `line`, `bar`, `stack`, `tiled`
-    title: zrUtil.clone(magicTypeLang.title),
-    option: {},
-    seriesIndex: {}
-};
-
-var proto = MagicType.prototype;
-
-proto.getIcons = function () {
-    var model = this.model;
-    var availableIcons = model.get('icon');
-    var icons = {};
-    zrUtil.each(model.get('type'), function (type) {
-        if (availableIcons[type]) {
-            icons[type] = availableIcons[type];
-        }
-    });
-    return icons;
-};
-
-var seriesOptGenreator = {
-    'line': function (seriesType, seriesId, seriesModel, model) {
-        if (seriesType === 'bar') {
-            return zrUtil.merge({
-                id: seriesId,
-                type: 'line',
-                // Preserve data related option
-                data: seriesModel.get('data'),
-                stack: seriesModel.get('stack'),
-                markPoint: seriesModel.get('markPoint'),
-                markLine: seriesModel.get('markLine')
-            }, model.get('option.line') || {}, true);
-        }
-    },
-    'bar': function (seriesType, seriesId, seriesModel, model) {
-        if (seriesType === 'line') {
-            return zrUtil.merge({
-                id: seriesId,
-                type: 'bar',
-                // Preserve data related option
-                data: seriesModel.get('data'),
-                stack: seriesModel.get('stack'),
-                markPoint: seriesModel.get('markPoint'),
-                markLine: seriesModel.get('markLine')
-            }, model.get('option.bar') || {}, true);
-        }
-    },
-    'stack': function (seriesType, seriesId, seriesModel, model) {
-        var isStack = seriesModel.get('stack') === INNER_STACK_KEYWORD;
-        if (seriesType === 'line' || seriesType === 'bar') {
-            model.setIconStatus('stack', isStack ? 'normal' : 'emphasis');
-            return zrUtil.merge({
-                id: seriesId,
-                stack: isStack ? '' : INNER_STACK_KEYWORD
-            }, model.get('option.stack') || {}, true);
-        }
-    }
-};
-
-var radioTypes = [
-    ['line', 'bar'],
-    ['stack']
-];
-
-proto.onclick = function (ecModel, api, type) {
-    var model = this.model;
-    var seriesIndex = model.get('seriesIndex.' + type);
-    // Not supported magicType
-    if (!seriesOptGenreator[type]) {
-        return;
-    }
-    var newOption = {
-        series: []
-    };
-    var generateNewSeriesTypes = function (seriesModel) {
-        var seriesType = seriesModel.subType;
-        var seriesId = seriesModel.id;
-        var newSeriesOpt = seriesOptGenreator[type](
-            seriesType, seriesId, seriesModel, model
-        );
-        if (newSeriesOpt) {
-            // PENDING If merge original option?
-            zrUtil.defaults(newSeriesOpt, seriesModel.option);
-            newOption.series.push(newSeriesOpt);
-        }
-        // Modify boundaryGap
-        var coordSys = seriesModel.coordinateSystem;
-        if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) {
-            var categoryAxis = coordSys.getAxesByScale('ordinal')[0];
-            if (categoryAxis) {
-                var axisDim = categoryAxis.dim;
-                var axisType = axisDim + 'Axis';
-                var axisModel = ecModel.queryComponents({
-                    mainType: axisType,
-                    index: seriesModel.get(name + 'Index'),
-                    id: seriesModel.get(name + 'Id')
-                })[0];
-                var axisIndex = axisModel.componentIndex;
-
-                newOption[axisType] = newOption[axisType] || [];
-                for (var i = 0; i <= axisIndex; i++) {
-                    newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};
-                }
-                newOption[axisType][axisIndex].boundaryGap = type === 'bar';
-            }
-        }
-    };
-
-    zrUtil.each(radioTypes, function (radio) {
-        if (zrUtil.indexOf(radio, type) >= 0) {
-            zrUtil.each(radio, function (item) {
-                model.setIconStatus(item, 'normal');
-            });
-        }
-    });
-
-    model.setIconStatus(type, 'emphasis');
-
-    ecModel.eachComponent(
-        {
-            mainType: 'series',
-            query: seriesIndex == null ? null : {
-                seriesIndex: seriesIndex
-            }
-        }, generateNewSeriesTypes
-    );
-
-    var newTitle;
-    // Change title of stack
-    if (type === 'stack') {
-        var isStack = newOption.series && newOption.series[0] && newOption.series[0].stack === INNER_STACK_KEYWORD;
-        newTitle = isStack
-            ? zrUtil.merge({ stack: magicTypeLang.title.tiled }, magicTypeLang.title)
-            : zrUtil.clone(magicTypeLang.title);
-    }
-
-    api.dispatchAction({
-        type: 'changeMagicType',
-        currentType: type,
-        newOption: newOption,
-        newTitle: newTitle,
-        featureName: 'magicType'
-    });
-};
-
-echarts.registerAction({
-    type: 'changeMagicType',
-    event: 'magicTypeChanged',
-    update: 'prepareAndUpdate'
-}, function (payload, ecModel) {
-    ecModel.mergeOption(payload.newOption);
-});
-
-featureManager.register('magicType', MagicType);
-
-export default MagicType;

+ 0 - 59
admin/node_modules/echarts/src/component/toolbox/feature/Restore.js

@@ -1,59 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../../echarts';
-import * as history from '../../dataZoom/history';
-import lang from '../../../lang';
-import * as featureManager from '../featureManager';
-
-var restoreLang = lang.toolbox.restore;
-
-function Restore(model) {
-    this.model = model;
-}
-
-Restore.defaultOption = {
-    show: true,
-    /* eslint-disable */
-    icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5',
-    /* eslint-enable */
-    title: restoreLang.title
-};
-
-var proto = Restore.prototype;
-
-proto.onclick = function (ecModel, api, type) {
-    history.clear(ecModel);
-
-    api.dispatchAction({
-        type: 'restore',
-        from: this.uid
-    });
-};
-
-featureManager.register('restore', Restore);
-
-echarts.registerAction(
-    {type: 'restore', event: 'restore', update: 'prepareAndUpdate'},
-    function (payload, ecModel) {
-        ecModel.resetOption('recreate');
-    }
-);
-
-export default Restore;

+ 0 - 104
admin/node_modules/echarts/src/component/toolbox/feature/SaveAsImage.js

@@ -1,104 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/* global Uint8Array */
-
-import env from 'zrender/src/core/env';
-import lang from '../../../lang';
-import * as featureManager from '../featureManager';
-
-var saveAsImageLang = lang.toolbox.saveAsImage;
-
-function SaveAsImage(model) {
-    this.model = model;
-}
-
-SaveAsImage.defaultOption = {
-    show: true,
-    icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',
-    title: saveAsImageLang.title,
-    type: 'png',
-    // Default use option.backgroundColor
-    // backgroundColor: '#fff',
-    connectedBackgroundColor: '#fff',
-    name: '',
-    excludeComponents: ['toolbox'],
-    pixelRatio: 1,
-    lang: saveAsImageLang.lang.slice()
-};
-
-SaveAsImage.prototype.unusable = !env.canvasSupported;
-
-var proto = SaveAsImage.prototype;
-
-proto.onclick = function (ecModel, api) {
-    var model = this.model;
-    var title = model.get('name') || ecModel.get('title.0.text') || 'echarts';
-    var isSvg = api.getZr().painter.getType() === 'svg';
-    var type = isSvg ? 'svg' : model.get('type', true) || 'png';
-    var url = api.getConnectedDataURL({
-        type: type,
-        backgroundColor: model.get('backgroundColor', true)
-            || ecModel.get('backgroundColor') || '#fff',
-        connectedBackgroundColor: model.get('connectedBackgroundColor'),
-        excludeComponents: model.get('excludeComponents'),
-        pixelRatio: model.get('pixelRatio')
-    });
-    // Chrome and Firefox
-    if (typeof MouseEvent === 'function' && !env.browser.ie && !env.browser.edge) {
-        var $a = document.createElement('a');
-        $a.download = title + '.' + type;
-        $a.target = '_blank';
-        $a.href = url;
-        var evt = new MouseEvent('click', {
-            view: window,
-            bubbles: true,
-            cancelable: false
-        });
-        $a.dispatchEvent(evt);
-    }
-    // IE
-    else {
-        if (window.navigator.msSaveOrOpenBlob) {
-            var bstr = atob(url.split(',')[1]);
-            var n = bstr.length;
-            var u8arr = new Uint8Array(n);
-            while (n--) {
-                u8arr[n] = bstr.charCodeAt(n);
-            }
-            var blob = new Blob([u8arr]);
-            window.navigator.msSaveOrOpenBlob(blob, title + '.' + type);
-        }
-        else {
-            var lang = model.get('lang');
-            var html = ''
-                + '<body style="margin:0;">'
-                + '<img src="' + url + '" style="max-width:100%;" title="' + ((lang && lang[0]) || '') + '" />'
-                + '</body>';
-            var tab = window.open();
-            tab.document.write(html);
-        }
-    }
-};
-
-featureManager.register(
-    'saveAsImage', SaveAsImage
-);
-
-export default SaveAsImage;

+ 0 - 29
admin/node_modules/echarts/src/component/toolbox/featureManager.js

@@ -1,29 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-
-var features = {};
-
-export function register(name, ctor) {
-    features[name] = ctor;
-}
-
-export function get(name) {
-    return features[name];
-}

+ 0 - 55
admin/node_modules/echarts/src/component/tooltip.js

@@ -1,55 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// FIXME Better way to pack data in graphic element
-
-import * as echarts from '../echarts';
-
-import './axisPointer';
-import './tooltip/TooltipModel';
-import './tooltip/TooltipView';
-
-
-/**
- * @action
- * @property {string} type
- * @property {number} seriesIndex
- * @property {number} dataIndex
- * @property {number} [x]
- * @property {number} [y]
- */
-echarts.registerAction(
-    {
-        type: 'showTip',
-        event: 'showTip',
-        update: 'tooltip:manuallyShowTip'
-    },
-    // noop
-    function () {}
-);
-
-echarts.registerAction(
-    {
-        type: 'hideTip',
-        event: 'hideTip',
-        update: 'tooltip:manuallyHideTip'
-    },
-    // noop
-    function () {}
-);

+ 0 - 350
admin/node_modules/echarts/src/component/tooltip/TooltipContent.js

@@ -1,350 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import * as zrColor from 'zrender/src/tool/color';
-import * as eventUtil from 'zrender/src/core/event';
-import * as domUtil from 'zrender/src/core/dom';
-import env from 'zrender/src/core/env';
-import * as formatUtil from '../../util/format';
-
-var each = zrUtil.each;
-var toCamelCase = formatUtil.toCamelCase;
-
-var vendors = ['', '-webkit-', '-moz-', '-o-'];
-
-var gCssText = 'position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;';
-
-/**
- * @param {number} duration
- * @return {string}
- * @inner
- */
-function assembleTransition(duration) {
-    var transitionCurve = 'cubic-bezier(0.23, 1, 0.32, 1)';
-    var transitionText = 'left ' + duration + 's ' + transitionCurve + ','
-                        + 'top ' + duration + 's ' + transitionCurve;
-    return zrUtil.map(vendors, function (vendorPrefix) {
-        return vendorPrefix + 'transition:' + transitionText;
-    }).join(';');
-}
-
-/**
- * @param {Object} textStyle
- * @return {string}
- * @inner
- */
-function assembleFont(textStyleModel) {
-    var cssText = [];
-
-    var fontSize = textStyleModel.get('fontSize');
-    var color = textStyleModel.getTextColor();
-
-    color && cssText.push('color:' + color);
-
-    cssText.push('font:' + textStyleModel.getFont());
-
-    fontSize
-        && cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px');
-
-    each(['decoration', 'align'], function (name) {
-        var val = textStyleModel.get(name);
-        val && cssText.push('text-' + name + ':' + val);
-    });
-
-    return cssText.join(';');
-}
-
-/**
- * @param {Object} tooltipModel
- * @return {string}
- * @inner
- */
-function assembleCssText(tooltipModel) {
-
-    var cssText = [];
-
-    var transitionDuration = tooltipModel.get('transitionDuration');
-    var backgroundColor = tooltipModel.get('backgroundColor');
-    var textStyleModel = tooltipModel.getModel('textStyle');
-    var padding = tooltipModel.get('padding');
-
-    // Animation transition. Do not animate when transitionDuration is 0.
-    transitionDuration
-        && cssText.push(assembleTransition(transitionDuration));
-
-    if (backgroundColor) {
-        if (env.canvasSupported) {
-            cssText.push('background-Color:' + backgroundColor);
-        }
-        else {
-            // for ie
-            cssText.push(
-                'background-Color:#' + zrColor.toHex(backgroundColor)
-            );
-            cssText.push('filter:alpha(opacity=70)');
-        }
-    }
-
-    // Border style
-    each(['width', 'color', 'radius'], function (name) {
-        var borderName = 'border-' + name;
-        var camelCase = toCamelCase(borderName);
-        var val = tooltipModel.get(camelCase);
-        val != null
-            && cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px'));
-    });
-
-    // Text style
-    cssText.push(assembleFont(textStyleModel));
-
-    // Padding
-    if (padding != null) {
-        cssText.push('padding:' + formatUtil.normalizeCssArray(padding).join('px ') + 'px');
-    }
-
-    return cssText.join(';') + ';';
-}
-
-// If not able to make, do not modify the input `out`.
-function makeStyleCoord(out, zr, appendToBody, zrX, zrY) {
-    var zrPainter = zr && zr.painter;
-
-    if (appendToBody) {
-        var zrViewportRoot = zrPainter && zrPainter.getViewportRoot();
-        if (zrViewportRoot) {
-            // Some APPs might use scale on body, so we support CSS transform here.
-            domUtil.transformLocalCoord(out, zrViewportRoot, document.body, zrX, zrY);
-        }
-    }
-    else {
-        out[0] = zrX;
-        out[1] = zrY;
-        // xy should be based on canvas root. But tooltipContent is
-        // the sibling of canvas root. So padding of ec container
-        // should be considered here.
-        var viewportRootOffset = zrPainter && zrPainter.getViewportRootOffset();
-        if (viewportRootOffset) {
-            out[0] += viewportRootOffset.offsetLeft;
-            out[1] += viewportRootOffset.offsetTop;
-        }
-    }
-}
-
-/**
- * @alias module:echarts/component/tooltip/TooltipContent
- * @param {HTMLElement} container
- * @param {ExtensionAPI} api
- * @param {Object} [opt]
- * @param {boolean} [opt.appendToBody]
- *        `false`: the DOM element will be inside the container. Default value.
- *        `true`: the DOM element will be appended to HTML body, which avoid
- *                some overflow clip but intrude outside of the container.
- * @constructor
- */
-function TooltipContent(container, api, opt) {
-    if (env.wxa) {
-        return null;
-    }
-
-    var el = document.createElement('div');
-    el.domBelongToZr = true;
-    this.el = el;
-    var zr = this._zr = api.getZr();
-    var appendToBody = this._appendToBody = opt && opt.appendToBody;
-
-    this._styleCoord = [0, 0];
-
-    makeStyleCoord(this._styleCoord, zr, appendToBody, api.getWidth() / 2, api.getHeight() / 2);
-
-    if (appendToBody) {
-        document.body.appendChild(el);
-    }
-    else {
-        container.appendChild(el);
-    }
-
-    this._container = container;
-
-    this._show = false;
-
-    /**
-     * @private
-     */
-    this._hideTimeout;
-
-    // FIXME
-    // Is it needed to trigger zr event manually if
-    // the browser do not support `pointer-events: none`.
-
-    var self = this;
-    el.onmouseenter = function () {
-        // clear the timeout in hideLater and keep showing tooltip
-        if (self._enterable) {
-            clearTimeout(self._hideTimeout);
-            self._show = true;
-        }
-        self._inContent = true;
-    };
-    el.onmousemove = function (e) {
-        e = e || window.event;
-        if (!self._enterable) {
-            // `pointer-events: none` is set to tooltip content div
-            // if `enterable` is set as `false`, and `el.onmousemove`
-            // can not be triggered. But in browser that do not
-            // support `pointer-events`, we need to do this:
-            // Try trigger zrender event to avoid mouse
-            // in and out shape too frequently
-            var handler = zr.handler;
-            var zrViewportRoot = zr.painter.getViewportRoot();
-            eventUtil.normalizeEvent(zrViewportRoot, e, true);
-            handler.dispatch('mousemove', e);
-        }
-    };
-    el.onmouseleave = function () {
-        if (self._enterable) {
-            if (self._show) {
-                self.hideLater(self._hideDelay);
-            }
-        }
-        self._inContent = false;
-    };
-}
-
-TooltipContent.prototype = {
-
-    constructor: TooltipContent,
-
-    /**
-     * @private
-     * @type {boolean}
-     */
-    _enterable: true,
-
-    /**
-     * Update when tooltip is rendered
-     */
-    update: function () {
-        // FIXME
-        // Move this logic to ec main?
-        var container = this._container;
-        var stl = container.currentStyle
-            || document.defaultView.getComputedStyle(container);
-        var domStyle = container.style;
-        if (domStyle.position !== 'absolute' && stl.position !== 'absolute') {
-            domStyle.position = 'relative';
-        }
-        // Hide the tooltip
-        // PENDING
-        // this.hide();
-    },
-
-    show: function (tooltipModel) {
-        clearTimeout(this._hideTimeout);
-        var el = this.el;
-        var styleCoord = this._styleCoord;
-
-        el.style.cssText = gCssText + assembleCssText(tooltipModel)
-            // Because of the reason described in:
-            // http://stackoverflow.com/questions/21125587/css3-transition-not-working-in-chrome-anymore
-            // we should set initial value to `left` and `top`.
-            + ';left:' + styleCoord[0] + 'px;top:' + styleCoord[1] + 'px;'
-            + (tooltipModel.get('extraCssText') || '');
-
-        el.style.display = el.innerHTML ? 'block' : 'none';
-
-        // If mouse occsionally move over the tooltip, a mouseout event will be
-        // triggered by canvas, and cuase some unexpectable result like dragging
-        // stop, "unfocusAdjacency". Here `pointer-events: none` is used to solve
-        // it. Although it is not suppored by IE8~IE10, fortunately it is a rare
-        // scenario.
-        el.style.pointerEvents = this._enterable ? 'auto' : 'none';
-
-        this._show = true;
-    },
-
-    setContent: function (content) {
-        this.el.innerHTML = content == null ? '' : content;
-    },
-
-    setEnterable: function (enterable) {
-        this._enterable = enterable;
-    },
-
-    getSize: function () {
-        var el = this.el;
-        return [el.clientWidth, el.clientHeight];
-    },
-
-    moveTo: function (zrX, zrY) {
-        var styleCoord = this._styleCoord;
-        makeStyleCoord(styleCoord, this._zr, this._appendToBody, zrX, zrY);
-
-        var style = this.el.style;
-        style.left = styleCoord[0] + 'px';
-        style.top = styleCoord[1] + 'px';
-    },
-
-    hide: function () {
-        this.el.style.display = 'none';
-        this._show = false;
-    },
-
-    hideLater: function (time) {
-        if (this._show && !(this._inContent && this._enterable)) {
-            if (time) {
-                this._hideDelay = time;
-                // Set show false to avoid invoke hideLater mutiple times
-                this._show = false;
-                this._hideTimeout = setTimeout(zrUtil.bind(this.hide, this), time);
-            }
-            else {
-                this.hide();
-            }
-        }
-    },
-
-    isShow: function () {
-        return this._show;
-    },
-
-    dispose: function () {
-        this.el.parentNode.removeChild(this.el);
-    },
-
-    getOuterSize: function () {
-        var width = this.el.clientWidth;
-        var height = this.el.clientHeight;
-
-        // Consider browser compatibility.
-        // IE8 does not support getComputedStyle.
-        if (document.defaultView && document.defaultView.getComputedStyle) {
-            var stl = document.defaultView.getComputedStyle(this.el);
-            if (stl) {
-                width += parseInt(stl.borderLeftWidth, 10) + parseInt(stl.borderRightWidth, 10);
-                height += parseInt(stl.borderTopWidth, 10) + parseInt(stl.borderBottomWidth, 10);
-            }
-        }
-
-        return {width: width, height: height};
-    }
-
-};
-
-export default TooltipContent;

+ 0 - 128
admin/node_modules/echarts/src/component/tooltip/TooltipModel.js

@@ -1,128 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../echarts';
-
-export default echarts.extendComponentModel({
-
-    type: 'tooltip',
-
-    dependencies: ['axisPointer'],
-
-    defaultOption: {
-        zlevel: 0,
-
-        z: 60,
-
-        show: true,
-
-        // tooltip主体内容
-        showContent: true,
-
-        // 'trigger' only works on coordinate system.
-        // 'item' | 'axis' | 'none'
-        trigger: 'item',
-
-        // 'click' | 'mousemove' | 'none'
-        triggerOn: 'mousemove|click',
-
-        alwaysShowContent: false,
-
-        displayMode: 'single', // 'single' | 'multipleByCoordSys'
-
-        renderMode: 'auto', // 'auto' | 'html' | 'richText'
-        // 'auto': use html by default, and use non-html if `document` is not defined
-        // 'html': use html for tooltip
-        // 'richText': use canvas, svg, and etc. for tooltip
-
-        // 位置 {Array} | {Function}
-        // position: null
-        // Consider triggered from axisPointer handle, verticalAlign should be 'middle'
-        // align: null,
-        // verticalAlign: null,
-
-        // 是否约束 content 在 viewRect 中。默认 false 是为了兼容以前版本。
-        confine: false,
-
-        // 内容格式器:{string}(Template) ¦ {Function}
-        // formatter: null
-
-        showDelay: 0,
-
-        // 隐藏延迟,单位ms
-        hideDelay: 100,
-
-        // 动画变换时间,单位s
-        transitionDuration: 0.4,
-
-        enterable: false,
-
-        // 提示背景颜色,默认为透明度为0.7的黑色
-        backgroundColor: 'rgba(50,50,50,0.7)',
-
-        // 提示边框颜色
-        borderColor: '#333',
-
-        // 提示边框圆角,单位px,默认为4
-        borderRadius: 4,
-
-        // 提示边框线宽,单位px,默认为0(无边框)
-        borderWidth: 0,
-
-        // 提示内边距,单位px,默认各方向内边距为5,
-        // 接受数组分别设定上右下左边距,同css
-        padding: 5,
-
-        // Extra css text
-        extraCssText: '',
-
-        // 坐标轴指示器,坐标轴触发有效
-        axisPointer: {
-            // 默认为直线
-            // 可选为:'line' | 'shadow' | 'cross'
-            type: 'line',
-
-            // type 为 line 的时候有效,指定 tooltip line 所在的轴,可选
-            // 可选 'x' | 'y' | 'angle' | 'radius' | 'auto'
-            // 默认 'auto',会选择类型为 category 的轴,对于双数值轴,笛卡尔坐标系会默认选择 x 轴
-            // 极坐标系会默认选择 angle 轴
-            axis: 'auto',
-
-            animation: 'auto',
-            animationDurationUpdate: 200,
-            animationEasingUpdate: 'exponentialOut',
-
-            crossStyle: {
-                color: '#999',
-                width: 1,
-                type: 'dashed',
-
-                // TODO formatter
-                textStyle: {}
-            }
-
-            // lineStyle and shadowStyle should not be specified here,
-            // otherwise it will always override those styles on option.axisPointer.
-        },
-        textStyle: {
-            color: '#fff',
-            fontSize: 14
-        }
-    }
-});

+ 0 - 191
admin/node_modules/echarts/src/component/tooltip/TooltipRichContent.js

@@ -1,191 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-// import Group from 'zrender/src/container/Group';
-import Text from 'zrender/src/graphic/Text';
-
-/**
- * @alias module:echarts/component/tooltip/TooltipRichContent
- * @constructor
- */
-function TooltipRichContent(api) {
-
-    this._zr = api.getZr();
-
-    this._show = false;
-
-    /**
-     * @private
-     */
-    this._hideTimeout;
-}
-
-TooltipRichContent.prototype = {
-
-    constructor: TooltipRichContent,
-
-    /**
-     * @private
-     * @type {boolean}
-     */
-    _enterable: true,
-
-    /**
-     * Update when tooltip is rendered
-     */
-    update: function () {
-        // noop
-    },
-
-    show: function (tooltipModel) {
-        if (this._hideTimeout) {
-            clearTimeout(this._hideTimeout);
-        }
-
-        this.el.attr('show', true);
-        this._show = true;
-    },
-
-    /**
-     * Set tooltip content
-     *
-     * @param {string} content rich text string of content
-     * @param {Object} markerRich rich text style
-     * @param {Object} tooltipModel tooltip model
-     */
-    setContent: function (content, markerRich, tooltipModel) {
-        if (this.el) {
-            this._zr.remove(this.el);
-        }
-
-        var markers = {};
-        var text = content;
-        var prefix = '{marker';
-        var suffix = '|}';
-        var startId = text.indexOf(prefix);
-        while (startId >= 0) {
-            var endId = text.indexOf(suffix);
-            var name = text.substr(startId + prefix.length, endId - startId - prefix.length);
-            if (name.indexOf('sub') > -1) {
-                markers['marker' + name] = {
-                    textWidth: 4,
-                    textHeight: 4,
-                    textBorderRadius: 2,
-                    textBackgroundColor: markerRich[name],
-                    // TODO: textOffset is not implemented for rich text
-                    textOffset: [3, 0]
-                };
-            }
-            else {
-                markers['marker' + name] = {
-                    textWidth: 10,
-                    textHeight: 10,
-                    textBorderRadius: 5,
-                    textBackgroundColor: markerRich[name]
-                };
-            }
-
-            text = text.substr(endId + 1);
-            startId = text.indexOf('{marker');
-        }
-
-        this.el = new Text({
-            style: {
-                rich: markers,
-                text: content,
-                textLineHeight: 20,
-                textBackgroundColor: tooltipModel.get('backgroundColor'),
-                textBorderRadius: tooltipModel.get('borderRadius'),
-                textFill: tooltipModel.get('textStyle.color'),
-                textPadding: tooltipModel.get('padding')
-            },
-            z: tooltipModel.get('z')
-        });
-        this._zr.add(this.el);
-
-        var self = this;
-        this.el.on('mouseover', function () {
-            // clear the timeout in hideLater and keep showing tooltip
-            if (self._enterable) {
-                clearTimeout(self._hideTimeout);
-                self._show = true;
-            }
-            self._inContent = true;
-        });
-        this.el.on('mouseout', function () {
-            if (self._enterable) {
-                if (self._show) {
-                    self.hideLater(self._hideDelay);
-                }
-            }
-            self._inContent = false;
-        });
-    },
-
-    setEnterable: function (enterable) {
-        this._enterable = enterable;
-    },
-
-    getSize: function () {
-        var bounding = this.el.getBoundingRect();
-        return [bounding.width, bounding.height];
-    },
-
-    moveTo: function (x, y) {
-        if (this.el) {
-            this.el.attr('position', [x, y]);
-        }
-    },
-
-    hide: function () {
-        if (this.el) {
-            this.el.hide();
-        }
-        this._show = false;
-    },
-
-    hideLater: function (time) {
-        if (this._show && !(this._inContent && this._enterable)) {
-            if (time) {
-                this._hideDelay = time;
-                // Set show false to avoid invoke hideLater mutiple times
-                this._show = false;
-                this._hideTimeout = setTimeout(zrUtil.bind(this.hide, this), time);
-            }
-            else {
-                this.hide();
-            }
-        }
-    },
-
-    isShow: function () {
-        return this._show;
-    },
-
-    getOuterSize: function () {
-        var size = this.getSize();
-        return {
-            width: size[0],
-            height: size[1]
-        };
-    }
-};
-
-export default TooltipRichContent;

+ 0 - 839
admin/node_modules/echarts/src/component/tooltip/TooltipView.js

@@ -1,839 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../echarts';
-import * as zrUtil from 'zrender/src/core/util';
-import env from 'zrender/src/core/env';
-import TooltipContent from './TooltipContent';
-import TooltipRichContent from './TooltipRichContent';
-import * as formatUtil from '../../util/format';
-import * as numberUtil from '../../util/number';
-import * as graphic from '../../util/graphic';
-import findPointFromSeries from '../axisPointer/findPointFromSeries';
-import * as layoutUtil from '../../util/layout';
-import Model from '../../model/Model';
-import * as globalListener from '../axisPointer/globalListener';
-import * as axisHelper from '../../coord/axisHelper';
-import * as axisPointerViewHelper from '../axisPointer/viewHelper';
-import { getTooltipRenderMode } from '../../util/model';
-
-var bind = zrUtil.bind;
-var each = zrUtil.each;
-var parsePercent = numberUtil.parsePercent;
-
-var proxyRect = new graphic.Rect({
-    shape: {x: -1, y: -1, width: 2, height: 2}
-});
-
-export default echarts.extendComponentView({
-
-    type: 'tooltip',
-
-    init: function (ecModel, api) {
-        if (env.node) {
-            return;
-        }
-
-        var tooltipModel = ecModel.getComponent('tooltip');
-        var renderMode = tooltipModel.get('renderMode');
-        this._renderMode = getTooltipRenderMode(renderMode);
-
-        var tooltipContent;
-        if (this._renderMode === 'html') {
-            tooltipContent = new TooltipContent(api.getDom(), api, {
-                appendToBody: tooltipModel.get('appendToBody', true)
-            });
-            this._newLine = '<br/>';
-        }
-        else {
-            tooltipContent = new TooltipRichContent(api);
-            this._newLine = '\n';
-        }
-
-        this._tooltipContent = tooltipContent;
-    },
-
-    render: function (tooltipModel, ecModel, api) {
-        if (env.node) {
-            return;
-        }
-
-        // Reset
-        this.group.removeAll();
-
-        /**
-         * @private
-         * @type {module:echarts/component/tooltip/TooltipModel}
-         */
-        this._tooltipModel = tooltipModel;
-
-        /**
-         * @private
-         * @type {module:echarts/model/Global}
-         */
-        this._ecModel = ecModel;
-
-        /**
-         * @private
-         * @type {module:echarts/ExtensionAPI}
-         */
-        this._api = api;
-
-        /**
-         * Should be cleaned when render.
-         * @private
-         * @type {Array.<Array.<Object>>}
-         */
-        this._lastDataByCoordSys = null;
-
-        /**
-         * @private
-         * @type {boolean}
-         */
-        this._alwaysShowContent = tooltipModel.get('alwaysShowContent');
-
-        var tooltipContent = this._tooltipContent;
-        tooltipContent.update();
-        tooltipContent.setEnterable(tooltipModel.get('enterable'));
-
-        this._initGlobalListener();
-
-        this._keepShow();
-    },
-
-    _initGlobalListener: function () {
-        var tooltipModel = this._tooltipModel;
-        var triggerOn = tooltipModel.get('triggerOn');
-
-        globalListener.register(
-            'itemTooltip',
-            this._api,
-            bind(function (currTrigger, e, dispatchAction) {
-                // If 'none', it is not controlled by mouse totally.
-                if (triggerOn !== 'none') {
-                    if (triggerOn.indexOf(currTrigger) >= 0) {
-                        this._tryShow(e, dispatchAction);
-                    }
-                    else if (currTrigger === 'leave') {
-                        this._hide(dispatchAction);
-                    }
-                }
-            }, this)
-        );
-    },
-
-    _keepShow: function () {
-        var tooltipModel = this._tooltipModel;
-        var ecModel = this._ecModel;
-        var api = this._api;
-
-        // Try to keep the tooltip show when refreshing
-        if (this._lastX != null
-            && this._lastY != null
-            // When user is willing to control tooltip totally using API,
-            // self.manuallyShowTip({x, y}) might cause tooltip hide,
-            // which is not expected.
-            && tooltipModel.get('triggerOn') !== 'none'
-        ) {
-            var self = this;
-            clearTimeout(this._refreshUpdateTimeout);
-            this._refreshUpdateTimeout = setTimeout(function () {
-                // Show tip next tick after other charts are rendered
-                // In case highlight action has wrong result
-                // FIXME
-                !api.isDisposed() && self.manuallyShowTip(tooltipModel, ecModel, api, {
-                    x: self._lastX,
-                    y: self._lastY
-                });
-            });
-        }
-    },
-
-    /**
-     * Show tip manually by
-     * dispatchAction({
-     *     type: 'showTip',
-     *     x: 10,
-     *     y: 10
-     * });
-     * Or
-     * dispatchAction({
-     *      type: 'showTip',
-     *      seriesIndex: 0,
-     *      dataIndex or dataIndexInside or name
-     * });
-     *
-     *  TODO Batch
-     */
-    manuallyShowTip: function (tooltipModel, ecModel, api, payload) {
-        if (payload.from === this.uid || env.node) {
-            return;
-        }
-
-        var dispatchAction = makeDispatchAction(payload, api);
-
-        // Reset ticket
-        this._ticket = '';
-
-        // When triggered from axisPointer.
-        var dataByCoordSys = payload.dataByCoordSys;
-
-        if (payload.tooltip && payload.x != null && payload.y != null) {
-            var el = proxyRect;
-            el.position = [payload.x, payload.y];
-            el.update();
-            el.tooltip = payload.tooltip;
-            // Manually show tooltip while view is not using zrender elements.
-            this._tryShow({
-                offsetX: payload.x,
-                offsetY: payload.y,
-                target: el
-            }, dispatchAction);
-        }
-        else if (dataByCoordSys) {
-            this._tryShow({
-                offsetX: payload.x,
-                offsetY: payload.y,
-                position: payload.position,
-                dataByCoordSys: payload.dataByCoordSys,
-                tooltipOption: payload.tooltipOption
-            }, dispatchAction);
-        }
-        else if (payload.seriesIndex != null) {
-
-            if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {
-                return;
-            }
-
-            var pointInfo = findPointFromSeries(payload, ecModel);
-            var cx = pointInfo.point[0];
-            var cy = pointInfo.point[1];
-            if (cx != null && cy != null) {
-                this._tryShow({
-                    offsetX: cx,
-                    offsetY: cy,
-                    position: payload.position,
-                    target: pointInfo.el
-                }, dispatchAction);
-            }
-        }
-        else if (payload.x != null && payload.y != null) {
-            // FIXME
-            // should wrap dispatchAction like `axisPointer/globalListener` ?
-            api.dispatchAction({
-                type: 'updateAxisPointer',
-                x: payload.x,
-                y: payload.y
-            });
-
-            this._tryShow({
-                offsetX: payload.x,
-                offsetY: payload.y,
-                position: payload.position,
-                target: api.getZr().findHover(payload.x, payload.y).target
-            }, dispatchAction);
-        }
-    },
-
-    manuallyHideTip: function (tooltipModel, ecModel, api, payload) {
-        var tooltipContent = this._tooltipContent;
-
-        if (!this._alwaysShowContent && this._tooltipModel) {
-            tooltipContent.hideLater(this._tooltipModel.get('hideDelay'));
-        }
-
-        this._lastX = this._lastY = null;
-
-        if (payload.from !== this.uid) {
-            this._hide(makeDispatchAction(payload, api));
-        }
-    },
-
-    // Be compatible with previous design, that is, when tooltip.type is 'axis' and
-    // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer
-    // and tooltip.
-    _manuallyAxisShowTip: function (tooltipModel, ecModel, api, payload) {
-        var seriesIndex = payload.seriesIndex;
-        var dataIndex = payload.dataIndex;
-        var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;
-
-        if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) {
-            return;
-        }
-
-        var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
-        if (!seriesModel) {
-            return;
-        }
-
-        var data = seriesModel.getData();
-        var tooltipModel = buildTooltipModel([
-            data.getItemModel(dataIndex),
-            seriesModel,
-            (seriesModel.coordinateSystem || {}).model,
-            tooltipModel
-        ]);
-
-        if (tooltipModel.get('trigger') !== 'axis') {
-            return;
-        }
-
-        api.dispatchAction({
-            type: 'updateAxisPointer',
-            seriesIndex: seriesIndex,
-            dataIndex: dataIndex,
-            position: payload.position
-        });
-
-        return true;
-    },
-
-    _tryShow: function (e, dispatchAction) {
-        var el = e.target;
-        var tooltipModel = this._tooltipModel;
-
-        if (!tooltipModel) {
-            return;
-        }
-
-        // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed
-        this._lastX = e.offsetX;
-        this._lastY = e.offsetY;
-
-        var dataByCoordSys = e.dataByCoordSys;
-        if (dataByCoordSys && dataByCoordSys.length) {
-            this._showAxisTooltip(dataByCoordSys, e);
-        }
-        // Always show item tooltip if mouse is on the element with dataIndex
-        else if (el && el.dataIndex != null) {
-            this._lastDataByCoordSys = null;
-            this._showSeriesItemTooltip(e, el, dispatchAction);
-        }
-        // Tooltip provided directly. Like legend.
-        else if (el && el.tooltip) {
-            this._lastDataByCoordSys = null;
-            this._showComponentItemTooltip(e, el, dispatchAction);
-        }
-        else {
-            this._lastDataByCoordSys = null;
-            this._hide(dispatchAction);
-        }
-    },
-
-    _showOrMove: function (tooltipModel, cb) {
-        // showDelay is used in this case: tooltip.enterable is set
-        // as true. User intent to move mouse into tooltip and click
-        // something. `showDelay` makes it easyer to enter the content
-        // but tooltip do not move immediately.
-        var delay = tooltipModel.get('showDelay');
-        cb = zrUtil.bind(cb, this);
-        clearTimeout(this._showTimout);
-        delay > 0
-            ? (this._showTimout = setTimeout(cb, delay))
-            : cb();
-    },
-
-    _showAxisTooltip: function (dataByCoordSys, e) {
-        var ecModel = this._ecModel;
-        var globalTooltipModel = this._tooltipModel;
-
-        var point = [e.offsetX, e.offsetY];
-
-        var singleDefaultHTML = [];
-        var singleParamsList = [];
-        var singleTooltipModel = buildTooltipModel([
-            e.tooltipOption,
-            globalTooltipModel
-        ]);
-
-        var renderMode = this._renderMode;
-        var newLine = this._newLine;
-
-        var markers = {};
-
-        each(dataByCoordSys, function (itemCoordSys) {
-            // var coordParamList = [];
-            // var coordDefaultHTML = [];
-            // var coordTooltipModel = buildTooltipModel([
-            //     e.tooltipOption,
-            //     itemCoordSys.tooltipOption,
-            //     ecModel.getComponent(itemCoordSys.coordSysMainType, itemCoordSys.coordSysIndex),
-            //     globalTooltipModel
-            // ]);
-            // var displayMode = coordTooltipModel.get('displayMode');
-            // var paramsList = displayMode === 'single' ? singleParamsList : [];
-
-            each(itemCoordSys.dataByAxis, function (item) {
-                var axisModel = ecModel.getComponent(item.axisDim + 'Axis', item.axisIndex);
-                var axisValue = item.value;
-                var seriesDefaultHTML = [];
-
-                if (!axisModel || axisValue == null) {
-                    return;
-                }
-
-                var valueLabel = axisPointerViewHelper.getValueLabel(
-                    axisValue, axisModel.axis, ecModel,
-                    item.seriesDataIndices,
-                    item.valueLabelOpt
-                );
-
-                zrUtil.each(item.seriesDataIndices, function (idxItem) {
-                    var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);
-                    var dataIndex = idxItem.dataIndexInside;
-                    var dataParams = series && series.getDataParams(dataIndex);
-                    dataParams.axisDim = item.axisDim;
-                    dataParams.axisIndex = item.axisIndex;
-                    dataParams.axisType = item.axisType;
-                    dataParams.axisId = item.axisId;
-                    dataParams.axisValue = axisHelper.getAxisRawValue(axisModel.axis, axisValue);
-                    dataParams.axisValueLabel = valueLabel;
-
-                    if (dataParams) {
-                        singleParamsList.push(dataParams);
-                        var seriesTooltip = series.formatTooltip(dataIndex, true, null, renderMode);
-
-                        var html;
-                        if (zrUtil.isObject(seriesTooltip)) {
-                            html = seriesTooltip.html;
-                            var newMarkers = seriesTooltip.markers;
-                            zrUtil.merge(markers, newMarkers);
-                        }
-                        else {
-                            html = seriesTooltip;
-                        }
-                        seriesDefaultHTML.push(html);
-                    }
-                });
-
-                // Default tooltip content
-                // FIXME
-                // (1) shold be the first data which has name?
-                // (2) themeRiver, firstDataIndex is array, and first line is unnecessary.
-                var firstLine = valueLabel;
-                if (renderMode !== 'html') {
-                    singleDefaultHTML.push(seriesDefaultHTML.join(newLine));
-                }
-                else {
-                    singleDefaultHTML.push(
-                        (firstLine ? formatUtil.encodeHTML(firstLine) + newLine : '')
-                        + seriesDefaultHTML.join(newLine)
-                    );
-                }
-            });
-        }, this);
-
-        // In most case, the second axis is shown upper than the first one.
-        singleDefaultHTML.reverse();
-        singleDefaultHTML = singleDefaultHTML.join(this._newLine + this._newLine);
-
-        var positionExpr = e.position;
-        this._showOrMove(singleTooltipModel, function () {
-            if (this._updateContentNotChangedOnAxis(dataByCoordSys)) {
-                this._updatePosition(
-                    singleTooltipModel,
-                    positionExpr,
-                    point[0], point[1],
-                    this._tooltipContent,
-                    singleParamsList
-                );
-            }
-            else {
-                this._showTooltipContent(
-                    singleTooltipModel, singleDefaultHTML, singleParamsList, Math.random(),
-                    point[0], point[1], positionExpr, undefined, markers
-                );
-            }
-        });
-
-        // Do not trigger events here, because this branch only be entered
-        // from dispatchAction.
-    },
-
-    _showSeriesItemTooltip: function (e, el, dispatchAction) {
-        var ecModel = this._ecModel;
-        // Use dataModel in element if possible
-        // Used when mouseover on a element like markPoint or edge
-        // In which case, the data is not main data in series.
-        var seriesIndex = el.seriesIndex;
-        var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
-
-        // For example, graph link.
-        var dataModel = el.dataModel || seriesModel;
-        var dataIndex = el.dataIndex;
-        var dataType = el.dataType;
-        var data = dataModel.getData(dataType);
-
-        var tooltipModel = buildTooltipModel([
-            data.getItemModel(dataIndex),
-            dataModel,
-            seriesModel && (seriesModel.coordinateSystem || {}).model,
-            this._tooltipModel
-        ]);
-
-        var tooltipTrigger = tooltipModel.get('trigger');
-        if (tooltipTrigger != null && tooltipTrigger !== 'item') {
-            return;
-        }
-
-        var params = dataModel.getDataParams(dataIndex, dataType);
-        var seriesTooltip = dataModel.formatTooltip(dataIndex, false, dataType, this._renderMode);
-        var defaultHtml;
-        var markers;
-        if (zrUtil.isObject(seriesTooltip)) {
-            defaultHtml = seriesTooltip.html;
-            markers = seriesTooltip.markers;
-        }
-        else {
-            defaultHtml = seriesTooltip;
-            markers = null;
-        }
-
-        var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex;
-
-        this._showOrMove(tooltipModel, function () {
-            this._showTooltipContent(
-                tooltipModel, defaultHtml, params, asyncTicket,
-                e.offsetX, e.offsetY, e.position, e.target, markers
-            );
-        });
-
-        // FIXME
-        // duplicated showtip if manuallyShowTip is called from dispatchAction.
-        dispatchAction({
-            type: 'showTip',
-            dataIndexInside: dataIndex,
-            dataIndex: data.getRawIndex(dataIndex),
-            seriesIndex: seriesIndex,
-            from: this.uid
-        });
-    },
-
-    _showComponentItemTooltip: function (e, el, dispatchAction) {
-        var tooltipOpt = el.tooltip;
-        if (typeof tooltipOpt === 'string') {
-            var content = tooltipOpt;
-            tooltipOpt = {
-                content: content,
-                // Fixed formatter
-                formatter: content
-            };
-        }
-        var subTooltipModel = new Model(tooltipOpt, this._tooltipModel, this._ecModel);
-        var defaultHtml = subTooltipModel.get('content');
-        var asyncTicket = Math.random();
-
-        // Do not check whether `trigger` is 'none' here, because `trigger`
-        // only works on cooridinate system. In fact, we have not found case
-        // that requires setting `trigger` nothing on component yet.
-
-        this._showOrMove(subTooltipModel, function () {
-            this._showTooltipContent(
-                subTooltipModel, defaultHtml, subTooltipModel.get('formatterParams') || {},
-                asyncTicket, e.offsetX, e.offsetY, e.position, el
-            );
-        });
-
-        // If not dispatch showTip, tip may be hide triggered by axis.
-        dispatchAction({
-            type: 'showTip',
-            from: this.uid
-        });
-    },
-
-    _showTooltipContent: function (
-        tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markers
-    ) {
-        // Reset ticket
-        this._ticket = '';
-
-        if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) {
-            return;
-        }
-
-        var tooltipContent = this._tooltipContent;
-
-        var formatter = tooltipModel.get('formatter');
-        positionExpr = positionExpr || tooltipModel.get('position');
-        var html = defaultHtml;
-
-        if (formatter && typeof formatter === 'string') {
-            html = formatUtil.formatTpl(formatter, params, true);
-        }
-        else if (typeof formatter === 'function') {
-            var callback = bind(function (cbTicket, html) {
-                if (cbTicket === this._ticket) {
-                    tooltipContent.setContent(html, markers, tooltipModel);
-                    this._updatePosition(
-                        tooltipModel, positionExpr, x, y, tooltipContent, params, el
-                    );
-                }
-            }, this);
-            this._ticket = asyncTicket;
-            html = formatter(params, asyncTicket, callback);
-        }
-
-        tooltipContent.setContent(html, markers, tooltipModel);
-        tooltipContent.show(tooltipModel);
-
-        this._updatePosition(
-            tooltipModel, positionExpr, x, y, tooltipContent, params, el
-        );
-    },
-
-    /**
-     * @param  {string|Function|Array.<number>|Object} positionExpr
-     * @param  {number} x Mouse x
-     * @param  {number} y Mouse y
-     * @param  {boolean} confine Whether confine tooltip content in view rect.
-     * @param  {Object|<Array.<Object>} params
-     * @param  {module:zrender/Element} el target element
-     * @param  {module:echarts/ExtensionAPI} api
-     * @return {Array.<number>}
-     */
-    _updatePosition: function (tooltipModel, positionExpr, x, y, content, params, el) {
-        var viewWidth = this._api.getWidth();
-        var viewHeight = this._api.getHeight();
-
-        positionExpr = positionExpr || tooltipModel.get('position');
-
-        var contentSize = content.getSize();
-        var align = tooltipModel.get('align');
-        var vAlign = tooltipModel.get('verticalAlign');
-        var rect = el && el.getBoundingRect().clone();
-        el && rect.applyTransform(el.transform);
-
-        if (typeof positionExpr === 'function') {
-            // Callback of position can be an array or a string specify the position
-            positionExpr = positionExpr([x, y], params, content.el, rect, {
-                viewSize: [viewWidth, viewHeight],
-                contentSize: contentSize.slice()
-            });
-        }
-
-        if (zrUtil.isArray(positionExpr)) {
-            x = parsePercent(positionExpr[0], viewWidth);
-            y = parsePercent(positionExpr[1], viewHeight);
-        }
-        else if (zrUtil.isObject(positionExpr)) {
-            positionExpr.width = contentSize[0];
-            positionExpr.height = contentSize[1];
-            var layoutRect = layoutUtil.getLayoutRect(
-                positionExpr, {width: viewWidth, height: viewHeight}
-            );
-            x = layoutRect.x;
-            y = layoutRect.y;
-            align = null;
-            // When positionExpr is left/top/right/bottom,
-            // align and verticalAlign will not work.
-            vAlign = null;
-        }
-        // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element
-        else if (typeof positionExpr === 'string' && el) {
-            var pos = calcTooltipPosition(
-                positionExpr, rect, contentSize
-            );
-            x = pos[0];
-            y = pos[1];
-        }
-        else {
-            var pos = refixTooltipPosition(
-                x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20
-            );
-            x = pos[0];
-            y = pos[1];
-        }
-
-        align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0);
-        vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0);
-
-        if (tooltipModel.get('confine')) {
-            var pos = confineTooltipPosition(
-                x, y, content, viewWidth, viewHeight
-            );
-            x = pos[0];
-            y = pos[1];
-        }
-
-        content.moveTo(x, y);
-    },
-
-    // FIXME
-    // Should we remove this but leave this to user?
-    _updateContentNotChangedOnAxis: function (dataByCoordSys) {
-        var lastCoordSys = this._lastDataByCoordSys;
-        var contentNotChanged = !!lastCoordSys
-            && lastCoordSys.length === dataByCoordSys.length;
-
-        contentNotChanged && each(lastCoordSys, function (lastItemCoordSys, indexCoordSys) {
-            var lastDataByAxis = lastItemCoordSys.dataByAxis || {};
-            var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {};
-            var thisDataByAxis = thisItemCoordSys.dataByAxis || [];
-            contentNotChanged &= lastDataByAxis.length === thisDataByAxis.length;
-
-            contentNotChanged && each(lastDataByAxis, function (lastItem, indexAxis) {
-                var thisItem = thisDataByAxis[indexAxis] || {};
-                var lastIndices = lastItem.seriesDataIndices || [];
-                var newIndices = thisItem.seriesDataIndices || [];
-
-                contentNotChanged
-                    &= lastItem.value === thisItem.value
-                    && lastItem.axisType === thisItem.axisType
-                    && lastItem.axisId === thisItem.axisId
-                    && lastIndices.length === newIndices.length;
-
-                contentNotChanged && each(lastIndices, function (lastIdxItem, j) {
-                    var newIdxItem = newIndices[j];
-                    contentNotChanged
-                        &= lastIdxItem.seriesIndex === newIdxItem.seriesIndex
-                        && lastIdxItem.dataIndex === newIdxItem.dataIndex;
-                });
-            });
-        });
-
-        this._lastDataByCoordSys = dataByCoordSys;
-
-        return !!contentNotChanged;
-    },
-
-    _hide: function (dispatchAction) {
-        // Do not directly hideLater here, because this behavior may be prevented
-        // in dispatchAction when showTip is dispatched.
-
-        // FIXME
-        // duplicated hideTip if manuallyHideTip is called from dispatchAction.
-        this._lastDataByCoordSys = null;
-        dispatchAction({
-            type: 'hideTip',
-            from: this.uid
-        });
-    },
-
-    dispose: function (ecModel, api) {
-        if (env.node) {
-            return;
-        }
-        this._tooltipContent.dispose();
-        globalListener.unregister('itemTooltip', api);
-    }
-});
-
-
-/**
- * @param {Array.<Object|module:echarts/model/Model>} modelCascade
- * From top to bottom. (the last one should be globalTooltipModel);
- */
-function buildTooltipModel(modelCascade) {
-    var resultModel = modelCascade.pop();
-    while (modelCascade.length) {
-        var tooltipOpt = modelCascade.pop();
-        if (tooltipOpt) {
-            if (Model.isInstance(tooltipOpt)) {
-                tooltipOpt = tooltipOpt.get('tooltip', true);
-            }
-            // In each data item tooltip can be simply write:
-            // {
-            //  value: 10,
-            //  tooltip: 'Something you need to know'
-            // }
-            if (typeof tooltipOpt === 'string') {
-                tooltipOpt = {formatter: tooltipOpt};
-            }
-            resultModel = new Model(tooltipOpt, resultModel, resultModel.ecModel);
-        }
-    }
-    return resultModel;
-}
-
-function makeDispatchAction(payload, api) {
-    return payload.dispatchAction || zrUtil.bind(api.dispatchAction, api);
-}
-
-function refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) {
-    var size = content.getOuterSize();
-    var width = size.width;
-    var height = size.height;
-
-    if (gapH != null) {
-        if (x + width + gapH > viewWidth) {
-            x -= width + gapH;
-        }
-        else {
-            x += gapH;
-        }
-    }
-    if (gapV != null) {
-        if (y + height + gapV > viewHeight) {
-            y -= height + gapV;
-        }
-        else {
-            y += gapV;
-        }
-    }
-    return [x, y];
-}
-
-function confineTooltipPosition(x, y, content, viewWidth, viewHeight) {
-    var size = content.getOuterSize();
-    var width = size.width;
-    var height = size.height;
-
-    x = Math.min(x + width, viewWidth) - width;
-    y = Math.min(y + height, viewHeight) - height;
-    x = Math.max(x, 0);
-    y = Math.max(y, 0);
-
-    return [x, y];
-}
-
-function calcTooltipPosition(position, rect, contentSize) {
-    var domWidth = contentSize[0];
-    var domHeight = contentSize[1];
-    var gap = 5;
-    var x = 0;
-    var y = 0;
-    var rectWidth = rect.width;
-    var rectHeight = rect.height;
-    switch (position) {
-        case 'inside':
-            x = rect.x + rectWidth / 2 - domWidth / 2;
-            y = rect.y + rectHeight / 2 - domHeight / 2;
-            break;
-        case 'top':
-            x = rect.x + rectWidth / 2 - domWidth / 2;
-            y = rect.y - domHeight - gap;
-            break;
-        case 'bottom':
-            x = rect.x + rectWidth / 2 - domWidth / 2;
-            y = rect.y + rectHeight + gap;
-            break;
-        case 'left':
-            x = rect.x - domWidth - gap;
-            y = rect.y + rectHeight / 2 - domHeight / 2;
-            break;
-        case 'right':
-            x = rect.x + rectWidth + gap;
-            y = rect.y + rectHeight / 2 - domHeight / 2;
-    }
-    return [x, y];
-}
-
-function isCenterAlign(align) {
-    return align === 'center' || align === 'middle';
-}

+ 0 - 25
admin/node_modules/echarts/src/component/visualMap.js

@@ -1,25 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * visualMap component entry
- */
-
-import './visualMapContinuous';
-import './visualMapPiecewise';

+ 0 - 261
admin/node_modules/echarts/src/component/visualMap/ContinuousModel.js

@@ -1,261 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import VisualMapModel from './VisualMapModel';
-import * as numberUtil from '../../util/number';
-
-// Constant
-var DEFAULT_BAR_BOUND = [20, 140];
-
-var ContinuousModel = VisualMapModel.extend({
-
-    type: 'visualMap.continuous',
-
-    /**
-     * @protected
-     */
-    defaultOption: {
-        align: 'auto',           // 'auto', 'left', 'right', 'top', 'bottom'
-        calculable: false,       // This prop effect default component type determine,
-                                 // See echarts/component/visualMap/typeDefaulter.
-        range: null,             // selected range. In default case `range` is [min, max]
-                                 // and can auto change along with modification of min max,
-                                 // util use specifid a range.
-        realtime: true,          // Whether realtime update.
-        itemHeight: null,        // The length of the range control edge.
-        itemWidth: null,         // The length of the other side.
-        hoverLink: true,         // Enable hover highlight.
-        hoverLinkDataSize: null, // The size of hovered data.
-        hoverLinkOnHandle: null  // Whether trigger hoverLink when hover handle.
-                                 // If not specified, follow the value of `realtime`.
-    },
-
-    /**
-     * @override
-     */
-    optionUpdated: function (newOption, isInit) {
-        ContinuousModel.superApply(this, 'optionUpdated', arguments);
-
-        this.resetExtent();
-
-        this.resetVisual(function (mappingOption) {
-            mappingOption.mappingMethod = 'linear';
-            mappingOption.dataExtent = this.getExtent();
-        });
-
-        this._resetRange();
-    },
-
-    /**
-     * @protected
-     * @override
-     */
-    resetItemSize: function () {
-        ContinuousModel.superApply(this, 'resetItemSize', arguments);
-
-        var itemSize = this.itemSize;
-
-        this._orient === 'horizontal' && itemSize.reverse();
-
-        (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]);
-        (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]);
-    },
-
-    /**
-     * @private
-     */
-    _resetRange: function () {
-        var dataExtent = this.getExtent();
-        var range = this.option.range;
-
-        if (!range || range.auto) {
-            // `range` should always be array (so we dont use other
-            // value like 'auto') for user-friend. (consider getOption).
-            dataExtent.auto = 1;
-            this.option.range = dataExtent;
-        }
-        else if (zrUtil.isArray(range)) {
-            if (range[0] > range[1]) {
-                range.reverse();
-            }
-            range[0] = Math.max(range[0], dataExtent[0]);
-            range[1] = Math.min(range[1], dataExtent[1]);
-        }
-    },
-
-    /**
-     * @protected
-     * @override
-     */
-    completeVisualOption: function () {
-        VisualMapModel.prototype.completeVisualOption.apply(this, arguments);
-
-        zrUtil.each(this.stateList, function (state) {
-            var symbolSize = this.option.controller[state].symbolSize;
-            if (symbolSize && symbolSize[0] !== symbolSize[1]) {
-                symbolSize[0] = 0; // For good looking.
-            }
-        }, this);
-    },
-
-    /**
-     * @override
-     */
-    setSelected: function (selected) {
-        this.option.range = selected.slice();
-        this._resetRange();
-    },
-
-    /**
-     * @public
-     */
-    getSelected: function () {
-        var dataExtent = this.getExtent();
-
-        var dataInterval = numberUtil.asc(
-            (this.get('range') || []).slice()
-        );
-
-        // Clamp
-        dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]);
-        dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]);
-        dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]);
-        dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]);
-
-        return dataInterval;
-    },
-
-    /**
-     * @override
-     */
-    getValueState: function (value) {
-        var range = this.option.range;
-        var dataExtent = this.getExtent();
-
-        // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'.
-        // range[1] is processed likewise.
-        return (
-            (range[0] <= dataExtent[0] || range[0] <= value)
-            && (range[1] >= dataExtent[1] || value <= range[1])
-        ) ? 'inRange' : 'outOfRange';
-    },
-
-    /**
-     * @params {Array.<number>} range target value: range[0] <= value && value <= range[1]
-     * @return {Array.<Object>} [{seriesId, dataIndices: <Array.<number>>}, ...]
-     */
-    findTargetDataIndices: function (range) {
-        var result = [];
-
-        this.eachTargetSeries(function (seriesModel) {
-            var dataIndices = [];
-            var data = seriesModel.getData();
-
-            data.each(this.getDataDimension(data), function (value, dataIndex) {
-                range[0] <= value && value <= range[1] && dataIndices.push(dataIndex);
-            }, this);
-
-            result.push({seriesId: seriesModel.id, dataIndex: dataIndices});
-        }, this);
-
-        return result;
-    },
-
-    /**
-     * @implement
-     */
-    getVisualMeta: function (getColorVisual) {
-        var oVals = getColorStopValues(this, 'outOfRange', this.getExtent());
-        var iVals = getColorStopValues(this, 'inRange', this.option.range.slice());
-        var stops = [];
-
-        function setStop(value, valueState) {
-            stops.push({
-                value: value,
-                color: getColorVisual(value, valueState)
-            });
-        }
-
-        // Format to: outOfRange -- inRange -- outOfRange.
-        var iIdx = 0;
-        var oIdx = 0;
-        var iLen = iVals.length;
-        var oLen = oVals.length;
-
-        for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) {
-            // If oVal[oIdx] === iVals[iIdx], oVal[oIdx] should be ignored.
-            if (oVals[oIdx] < iVals[iIdx]) {
-                setStop(oVals[oIdx], 'outOfRange');
-            }
-        }
-        for (var first = 1; iIdx < iLen; iIdx++, first = 0) {
-            // If range is full, value beyond min, max will be clamped.
-            // make a singularity
-            first && stops.length && setStop(iVals[iIdx], 'outOfRange');
-            setStop(iVals[iIdx], 'inRange');
-        }
-        for (var first = 1; oIdx < oLen; oIdx++) {
-            if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) {
-                // make a singularity
-                if (first) {
-                    stops.length && setStop(stops[stops.length - 1].value, 'outOfRange');
-                    first = 0;
-                }
-                setStop(oVals[oIdx], 'outOfRange');
-            }
-        }
-
-        var stopsLen = stops.length;
-
-        return {
-            stops: stops,
-            outerColors: [
-                stopsLen ? stops[0].color : 'transparent',
-                stopsLen ? stops[stopsLen - 1].color : 'transparent'
-            ]
-        };
-    }
-
-});
-
-function getColorStopValues(visualMapModel, valueState, dataExtent) {
-    if (dataExtent[0] === dataExtent[1]) {
-        return dataExtent.slice();
-    }
-
-    // When using colorHue mapping, it is not linear color any more.
-    // Moreover, canvas gradient seems not to be accurate linear.
-    // FIXME
-    // Should be arbitrary value 100? or based on pixel size?
-    var count = 200;
-    var step = (dataExtent[1] - dataExtent[0]) / count;
-
-    var value = dataExtent[0];
-    var stopValues = [];
-    for (var i = 0; i <= count && value < dataExtent[1]; i++) {
-        stopValues.push(value);
-        value += step;
-    }
-    stopValues.push(dataExtent[1]);
-
-    return stopValues;
-}
-
-export default ContinuousModel;

+ 0 - 863
admin/node_modules/echarts/src/component/visualMap/ContinuousView.js

@@ -1,863 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import LinearGradient from 'zrender/src/graphic/LinearGradient';
-import * as eventTool from 'zrender/src/core/event';
-import VisualMapView from './VisualMapView';
-import * as graphic from '../../util/graphic';
-import * as numberUtil from '../../util/number';
-import sliderMove from '../helper/sliderMove';
-import * as helper from './helper';
-import * as modelUtil from '../../util/model';
-
-var linearMap = numberUtil.linearMap;
-var each = zrUtil.each;
-var mathMin = Math.min;
-var mathMax = Math.max;
-
-// Arbitrary value
-var HOVER_LINK_SIZE = 12;
-var HOVER_LINK_OUT = 6;
-
-// Notice:
-// Any "interval" should be by the order of [low, high].
-// "handle0" (handleIndex === 0) maps to
-// low data value: this._dataInterval[0] and has low coord.
-// "handle1" (handleIndex === 1) maps to
-// high data value: this._dataInterval[1] and has high coord.
-// The logic of transform is implemented in this._createBarGroup.
-
-var ContinuousView = VisualMapView.extend({
-
-    type: 'visualMap.continuous',
-
-    /**
-     * @override
-     */
-    init: function () {
-
-        ContinuousView.superApply(this, 'init', arguments);
-
-        /**
-         * @private
-         */
-        this._shapes = {};
-
-        /**
-         * @private
-         */
-        this._dataInterval = [];
-
-        /**
-         * @private
-         */
-        this._handleEnds = [];
-
-        /**
-         * @private
-         */
-        this._orient;
-
-        /**
-         * @private
-         */
-        this._useHandle;
-
-        /**
-         * @private
-         */
-        this._hoverLinkDataIndices = [];
-
-        /**
-         * @private
-         */
-        this._dragging;
-
-        /**
-         * @private
-         */
-        this._hovering;
-    },
-
-    /**
-     * @protected
-     * @override
-     */
-    doRender: function (visualMapModel, ecModel, api, payload) {
-        if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) {
-            this._buildView();
-        }
-    },
-
-    /**
-     * @private
-     */
-    _buildView: function () {
-        this.group.removeAll();
-
-        var visualMapModel = this.visualMapModel;
-        var thisGroup = this.group;
-
-        this._orient = visualMapModel.get('orient');
-        this._useHandle = visualMapModel.get('calculable');
-
-        this._resetInterval();
-
-        this._renderBar(thisGroup);
-
-        var dataRangeText = visualMapModel.get('text');
-        this._renderEndsText(thisGroup, dataRangeText, 0);
-        this._renderEndsText(thisGroup, dataRangeText, 1);
-
-        // Do this for background size calculation.
-        this._updateView(true);
-
-        // After updating view, inner shapes is built completely,
-        // and then background can be rendered.
-        this.renderBackground(thisGroup);
-
-        // Real update view
-        this._updateView();
-
-        this._enableHoverLinkToSeries();
-        this._enableHoverLinkFromSeries();
-
-        this.positionGroup(thisGroup);
-    },
-
-    /**
-     * @private
-     */
-    _renderEndsText: function (group, dataRangeText, endsIndex) {
-        if (!dataRangeText) {
-            return;
-        }
-
-        // Compatible with ec2, text[0] map to high value, text[1] map low value.
-        var text = dataRangeText[1 - endsIndex];
-        text = text != null ? text + '' : '';
-
-        var visualMapModel = this.visualMapModel;
-        var textGap = visualMapModel.get('textGap');
-        var itemSize = visualMapModel.itemSize;
-
-        var barGroup = this._shapes.barGroup;
-        var position = this._applyTransform(
-            [
-                itemSize[0] / 2,
-                endsIndex === 0 ? -textGap : itemSize[1] + textGap
-            ],
-            barGroup
-        );
-        var align = this._applyTransform(
-            endsIndex === 0 ? 'bottom' : 'top',
-            barGroup
-        );
-        var orient = this._orient;
-        var textStyleModel = this.visualMapModel.textStyleModel;
-
-        this.group.add(new graphic.Text({
-            style: {
-                x: position[0],
-                y: position[1],
-                textVerticalAlign: orient === 'horizontal' ? 'middle' : align,
-                textAlign: orient === 'horizontal' ? align : 'center',
-                text: text,
-                textFont: textStyleModel.getFont(),
-                textFill: textStyleModel.getTextColor()
-            }
-        }));
-    },
-
-    /**
-     * @private
-     */
-    _renderBar: function (targetGroup) {
-        var visualMapModel = this.visualMapModel;
-        var shapes = this._shapes;
-        var itemSize = visualMapModel.itemSize;
-        var orient = this._orient;
-        var useHandle = this._useHandle;
-        var itemAlign = helper.getItemAlign(visualMapModel, this.api, itemSize);
-        var barGroup = shapes.barGroup = this._createBarGroup(itemAlign);
-
-        // Bar
-        barGroup.add(shapes.outOfRange = createPolygon());
-        barGroup.add(shapes.inRange = createPolygon(
-            null,
-            useHandle ? getCursor(this._orient) : null,
-            zrUtil.bind(this._dragHandle, this, 'all', false),
-            zrUtil.bind(this._dragHandle, this, 'all', true)
-        ));
-
-        var textRect = visualMapModel.textStyleModel.getTextRect('国');
-        var textSize = mathMax(textRect.width, textRect.height);
-
-        // Handle
-        if (useHandle) {
-            shapes.handleThumbs = [];
-            shapes.handleLabels = [];
-            shapes.handleLabelPoints = [];
-
-            this._createHandle(barGroup, 0, itemSize, textSize, orient, itemAlign);
-            this._createHandle(barGroup, 1, itemSize, textSize, orient, itemAlign);
-        }
-
-        this._createIndicator(barGroup, itemSize, textSize, orient);
-
-        targetGroup.add(barGroup);
-    },
-
-    /**
-     * @private
-     */
-    _createHandle: function (barGroup, handleIndex, itemSize, textSize, orient) {
-        var onDrift = zrUtil.bind(this._dragHandle, this, handleIndex, false);
-        var onDragEnd = zrUtil.bind(this._dragHandle, this, handleIndex, true);
-        var handleThumb = createPolygon(
-            createHandlePoints(handleIndex, textSize),
-            getCursor(this._orient),
-            onDrift,
-            onDragEnd
-        );
-        handleThumb.position[0] = itemSize[0];
-        barGroup.add(handleThumb);
-
-        // Text is always horizontal layout but should not be effected by
-        // transform (orient/inverse). So label is built separately but not
-        // use zrender/graphic/helper/RectText, and is located based on view
-        // group (according to handleLabelPoint) but not barGroup.
-        var textStyleModel = this.visualMapModel.textStyleModel;
-        var handleLabel = new graphic.Text({
-            draggable: true,
-            drift: onDrift,
-            onmousemove: function (e) {
-                // Fot mobile devicem, prevent screen slider on the button.
-                eventTool.stop(e.event);
-            },
-            ondragend: onDragEnd,
-            style: {
-                x: 0, y: 0, text: '',
-                textFont: textStyleModel.getFont(),
-                textFill: textStyleModel.getTextColor()
-            }
-        });
-        this.group.add(handleLabel);
-
-        var handleLabelPoint = [
-            orient === 'horizontal'
-                ? textSize / 2
-                : textSize * 1.5,
-            orient === 'horizontal'
-                ? (handleIndex === 0 ? -(textSize * 1.5) : (textSize * 1.5))
-                : (handleIndex === 0 ? -textSize / 2 : textSize / 2)
-        ];
-
-        var shapes = this._shapes;
-        shapes.handleThumbs[handleIndex] = handleThumb;
-        shapes.handleLabelPoints[handleIndex] = handleLabelPoint;
-        shapes.handleLabels[handleIndex] = handleLabel;
-    },
-
-    /**
-     * @private
-     */
-    _createIndicator: function (barGroup, itemSize, textSize, orient) {
-        var indicator = createPolygon([[0, 0]], 'move');
-        indicator.position[0] = itemSize[0];
-        indicator.attr({invisible: true, silent: true});
-        barGroup.add(indicator);
-
-        var textStyleModel = this.visualMapModel.textStyleModel;
-        var indicatorLabel = new graphic.Text({
-            silent: true,
-            invisible: true,
-            style: {
-                x: 0, y: 0, text: '',
-                textFont: textStyleModel.getFont(),
-                textFill: textStyleModel.getTextColor()
-            }
-        });
-        this.group.add(indicatorLabel);
-
-        var indicatorLabelPoint = [
-            orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT + 3,
-            0
-        ];
-
-        var shapes = this._shapes;
-        shapes.indicator = indicator;
-        shapes.indicatorLabel = indicatorLabel;
-        shapes.indicatorLabelPoint = indicatorLabelPoint;
-    },
-
-    /**
-     * @private
-     */
-    _dragHandle: function (handleIndex, isEnd, dx, dy) {
-        if (!this._useHandle) {
-            return;
-        }
-
-        this._dragging = !isEnd;
-
-        if (!isEnd) {
-            // Transform dx, dy to bar coordination.
-            var vertex = this._applyTransform([dx, dy], this._shapes.barGroup, true);
-            this._updateInterval(handleIndex, vertex[1]);
-
-            // Considering realtime, update view should be executed
-            // before dispatch action.
-            this._updateView();
-        }
-
-        // dragEnd do not dispatch action when realtime.
-        if (isEnd === !this.visualMapModel.get('realtime')) { // jshint ignore:line
-            this.api.dispatchAction({
-                type: 'selectDataRange',
-                from: this.uid,
-                visualMapId: this.visualMapModel.id,
-                selected: this._dataInterval.slice()
-            });
-        }
-
-        if (isEnd) {
-            !this._hovering && this._clearHoverLinkToSeries();
-        }
-        else if (useHoverLinkOnHandle(this.visualMapModel)) {
-            this._doHoverLinkToSeries(this._handleEnds[handleIndex], false);
-        }
-    },
-
-    /**
-     * @private
-     */
-    _resetInterval: function () {
-        var visualMapModel = this.visualMapModel;
-
-        var dataInterval = this._dataInterval = visualMapModel.getSelected();
-        var dataExtent = visualMapModel.getExtent();
-        var sizeExtent = [0, visualMapModel.itemSize[1]];
-
-        this._handleEnds = [
-            linearMap(dataInterval[0], dataExtent, sizeExtent, true),
-            linearMap(dataInterval[1], dataExtent, sizeExtent, true)
-        ];
-    },
-
-    /**
-     * @private
-     * @param {(number|string)} handleIndex 0 or 1 or 'all'
-     * @param {number} dx
-     * @param {number} dy
-     */
-    _updateInterval: function (handleIndex, delta) {
-        delta = delta || 0;
-        var visualMapModel = this.visualMapModel;
-        var handleEnds = this._handleEnds;
-        var sizeExtent = [0, visualMapModel.itemSize[1]];
-
-        sliderMove(
-            delta,
-            handleEnds,
-            sizeExtent,
-            handleIndex,
-            // cross is forbiden
-            0
-        );
-
-        var dataExtent = visualMapModel.getExtent();
-        // Update data interval.
-        this._dataInterval = [
-            linearMap(handleEnds[0], sizeExtent, dataExtent, true),
-            linearMap(handleEnds[1], sizeExtent, dataExtent, true)
-        ];
-    },
-
-    /**
-     * @private
-     */
-    _updateView: function (forSketch) {
-        var visualMapModel = this.visualMapModel;
-        var dataExtent = visualMapModel.getExtent();
-        var shapes = this._shapes;
-
-        var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]];
-        var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds;
-
-        var visualInRange = this._createBarVisual(
-            this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange'
-        );
-        var visualOutOfRange = this._createBarVisual(
-            dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange'
-        );
-
-        shapes.inRange
-            .setStyle({
-                fill: visualInRange.barColor,
-                opacity: visualInRange.opacity
-            })
-            .setShape('points', visualInRange.barPoints);
-        shapes.outOfRange
-            .setStyle({
-                fill: visualOutOfRange.barColor,
-                opacity: visualOutOfRange.opacity
-            })
-            .setShape('points', visualOutOfRange.barPoints);
-
-        this._updateHandle(inRangeHandleEnds, visualInRange);
-    },
-
-    /**
-     * @private
-     */
-    _createBarVisual: function (dataInterval, dataExtent, handleEnds, forceState) {
-        var opts = {
-            forceState: forceState,
-            convertOpacityToAlpha: true
-        };
-        var colorStops = this._makeColorGradient(dataInterval, opts);
-
-        var symbolSizes = [
-            this.getControllerVisual(dataInterval[0], 'symbolSize', opts),
-            this.getControllerVisual(dataInterval[1], 'symbolSize', opts)
-        ];
-        var barPoints = this._createBarPoints(handleEnds, symbolSizes);
-
-        return {
-            barColor: new LinearGradient(0, 0, 0, 1, colorStops),
-            barPoints: barPoints,
-            handlesColor: [
-                colorStops[0].color,
-                colorStops[colorStops.length - 1].color
-            ]
-        };
-    },
-
-    /**
-     * @private
-     */
-    _makeColorGradient: function (dataInterval, opts) {
-        // Considering colorHue, which is not linear, so we have to sample
-        // to calculate gradient color stops, but not only caculate head
-        // and tail.
-        var sampleNumber = 100; // Arbitrary value.
-        var colorStops = [];
-        var step = (dataInterval[1] - dataInterval[0]) / sampleNumber;
-
-        colorStops.push({
-            color: this.getControllerVisual(dataInterval[0], 'color', opts),
-            offset: 0
-        });
-
-        for (var i = 1; i < sampleNumber; i++) {
-            var currValue = dataInterval[0] + step * i;
-            if (currValue > dataInterval[1]) {
-                break;
-            }
-            colorStops.push({
-                color: this.getControllerVisual(currValue, 'color', opts),
-                offset: i / sampleNumber
-            });
-        }
-
-        colorStops.push({
-            color: this.getControllerVisual(dataInterval[1], 'color', opts),
-            offset: 1
-        });
-
-        return colorStops;
-    },
-
-    /**
-     * @private
-     */
-    _createBarPoints: function (handleEnds, symbolSizes) {
-        var itemSize = this.visualMapModel.itemSize;
-
-        return [
-            [itemSize[0] - symbolSizes[0], handleEnds[0]],
-            [itemSize[0], handleEnds[0]],
-            [itemSize[0], handleEnds[1]],
-            [itemSize[0] - symbolSizes[1], handleEnds[1]]
-        ];
-    },
-
-    /**
-     * @private
-     */
-    _createBarGroup: function (itemAlign) {
-        var orient = this._orient;
-        var inverse = this.visualMapModel.get('inverse');
-
-        return new graphic.Group(
-            (orient === 'horizontal' && !inverse)
-            ? {scale: itemAlign === 'bottom' ? [1, 1] : [-1, 1], rotation: Math.PI / 2}
-            : (orient === 'horizontal' && inverse)
-            ? {scale: itemAlign === 'bottom' ? [-1, 1] : [1, 1], rotation: -Math.PI / 2}
-            : (orient === 'vertical' && !inverse)
-            ? {scale: itemAlign === 'left' ? [1, -1] : [-1, -1]}
-            : {scale: itemAlign === 'left' ? [1, 1] : [-1, 1]}
-        );
-    },
-
-    /**
-     * @private
-     */
-    _updateHandle: function (handleEnds, visualInRange) {
-        if (!this._useHandle) {
-            return;
-        }
-
-        var shapes = this._shapes;
-        var visualMapModel = this.visualMapModel;
-        var handleThumbs = shapes.handleThumbs;
-        var handleLabels = shapes.handleLabels;
-
-        each([0, 1], function (handleIndex) {
-            var handleThumb = handleThumbs[handleIndex];
-            handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]);
-            handleThumb.position[1] = handleEnds[handleIndex];
-
-            // Update handle label position.
-            var textPoint = graphic.applyTransform(
-                shapes.handleLabelPoints[handleIndex],
-                graphic.getTransform(handleThumb, this.group)
-            );
-            handleLabels[handleIndex].setStyle({
-                x: textPoint[0],
-                y: textPoint[1],
-                text: visualMapModel.formatValueText(this._dataInterval[handleIndex]),
-                textVerticalAlign: 'middle',
-                textAlign: this._applyTransform(
-                    this._orient === 'horizontal'
-                        ? (handleIndex === 0 ? 'bottom' : 'top')
-                        : 'left',
-                    shapes.barGroup
-                )
-            });
-        }, this);
-    },
-
-    /**
-     * @private
-     * @param {number} cursorValue
-     * @param {number} textValue
-     * @param {string} [rangeSymbol]
-     * @param {number} [halfHoverLinkSize]
-     */
-    _showIndicator: function (cursorValue, textValue, rangeSymbol, halfHoverLinkSize) {
-        var visualMapModel = this.visualMapModel;
-        var dataExtent = visualMapModel.getExtent();
-        var itemSize = visualMapModel.itemSize;
-        var sizeExtent = [0, itemSize[1]];
-        var pos = linearMap(cursorValue, dataExtent, sizeExtent, true);
-
-        var shapes = this._shapes;
-        var indicator = shapes.indicator;
-        if (!indicator) {
-            return;
-        }
-
-        indicator.position[1] = pos;
-        indicator.attr('invisible', false);
-        indicator.setShape('points', createIndicatorPoints(
-            !!rangeSymbol, halfHoverLinkSize, pos, itemSize[1]
-        ));
-
-        var opts = {convertOpacityToAlpha: true};
-        var color = this.getControllerVisual(cursorValue, 'color', opts);
-        indicator.setStyle('fill', color);
-
-        // Update handle label position.
-        var textPoint = graphic.applyTransform(
-            shapes.indicatorLabelPoint,
-            graphic.getTransform(indicator, this.group)
-        );
-
-        var indicatorLabel = shapes.indicatorLabel;
-        indicatorLabel.attr('invisible', false);
-        var align = this._applyTransform('left', shapes.barGroup);
-        var orient = this._orient;
-        indicatorLabel.setStyle({
-            text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue),
-            textVerticalAlign: orient === 'horizontal' ? align : 'middle',
-            textAlign: orient === 'horizontal' ? 'center' : align,
-            x: textPoint[0],
-            y: textPoint[1]
-        });
-    },
-
-    /**
-     * @private
-     */
-    _enableHoverLinkToSeries: function () {
-        var self = this;
-        this._shapes.barGroup
-
-            .on('mousemove', function (e) {
-                self._hovering = true;
-
-                if (!self._dragging) {
-                    var itemSize = self.visualMapModel.itemSize;
-                    var pos = self._applyTransform(
-                        [e.offsetX, e.offsetY], self._shapes.barGroup, true, true
-                    );
-                    // For hover link show when hover handle, which might be
-                    // below or upper than sizeExtent.
-                    pos[1] = mathMin(mathMax(0, pos[1]), itemSize[1]);
-                    self._doHoverLinkToSeries(
-                        pos[1],
-                        0 <= pos[0] && pos[0] <= itemSize[0]
-                    );
-                }
-            })
-
-            .on('mouseout', function () {
-                // When mouse is out of handle, hoverLink still need
-                // to be displayed when realtime is set as false.
-                self._hovering = false;
-                !self._dragging && self._clearHoverLinkToSeries();
-            });
-    },
-
-    /**
-     * @private
-     */
-    _enableHoverLinkFromSeries: function () {
-        var zr = this.api.getZr();
-
-        if (this.visualMapModel.option.hoverLink) {
-            zr.on('mouseover', this._hoverLinkFromSeriesMouseOver, this);
-            zr.on('mouseout', this._hideIndicator, this);
-        }
-        else {
-            this._clearHoverLinkFromSeries();
-        }
-    },
-
-    /**
-     * @private
-     */
-    _doHoverLinkToSeries: function (cursorPos, hoverOnBar) {
-        var visualMapModel = this.visualMapModel;
-        var itemSize = visualMapModel.itemSize;
-
-        if (!visualMapModel.option.hoverLink) {
-            return;
-        }
-
-        var sizeExtent = [0, itemSize[1]];
-        var dataExtent = visualMapModel.getExtent();
-
-        // For hover link show when hover handle, which might be below or upper than sizeExtent.
-        cursorPos = mathMin(mathMax(sizeExtent[0], cursorPos), sizeExtent[1]);
-
-        var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent);
-        var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize];
-        var cursorValue = linearMap(cursorPos, sizeExtent, dataExtent, true);
-        var valueRange = [
-            linearMap(hoverRange[0], sizeExtent, dataExtent, true),
-            linearMap(hoverRange[1], sizeExtent, dataExtent, true)
-        ];
-        // Consider data range is out of visualMap range, see test/visualMap-continuous.html,
-        // where china and india has very large population.
-        hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity);
-        hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity);
-
-        // Do not show indicator when mouse is over handle,
-        // otherwise labels overlap, especially when dragging.
-        if (hoverOnBar) {
-            if (valueRange[0] === -Infinity) {
-                this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize);
-            }
-            else if (valueRange[1] === Infinity) {
-                this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize);
-            }
-            else {
-                this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize);
-            }
-        }
-
-        // When realtime is set as false, handles, which are in barGroup,
-        // also trigger hoverLink, which help user to realize where they
-        // focus on when dragging. (see test/heatmap-large.html)
-        // When realtime is set as true, highlight will not show when hover
-        // handle, because the label on handle, which displays a exact value
-        // but not range, might mislead users.
-        var oldBatch = this._hoverLinkDataIndices;
-        var newBatch = [];
-        if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) {
-            newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange);
-        }
-
-        var resultBatches = modelUtil.compressBatches(oldBatch, newBatch);
-
-        this._dispatchHighDown('downplay', helper.makeHighDownBatch(resultBatches[0], visualMapModel));
-        this._dispatchHighDown('highlight', helper.makeHighDownBatch(resultBatches[1], visualMapModel));
-    },
-
-    /**
-     * @private
-     */
-    _hoverLinkFromSeriesMouseOver: function (e) {
-        var el = e.target;
-        var visualMapModel = this.visualMapModel;
-
-        if (!el || el.dataIndex == null) {
-            return;
-        }
-
-        var dataModel = this.ecModel.getSeriesByIndex(el.seriesIndex);
-
-        if (!visualMapModel.isTargetSeries(dataModel)) {
-            return;
-        }
-
-        var data = dataModel.getData(el.dataType);
-        var value = data.get(visualMapModel.getDataDimension(data), el.dataIndex, true);
-
-        if (!isNaN(value)) {
-            this._showIndicator(value, value);
-        }
-    },
-
-    /**
-     * @private
-     */
-    _hideIndicator: function () {
-        var shapes = this._shapes;
-        shapes.indicator && shapes.indicator.attr('invisible', true);
-        shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true);
-    },
-
-    /**
-     * @private
-     */
-    _clearHoverLinkToSeries: function () {
-        this._hideIndicator();
-
-        var indices = this._hoverLinkDataIndices;
-        this._dispatchHighDown('downplay', helper.makeHighDownBatch(indices, this.visualMapModel));
-
-        indices.length = 0;
-    },
-
-    /**
-     * @private
-     */
-    _clearHoverLinkFromSeries: function () {
-        this._hideIndicator();
-
-        var zr = this.api.getZr();
-        zr.off('mouseover', this._hoverLinkFromSeriesMouseOver);
-        zr.off('mouseout', this._hideIndicator);
-    },
-
-    /**
-     * @private
-     */
-    _applyTransform: function (vertex, element, inverse, global) {
-        var transform = graphic.getTransform(element, global ? null : this.group);
-
-        return graphic[
-            zrUtil.isArray(vertex) ? 'applyTransform' : 'transformDirection'
-        ](vertex, transform, inverse);
-    },
-
-    /**
-     * @private
-     */
-    _dispatchHighDown: function (type, batch) {
-        batch && batch.length && this.api.dispatchAction({
-            type: type,
-            batch: batch
-        });
-    },
-
-    /**
-     * @override
-     */
-    dispose: function () {
-        this._clearHoverLinkFromSeries();
-        this._clearHoverLinkToSeries();
-    },
-
-    /**
-     * @override
-     */
-    remove: function () {
-        this._clearHoverLinkFromSeries();
-        this._clearHoverLinkToSeries();
-    }
-
-});
-
-function createPolygon(points, cursor, onDrift, onDragEnd) {
-    return new graphic.Polygon({
-        shape: {points: points},
-        draggable: !!onDrift,
-        cursor: cursor,
-        drift: onDrift,
-        onmousemove: function (e) {
-            // Fot mobile devicem, prevent screen slider on the button.
-            eventTool.stop(e.event);
-        },
-        ondragend: onDragEnd
-    });
-}
-
-function createHandlePoints(handleIndex, textSize) {
-    return handleIndex === 0
-        ? [[0, 0], [textSize, 0], [textSize, -textSize]]
-        : [[0, 0], [textSize, 0], [textSize, textSize]];
-}
-
-function createIndicatorPoints(isRange, halfHoverLinkSize, pos, extentMax) {
-    return isRange
-        ? [ // indicate range
-            [0, -mathMin(halfHoverLinkSize, mathMax(pos, 0))],
-            [HOVER_LINK_OUT, 0],
-            [0, mathMin(halfHoverLinkSize, mathMax(extentMax - pos, 0))]
-        ]
-        : [ // indicate single value
-            [0, 0], [5, -5], [5, 5]
-        ];
-}
-
-function getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) {
-    var halfHoverLinkSize = HOVER_LINK_SIZE / 2;
-    var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize');
-    if (hoverLinkDataSize) {
-        halfHoverLinkSize = linearMap(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2;
-    }
-    return halfHoverLinkSize;
-}
-
-function useHoverLinkOnHandle(visualMapModel) {
-    var hoverLinkOnHandle = visualMapModel.get('hoverLinkOnHandle');
-    return !!(hoverLinkOnHandle == null ? visualMapModel.get('realtime') : hoverLinkOnHandle);
-}
-
-function getCursor(orient) {
-    return orient === 'vertical' ? 'ns-resize' : 'ew-resize';
-}
-
-export default ContinuousView;

+ 0 - 540
admin/node_modules/echarts/src/component/visualMap/PiecewiseModel.js

@@ -1,540 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {__DEV__} from '../../config';
-import * as zrUtil from 'zrender/src/core/util';
-import VisualMapModel from './VisualMapModel';
-import VisualMapping from '../../visual/VisualMapping';
-import visualDefault from '../../visual/visualDefault';
-import {reformIntervals} from '../../util/number';
-
-var PiecewiseModel = VisualMapModel.extend({
-
-    type: 'visualMap.piecewise',
-
-    /**
-     * Order Rule:
-     *
-     * option.categories / option.pieces / option.text / option.selected:
-     *     If !option.inverse,
-     *     Order when vertical: ['top', ..., 'bottom'].
-     *     Order when horizontal: ['left', ..., 'right'].
-     *     If option.inverse, the meaning of
-     *     the order should be reversed.
-     *
-     * this._pieceList:
-     *     The order is always [low, ..., high].
-     *
-     * Mapping from location to low-high:
-     *     If !option.inverse
-     *     When vertical, top is high.
-     *     When horizontal, right is high.
-     *     If option.inverse, reverse.
-     */
-
-    /**
-     * @protected
-     */
-    defaultOption: {
-        selected: null,             // Object. If not specified, means selected.
-                                    // When pieces and splitNumber: {'0': true, '5': true}
-                                    // When categories: {'cate1': false, 'cate3': true}
-                                    // When selected === false, means all unselected.
-
-        minOpen: false,             // Whether include values that smaller than `min`.
-        maxOpen: false,             // Whether include values that bigger than `max`.
-
-        align: 'auto',              // 'auto', 'left', 'right'
-        itemWidth: 20,              // When put the controller vertically, it is the length of
-                                    // horizontal side of each item. Otherwise, vertical side.
-        itemHeight: 14,             // When put the controller vertically, it is the length of
-                                    // vertical side of each item. Otherwise, horizontal side.
-        itemSymbol: 'roundRect',
-        pieceList: null,            // Each item is Object, with some of those attrs:
-                                    // {min, max, lt, gt, lte, gte, value,
-                                    // color, colorSaturation, colorAlpha, opacity,
-                                    // symbol, symbolSize}, which customize the range or visual
-                                    // coding of the certain piece. Besides, see "Order Rule".
-        categories: null,           // category names, like: ['some1', 'some2', 'some3'].
-                                    // Attr min/max are ignored when categories set. See "Order Rule"
-        splitNumber: 5,             // If set to 5, auto split five pieces equally.
-                                    // If set to 0 and component type not set, component type will be
-                                    // determined as "continuous". (It is less reasonable but for ec2
-                                    // compatibility, see echarts/component/visualMap/typeDefaulter)
-        selectedMode: 'multiple',   // Can be 'multiple' or 'single'.
-        itemGap: 10,                // The gap between two items, in px.
-        hoverLink: true,            // Enable hover highlight.
-
-        showLabel: null             // By default, when text is used, label will hide (the logic
-                                    // is remained for compatibility reason)
-    },
-
-    /**
-     * @override
-     */
-    optionUpdated: function (newOption, isInit) {
-        PiecewiseModel.superApply(this, 'optionUpdated', arguments);
-
-        /**
-         * The order is always [low, ..., high].
-         * [{text: string, interval: Array.<number>}, ...]
-         * @private
-         * @type {Array.<Object>}
-         */
-        this._pieceList = [];
-
-        this.resetExtent();
-
-        /**
-         * 'pieces', 'categories', 'splitNumber'
-         * @type {string}
-         */
-        var mode = this._mode = this._determineMode();
-
-        resetMethods[this._mode].call(this);
-
-        this._resetSelected(newOption, isInit);
-
-        var categories = this.option.categories;
-
-        this.resetVisual(function (mappingOption, state) {
-            if (mode === 'categories') {
-                mappingOption.mappingMethod = 'category';
-                mappingOption.categories = zrUtil.clone(categories);
-            }
-            else {
-                mappingOption.dataExtent = this.getExtent();
-                mappingOption.mappingMethod = 'piecewise';
-                mappingOption.pieceList = zrUtil.map(this._pieceList, function (piece) {
-                    var piece = zrUtil.clone(piece);
-                    if (state !== 'inRange') {
-                        // FIXME
-                        // outOfRange do not support special visual in pieces.
-                        piece.visual = null;
-                    }
-                    return piece;
-                });
-            }
-        });
-    },
-
-    /**
-     * @protected
-     * @override
-     */
-    completeVisualOption: function () {
-        // Consider this case:
-        // visualMap: {
-        //      pieces: [{symbol: 'circle', lt: 0}, {symbol: 'rect', gte: 0}]
-        // }
-        // where no inRange/outOfRange set but only pieces. So we should make
-        // default inRange/outOfRange for this case, otherwise visuals that only
-        // appear in `pieces` will not be taken into account in visual encoding.
-
-        var option = this.option;
-        var visualTypesInPieces = {};
-        var visualTypes = VisualMapping.listVisualTypes();
-        var isCategory = this.isCategory();
-
-        zrUtil.each(option.pieces, function (piece) {
-            zrUtil.each(visualTypes, function (visualType) {
-                if (piece.hasOwnProperty(visualType)) {
-                    visualTypesInPieces[visualType] = 1;
-                }
-            });
-        });
-
-        zrUtil.each(visualTypesInPieces, function (v, visualType) {
-            var exists = 0;
-            zrUtil.each(this.stateList, function (state) {
-                exists |= has(option, state, visualType)
-                    || has(option.target, state, visualType);
-            }, this);
-
-            !exists && zrUtil.each(this.stateList, function (state) {
-                (option[state] || (option[state] = {}))[visualType] = visualDefault.get(
-                    visualType, state === 'inRange' ? 'active' : 'inactive', isCategory
-                );
-            });
-        }, this);
-
-        function has(obj, state, visualType) {
-            return obj && obj[state] && (
-                zrUtil.isObject(obj[state])
-                    ? obj[state].hasOwnProperty(visualType)
-                    : obj[state] === visualType // e.g., inRange: 'symbol'
-            );
-        }
-
-        VisualMapModel.prototype.completeVisualOption.apply(this, arguments);
-    },
-
-    _resetSelected: function (newOption, isInit) {
-        var thisOption = this.option;
-        var pieceList = this._pieceList;
-
-        // Selected do not merge but all override.
-        var selected = (isInit ? thisOption : newOption).selected || {};
-        thisOption.selected = selected;
-
-        // Consider 'not specified' means true.
-        zrUtil.each(pieceList, function (piece, index) {
-            var key = this.getSelectedMapKey(piece);
-            if (!selected.hasOwnProperty(key)) {
-                selected[key] = true;
-            }
-        }, this);
-
-        if (thisOption.selectedMode === 'single') {
-            // Ensure there is only one selected.
-            var hasSel = false;
-
-            zrUtil.each(pieceList, function (piece, index) {
-                var key = this.getSelectedMapKey(piece);
-                if (selected[key]) {
-                    hasSel
-                        ? (selected[key] = false)
-                        : (hasSel = true);
-                }
-            }, this);
-        }
-        // thisOption.selectedMode === 'multiple', default: all selected.
-    },
-
-    /**
-     * @public
-     */
-    getSelectedMapKey: function (piece) {
-        return this._mode === 'categories'
-            ? piece.value + '' : piece.index + '';
-    },
-
-    /**
-     * @public
-     */
-    getPieceList: function () {
-        return this._pieceList;
-    },
-
-    /**
-     * @private
-     * @return {string}
-     */
-    _determineMode: function () {
-        var option = this.option;
-
-        return option.pieces && option.pieces.length > 0
-            ? 'pieces'
-            : this.option.categories
-            ? 'categories'
-            : 'splitNumber';
-    },
-
-    /**
-     * @public
-     * @override
-     */
-    setSelected: function (selected) {
-        this.option.selected = zrUtil.clone(selected);
-    },
-
-    /**
-     * @public
-     * @override
-     */
-    getValueState: function (value) {
-        var index = VisualMapping.findPieceIndex(value, this._pieceList);
-
-        return index != null
-            ? (this.option.selected[this.getSelectedMapKey(this._pieceList[index])]
-                ? 'inRange' : 'outOfRange'
-            )
-            : 'outOfRange';
-    },
-
-    /**
-     * @public
-     * @params {number} pieceIndex piece index in visualMapModel.getPieceList()
-     * @return {Array.<Object>} [{seriesId, dataIndex: <Array.<number>>}, ...]
-     */
-    findTargetDataIndices: function (pieceIndex) {
-        var result = [];
-
-        this.eachTargetSeries(function (seriesModel) {
-            var dataIndices = [];
-            var data = seriesModel.getData();
-
-            data.each(this.getDataDimension(data), function (value, dataIndex) {
-                // Should always base on model pieceList, because it is order sensitive.
-                var pIdx = VisualMapping.findPieceIndex(value, this._pieceList);
-                pIdx === pieceIndex && dataIndices.push(dataIndex);
-            }, this);
-
-            result.push({seriesId: seriesModel.id, dataIndex: dataIndices});
-        }, this);
-
-        return result;
-    },
-
-    /**
-     * @private
-     * @param {Object} piece piece.value or piece.interval is required.
-     * @return {number} Can be Infinity or -Infinity
-     */
-    getRepresentValue: function (piece) {
-        var representValue;
-        if (this.isCategory()) {
-            representValue = piece.value;
-        }
-        else {
-            if (piece.value != null) {
-                representValue = piece.value;
-            }
-            else {
-                var pieceInterval = piece.interval || [];
-                representValue = (pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity)
-                    ? 0
-                    : (pieceInterval[0] + pieceInterval[1]) / 2;
-            }
-        }
-        return representValue;
-    },
-
-    getVisualMeta: function (getColorVisual) {
-        // Do not support category. (category axis is ordinal, numerical)
-        if (this.isCategory()) {
-            return;
-        }
-
-        var stops = [];
-        var outerColors = [];
-        var visualMapModel = this;
-
-        function setStop(interval, valueState) {
-            var representValue = visualMapModel.getRepresentValue({interval: interval});
-            if (!valueState) {
-                valueState = visualMapModel.getValueState(representValue);
-            }
-            var color = getColorVisual(representValue, valueState);
-            if (interval[0] === -Infinity) {
-                outerColors[0] = color;
-            }
-            else if (interval[1] === Infinity) {
-                outerColors[1] = color;
-            }
-            else {
-                stops.push(
-                    {value: interval[0], color: color},
-                    {value: interval[1], color: color}
-                );
-            }
-        }
-
-        // Suplement
-        var pieceList = this._pieceList.slice();
-        if (!pieceList.length) {
-            pieceList.push({interval: [-Infinity, Infinity]});
-        }
-        else {
-            var edge = pieceList[0].interval[0];
-            edge !== -Infinity && pieceList.unshift({interval: [-Infinity, edge]});
-            edge = pieceList[pieceList.length - 1].interval[1];
-            edge !== Infinity && pieceList.push({interval: [edge, Infinity]});
-        }
-
-        var curr = -Infinity;
-        zrUtil.each(pieceList, function (piece) {
-            var interval = piece.interval;
-            if (interval) {
-                // Fulfill gap.
-                interval[0] > curr && setStop([curr, interval[0]], 'outOfRange');
-                setStop(interval.slice());
-                curr = interval[1];
-            }
-        }, this);
-
-        return {stops: stops, outerColors: outerColors};
-    }
-
-});
-
-/**
- * Key is this._mode
- * @type {Object}
- * @this {module:echarts/component/viusalMap/PiecewiseMode}
- */
-var resetMethods = {
-
-    splitNumber: function () {
-        var thisOption = this.option;
-        var pieceList = this._pieceList;
-        var precision = Math.min(thisOption.precision, 20);
-        var dataExtent = this.getExtent();
-        var splitNumber = thisOption.splitNumber;
-        splitNumber = Math.max(parseInt(splitNumber, 10), 1);
-        thisOption.splitNumber = splitNumber;
-
-        var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber;
-        // Precision auto-adaption
-        while (+splitStep.toFixed(precision) !== splitStep && precision < 5) {
-            precision++;
-        }
-        thisOption.precision = precision;
-        splitStep = +splitStep.toFixed(precision);
-
-        if (thisOption.minOpen) {
-            pieceList.push({
-                interval: [-Infinity, dataExtent[0]],
-                close: [0, 0]
-            });
-        }
-
-        for (
-            var index = 0, curr = dataExtent[0];
-            index < splitNumber;
-            curr += splitStep, index++
-        ) {
-            var max = index === splitNumber - 1 ? dataExtent[1] : (curr + splitStep);
-
-            pieceList.push({
-                interval: [curr, max],
-                close: [1, 1]
-            });
-        }
-
-        if (thisOption.maxOpen) {
-            pieceList.push({
-                interval: [dataExtent[1], Infinity],
-                close: [0, 0]
-            });
-        }
-
-        reformIntervals(pieceList);
-
-        zrUtil.each(pieceList, function (piece, index) {
-            piece.index = index;
-            piece.text = this.formatValueText(piece.interval);
-        }, this);
-    },
-
-    categories: function () {
-        var thisOption = this.option;
-        zrUtil.each(thisOption.categories, function (cate) {
-            // FIXME category模式也使用pieceList,但在visualMapping中不是使用pieceList。
-            // 是否改一致。
-            this._pieceList.push({
-                text: this.formatValueText(cate, true),
-                value: cate
-            });
-        }, this);
-
-        // See "Order Rule".
-        normalizeReverse(thisOption, this._pieceList);
-    },
-
-    pieces: function () {
-        var thisOption = this.option;
-        var pieceList = this._pieceList;
-
-        zrUtil.each(thisOption.pieces, function (pieceListItem, index) {
-
-            if (!zrUtil.isObject(pieceListItem)) {
-                pieceListItem = {value: pieceListItem};
-            }
-
-            var item = {text: '', index: index};
-
-            if (pieceListItem.label != null) {
-                item.text = pieceListItem.label;
-            }
-
-            if (pieceListItem.hasOwnProperty('value')) {
-                var value = item.value = pieceListItem.value;
-                item.interval = [value, value];
-                item.close = [1, 1];
-            }
-            else {
-                // `min` `max` is legacy option.
-                // `lt` `gt` `lte` `gte` is recommanded.
-                var interval = item.interval = [];
-                var close = item.close = [0, 0];
-
-                var closeList = [1, 0, 1];
-                var infinityList = [-Infinity, Infinity];
-
-                var useMinMax = [];
-                for (var lg = 0; lg < 2; lg++) {
-                    var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg];
-                    for (var i = 0; i < 3 && interval[lg] == null; i++) {
-                        interval[lg] = pieceListItem[names[i]];
-                        close[lg] = closeList[i];
-                        useMinMax[lg] = i === 2;
-                    }
-                    interval[lg] == null && (interval[lg] = infinityList[lg]);
-                }
-                useMinMax[0] && interval[1] === Infinity && (close[0] = 0);
-                useMinMax[1] && interval[0] === -Infinity && (close[1] = 0);
-
-                if (__DEV__) {
-                    if (interval[0] > interval[1]) {
-                        console.warn(
-                            'Piece ' + index + 'is illegal: ' + interval
-                            + ' lower bound should not greater then uppper bound.'
-                        );
-                    }
-                }
-
-                if (interval[0] === interval[1] && close[0] && close[1]) {
-                    // Consider: [{min: 5, max: 5, visual: {...}}, {min: 0, max: 5}],
-                    // we use value to lift the priority when min === max
-                    item.value = interval[0];
-                }
-            }
-
-            item.visual = VisualMapping.retrieveVisuals(pieceListItem);
-
-            pieceList.push(item);
-
-        }, this);
-
-        // See "Order Rule".
-        normalizeReverse(thisOption, pieceList);
-        // Only pieces
-        reformIntervals(pieceList);
-
-        zrUtil.each(pieceList, function (piece) {
-            var close = piece.close;
-            var edgeSymbols = [['<', '≤'][close[1]], ['>', '≥'][close[0]]];
-            piece.text = piece.text || this.formatValueText(
-                piece.value != null ? piece.value : piece.interval,
-                false,
-                edgeSymbols
-            );
-        }, this);
-    }
-};
-
-function normalizeReverse(thisOption, pieceList) {
-    var inverse = thisOption.inverse;
-    if (thisOption.orient === 'vertical' ? !inverse : inverse) {
-            pieceList.reverse();
-    }
-}
-
-export default PiecewiseModel;

+ 0 - 239
admin/node_modules/echarts/src/component/visualMap/PiecewiseView.js

@@ -1,239 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import VisualMapView from './VisualMapView';
-import * as graphic from '../../util/graphic';
-import {createSymbol} from '../../util/symbol';
-import * as layout from '../../util/layout';
-import * as helper from './helper';
-
-var PiecewiseVisualMapView = VisualMapView.extend({
-
-    type: 'visualMap.piecewise',
-
-    /**
-     * @protected
-     * @override
-     */
-    doRender: function () {
-        var thisGroup = this.group;
-
-        thisGroup.removeAll();
-
-        var visualMapModel = this.visualMapModel;
-        var textGap = visualMapModel.get('textGap');
-        var textStyleModel = visualMapModel.textStyleModel;
-        var textFont = textStyleModel.getFont();
-        var textFill = textStyleModel.getTextColor();
-        var itemAlign = this._getItemAlign();
-        var itemSize = visualMapModel.itemSize;
-        var viewData = this._getViewData();
-        var endsText = viewData.endsText;
-        var showLabel = zrUtil.retrieve(visualMapModel.get('showLabel', true), !endsText);
-
-        endsText && this._renderEndsText(
-            thisGroup, endsText[0], itemSize, showLabel, itemAlign
-        );
-
-        zrUtil.each(viewData.viewPieceList, renderItem, this);
-
-        endsText && this._renderEndsText(
-            thisGroup, endsText[1], itemSize, showLabel, itemAlign
-        );
-
-        layout.box(
-            visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap')
-        );
-
-        this.renderBackground(thisGroup);
-
-        this.positionGroup(thisGroup);
-
-        function renderItem(item) {
-            var piece = item.piece;
-
-            var itemGroup = new graphic.Group();
-            itemGroup.onclick = zrUtil.bind(this._onItemClick, this, piece);
-
-            this._enableHoverLink(itemGroup, item.indexInModelPieceList);
-
-            var representValue = visualMapModel.getRepresentValue(piece);
-
-            this._createItemSymbol(
-                itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]]
-            );
-
-            if (showLabel) {
-                var visualState = this.visualMapModel.getValueState(representValue);
-
-                itemGroup.add(new graphic.Text({
-                    style: {
-                        x: itemAlign === 'right' ? -textGap : itemSize[0] + textGap,
-                        y: itemSize[1] / 2,
-                        text: piece.text,
-                        textVerticalAlign: 'middle',
-                        textAlign: itemAlign,
-                        textFont: textFont,
-                        textFill: textFill,
-                        opacity: visualState === 'outOfRange' ? 0.5 : 1
-                    }
-                }));
-            }
-
-            thisGroup.add(itemGroup);
-        }
-    },
-
-    /**
-     * @private
-     */
-    _enableHoverLink: function (itemGroup, pieceIndex) {
-        itemGroup
-            .on('mouseover', zrUtil.bind(onHoverLink, this, 'highlight'))
-            .on('mouseout', zrUtil.bind(onHoverLink, this, 'downplay'));
-
-        function onHoverLink(method) {
-            var visualMapModel = this.visualMapModel;
-
-            visualMapModel.option.hoverLink && this.api.dispatchAction({
-                type: method,
-                batch: helper.makeHighDownBatch(
-                    visualMapModel.findTargetDataIndices(pieceIndex),
-                    visualMapModel
-                )
-            });
-        }
-    },
-
-    /**
-     * @private
-     */
-    _getItemAlign: function () {
-        var visualMapModel = this.visualMapModel;
-        var modelOption = visualMapModel.option;
-
-        if (modelOption.orient === 'vertical') {
-            return helper.getItemAlign(
-                visualMapModel, this.api, visualMapModel.itemSize
-            );
-        }
-        else { // horizontal, most case left unless specifying right.
-            var align = modelOption.align;
-            if (!align || align === 'auto') {
-                align = 'left';
-            }
-            return align;
-        }
-    },
-
-    /**
-     * @private
-     */
-    _renderEndsText: function (group, text, itemSize, showLabel, itemAlign) {
-        if (!text) {
-            return;
-        }
-
-        var itemGroup = new graphic.Group();
-        var textStyleModel = this.visualMapModel.textStyleModel;
-
-        itemGroup.add(new graphic.Text({
-            style: {
-                x: showLabel ? (itemAlign === 'right' ? itemSize[0] : 0) : itemSize[0] / 2,
-                y: itemSize[1] / 2,
-                textVerticalAlign: 'middle',
-                textAlign: showLabel ? itemAlign : 'center',
-                text: text,
-                textFont: textStyleModel.getFont(),
-                textFill: textStyleModel.getTextColor()
-            }
-        }));
-
-        group.add(itemGroup);
-    },
-
-    /**
-     * @private
-     * @return {Object} {peiceList, endsText} The order is the same as screen pixel order.
-     */
-    _getViewData: function () {
-        var visualMapModel = this.visualMapModel;
-
-        var viewPieceList = zrUtil.map(visualMapModel.getPieceList(), function (piece, index) {
-            return {piece: piece, indexInModelPieceList: index};
-        });
-        var endsText = visualMapModel.get('text');
-
-        // Consider orient and inverse.
-        var orient = visualMapModel.get('orient');
-        var inverse = visualMapModel.get('inverse');
-
-        // Order of model pieceList is always [low, ..., high]
-        if (orient === 'horizontal' ? inverse : !inverse) {
-            viewPieceList.reverse();
-        }
-        // Origin order of endsText is [high, low]
-        else if (endsText) {
-            endsText = endsText.slice().reverse();
-        }
-
-        return {viewPieceList: viewPieceList, endsText: endsText};
-    },
-
-    /**
-     * @private
-     */
-    _createItemSymbol: function (group, representValue, shapeParam) {
-        group.add(createSymbol(
-            this.getControllerVisual(representValue, 'symbol'),
-            shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3],
-            this.getControllerVisual(representValue, 'color')
-        ));
-    },
-
-    /**
-     * @private
-     */
-    _onItemClick: function (piece) {
-        var visualMapModel = this.visualMapModel;
-        var option = visualMapModel.option;
-        var selected = zrUtil.clone(option.selected);
-        var newKey = visualMapModel.getSelectedMapKey(piece);
-
-        if (option.selectedMode === 'single') {
-            selected[newKey] = true;
-            zrUtil.each(selected, function (o, key) {
-                selected[key] = key === newKey;
-            });
-        }
-        else {
-            selected[newKey] = !selected[newKey];
-        }
-
-        this.api.dispatchAction({
-            type: 'selectDataRange',
-            from: this.uid,
-            visualMapId: this.visualMapModel.id,
-            selected: selected
-        });
-    }
-});
-
-export default PiecewiseVisualMapView;

+ 0 - 555
admin/node_modules/echarts/src/component/visualMap/VisualMapModel.js

@@ -1,555 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../echarts';
-import * as zrUtil from 'zrender/src/core/util';
-import env from 'zrender/src/core/env';
-import visualDefault from '../../visual/visualDefault';
-import VisualMapping from '../../visual/VisualMapping';
-import * as visualSolution from '../../visual/visualSolution';
-import * as modelUtil from '../../util/model';
-import * as numberUtil from '../../util/number';
-
-var mapVisual = VisualMapping.mapVisual;
-var eachVisual = VisualMapping.eachVisual;
-var isArray = zrUtil.isArray;
-var each = zrUtil.each;
-var asc = numberUtil.asc;
-var linearMap = numberUtil.linearMap;
-var noop = zrUtil.noop;
-
-var VisualMapModel = echarts.extendComponentModel({
-
-    type: 'visualMap',
-
-    dependencies: ['series'],
-
-    /**
-     * @readOnly
-     * @type {Array.<string>}
-     */
-    stateList: ['inRange', 'outOfRange'],
-
-    /**
-     * @readOnly
-     * @type {Array.<string>}
-     */
-    replacableOptionKeys: [
-        'inRange', 'outOfRange', 'target', 'controller', 'color'
-    ],
-
-    /**
-     * [lowerBound, upperBound]
-     *
-     * @readOnly
-     * @type {Array.<number>}
-     */
-    dataBound: [-Infinity, Infinity],
-
-    /**
-     * @readOnly
-     * @type {string|Object}
-     */
-    layoutMode: {type: 'box', ignoreSize: true},
-
-    /**
-     * @protected
-     */
-    defaultOption: {
-        show: true,
-
-        zlevel: 0,
-        z: 4,
-
-        seriesIndex: 'all',     // 'all' or null/undefined: all series.
-                                // A number or an array of number: the specified series.
-
-                                // set min: 0, max: 200, only for campatible with ec2.
-                                // In fact min max should not have default value.
-        min: 0,                 // min value, must specified if pieces is not specified.
-        max: 200,               // max value, must specified if pieces is not specified.
-
-        dimension: null,
-        inRange: null,          // 'color', 'colorHue', 'colorSaturation', 'colorLightness', 'colorAlpha',
-                                // 'symbol', 'symbolSize'
-        outOfRange: null,       // 'color', 'colorHue', 'colorSaturation',
-                                // 'colorLightness', 'colorAlpha',
-                                // 'symbol', 'symbolSize'
-
-        left: 0,                // 'center' ¦ 'left' ¦ 'right' ¦ {number} (px)
-        right: null,            // The same as left.
-        top: null,              // 'top' ¦ 'bottom' ¦ 'center' ¦ {number} (px)
-        bottom: 0,              // The same as top.
-
-        itemWidth: null,
-        itemHeight: null,
-        inverse: false,
-        orient: 'vertical',        // 'horizontal' ¦ 'vertical'
-
-        backgroundColor: 'rgba(0,0,0,0)',
-        borderColor: '#ccc',       // 值域边框颜色
-        contentColor: '#5793f3',
-        inactiveColor: '#aaa',
-        borderWidth: 0,            // 值域边框线宽,单位px,默认为0(无边框)
-        padding: 5,                // 值域内边距,单位px,默认各方向内边距为5,
-                                    // 接受数组分别设定上右下左边距,同css
-        textGap: 10,               //
-        precision: 0,              // 小数精度,默认为0,无小数点
-        color: null,               //颜色(deprecated,兼容ec2,顺序同pieces,不同于inRange/outOfRange)
-
-        formatter: null,
-        text: null,                // 文本,如['高', '低'],兼容ec2,text[0]对应高值,text[1]对应低值
-        textStyle: {
-            color: '#333'          // 值域文字颜色
-        }
-    },
-
-    /**
-     * @protected
-     */
-    init: function (option, parentModel, ecModel) {
-
-        /**
-         * @private
-         * @type {Array.<number>}
-         */
-        this._dataExtent;
-
-        /**
-         * @readOnly
-         */
-        this.targetVisuals = {};
-
-        /**
-         * @readOnly
-         */
-        this.controllerVisuals = {};
-
-        /**
-         * @readOnly
-         */
-        this.textStyleModel;
-
-        /**
-         * [width, height]
-         * @readOnly
-         * @type {Array.<number>}
-         */
-        this.itemSize;
-
-        this.mergeDefaultAndTheme(option, ecModel);
-    },
-
-    /**
-     * @protected
-     */
-    optionUpdated: function (newOption, isInit) {
-        var thisOption = this.option;
-
-        // FIXME
-        // necessary?
-        // Disable realtime view update if canvas is not supported.
-        if (!env.canvasSupported) {
-            thisOption.realtime = false;
-        }
-
-        !isInit && visualSolution.replaceVisualOption(
-            thisOption, newOption, this.replacableOptionKeys
-        );
-
-        this.textStyleModel = this.getModel('textStyle');
-
-        this.resetItemSize();
-
-        this.completeVisualOption();
-    },
-
-    /**
-     * @protected
-     */
-    resetVisual: function (supplementVisualOption) {
-        var stateList = this.stateList;
-        supplementVisualOption = zrUtil.bind(supplementVisualOption, this);
-
-        this.controllerVisuals = visualSolution.createVisualMappings(
-            this.option.controller, stateList, supplementVisualOption
-        );
-        this.targetVisuals = visualSolution.createVisualMappings(
-            this.option.target, stateList, supplementVisualOption
-        );
-    },
-
-    /**
-     * @protected
-     * @return {Array.<number>} An array of series indices.
-     */
-    getTargetSeriesIndices: function () {
-        var optionSeriesIndex = this.option.seriesIndex;
-        var seriesIndices = [];
-
-        if (optionSeriesIndex == null || optionSeriesIndex === 'all') {
-            this.ecModel.eachSeries(function (seriesModel, index) {
-                seriesIndices.push(index);
-            });
-        }
-        else {
-            seriesIndices = modelUtil.normalizeToArray(optionSeriesIndex);
-        }
-
-        return seriesIndices;
-    },
-
-    /**
-     * @public
-     */
-    eachTargetSeries: function (callback, context) {
-        zrUtil.each(this.getTargetSeriesIndices(), function (seriesIndex) {
-            callback.call(context, this.ecModel.getSeriesByIndex(seriesIndex));
-        }, this);
-    },
-
-    /**
-     * @pubilc
-     */
-    isTargetSeries: function (seriesModel) {
-        var is = false;
-        this.eachTargetSeries(function (model) {
-            model === seriesModel && (is = true);
-        });
-        return is;
-    },
-
-    /**
-     * @example
-     * this.formatValueText(someVal); // format single numeric value to text.
-     * this.formatValueText(someVal, true); // format single category value to text.
-     * this.formatValueText([min, max]); // format numeric min-max to text.
-     * this.formatValueText([this.dataBound[0], max]); // using data lower bound.
-     * this.formatValueText([min, this.dataBound[1]]); // using data upper bound.
-     *
-     * @param {number|Array.<number>} value Real value, or this.dataBound[0 or 1].
-     * @param {boolean} [isCategory=false] Only available when value is number.
-     * @param {Array.<string>} edgeSymbols Open-close symbol when value is interval.
-     * @return {string}
-     * @protected
-     */
-    formatValueText: function (value, isCategory, edgeSymbols) {
-        var option = this.option;
-        var precision = option.precision;
-        var dataBound = this.dataBound;
-        var formatter = option.formatter;
-        var isMinMax;
-        var textValue;
-        edgeSymbols = edgeSymbols || ['<', '>'];
-
-        if (zrUtil.isArray(value)) {
-            value = value.slice();
-            isMinMax = true;
-        }
-
-        textValue = isCategory
-            ? value
-            : (isMinMax
-                ? [toFixed(value[0]), toFixed(value[1])]
-                : toFixed(value)
-            );
-
-        if (zrUtil.isString(formatter)) {
-            return formatter
-                .replace('{value}', isMinMax ? textValue[0] : textValue)
-                .replace('{value2}', isMinMax ? textValue[1] : textValue);
-        }
-        else if (zrUtil.isFunction(formatter)) {
-            return isMinMax
-                ? formatter(value[0], value[1])
-                : formatter(value);
-        }
-
-        if (isMinMax) {
-            if (value[0] === dataBound[0]) {
-                return edgeSymbols[0] + ' ' + textValue[1];
-            }
-            else if (value[1] === dataBound[1]) {
-                return edgeSymbols[1] + ' ' + textValue[0];
-            }
-            else {
-                return textValue[0] + ' - ' + textValue[1];
-            }
-        }
-        else { // Format single value (includes category case).
-            return textValue;
-        }
-
-        function toFixed(val) {
-            return val === dataBound[0]
-                ? 'min'
-                : val === dataBound[1]
-                ? 'max'
-                : (+val).toFixed(Math.min(precision, 20));
-        }
-    },
-
-    /**
-     * @protected
-     */
-    resetExtent: function () {
-        var thisOption = this.option;
-
-        // Can not calculate data extent by data here.
-        // Because series and data may be modified in processing stage.
-        // So we do not support the feature "auto min/max".
-
-        var extent = asc([thisOption.min, thisOption.max]);
-
-        this._dataExtent = extent;
-    },
-
-    /**
-     * @public
-     * @param {module:echarts/data/List} list
-     * @return {string} Concrete dimention. If return null/undefined,
-     *                  no dimension used.
-     */
-    getDataDimension: function (list) {
-        var optDim = this.option.dimension;
-        var listDimensions = list.dimensions;
-        if (optDim == null && !listDimensions.length) {
-            return;
-        }
-
-        if (optDim != null) {
-            return list.getDimension(optDim);
-        }
-
-        var dimNames = list.dimensions;
-        for (var i = dimNames.length - 1; i >= 0; i--) {
-            var dimName = dimNames[i];
-            var dimInfo = list.getDimensionInfo(dimName);
-            if (!dimInfo.isCalculationCoord) {
-                return dimName;
-            }
-        }
-    },
-
-    /**
-     * @public
-     * @override
-     */
-    getExtent: function () {
-        return this._dataExtent.slice();
-    },
-
-    /**
-     * @protected
-     */
-    completeVisualOption: function () {
-        var ecModel = this.ecModel;
-        var thisOption = this.option;
-        var base = {inRange: thisOption.inRange, outOfRange: thisOption.outOfRange};
-
-        var target = thisOption.target || (thisOption.target = {});
-        var controller = thisOption.controller || (thisOption.controller = {});
-
-        zrUtil.merge(target, base); // Do not override
-        zrUtil.merge(controller, base); // Do not override
-
-        var isCategory = this.isCategory();
-
-        completeSingle.call(this, target);
-        completeSingle.call(this, controller);
-        completeInactive.call(this, target, 'inRange', 'outOfRange');
-        // completeInactive.call(this, target, 'outOfRange', 'inRange');
-        completeController.call(this, controller);
-
-        function completeSingle(base) {
-            // Compatible with ec2 dataRange.color.
-            // The mapping order of dataRange.color is: [high value, ..., low value]
-            // whereas inRange.color and outOfRange.color is [low value, ..., high value]
-            // Notice: ec2 has no inverse.
-            if (isArray(thisOption.color)
-                // If there has been inRange: {symbol: ...}, adding color is a mistake.
-                // So adding color only when no inRange defined.
-                && !base.inRange
-            ) {
-                base.inRange = {color: thisOption.color.slice().reverse()};
-            }
-
-            // Compatible with previous logic, always give a defautl color, otherwise
-            // simple config with no inRange and outOfRange will not work.
-            // Originally we use visualMap.color as the default color, but setOption at
-            // the second time the default color will be erased. So we change to use
-            // constant DEFAULT_COLOR.
-            // If user do not want the defualt color, set inRange: {color: null}.
-            base.inRange = base.inRange || {color: ecModel.get('gradientColor')};
-
-            // If using shortcut like: {inRange: 'symbol'}, complete default value.
-            each(this.stateList, function (state) {
-                var visualType = base[state];
-
-                if (zrUtil.isString(visualType)) {
-                    var defa = visualDefault.get(visualType, 'active', isCategory);
-                    if (defa) {
-                        base[state] = {};
-                        base[state][visualType] = defa;
-                    }
-                    else {
-                        // Mark as not specified.
-                        delete base[state];
-                    }
-                }
-            }, this);
-        }
-
-        function completeInactive(base, stateExist, stateAbsent) {
-            var optExist = base[stateExist];
-            var optAbsent = base[stateAbsent];
-
-            if (optExist && !optAbsent) {
-                optAbsent = base[stateAbsent] = {};
-                each(optExist, function (visualData, visualType) {
-                    if (!VisualMapping.isValidType(visualType)) {
-                        return;
-                    }
-
-                    var defa = visualDefault.get(visualType, 'inactive', isCategory);
-
-                    if (defa != null) {
-                        optAbsent[visualType] = defa;
-
-                        // Compatibable with ec2:
-                        // Only inactive color to rgba(0,0,0,0) can not
-                        // make label transparent, so use opacity also.
-                        if (visualType === 'color'
-                            && !optAbsent.hasOwnProperty('opacity')
-                            && !optAbsent.hasOwnProperty('colorAlpha')
-                        ) {
-                            optAbsent.opacity = [0, 0];
-                        }
-                    }
-                });
-            }
-        }
-
-        function completeController(controller) {
-            var symbolExists = (controller.inRange || {}).symbol
-                || (controller.outOfRange || {}).symbol;
-            var symbolSizeExists = (controller.inRange || {}).symbolSize
-                || (controller.outOfRange || {}).symbolSize;
-            var inactiveColor = this.get('inactiveColor');
-
-            each(this.stateList, function (state) {
-
-                var itemSize = this.itemSize;
-                var visuals = controller[state];
-
-                // Set inactive color for controller if no other color
-                // attr (like colorAlpha) specified.
-                if (!visuals) {
-                    visuals = controller[state] = {
-                        color: isCategory ? inactiveColor : [inactiveColor]
-                    };
-                }
-
-                // Consistent symbol and symbolSize if not specified.
-                if (visuals.symbol == null) {
-                    visuals.symbol = symbolExists
-                        && zrUtil.clone(symbolExists)
-                        || (isCategory ? 'roundRect' : ['roundRect']);
-                }
-                if (visuals.symbolSize == null) {
-                    visuals.symbolSize = symbolSizeExists
-                        && zrUtil.clone(symbolSizeExists)
-                        || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]);
-                }
-
-                // Filter square and none.
-                visuals.symbol = mapVisual(visuals.symbol, function (symbol) {
-                    return (symbol === 'none' || symbol === 'square') ? 'roundRect' : symbol;
-                });
-
-                // Normalize symbolSize
-                var symbolSize = visuals.symbolSize;
-
-                if (symbolSize != null) {
-                    var max = -Infinity;
-                    // symbolSize can be object when categories defined.
-                    eachVisual(symbolSize, function (value) {
-                        value > max && (max = value);
-                    });
-                    visuals.symbolSize = mapVisual(symbolSize, function (value) {
-                        return linearMap(value, [0, max], [0, itemSize[0]], true);
-                    });
-                }
-
-            }, this);
-        }
-    },
-
-    /**
-     * @protected
-     */
-    resetItemSize: function () {
-        this.itemSize = [
-            parseFloat(this.get('itemWidth')),
-            parseFloat(this.get('itemHeight'))
-        ];
-    },
-
-    /**
-     * @public
-     */
-    isCategory: function () {
-        return !!this.option.categories;
-    },
-
-    /**
-     * @public
-     * @abstract
-     */
-    setSelected: noop,
-
-    /**
-     * @public
-     * @abstract
-     * @param {*|module:echarts/data/List} valueOrData
-     * @param {number} dataIndex
-     * @return {string} state See this.stateList
-     */
-    getValueState: noop,
-
-    /**
-     * FIXME
-     * Do not publish to thirt-part-dev temporarily
-     * util the interface is stable. (Should it return
-     * a function but not visual meta?)
-     *
-     * @pubilc
-     * @abstract
-     * @param {Function} getColorVisual
-     *        params: value, valueState
-     *        return: color
-     * @return {Object} visualMeta
-     *        should includes {stops, outerColors}
-     *        outerColor means [colorBeyondMinValue, colorBeyondMaxValue]
-     */
-    getVisualMeta: noop
-
-});
-
-export default VisualMapModel;

+ 0 - 170
admin/node_modules/echarts/src/component/visualMap/VisualMapView.js

@@ -1,170 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../echarts';
-import * as zrUtil from 'zrender/src/core/util';
-import * as graphic from '../../util/graphic';
-import * as formatUtil from '../../util/format';
-import * as layout from '../../util/layout';
-import VisualMapping from '../../visual/VisualMapping';
-
-export default echarts.extendComponentView({
-
-    type: 'visualMap',
-
-    /**
-     * @readOnly
-     * @type {Object}
-     */
-    autoPositionValues: {left: 1, right: 1, top: 1, bottom: 1},
-
-    init: function (ecModel, api) {
-        /**
-         * @readOnly
-         * @type {module:echarts/model/Global}
-         */
-        this.ecModel = ecModel;
-
-        /**
-         * @readOnly
-         * @type {module:echarts/ExtensionAPI}
-         */
-        this.api = api;
-
-        /**
-         * @readOnly
-         * @type {module:echarts/component/visualMap/visualMapModel}
-         */
-        this.visualMapModel;
-    },
-
-    /**
-     * @protected
-     */
-    render: function (visualMapModel, ecModel, api, payload) {
-        this.visualMapModel = visualMapModel;
-
-        if (visualMapModel.get('show') === false) {
-            this.group.removeAll();
-            return;
-        }
-
-        this.doRender.apply(this, arguments);
-    },
-
-    /**
-     * @protected
-     */
-    renderBackground: function (group) {
-        var visualMapModel = this.visualMapModel;
-        var padding = formatUtil.normalizeCssArray(visualMapModel.get('padding') || 0);
-        var rect = group.getBoundingRect();
-
-        group.add(new graphic.Rect({
-            z2: -1, // Lay background rect on the lowest layer.
-            silent: true,
-            shape: {
-                x: rect.x - padding[3],
-                y: rect.y - padding[0],
-                width: rect.width + padding[3] + padding[1],
-                height: rect.height + padding[0] + padding[2]
-            },
-            style: {
-                fill: visualMapModel.get('backgroundColor'),
-                stroke: visualMapModel.get('borderColor'),
-                lineWidth: visualMapModel.get('borderWidth')
-            }
-        }));
-    },
-
-    /**
-     * @protected
-     * @param {number} targetValue can be Infinity or -Infinity
-     * @param {string=} visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize'
-     * @param {Object} [opts]
-     * @param {string=} [opts.forceState] Specify state, instead of using getValueState method.
-     * @param {string=} [opts.convertOpacityToAlpha=false] For color gradient in controller widget.
-     * @return {*} Visual value.
-     */
-    getControllerVisual: function (targetValue, visualCluster, opts) {
-        opts = opts || {};
-
-        var forceState = opts.forceState;
-        var visualMapModel = this.visualMapModel;
-        var visualObj = {};
-
-        // Default values.
-        if (visualCluster === 'symbol') {
-            visualObj.symbol = visualMapModel.get('itemSymbol');
-        }
-        if (visualCluster === 'color') {
-            var defaultColor = visualMapModel.get('contentColor');
-            visualObj.color = defaultColor;
-        }
-
-        function getter(key) {
-            return visualObj[key];
-        }
-
-        function setter(key, value) {
-            visualObj[key] = value;
-        }
-
-        var mappings = visualMapModel.controllerVisuals[
-            forceState || visualMapModel.getValueState(targetValue)
-        ];
-        var visualTypes = VisualMapping.prepareVisualTypes(mappings);
-
-        zrUtil.each(visualTypes, function (type) {
-            var visualMapping = mappings[type];
-            if (opts.convertOpacityToAlpha && type === 'opacity') {
-                type = 'colorAlpha';
-                visualMapping = mappings.__alphaForOpacity;
-            }
-            if (VisualMapping.dependsOn(type, visualCluster)) {
-                visualMapping && visualMapping.applyVisual(
-                    targetValue, getter, setter
-                );
-            }
-        });
-
-        return visualObj[visualCluster];
-    },
-
-    /**
-     * @protected
-     */
-    positionGroup: function (group) {
-        var model = this.visualMapModel;
-        var api = this.api;
-
-        layout.positionElement(
-            group,
-            model.getBoxLayoutParams(),
-            {width: api.getWidth(), height: api.getHeight()}
-        );
-    },
-
-    /**
-     * @protected
-     * @abstract
-     */
-    doRender: zrUtil.noop
-
-});

+ 0 - 76
admin/node_modules/echarts/src/component/visualMap/helper.js

@@ -1,76 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import {getLayoutRect} from '../../util/layout';
-
-/**
- * @param {module:echarts/component/visualMap/VisualMapModel} visualMapModel\
- * @param {module:echarts/ExtensionAPI} api
- * @param {Array.<number>} itemSize always [short, long]
- * @return {string} 'left' or 'right' or 'top' or 'bottom'
- */
-export function getItemAlign(visualMapModel, api, itemSize) {
-    var modelOption = visualMapModel.option;
-    var itemAlign = modelOption.align;
-
-    if (itemAlign != null && itemAlign !== 'auto') {
-        return itemAlign;
-    }
-
-    // Auto decision align.
-    var ecSize = {width: api.getWidth(), height: api.getHeight()};
-    var realIndex = modelOption.orient === 'horizontal' ? 1 : 0;
-
-    var paramsSet = [
-        ['left', 'right', 'width'],
-        ['top', 'bottom', 'height']
-    ];
-    var reals = paramsSet[realIndex];
-    var fakeValue = [0, null, 10];
-
-    var layoutInput = {};
-    for (var i = 0; i < 3; i++) {
-        layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i];
-        layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]];
-    }
-
-    var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex];
-    var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding);
-
-    return reals[
-        (rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5
-            < ecSize[rParam[1]] * 0.5 ? 0 : 1
-    ];
-}
-
-/**
- * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and
- * dataIndexInside means filtered index.
- */
-export function makeHighDownBatch(batch, visualMapModel) {
-    zrUtil.each(batch || [], function (batchItem) {
-        if (batchItem.dataIndex != null) {
-            batchItem.dataIndexInside = batchItem.dataIndex;
-            batchItem.dataIndex = null;
-        }
-        batchItem.highlightKey = 'visualMap' + (visualMapModel ? visualMapModel.componentIndex : '');
-    });
-    return batch;
-}

+ 0 - 60
admin/node_modules/echarts/src/component/visualMap/preprocessor.js

@@ -1,60 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-var each = zrUtil.each;
-
-export default function (option) {
-    var visualMap = option && option.visualMap;
-
-    if (!zrUtil.isArray(visualMap)) {
-        visualMap = visualMap ? [visualMap] : [];
-    }
-
-    each(visualMap, function (opt) {
-        if (!opt) {
-            return;
-        }
-
-        // rename splitList to pieces
-        if (has(opt, 'splitList') && !has(opt, 'pieces')) {
-            opt.pieces = opt.splitList;
-            delete opt.splitList;
-        }
-
-        var pieces = opt.pieces;
-        if (pieces && zrUtil.isArray(pieces)) {
-            each(pieces, function (piece) {
-                if (zrUtil.isObject(piece)) {
-                    if (has(piece, 'start') && !has(piece, 'min')) {
-                        piece.min = piece.start;
-                    }
-                    if (has(piece, 'end') && !has(piece, 'max')) {
-                        piece.max = piece.end;
-                    }
-                }
-            });
-        }
-    });
-}
-
-function has(obj, name) {
-    return obj && obj.hasOwnProperty && obj.hasOwnProperty(name);
-}

+ 0 - 36
admin/node_modules/echarts/src/component/visualMap/typeDefaulter.js

@@ -1,36 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import Component from '../../model/Component';
-
-Component.registerSubTypeDefaulter('visualMap', function (option) {
-    // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used.
-    return (
-            !option.categories
-            && (
-                !(
-                    option.pieces
-                        ? option.pieces.length > 0
-                        : option.splitNumber > 0
-                )
-                || option.calculable
-            )
-        )
-        ? 'continuous' : 'piecewise';
-});

+ 0 - 106
admin/node_modules/echarts/src/component/visualMap/visualEncoding.js

@@ -1,106 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../echarts';
-import * as zrUtil from 'zrender/src/core/util';
-import * as visualSolution from '../../visual/visualSolution';
-import VisualMapping from '../../visual/VisualMapping';
-
-var VISUAL_PRIORITY = echarts.PRIORITY.VISUAL.COMPONENT;
-
-echarts.registerVisual(VISUAL_PRIORITY, {
-    createOnAllSeries: true,
-    reset: function (seriesModel, ecModel) {
-        var resetDefines = [];
-        ecModel.eachComponent('visualMap', function (visualMapModel) {
-            var pipelineContext = seriesModel.pipelineContext;
-            if (!visualMapModel.isTargetSeries(seriesModel)
-                || (pipelineContext && pipelineContext.large)
-            ) {
-                return;
-            }
-
-            resetDefines.push(visualSolution.incrementalApplyVisual(
-                visualMapModel.stateList,
-                visualMapModel.targetVisuals,
-                zrUtil.bind(visualMapModel.getValueState, visualMapModel),
-                visualMapModel.getDataDimension(seriesModel.getData())
-            ));
-        });
-
-        return resetDefines;
-    }
-});
-
-// Only support color.
-echarts.registerVisual(VISUAL_PRIORITY, {
-    createOnAllSeries: true,
-    reset: function (seriesModel, ecModel) {
-        var data = seriesModel.getData();
-        var visualMetaList = [];
-
-        ecModel.eachComponent('visualMap', function (visualMapModel) {
-            if (visualMapModel.isTargetSeries(seriesModel)) {
-                var visualMeta = visualMapModel.getVisualMeta(
-                    zrUtil.bind(getColorVisual, null, seriesModel, visualMapModel)
-                ) || {stops: [], outerColors: []};
-
-                var concreteDim = visualMapModel.getDataDimension(data);
-                var dimInfo = data.getDimensionInfo(concreteDim);
-                if (dimInfo != null) {
-                    // visualMeta.dimension should be dimension index, but not concrete dimension.
-                    visualMeta.dimension = dimInfo.index;
-                    visualMetaList.push(visualMeta);
-                }
-            }
-        });
-
-        // console.log(JSON.stringify(visualMetaList.map(a => a.stops)));
-        seriesModel.getData().setVisual('visualMeta', visualMetaList);
-    }
-});
-
-// FIXME
-// performance and export for heatmap?
-// value can be Infinity or -Infinity
-function getColorVisual(seriesModel, visualMapModel, value, valueState) {
-    var mappings = visualMapModel.targetVisuals[valueState];
-    var visualTypes = VisualMapping.prepareVisualTypes(mappings);
-    var resultVisual = {
-        color: seriesModel.getData().getVisual('color') // default color.
-    };
-
-    for (var i = 0, len = visualTypes.length; i < len; i++) {
-        var type = visualTypes[i];
-        var mapping = mappings[
-            type === 'opacity' ? '__alphaForOpacity' : type
-        ];
-        mapping && mapping.applyVisual(value, getVisual, setVisual);
-    }
-
-    return resultVisual.color;
-
-    function getVisual(key) {
-        return resultVisual[key];
-    }
-
-    function setVisual(key, value) {
-        resultVisual[key] = value;
-    }
-}

+ 0 - 35
admin/node_modules/echarts/src/component/visualMap/visualMapAction.js

@@ -1,35 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../echarts';
-
-var actionInfo = {
-    type: 'selectDataRange',
-    event: 'dataRangeSelected',
-    // FIXME use updateView appears wrong
-    update: 'update'
-};
-
-echarts.registerAction(actionInfo, function (payload, ecModel) {
-
-    ecModel.eachComponent({mainType: 'visualMap', query: payload}, function (model) {
-        model.setSelected(payload.selected);
-    });
-
-});

+ 0 - 33
admin/node_modules/echarts/src/component/visualMapContinuous.js

@@ -1,33 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * DataZoom component entry
- */
-
-import * as echarts from '../echarts';
-import preprocessor from './visualMap/preprocessor';
-
-import './visualMap/typeDefaulter';
-import './visualMap/visualEncoding';
-import './visualMap/ContinuousModel';
-import './visualMap/ContinuousView';
-import './visualMap/visualMapAction';
-
-echarts.registerPreprocessor(preprocessor);

+ 0 - 33
admin/node_modules/echarts/src/component/visualMapPiecewise.js

@@ -1,33 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * DataZoom component entry
- */
-
-import * as echarts from '../echarts';
-import preprocessor from './visualMap/preprocessor';
-
-import './visualMap/typeDefaulter';
-import './visualMap/visualEncoding';
-import './visualMap/PiecewiseModel';
-import './visualMap/PiecewiseView';
-import './visualMap/visualMapAction';
-
-echarts.registerPreprocessor(preprocessor);

+ 0 - 41
admin/node_modules/echarts/src/config.js

@@ -1,41 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// (1) The code `if (__DEV__) ...` can be removed by build tool.
-// (2) If intend to use `__DEV__`, this module should be imported. Use a global
-// variable `__DEV__` may cause that miss the declaration (see #6535), or the
-// declaration is behind of the using position (for example in `Model.extent`,
-// And tools like rollup can not analysis the dependency if not import).
-
-var dev;
-
-// In browser
-if (typeof window !== 'undefined') {
-    dev = window.__DEV__;
-}
-// In node
-else if (typeof global !== 'undefined') {
-    dev = global.__DEV__;
-}
-
-if (typeof dev === 'undefined') {
-    dev = true;
-}
-
-export var __DEV__ = dev;

+ 0 - 377
admin/node_modules/echarts/src/coord/Axis.js

@@ -1,377 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {each, map} from 'zrender/src/core/util';
-import {linearMap, getPixelPrecision, round} from '../util/number';
-import {
-    createAxisTicks,
-    createAxisLabels,
-    calculateCategoryInterval
-} from './axisTickLabelBuilder';
-
-var NORMALIZED_EXTENT = [0, 1];
-
-/**
- * Base class of Axis.
- * @constructor
- */
-var Axis = function (dim, scale, extent) {
-
-    /**
-     * Axis dimension. Such as 'x', 'y', 'z', 'angle', 'radius'.
-     * @type {string}
-     */
-    this.dim = dim;
-
-    /**
-     * Axis scale
-     * @type {module:echarts/coord/scale/*}
-     */
-    this.scale = scale;
-
-    /**
-     * @type {Array.<number>}
-     * @private
-     */
-    this._extent = extent || [0, 0];
-
-    /**
-     * @type {boolean}
-     */
-    this.inverse = false;
-
-    /**
-     * Usually true when axis has a ordinal scale
-     * @type {boolean}
-     */
-    this.onBand = false;
-};
-
-Axis.prototype = {
-
-    constructor: Axis,
-
-    /**
-     * If axis extent contain given coord
-     * @param {number} coord
-     * @return {boolean}
-     */
-    contain: function (coord) {
-        var extent = this._extent;
-        var min = Math.min(extent[0], extent[1]);
-        var max = Math.max(extent[0], extent[1]);
-        return coord >= min && coord <= max;
-    },
-
-    /**
-     * If axis extent contain given data
-     * @param {number} data
-     * @return {boolean}
-     */
-    containData: function (data) {
-        return this.scale.contain(data);
-    },
-
-    /**
-     * Get coord extent.
-     * @return {Array.<number>}
-     */
-    getExtent: function () {
-        return this._extent.slice();
-    },
-
-    /**
-     * Get precision used for formatting
-     * @param {Array.<number>} [dataExtent]
-     * @return {number}
-     */
-    getPixelPrecision: function (dataExtent) {
-        return getPixelPrecision(
-            dataExtent || this.scale.getExtent(),
-            this._extent
-        );
-    },
-
-    /**
-     * Set coord extent
-     * @param {number} start
-     * @param {number} end
-     */
-    setExtent: function (start, end) {
-        var extent = this._extent;
-        extent[0] = start;
-        extent[1] = end;
-    },
-
-    /**
-     * Convert data to coord. Data is the rank if it has an ordinal scale
-     * @param {number} data
-     * @param  {boolean} clamp
-     * @return {number}
-     */
-    dataToCoord: function (data, clamp) {
-        var extent = this._extent;
-        var scale = this.scale;
-        data = scale.normalize(data);
-
-        if (this.onBand && scale.type === 'ordinal') {
-            extent = extent.slice();
-            fixExtentWithBands(extent, scale.count());
-        }
-
-        return linearMap(data, NORMALIZED_EXTENT, extent, clamp);
-    },
-
-    /**
-     * Convert coord to data. Data is the rank if it has an ordinal scale
-     * @param {number} coord
-     * @param  {boolean} clamp
-     * @return {number}
-     */
-    coordToData: function (coord, clamp) {
-        var extent = this._extent;
-        var scale = this.scale;
-
-        if (this.onBand && scale.type === 'ordinal') {
-            extent = extent.slice();
-            fixExtentWithBands(extent, scale.count());
-        }
-
-        var t = linearMap(coord, extent, NORMALIZED_EXTENT, clamp);
-
-        return this.scale.scale(t);
-    },
-
-    /**
-     * Convert pixel point to data in axis
-     * @param {Array.<number>} point
-     * @param  {boolean} clamp
-     * @return {number} data
-     */
-    pointToData: function (point, clamp) {
-        // Should be implemented in derived class if necessary.
-    },
-
-    /**
-     * Different from `zrUtil.map(axis.getTicks(), axis.dataToCoord, axis)`,
-     * `axis.getTicksCoords` considers `onBand`, which is used by
-     * `boundaryGap:true` of category axis and splitLine and splitArea.
-     * @param {Object} [opt]
-     * @param {Model} [opt.tickModel=axis.model.getModel('axisTick')]
-     * @param {boolean} [opt.clamp] If `true`, the first and the last
-     *        tick must be at the axis end points. Otherwise, clip ticks
-     *        that outside the axis extent.
-     * @return {Array.<Object>} [{
-     *     coord: ...,
-     *     tickValue: ...
-     * }, ...]
-     */
-    getTicksCoords: function (opt) {
-        opt = opt || {};
-
-        var tickModel = opt.tickModel || this.getTickModel();
-        var result = createAxisTicks(this, tickModel);
-        var ticks = result.ticks;
-
-        var ticksCoords = map(ticks, function (tickValue) {
-            return {
-                coord: this.dataToCoord(tickValue),
-                tickValue: tickValue
-            };
-        }, this);
-
-        var alignWithLabel = tickModel.get('alignWithLabel');
-
-        fixOnBandTicksCoords(
-            this, ticksCoords, alignWithLabel, opt.clamp
-        );
-
-        return ticksCoords;
-    },
-
-    /**
-     * @return {Array.<Array.<Object>>} [{ coord: ..., tickValue: ...}]
-     */
-    getMinorTicksCoords: function () {
-        if (this.scale.type === 'ordinal') {
-            // Category axis doesn't support minor ticks
-            return [];
-        }
-
-        var minorTickModel = this.model.getModel('minorTick');
-        var splitNumber = minorTickModel.get('splitNumber');
-        // Protection.
-        if (!(splitNumber > 0 && splitNumber < 100)) {
-            splitNumber = 5;
-        }
-        var minorTicks = this.scale.getMinorTicks(splitNumber);
-        var minorTicksCoords = map(minorTicks, function (minorTicksGroup) {
-            return map(minorTicksGroup, function (minorTick) {
-                return {
-                    coord: this.dataToCoord(minorTick),
-                    tickValue: minorTick
-                };
-            }, this);
-        }, this);
-        return minorTicksCoords;
-    },
-
-    /**
-     * @return {Array.<Object>} [{
-     *     formattedLabel: string,
-     *     rawLabel: axis.scale.getLabel(tickValue)
-     *     tickValue: number
-     * }, ...]
-     */
-    getViewLabels: function () {
-        return createAxisLabels(this).labels;
-    },
-
-    /**
-     * @return {module:echarts/coord/model/Model}
-     */
-    getLabelModel: function () {
-        return this.model.getModel('axisLabel');
-    },
-
-    /**
-     * Notice here we only get the default tick model. For splitLine
-     * or splitArea, we should pass the splitLineModel or splitAreaModel
-     * manually when calling `getTicksCoords`.
-     * In GL, this method may be overrided to:
-     * `axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));`
-     * @return {module:echarts/coord/model/Model}
-     */
-    getTickModel: function () {
-        return this.model.getModel('axisTick');
-    },
-
-    /**
-     * Get width of band
-     * @return {number}
-     */
-    getBandWidth: function () {
-        var axisExtent = this._extent;
-        var dataExtent = this.scale.getExtent();
-
-        var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0);
-        // Fix #2728, avoid NaN when only one data.
-        len === 0 && (len = 1);
-
-        var size = Math.abs(axisExtent[1] - axisExtent[0]);
-
-        return Math.abs(size) / len;
-    },
-
-    /**
-     * @abstract
-     * @return {boolean} Is horizontal
-     */
-    isHorizontal: null,
-
-    /**
-     * @abstract
-     * @return {number} Get axis rotate, by degree.
-     */
-    getRotate: null,
-
-    /**
-     * Only be called in category axis.
-     * Can be overrided, consider other axes like in 3D.
-     * @return {number} Auto interval for cateogry axis tick and label
-     */
-    calculateCategoryInterval: function () {
-        return calculateCategoryInterval(this);
-    }
-
-};
-
-function fixExtentWithBands(extent, nTick) {
-    var size = extent[1] - extent[0];
-    var len = nTick;
-    var margin = size / len / 2;
-    extent[0] += margin;
-    extent[1] -= margin;
-}
-
-// If axis has labels [1, 2, 3, 4]. Bands on the axis are
-// |---1---|---2---|---3---|---4---|.
-// So the displayed ticks and splitLine/splitArea should between
-// each data item, otherwise cause misleading (e.g., split tow bars
-// of a single data item when there are two bar series).
-// Also consider if tickCategoryInterval > 0 and onBand, ticks and
-// splitLine/spliteArea should layout appropriately corresponding
-// to displayed labels. (So we should not use `getBandWidth` in this
-// case).
-function fixOnBandTicksCoords(axis, ticksCoords, alignWithLabel, clamp) {
-    var ticksLen = ticksCoords.length;
-
-    if (!axis.onBand || alignWithLabel || !ticksLen) {
-        return;
-    }
-
-    var axisExtent = axis.getExtent();
-    var last;
-    var diffSize;
-    if (ticksLen === 1) {
-        ticksCoords[0].coord = axisExtent[0];
-        last = ticksCoords[1] = {coord: axisExtent[0]};
-    }
-    else {
-        var crossLen = ticksCoords[ticksLen - 1].tickValue - ticksCoords[0].tickValue;
-        var shift = (ticksCoords[ticksLen - 1].coord - ticksCoords[0].coord) / crossLen;
-
-        each(ticksCoords, function (ticksItem) {
-            ticksItem.coord -= shift / 2;
-        });
-
-        var dataExtent = axis.scale.getExtent();
-        diffSize = 1 + dataExtent[1] - ticksCoords[ticksLen - 1].tickValue;
-
-        last = {coord: ticksCoords[ticksLen - 1].coord + shift * diffSize};
-
-        ticksCoords.push(last);
-    }
-
-    var inverse = axisExtent[0] > axisExtent[1];
-
-    // Handling clamp.
-    if (littleThan(ticksCoords[0].coord, axisExtent[0])) {
-        clamp ? (ticksCoords[0].coord = axisExtent[0]) : ticksCoords.shift();
-    }
-    if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) {
-        ticksCoords.unshift({coord: axisExtent[0]});
-    }
-    if (littleThan(axisExtent[1], last.coord)) {
-        clamp ? (last.coord = axisExtent[1]) : ticksCoords.pop();
-    }
-    if (clamp && littleThan(last.coord, axisExtent[1])) {
-        ticksCoords.push({coord: axisExtent[1]});
-    }
-
-    function littleThan(a, b) {
-        // Avoid rounding error cause calculated tick coord different with extent.
-        // It may cause an extra unecessary tick added.
-        a = round(a);
-        b = round(b);
-        return inverse ? a > b : a < b;
-    }
-}
-
-export default Axis;

+ 0 - 85
admin/node_modules/echarts/src/coord/ICoordinateSystem

@@ -1,85 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Coordinate System Interface:
- *
- *
- * Class members:
- *
- *  + dimensions {Array.<strign>}: mandatory
- *
- *
- * Instance members:
- *
- *  + dimensions {Array.<strign>}: mandatory
- *
- *  + model {module:echarts/model/Model}: mandatory
- *
- *  + create: mandatory
- *     @param {module:echarts/model/Global} ecModel
- *     @param {module:echarts/ExtensionAPI} api
- *     @return {Object} coordinate system instance
- *
- *  + update: mandatory
- *     @param {module:echarts/model/Global} ecModel
- *     @param {module:echarts/ExtensionAPI} api
- *
- *  + getAxis {Function}: mandatory
- *      @param {string} dim
- *      @return {module:echarts/coord/Axis}
- *
- *  + getAxes: {Function}: optional
- *      @return {Array.<module:echarts/coord/Axis>}
- *
- *  + axisPointerEnabled {boolean}
- *
- *  + dataToPoint {Function}: mandatory
- *      @param {*|Array.<*>} data
- *      @param {*} Defined by the coordinate system itself
- *      @param {Array.<*>} out
- *      @return {Array.<number>} point Point in global pixel coordinate system.
- *
- *  + pointToData {Function}: mandatory
- *      @param {Array.<number>} point Point in global pixel coordinate system.
- *      @param {*} Defined by the coordinate system itself
- *      @param {Array.<*>} out
- *      @return {*|Array.<*>} data
- *
- *  + containPoint {Function}: mandatory
- *      @param {Array.<number>} point Point in global pixel coordinate system.
- *      @return {boolean}
- *
- *  + getDimensionsInfo {Function}: optional
- *      @return {Array.<string|Object>} dimensionsInfo
- *              Like [{name: ..., type: ...}, 'xxx', ...]
- *
- *  + convertToPixel:
- *  + convertFromPixel:
- *        These two methods is also responsible for determine whether this
- *        coodinate system is applicable to the given `finder`.
- *        Each coordinate system will be tried, util one returns none
- *        null/undefined value.
- *        @param {module:echarts/model/Global} ecModel
- *        @param {Object} finder
- *        @param {Array|number} value
- *        @return {Array|number} convert result.
- *
- *
- */

+ 0 - 324
admin/node_modules/echarts/src/coord/View.js

@@ -1,324 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Simple view coordinate system
- * Mapping given x, y to transformd view x, y
- */
-
-import * as zrUtil from 'zrender/src/core/util';
-import * as vector from 'zrender/src/core/vector';
-import * as matrix from 'zrender/src/core/matrix';
-import BoundingRect from 'zrender/src/core/BoundingRect';
-import Transformable from 'zrender/src/mixin/Transformable';
-
-var v2ApplyTransform = vector.applyTransform;
-
-// Dummy transform node
-function TransformDummy() {
-    Transformable.call(this);
-}
-zrUtil.mixin(TransformDummy, Transformable);
-
-function View(name) {
-    /**
-     * @type {string}
-     */
-    this.name = name;
-
-    /**
-     * @type {Object}
-     */
-    this.zoomLimit;
-
-    Transformable.call(this);
-
-    this._roamTransformable = new TransformDummy();
-
-    this._rawTransformable = new TransformDummy();
-
-    this._center;
-    this._zoom;
-}
-
-View.prototype = {
-
-    constructor: View,
-
-    type: 'view',
-
-    /**
-     * @param {Array.<string>}
-     * @readOnly
-     */
-    dimensions: ['x', 'y'],
-
-    /**
-     * Set bounding rect
-     * @param {number} x
-     * @param {number} y
-     * @param {number} width
-     * @param {number} height
-     */
-
-    // PENDING to getRect
-    setBoundingRect: function (x, y, width, height) {
-        this._rect = new BoundingRect(x, y, width, height);
-        return this._rect;
-    },
-
-    /**
-     * @return {module:zrender/core/BoundingRect}
-     */
-    // PENDING to getRect
-    getBoundingRect: function () {
-        return this._rect;
-    },
-
-    /**
-     * @param {number} x
-     * @param {number} y
-     * @param {number} width
-     * @param {number} height
-     */
-    setViewRect: function (x, y, width, height) {
-        this.transformTo(x, y, width, height);
-        this._viewRect = new BoundingRect(x, y, width, height);
-    },
-
-    /**
-     * Transformed to particular position and size
-     * @param {number} x
-     * @param {number} y
-     * @param {number} width
-     * @param {number} height
-     */
-    transformTo: function (x, y, width, height) {
-        var rect = this.getBoundingRect();
-        var rawTransform = this._rawTransformable;
-
-        rawTransform.transform = rect.calculateTransform(
-            new BoundingRect(x, y, width, height)
-        );
-
-        rawTransform.decomposeTransform();
-
-        this._updateTransform();
-    },
-
-    /**
-     * Set center of view
-     * @param {Array.<number>} [centerCoord]
-     */
-    setCenter: function (centerCoord) {
-        if (!centerCoord) {
-            return;
-        }
-        this._center = centerCoord;
-
-        this._updateCenterAndZoom();
-    },
-
-    /**
-     * @param {number} zoom
-     */
-    setZoom: function (zoom) {
-        zoom = zoom || 1;
-
-        var zoomLimit = this.zoomLimit;
-        if (zoomLimit) {
-            if (zoomLimit.max != null) {
-                zoom = Math.min(zoomLimit.max, zoom);
-            }
-            if (zoomLimit.min != null) {
-                zoom = Math.max(zoomLimit.min, zoom);
-            }
-        }
-        this._zoom = zoom;
-
-        this._updateCenterAndZoom();
-    },
-
-    /**
-     * Get default center without roam
-     */
-    getDefaultCenter: function () {
-        // Rect before any transform
-        var rawRect = this.getBoundingRect();
-        var cx = rawRect.x + rawRect.width / 2;
-        var cy = rawRect.y + rawRect.height / 2;
-
-        return [cx, cy];
-    },
-
-    getCenter: function () {
-        return this._center || this.getDefaultCenter();
-    },
-
-    getZoom: function () {
-        return this._zoom || 1;
-    },
-
-    /**
-     * @return {Array.<number}
-     */
-    getRoamTransform: function () {
-        return this._roamTransformable.getLocalTransform();
-    },
-
-    /**
-     * Remove roam
-     */
-    _updateCenterAndZoom: function () {
-        // Must update after view transform updated
-        var rawTransformMatrix = this._rawTransformable.getLocalTransform();
-        var roamTransform = this._roamTransformable;
-        var defaultCenter = this.getDefaultCenter();
-        var center = this.getCenter();
-        var zoom = this.getZoom();
-
-        center = vector.applyTransform([], center, rawTransformMatrix);
-        defaultCenter = vector.applyTransform([], defaultCenter, rawTransformMatrix);
-
-        roamTransform.origin = center;
-        roamTransform.position = [
-            defaultCenter[0] - center[0],
-            defaultCenter[1] - center[1]
-        ];
-        roamTransform.scale = [zoom, zoom];
-
-        this._updateTransform();
-    },
-
-    /**
-     * Update transform from roam and mapLocation
-     * @private
-     */
-    _updateTransform: function () {
-        var roamTransformable = this._roamTransformable;
-        var rawTransformable = this._rawTransformable;
-
-        rawTransformable.parent = roamTransformable;
-        roamTransformable.updateTransform();
-        rawTransformable.updateTransform();
-
-        matrix.copy(this.transform || (this.transform = []), rawTransformable.transform || matrix.create());
-
-        this._rawTransform = rawTransformable.getLocalTransform();
-
-        this.invTransform = this.invTransform || [];
-        matrix.invert(this.invTransform, this.transform);
-
-        this.decomposeTransform();
-    },
-
-    getTransformInfo: function () {
-        var roamTransform = this._roamTransformable.transform;
-        var rawTransformable = this._rawTransformable;
-        return {
-            roamTransform: roamTransform ? zrUtil.slice(roamTransform) : matrix.create(),
-            rawScale: zrUtil.slice(rawTransformable.scale),
-            rawPosition: zrUtil.slice(rawTransformable.position)
-        };
-    },
-
-    /**
-     * @return {module:zrender/core/BoundingRect}
-     */
-    getViewRect: function () {
-        return this._viewRect;
-    },
-
-    /**
-     * Get view rect after roam transform
-     * @return {module:zrender/core/BoundingRect}
-     */
-    getViewRectAfterRoam: function () {
-        var rect = this.getBoundingRect().clone();
-        rect.applyTransform(this.transform);
-        return rect;
-    },
-
-    /**
-     * Convert a single (lon, lat) data item to (x, y) point.
-     * @param {Array.<number>} data
-     * @param {boolean} noRoam
-     * @param {Array.<number>} [out]
-     * @return {Array.<number>}
-     */
-    dataToPoint: function (data, noRoam, out) {
-        var transform = noRoam ? this._rawTransform : this.transform;
-        out = out || [];
-        return transform
-            ? v2ApplyTransform(out, data, transform)
-            : vector.copy(out, data);
-    },
-
-    /**
-     * Convert a (x, y) point to (lon, lat) data
-     * @param {Array.<number>} point
-     * @return {Array.<number>}
-     */
-    pointToData: function (point) {
-        var invTransform = this.invTransform;
-        return invTransform
-            ? v2ApplyTransform([], point, invTransform)
-            : [point[0], point[1]];
-    },
-
-    /**
-     * @implements
-     * see {module:echarts/CoodinateSystem}
-     */
-    convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),
-
-    /**
-     * @implements
-     * see {module:echarts/CoodinateSystem}
-     */
-    convertFromPixel: zrUtil.curry(doConvert, 'pointToData'),
-
-    /**
-     * @implements
-     * see {module:echarts/CoodinateSystem}
-     */
-    containPoint: function (point) {
-        return this.getViewRectAfterRoam().contain(point[0], point[1]);
-    }
-
-    /**
-     * @return {number}
-     */
-    // getScalarScale: function () {
-    //     // Use determinant square root of transform to mutiply scalar
-    //     var m = this.transform;
-    //     var det = Math.sqrt(Math.abs(m[0] * m[3] - m[2] * m[1]));
-    //     return det;
-    // }
-};
-
-zrUtil.mixin(View, Transformable);
-
-function doConvert(methodName, ecModel, finder, value) {
-    var seriesModel = finder.seriesModel;
-    var coordSys = seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph.
-    return coordSys === this ? coordSys[methodName](value) : null;
-}
-
-export default View;

+ 0 - 217
admin/node_modules/echarts/src/coord/axisDefault.js

@@ -1,217 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-var defaultOption = {
-    show: true,
-    zlevel: 0,
-    z: 0,
-    // Inverse the axis.
-    inverse: false,
-
-    // Axis name displayed.
-    name: '',
-    // 'start' | 'middle' | 'end'
-    nameLocation: 'end',
-    // By degree. By defualt auto rotate by nameLocation.
-    nameRotate: null,
-    nameTruncate: {
-        maxWidth: null,
-        ellipsis: '...',
-        placeholder: '.'
-    },
-    // Use global text style by default.
-    nameTextStyle: {},
-    // The gap between axisName and axisLine.
-    nameGap: 15,
-
-    // Default `false` to support tooltip.
-    silent: false,
-    // Default `false` to avoid legacy user event listener fail.
-    triggerEvent: false,
-
-    tooltip: {
-        show: false
-    },
-
-    axisPointer: {},
-
-    axisLine: {
-        show: true,
-        onZero: true,
-        onZeroAxisIndex: null,
-        lineStyle: {
-            color: '#333',
-            width: 1,
-            type: 'solid'
-        },
-        // The arrow at both ends the the axis.
-        symbol: ['none', 'none'],
-        symbolSize: [10, 15]
-    },
-    axisTick: {
-        show: true,
-        // Whether axisTick is inside the grid or outside the grid.
-        inside: false,
-        // The length of axisTick.
-        length: 5,
-        lineStyle: {
-            width: 1
-        }
-    },
-    axisLabel: {
-        show: true,
-        // Whether axisLabel is inside the grid or outside the grid.
-        inside: false,
-        rotate: 0,
-        // true | false | null/undefined (auto)
-        showMinLabel: null,
-        // true | false | null/undefined (auto)
-        showMaxLabel: null,
-        margin: 8,
-        // formatter: null,
-        fontSize: 12
-    },
-    splitLine: {
-        show: true,
-        lineStyle: {
-            color: ['#ccc'],
-            width: 1,
-            type: 'solid'
-        }
-    },
-    splitArea: {
-        show: false,
-        areaStyle: {
-            color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)']
-        }
-    }
-};
-
-var axisDefault = {};
-
-axisDefault.categoryAxis = zrUtil.merge({
-    // The gap at both ends of the axis. For categoryAxis, boolean.
-    boundaryGap: true,
-    // Set false to faster category collection.
-    // Only usefull in the case like: category is
-    // ['2012-01-01', '2012-01-02', ...], where the input
-    // data has been ensured not duplicate and is large data.
-    // null means "auto":
-    // if axis.data provided, do not deduplication,
-    // else do deduplication.
-    deduplication: null,
-    // splitArea: {
-        // show: false
-    // },
-    splitLine: {
-        show: false
-    },
-    axisTick: {
-        // If tick is align with label when boundaryGap is true
-        alignWithLabel: false,
-        interval: 'auto'
-    },
-    axisLabel: {
-        interval: 'auto'
-    }
-}, defaultOption);
-
-axisDefault.valueAxis = zrUtil.merge({
-    // The gap at both ends of the axis. For value axis, [GAP, GAP], where
-    // `GAP` can be an absolute pixel number (like `35`), or percent (like `'30%'`)
-    boundaryGap: [0, 0],
-
-    // TODO
-    // min/max: [30, datamin, 60] or [20, datamin] or [datamin, 60]
-
-    // Min value of the axis. can be:
-    // + a number
-    // + 'dataMin': use the min value in data.
-    // + null/undefined: auto decide min value (consider pretty look and boundaryGap).
-    // min: null,
-
-    // Max value of the axis. can be:
-    // + a number
-    // + 'dataMax': use the max value in data.
-    // + null/undefined: auto decide max value (consider pretty look and boundaryGap).
-    // max: null,
-
-    // Readonly prop, specifies start value of the range when using data zoom.
-    // rangeStart: null
-
-    // Readonly prop, specifies end value of the range when using data zoom.
-    // rangeEnd: null
-
-    // Optional value can be:
-    // + `false`: always include value 0.
-    // + `true`: the extent do not consider value 0.
-    // scale: false,
-
-    // AxisTick and axisLabel and splitLine are caculated based on splitNumber.
-    splitNumber: 5,
-
-    // Interval specifies the span of the ticks is mandatorily.
-    // interval: null
-
-    // Specify min interval when auto calculate tick interval.
-    // minInterval: null
-
-    // Specify max interval when auto calculate tick interval.
-    // maxInterval: null
-
-    minorTick: {
-        // Minor tick, not available for cateogry axis.
-        show: false,
-        // Split number of minor ticks. The value should be in range of (0, 100)
-        splitNumber: 5,
-        // Lenght of minor tick
-        length: 3,
-
-        // Same inside with axisTick
-
-        // Line style
-        lineStyle: {
-            // Default to be same with axisTick
-        }
-    },
-
-    minorSplitLine: {
-        show: false,
-
-        lineStyle: {
-            color: '#eee',
-            width: 1
-        }
-    }
-}, defaultOption);
-
-axisDefault.timeAxis = zrUtil.defaults({
-    scale: true,
-    min: 'dataMin',
-    max: 'dataMax'
-}, axisDefault.valueAxis);
-
-axisDefault.logAxis = zrUtil.defaults({
-    scale: true,
-    logBase: 10
-}, axisDefault.valueAxis);
-
-export default axisDefault;

+ 0 - 416
admin/node_modules/echarts/src/coord/axisHelper.js

@@ -1,416 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {__DEV__} from '../config';
-import * as zrUtil from 'zrender/src/core/util';
-import OrdinalScale from '../scale/Ordinal';
-import IntervalScale from '../scale/Interval';
-import Scale from '../scale/Scale';
-import * as numberUtil from '../util/number';
-import {
-    prepareLayoutBarSeries,
-    makeColumnLayout,
-    retrieveColumnLayout
-} from '../layout/barGrid';
-import BoundingRect from 'zrender/src/core/BoundingRect';
-
-import '../scale/Time';
-import '../scale/Log';
-
-/**
- * Get axis scale extent before niced.
- * Item of returned array can only be number (including Infinity and NaN).
- */
-export function getScaleExtent(scale, model) {
-    var scaleType = scale.type;
-
-    var min = model.getMin();
-    var max = model.getMax();
-    var originalExtent = scale.getExtent();
-
-    var axisDataLen;
-    var boundaryGap;
-    var span;
-    if (scaleType === 'ordinal') {
-        axisDataLen = model.getCategories().length;
-    }
-    else {
-        boundaryGap = model.get('boundaryGap');
-        if (!zrUtil.isArray(boundaryGap)) {
-            boundaryGap = [boundaryGap || 0, boundaryGap || 0];
-        }
-        if (typeof boundaryGap[0] === 'boolean') {
-            if (__DEV__) {
-                console.warn('Boolean type for boundaryGap is only '
-                    + 'allowed for ordinal axis. Please use string in '
-                    + 'percentage instead, e.g., "20%". Currently, '
-                    + 'boundaryGap is set to be 0.');
-            }
-            boundaryGap = [0, 0];
-        }
-        boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], 1);
-        boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], 1);
-        span = (originalExtent[1] - originalExtent[0])
-            || Math.abs(originalExtent[0]);
-    }
-
-    // Notice: When min/max is not set (that is, when there are null/undefined,
-    // which is the most common case), these cases should be ensured:
-    // (1) For 'ordinal', show all axis.data.
-    // (2) For others:
-    //      + `boundaryGap` is applied (if min/max set, boundaryGap is
-    //      disabled).
-    //      + If `needCrossZero`, min/max should be zero, otherwise, min/max should
-    //      be the result that originalExtent enlarged by boundaryGap.
-    // (3) If no data, it should be ensured that `scale.setBlank` is set.
-
-    // FIXME
-    // (1) When min/max is 'dataMin' or 'dataMax', should boundaryGap be able to used?
-    // (2) When `needCrossZero` and all data is positive/negative, should it be ensured
-    // that the results processed by boundaryGap are positive/negative?
-
-    if (min === 'dataMin') {
-        min = originalExtent[0];
-    }
-    else if (typeof min === 'function') {
-        min = min({
-            min: originalExtent[0],
-            max: originalExtent[1]
-        });
-    }
-
-    if (max === 'dataMax') {
-        max = originalExtent[1];
-    }
-    else if (typeof max === 'function') {
-        max = max({
-            min: originalExtent[0],
-            max: originalExtent[1]
-        });
-    }
-
-    var fixMin = min != null;
-    var fixMax = max != null;
-
-    if (min == null) {
-        min = scaleType === 'ordinal'
-            ? (axisDataLen ? 0 : NaN)
-            : originalExtent[0] - boundaryGap[0] * span;
-    }
-    if (max == null) {
-        max = scaleType === 'ordinal'
-            ? (axisDataLen ? axisDataLen - 1 : NaN)
-            : originalExtent[1] + boundaryGap[1] * span;
-    }
-
-    (min == null || !isFinite(min)) && (min = NaN);
-    (max == null || !isFinite(max)) && (max = NaN);
-
-    scale.setBlank(
-        zrUtil.eqNaN(min)
-        || zrUtil.eqNaN(max)
-        || (scaleType === 'ordinal' && !scale.getOrdinalMeta().categories.length)
-    );
-
-    // Evaluate if axis needs cross zero
-    if (model.getNeedCrossZero()) {
-        // Axis is over zero and min is not set
-        if (min > 0 && max > 0 && !fixMin) {
-            min = 0;
-        }
-        // Axis is under zero and max is not set
-        if (min < 0 && max < 0 && !fixMax) {
-            max = 0;
-        }
-    }
-
-    // If bars are placed on a base axis of type time or interval account for axis boundary overflow and current axis
-    // is base axis
-    // FIXME
-    // (1) Consider support value axis, where below zero and axis `onZero` should be handled properly.
-    // (2) Refactor the logic with `barGrid`. Is it not need to `makeBarWidthAndOffsetInfo` twice with different extent?
-    //     Should not depend on series type `bar`?
-    // (3) Fix that might overlap when using dataZoom.
-    // (4) Consider other chart types using `barGrid`?
-    // See #6728, #4862, `test/bar-overflow-time-plot.html`
-    var ecModel = model.ecModel;
-    if (ecModel && (scaleType === 'time' /*|| scaleType === 'interval' */)) {
-        var barSeriesModels = prepareLayoutBarSeries('bar', ecModel);
-        var isBaseAxisAndHasBarSeries;
-
-        zrUtil.each(barSeriesModels, function (seriesModel) {
-            isBaseAxisAndHasBarSeries |= seriesModel.getBaseAxis() === model.axis;
-        });
-
-        if (isBaseAxisAndHasBarSeries) {
-            // Calculate placement of bars on axis
-            var barWidthAndOffset = makeColumnLayout(barSeriesModels);
-
-            // Adjust axis min and max to account for overflow
-            var adjustedScale = adjustScaleForOverflow(min, max, model, barWidthAndOffset);
-            min = adjustedScale.min;
-            max = adjustedScale.max;
-        }
-    }
-
-    return {
-        extent: [min, max],
-        // "fix" means "fixed", the value should not be
-        // changed in the subsequent steps.
-        fixMin: fixMin,
-        fixMax: fixMax
-    };
-}
-
-function adjustScaleForOverflow(min, max, model, barWidthAndOffset) {
-
-    // Get Axis Length
-    var axisExtent = model.axis.getExtent();
-    var axisLength = axisExtent[1] - axisExtent[0];
-
-    // Get bars on current base axis and calculate min and max overflow
-    var barsOnCurrentAxis = retrieveColumnLayout(barWidthAndOffset, model.axis);
-    if (barsOnCurrentAxis === undefined) {
-        return {min: min, max: max};
-    }
-
-    var minOverflow = Infinity;
-    zrUtil.each(barsOnCurrentAxis, function (item) {
-        minOverflow = Math.min(item.offset, minOverflow);
-    });
-    var maxOverflow = -Infinity;
-    zrUtil.each(barsOnCurrentAxis, function (item) {
-        maxOverflow = Math.max(item.offset + item.width, maxOverflow);
-    });
-    minOverflow = Math.abs(minOverflow);
-    maxOverflow = Math.abs(maxOverflow);
-    var totalOverFlow = minOverflow + maxOverflow;
-
-    // Calulate required buffer based on old range and overflow
-    var oldRange = max - min;
-    var oldRangePercentOfNew = (1 - (minOverflow + maxOverflow) / axisLength);
-    var overflowBuffer = ((oldRange / oldRangePercentOfNew) - oldRange);
-
-    max += overflowBuffer * (maxOverflow / totalOverFlow);
-    min -= overflowBuffer * (minOverflow / totalOverFlow);
-
-    return {min: min, max: max};
-}
-
-export function niceScaleExtent(scale, model) {
-    var extentInfo = getScaleExtent(scale, model);
-    var extent = extentInfo.extent;
-
-    var splitNumber = model.get('splitNumber');
-
-    if (scale.type === 'log') {
-        scale.base = model.get('logBase');
-    }
-
-    var scaleType = scale.type;
-    scale.setExtent(extent[0], extent[1]);
-    scale.niceExtent({
-        splitNumber: splitNumber,
-        fixMin: extentInfo.fixMin,
-        fixMax: extentInfo.fixMax,
-        minInterval: (scaleType === 'interval' || scaleType === 'time')
-            ? model.get('minInterval') : null,
-        maxInterval: (scaleType === 'interval' || scaleType === 'time')
-            ? model.get('maxInterval') : null
-    });
-
-    // If some one specified the min, max. And the default calculated interval
-    // is not good enough. He can specify the interval. It is often appeared
-    // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard
-    // to be 60.
-    // FIXME
-    var interval = model.get('interval');
-    if (interval != null) {
-        scale.setInterval && scale.setInterval(interval);
-    }
-}
-
-/**
- * @param {module:echarts/model/Model} model
- * @param {string} [axisType] Default retrieve from model.type
- * @return {module:echarts/scale/*}
- */
-export function createScaleByModel(model, axisType) {
-    axisType = axisType || model.get('type');
-    if (axisType) {
-        switch (axisType) {
-            // Buildin scale
-            case 'category':
-                return new OrdinalScale(
-                    model.getOrdinalMeta
-                        ? model.getOrdinalMeta()
-                        : model.getCategories(),
-                    [Infinity, -Infinity]
-                );
-            case 'value':
-                return new IntervalScale();
-            // Extended scale, like time and log
-            default:
-                return (Scale.getClass(axisType) || IntervalScale).create(model);
-        }
-    }
-}
-
-/**
- * Check if the axis corss 0
- */
-export function ifAxisCrossZero(axis) {
-    var dataExtent = axis.scale.getExtent();
-    var min = dataExtent[0];
-    var max = dataExtent[1];
-    return !((min > 0 && max > 0) || (min < 0 && max < 0));
-}
-
-/**
- * @param {module:echarts/coord/Axis} axis
- * @return {Function} Label formatter function.
- *         param: {number} tickValue,
- *         param: {number} idx, the index in all ticks.
- *                         If category axis, this param is not requied.
- *         return: {string} label string.
- */
-export function makeLabelFormatter(axis) {
-    var labelFormatter = axis.getLabelModel().get('formatter');
-    var categoryTickStart = axis.type === 'category' ? axis.scale.getExtent()[0] : null;
-
-    if (typeof labelFormatter === 'string') {
-        labelFormatter = (function (tpl) {
-            return function (val) {
-                // For category axis, get raw value; for numeric axis,
-                // get foramtted label like '1,333,444'.
-                val = axis.scale.getLabel(val);
-                return tpl.replace('{value}', val != null ? val : '');
-            };
-        })(labelFormatter);
-        // Consider empty array
-        return labelFormatter;
-    }
-    else if (typeof labelFormatter === 'function') {
-        return function (tickValue, idx) {
-            // The original intention of `idx` is "the index of the tick in all ticks".
-            // But the previous implementation of category axis do not consider the
-            // `axisLabel.interval`, which cause that, for example, the `interval` is
-            // `1`, then the ticks "name5", "name7", "name9" are displayed, where the
-            // corresponding `idx` are `0`, `2`, `4`, but not `0`, `1`, `2`. So we keep
-            // the definition here for back compatibility.
-            if (categoryTickStart != null) {
-                idx = tickValue - categoryTickStart;
-            }
-            return labelFormatter(getAxisRawValue(axis, tickValue), idx);
-        };
-    }
-    else {
-        return function (tick) {
-            return axis.scale.getLabel(tick);
-        };
-    }
-}
-
-export function getAxisRawValue(axis, value) {
-    // In category axis with data zoom, tick is not the original
-    // index of axis.data. So tick should not be exposed to user
-    // in category axis.
-    return axis.type === 'category' ? axis.scale.getLabel(value) : value;
-}
-
-/**
- * @param {module:echarts/coord/Axis} axis
- * @return {module:zrender/core/BoundingRect} Be null/undefined if no labels.
- */
-export function estimateLabelUnionRect(axis) {
-    var axisModel = axis.model;
-    var scale = axis.scale;
-
-    if (!axisModel.get('axisLabel.show') || scale.isBlank()) {
-        return;
-    }
-
-    var isCategory = axis.type === 'category';
-
-    var realNumberScaleTicks;
-    var tickCount;
-    var categoryScaleExtent = scale.getExtent();
-
-    // Optimize for large category data, avoid call `getTicks()`.
-    if (isCategory) {
-        tickCount = scale.count();
-    }
-    else {
-        realNumberScaleTicks = scale.getTicks();
-        tickCount = realNumberScaleTicks.length;
-    }
-
-    var axisLabelModel = axis.getLabelModel();
-    var labelFormatter = makeLabelFormatter(axis);
-
-    var rect;
-    var step = 1;
-    // Simple optimization for large amount of labels
-    if (tickCount > 40) {
-        step = Math.ceil(tickCount / 40);
-    }
-    for (var i = 0; i < tickCount; i += step) {
-        var tickValue = realNumberScaleTicks ? realNumberScaleTicks[i] : categoryScaleExtent[0] + i;
-        var label = labelFormatter(tickValue);
-        var unrotatedSingleRect = axisLabelModel.getTextRect(label);
-        var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0);
-
-        rect ? rect.union(singleRect) : (rect = singleRect);
-    }
-
-    return rect;
-}
-
-function rotateTextRect(textRect, rotate) {
-    var rotateRadians = rotate * Math.PI / 180;
-    var boundingBox = textRect.plain();
-    var beforeWidth = boundingBox.width;
-    var beforeHeight = boundingBox.height;
-    var afterWidth = beforeWidth * Math.cos(rotateRadians) + beforeHeight * Math.sin(rotateRadians);
-    var afterHeight = beforeWidth * Math.sin(rotateRadians) + beforeHeight * Math.cos(rotateRadians);
-    var rotatedRect = new BoundingRect(boundingBox.x, boundingBox.y, afterWidth, afterHeight);
-
-    return rotatedRect;
-}
-
-/**
- * @param {module:echarts/src/model/Model} model axisLabelModel or axisTickModel
- * @return {number|String} Can be null|'auto'|number|function
- */
-export function getOptionCategoryInterval(model) {
-    var interval = model.get('interval');
-    return interval == null ? 'auto' : interval;
-}
-
-/**
- * Set `categoryInterval` as 0 implicitly indicates that
- * show all labels reguardless of overlap.
- * @param {Object} axis axisModel.axis
- * @return {boolean}
- */
-export function shouldShowAllLabels(axis) {
-    return axis.type === 'category'
-        && getOptionCategoryInterval(axis.getLabelModel()) === 0;
-}
-

+ 0 - 96
admin/node_modules/echarts/src/coord/axisModelCommonMixin.js

@@ -1,96 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-// import * as axisHelper from './axisHelper';
-
-export default {
-
-    /**
-     * @param {boolean} origin
-     * @return {number|string} min value or 'dataMin' or null/undefined (means auto) or NaN
-     */
-    getMin: function (origin) {
-        var option = this.option;
-        var min = (!origin && option.rangeStart != null)
-            ? option.rangeStart : option.min;
-
-        if (this.axis
-            && min != null
-            && min !== 'dataMin'
-            && typeof min !== 'function'
-            && !zrUtil.eqNaN(min)
-        ) {
-            min = this.axis.scale.parse(min);
-        }
-        return min;
-    },
-
-    /**
-     * @param {boolean} origin
-     * @return {number|string} max value or 'dataMax' or null/undefined (means auto) or NaN
-     */
-    getMax: function (origin) {
-        var option = this.option;
-        var max = (!origin && option.rangeEnd != null)
-            ? option.rangeEnd : option.max;
-
-        if (this.axis
-            && max != null
-            && max !== 'dataMax'
-            && typeof max !== 'function'
-            && !zrUtil.eqNaN(max)
-        ) {
-            max = this.axis.scale.parse(max);
-        }
-        return max;
-    },
-
-    /**
-     * @return {boolean}
-     */
-    getNeedCrossZero: function () {
-        var option = this.option;
-        return (option.rangeStart != null || option.rangeEnd != null)
-            ? false : !option.scale;
-    },
-
-    /**
-     * Should be implemented by each axis model if necessary.
-     * @return {module:echarts/model/Component} coordinate system model
-     */
-    getCoordSysModel: zrUtil.noop,
-
-    /**
-     * @param {number} rangeStart Can only be finite number or null/undefined or NaN.
-     * @param {number} rangeEnd Can only be finite number or null/undefined or NaN.
-     */
-    setRange: function (rangeStart, rangeEnd) {
-        this.option.rangeStart = rangeStart;
-        this.option.rangeEnd = rangeEnd;
-    },
-
-    /**
-     * Reset range
-     */
-    resetRange: function () {
-        // rangeStart and rangeEnd is readonly.
-        this.option.rangeStart = this.option.rangeEnd = null;
-    }
-};

+ 0 - 112
admin/node_modules/echarts/src/coord/axisModelCreator.js

@@ -1,112 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import axisDefault from './axisDefault';
-import ComponentModel from '../model/Component';
-import {
-    getLayoutParams,
-    mergeLayoutParam
-} from '../util/layout';
-import OrdinalMeta from '../data/OrdinalMeta';
-
-
-// FIXME axisType is fixed ?
-var AXIS_TYPES = ['value', 'category', 'time', 'log'];
-
-/**
- * Generate sub axis model class
- * @param {string} axisName 'x' 'y' 'radius' 'angle' 'parallel'
- * @param {module:echarts/model/Component} BaseAxisModelClass
- * @param {Function} axisTypeDefaulter
- * @param {Object} [extraDefaultOption]
- */
-export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraDefaultOption) {
-
-    zrUtil.each(AXIS_TYPES, function (axisType) {
-
-        BaseAxisModelClass.extend({
-
-            /**
-             * @readOnly
-             */
-            type: axisName + 'Axis.' + axisType,
-
-            mergeDefaultAndTheme: function (option, ecModel) {
-                var layoutMode = this.layoutMode;
-                var inputPositionParams = layoutMode
-                    ? getLayoutParams(option) : {};
-
-                var themeModel = ecModel.getTheme();
-                zrUtil.merge(option, themeModel.get(axisType + 'Axis'));
-                zrUtil.merge(option, this.getDefaultOption());
-
-                option.type = axisTypeDefaulter(axisName, option);
-
-                if (layoutMode) {
-                    mergeLayoutParam(option, inputPositionParams, layoutMode);
-                }
-            },
-
-            /**
-             * @override
-             */
-            optionUpdated: function () {
-                var thisOption = this.option;
-                if (thisOption.type === 'category') {
-                    this.__ordinalMeta = OrdinalMeta.createByAxisModel(this);
-                }
-            },
-
-            /**
-             * Should not be called before all of 'getInitailData' finished.
-             * Because categories are collected during initializing data.
-             */
-            getCategories: function (rawData) {
-                var option = this.option;
-                // FIXME
-                // warning if called before all of 'getInitailData' finished.
-                if (option.type === 'category') {
-                    if (rawData) {
-                        return option.data;
-                    }
-                    return this.__ordinalMeta.categories;
-                }
-            },
-
-            getOrdinalMeta: function () {
-                return this.__ordinalMeta;
-            },
-
-            defaultOption: zrUtil.mergeAll(
-                [
-                    {},
-                    axisDefault[axisType + 'Axis'],
-                    extraDefaultOption
-                ],
-                true
-            )
-        });
-    });
-
-    ComponentModel.registerSubTypeDefaulter(
-        axisName + 'Axis',
-        zrUtil.curry(axisTypeDefaulter, axisName)
-    );
-}

+ 0 - 375
admin/node_modules/echarts/src/coord/axisTickLabelBuilder.js

@@ -1,375 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import * as textContain from 'zrender/src/contain/text';
-import {makeInner} from '../util/model';
-import {
-    makeLabelFormatter,
-    getOptionCategoryInterval,
-    shouldShowAllLabels
-} from './axisHelper';
-
-var inner = makeInner();
-
-/**
- * @param {module:echats/coord/Axis} axis
- * @return {Object} {
- *     labels: [{
- *         formattedLabel: string,
- *         rawLabel: string,
- *         tickValue: number
- *     }, ...],
- *     labelCategoryInterval: number
- * }
- */
-export function createAxisLabels(axis) {
-    // Only ordinal scale support tick interval
-    return axis.type === 'category'
-        ? makeCategoryLabels(axis)
-        : makeRealNumberLabels(axis);
-}
-
-/**
- * @param {module:echats/coord/Axis} axis
- * @param {module:echarts/model/Model} tickModel For example, can be axisTick, splitLine, splitArea.
- * @return {Object} {
- *     ticks: Array.<number>
- *     tickCategoryInterval: number
- * }
- */
-export function createAxisTicks(axis, tickModel) {
-    // Only ordinal scale support tick interval
-    return axis.type === 'category'
-        ? makeCategoryTicks(axis, tickModel)
-        : {ticks: axis.scale.getTicks()};
-}
-
-function makeCategoryLabels(axis) {
-    var labelModel = axis.getLabelModel();
-    var result = makeCategoryLabelsActually(axis, labelModel);
-
-    return (!labelModel.get('show') || axis.scale.isBlank())
-        ? {labels: [], labelCategoryInterval: result.labelCategoryInterval}
-        : result;
-}
-
-function makeCategoryLabelsActually(axis, labelModel) {
-    var labelsCache = getListCache(axis, 'labels');
-    var optionLabelInterval = getOptionCategoryInterval(labelModel);
-    var result = listCacheGet(labelsCache, optionLabelInterval);
-
-    if (result) {
-        return result;
-    }
-
-    var labels;
-    var numericLabelInterval;
-
-    if (zrUtil.isFunction(optionLabelInterval)) {
-        labels = makeLabelsByCustomizedCategoryInterval(axis, optionLabelInterval);
-    }
-    else {
-        numericLabelInterval = optionLabelInterval === 'auto'
-            ? makeAutoCategoryInterval(axis) : optionLabelInterval;
-        labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval);
-    }
-
-    // Cache to avoid calling interval function repeatly.
-    return listCacheSet(labelsCache, optionLabelInterval, {
-        labels: labels, labelCategoryInterval: numericLabelInterval
-    });
-}
-
-function makeCategoryTicks(axis, tickModel) {
-    var ticksCache = getListCache(axis, 'ticks');
-    var optionTickInterval = getOptionCategoryInterval(tickModel);
-    var result = listCacheGet(ticksCache, optionTickInterval);
-
-    if (result) {
-        return result;
-    }
-
-    var ticks;
-    var tickCategoryInterval;
-
-    // Optimize for the case that large category data and no label displayed,
-    // we should not return all ticks.
-    if (!tickModel.get('show') || axis.scale.isBlank()) {
-        ticks = [];
-    }
-
-    if (zrUtil.isFunction(optionTickInterval)) {
-        ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true);
-    }
-    // Always use label interval by default despite label show. Consider this
-    // scenario, Use multiple grid with the xAxis sync, and only one xAxis shows
-    // labels. `splitLine` and `axisTick` should be consistent in this case.
-    else if (optionTickInterval === 'auto') {
-        var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel());
-        tickCategoryInterval = labelsResult.labelCategoryInterval;
-        ticks = zrUtil.map(labelsResult.labels, function (labelItem) {
-            return labelItem.tickValue;
-        });
-    }
-    else {
-        tickCategoryInterval = optionTickInterval;
-        ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true);
-    }
-
-    // Cache to avoid calling interval function repeatly.
-    return listCacheSet(ticksCache, optionTickInterval, {
-        ticks: ticks, tickCategoryInterval: tickCategoryInterval
-    });
-}
-
-function makeRealNumberLabels(axis) {
-    var ticks = axis.scale.getTicks();
-    var labelFormatter = makeLabelFormatter(axis);
-    return {
-        labels: zrUtil.map(ticks, function (tickValue, idx) {
-            return {
-                formattedLabel: labelFormatter(tickValue, idx),
-                rawLabel: axis.scale.getLabel(tickValue),
-                tickValue: tickValue
-            };
-        })
-    };
-}
-
-// Large category data calculation is performence sensitive, and ticks and label
-// probably be fetched by multiple times. So we cache the result.
-// axis is created each time during a ec process, so we do not need to clear cache.
-function getListCache(axis, prop) {
-    // Because key can be funciton, and cache size always be small, we use array cache.
-    return inner(axis)[prop] || (inner(axis)[prop] = []);
-}
-
-function listCacheGet(cache, key) {
-    for (var i = 0; i < cache.length; i++) {
-        if (cache[i].key === key) {
-            return cache[i].value;
-        }
-    }
-}
-
-function listCacheSet(cache, key, value) {
-    cache.push({key: key, value: value});
-    return value;
-}
-
-function makeAutoCategoryInterval(axis) {
-    var result = inner(axis).autoInterval;
-    return result != null
-        ? result
-        : (inner(axis).autoInterval = axis.calculateCategoryInterval());
-}
-
-/**
- * Calculate interval for category axis ticks and labels.
- * To get precise result, at least one of `getRotate` and `isHorizontal`
- * should be implemented in axis.
- */
-export function calculateCategoryInterval(axis) {
-    var params = fetchAutoCategoryIntervalCalculationParams(axis);
-    var labelFormatter = makeLabelFormatter(axis);
-    var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI;
-
-    var ordinalScale = axis.scale;
-    var ordinalExtent = ordinalScale.getExtent();
-    // Providing this method is for optimization:
-    // avoid generating a long array by `getTicks`
-    // in large category data case.
-    var tickCount = ordinalScale.count();
-
-    if (ordinalExtent[1] - ordinalExtent[0] < 1) {
-        return 0;
-    }
-
-    var step = 1;
-    // Simple optimization. Empirical value: tick count should less than 40.
-    if (tickCount > 40) {
-        step = Math.max(1, Math.floor(tickCount / 40));
-    }
-    var tickValue = ordinalExtent[0];
-    var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);
-    var unitW = Math.abs(unitSpan * Math.cos(rotation));
-    var unitH = Math.abs(unitSpan * Math.sin(rotation));
-
-    var maxW = 0;
-    var maxH = 0;
-
-    // Caution: Performance sensitive for large category data.
-    // Consider dataZoom, we should make appropriate step to avoid O(n) loop.
-    for (; tickValue <= ordinalExtent[1]; tickValue += step) {
-        var width = 0;
-        var height = 0;
-
-        // Not precise, do not consider align and vertical align
-        // and each distance from axis line yet.
-        var rect = textContain.getBoundingRect(
-            labelFormatter(tickValue), params.font, 'center', 'top'
-        );
-        // Magic number
-        width = rect.width * 1.3;
-        height = rect.height * 1.3;
-
-        // Min size, void long loop.
-        maxW = Math.max(maxW, width, 7);
-        maxH = Math.max(maxH, height, 7);
-    }
-
-    var dw = maxW / unitW;
-    var dh = maxH / unitH;
-    // 0/0 is NaN, 1/0 is Infinity.
-    isNaN(dw) && (dw = Infinity);
-    isNaN(dh) && (dh = Infinity);
-    var interval = Math.max(0, Math.floor(Math.min(dw, dh)));
-
-    var cache = inner(axis.model);
-    var axisExtent = axis.getExtent();
-    var lastAutoInterval = cache.lastAutoInterval;
-    var lastTickCount = cache.lastTickCount;
-
-    // Use cache to keep interval stable while moving zoom window,
-    // otherwise the calculated interval might jitter when the zoom
-    // window size is close to the interval-changing size.
-    // For example, if all of the axis labels are `a, b, c, d, e, f, g`.
-    // The jitter will cause that sometimes the displayed labels are
-    // `a, d, g` (interval: 2) sometimes `a, c, e`(interval: 1).
-    if (lastAutoInterval != null
-        && lastTickCount != null
-        && Math.abs(lastAutoInterval - interval) <= 1
-        && Math.abs(lastTickCount - tickCount) <= 1
-        // Always choose the bigger one, otherwise the critical
-        // point is not the same when zooming in or zooming out.
-        && lastAutoInterval > interval
-        // If the axis change is caused by chart resize, the cache should not
-        // be used. Otherwise some hiden labels might not be shown again.
-        && cache.axisExtend0 === axisExtent[0]
-        && cache.axisExtend1 === axisExtent[1]
-    ) {
-        interval = lastAutoInterval;
-    }
-    // Only update cache if cache not used, otherwise the
-    // changing of interval is too insensitive.
-    else {
-        cache.lastTickCount = tickCount;
-        cache.lastAutoInterval = interval;
-        cache.axisExtend0 = axisExtent[0];
-        cache.axisExtend1 = axisExtent[1];
-    }
-
-    return interval;
-}
-
-function fetchAutoCategoryIntervalCalculationParams(axis) {
-    var labelModel = axis.getLabelModel();
-    return {
-        axisRotate: axis.getRotate
-            ? axis.getRotate()
-            : (axis.isHorizontal && !axis.isHorizontal())
-            ? 90
-            : 0,
-        labelRotate: labelModel.get('rotate') || 0,
-        font: labelModel.getFont()
-    };
-}
-
-function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) {
-    var labelFormatter = makeLabelFormatter(axis);
-    var ordinalScale = axis.scale;
-    var ordinalExtent = ordinalScale.getExtent();
-    var labelModel = axis.getLabelModel();
-    var result = [];
-
-    // TODO: axisType: ordinalTime, pick the tick from each month/day/year/...
-
-    var step = Math.max((categoryInterval || 0) + 1, 1);
-    var startTick = ordinalExtent[0];
-    var tickCount = ordinalScale.count();
-
-    // Calculate start tick based on zero if possible to keep label consistent
-    // while zooming and moving while interval > 0. Otherwise the selection
-    // of displayable ticks and symbols probably keep changing.
-    // 3 is empirical value.
-    if (startTick !== 0 && step > 1 && tickCount / step > 2) {
-        startTick = Math.round(Math.ceil(startTick / step) * step);
-    }
-
-    // (1) Only add min max label here but leave overlap checking
-    // to render stage, which also ensure the returned list
-    // suitable for splitLine and splitArea rendering.
-    // (2) Scales except category always contain min max label so
-    // do not need to perform this process.
-    var showAllLabel = shouldShowAllLabels(axis);
-    var includeMinLabel = labelModel.get('showMinLabel') || showAllLabel;
-    var includeMaxLabel = labelModel.get('showMaxLabel') || showAllLabel;
-
-    if (includeMinLabel && startTick !== ordinalExtent[0]) {
-        addItem(ordinalExtent[0]);
-    }
-
-    // Optimize: avoid generating large array by `ordinalScale.getTicks()`.
-    var tickValue = startTick;
-    for (; tickValue <= ordinalExtent[1]; tickValue += step) {
-        addItem(tickValue);
-    }
-
-    if (includeMaxLabel && tickValue - step !== ordinalExtent[1]) {
-        addItem(ordinalExtent[1]);
-    }
-
-    function addItem(tVal) {
-        result.push(onlyTick
-            ? tVal
-            : {
-                formattedLabel: labelFormatter(tVal),
-                rawLabel: ordinalScale.getLabel(tVal),
-                tickValue: tVal
-            }
-        );
-    }
-
-    return result;
-}
-
-// When interval is function, the result `false` means ignore the tick.
-// It is time consuming for large category data.
-function makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) {
-    var ordinalScale = axis.scale;
-    var labelFormatter = makeLabelFormatter(axis);
-    var result = [];
-
-    zrUtil.each(ordinalScale.getTicks(), function (tickValue) {
-        var rawLabel = ordinalScale.getLabel(tickValue);
-        if (categoryInterval(tickValue, rawLabel)) {
-            result.push(onlyTick
-                ? tickValue
-                : {
-                    formattedLabel: labelFormatter(tickValue),
-                    rawLabel: rawLabel,
-                    tickValue: tickValue
-                }
-            );
-        }
-    });
-
-    return result;
-}

+ 0 - 488
admin/node_modules/echarts/src/coord/calendar/Calendar.js

@@ -1,488 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import * as layout from '../../util/layout';
-import * as numberUtil from '../../util/number';
-import CoordinateSystem from '../../CoordinateSystem';
-
-// (24*60*60*1000)
-var PROXIMATE_ONE_DAY = 86400000;
-
-/**
- * Calendar
- *
- * @constructor
- *
- * @param {Object} calendarModel calendarModel
- * @param {Object} ecModel       ecModel
- * @param {Object} api           api
- */
-function Calendar(calendarModel, ecModel, api) {
-    this._model = calendarModel;
-}
-
-Calendar.prototype = {
-
-    constructor: Calendar,
-
-    type: 'calendar',
-
-    dimensions: ['time', 'value'],
-
-    // Required in createListFromData
-    getDimensionsInfo: function () {
-        return [{name: 'time', type: 'time'}, 'value'];
-    },
-
-    getRangeInfo: function () {
-        return this._rangeInfo;
-    },
-
-    getModel: function () {
-        return this._model;
-    },
-
-    getRect: function () {
-        return this._rect;
-    },
-
-    getCellWidth: function () {
-        return this._sw;
-    },
-
-    getCellHeight: function () {
-        return this._sh;
-    },
-
-    getOrient: function () {
-        return this._orient;
-    },
-
-    /**
-     * getFirstDayOfWeek
-     *
-     * @example
-     *     0 : start at Sunday
-     *     1 : start at Monday
-     *
-     * @return {number}
-     */
-    getFirstDayOfWeek: function () {
-        return this._firstDayOfWeek;
-    },
-
-    /**
-     * get date info
-     *
-     * @param  {string|number} date date
-     * @return {Object}
-     * {
-     *      y: string, local full year, eg., '1940',
-     *      m: string, local month, from '01' ot '12',
-     *      d: string, local date, from '01' to '31' (if exists),
-     *      day: It is not date.getDay(). It is the location of the cell in a week, from 0 to 6,
-     *      time: timestamp,
-     *      formatedDate: string, yyyy-MM-dd,
-     *      date: original date object.
-     * }
-     */
-    getDateInfo: function (date) {
-
-        date = numberUtil.parseDate(date);
-
-        var y = date.getFullYear();
-
-        var m = date.getMonth() + 1;
-        m = m < 10 ? '0' + m : m;
-
-        var d = date.getDate();
-        d = d < 10 ? '0' + d : d;
-
-        var day = date.getDay();
-
-        day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);
-
-        return {
-            y: y,
-            m: m,
-            d: d,
-            day: day,
-            time: date.getTime(),
-            formatedDate: y + '-' + m + '-' + d,
-            date: date
-        };
-    },
-
-    getNextNDay: function (date, n) {
-        n = n || 0;
-        if (n === 0) {
-            return this.getDateInfo(date);
-        }
-
-        date = new Date(this.getDateInfo(date).time);
-        date.setDate(date.getDate() + n);
-
-        return this.getDateInfo(date);
-    },
-
-    update: function (ecModel, api) {
-
-        this._firstDayOfWeek = +this._model.getModel('dayLabel').get('firstDay');
-        this._orient = this._model.get('orient');
-        this._lineWidth = this._model.getModel('itemStyle').getItemStyle().lineWidth || 0;
-
-
-        this._rangeInfo = this._getRangeInfo(this._initRangeOption());
-        var weeks = this._rangeInfo.weeks || 1;
-        var whNames = ['width', 'height'];
-        var cellSize = this._model.get('cellSize').slice();
-        var layoutParams = this._model.getBoxLayoutParams();
-        var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks];
-
-        zrUtil.each([0, 1], function (idx) {
-            if (cellSizeSpecified(cellSize, idx)) {
-                layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx];
-            }
-        });
-
-        var whGlobal = {
-            width: api.getWidth(),
-            height: api.getHeight()
-        };
-        var calendarRect = this._rect = layout.getLayoutRect(layoutParams, whGlobal);
-
-        zrUtil.each([0, 1], function (idx) {
-            if (!cellSizeSpecified(cellSize, idx)) {
-                cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx];
-            }
-        });
-
-        function cellSizeSpecified(cellSize, idx) {
-            return cellSize[idx] != null && cellSize[idx] !== 'auto';
-        }
-
-        this._sw = cellSize[0];
-        this._sh = cellSize[1];
-    },
-
-
-    /**
-     * Convert a time data(time, value) item to (x, y) point.
-     *
-     * @override
-     * @param  {Array|number} data data
-     * @param  {boolean} [clamp=true] out of range
-     * @return {Array} point
-     */
-    dataToPoint: function (data, clamp) {
-        zrUtil.isArray(data) && (data = data[0]);
-        clamp == null && (clamp = true);
-
-        var dayInfo = this.getDateInfo(data);
-        var range = this._rangeInfo;
-        var date = dayInfo.formatedDate;
-
-        // if not in range return [NaN, NaN]
-        if (clamp && !(
-            dayInfo.time >= range.start.time
-            && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY
-        )) {
-            return [NaN, NaN];
-        }
-
-        var week = dayInfo.day;
-        var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek;
-
-        if (this._orient === 'vertical') {
-            return [
-                this._rect.x + week * this._sw + this._sw / 2,
-                this._rect.y + nthWeek * this._sh + this._sh / 2
-            ];
-
-        }
-
-        return [
-            this._rect.x + nthWeek * this._sw + this._sw / 2,
-            this._rect.y + week * this._sh + this._sh / 2
-        ];
-
-    },
-
-    /**
-     * Convert a (x, y) point to time data
-     *
-     * @override
-     * @param  {string} point point
-     * @return {string}       data
-     */
-    pointToData: function (point) {
-
-        var date = this.pointToDate(point);
-
-        return date && date.time;
-    },
-
-    /**
-     * Convert a time date item to (x, y) four point.
-     *
-     * @param  {Array} data  date[0] is date
-     * @param  {boolean} [clamp=true]  out of range
-     * @return {Object}       point
-     */
-    dataToRect: function (data, clamp) {
-        var point = this.dataToPoint(data, clamp);
-
-        return {
-            contentShape: {
-                x: point[0] - (this._sw - this._lineWidth) / 2,
-                y: point[1] - (this._sh - this._lineWidth) / 2,
-                width: this._sw - this._lineWidth,
-                height: this._sh - this._lineWidth
-            },
-
-            center: point,
-
-            tl: [
-                point[0] - this._sw / 2,
-                point[1] - this._sh / 2
-            ],
-
-            tr: [
-                point[0] + this._sw / 2,
-                point[1] - this._sh / 2
-            ],
-
-            br: [
-                point[0] + this._sw / 2,
-                point[1] + this._sh / 2
-            ],
-
-            bl: [
-                point[0] - this._sw / 2,
-                point[1] + this._sh / 2
-            ]
-
-        };
-    },
-
-    /**
-     * Convert a (x, y) point to time date
-     *
-     * @param  {Array} point point
-     * @return {Object}       date
-     */
-    pointToDate: function (point) {
-        var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1;
-        var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1;
-        var range = this._rangeInfo.range;
-
-        if (this._orient === 'vertical') {
-            return this._getDateByWeeksAndDay(nthY, nthX - 1, range);
-        }
-
-        return this._getDateByWeeksAndDay(nthX, nthY - 1, range);
-    },
-
-    /**
-     * @inheritDoc
-     */
-    convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),
-
-    /**
-     * @inheritDoc
-     */
-    convertFromPixel: zrUtil.curry(doConvert, 'pointToData'),
-
-    /**
-     * initRange
-     *
-     * @private
-     * @return {Array} [start, end]
-     */
-    _initRangeOption: function () {
-        var range = this._model.get('range');
-
-        var rg = range;
-
-        if (zrUtil.isArray(rg) && rg.length === 1) {
-            rg = rg[0];
-        }
-
-        if (/^\d{4}$/.test(rg)) {
-            range = [rg + '-01-01', rg + '-12-31'];
-        }
-
-        if (/^\d{4}[\/|-]\d{1,2}$/.test(rg)) {
-
-            var start = this.getDateInfo(rg);
-            var firstDay = start.date;
-            firstDay.setMonth(firstDay.getMonth() + 1);
-
-            var end = this.getNextNDay(firstDay, -1);
-            range = [start.formatedDate, end.formatedDate];
-        }
-
-        if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rg)) {
-            range = [rg, rg];
-        }
-
-        var tmp = this._getRangeInfo(range);
-
-        if (tmp.start.time > tmp.end.time) {
-            range.reverse();
-        }
-
-        return range;
-    },
-
-    /**
-     * range info
-     *
-     * @private
-     * @param  {Array} range range ['2017-01-01', '2017-07-08']
-     *  If range[0] > range[1], they will not be reversed.
-     * @return {Object}       obj
-     */
-    _getRangeInfo: function (range) {
-        range = [
-            this.getDateInfo(range[0]),
-            this.getDateInfo(range[1])
-        ];
-
-        var reversed;
-        if (range[0].time > range[1].time) {
-            reversed = true;
-            range.reverse();
-        }
-
-        var allDay = Math.floor(range[1].time / PROXIMATE_ONE_DAY)
-            - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1;
-
-        // Consider case1 (#11677 #10430):
-        // Set the system timezone as "UK", set the range to `['2016-07-01', '2016-12-31']`
-
-        // Consider case2:
-        // Firstly set system timezone as "Time Zone: America/Toronto",
-        // ```
-        // var first = new Date(1478412000000 - 3600 * 1000 * 2.5);
-        // var second = new Date(1478412000000);
-        // var allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1;
-        // ```
-        // will get wrong result because of DST. So we should fix it.
-        var date = new Date(range[0].time);
-        var startDateNum = date.getDate();
-        var endDateNum = range[1].date.getDate();
-        date.setDate(startDateNum + allDay - 1);
-        // The bias can not over a month, so just compare date.
-        var dateNum = date.getDate();
-        if (dateNum !== endDateNum) {
-            var sign = date.getTime() - range[1].time > 0 ? 1 : -1;
-            while (
-                (dateNum = date.getDate()) !== endDateNum
-                && (date.getTime() - range[1].time) * sign > 0
-            ) {
-                allDay -= sign;
-                date.setDate(dateNum - sign);
-            }
-        }
-
-        var weeks = Math.floor((allDay + range[0].day + 6) / 7);
-        var nthWeek = reversed ? -weeks + 1 : weeks - 1;
-
-        reversed && range.reverse();
-
-        return {
-            range: [range[0].formatedDate, range[1].formatedDate],
-            start: range[0],
-            end: range[1],
-            allDay: allDay,
-            weeks: weeks,
-            // From 0.
-            nthWeek: nthWeek,
-            fweek: range[0].day,
-            lweek: range[1].day
-        };
-    },
-
-    /**
-     * get date by nthWeeks and week day in range
-     *
-     * @private
-     * @param  {number} nthWeek the week
-     * @param  {number} day   the week day
-     * @param  {Array} range [d1, d2]
-     * @return {Object}
-     */
-    _getDateByWeeksAndDay: function (nthWeek, day, range) {
-        var rangeInfo = this._getRangeInfo(range);
-
-        if (nthWeek > rangeInfo.weeks
-            || (nthWeek === 0 && day < rangeInfo.fweek)
-            || (nthWeek === rangeInfo.weeks && day > rangeInfo.lweek)
-        ) {
-            return false;
-        }
-
-        var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day;
-        var date = new Date(rangeInfo.start.time);
-        date.setDate(rangeInfo.start.d + nthDay);
-
-        return this.getDateInfo(date);
-    }
-};
-
-Calendar.dimensions = Calendar.prototype.dimensions;
-
-Calendar.getDimensionsInfo = Calendar.prototype.getDimensionsInfo;
-
-Calendar.create = function (ecModel, api) {
-    var calendarList = [];
-
-    ecModel.eachComponent('calendar', function (calendarModel) {
-        var calendar = new Calendar(calendarModel, ecModel, api);
-        calendarList.push(calendar);
-        calendarModel.coordinateSystem = calendar;
-    });
-
-    ecModel.eachSeries(function (calendarSeries) {
-        if (calendarSeries.get('coordinateSystem') === 'calendar') {
-            // Inject coordinate system
-            calendarSeries.coordinateSystem = calendarList[calendarSeries.get('calendarIndex') || 0];
-        }
-    });
-    return calendarList;
-};
-
-function doConvert(methodName, ecModel, finder, value) {
-    var calendarModel = finder.calendarModel;
-    var seriesModel = finder.seriesModel;
-
-    var coordSys = calendarModel
-        ? calendarModel.coordinateSystem
-        : seriesModel
-        ? seriesModel.coordinateSystem
-        : null;
-
-    return coordSys === this ? coordSys[methodName](value) : null;
-}
-
-CoordinateSystem.register('calendar', Calendar);
-
-export default Calendar;

+ 0 - 158
admin/node_modules/echarts/src/coord/calendar/CalendarModel.js

@@ -1,158 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import ComponentModel from '../../model/Component';
-import {
-    getLayoutParams,
-    sizeCalculable,
-    mergeLayoutParam
-} from '../../util/layout';
-
-var CalendarModel = ComponentModel.extend({
-
-    type: 'calendar',
-
-    /**
-     * @type {module:echarts/coord/calendar/Calendar}
-     */
-    coordinateSystem: null,
-
-    defaultOption: {
-        zlevel: 0,
-        z: 2,
-        left: 80,
-        top: 60,
-
-        cellSize: 20,
-
-        // horizontal vertical
-        orient: 'horizontal',
-
-        // month separate line style
-        splitLine: {
-            show: true,
-            lineStyle: {
-                color: '#000',
-                width: 1,
-                type: 'solid'
-            }
-        },
-
-        // rect style  temporarily unused emphasis
-        itemStyle: {
-            color: '#fff',
-            borderWidth: 1,
-            borderColor: '#ccc'
-        },
-
-        // week text style
-        dayLabel: {
-            show: true,
-
-            // a week first day
-            firstDay: 0,
-
-            // start end
-            position: 'start',
-            margin: '50%', // 50% of cellSize
-            nameMap: 'en',
-            color: '#000'
-        },
-
-        // month text style
-        monthLabel: {
-            show: true,
-
-            // start end
-            position: 'start',
-            margin: 5,
-
-            // center or left
-            align: 'center',
-
-            // cn en []
-            nameMap: 'en',
-            formatter: null,
-            color: '#000'
-        },
-
-        // year text style
-        yearLabel: {
-            show: true,
-
-            // top bottom left right
-            position: null,
-            margin: 30,
-            formatter: null,
-            color: '#ccc',
-            fontFamily: 'sans-serif',
-            fontWeight: 'bolder',
-            fontSize: 20
-        }
-    },
-
-    /**
-     * @override
-     */
-    init: function (option, parentModel, ecModel, extraOpt) {
-        var inputPositionParams = getLayoutParams(option);
-
-        CalendarModel.superApply(this, 'init', arguments);
-
-        mergeAndNormalizeLayoutParams(option, inputPositionParams);
-    },
-
-    /**
-     * @override
-     */
-    mergeOption: function (option, extraOpt) {
-        CalendarModel.superApply(this, 'mergeOption', arguments);
-
-        mergeAndNormalizeLayoutParams(this.option, option);
-    }
-});
-
-function mergeAndNormalizeLayoutParams(target, raw) {
-    // Normalize cellSize
-    var cellSize = target.cellSize;
-
-    if (!zrUtil.isArray(cellSize)) {
-        cellSize = target.cellSize = [cellSize, cellSize];
-    }
-    else if (cellSize.length === 1) {
-        cellSize[1] = cellSize[0];
-    }
-
-    var ignoreSize = zrUtil.map([0, 1], function (hvIdx) {
-        // If user have set `width` or both `left` and `right`, cellSize
-        // will be automatically set to 'auto', otherwise the default
-        // setting of cellSize will make `width` setting not work.
-        if (sizeCalculable(raw, hvIdx)) {
-            cellSize[hvIdx] = 'auto';
-        }
-        return cellSize[hvIdx] != null && cellSize[hvIdx] !== 'auto';
-    });
-
-    mergeLayoutParam(target, raw, {
-        type: 'box', ignoreSize: ignoreSize
-    });
-}
-
-export default CalendarModel;

+ 0 - 46
admin/node_modules/echarts/src/coord/calendar/prepareCustom.js

@@ -1,46 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-export default function (coordSys) {
-    var rect = coordSys.getRect();
-    var rangeInfo = coordSys.getRangeInfo();
-
-    return {
-        coordSys: {
-            type: 'calendar',
-            x: rect.x,
-            y: rect.y,
-            width: rect.width,
-            height: rect.height,
-            cellWidth: coordSys.getCellWidth(),
-            cellHeight: coordSys.getCellHeight(),
-            rangeInfo: {
-                start: rangeInfo.start,
-                end: rangeInfo.end,
-                weeks: rangeInfo.weeks,
-                dayCount: rangeInfo.allDay
-            }
-        },
-        api: {
-            coord: function (data, clamp) {
-                return coordSys.dataToPoint(data, clamp);
-            }
-        }
-    };
-}

+ 0 - 130
admin/node_modules/echarts/src/coord/cartesian/Axis2D.js

@@ -1,130 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import Axis from '../Axis';
-
-/**
- * Extend axis 2d
- * @constructor module:echarts/coord/cartesian/Axis2D
- * @extends {module:echarts/coord/cartesian/Axis}
- * @param {string} dim
- * @param {*} scale
- * @param {Array.<number>} coordExtent
- * @param {string} axisType
- * @param {string} position
- */
-var Axis2D = function (dim, scale, coordExtent, axisType, position) {
-    Axis.call(this, dim, scale, coordExtent);
-    /**
-     * Axis type
-     *  - 'category'
-     *  - 'value'
-     *  - 'time'
-     *  - 'log'
-     * @type {string}
-     */
-    this.type = axisType || 'value';
-
-    /**
-     * Axis position
-     *  - 'top'
-     *  - 'bottom'
-     *  - 'left'
-     *  - 'right'
-     */
-    this.position = position || 'bottom';
-};
-
-Axis2D.prototype = {
-
-    constructor: Axis2D,
-
-    /**
-     * Index of axis, can be used as key
-     */
-    index: 0,
-
-    /**
-     * Implemented in <module:echarts/coord/cartesian/Grid>.
-     * @return {Array.<module:echarts/coord/cartesian/Axis2D>}
-     *         If not on zero of other axis, return null/undefined.
-     *         If no axes, return an empty array.
-     */
-    getAxesOnZeroOf: null,
-
-    /**
-     * Axis model
-     * @param {module:echarts/coord/cartesian/AxisModel}
-     */
-    model: null,
-
-    isHorizontal: function () {
-        var position = this.position;
-        return position === 'top' || position === 'bottom';
-    },
-
-    /**
-     * Each item cooresponds to this.getExtent(), which
-     * means globalExtent[0] may greater than globalExtent[1],
-     * unless `asc` is input.
-     *
-     * @param {boolean} [asc]
-     * @return {Array.<number>}
-     */
-    getGlobalExtent: function (asc) {
-        var ret = this.getExtent();
-        ret[0] = this.toGlobalCoord(ret[0]);
-        ret[1] = this.toGlobalCoord(ret[1]);
-        asc && ret[0] > ret[1] && ret.reverse();
-        return ret;
-    },
-
-    getOtherAxis: function () {
-        this.grid.getOtherAxis();
-    },
-
-    /**
-     * @override
-     */
-    pointToData: function (point, clamp) {
-        return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp);
-    },
-
-    /**
-     * Transform global coord to local coord,
-     * i.e. var localCoord = axis.toLocalCoord(80);
-     * designate by module:echarts/coord/cartesian/Grid.
-     * @type {Function}
-     */
-    toLocalCoord: null,
-
-    /**
-     * Transform global coord to local coord,
-     * i.e. var globalCoord = axis.toLocalCoord(40);
-     * designate by module:echarts/coord/cartesian/Grid.
-     * @type {Function}
-     */
-    toGlobalCoord: null
-
-};
-
-zrUtil.inherits(Axis2D, Axis);
-
-export default Axis2D;

+ 0 - 90
admin/node_modules/echarts/src/coord/cartesian/AxisModel.js

@@ -1,90 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import ComponentModel from '../../model/Component';
-import axisModelCreator from '../axisModelCreator';
-import axisModelCommonMixin from '../axisModelCommonMixin';
-
-var AxisModel = ComponentModel.extend({
-
-    type: 'cartesian2dAxis',
-
-    /**
-     * @type {module:echarts/coord/cartesian/Axis2D}
-     */
-    axis: null,
-
-    /**
-     * @override
-     */
-    init: function () {
-        AxisModel.superApply(this, 'init', arguments);
-        this.resetRange();
-    },
-
-    /**
-     * @override
-     */
-    mergeOption: function () {
-        AxisModel.superApply(this, 'mergeOption', arguments);
-        this.resetRange();
-    },
-
-    /**
-     * @override
-     */
-    restoreData: function () {
-        AxisModel.superApply(this, 'restoreData', arguments);
-        this.resetRange();
-    },
-
-    /**
-     * @override
-     * @return {module:echarts/model/Component}
-     */
-    getCoordSysModel: function () {
-        return this.ecModel.queryComponents({
-            mainType: 'grid',
-            index: this.option.gridIndex,
-            id: this.option.gridId
-        })[0];
-    }
-
-});
-
-function getAxisType(axisDim, option) {
-    // Default axis with data is category axis
-    return option.type || (option.data ? 'category' : 'value');
-}
-
-zrUtil.merge(AxisModel.prototype, axisModelCommonMixin);
-
-var extraOption = {
-    // gridIndex: 0,
-    // gridId: '',
-
-    // Offset is for multiple axis on the same position
-    offset: 0
-};
-
-axisModelCreator('x', AxisModel, getAxisType, extraOption);
-axisModelCreator('y', AxisModel, getAxisType, extraOption);
-
-export default AxisModel;

+ 0 - 129
admin/node_modules/echarts/src/coord/cartesian/Cartesian.js

@@ -1,129 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Cartesian coordinate system
- * @module  echarts/coord/Cartesian
- *
- */
-
-import * as zrUtil from 'zrender/src/core/util';
-
-function dimAxisMapper(dim) {
-    return this._axes[dim];
-}
-
-/**
- * @alias module:echarts/coord/Cartesian
- * @constructor
- */
-var Cartesian = function (name) {
-    this._axes = {};
-
-    this._dimList = [];
-
-    /**
-     * @type {string}
-     */
-    this.name = name || '';
-};
-
-Cartesian.prototype = {
-
-    constructor: Cartesian,
-
-    type: 'cartesian',
-
-    /**
-     * Get axis
-     * @param  {number|string} dim
-     * @return {module:echarts/coord/Cartesian~Axis}
-     */
-    getAxis: function (dim) {
-        return this._axes[dim];
-    },
-
-    /**
-     * Get axes list
-     * @return {Array.<module:echarts/coord/Cartesian~Axis>}
-     */
-    getAxes: function () {
-        return zrUtil.map(this._dimList, dimAxisMapper, this);
-    },
-
-    /**
-     * Get axes list by given scale type
-     */
-    getAxesByScale: function (scaleType) {
-        scaleType = scaleType.toLowerCase();
-        return zrUtil.filter(
-            this.getAxes(),
-            function (axis) {
-                return axis.scale.type === scaleType;
-            }
-        );
-    },
-
-    /**
-     * Add axis
-     * @param {module:echarts/coord/Cartesian.Axis}
-     */
-    addAxis: function (axis) {
-        var dim = axis.dim;
-
-        this._axes[dim] = axis;
-
-        this._dimList.push(dim);
-    },
-
-    /**
-     * Convert data to coord in nd space
-     * @param {Array.<number>|Object.<string, number>} val
-     * @return {Array.<number>|Object.<string, number>}
-     */
-    dataToCoord: function (val) {
-        return this._dataCoordConvert(val, 'dataToCoord');
-    },
-
-    /**
-     * Convert coord in nd space to data
-     * @param  {Array.<number>|Object.<string, number>} val
-     * @return {Array.<number>|Object.<string, number>}
-     */
-    coordToData: function (val) {
-        return this._dataCoordConvert(val, 'coordToData');
-    },
-
-    _dataCoordConvert: function (input, method) {
-        var dimList = this._dimList;
-
-        var output = input instanceof Array ? [] : {};
-
-        for (var i = 0; i < dimList.length; i++) {
-            var dim = dimList[i];
-            var axis = this._axes[dim];
-
-            output[dim] = axis[method](input[dim]);
-        }
-
-        return output;
-    }
-};
-
-export default Cartesian;

+ 0 - 157
admin/node_modules/echarts/src/coord/cartesian/Cartesian2D.js

@@ -1,157 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-
-import * as zrUtil from 'zrender/src/core/util';
-import BoundingRect from 'zrender/src/core/BoundingRect';
-import Cartesian from './Cartesian';
-
-function Cartesian2D(name) {
-
-    Cartesian.call(this, name);
-}
-
-Cartesian2D.prototype = {
-
-    constructor: Cartesian2D,
-
-    type: 'cartesian2d',
-
-    /**
-     * @type {Array.<string>}
-     * @readOnly
-     */
-    dimensions: ['x', 'y'],
-
-    /**
-     * Base axis will be used on stacking.
-     *
-     * @return {module:echarts/coord/cartesian/Axis2D}
-     */
-    getBaseAxis: function () {
-        return this.getAxesByScale('ordinal')[0]
-            || this.getAxesByScale('time')[0]
-            || this.getAxis('x');
-    },
-
-    /**
-     * If contain point
-     * @param {Array.<number>} point
-     * @return {boolean}
-     */
-    containPoint: function (point) {
-        var axisX = this.getAxis('x');
-        var axisY = this.getAxis('y');
-        return axisX.contain(axisX.toLocalCoord(point[0]))
-            && axisY.contain(axisY.toLocalCoord(point[1]));
-    },
-
-    /**
-     * If contain data
-     * @param {Array.<number>} data
-     * @return {boolean}
-     */
-    containData: function (data) {
-        return this.getAxis('x').containData(data[0])
-            && this.getAxis('y').containData(data[1]);
-    },
-
-    /**
-     * @param {Array.<number>} data
-     * @param {Array.<number>} out
-     * @return {Array.<number>}
-     */
-    dataToPoint: function (data, reserved, out) {
-        var xAxis = this.getAxis('x');
-        var yAxis = this.getAxis('y');
-        out = out || [];
-        out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(data[0]));
-        out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(data[1]));
-        return out;
-    },
-
-    /**
-     * @param {Array.<number>} data
-     * @param {Array.<number>} out
-     * @return {Array.<number>}
-     */
-    clampData: function (data, out) {
-        var xScale = this.getAxis('x').scale;
-        var yScale = this.getAxis('y').scale;
-        var xAxisExtent = xScale.getExtent();
-        var yAxisExtent = yScale.getExtent();
-        var x = xScale.parse(data[0]);
-        var y = yScale.parse(data[1]);
-        out = out || [];
-        out[0] = Math.min(
-            Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x),
-            Math.max(xAxisExtent[0], xAxisExtent[1])
-        );
-        out[1] = Math.min(
-            Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y),
-            Math.max(yAxisExtent[0], yAxisExtent[1])
-        );
-
-        return out;
-    },
-
-    /**
-     * @param {Array.<number>} point
-     * @param {Array.<number>} out
-     * @return {Array.<number>}
-     */
-    pointToData: function (point, out) {
-        var xAxis = this.getAxis('x');
-        var yAxis = this.getAxis('y');
-        out = out || [];
-        out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]));
-        out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]));
-        return out;
-    },
-
-    /**
-     * Get other axis
-     * @param {module:echarts/coord/cartesian/Axis2D} axis
-     */
-    getOtherAxis: function (axis) {
-        return this.getAxis(axis.dim === 'x' ? 'y' : 'x');
-    },
-
-    /**
-     * Get rect area of cartesian.
-     * Area will have a contain function to determine if a point is in the coordinate system.
-     * @return {BoundingRect}
-     */
-    getArea: function () {
-        var xExtent = this.getAxis('x').getGlobalExtent();
-        var yExtent = this.getAxis('y').getGlobalExtent();
-        var x = Math.min(xExtent[0], xExtent[1]);
-        var y = Math.min(yExtent[0], yExtent[1]);
-        var width = Math.max(xExtent[0], xExtent[1]) - x;
-        var height = Math.max(yExtent[0], yExtent[1]) - y;
-
-        var rect = new BoundingRect(x, y, width, height);
-        return rect;
-    }
-
-};
-
-zrUtil.inherits(Cartesian2D, Cartesian);
-
-export default Cartesian2D;

+ 0 - 643
admin/node_modules/echarts/src/coord/cartesian/Grid.js

@@ -1,643 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Grid is a region which contains at most 4 cartesian systems
- *
- * TODO Default cartesian
- */
-
-import {__DEV__} from '../../config';
-import {isObject, each, map, indexOf, retrieve} from 'zrender/src/core/util';
-import {getLayoutRect} from '../../util/layout';
-import {
-    createScaleByModel,
-    ifAxisCrossZero,
-    niceScaleExtent,
-    estimateLabelUnionRect
-} from '../../coord/axisHelper';
-import Cartesian2D from './Cartesian2D';
-import Axis2D from './Axis2D';
-import CoordinateSystem from '../../CoordinateSystem';
-import {getStackedDimension} from '../../data/helper/dataStackHelper';
-
-// Depends on GridModel, AxisModel, which performs preprocess.
-import './GridModel';
-
-/**
- * Check if the axis is used in the specified grid
- * @inner
- */
-function isAxisUsedInTheGrid(axisModel, gridModel, ecModel) {
-    return axisModel.getCoordSysModel() === gridModel;
-}
-
-function Grid(gridModel, ecModel, api) {
-    /**
-     * @type {Object.<string, module:echarts/coord/cartesian/Cartesian2D>}
-     * @private
-     */
-    this._coordsMap = {};
-
-    /**
-     * @type {Array.<module:echarts/coord/cartesian/Cartesian>}
-     * @private
-     */
-    this._coordsList = [];
-
-    /**
-     * @type {Object.<string, Array.<module:echarts/coord/cartesian/Axis2D>>}
-     * @private
-     */
-    this._axesMap = {};
-
-    /**
-     * @type {Array.<module:echarts/coord/cartesian/Axis2D>}
-     * @private
-     */
-    this._axesList = [];
-
-    this._initCartesian(gridModel, ecModel, api);
-
-    this.model = gridModel;
-}
-
-var gridProto = Grid.prototype;
-
-gridProto.type = 'grid';
-
-gridProto.axisPointerEnabled = true;
-
-gridProto.getRect = function () {
-    return this._rect;
-};
-
-gridProto.update = function (ecModel, api) {
-
-    var axesMap = this._axesMap;
-
-    this._updateScale(ecModel, this.model);
-
-    each(axesMap.x, function (xAxis) {
-        niceScaleExtent(xAxis.scale, xAxis.model);
-    });
-    each(axesMap.y, function (yAxis) {
-        niceScaleExtent(yAxis.scale, yAxis.model);
-    });
-
-    // Key: axisDim_axisIndex, value: boolean, whether onZero target.
-    var onZeroRecords = {};
-
-    each(axesMap.x, function (xAxis) {
-        fixAxisOnZero(axesMap, 'y', xAxis, onZeroRecords);
-    });
-    each(axesMap.y, function (yAxis) {
-        fixAxisOnZero(axesMap, 'x', yAxis, onZeroRecords);
-    });
-
-    // Resize again if containLabel is enabled
-    // FIXME It may cause getting wrong grid size in data processing stage
-    this.resize(this.model, api);
-};
-
-function fixAxisOnZero(axesMap, otherAxisDim, axis, onZeroRecords) {
-
-    axis.getAxesOnZeroOf = function () {
-        // TODO: onZero of multiple axes.
-        return otherAxisOnZeroOf ? [otherAxisOnZeroOf] : [];
-    };
-
-    // onZero can not be enabled in these two situations:
-    // 1. When any other axis is a category axis.
-    // 2. When no axis is cross 0 point.
-    var otherAxes = axesMap[otherAxisDim];
-
-    var otherAxisOnZeroOf;
-    var axisModel = axis.model;
-    var onZero = axisModel.get('axisLine.onZero');
-    var onZeroAxisIndex = axisModel.get('axisLine.onZeroAxisIndex');
-
-    if (!onZero) {
-        return;
-    }
-
-    // If target axis is specified.
-    if (onZeroAxisIndex != null) {
-        if (canOnZeroToAxis(otherAxes[onZeroAxisIndex])) {
-            otherAxisOnZeroOf = otherAxes[onZeroAxisIndex];
-        }
-    }
-    else {
-        // Find the first available other axis.
-        for (var idx in otherAxes) {
-            if (otherAxes.hasOwnProperty(idx)
-                && canOnZeroToAxis(otherAxes[idx])
-                // Consider that two Y axes on one value axis,
-                // if both onZero, the two Y axes overlap.
-                && !onZeroRecords[getOnZeroRecordKey(otherAxes[idx])]
-            ) {
-                otherAxisOnZeroOf = otherAxes[idx];
-                break;
-            }
-        }
-    }
-
-    if (otherAxisOnZeroOf) {
-        onZeroRecords[getOnZeroRecordKey(otherAxisOnZeroOf)] = true;
-    }
-
-    function getOnZeroRecordKey(axis) {
-        return axis.dim + '_' + axis.index;
-    }
-}
-
-function canOnZeroToAxis(axis) {
-    return axis && axis.type !== 'category' && axis.type !== 'time' && ifAxisCrossZero(axis);
-}
-
-/**
- * Resize the grid
- * @param {module:echarts/coord/cartesian/GridModel} gridModel
- * @param {module:echarts/ExtensionAPI} api
- */
-gridProto.resize = function (gridModel, api, ignoreContainLabel) {
-
-    var gridRect = getLayoutRect(
-        gridModel.getBoxLayoutParams(), {
-            width: api.getWidth(),
-            height: api.getHeight()
-        });
-
-    this._rect = gridRect;
-
-    var axesList = this._axesList;
-
-    adjustAxes();
-
-    // Minus label size
-    if (!ignoreContainLabel && gridModel.get('containLabel')) {
-        each(axesList, function (axis) {
-            if (!axis.model.get('axisLabel.inside')) {
-                var labelUnionRect = estimateLabelUnionRect(axis);
-                if (labelUnionRect) {
-                    var dim = axis.isHorizontal() ? 'height' : 'width';
-                    var margin = axis.model.get('axisLabel.margin');
-                    gridRect[dim] -= labelUnionRect[dim] + margin;
-                    if (axis.position === 'top') {
-                        gridRect.y += labelUnionRect.height + margin;
-                    }
-                    else if (axis.position === 'left') {
-                        gridRect.x += labelUnionRect.width + margin;
-                    }
-                }
-            }
-        });
-
-        adjustAxes();
-    }
-
-    function adjustAxes() {
-        each(axesList, function (axis) {
-            var isHorizontal = axis.isHorizontal();
-            var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height];
-            var idx = axis.inverse ? 1 : 0;
-            axis.setExtent(extent[idx], extent[1 - idx]);
-            updateAxisTransform(axis, isHorizontal ? gridRect.x : gridRect.y);
-        });
-    }
-};
-
-/**
- * @param {string} axisType
- * @param {number} [axisIndex]
- */
-gridProto.getAxis = function (axisType, axisIndex) {
-    var axesMapOnDim = this._axesMap[axisType];
-    if (axesMapOnDim != null) {
-        if (axisIndex == null) {
-            // Find first axis
-            for (var name in axesMapOnDim) {
-                if (axesMapOnDim.hasOwnProperty(name)) {
-                    return axesMapOnDim[name];
-                }
-            }
-        }
-        return axesMapOnDim[axisIndex];
-    }
-};
-
-/**
- * @return {Array.<module:echarts/coord/Axis>}
- */
-gridProto.getAxes = function () {
-    return this._axesList.slice();
-};
-
-/**
- * Usage:
- *      grid.getCartesian(xAxisIndex, yAxisIndex);
- *      grid.getCartesian(xAxisIndex);
- *      grid.getCartesian(null, yAxisIndex);
- *      grid.getCartesian({xAxisIndex: ..., yAxisIndex: ...});
- *
- * @param {number|Object} [xAxisIndex]
- * @param {number} [yAxisIndex]
- */
-gridProto.getCartesian = function (xAxisIndex, yAxisIndex) {
-    if (xAxisIndex != null && yAxisIndex != null) {
-        var key = 'x' + xAxisIndex + 'y' + yAxisIndex;
-        return this._coordsMap[key];
-    }
-
-    if (isObject(xAxisIndex)) {
-        yAxisIndex = xAxisIndex.yAxisIndex;
-        xAxisIndex = xAxisIndex.xAxisIndex;
-    }
-    // When only xAxisIndex or yAxisIndex given, find its first cartesian.
-    for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) {
-        if (coordList[i].getAxis('x').index === xAxisIndex
-            || coordList[i].getAxis('y').index === yAxisIndex
-        ) {
-            return coordList[i];
-        }
-    }
-};
-
-gridProto.getCartesians = function () {
-    return this._coordsList.slice();
-};
-
-/**
- * @implements
- * see {module:echarts/CoodinateSystem}
- */
-gridProto.convertToPixel = function (ecModel, finder, value) {
-    var target = this._findConvertTarget(ecModel, finder);
-
-    return target.cartesian
-        ? target.cartesian.dataToPoint(value)
-        : target.axis
-        ? target.axis.toGlobalCoord(target.axis.dataToCoord(value))
-        : null;
-};
-
-/**
- * @implements
- * see {module:echarts/CoodinateSystem}
- */
-gridProto.convertFromPixel = function (ecModel, finder, value) {
-    var target = this._findConvertTarget(ecModel, finder);
-
-    return target.cartesian
-        ? target.cartesian.pointToData(value)
-        : target.axis
-        ? target.axis.coordToData(target.axis.toLocalCoord(value))
-        : null;
-};
-
-/**
- * @inner
- */
-gridProto._findConvertTarget = function (ecModel, finder) {
-    var seriesModel = finder.seriesModel;
-    var xAxisModel = finder.xAxisModel
-        || (seriesModel && seriesModel.getReferringComponents('xAxis')[0]);
-    var yAxisModel = finder.yAxisModel
-        || (seriesModel && seriesModel.getReferringComponents('yAxis')[0]);
-    var gridModel = finder.gridModel;
-    var coordsList = this._coordsList;
-    var cartesian;
-    var axis;
-
-    if (seriesModel) {
-        cartesian = seriesModel.coordinateSystem;
-        indexOf(coordsList, cartesian) < 0 && (cartesian = null);
-    }
-    else if (xAxisModel && yAxisModel) {
-        cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);
-    }
-    else if (xAxisModel) {
-        axis = this.getAxis('x', xAxisModel.componentIndex);
-    }
-    else if (yAxisModel) {
-        axis = this.getAxis('y', yAxisModel.componentIndex);
-    }
-    // Lowest priority.
-    else if (gridModel) {
-        var grid = gridModel.coordinateSystem;
-        if (grid === this) {
-            cartesian = this._coordsList[0];
-        }
-    }
-
-    return {cartesian: cartesian, axis: axis};
-};
-
-/**
- * @implements
- * see {module:echarts/CoodinateSystem}
- */
-gridProto.containPoint = function (point) {
-    var coord = this._coordsList[0];
-    if (coord) {
-        return coord.containPoint(point);
-    }
-};
-
-/**
- * Initialize cartesian coordinate systems
- * @private
- */
-gridProto._initCartesian = function (gridModel, ecModel, api) {
-    var axisPositionUsed = {
-        left: false,
-        right: false,
-        top: false,
-        bottom: false
-    };
-
-    var axesMap = {
-        x: {},
-        y: {}
-    };
-    var axesCount = {
-        x: 0,
-        y: 0
-    };
-
-    /// Create axis
-    ecModel.eachComponent('xAxis', createAxisCreator('x'), this);
-    ecModel.eachComponent('yAxis', createAxisCreator('y'), this);
-
-    if (!axesCount.x || !axesCount.y) {
-        // Roll back when there no either x or y axis
-        this._axesMap = {};
-        this._axesList = [];
-        return;
-    }
-
-    this._axesMap = axesMap;
-
-    /// Create cartesian2d
-    each(axesMap.x, function (xAxis, xAxisIndex) {
-        each(axesMap.y, function (yAxis, yAxisIndex) {
-            var key = 'x' + xAxisIndex + 'y' + yAxisIndex;
-            var cartesian = new Cartesian2D(key);
-
-            cartesian.grid = this;
-            cartesian.model = gridModel;
-
-            this._coordsMap[key] = cartesian;
-            this._coordsList.push(cartesian);
-
-            cartesian.addAxis(xAxis);
-            cartesian.addAxis(yAxis);
-        }, this);
-    }, this);
-
-    function createAxisCreator(axisType) {
-        return function (axisModel, idx) {
-            if (!isAxisUsedInTheGrid(axisModel, gridModel, ecModel)) {
-                return;
-            }
-
-            var axisPosition = axisModel.get('position');
-            if (axisType === 'x') {
-                // Fix position
-                if (axisPosition !== 'top' && axisPosition !== 'bottom') {
-                    // Default bottom of X
-                    axisPosition = axisPositionUsed.bottom ? 'top' : 'bottom';
-                }
-            }
-            else {
-                // Fix position
-                if (axisPosition !== 'left' && axisPosition !== 'right') {
-                    // Default left of Y
-                    axisPosition = axisPositionUsed.left ? 'right' : 'left';
-                }
-            }
-            axisPositionUsed[axisPosition] = true;
-
-            var axis = new Axis2D(
-                axisType, createScaleByModel(axisModel),
-                [0, 0],
-                axisModel.get('type'),
-                axisPosition
-            );
-
-            var isCategory = axis.type === 'category';
-            axis.onBand = isCategory && axisModel.get('boundaryGap');
-            axis.inverse = axisModel.get('inverse');
-
-            // Inject axis into axisModel
-            axisModel.axis = axis;
-
-            // Inject axisModel into axis
-            axis.model = axisModel;
-
-            // Inject grid info axis
-            axis.grid = this;
-
-            // Index of axis, can be used as key
-            axis.index = idx;
-
-            this._axesList.push(axis);
-
-            axesMap[axisType][idx] = axis;
-            axesCount[axisType]++;
-        };
-    }
-};
-
-/**
- * Update cartesian properties from series
- * @param  {module:echarts/model/Option} option
- * @private
- */
-gridProto._updateScale = function (ecModel, gridModel) {
-    // Reset scale
-    each(this._axesList, function (axis) {
-        axis.scale.setExtent(Infinity, -Infinity);
-    });
-    ecModel.eachSeries(function (seriesModel) {
-        if (isCartesian2D(seriesModel)) {
-            var axesModels = findAxesModels(seriesModel, ecModel);
-            var xAxisModel = axesModels[0];
-            var yAxisModel = axesModels[1];
-
-            if (!isAxisUsedInTheGrid(xAxisModel, gridModel, ecModel)
-                || !isAxisUsedInTheGrid(yAxisModel, gridModel, ecModel)
-            ) {
-                return;
-            }
-
-            var cartesian = this.getCartesian(
-                xAxisModel.componentIndex, yAxisModel.componentIndex
-            );
-            var data = seriesModel.getData();
-            var xAxis = cartesian.getAxis('x');
-            var yAxis = cartesian.getAxis('y');
-
-            if (data.type === 'list') {
-                unionExtent(data, xAxis, seriesModel);
-                unionExtent(data, yAxis, seriesModel);
-            }
-        }
-    }, this);
-
-    function unionExtent(data, axis, seriesModel) {
-        each(data.mapDimension(axis.dim, true), function (dim) {
-            axis.scale.unionExtentFromData(
-                // For example, the extent of the orginal dimension
-                // is [0.1, 0.5], the extent of the `stackResultDimension`
-                // is [7, 9], the final extent should not include [0.1, 0.5].
-                data, getStackedDimension(data, dim)
-            );
-        });
-    }
-};
-
-/**
- * @param {string} [dim] 'x' or 'y' or 'auto' or null/undefined
- * @return {Object} {baseAxes: [], otherAxes: []}
- */
-gridProto.getTooltipAxes = function (dim) {
-    var baseAxes = [];
-    var otherAxes = [];
-
-    each(this.getCartesians(), function (cartesian) {
-        var baseAxis = (dim != null && dim !== 'auto')
-            ? cartesian.getAxis(dim) : cartesian.getBaseAxis();
-        var otherAxis = cartesian.getOtherAxis(baseAxis);
-        indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis);
-        indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis);
-    });
-
-    return {baseAxes: baseAxes, otherAxes: otherAxes};
-};
-
-/**
- * @inner
- */
-function updateAxisTransform(axis, coordBase) {
-    var axisExtent = axis.getExtent();
-    var axisExtentSum = axisExtent[0] + axisExtent[1];
-
-    // Fast transform
-    axis.toGlobalCoord = axis.dim === 'x'
-        ? function (coord) {
-            return coord + coordBase;
-        }
-        : function (coord) {
-            return axisExtentSum - coord + coordBase;
-        };
-    axis.toLocalCoord = axis.dim === 'x'
-        ? function (coord) {
-            return coord - coordBase;
-        }
-        : function (coord) {
-            return axisExtentSum - coord + coordBase;
-        };
-}
-
-var axesTypes = ['xAxis', 'yAxis'];
-/**
- * @inner
- */
-function findAxesModels(seriesModel, ecModel) {
-    return map(axesTypes, function (axisType) {
-        var axisModel = seriesModel.getReferringComponents(axisType)[0];
-
-        if (__DEV__) {
-            if (!axisModel) {
-                throw new Error(axisType + ' "' + retrieve(
-                    seriesModel.get(axisType + 'Index'),
-                    seriesModel.get(axisType + 'Id'),
-                    0
-                ) + '" not found');
-            }
-        }
-        return axisModel;
-    });
-}
-
-/**
- * @inner
- */
-function isCartesian2D(seriesModel) {
-    return seriesModel.get('coordinateSystem') === 'cartesian2d';
-}
-
-Grid.create = function (ecModel, api) {
-    var grids = [];
-    ecModel.eachComponent('grid', function (gridModel, idx) {
-        var grid = new Grid(gridModel, ecModel, api);
-        grid.name = 'grid_' + idx;
-        // dataSampling requires axis extent, so resize
-        // should be performed in create stage.
-        grid.resize(gridModel, api, true);
-
-        gridModel.coordinateSystem = grid;
-
-        grids.push(grid);
-    });
-
-    // Inject the coordinateSystems into seriesModel
-    ecModel.eachSeries(function (seriesModel) {
-        if (!isCartesian2D(seriesModel)) {
-            return;
-        }
-
-        var axesModels = findAxesModels(seriesModel, ecModel);
-        var xAxisModel = axesModels[0];
-        var yAxisModel = axesModels[1];
-
-        var gridModel = xAxisModel.getCoordSysModel();
-
-        if (__DEV__) {
-            if (!gridModel) {
-                throw new Error(
-                    'Grid "' + retrieve(
-                        xAxisModel.get('gridIndex'),
-                        xAxisModel.get('gridId'),
-                        0
-                    ) + '" not found'
-                );
-            }
-            if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) {
-                throw new Error('xAxis and yAxis must use the same grid');
-            }
-        }
-
-        var grid = gridModel.coordinateSystem;
-
-        seriesModel.coordinateSystem = grid.getCartesian(
-            xAxisModel.componentIndex, yAxisModel.componentIndex
-        );
-    });
-
-    return grids;
-};
-
-// For deciding which dimensions to use when creating list data
-Grid.dimensions = Grid.prototype.dimensions = Cartesian2D.prototype.dimensions;
-
-CoordinateSystem.register('cartesian2d', Grid);
-
-export default Grid;

+ 0 - 55
admin/node_modules/echarts/src/coord/cartesian/GridModel.js

@@ -1,55 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// Grid 是在有直角坐标系的时候必须要存在的
-// 所以这里也要被 Cartesian2D 依赖
-
-import './AxisModel';
-import ComponentModel from '../../model/Component';
-
-export default ComponentModel.extend({
-
-    type: 'grid',
-
-    dependencies: ['xAxis', 'yAxis'],
-
-    layoutMode: 'box',
-
-    /**
-     * @type {module:echarts/coord/cartesian/Grid}
-     */
-    coordinateSystem: null,
-
-    defaultOption: {
-        show: false,
-        zlevel: 0,
-        z: 0,
-        left: '10%',
-        top: 60,
-        right: '10%',
-        bottom: 60,
-        // If grid size contain label
-        containLabel: false,
-        // width: {totalWidth} - left - right,
-        // height: {totalHeight} - top - bottom,
-        backgroundColor: 'rgba(0,0,0,0)',
-        borderWidth: 1,
-        borderColor: '#ccc'
-    }
-});

+ 0 - 87
admin/node_modules/echarts/src/coord/cartesian/cartesianAxisHelper.js

@@ -1,87 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-/**
- * Can only be called after coordinate system creation stage.
- * (Can be called before coordinate system update stage).
- *
- * @param {Object} opt {labelInside}
- * @return {Object} {
- *  position, rotation, labelDirection, labelOffset,
- *  tickDirection, labelRotate, z2
- * }
- */
-export function layout(gridModel, axisModel, opt) {
-    opt = opt || {};
-    var grid = gridModel.coordinateSystem;
-    var axis = axisModel.axis;
-    var layout = {};
-    var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0];
-
-    var rawAxisPosition = axis.position;
-    var axisPosition = otherAxisOnZeroOf ? 'onZero' : rawAxisPosition;
-    var axisDim = axis.dim;
-
-    var rect = grid.getRect();
-    var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];
-    var idx = {left: 0, right: 1, top: 0, bottom: 1, onZero: 2};
-    var axisOffset = axisModel.get('offset') || 0;
-
-    var posBound = axisDim === 'x'
-        ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset]
-        : [rectBound[0] - axisOffset, rectBound[1] + axisOffset];
-
-    if (otherAxisOnZeroOf) {
-        var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0));
-        posBound[idx.onZero] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]);
-    }
-
-    // Axis position
-    layout.position = [
-        axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0],
-        axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3]
-    ];
-
-    // Axis rotation
-    layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1);
-
-    // Tick and label direction, x y is axisDim
-    var dirMap = {top: -1, bottom: 1, left: -1, right: 1};
-
-    layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition];
-    layout.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx.onZero] : 0;
-
-    if (axisModel.get('axisTick.inside')) {
-        layout.tickDirection = -layout.tickDirection;
-    }
-    if (zrUtil.retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {
-        layout.labelDirection = -layout.labelDirection;
-    }
-
-    // Special label rotation
-    var labelRotate = axisModel.get('axisLabel.rotate');
-    layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate;
-
-    // Over splitLine and splitArea
-    layout.z2 = 1;
-
-    return layout;
-}

+ 0 - 54
admin/node_modules/echarts/src/coord/cartesian/prepareCustom.js

@@ -1,54 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-function dataToCoordSize(dataSize, dataItem) {
-    // dataItem is necessary in log axis.
-    dataItem = dataItem || [0, 0];
-    return zrUtil.map(['x', 'y'], function (dim, dimIdx) {
-        var axis = this.getAxis(dim);
-        var val = dataItem[dimIdx];
-        var halfSize = dataSize[dimIdx] / 2;
-        return axis.type === 'category'
-            ? axis.getBandWidth()
-            : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));
-    }, this);
-}
-
-export default function (coordSys) {
-    var rect = coordSys.grid.getRect();
-    return {
-        coordSys: {
-            // The name exposed to user is always 'cartesian2d' but not 'grid'.
-            type: 'cartesian2d',
-            x: rect.x,
-            y: rect.y,
-            width: rect.width,
-            height: rect.height
-        },
-        api: {
-            coord: function (data) {
-                // do not provide "out" param
-                return coordSys.dataToPoint(data);
-            },
-            size: zrUtil.bind(dataToCoordSize, coordSys)
-        }
-    };
-}

+ 0 - 212
admin/node_modules/echarts/src/coord/geo/Geo.js

@@ -1,212 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import BoundingRect from 'zrender/src/core/BoundingRect';
-import View from '../View';
-import geoSourceManager from './geoSourceManager';
-
-
-/**
- * [Geo description]
- * For backward compatibility, the orginal interface:
- * `name, map, geoJson, specialAreas, nameMap` is kept.
- *
- * @param {string|Object} name
- * @param {string} map Map type
- *        Specify the positioned areas by left, top, width, height
- * @param {Object.<string, string>} [nameMap]
- *        Specify name alias
- * @param {boolean} [invertLongitute=true]
- */
-function Geo(name, map, nameMap, invertLongitute) {
-
-    View.call(this, name);
-
-    /**
-     * Map type
-     * @type {string}
-     */
-    this.map = map;
-
-    var source = geoSourceManager.load(map, nameMap);
-
-    this._nameCoordMap = source.nameCoordMap;
-    this._regionsMap = source.regionsMap;
-    this._invertLongitute = invertLongitute == null ? true : invertLongitute;
-
-    /**
-     * @readOnly
-     */
-    this.regions = source.regions;
-
-    /**
-     * @type {module:zrender/src/core/BoundingRect}
-     */
-    this._rect = source.boundingRect;
-}
-
-Geo.prototype = {
-
-    constructor: Geo,
-
-    type: 'geo',
-
-    /**
-     * @param {Array.<string>}
-     * @readOnly
-     */
-    dimensions: ['lng', 'lat'],
-
-    /**
-     * If contain given lng,lat coord
-     * @param {Array.<number>}
-     * @readOnly
-     */
-    containCoord: function (coord) {
-        var regions = this.regions;
-        for (var i = 0; i < regions.length; i++) {
-            if (regions[i].contain(coord)) {
-                return true;
-            }
-        }
-        return false;
-    },
-
-    /**
-     * @override
-     */
-    transformTo: function (x, y, width, height) {
-        var rect = this.getBoundingRect();
-        var invertLongitute = this._invertLongitute;
-
-        rect = rect.clone();
-
-        if (invertLongitute) {
-            // Longitute is inverted
-            rect.y = -rect.y - rect.height;
-        }
-
-        var rawTransformable = this._rawTransformable;
-
-        rawTransformable.transform = rect.calculateTransform(
-            new BoundingRect(x, y, width, height)
-        );
-
-        rawTransformable.decomposeTransform();
-
-        if (invertLongitute) {
-            var scale = rawTransformable.scale;
-            scale[1] = -scale[1];
-        }
-
-        rawTransformable.updateTransform();
-
-        this._updateTransform();
-    },
-
-    /**
-     * @param {string} name
-     * @return {module:echarts/coord/geo/Region}
-     */
-    getRegion: function (name) {
-        return this._regionsMap.get(name);
-    },
-
-    getRegionByCoord: function (coord) {
-        var regions = this.regions;
-        for (var i = 0; i < regions.length; i++) {
-            if (regions[i].contain(coord)) {
-                return regions[i];
-            }
-        }
-    },
-
-    /**
-     * Add geoCoord for indexing by name
-     * @param {string} name
-     * @param {Array.<number>} geoCoord
-     */
-    addGeoCoord: function (name, geoCoord) {
-        this._nameCoordMap.set(name, geoCoord);
-    },
-
-    /**
-     * Get geoCoord by name
-     * @param {string} name
-     * @return {Array.<number>}
-     */
-    getGeoCoord: function (name) {
-        return this._nameCoordMap.get(name);
-    },
-
-    /**
-     * @override
-     */
-    getBoundingRect: function () {
-        return this._rect;
-    },
-
-    /**
-     * @param {string|Array.<number>} data
-     * @param {boolean} noRoam
-     * @param {Array.<number>} [out]
-     * @return {Array.<number>}
-     */
-    dataToPoint: function (data, noRoam, out) {
-        if (typeof data === 'string') {
-            // Map area name to geoCoord
-            data = this.getGeoCoord(data);
-        }
-        if (data) {
-            return View.prototype.dataToPoint.call(this, data, noRoam, out);
-        }
-    },
-
-    /**
-     * @override
-     */
-    convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),
-
-    /**
-     * @override
-     */
-    convertFromPixel: zrUtil.curry(doConvert, 'pointToData')
-
-};
-
-zrUtil.mixin(Geo, View);
-
-function doConvert(methodName, ecModel, finder, value) {
-    var geoModel = finder.geoModel;
-    var seriesModel = finder.seriesModel;
-
-    var coordSys = geoModel
-        ? geoModel.coordinateSystem
-        : seriesModel
-        ? (
-            seriesModel.coordinateSystem // For map.
-            || (seriesModel.getReferringComponents('geo')[0] || {}).coordinateSystem
-        )
-        : null;
-
-    return coordSys === this ? coordSys[methodName](value) : null;
-}
-
-export default Geo;

+ 0 - 179
admin/node_modules/echarts/src/coord/geo/GeoModel.js

@@ -1,179 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import * as modelUtil from '../../util/model';
-import ComponentModel from '../../model/Component';
-import Model from '../../model/Model';
-import selectableMixin from '../../component/helper/selectableMixin';
-import geoCreator from './geoCreator';
-
-var GeoModel = ComponentModel.extend({
-
-    type: 'geo',
-
-    /**
-     * @type {module:echarts/coord/geo/Geo}
-     */
-    coordinateSystem: null,
-
-    layoutMode: 'box',
-
-    init: function (option) {
-        ComponentModel.prototype.init.apply(this, arguments);
-
-        // Default label emphasis `show`
-        modelUtil.defaultEmphasis(option, 'label', ['show']);
-    },
-
-    optionUpdated: function () {
-        var option = this.option;
-        var self = this;
-
-        option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap);
-
-        this._optionModelMap = zrUtil.reduce(option.regions || [], function (optionModelMap, regionOpt) {
-            if (regionOpt.name) {
-                optionModelMap.set(regionOpt.name, new Model(regionOpt, self));
-            }
-            return optionModelMap;
-        }, zrUtil.createHashMap());
-
-        this.updateSelectedMap(option.regions);
-    },
-
-    defaultOption: {
-
-        zlevel: 0,
-
-        z: 0,
-
-        show: true,
-
-        left: 'center',
-
-        top: 'center',
-
-
-        // width:,
-        // height:,
-        // right
-        // bottom
-
-        // Aspect is width / height. Inited to be geoJson bbox aspect
-        // This parameter is used for scale this aspect
-        // If svg used, aspectScale is 1 by default.
-        // aspectScale: 0.75,
-        aspectScale: null,
-
-        ///// Layout with center and size
-        // If you wan't to put map in a fixed size box with right aspect ratio
-        // This two properties may more conveninet
-        // layoutCenter: [50%, 50%]
-        // layoutSize: 100
-
-        silent: false,
-
-        // Map type
-        map: '',
-
-        // Define left-top, right-bottom coords to control view
-        // For example, [ [180, 90], [-180, -90] ]
-        boundingCoords: null,
-
-        // Default on center of map
-        center: null,
-
-        zoom: 1,
-
-        scaleLimit: null,
-
-        // selectedMode: false
-
-        label: {
-            show: false,
-            color: '#000'
-        },
-
-        itemStyle: {
-            // color: 各异,
-            borderWidth: 0.5,
-            borderColor: '#444',
-            color: '#eee'
-        },
-
-        emphasis: {
-            label: {
-                show: true,
-                color: 'rgb(100,0,0)'
-            },
-            itemStyle: {
-                color: 'rgba(255,215,0,0.8)'
-            }
-        },
-
-        regions: []
-    },
-
-    /**
-     * Get model of region
-     * @param  {string} name
-     * @return {module:echarts/model/Model}
-     */
-    getRegionModel: function (name) {
-        return this._optionModelMap.get(name) || new Model(null, this, this.ecModel);
-    },
-
-    /**
-     * Format label
-     * @param {string} name Region name
-     * @param {string} [status='normal'] 'normal' or 'emphasis'
-     * @return {string}
-     */
-    getFormattedLabel: function (name, status) {
-        var regionModel = this.getRegionModel(name);
-        var formatter = regionModel.get(
-            'label'
-            + (status === 'normal' ? '.' : status + '.')
-            + 'formatter'
-        );
-        var params = {
-            name: name
-        };
-        if (typeof formatter === 'function') {
-            params.status = status;
-            return formatter(params);
-        }
-        else if (typeof formatter === 'string') {
-            return formatter.replace('{a}', name != null ? name : '');
-        }
-    },
-
-    setZoom: function (zoom) {
-        this.option.zoom = zoom;
-    },
-
-    setCenter: function (center) {
-        this.option.center = center;
-    }
-});
-
-zrUtil.mixin(GeoModel, selectableMixin);
-
-export default GeoModel;

+ 0 - 182
admin/node_modules/echarts/src/coord/geo/Region.js

@@ -1,182 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * @module echarts/coord/geo/Region
- */
-
-import BoundingRect from 'zrender/src/core/BoundingRect';
-import * as bbox from 'zrender/src/core/bbox';
-import * as vec2 from 'zrender/src/core/vector';
-import * as polygonContain from 'zrender/src/contain/polygon';
-
-/**
- * @param {string|Region} name
- * @param {Array} geometries
- * @param {Array.<number>} cp
- */
-function Region(name, geometries, cp) {
-
-    /**
-     * @type {string}
-     * @readOnly
-     */
-    this.name = name;
-
-    /**
-     * @type {Array.<Array>}
-     * @readOnly
-     */
-    this.geometries = geometries;
-
-    if (!cp) {
-        var rect = this.getBoundingRect();
-        cp = [
-            rect.x + rect.width / 2,
-            rect.y + rect.height / 2
-        ];
-    }
-    else {
-        cp = [cp[0], cp[1]];
-    }
-    /**
-     * @type {Array.<number>}
-     */
-    this.center = cp;
-}
-
-Region.prototype = {
-
-    constructor: Region,
-
-    properties: null,
-
-    /**
-     * @return {module:zrender/core/BoundingRect}
-     */
-    getBoundingRect: function () {
-        var rect = this._rect;
-        if (rect) {
-            return rect;
-        }
-
-        var MAX_NUMBER = Number.MAX_VALUE;
-        var min = [MAX_NUMBER, MAX_NUMBER];
-        var max = [-MAX_NUMBER, -MAX_NUMBER];
-        var min2 = [];
-        var max2 = [];
-        var geometries = this.geometries;
-        for (var i = 0; i < geometries.length; i++) {
-            // Only support polygon
-            if (geometries[i].type !== 'polygon') {
-                continue;
-            }
-            // Doesn't consider hole
-            var exterior = geometries[i].exterior;
-            bbox.fromPoints(exterior, min2, max2);
-            vec2.min(min, min, min2);
-            vec2.max(max, max, max2);
-        }
-        // No data
-        if (i === 0) {
-            min[0] = min[1] = max[0] = max[1] = 0;
-        }
-
-        return (this._rect = new BoundingRect(
-            min[0], min[1], max[0] - min[0], max[1] - min[1]
-        ));
-    },
-
-    /**
-     * @param {<Array.<number>} coord
-     * @return {boolean}
-     */
-    contain: function (coord) {
-        var rect = this.getBoundingRect();
-        var geometries = this.geometries;
-        if (!rect.contain(coord[0], coord[1])) {
-            return false;
-        }
-        loopGeo: for (var i = 0, len = geometries.length; i < len; i++) {
-            // Only support polygon.
-            if (geometries[i].type !== 'polygon') {
-                continue;
-            }
-            var exterior = geometries[i].exterior;
-            var interiors = geometries[i].interiors;
-            if (polygonContain.contain(exterior, coord[0], coord[1])) {
-                // Not in the region if point is in the hole.
-                for (var k = 0; k < (interiors ? interiors.length : 0); k++) {
-                    if (polygonContain.contain(interiors[k])) {
-                        continue loopGeo;
-                    }
-                }
-                return true;
-            }
-        }
-        return false;
-    },
-
-    transformTo: function (x, y, width, height) {
-        var rect = this.getBoundingRect();
-        var aspect = rect.width / rect.height;
-        if (!width) {
-            width = aspect * height;
-        }
-        else if (!height) {
-            height = width / aspect;
-        }
-        var target = new BoundingRect(x, y, width, height);
-        var transform = rect.calculateTransform(target);
-        var geometries = this.geometries;
-        for (var i = 0; i < geometries.length; i++) {
-            // Only support polygon.
-            if (geometries[i].type !== 'polygon') {
-                continue;
-            }
-            var exterior = geometries[i].exterior;
-            var interiors = geometries[i].interiors;
-            for (var p = 0; p < exterior.length; p++) {
-                vec2.applyTransform(exterior[p], exterior[p], transform);
-            }
-            for (var h = 0; h < (interiors ? interiors.length : 0); h++) {
-                for (var p = 0; p < interiors[h].length; p++) {
-                    vec2.applyTransform(interiors[h][p], interiors[h][p], transform);
-                }
-            }
-        }
-        rect = this._rect;
-        rect.copy(target);
-        // Update center
-        this.center = [
-            rect.x + rect.width / 2,
-            rect.y + rect.height / 2
-        ];
-    },
-
-    cloneShallow: function (name) {
-        name == null && (name = this.name);
-        var newRegion = new Region(name, this.geometries, this.center);
-        newRegion._rect = this._rect;
-        newRegion.transformTo = null; // Simply avoid to be called.
-        return newRegion;
-    }
-};
-
-export default Region;

+ 0 - 44
admin/node_modules/echarts/src/coord/geo/fix/diaoyuIsland.js

@@ -1,44 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// Fix for 钓鱼岛
-
-// var Region = require('../Region');
-// var zrUtil = require('zrender/src/core/util');
-
-// var geoCoord = [126, 25];
-
-var points = [
-    [
-        [123.45165252685547, 25.73527164402261],
-        [123.49731445312499, 25.73527164402261],
-        [123.49731445312499, 25.750734064600884],
-        [123.45165252685547, 25.750734064600884],
-        [123.45165252685547, 25.73527164402261]
-    ]
-];
-
-export default function (mapType, region) {
-    if (mapType === 'china' && region.name === '台湾') {
-        region.geometries.push({
-            type: 'polygon',
-            exterior: points[0]
-        });
-    }
-}

+ 0 - 35
admin/node_modules/echarts/src/coord/geo/fix/geoCoord.js

@@ -1,35 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-var geoCoordMap = {
-    'Russia': [100, 60],
-    'United States': [-99, 38],
-    'United States of America': [-99, 38]
-};
-
-export default function (mapType, region) {
-    if (mapType === 'world') {
-        var geoCoord = geoCoordMap[region.name];
-        if (geoCoord) {
-            var cp = region.center;
-            cp[0] = geoCoord[0];
-            cp[1] = geoCoord[1];
-        }
-    }
-}

+ 0 - 66
admin/node_modules/echarts/src/coord/geo/fix/nanhai.js

@@ -1,66 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// Fix for 南海诸岛
-
-import * as zrUtil from 'zrender/src/core/util';
-import Region from '../Region';
-
-var geoCoord = [126, 25];
-
-var points = [
-    [[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, 0.7], [52, 0.7],
-        [56, 7.7], [59, 0.7], [64, 0.7], [64, 0], [5, 0], [0, 3.5]],
-    [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]],
-    [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]],
-    [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]],
-    [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]],
-    [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]],
-    [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]],
-    [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]],
-    [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]],
-    [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]],
-    [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]],
-    [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4],
-        [1, 92.4], [1, 3.5], [0, 3.5]]
-];
-
-for (var i = 0; i < points.length; i++) {
-    for (var k = 0; k < points[i].length; k++) {
-        points[i][k][0] /= 10.5;
-        points[i][k][1] /= -10.5 / 0.75;
-
-        points[i][k][0] += geoCoord[0];
-        points[i][k][1] += geoCoord[1];
-    }
-}
-
-export default function (mapType, regions) {
-    if (mapType === 'china') {
-        regions.push(new Region(
-            '南海诸岛',
-            zrUtil.map(points, function (exterior) {
-                return {
-                    type: 'polygon',
-                    exterior: exterior
-                };
-            }), geoCoord
-        ));
-    }
-}

+ 0 - 39
admin/node_modules/echarts/src/coord/geo/fix/textCoord.js

@@ -1,39 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-var coordsOffsetMap = {
-    '南海诸岛': [32, 80],
-    // 全国
-    '广东': [0, -10],
-    '香港': [10, 5],
-    '澳门': [-10, 10],
-    //'北京': [-10, 0],
-    '天津': [5, 5]
-};
-
-export default function (mapType, region) {
-    if (mapType === 'china') {
-        var coordFix = coordsOffsetMap[region.name];
-        if (coordFix) {
-            var cp = region.center;
-            cp[0] += coordFix[0] / 10.5;
-            cp[1] += -coordFix[1] / (10.5 / 0.75);
-        }
-    }
-}

+ 0 - 240
admin/node_modules/echarts/src/coord/geo/geoCreator.js

@@ -1,240 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {__DEV__} from '../../config';
-import * as echarts from '../../echarts';
-import * as zrUtil from 'zrender/src/core/util';
-import Geo from './Geo';
-import * as layout from '../../util/layout';
-import * as numberUtil from '../../util/number';
-import geoSourceManager from './geoSourceManager';
-import mapDataStorage from './mapDataStorage';
-
-/**
- * Resize method bound to the geo
- * @param {module:echarts/coord/geo/GeoModel|module:echarts/chart/map/MapModel} geoModel
- * @param {module:echarts/ExtensionAPI} api
- */
-function resizeGeo(geoModel, api) {
-
-    var boundingCoords = geoModel.get('boundingCoords');
-    if (boundingCoords != null) {
-        var leftTop = boundingCoords[0];
-        var rightBottom = boundingCoords[1];
-        if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) {
-            if (__DEV__) {
-                console.error('Invalid boundingCoords');
-            }
-        }
-        else {
-            this.setBoundingRect(leftTop[0], leftTop[1], rightBottom[0] - leftTop[0], rightBottom[1] - leftTop[1]);
-        }
-    }
-
-    var rect = this.getBoundingRect();
-
-    var boxLayoutOption;
-
-    var center = geoModel.get('layoutCenter');
-    var size = geoModel.get('layoutSize');
-
-    var viewWidth = api.getWidth();
-    var viewHeight = api.getHeight();
-
-    var aspect = rect.width / rect.height * this.aspectScale;
-
-    var useCenterAndSize = false;
-
-    if (center && size) {
-        center = [
-            numberUtil.parsePercent(center[0], viewWidth),
-            numberUtil.parsePercent(center[1], viewHeight)
-        ];
-        size = numberUtil.parsePercent(size, Math.min(viewWidth, viewHeight));
-
-        if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) {
-            useCenterAndSize = true;
-        }
-        else {
-            if (__DEV__) {
-                console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.');
-            }
-        }
-    }
-
-    var viewRect;
-    if (useCenterAndSize) {
-        var viewRect = {};
-        if (aspect > 1) {
-            // Width is same with size
-            viewRect.width = size;
-            viewRect.height = size / aspect;
-        }
-        else {
-            viewRect.height = size;
-            viewRect.width = size * aspect;
-        }
-        viewRect.y = center[1] - viewRect.height / 2;
-        viewRect.x = center[0] - viewRect.width / 2;
-    }
-    else {
-        // Use left/top/width/height
-        boxLayoutOption = geoModel.getBoxLayoutParams();
-
-        // 0.75 rate
-        boxLayoutOption.aspect = aspect;
-
-        viewRect = layout.getLayoutRect(boxLayoutOption, {
-            width: viewWidth,
-            height: viewHeight
-        });
-    }
-
-    this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);
-
-    this.setCenter(geoModel.get('center'));
-    this.setZoom(geoModel.get('zoom'));
-}
-
-/**
- * @param {module:echarts/coord/Geo} geo
- * @param {module:echarts/model/Model} model
- * @inner
- */
-function setGeoCoords(geo, model) {
-    zrUtil.each(model.get('geoCoord'), function (geoCoord, name) {
-        geo.addGeoCoord(name, geoCoord);
-    });
-}
-
-var geoCreator = {
-
-    // For deciding which dimensions to use when creating list data
-    dimensions: Geo.prototype.dimensions,
-
-    create: function (ecModel, api) {
-        var geoList = [];
-
-        // FIXME Create each time may be slow
-        ecModel.eachComponent('geo', function (geoModel, idx) {
-            var name = geoModel.get('map');
-
-            var aspectScale = geoModel.get('aspectScale');
-            var invertLongitute = true;
-            var mapRecords = mapDataStorage.retrieveMap(name);
-            if (mapRecords && mapRecords[0] && mapRecords[0].type === 'svg') {
-                aspectScale == null && (aspectScale = 1);
-                invertLongitute = false;
-            }
-            else {
-                aspectScale == null && (aspectScale = 0.75);
-            }
-
-            var geo = new Geo(name + idx, name, geoModel.get('nameMap'), invertLongitute);
-
-            geo.aspectScale = aspectScale;
-            geo.zoomLimit = geoModel.get('scaleLimit');
-            geoList.push(geo);
-
-            setGeoCoords(geo, geoModel);
-
-            geoModel.coordinateSystem = geo;
-            geo.model = geoModel;
-
-            // Inject resize method
-            geo.resize = resizeGeo;
-
-            geo.resize(geoModel, api);
-        });
-
-        ecModel.eachSeries(function (seriesModel) {
-            var coordSys = seriesModel.get('coordinateSystem');
-            if (coordSys === 'geo') {
-                var geoIndex = seriesModel.get('geoIndex') || 0;
-                seriesModel.coordinateSystem = geoList[geoIndex];
-            }
-        });
-
-        // If has map series
-        var mapModelGroupBySeries = {};
-
-        ecModel.eachSeriesByType('map', function (seriesModel) {
-            if (!seriesModel.getHostGeoModel()) {
-                var mapType = seriesModel.getMapType();
-                mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || [];
-                mapModelGroupBySeries[mapType].push(seriesModel);
-            }
-        });
-
-        zrUtil.each(mapModelGroupBySeries, function (mapSeries, mapType) {
-            var nameMapList = zrUtil.map(mapSeries, function (singleMapSeries) {
-                return singleMapSeries.get('nameMap');
-            });
-            var geo = new Geo(mapType, mapType, zrUtil.mergeAll(nameMapList));
-
-            geo.zoomLimit = zrUtil.retrieve.apply(null, zrUtil.map(mapSeries, function (singleMapSeries) {
-                return singleMapSeries.get('scaleLimit');
-            }));
-            geoList.push(geo);
-
-            // Inject resize method
-            geo.resize = resizeGeo;
-            geo.aspectScale = mapSeries[0].get('aspectScale');
-
-            geo.resize(mapSeries[0], api);
-
-            zrUtil.each(mapSeries, function (singleMapSeries) {
-                singleMapSeries.coordinateSystem = geo;
-
-                setGeoCoords(geo, singleMapSeries);
-            });
-        });
-
-        return geoList;
-    },
-
-    /**
-     * Fill given regions array
-     * @param  {Array.<Object>} originRegionArr
-     * @param  {string} mapName
-     * @param  {Object} [nameMap]
-     * @return {Array}
-     */
-    getFilledRegions: function (originRegionArr, mapName, nameMap) {
-        // Not use the original
-        var regionsArr = (originRegionArr || []).slice();
-
-        var dataNameMap = zrUtil.createHashMap();
-        for (var i = 0; i < regionsArr.length; i++) {
-            dataNameMap.set(regionsArr[i].name, regionsArr[i]);
-        }
-
-        var source = geoSourceManager.load(mapName, nameMap);
-        zrUtil.each(source.regions, function (region) {
-            var name = region.name;
-            !dataNameMap.get(name) && regionsArr.push({name: name});
-        });
-
-        return regionsArr;
-    }
-};
-
-echarts.registerCoordinateSystem('geo', geoCreator);
-
-export default geoCreator;

+ 0 - 95
admin/node_modules/echarts/src/coord/geo/geoJSONLoader.js

@@ -1,95 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {each} from 'zrender/src/core/util';
-import parseGeoJson from './parseGeoJson';
-import {makeInner} from '../../util/model';
-
-// Built-in GEO fixer.
-import fixNanhai from './fix/nanhai';
-import fixTextCoord from './fix/textCoord';
-import fixGeoCoord from './fix/geoCoord';
-import fixDiaoyuIsland from './fix/diaoyuIsland';
-
-var inner = makeInner();
-
-export default {
-
-    /**
-     * @param {string} mapName
-     * @param {Object} mapRecord {specialAreas, geoJSON}
-     * @param {string} nameProperty
-     * @return {Object} {regions, boundingRect}
-     */
-    load: function (mapName, mapRecord, nameProperty) {
-
-        var parsed = inner(mapRecord).parsed;
-
-        if (parsed) {
-            return parsed;
-        }
-
-        var specialAreas = mapRecord.specialAreas || {};
-        var geoJSON = mapRecord.geoJSON;
-        var regions;
-
-        // https://jsperf.com/try-catch-performance-overhead
-        try {
-            regions = geoJSON ? parseGeoJson(geoJSON, nameProperty) : [];
-        }
-        catch (e) {
-            throw new Error('Invalid geoJson format\n' + e.message);
-        }
-
-        fixNanhai(mapName, regions);
-
-        each(regions, function (region) {
-            var regionName = region.name;
-
-            fixTextCoord(mapName, region);
-            fixGeoCoord(mapName, region);
-            fixDiaoyuIsland(mapName, region);
-
-            // Some area like Alaska in USA map needs to be tansformed
-            // to look better
-            var specialArea = specialAreas[regionName];
-            if (specialArea) {
-                region.transformTo(
-                    specialArea.left, specialArea.top, specialArea.width, specialArea.height
-                );
-            }
-        });
-
-        return (inner(mapRecord).parsed = {
-            regions: regions,
-            boundingRect: getBoundingRect(regions)
-        });
-    }
-};
-
-function getBoundingRect(regions) {
-    var rect;
-    for (var i = 0; i < regions.length; i++) {
-        var regionRect = regions[i].getBoundingRect();
-        rect = rect || regionRect.clone();
-        rect.union(regionRect);
-    }
-    return rect;
-}
-

+ 0 - 143
admin/node_modules/echarts/src/coord/geo/geoSVGLoader.js

@@ -1,143 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {parseSVG, makeViewBoxTransform} from 'zrender/src/tool/parseSVG';
-import Group from 'zrender/src/container/Group';
-import Rect from 'zrender/src/graphic/shape/Rect';
-import {assert, createHashMap} from 'zrender/src/core/util';
-import BoundingRect from 'zrender/src/core/BoundingRect';
-import {makeInner} from '../../util/model';
-
-var inner = makeInner();
-
-export default {
-
-    /**
-     * @param {string} mapName
-     * @param {Object} mapRecord {specialAreas, geoJSON}
-     * @return {Object} {root, boundingRect}
-     */
-    load: function (mapName, mapRecord) {
-        var originRoot = inner(mapRecord).originRoot;
-        if (originRoot) {
-            return {
-                root: originRoot,
-                boundingRect: inner(mapRecord).boundingRect
-            };
-        }
-
-        var graphic = buildGraphic(mapRecord);
-
-        inner(mapRecord).originRoot = graphic.root;
-        inner(mapRecord).boundingRect = graphic.boundingRect;
-
-        return graphic;
-    },
-
-    makeGraphic: function (mapName, mapRecord, hostKey) {
-        // For performance consideration (in large SVG), graphic only maked
-        // when necessary and reuse them according to hostKey.
-        var field = inner(mapRecord);
-        var rootMap = field.rootMap || (field.rootMap = createHashMap());
-
-        var root = rootMap.get(hostKey);
-        if (root) {
-            return root;
-        }
-
-        var originRoot = field.originRoot;
-        var boundingRect = field.boundingRect;
-
-        // For performance, if originRoot is not used by a view,
-        // assign it to a view, but not reproduce graphic elements.
-        if (!field.originRootHostKey) {
-            field.originRootHostKey = hostKey;
-            root = originRoot;
-        }
-        else {
-            root = buildGraphic(mapRecord, boundingRect).root;
-        }
-
-        return rootMap.set(hostKey, root);
-    },
-
-    removeGraphic: function (mapName, mapRecord, hostKey) {
-        var field = inner(mapRecord);
-        var rootMap = field.rootMap;
-        rootMap && rootMap.removeKey(hostKey);
-        if (hostKey === field.originRootHostKey) {
-            field.originRootHostKey = null;
-        }
-    }
-};
-
-function buildGraphic(mapRecord, boundingRect) {
-    var svgXML = mapRecord.svgXML;
-    var result;
-    var root;
-
-    try {
-        result = svgXML && parseSVG(svgXML, {
-            ignoreViewBox: true,
-            ignoreRootClip: true
-        }) || {};
-        root = result.root;
-        assert(root != null);
-    }
-    catch (e) {
-        throw new Error('Invalid svg format\n' + e.message);
-    }
-
-    var svgWidth = result.width;
-    var svgHeight = result.height;
-    var viewBoxRect = result.viewBoxRect;
-
-    if (!boundingRect) {
-        boundingRect = (svgWidth == null || svgHeight == null)
-            // If svg width / height not specified, calculate
-            // bounding rect as the width / height
-            ? root.getBoundingRect()
-            : new BoundingRect(0, 0, 0, 0);
-
-        if (svgWidth != null) {
-            boundingRect.width = svgWidth;
-        }
-        if (svgHeight != null) {
-            boundingRect.height = svgHeight;
-        }
-    }
-
-    if (viewBoxRect) {
-        var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect.width, boundingRect.height);
-        var elRoot = root;
-        root = new Group();
-        root.add(elRoot);
-        elRoot.scale = viewBoxTransform.scale;
-        elRoot.position = viewBoxTransform.position;
-    }
-
-    root.setClipPath(new Rect({
-        shape: boundingRect.plain()
-    }));
-
-    return {
-        root: root,
-        boundingRect: boundingRect
-    };
-}

+ 0 - 127
admin/node_modules/echarts/src/coord/geo/geoSourceManager.js

@@ -1,127 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {__DEV__} from '../../config';
-import {each, createHashMap} from 'zrender/src/core/util';
-import mapDataStorage from './mapDataStorage';
-import geoJSONLoader from './geoJSONLoader';
-import geoSVGLoader from './geoSVGLoader';
-import BoundingRect from 'zrender/src/core/BoundingRect';
-
-var loaders = {
-    geoJSON: geoJSONLoader,
-    svg: geoSVGLoader
-};
-
-export default {
-
-    /**
-     * @param {string} mapName
-     * @param {Object} nameMap
-     * @param {string} nameProperty
-     * @return {Object} source {regions, regionsMap, nameCoordMap, boundingRect}
-     */
-    load: function (mapName, nameMap, nameProperty) {
-        var regions = [];
-        var regionsMap = createHashMap();
-        var nameCoordMap = createHashMap();
-        var boundingRect;
-        var mapRecords = retrieveMap(mapName);
-
-        each(mapRecords, function (record) {
-            var singleSource = loaders[record.type].load(mapName, record, nameProperty);
-
-            each(singleSource.regions, function (region) {
-                var regionName = region.name;
-
-                // Try use the alias in geoNameMap
-                if (nameMap && nameMap.hasOwnProperty(regionName)) {
-                    region = region.cloneShallow(regionName = nameMap[regionName]);
-                }
-
-                regions.push(region);
-                regionsMap.set(regionName, region);
-                nameCoordMap.set(regionName, region.center);
-            });
-
-            var rect = singleSource.boundingRect;
-            if (rect) {
-                boundingRect
-                    ? boundingRect.union(rect)
-                    : (boundingRect = rect.clone());
-            }
-        });
-
-        return {
-            regions: regions,
-            regionsMap: regionsMap,
-            nameCoordMap: nameCoordMap,
-            // FIXME Always return new ?
-            boundingRect: boundingRect || new BoundingRect(0, 0, 0, 0)
-        };
-    },
-
-    /**
-     * @param {string} mapName
-     * @param {string} hostKey For cache.
-     * @return {Array.<module:zrender/Element>} Roots.
-     */
-    makeGraphic: makeInvoker('makeGraphic'),
-
-    /**
-     * @param {string} mapName
-     * @param {string} hostKey For cache.
-     */
-    removeGraphic: makeInvoker('removeGraphic')
-};
-
-function makeInvoker(methodName) {
-    return function (mapName, hostKey) {
-        var mapRecords = retrieveMap(mapName);
-        var results = [];
-
-        each(mapRecords, function (record) {
-            var method = loaders[record.type][methodName];
-            method && results.push(method(mapName, record, hostKey));
-        });
-
-        return results;
-    };
-}
-
-function mapNotExistsError(mapName) {
-    if (__DEV__) {
-        console.error(
-            'Map ' + mapName + ' not exists. The GeoJSON of the map must be provided.'
-        );
-    }
-}
-
-function retrieveMap(mapName) {
-    var mapRecords = mapDataStorage.retrieveMap(mapName) || [];
-
-    if (__DEV__) {
-        if (!mapRecords.length) {
-            mapNotExistsError(mapName);
-        }
-    }
-
-    return mapRecords;
-}
-

+ 0 - 104
admin/node_modules/echarts/src/coord/geo/mapDataStorage.js

@@ -1,104 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {__DEV__} from '../../config';
-import {createHashMap, isString, isArray, each, assert} from 'zrender/src/core/util';
-import {parseXML} from 'zrender/src/tool/parseSVG';
-
-
-var storage = createHashMap();
-
-// For minimize the code size of common echarts package,
-// do not put too much logic in this module.
-
-export default {
-
-    // The format of record: see `echarts.registerMap`.
-    // Compatible with previous `echarts.registerMap`.
-    registerMap: function (mapName, rawGeoJson, rawSpecialAreas) {
-
-        var records;
-
-        if (isArray(rawGeoJson)) {
-            records = rawGeoJson;
-        }
-        else if (rawGeoJson.svg) {
-            records = [{
-                type: 'svg',
-                source: rawGeoJson.svg,
-                specialAreas: rawGeoJson.specialAreas
-            }];
-        }
-        else {
-            // Backward compatibility.
-            if (rawGeoJson.geoJson && !rawGeoJson.features) {
-                rawSpecialAreas = rawGeoJson.specialAreas;
-                rawGeoJson = rawGeoJson.geoJson;
-            }
-            records = [{
-                type: 'geoJSON',
-                source: rawGeoJson,
-                specialAreas: rawSpecialAreas
-            }];
-        }
-
-        each(records, function (record) {
-            var type = record.type;
-            type === 'geoJson' && (type = record.type = 'geoJSON');
-
-            var parse = parsers[type];
-
-            if (__DEV__) {
-                assert(parse, 'Illegal map type: ' + type);
-            }
-
-            parse(record);
-        });
-
-        return storage.set(mapName, records);
-    },
-
-    retrieveMap: function (mapName) {
-        return storage.get(mapName);
-    }
-
-};
-
-var parsers = {
-
-    geoJSON: function (record) {
-        var source = record.source;
-        record.geoJSON = !isString(source)
-            ? source
-            : (typeof JSON !== 'undefined' && JSON.parse)
-            ? JSON.parse(source)
-            : (new Function('return (' + source + ');'))();
-    },
-
-    // Only perform parse to XML object here, which might be time
-    // consiming for large SVG.
-    // Although convert XML to zrender element is also time consiming,
-    // if we do it here, the clone of zrender elements has to be
-    // required. So we do it once for each geo instance, util real
-    // performance issues call for optimizing it.
-    svg: function (record) {
-        record.svgXML = parseXML(record.source);
-    }
-
-};

+ 0 - 147
admin/node_modules/echarts/src/coord/geo/parseGeoJson.js

@@ -1,147 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Parse and decode geo json
- * @module echarts/coord/geo/parseGeoJson
- */
-
-import * as zrUtil from 'zrender/src/core/util';
-import Region from './Region';
-
-function decode(json) {
-    if (!json.UTF8Encoding) {
-        return json;
-    }
-    var encodeScale = json.UTF8Scale;
-    if (encodeScale == null) {
-        encodeScale = 1024;
-    }
-
-    var features = json.features;
-
-    for (var f = 0; f < features.length; f++) {
-        var feature = features[f];
-        var geometry = feature.geometry;
-        var coordinates = geometry.coordinates;
-        var encodeOffsets = geometry.encodeOffsets;
-
-        for (var c = 0; c < coordinates.length; c++) {
-            var coordinate = coordinates[c];
-
-            if (geometry.type === 'Polygon') {
-                coordinates[c] = decodePolygon(
-                    coordinate,
-                    encodeOffsets[c],
-                    encodeScale
-                );
-            }
-            else if (geometry.type === 'MultiPolygon') {
-                for (var c2 = 0; c2 < coordinate.length; c2++) {
-                    var polygon = coordinate[c2];
-                    coordinate[c2] = decodePolygon(
-                        polygon,
-                        encodeOffsets[c][c2],
-                        encodeScale
-                    );
-                }
-            }
-        }
-    }
-    // Has been decoded
-    json.UTF8Encoding = false;
-    return json;
-}
-
-function decodePolygon(coordinate, encodeOffsets, encodeScale) {
-    var result = [];
-    var prevX = encodeOffsets[0];
-    var prevY = encodeOffsets[1];
-
-    for (var i = 0; i < coordinate.length; i += 2) {
-        var x = coordinate.charCodeAt(i) - 64;
-        var y = coordinate.charCodeAt(i + 1) - 64;
-        // ZigZag decoding
-        x = (x >> 1) ^ (-(x & 1));
-        y = (y >> 1) ^ (-(y & 1));
-        // Delta deocding
-        x += prevX;
-        y += prevY;
-
-        prevX = x;
-        prevY = y;
-        // Dequantize
-        result.push([x / encodeScale, y / encodeScale]);
-    }
-
-    return result;
-}
-
-/**
- * @alias module:echarts/coord/geo/parseGeoJson
- * @param {Object} geoJson
- * @param {string} nameProperty
- * @return {module:zrender/container/Group}
- */
-export default function (geoJson, nameProperty) {
-
-    decode(geoJson);
-
-    return zrUtil.map(zrUtil.filter(geoJson.features, function (featureObj) {
-        // Output of mapshaper may have geometry null
-        return featureObj.geometry
-            && featureObj.properties
-            && featureObj.geometry.coordinates.length > 0;
-    }), function (featureObj) {
-        var properties = featureObj.properties;
-        var geo = featureObj.geometry;
-
-        var coordinates = geo.coordinates;
-
-        var geometries = [];
-        if (geo.type === 'Polygon') {
-            geometries.push({
-                type: 'polygon',
-                // According to the GeoJSON specification.
-                // First must be exterior, and the rest are all interior(holes).
-                exterior: coordinates[0],
-                interiors: coordinates.slice(1)
-            });
-        }
-        if (geo.type === 'MultiPolygon') {
-            zrUtil.each(coordinates, function (item) {
-                if (item[0]) {
-                    geometries.push({
-                        type: 'polygon',
-                        exterior: item[0],
-                        interiors: item.slice(1)
-                    });
-                }
-            });
-        }
-
-        var region = new Region(
-            properties[nameProperty || 'name'],
-            geometries,
-            properties.cp
-        );
-        region.properties = properties;
-        return region;
-    });
-}

+ 0 - 57
admin/node_modules/echarts/src/coord/geo/prepareCustom.js

@@ -1,57 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-function dataToCoordSize(dataSize, dataItem) {
-    dataItem = dataItem || [0, 0];
-    return zrUtil.map([0, 1], function (dimIdx) {
-        var val = dataItem[dimIdx];
-        var halfSize = dataSize[dimIdx] / 2;
-        var p1 = [];
-        var p2 = [];
-        p1[dimIdx] = val - halfSize;
-        p2[dimIdx] = val + halfSize;
-        p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
-        return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
-    }, this);
-}
-
-export default function (coordSys) {
-    var rect = coordSys.getBoundingRect();
-    return {
-        coordSys: {
-            type: 'geo',
-            x: rect.x,
-            y: rect.y,
-            width: rect.width,
-            height: rect.height,
-            zoom: coordSys.getZoom()
-        },
-        api: {
-            coord: function (data) {
-                // do not provide "out" and noRoam param,
-                // Compatible with this usage:
-                // echarts.util.map(item.points, api.coord)
-                return coordSys.dataToPoint(data);
-            },
-            size: zrUtil.bind(dataToCoordSize, coordSys)
-        }
-    };
-}

+ 0 - 149
admin/node_modules/echarts/src/coord/parallel/AxisModel.js

@@ -1,149 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import ComponentModel from '../../model/Component';
-import makeStyleMapper from '../../model/mixin/makeStyleMapper';
-import axisModelCreator from '../axisModelCreator';
-import * as numberUtil from '../../util/number';
-import axisModelCommonMixin from '../axisModelCommonMixin';
-
-var AxisModel = ComponentModel.extend({
-
-    type: 'baseParallelAxis',
-
-    /**
-     * @type {module:echarts/coord/parallel/Axis}
-     */
-    axis: null,
-
-    /**
-     * @type {Array.<Array.<number>}
-     * @readOnly
-     */
-    activeIntervals: [],
-
-    /**
-     * @return {Object}
-     */
-    getAreaSelectStyle: function () {
-        return makeStyleMapper(
-            [
-                ['fill', 'color'],
-                ['lineWidth', 'borderWidth'],
-                ['stroke', 'borderColor'],
-                ['width', 'width'],
-                ['opacity', 'opacity']
-            ]
-        )(this.getModel('areaSelectStyle'));
-    },
-
-    /**
-     * The code of this feature is put on AxisModel but not ParallelAxis,
-     * because axisModel can be alive after echarts updating but instance of
-     * ParallelAxis having been disposed. this._activeInterval should be kept
-     * when action dispatched (i.e. legend click).
-     *
-     * @param {Array.<Array<number>>} intervals interval.length === 0
-     *                                          means set all active.
-     * @public
-     */
-    setActiveIntervals: function (intervals) {
-        var activeIntervals = this.activeIntervals = zrUtil.clone(intervals);
-
-        // Normalize
-        if (activeIntervals) {
-            for (var i = activeIntervals.length - 1; i >= 0; i--) {
-                numberUtil.asc(activeIntervals[i]);
-            }
-        }
-    },
-
-    /**
-     * @param {number|string} [value] When attempting to detect 'no activeIntervals set',
-     *                         value can not be input.
-     * @return {string} 'normal': no activeIntervals set,
-     *                  'active',
-     *                  'inactive'.
-     * @public
-     */
-    getActiveState: function (value) {
-        var activeIntervals = this.activeIntervals;
-
-        if (!activeIntervals.length) {
-            return 'normal';
-        }
-
-        if (value == null || isNaN(value)) {
-            return 'inactive';
-        }
-
-        // Simple optimization
-        if (activeIntervals.length === 1) {
-            var interval = activeIntervals[0];
-            if (interval[0] <= value && value <= interval[1]) {
-                return 'active';
-            }
-        }
-        else {
-            for (var i = 0, len = activeIntervals.length; i < len; i++) {
-                if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) {
-                    return 'active';
-                }
-            }
-        }
-
-        return 'inactive';
-    }
-
-});
-
-var defaultOption = {
-
-    type: 'value',
-
-    /**
-     * @type {Array.<number>}
-     */
-    dim: null, // 0, 1, 2, ...
-
-    // parallelIndex: null,
-
-    areaSelectStyle: {
-        width: 20,
-        borderWidth: 1,
-        borderColor: 'rgba(160,197,232)',
-        color: 'rgba(160,197,232)',
-        opacity: 0.3
-    },
-
-    realtime: true, // Whether realtime update view when select.
-
-    z: 10
-};
-
-zrUtil.merge(AxisModel.prototype, axisModelCommonMixin);
-
-function getAxisType(axisName, option) {
-    return option.type || (option.data ? 'category' : 'value');
-}
-
-axisModelCreator('parallel', AxisModel, getAxisType, defaultOption);
-
-export default AxisModel;

+ 0 - 547
admin/node_modules/echarts/src/coord/parallel/Parallel.js

@@ -1,547 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Parallel Coordinates
- * <https://en.wikipedia.org/wiki/Parallel_coordinates>
- */
-
-import * as zrUtil from 'zrender/src/core/util';
-import * as matrix from 'zrender/src/core/matrix';
-import * as layoutUtil from '../../util/layout';
-import * as axisHelper from '../../coord/axisHelper';
-import ParallelAxis from './ParallelAxis';
-import * as graphic from '../../util/graphic';
-import * as numberUtil from '../../util/number';
-import sliderMove from '../../component/helper/sliderMove';
-
-var each = zrUtil.each;
-var mathMin = Math.min;
-var mathMax = Math.max;
-var mathFloor = Math.floor;
-var mathCeil = Math.ceil;
-var round = numberUtil.round;
-
-var PI = Math.PI;
-
-function Parallel(parallelModel, ecModel, api) {
-
-    /**
-     * key: dimension
-     * @type {Object.<string, module:echarts/coord/parallel/Axis>}
-     * @private
-     */
-    this._axesMap = zrUtil.createHashMap();
-
-    /**
-     * key: dimension
-     * value: {position: [], rotation, }
-     * @type {Object.<string, Object>}
-     * @private
-     */
-    this._axesLayout = {};
-
-    /**
-     * Always follow axis order.
-     * @type {Array.<string>}
-     * @readOnly
-     */
-    this.dimensions = parallelModel.dimensions;
-
-    /**
-     * @type {module:zrender/core/BoundingRect}
-     */
-    this._rect;
-
-    /**
-     * @type {module:echarts/coord/parallel/ParallelModel}
-     */
-    this._model = parallelModel;
-
-    this._init(parallelModel, ecModel, api);
-}
-
-Parallel.prototype = {
-
-    type: 'parallel',
-
-    constructor: Parallel,
-
-    /**
-     * Initialize cartesian coordinate systems
-     * @private
-     */
-    _init: function (parallelModel, ecModel, api) {
-
-        var dimensions = parallelModel.dimensions;
-        var parallelAxisIndex = parallelModel.parallelAxisIndex;
-
-        each(dimensions, function (dim, idx) {
-
-            var axisIndex = parallelAxisIndex[idx];
-            var axisModel = ecModel.getComponent('parallelAxis', axisIndex);
-
-            var axis = this._axesMap.set(dim, new ParallelAxis(
-                dim,
-                axisHelper.createScaleByModel(axisModel),
-                [0, 0],
-                axisModel.get('type'),
-                axisIndex
-            ));
-
-            var isCategory = axis.type === 'category';
-            axis.onBand = isCategory && axisModel.get('boundaryGap');
-            axis.inverse = axisModel.get('inverse');
-
-            // Injection
-            axisModel.axis = axis;
-            axis.model = axisModel;
-            axis.coordinateSystem = axisModel.coordinateSystem = this;
-
-        }, this);
-    },
-
-    /**
-     * Update axis scale after data processed
-     * @param  {module:echarts/model/Global} ecModel
-     * @param  {module:echarts/ExtensionAPI} api
-     */
-    update: function (ecModel, api) {
-        this._updateAxesFromSeries(this._model, ecModel);
-    },
-
-    /**
-     * @override
-     */
-    containPoint: function (point) {
-        var layoutInfo = this._makeLayoutInfo();
-        var axisBase = layoutInfo.axisBase;
-        var layoutBase = layoutInfo.layoutBase;
-        var pixelDimIndex = layoutInfo.pixelDimIndex;
-        var pAxis = point[1 - pixelDimIndex];
-        var pLayout = point[pixelDimIndex];
-
-        return pAxis >= axisBase
-            && pAxis <= axisBase + layoutInfo.axisLength
-            && pLayout >= layoutBase
-            && pLayout <= layoutBase + layoutInfo.layoutLength;
-    },
-
-    getModel: function () {
-        return this._model;
-    },
-
-    /**
-     * Update properties from series
-     * @private
-     */
-    _updateAxesFromSeries: function (parallelModel, ecModel) {
-        ecModel.eachSeries(function (seriesModel) {
-
-            if (!parallelModel.contains(seriesModel, ecModel)) {
-                return;
-            }
-
-            var data = seriesModel.getData();
-
-            each(this.dimensions, function (dim) {
-                var axis = this._axesMap.get(dim);
-                axis.scale.unionExtentFromData(data, data.mapDimension(dim));
-                axisHelper.niceScaleExtent(axis.scale, axis.model);
-            }, this);
-        }, this);
-    },
-
-    /**
-     * Resize the parallel coordinate system.
-     * @param {module:echarts/coord/parallel/ParallelModel} parallelModel
-     * @param {module:echarts/ExtensionAPI} api
-     */
-    resize: function (parallelModel, api) {
-        this._rect = layoutUtil.getLayoutRect(
-            parallelModel.getBoxLayoutParams(),
-            {
-                width: api.getWidth(),
-                height: api.getHeight()
-            }
-        );
-
-        this._layoutAxes();
-    },
-
-    /**
-     * @return {module:zrender/core/BoundingRect}
-     */
-    getRect: function () {
-        return this._rect;
-    },
-
-    /**
-     * @private
-     */
-    _makeLayoutInfo: function () {
-        var parallelModel = this._model;
-        var rect = this._rect;
-        var xy = ['x', 'y'];
-        var wh = ['width', 'height'];
-        var layout = parallelModel.get('layout');
-        var pixelDimIndex = layout === 'horizontal' ? 0 : 1;
-        var layoutLength = rect[wh[pixelDimIndex]];
-        var layoutExtent = [0, layoutLength];
-        var axisCount = this.dimensions.length;
-
-        var axisExpandWidth = restrict(parallelModel.get('axisExpandWidth'), layoutExtent);
-        var axisExpandCount = restrict(parallelModel.get('axisExpandCount') || 0, [0, axisCount]);
-        var axisExpandable = parallelModel.get('axisExpandable')
-            && axisCount > 3
-            && axisCount > axisExpandCount
-            && axisExpandCount > 1
-            && axisExpandWidth > 0
-            && layoutLength > 0;
-
-        // `axisExpandWindow` is According to the coordinates of [0, axisExpandLength],
-        // for sake of consider the case that axisCollapseWidth is 0 (when screen is narrow),
-        // where collapsed axes should be overlapped.
-        var axisExpandWindow = parallelModel.get('axisExpandWindow');
-        var winSize;
-        if (!axisExpandWindow) {
-            winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent);
-            var axisExpandCenter = parallelModel.get('axisExpandCenter') || mathFloor(axisCount / 2);
-            axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2];
-            axisExpandWindow[1] = axisExpandWindow[0] + winSize;
-        }
-        else {
-                winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent);
-                axisExpandWindow[1] = axisExpandWindow[0] + winSize;
-        }
-
-        var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount);
-        // Avoid axisCollapseWidth is too small.
-        axisCollapseWidth < 3 && (axisCollapseWidth = 0);
-
-        // Find the first and last indices > ewin[0] and < ewin[1].
-        var winInnerIndices = [
-            mathFloor(round(axisExpandWindow[0] / axisExpandWidth, 1)) + 1,
-            mathCeil(round(axisExpandWindow[1] / axisExpandWidth, 1)) - 1
-        ];
-
-        // Pos in ec coordinates.
-        var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0];
-
-        return {
-            layout: layout,
-            pixelDimIndex: pixelDimIndex,
-            layoutBase: rect[xy[pixelDimIndex]],
-            layoutLength: layoutLength,
-            axisBase: rect[xy[1 - pixelDimIndex]],
-            axisLength: rect[wh[1 - pixelDimIndex]],
-            axisExpandable: axisExpandable,
-            axisExpandWidth: axisExpandWidth,
-            axisCollapseWidth: axisCollapseWidth,
-            axisExpandWindow: axisExpandWindow,
-            axisCount: axisCount,
-            winInnerIndices: winInnerIndices,
-            axisExpandWindow0Pos: axisExpandWindow0Pos
-        };
-    },
-
-    /**
-     * @private
-     */
-    _layoutAxes: function () {
-        var rect = this._rect;
-        var axes = this._axesMap;
-        var dimensions = this.dimensions;
-        var layoutInfo = this._makeLayoutInfo();
-        var layout = layoutInfo.layout;
-
-        axes.each(function (axis) {
-            var axisExtent = [0, layoutInfo.axisLength];
-            var idx = axis.inverse ? 1 : 0;
-            axis.setExtent(axisExtent[idx], axisExtent[1 - idx]);
-        });
-
-        each(dimensions, function (dim, idx) {
-            var posInfo = (layoutInfo.axisExpandable
-                ? layoutAxisWithExpand : layoutAxisWithoutExpand
-            )(idx, layoutInfo);
-
-            var positionTable = {
-                horizontal: {
-                    x: posInfo.position,
-                    y: layoutInfo.axisLength
-                },
-                vertical: {
-                    x: 0,
-                    y: posInfo.position
-                }
-            };
-            var rotationTable = {
-                horizontal: PI / 2,
-                vertical: 0
-            };
-
-            var position = [
-                positionTable[layout].x + rect.x,
-                positionTable[layout].y + rect.y
-            ];
-
-            var rotation = rotationTable[layout];
-            var transform = matrix.create();
-            matrix.rotate(transform, transform, rotation);
-            matrix.translate(transform, transform, position);
-
-            // TODO
-            // tick等排布信息。
-
-            // TODO
-            // 根据axis order 更新 dimensions顺序。
-
-            this._axesLayout[dim] = {
-                position: position,
-                rotation: rotation,
-                transform: transform,
-                axisNameAvailableWidth: posInfo.axisNameAvailableWidth,
-                axisLabelShow: posInfo.axisLabelShow,
-                nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth,
-                tickDirection: 1,
-                labelDirection: 1
-            };
-        }, this);
-    },
-
-    /**
-     * Get axis by dim.
-     * @param {string} dim
-     * @return {module:echarts/coord/parallel/ParallelAxis} [description]
-     */
-    getAxis: function (dim) {
-        return this._axesMap.get(dim);
-    },
-
-    /**
-     * Convert a dim value of a single item of series data to Point.
-     * @param {*} value
-     * @param {string} dim
-     * @return {Array}
-     */
-    dataToPoint: function (value, dim) {
-        return this.axisCoordToPoint(
-            this._axesMap.get(dim).dataToCoord(value),
-            dim
-        );
-    },
-
-    /**
-     * Travel data for one time, get activeState of each data item.
-     * @param {module:echarts/data/List} data
-     * @param {Functio} cb param: {string} activeState 'active' or 'inactive' or 'normal'
-     *                            {number} dataIndex
-     * @param {number} [start=0] the start dataIndex that travel from.
-     * @param {number} [end=data.count()] the next dataIndex of the last dataIndex will be travel.
-     */
-    eachActiveState: function (data, callback, start, end) {
-        start == null && (start = 0);
-        end == null && (end = data.count());
-
-        var axesMap = this._axesMap;
-        var dimensions = this.dimensions;
-        var dataDimensions = [];
-        var axisModels = [];
-
-        zrUtil.each(dimensions, function (axisDim) {
-            dataDimensions.push(data.mapDimension(axisDim));
-            axisModels.push(axesMap.get(axisDim).model);
-        });
-
-        var hasActiveSet = this.hasAxisBrushed();
-
-        for (var dataIndex = start; dataIndex < end; dataIndex++) {
-            var activeState;
-
-            if (!hasActiveSet) {
-                activeState = 'normal';
-            }
-            else {
-                activeState = 'active';
-                var values = data.getValues(dataDimensions, dataIndex);
-                for (var j = 0, lenj = dimensions.length; j < lenj; j++) {
-                    var state = axisModels[j].getActiveState(values[j]);
-
-                    if (state === 'inactive') {
-                        activeState = 'inactive';
-                        break;
-                    }
-                }
-            }
-
-            callback(activeState, dataIndex);
-        }
-    },
-
-    /**
-     * Whether has any activeSet.
-     * @return {boolean}
-     */
-    hasAxisBrushed: function () {
-        var dimensions = this.dimensions;
-        var axesMap = this._axesMap;
-        var hasActiveSet = false;
-
-        for (var j = 0, lenj = dimensions.length; j < lenj; j++) {
-            if (axesMap.get(dimensions[j]).model.getActiveState() !== 'normal') {
-                hasActiveSet = true;
-            }
-        }
-
-        return hasActiveSet;
-    },
-
-    /**
-     * Convert coords of each axis to Point.
-     *  Return point. For example: [10, 20]
-     * @param {Array.<number>} coords
-     * @param {string} dim
-     * @return {Array.<number>}
-     */
-    axisCoordToPoint: function (coord, dim) {
-        var axisLayout = this._axesLayout[dim];
-        return graphic.applyTransform([coord, 0], axisLayout.transform);
-    },
-
-    /**
-     * Get axis layout.
-     */
-    getAxisLayout: function (dim) {
-        return zrUtil.clone(this._axesLayout[dim]);
-    },
-
-    /**
-     * @param {Array.<number>} point
-     * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}.
-     */
-    getSlidedAxisExpandWindow: function (point) {
-        var layoutInfo = this._makeLayoutInfo();
-        var pixelDimIndex = layoutInfo.pixelDimIndex;
-        var axisExpandWindow = layoutInfo.axisExpandWindow.slice();
-        var winSize = axisExpandWindow[1] - axisExpandWindow[0];
-        var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)];
-
-        // Out of the area of coordinate system.
-        if (!this.containPoint(point)) {
-            return {behavior: 'none', axisExpandWindow: axisExpandWindow};
-        }
-
-        // Conver the point from global to expand coordinates.
-        var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos;
-
-        // For dragging operation convenience, the window should not be
-        // slided when mouse is the center area of the window.
-        var delta;
-        var behavior = 'slide';
-        var axisCollapseWidth = layoutInfo.axisCollapseWidth;
-        var triggerArea = this._model.get('axisExpandSlideTriggerArea');
-        // But consider touch device, jump is necessary.
-        var useJump = triggerArea[0] != null;
-
-        if (axisCollapseWidth) {
-            if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) {
-                behavior = 'jump';
-                delta = pointCoord - winSize * triggerArea[2];
-            }
-            else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) {
-                behavior = 'jump';
-                delta = pointCoord - winSize * (1 - triggerArea[2]);
-            }
-            else {
-                (delta = pointCoord - winSize * triggerArea[1]) >= 0
-                    && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0
-                    && (delta = 0);
-            }
-            delta *= layoutInfo.axisExpandWidth / axisCollapseWidth;
-            delta
-                ? sliderMove(delta, axisExpandWindow, extent, 'all')
-                // Avoid nonsense triger on mousemove.
-                : (behavior = 'none');
-        }
-        // When screen is too narrow, make it visible and slidable, although it is hard to interact.
-        else {
-            var winSize = axisExpandWindow[1] - axisExpandWindow[0];
-            var pos = extent[1] * pointCoord / winSize;
-            axisExpandWindow = [mathMax(0, pos - winSize / 2)];
-            axisExpandWindow[1] = mathMin(extent[1], axisExpandWindow[0] + winSize);
-            axisExpandWindow[0] = axisExpandWindow[1] - winSize;
-        }
-
-        return {
-            axisExpandWindow: axisExpandWindow,
-            behavior: behavior
-        };
-    }
-};
-
-function restrict(len, extent) {
-    return mathMin(mathMax(len, extent[0]), extent[1]);
-}
-
-function layoutAxisWithoutExpand(axisIndex, layoutInfo) {
-    var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1);
-    return {
-        position: step * axisIndex,
-        axisNameAvailableWidth: step,
-        axisLabelShow: true
-    };
-}
-
-function layoutAxisWithExpand(axisIndex, layoutInfo) {
-    var layoutLength = layoutInfo.layoutLength;
-    var axisExpandWidth = layoutInfo.axisExpandWidth;
-    var axisCount = layoutInfo.axisCount;
-    var axisCollapseWidth = layoutInfo.axisCollapseWidth;
-    var winInnerIndices = layoutInfo.winInnerIndices;
-
-    var position;
-    var axisNameAvailableWidth = axisCollapseWidth;
-    var axisLabelShow = false;
-    var nameTruncateMaxWidth;
-
-    if (axisIndex < winInnerIndices[0]) {
-        position = axisIndex * axisCollapseWidth;
-        nameTruncateMaxWidth = axisCollapseWidth;
-    }
-    else if (axisIndex <= winInnerIndices[1]) {
-        position = layoutInfo.axisExpandWindow0Pos
-            + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0];
-        axisNameAvailableWidth = axisExpandWidth;
-        axisLabelShow = true;
-    }
-    else {
-        position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth;
-        nameTruncateMaxWidth = axisCollapseWidth;
-    }
-
-    return {
-        position: position,
-        axisNameAvailableWidth: axisNameAvailableWidth,
-        axisLabelShow: axisLabelShow,
-        nameTruncateMaxWidth: nameTruncateMaxWidth
-    };
-}
-
-export default Parallel;

+ 0 - 73
admin/node_modules/echarts/src/coord/parallel/ParallelAxis.js

@@ -1,73 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import Axis from '../Axis';
-
-/**
- * @constructor module:echarts/coord/parallel/ParallelAxis
- * @extends {module:echarts/coord/Axis}
- * @param {string} dim
- * @param {*} scale
- * @param {Array.<number>} coordExtent
- * @param {string} axisType
- */
-var ParallelAxis = function (dim, scale, coordExtent, axisType, axisIndex) {
-
-    Axis.call(this, dim, scale, coordExtent);
-
-    /**
-     * Axis type
-     *  - 'category'
-     *  - 'value'
-     *  - 'time'
-     *  - 'log'
-     * @type {string}
-     */
-    this.type = axisType || 'value';
-
-    /**
-     * @type {number}
-     * @readOnly
-     */
-    this.axisIndex = axisIndex;
-};
-
-ParallelAxis.prototype = {
-
-    constructor: ParallelAxis,
-
-    /**
-     * Axis model
-     * @param {module:echarts/coord/parallel/AxisModel}
-     */
-    model: null,
-
-    /**
-     * @override
-     */
-    isHorizontal: function () {
-        return this.coordinateSystem.getModel().get('layout') !== 'horizontal';
-    }
-
-};
-
-zrUtil.inherits(ParallelAxis, Axis);
-
-export default ParallelAxis;

+ 0 - 142
admin/node_modules/echarts/src/coord/parallel/ParallelModel.js

@@ -1,142 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import Component from '../../model/Component';
-
-import './AxisModel';
-
-export default Component.extend({
-
-    type: 'parallel',
-
-    dependencies: ['parallelAxis'],
-
-    /**
-     * @type {module:echarts/coord/parallel/Parallel}
-     */
-    coordinateSystem: null,
-
-    /**
-     * Each item like: 'dim0', 'dim1', 'dim2', ...
-     * @type {Array.<string>}
-     * @readOnly
-     */
-    dimensions: null,
-
-    /**
-     * Coresponding to dimensions.
-     * @type {Array.<number>}
-     * @readOnly
-     */
-    parallelAxisIndex: null,
-
-    layoutMode: 'box',
-
-    defaultOption: {
-        zlevel: 0,
-        z: 0,
-        left: 80,
-        top: 60,
-        right: 80,
-        bottom: 60,
-        // width: {totalWidth} - left - right,
-        // height: {totalHeight} - top - bottom,
-
-        layout: 'horizontal',      // 'horizontal' or 'vertical'
-
-        // FIXME
-        // naming?
-        axisExpandable: false,
-        axisExpandCenter: null,
-        axisExpandCount: 0,
-        axisExpandWidth: 50,      // FIXME '10%' ?
-        axisExpandRate: 17,
-        axisExpandDebounce: 50,
-        // [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full.
-        // Do not doc to user until necessary.
-        axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4],
-        axisExpandTriggerOn: 'click', // 'mousemove' or 'click'
-
-        parallelAxisDefault: null
-    },
-
-    /**
-     * @override
-     */
-    init: function () {
-        Component.prototype.init.apply(this, arguments);
-
-        this.mergeOption({});
-    },
-
-    /**
-     * @override
-     */
-    mergeOption: function (newOption) {
-        var thisOption = this.option;
-
-        newOption && zrUtil.merge(thisOption, newOption, true);
-
-        this._initDimensions();
-    },
-
-    /**
-     * Whether series or axis is in this coordinate system.
-     * @param {module:echarts/model/Series|module:echarts/coord/parallel/AxisModel} model
-     * @param {module:echarts/model/Global} ecModel
-     */
-    contains: function (model, ecModel) {
-        var parallelIndex = model.get('parallelIndex');
-        return parallelIndex != null
-            && ecModel.getComponent('parallel', parallelIndex) === this;
-    },
-
-    setAxisExpand: function (opt) {
-        zrUtil.each(
-            ['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'],
-            function (name) {
-                if (opt.hasOwnProperty(name)) {
-                    this.option[name] = opt[name];
-                }
-            },
-            this
-        );
-    },
-
-    /**
-     * @private
-     */
-    _initDimensions: function () {
-        var dimensions = this.dimensions = [];
-        var parallelAxisIndex = this.parallelAxisIndex = [];
-
-        var axisModels = zrUtil.filter(this.dependentModels.parallelAxis, function (axisModel) {
-            // Can not use this.contains here, because
-            // initialization has not been completed yet.
-            return (axisModel.get('parallelIndex') || 0) === this.componentIndex;
-        }, this);
-
-        zrUtil.each(axisModels, function (axisModel) {
-            dimensions.push('dim' + axisModel.get('dim'));
-            parallelAxisIndex.push(axisModel.componentIndex);
-        });
-    }
-
-});

+ 0 - 57
admin/node_modules/echarts/src/coord/parallel/parallelCreator.js

@@ -1,57 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Parallel coordinate system creater.
- */
-
-import Parallel from './Parallel';
-import CoordinateSystem from '../../CoordinateSystem';
-
-function create(ecModel, api) {
-    var coordSysList = [];
-
-    ecModel.eachComponent('parallel', function (parallelModel, idx) {
-        var coordSys = new Parallel(parallelModel, ecModel, api);
-
-        coordSys.name = 'parallel_' + idx;
-        coordSys.resize(parallelModel, api);
-
-        parallelModel.coordinateSystem = coordSys;
-        coordSys.model = parallelModel;
-
-        coordSysList.push(coordSys);
-    });
-
-    // Inject the coordinateSystems into seriesModel
-    ecModel.eachSeries(function (seriesModel) {
-        if (seriesModel.get('coordinateSystem') === 'parallel') {
-            var parallelModel = ecModel.queryComponents({
-                mainType: 'parallel',
-                index: seriesModel.get('parallelIndex'),
-                id: seriesModel.get('parallelId')
-            })[0];
-            seriesModel.coordinateSystem = parallelModel.coordinateSystem;
-        }
-    });
-
-    return coordSysList;
-}
-
-CoordinateSystem.register('parallel', {create: create});

+ 0 - 69
admin/node_modules/echarts/src/coord/parallel/parallelPreprocessor.js

@@ -1,69 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import * as modelUtil from '../../util/model';
-
-export default function (option) {
-    createParallelIfNeeded(option);
-    mergeAxisOptionFromParallel(option);
-}
-
-/**
- * Create a parallel coordinate if not exists.
- * @inner
- */
-function createParallelIfNeeded(option) {
-    if (option.parallel) {
-        return;
-    }
-
-    var hasParallelSeries = false;
-
-    zrUtil.each(option.series, function (seriesOpt) {
-        if (seriesOpt && seriesOpt.type === 'parallel') {
-            hasParallelSeries = true;
-        }
-    });
-
-    if (hasParallelSeries) {
-        option.parallel = [{}];
-    }
-}
-
-/**
- * Merge aixs definition from parallel option (if exists) to axis option.
- * @inner
- */
-function mergeAxisOptionFromParallel(option) {
-    var axes = modelUtil.normalizeToArray(option.parallelAxis);
-
-    zrUtil.each(axes, function (axisOption) {
-        if (!zrUtil.isObject(axisOption)) {
-            return;
-        }
-
-        var parallelIndex = axisOption.parallelIndex || 0;
-        var parallelOption = modelUtil.normalizeToArray(option.parallel)[parallelIndex];
-
-        if (parallelOption && parallelOption.parallelAxisDefault) {
-            zrUtil.merge(axisOption, parallelOption.parallelAxisDefault, false);
-        }
-    });
-}

+ 0 - 127
admin/node_modules/echarts/src/coord/polar/AngleAxis.js

@@ -1,127 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import * as textContain from 'zrender/src/contain/text';
-import Axis from '../Axis';
-import {makeInner} from '../../util/model';
-
-var inner = makeInner();
-
-function AngleAxis(scale, angleExtent) {
-
-    angleExtent = angleExtent || [0, 360];
-
-    Axis.call(this, 'angle', scale, angleExtent);
-
-    /**
-     * Axis type
-     *  - 'category'
-     *  - 'value'
-     *  - 'time'
-     *  - 'log'
-     * @type {string}
-     */
-    this.type = 'category';
-}
-
-AngleAxis.prototype = {
-
-    constructor: AngleAxis,
-
-    /**
-     * @override
-     */
-    pointToData: function (point, clamp) {
-        return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];
-    },
-
-    dataToAngle: Axis.prototype.dataToCoord,
-
-    angleToData: Axis.prototype.coordToData,
-
-    /**
-     * Only be called in category axis.
-     * Angle axis uses text height to decide interval
-     *
-     * @override
-     * @return {number} Auto interval for cateogry axis tick and label
-     */
-    calculateCategoryInterval: function () {
-        var axis = this;
-        var labelModel = axis.getLabelModel();
-
-        var ordinalScale = axis.scale;
-        var ordinalExtent = ordinalScale.getExtent();
-        // Providing this method is for optimization:
-        // avoid generating a long array by `getTicks`
-        // in large category data case.
-        var tickCount = ordinalScale.count();
-
-        if (ordinalExtent[1] - ordinalExtent[0] < 1) {
-            return 0;
-        }
-
-        var tickValue = ordinalExtent[0];
-        var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);
-        var unitH = Math.abs(unitSpan);
-
-        // Not precise, just use height as text width
-        // and each distance from axis line yet.
-        var rect = textContain.getBoundingRect(
-            tickValue, labelModel.getFont(), 'center', 'top'
-        );
-        var maxH = Math.max(rect.height, 7);
-
-        var dh = maxH / unitH;
-        // 0/0 is NaN, 1/0 is Infinity.
-        isNaN(dh) && (dh = Infinity);
-        var interval = Math.max(0, Math.floor(dh));
-
-        var cache = inner(axis.model);
-        var lastAutoInterval = cache.lastAutoInterval;
-        var lastTickCount = cache.lastTickCount;
-
-        // Use cache to keep interval stable while moving zoom window,
-        // otherwise the calculated interval might jitter when the zoom
-        // window size is close to the interval-changing size.
-        if (lastAutoInterval != null
-            && lastTickCount != null
-            && Math.abs(lastAutoInterval - interval) <= 1
-            && Math.abs(lastTickCount - tickCount) <= 1
-            // Always choose the bigger one, otherwise the critical
-            // point is not the same when zooming in or zooming out.
-            && lastAutoInterval > interval
-        ) {
-            interval = lastAutoInterval;
-        }
-        // Only update cache if cache not used, otherwise the
-        // changing of interval is too insensitive.
-        else {
-            cache.lastTickCount = tickCount;
-            cache.lastAutoInterval = interval;
-        }
-
-        return interval;
-    }
-};
-
-zrUtil.inherits(AngleAxis, Axis);
-
-export default AngleAxis;

+ 0 - 78
admin/node_modules/echarts/src/coord/polar/AxisModel.js

@@ -1,78 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import ComponentModel from '../../model/Component';
-import axisModelCreator from '../axisModelCreator';
-import axisModelCommonMixin from '../axisModelCommonMixin';
-
-var PolarAxisModel = ComponentModel.extend({
-
-    type: 'polarAxis',
-
-    /**
-     * @type {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}
-     */
-    axis: null,
-
-    /**
-     * @override
-     */
-    getCoordSysModel: function () {
-        return this.ecModel.queryComponents({
-            mainType: 'polar',
-            index: this.option.polarIndex,
-            id: this.option.polarId
-        })[0];
-    }
-
-});
-
-zrUtil.merge(PolarAxisModel.prototype, axisModelCommonMixin);
-
-var polarAxisDefaultExtendedOption = {
-    angle: {
-        // polarIndex: 0,
-        // polarId: '',
-
-        startAngle: 90,
-
-        clockwise: true,
-
-        splitNumber: 12,
-
-        axisLabel: {
-            rotate: false
-        }
-    },
-    radius: {
-        // polarIndex: 0,
-        // polarId: '',
-
-        splitNumber: 5
-    }
-};
-
-function getAxisType(axisDim, option) {
-    // Default axis with data is category axis
-    return option.type || (option.data ? 'category' : 'value');
-}
-
-axisModelCreator('angle', PolarAxisModel, getAxisType, polarAxisDefaultExtendedOption.angle);
-axisModelCreator('radius', PolarAxisModel, getAxisType, polarAxisDefaultExtendedOption.radius);

+ 0 - 299
admin/node_modules/echarts/src/coord/polar/Polar.js

@@ -1,299 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * @module echarts/coord/polar/Polar
- */
-
-import RadiusAxis from './RadiusAxis';
-import AngleAxis from './AngleAxis';
-
-/**
- * @alias {module:echarts/coord/polar/Polar}
- * @constructor
- * @param {string} name
- */
-var Polar = function (name) {
-
-    /**
-     * @type {string}
-     */
-    this.name = name || '';
-
-    /**
-     * x of polar center
-     * @type {number}
-     */
-    this.cx = 0;
-
-    /**
-     * y of polar center
-     * @type {number}
-     */
-    this.cy = 0;
-
-    /**
-     * @type {module:echarts/coord/polar/RadiusAxis}
-     * @private
-     */
-    this._radiusAxis = new RadiusAxis();
-
-    /**
-     * @type {module:echarts/coord/polar/AngleAxis}
-     * @private
-     */
-    this._angleAxis = new AngleAxis();
-
-    this._radiusAxis.polar = this._angleAxis.polar = this;
-};
-
-Polar.prototype = {
-
-    type: 'polar',
-
-    axisPointerEnabled: true,
-
-    constructor: Polar,
-
-    /**
-     * @param {Array.<string>}
-     * @readOnly
-     */
-    dimensions: ['radius', 'angle'],
-
-    /**
-     * @type {module:echarts/coord/PolarModel}
-     */
-    model: null,
-
-    /**
-     * If contain coord
-     * @param {Array.<number>} point
-     * @return {boolean}
-     */
-    containPoint: function (point) {
-        var coord = this.pointToCoord(point);
-        return this._radiusAxis.contain(coord[0])
-            && this._angleAxis.contain(coord[1]);
-    },
-
-    /**
-     * If contain data
-     * @param {Array.<number>} data
-     * @return {boolean}
-     */
-    containData: function (data) {
-        return this._radiusAxis.containData(data[0])
-            && this._angleAxis.containData(data[1]);
-    },
-
-    /**
-     * @param {string} dim
-     * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}
-     */
-    getAxis: function (dim) {
-        return this['_' + dim + 'Axis'];
-    },
-
-    /**
-     * @return {Array.<module:echarts/coord/Axis>}
-     */
-    getAxes: function () {
-        return [this._radiusAxis, this._angleAxis];
-    },
-
-    /**
-     * Get axes by type of scale
-     * @param {string} scaleType
-     * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}
-     */
-    getAxesByScale: function (scaleType) {
-        var axes = [];
-        var angleAxis = this._angleAxis;
-        var radiusAxis = this._radiusAxis;
-        angleAxis.scale.type === scaleType && axes.push(angleAxis);
-        radiusAxis.scale.type === scaleType && axes.push(radiusAxis);
-
-        return axes;
-    },
-
-    /**
-     * @return {module:echarts/coord/polar/AngleAxis}
-     */
-    getAngleAxis: function () {
-        return this._angleAxis;
-    },
-
-    /**
-     * @return {module:echarts/coord/polar/RadiusAxis}
-     */
-    getRadiusAxis: function () {
-        return this._radiusAxis;
-    },
-
-    /**
-     * @param {module:echarts/coord/polar/Axis}
-     * @return {module:echarts/coord/polar/Axis}
-     */
-    getOtherAxis: function (axis) {
-        var angleAxis = this._angleAxis;
-        return axis === angleAxis ? this._radiusAxis : angleAxis;
-    },
-
-    /**
-     * Base axis will be used on stacking.
-     *
-     * @return {module:echarts/coord/polar/Axis}
-     */
-    getBaseAxis: function () {
-        return this.getAxesByScale('ordinal')[0]
-            || this.getAxesByScale('time')[0]
-            || this.getAngleAxis();
-    },
-
-    /**
-     * @param {string} [dim] 'radius' or 'angle' or 'auto' or null/undefined
-     * @return {Object} {baseAxes: [], otherAxes: []}
-     */
-    getTooltipAxes: function (dim) {
-        var baseAxis = (dim != null && dim !== 'auto')
-            ? this.getAxis(dim) : this.getBaseAxis();
-        return {
-            baseAxes: [baseAxis],
-            otherAxes: [this.getOtherAxis(baseAxis)]
-        };
-    },
-
-    /**
-     * Convert a single data item to (x, y) point.
-     * Parameter data is an array which the first element is radius and the second is angle
-     * @param {Array.<number>} data
-     * @param {boolean} [clamp=false]
-     * @return {Array.<number>}
-     */
-    dataToPoint: function (data, clamp) {
-        return this.coordToPoint([
-            this._radiusAxis.dataToRadius(data[0], clamp),
-            this._angleAxis.dataToAngle(data[1], clamp)
-        ]);
-    },
-
-    /**
-     * Convert a (x, y) point to data
-     * @param {Array.<number>} point
-     * @param {boolean} [clamp=false]
-     * @return {Array.<number>}
-     */
-    pointToData: function (point, clamp) {
-        var coord = this.pointToCoord(point);
-        return [
-            this._radiusAxis.radiusToData(coord[0], clamp),
-            this._angleAxis.angleToData(coord[1], clamp)
-        ];
-    },
-
-    /**
-     * Convert a (x, y) point to (radius, angle) coord
-     * @param {Array.<number>} point
-     * @return {Array.<number>}
-     */
-    pointToCoord: function (point) {
-        var dx = point[0] - this.cx;
-        var dy = point[1] - this.cy;
-        var angleAxis = this.getAngleAxis();
-        var extent = angleAxis.getExtent();
-        var minAngle = Math.min(extent[0], extent[1]);
-        var maxAngle = Math.max(extent[0], extent[1]);
-        // Fix fixed extent in polarCreator
-        // FIXME
-        angleAxis.inverse
-            ? (minAngle = maxAngle - 360)
-            : (maxAngle = minAngle + 360);
-
-        var radius = Math.sqrt(dx * dx + dy * dy);
-        dx /= radius;
-        dy /= radius;
-
-        var radian = Math.atan2(-dy, dx) / Math.PI * 180;
-
-        // move to angleExtent
-        var dir = radian < minAngle ? 1 : -1;
-        while (radian < minAngle || radian > maxAngle) {
-            radian += dir * 360;
-        }
-
-        return [radius, radian];
-    },
-
-    /**
-     * Convert a (radius, angle) coord to (x, y) point
-     * @param {Array.<number>} coord
-     * @return {Array.<number>}
-     */
-    coordToPoint: function (coord) {
-        var radius = coord[0];
-        var radian = coord[1] / 180 * Math.PI;
-        var x = Math.cos(radian) * radius + this.cx;
-        // Inverse the y
-        var y = -Math.sin(radian) * radius + this.cy;
-
-        return [x, y];
-    },
-
-    /**
-     * Get ring area of cartesian.
-     * Area will have a contain function to determine if a point is in the coordinate system.
-     * @return {Ring}
-     */
-    getArea: function () {
-
-        var angleAxis = this.getAngleAxis();
-        var radiusAxis = this.getRadiusAxis();
-
-        var radiusExtent = radiusAxis.getExtent().slice();
-        radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse();
-        var angleExtent = angleAxis.getExtent();
-
-        var RADIAN = Math.PI / 180;
-
-        return {
-            cx: this.cx,
-            cy: this.cy,
-            r0: radiusExtent[0],
-            r: radiusExtent[1],
-            startAngle: -angleExtent[0] * RADIAN,
-            endAngle: -angleExtent[1] * RADIAN,
-            clockwise: angleAxis.inverse,
-            contain: function (x, y) {
-                // It's a ring shape.
-                // Start angle and end angle don't matter
-                var dx = x - this.cx;
-                var dy = y - this.cy;
-                var d2 = dx * dx + dy * dy;
-                var r = this.r;
-                var r0 = this.r0;
-
-                return d2 <= r * r && d2 >= r0 * r0;
-            }
-        };
-    }
-
-};
-
-export default Polar;

+ 0 - 60
admin/node_modules/echarts/src/coord/polar/PolarModel.js

@@ -1,60 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../echarts';
-import './AxisModel';
-
-export default echarts.extendComponentModel({
-
-    type: 'polar',
-
-    dependencies: ['polarAxis', 'angleAxis'],
-
-    /**
-     * @type {module:echarts/coord/polar/Polar}
-     */
-    coordinateSystem: null,
-
-    /**
-     * @param {string} axisType
-     * @return {module:echarts/coord/polar/AxisModel}
-     */
-    findAxisModel: function (axisType) {
-        var foundAxisModel;
-        var ecModel = this.ecModel;
-
-        ecModel.eachComponent(axisType, function (axisModel) {
-            if (axisModel.getCoordSysModel() === this) {
-                foundAxisModel = axisModel;
-            }
-        }, this);
-        return foundAxisModel;
-    },
-
-    defaultOption: {
-
-        zlevel: 0,
-
-        z: 0,
-
-        center: ['50%', '50%'],
-
-        radius: '80%'
-    }
-});

+ 0 - 56
admin/node_modules/echarts/src/coord/polar/RadiusAxis.js

@@ -1,56 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import Axis from '../Axis';
-
-function RadiusAxis(scale, radiusExtent) {
-
-    Axis.call(this, 'radius', scale, radiusExtent);
-
-    /**
-     * Axis type
-     *  - 'category'
-     *  - 'value'
-     *  - 'time'
-     *  - 'log'
-     * @type {string}
-     */
-    this.type = 'category';
-}
-
-RadiusAxis.prototype = {
-
-    constructor: RadiusAxis,
-
-    /**
-     * @override
-     */
-    pointToData: function (point, clamp) {
-        return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];
-    },
-
-    dataToRadius: Axis.prototype.dataToCoord,
-
-    radiusToData: Axis.prototype.coordToData
-};
-
-zrUtil.inherits(RadiusAxis, Axis);
-
-export default RadiusAxis;

+ 0 - 187
admin/node_modules/echarts/src/coord/polar/polarCreator.js

@@ -1,187 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// TODO Axis scale
-
-import {__DEV__} from '../../config';
-import * as zrUtil from 'zrender/src/core/util';
-import Polar from './Polar';
-import {parsePercent} from '../../util/number';
-import {
-    createScaleByModel,
-    niceScaleExtent
-} from '../../coord/axisHelper';
-import CoordinateSystem from '../../CoordinateSystem';
-import {getStackedDimension} from '../../data/helper/dataStackHelper';
-
-import './PolarModel';
-
-/**
- * Resize method bound to the polar
- * @param {module:echarts/coord/polar/PolarModel} polarModel
- * @param {module:echarts/ExtensionAPI} api
- */
-function resizePolar(polar, polarModel, api) {
-    var center = polarModel.get('center');
-    var width = api.getWidth();
-    var height = api.getHeight();
-
-    polar.cx = parsePercent(center[0], width);
-    polar.cy = parsePercent(center[1], height);
-
-    var radiusAxis = polar.getRadiusAxis();
-    var size = Math.min(width, height) / 2;
-
-    var radius = polarModel.get('radius');
-    if (radius == null) {
-        radius = [0, '100%'];
-    }
-    else if (!zrUtil.isArray(radius)) {
-        // r0 = 0
-        radius = [0, radius];
-    }
-    radius = [
-        parsePercent(radius[0], size),
-        parsePercent(radius[1], size)
-    ];
-
-    radiusAxis.inverse
-        ? radiusAxis.setExtent(radius[1], radius[0])
-        : radiusAxis.setExtent(radius[0], radius[1]);
-}
-
-/**
- * Update polar
- */
-function updatePolarScale(ecModel, api) {
-    var polar = this;
-    var angleAxis = polar.getAngleAxis();
-    var radiusAxis = polar.getRadiusAxis();
-    // Reset scale
-    angleAxis.scale.setExtent(Infinity, -Infinity);
-    radiusAxis.scale.setExtent(Infinity, -Infinity);
-
-    ecModel.eachSeries(function (seriesModel) {
-        if (seriesModel.coordinateSystem === polar) {
-            var data = seriesModel.getData();
-            zrUtil.each(data.mapDimension('radius', true), function (dim) {
-                radiusAxis.scale.unionExtentFromData(
-                    data, getStackedDimension(data, dim)
-                );
-            });
-            zrUtil.each(data.mapDimension('angle', true), function (dim) {
-                angleAxis.scale.unionExtentFromData(
-                    data, getStackedDimension(data, dim)
-                );
-            });
-        }
-    });
-
-    niceScaleExtent(angleAxis.scale, angleAxis.model);
-    niceScaleExtent(radiusAxis.scale, radiusAxis.model);
-
-    // Fix extent of category angle axis
-    if (angleAxis.type === 'category' && !angleAxis.onBand) {
-        var extent = angleAxis.getExtent();
-        var diff = 360 / angleAxis.scale.count();
-        angleAxis.inverse ? (extent[1] += diff) : (extent[1] -= diff);
-        angleAxis.setExtent(extent[0], extent[1]);
-    }
-}
-
-/**
- * Set common axis properties
- * @param {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}
- * @param {module:echarts/coord/polar/AxisModel}
- * @inner
- */
-function setAxis(axis, axisModel) {
-    axis.type = axisModel.get('type');
-    axis.scale = createScaleByModel(axisModel);
-    axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category';
-    axis.inverse = axisModel.get('inverse');
-
-    if (axisModel.mainType === 'angleAxis') {
-        axis.inverse ^= axisModel.get('clockwise');
-        var startAngle = axisModel.get('startAngle');
-        axis.setExtent(startAngle, startAngle + (axis.inverse ? -360 : 360));
-    }
-
-    // Inject axis instance
-    axisModel.axis = axis;
-    axis.model = axisModel;
-}
-
-
-var polarCreator = {
-
-    dimensions: Polar.prototype.dimensions,
-
-    create: function (ecModel, api) {
-        var polarList = [];
-        ecModel.eachComponent('polar', function (polarModel, idx) {
-            var polar = new Polar(idx);
-            // Inject resize and update method
-            polar.update = updatePolarScale;
-
-            var radiusAxis = polar.getRadiusAxis();
-            var angleAxis = polar.getAngleAxis();
-
-            var radiusAxisModel = polarModel.findAxisModel('radiusAxis');
-            var angleAxisModel = polarModel.findAxisModel('angleAxis');
-
-            setAxis(radiusAxis, radiusAxisModel);
-            setAxis(angleAxis, angleAxisModel);
-
-            resizePolar(polar, polarModel, api);
-
-            polarList.push(polar);
-
-            polarModel.coordinateSystem = polar;
-            polar.model = polarModel;
-        });
-        // Inject coordinateSystem to series
-        ecModel.eachSeries(function (seriesModel) {
-            if (seriesModel.get('coordinateSystem') === 'polar') {
-                var polarModel = ecModel.queryComponents({
-                    mainType: 'polar',
-                    index: seriesModel.get('polarIndex'),
-                    id: seriesModel.get('polarId')
-                })[0];
-
-                if (__DEV__) {
-                    if (!polarModel) {
-                        throw new Error(
-                            'Polar "' + zrUtil.retrieve(
-                                seriesModel.get('polarIndex'),
-                                seriesModel.get('polarId'),
-                                0
-                            ) + '" not found'
-                        );
-                    }
-                }
-                seriesModel.coordinateSystem = polarModel.coordinateSystem;
-            }
-        });
-
-        return polarList;
-    }
-};
-
-CoordinateSystem.register('polar', polarCreator);

+ 0 - 68
admin/node_modules/echarts/src/coord/polar/prepareCustom.js

@@ -1,68 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-function dataToCoordSize(dataSize, dataItem) {
-    // dataItem is necessary in log axis.
-    return zrUtil.map(['Radius', 'Angle'], function (dim, dimIdx) {
-        var axis = this['get' + dim + 'Axis']();
-        var val = dataItem[dimIdx];
-        var halfSize = dataSize[dimIdx] / 2;
-        var method = 'dataTo' + dim;
-
-        var result = axis.type === 'category'
-            ? axis.getBandWidth()
-            : Math.abs(axis[method](val - halfSize) - axis[method](val + halfSize));
-
-        if (dim === 'Angle') {
-            result = result * Math.PI / 180;
-        }
-
-        return result;
-
-    }, this);
-}
-
-export default function (coordSys) {
-    var radiusAxis = coordSys.getRadiusAxis();
-    var angleAxis = coordSys.getAngleAxis();
-    var radius = radiusAxis.getExtent();
-    radius[0] > radius[1] && radius.reverse();
-
-    return {
-        coordSys: {
-            type: 'polar',
-            cx: coordSys.cx,
-            cy: coordSys.cy,
-            r: radius[1],
-            r0: radius[0]
-        },
-        api: {
-            coord: zrUtil.bind(function (data) {
-                var radius = radiusAxis.dataToRadius(data[0]);
-                var angle = angleAxis.dataToAngle(data[1]);
-                var coord = coordSys.coordToPoint([radius, angle]);
-                coord.push(radius, angle * Math.PI / 180);
-                return coord;
-            }),
-            size: zrUtil.bind(dataToCoordSize, coordSys)
-        }
-    };
-}

+ 0 - 51
admin/node_modules/echarts/src/coord/radar/IndicatorAxis.js

@@ -1,51 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import Axis from '../Axis';
-
-function IndicatorAxis(dim, scale, radiusExtent) {
-    Axis.call(this, dim, scale, radiusExtent);
-
-    /**
-     * Axis type
-     *  - 'category'
-     *  - 'value'
-     *  - 'time'
-     *  - 'log'
-     * @type {string}
-     */
-    this.type = 'value';
-
-    this.angle = 0;
-
-    /**
-     * Indicator name
-     * @type {string}
-     */
-    this.name = '';
-    /**
-     * @type {module:echarts/model/Model}
-     */
-    this.model;
-}
-
-zrUtil.inherits(IndicatorAxis, Axis);
-
-export default IndicatorAxis;

+ 0 - 267
admin/node_modules/echarts/src/coord/radar/Radar.js

@@ -1,267 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// TODO clockwise
-
-import * as zrUtil from 'zrender/src/core/util';
-import IndicatorAxis from './IndicatorAxis';
-import IntervalScale from '../../scale/Interval';
-import * as numberUtil from '../../util/number';
-import {
-    getScaleExtent,
-    niceScaleExtent
-} from '../axisHelper';
-import CoordinateSystem from '../../CoordinateSystem';
-import LogScale from '../../scale/Log';
-
-function Radar(radarModel, ecModel, api) {
-
-    this._model = radarModel;
-    /**
-     * Radar dimensions
-     * @type {Array.<string>}
-     */
-    this.dimensions = [];
-
-    this._indicatorAxes = zrUtil.map(radarModel.getIndicatorModels(), function (indicatorModel, idx) {
-        var dim = 'indicator_' + idx;
-        var indicatorAxis = new IndicatorAxis(dim,
-            (indicatorModel.get('axisType') === 'log') ? new LogScale() : new IntervalScale());
-        indicatorAxis.name = indicatorModel.get('name');
-        // Inject model and axis
-        indicatorAxis.model = indicatorModel;
-        indicatorModel.axis = indicatorAxis;
-        this.dimensions.push(dim);
-        return indicatorAxis;
-    }, this);
-
-    this.resize(radarModel, api);
-
-    /**
-     * @type {number}
-     * @readOnly
-     */
-    this.cx;
-    /**
-     * @type {number}
-     * @readOnly
-     */
-    this.cy;
-    /**
-     * @type {number}
-     * @readOnly
-     */
-    this.r;
-    /**
-     * @type {number}
-     * @readOnly
-     */
-    this.r0;
-    /**
-     * @type {number}
-     * @readOnly
-     */
-    this.startAngle;
-}
-
-Radar.prototype.getIndicatorAxes = function () {
-    return this._indicatorAxes;
-};
-
-Radar.prototype.dataToPoint = function (value, indicatorIndex) {
-    var indicatorAxis = this._indicatorAxes[indicatorIndex];
-
-    return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex);
-};
-
-Radar.prototype.coordToPoint = function (coord, indicatorIndex) {
-    var indicatorAxis = this._indicatorAxes[indicatorIndex];
-    var angle = indicatorAxis.angle;
-    var x = this.cx + coord * Math.cos(angle);
-    var y = this.cy - coord * Math.sin(angle);
-    return [x, y];
-};
-
-Radar.prototype.pointToData = function (pt) {
-    var dx = pt[0] - this.cx;
-    var dy = pt[1] - this.cy;
-    var radius = Math.sqrt(dx * dx + dy * dy);
-    dx /= radius;
-    dy /= radius;
-
-    var radian = Math.atan2(-dy, dx);
-
-    // Find the closest angle
-    // FIXME index can calculated directly
-    var minRadianDiff = Infinity;
-    var closestAxis;
-    var closestAxisIdx = -1;
-    for (var i = 0; i < this._indicatorAxes.length; i++) {
-        var indicatorAxis = this._indicatorAxes[i];
-        var diff = Math.abs(radian - indicatorAxis.angle);
-        if (diff < minRadianDiff) {
-            closestAxis = indicatorAxis;
-            closestAxisIdx = i;
-            minRadianDiff = diff;
-        }
-    }
-
-    return [closestAxisIdx, +(closestAxis && closestAxis.coordToData(radius))];
-};
-
-Radar.prototype.resize = function (radarModel, api) {
-    var center = radarModel.get('center');
-    var viewWidth = api.getWidth();
-    var viewHeight = api.getHeight();
-    var viewSize = Math.min(viewWidth, viewHeight) / 2;
-    this.cx = numberUtil.parsePercent(center[0], viewWidth);
-    this.cy = numberUtil.parsePercent(center[1], viewHeight);
-
-    this.startAngle = radarModel.get('startAngle') * Math.PI / 180;
-
-    // radius may be single value like `20`, `'80%'`, or array like `[10, '80%']`
-    var radius = radarModel.get('radius');
-    if (typeof radius === 'string' || typeof radius === 'number') {
-        radius = [0, radius];
-    }
-    this.r0 = numberUtil.parsePercent(radius[0], viewSize);
-    this.r = numberUtil.parsePercent(radius[1], viewSize);
-
-    zrUtil.each(this._indicatorAxes, function (indicatorAxis, idx) {
-        indicatorAxis.setExtent(this.r0, this.r);
-        var angle = (this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length);
-        // Normalize to [-PI, PI]
-        angle = Math.atan2(Math.sin(angle), Math.cos(angle));
-        indicatorAxis.angle = angle;
-    }, this);
-};
-
-Radar.prototype.update = function (ecModel, api) {
-    var indicatorAxes = this._indicatorAxes;
-    var radarModel = this._model;
-    zrUtil.each(indicatorAxes, function (indicatorAxis) {
-        indicatorAxis.scale.setExtent(Infinity, -Infinity);
-    });
-    ecModel.eachSeriesByType('radar', function (radarSeries, idx) {
-        if (radarSeries.get('coordinateSystem') !== 'radar'
-            || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel
-        ) {
-            return;
-        }
-        var data = radarSeries.getData();
-        zrUtil.each(indicatorAxes, function (indicatorAxis) {
-            indicatorAxis.scale.unionExtentFromData(data, data.mapDimension(indicatorAxis.dim));
-        });
-    }, this);
-
-    var splitNumber = radarModel.get('splitNumber');
-
-    function increaseInterval(interval) {
-        var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10));
-        // Increase interval
-        var f = interval / exp10;
-        if (f === 2) {
-            f = 5;
-        }
-        else { // f is 2 or 5
-            f *= 2;
-        }
-        return f * exp10;
-    }
-    // Force all the axis fixing the maxSplitNumber.
-    zrUtil.each(indicatorAxes, function (indicatorAxis, idx) {
-        var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model).extent;
-        niceScaleExtent(indicatorAxis.scale, indicatorAxis.model);
-
-        var axisModel = indicatorAxis.model;
-        var scale = indicatorAxis.scale;
-        var fixedMin = axisModel.getMin();
-        var fixedMax = axisModel.getMax();
-        var interval = scale.getInterval();
-
-
-        if (fixedMin != null && fixedMax != null) {
-            // User set min, max, divide to get new interval
-            scale.setExtent(+fixedMin, +fixedMax);
-            scale.setInterval(
-                (fixedMax - fixedMin) / splitNumber
-            );
-        }
-        else if (fixedMin != null) {
-            var max;
-            // User set min, expand extent on the other side
-            do {
-                max = fixedMin + interval * splitNumber;
-                scale.setExtent(+fixedMin, max);
-                // Interval must been set after extent
-                // FIXME
-                scale.setInterval(interval);
-
-                interval = increaseInterval(interval);
-            } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1]));
-        }
-        else if (fixedMax != null) {
-            var min;
-            // User set min, expand extent on the other side
-            do {
-                min = fixedMax - interval * splitNumber;
-                scale.setExtent(min, +fixedMax);
-                scale.setInterval(interval);
-                interval = increaseInterval(interval);
-            } while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0]));
-        }
-        else {
-            var nicedSplitNumber = scale.getTicks().length - 1;
-            if (nicedSplitNumber > splitNumber) {
-                interval = increaseInterval(interval);
-            }
-            // TODO
-            var max = Math.ceil(rawExtent[1] / interval) * interval;
-            var min = numberUtil.round(max - interval * splitNumber);
-            scale.setExtent(min, max);
-            scale.setInterval(interval);
-        }
-    });
-};
-
-/**
- * Radar dimensions is based on the data
- * @type {Array}
- */
-Radar.dimensions = [];
-
-Radar.create = function (ecModel, api) {
-    var radarList = [];
-    ecModel.eachComponent('radar', function (radarModel) {
-        var radar = new Radar(radarModel, ecModel, api);
-        radarList.push(radar);
-        radarModel.coordinateSystem = radar;
-    });
-    ecModel.eachSeriesByType('radar', function (radarSeries) {
-        if (radarSeries.get('coordinateSystem') === 'radar') {
-            // Inject coordinate system
-            radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0];
-        }
-    });
-    return radarList;
-};
-
-CoordinateSystem.register('radar', Radar);
-
-export default Radar;

+ 0 - 158
admin/node_modules/echarts/src/coord/radar/RadarModel.js

@@ -1,158 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as echarts from '../../echarts';
-import * as zrUtil from 'zrender/src/core/util';
-import axisDefault from '../axisDefault';
-import Model from '../../model/Model';
-import axisModelCommonMixin from '../axisModelCommonMixin';
-
-var valueAxisDefault = axisDefault.valueAxis;
-
-function defaultsShow(opt, show) {
-    return zrUtil.defaults({
-        show: show
-    }, opt);
-}
-
-var RadarModel = echarts.extendComponentModel({
-
-    type: 'radar',
-
-    optionUpdated: function () {
-        var boundaryGap = this.get('boundaryGap');
-        var splitNumber = this.get('splitNumber');
-        var scale = this.get('scale');
-        var axisLine = this.get('axisLine');
-        var axisTick = this.get('axisTick');
-        var axisType = this.get('axisType');
-        var axisLabel = this.get('axisLabel');
-        var nameTextStyle = this.get('name');
-        var showName = this.get('name.show');
-        var nameFormatter = this.get('name.formatter');
-        var nameGap = this.get('nameGap');
-        var triggerEvent = this.get('triggerEvent');
-
-        var indicatorModels = zrUtil.map(this.get('indicator') || [], function (indicatorOpt) {
-            // PENDING
-            if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) {
-                indicatorOpt.min = 0;
-            }
-            else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) {
-                indicatorOpt.max = 0;
-            }
-            var iNameTextStyle = nameTextStyle;
-            if (indicatorOpt.color != null) {
-                iNameTextStyle = zrUtil.defaults({color: indicatorOpt.color}, nameTextStyle);
-            }
-            // Use same configuration
-            indicatorOpt = zrUtil.merge(zrUtil.clone(indicatorOpt), {
-                boundaryGap: boundaryGap,
-                splitNumber: splitNumber,
-                scale: scale,
-                axisLine: axisLine,
-                axisTick: axisTick,
-                axisType: axisType,
-                axisLabel: axisLabel,
-                // Compatible with 2 and use text
-                name: indicatorOpt.text,
-                nameLocation: 'end',
-                nameGap: nameGap,
-                // min: 0,
-                nameTextStyle: iNameTextStyle,
-                triggerEvent: triggerEvent
-            }, false);
-            if (!showName) {
-                indicatorOpt.name = '';
-            }
-            if (typeof nameFormatter === 'string') {
-                var indName = indicatorOpt.name;
-                indicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : '');
-            }
-            else if (typeof nameFormatter === 'function') {
-                indicatorOpt.name = nameFormatter(
-                    indicatorOpt.name, indicatorOpt
-                );
-            }
-            var model = zrUtil.extend(
-                new Model(indicatorOpt, null, this.ecModel),
-                axisModelCommonMixin
-            );
-
-            // For triggerEvent.
-            model.mainType = 'radar';
-            model.componentIndex = this.componentIndex;
-
-            return model;
-        }, this);
-
-        this.getIndicatorModels = function () {
-            return indicatorModels;
-        };
-    },
-
-    defaultOption: {
-
-        zlevel: 0,
-
-        z: 0,
-
-        center: ['50%', '50%'],
-
-        radius: '75%',
-
-        startAngle: 90,
-
-        name: {
-            show: true
-            // formatter: null
-            // textStyle: {}
-        },
-
-        boundaryGap: [0, 0],
-
-        splitNumber: 5,
-
-        nameGap: 15,
-
-        scale: false,
-
-        // Polygon or circle
-        shape: 'polygon',
-
-        axisLine: zrUtil.merge(
-            {
-                lineStyle: {
-                    color: '#bbb'
-                }
-            },
-            valueAxisDefault.axisLine
-        ),
-        axisLabel: defaultsShow(valueAxisDefault.axisLabel, false),
-        axisTick: defaultsShow(valueAxisDefault.axisTick, false),
-        axisType: 'interval',
-        splitLine: defaultsShow(valueAxisDefault.splitLine, true),
-        splitArea: defaultsShow(valueAxisDefault.splitArea, true),
-
-        // {text, min, max}
-        indicator: []
-    }
-});
-
-export default RadarModel;

+ 0 - 108
admin/node_modules/echarts/src/coord/single/AxisModel.js

@@ -1,108 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import ComponentModel from '../../model/Component';
-import axisModelCreator from '../axisModelCreator';
-import axisModelCommonMixin from '../axisModelCommonMixin';
-
-var AxisModel = ComponentModel.extend({
-
-    type: 'singleAxis',
-
-    layoutMode: 'box',
-
-    /**
-     * @type {module:echarts/coord/single/SingleAxis}
-     */
-    axis: null,
-
-    /**
-     * @type {module:echarts/coord/single/Single}
-     */
-    coordinateSystem: null,
-
-    /**
-     * @override
-     */
-    getCoordSysModel: function () {
-        return this;
-    }
-
-});
-
-var defaultOption = {
-
-    left: '5%',
-    top: '5%',
-    right: '5%',
-    bottom: '5%',
-
-    type: 'value',
-
-    position: 'bottom',
-
-    orient: 'horizontal',
-
-    axisLine: {
-        show: true,
-        lineStyle: {
-            width: 1,
-            type: 'solid'
-        }
-    },
-
-    // Single coordinate system and single axis is the,
-    // which is used as the parent tooltip model.
-    // same model, so we set default tooltip show as true.
-    tooltip: {
-        show: true
-    },
-
-    axisTick: {
-        show: true,
-        length: 6,
-        lineStyle: {
-            width: 1
-        }
-    },
-
-    axisLabel: {
-        show: true,
-        interval: 'auto'
-    },
-
-    splitLine: {
-        show: true,
-        lineStyle: {
-            type: 'dashed',
-            opacity: 0.2
-        }
-    }
-};
-
-function getAxisType(axisName, option) {
-    return option.type || (option.data ? 'category' : 'value');
-}
-
-zrUtil.merge(AxisModel.prototype, axisModelCommonMixin);
-
-axisModelCreator('single', AxisModel, getAxisType, defaultOption);
-
-export default AxisModel;

+ 0 - 291
admin/node_modules/echarts/src/coord/single/Single.js

@@ -1,291 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Single coordinates system.
- */
-
-import SingleAxis from './SingleAxis';
-import * as axisHelper from '../axisHelper';
-import {getLayoutRect} from '../../util/layout';
-import {each} from 'zrender/src/core/util';
-
-/**
- * Create a single coordinates system.
- *
- * @param {module:echarts/coord/single/AxisModel} axisModel
- * @param {module:echarts/model/Global} ecModel
- * @param {module:echarts/ExtensionAPI} api
- */
-function Single(axisModel, ecModel, api) {
-
-    /**
-     * @type {string}
-     * @readOnly
-     */
-    this.dimension = 'single';
-
-    /**
-     * Add it just for draw tooltip.
-     *
-     * @type {Array.<string>}
-     * @readOnly
-     */
-    this.dimensions = ['single'];
-
-    /**
-     * @private
-     * @type {module:echarts/coord/single/SingleAxis}.
-     */
-    this._axis = null;
-
-    /**
-     * @private
-     * @type {module:zrender/core/BoundingRect}
-     */
-    this._rect;
-
-    this._init(axisModel, ecModel, api);
-
-    /**
-     * @type {module:echarts/coord/single/AxisModel}
-     */
-    this.model = axisModel;
-}
-
-Single.prototype = {
-
-    type: 'singleAxis',
-
-    axisPointerEnabled: true,
-
-    constructor: Single,
-
-    /**
-     * Initialize single coordinate system.
-     *
-     * @param  {module:echarts/coord/single/AxisModel} axisModel
-     * @param  {module:echarts/model/Global} ecModel
-     * @param  {module:echarts/ExtensionAPI} api
-     * @private
-     */
-    _init: function (axisModel, ecModel, api) {
-
-        var dim = this.dimension;
-
-        var axis = new SingleAxis(
-            dim,
-            axisHelper.createScaleByModel(axisModel),
-            [0, 0],
-            axisModel.get('type'),
-            axisModel.get('position')
-        );
-
-        var isCategory = axis.type === 'category';
-        axis.onBand = isCategory && axisModel.get('boundaryGap');
-        axis.inverse = axisModel.get('inverse');
-        axis.orient = axisModel.get('orient');
-
-        axisModel.axis = axis;
-        axis.model = axisModel;
-        axis.coordinateSystem = this;
-        this._axis = axis;
-    },
-
-    /**
-     * Update axis scale after data processed
-     * @param  {module:echarts/model/Global} ecModel
-     * @param  {module:echarts/ExtensionAPI} api
-     */
-    update: function (ecModel, api) {
-        ecModel.eachSeries(function (seriesModel) {
-            if (seriesModel.coordinateSystem === this) {
-                var data = seriesModel.getData();
-                each(data.mapDimension(this.dimension, true), function (dim) {
-                    this._axis.scale.unionExtentFromData(data, dim);
-                }, this);
-                axisHelper.niceScaleExtent(this._axis.scale, this._axis.model);
-            }
-        }, this);
-    },
-
-    /**
-     * Resize the single coordinate system.
-     *
-     * @param  {module:echarts/coord/single/AxisModel} axisModel
-     * @param  {module:echarts/ExtensionAPI} api
-     */
-    resize: function (axisModel, api) {
-        this._rect = getLayoutRect(
-            {
-                left: axisModel.get('left'),
-                top: axisModel.get('top'),
-                right: axisModel.get('right'),
-                bottom: axisModel.get('bottom'),
-                width: axisModel.get('width'),
-                height: axisModel.get('height')
-            },
-            {
-                width: api.getWidth(),
-                height: api.getHeight()
-            }
-        );
-
-        this._adjustAxis();
-    },
-
-    /**
-     * @return {module:zrender/core/BoundingRect}
-     */
-    getRect: function () {
-        return this._rect;
-    },
-
-    /**
-     * @private
-     */
-    _adjustAxis: function () {
-
-        var rect = this._rect;
-        var axis = this._axis;
-
-        var isHorizontal = axis.isHorizontal();
-        var extent = isHorizontal ? [0, rect.width] : [0, rect.height];
-        var idx = axis.reverse ? 1 : 0;
-
-        axis.setExtent(extent[idx], extent[1 - idx]);
-
-        this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);
-
-    },
-
-    /**
-     * @param  {module:echarts/coord/single/SingleAxis} axis
-     * @param  {number} coordBase
-     */
-    _updateAxisTransform: function (axis, coordBase) {
-
-        var axisExtent = axis.getExtent();
-        var extentSum = axisExtent[0] + axisExtent[1];
-        var isHorizontal = axis.isHorizontal();
-
-        axis.toGlobalCoord = isHorizontal
-            ? function (coord) {
-                return coord + coordBase;
-            }
-            : function (coord) {
-                return extentSum - coord + coordBase;
-            };
-
-        axis.toLocalCoord = isHorizontal
-            ? function (coord) {
-                return coord - coordBase;
-            }
-            : function (coord) {
-                return extentSum - coord + coordBase;
-            };
-    },
-
-    /**
-     * Get axis.
-     *
-     * @return {module:echarts/coord/single/SingleAxis}
-     */
-    getAxis: function () {
-        return this._axis;
-    },
-
-    /**
-     * Get axis, add it just for draw tooltip.
-     *
-     * @return {[type]} [description]
-     */
-    getBaseAxis: function () {
-        return this._axis;
-    },
-
-    /**
-     * @return {Array.<module:echarts/coord/Axis>}
-     */
-    getAxes: function () {
-        return [this._axis];
-    },
-
-    /**
-     * @return {Object} {baseAxes: [], otherAxes: []}
-     */
-    getTooltipAxes: function () {
-        return {baseAxes: [this.getAxis()]};
-    },
-
-    /**
-     * If contain point.
-     *
-     * @param  {Array.<number>} point
-     * @return {boolean}
-     */
-    containPoint: function (point) {
-        var rect = this.getRect();
-        var axis = this.getAxis();
-        var orient = axis.orient;
-        if (orient === 'horizontal') {
-            return axis.contain(axis.toLocalCoord(point[0]))
-            && (point[1] >= rect.y && point[1] <= (rect.y + rect.height));
-        }
-        else {
-            return axis.contain(axis.toLocalCoord(point[1]))
-            && (point[0] >= rect.y && point[0] <= (rect.y + rect.height));
-        }
-    },
-
-    /**
-     * @param {Array.<number>} point
-     * @return {Array.<number>}
-     */
-    pointToData: function (point) {
-        var axis = this.getAxis();
-        return [axis.coordToData(axis.toLocalCoord(
-            point[axis.orient === 'horizontal' ? 0 : 1]
-        ))];
-    },
-
-    /**
-     * Convert the series data to concrete point.
-     *
-     * @param  {number|Array.<number>} val
-     * @return {Array.<number>}
-     */
-    dataToPoint: function (val) {
-        var axis = this.getAxis();
-        var rect = this.getRect();
-        var pt = [];
-        var idx = axis.orient === 'horizontal' ? 0 : 1;
-
-        if (val instanceof Array) {
-            val = val[0];
-        }
-
-        pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));
-        pt[1 - idx] = idx === 0 ? (rect.y + rect.height / 2) : (rect.x + rect.width / 2);
-        return pt;
-    }
-
-};
-
-export default Single;

+ 0 - 112
admin/node_modules/echarts/src/coord/single/SingleAxis.js

@@ -1,112 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import Axis from '../Axis';
-
-/**
- * @constructor  module:echarts/coord/single/SingleAxis
- * @extends {module:echarts/coord/Axis}
- * @param {string} dim
- * @param {*} scale
- * @param {Array.<number>} coordExtent
- * @param {string} axisType
- * @param {string} position
- */
-var SingleAxis = function (dim, scale, coordExtent, axisType, position) {
-
-    Axis.call(this, dim, scale, coordExtent);
-
-    /**
-     * Axis type
-     * - 'category'
-     * - 'value'
-     * - 'time'
-     * - 'log'
-     * @type {string}
-     */
-    this.type = axisType || 'value';
-
-    /**
-     * Axis position
-     *  - 'top'
-     *  - 'bottom'
-     *  - 'left'
-     *  - 'right'
-     *  @type {string}
-     */
-    this.position = position || 'bottom';
-
-    /**
-     * Axis orient
-     *  - 'horizontal'
-     *  - 'vertical'
-     * @type {[type]}
-     */
-    this.orient = null;
-
-};
-
-SingleAxis.prototype = {
-
-    constructor: SingleAxis,
-
-    /**
-     * Axis model
-     * @type {module:echarts/coord/single/AxisModel}
-     */
-    model: null,
-
-    /**
-     * Judge the orient of the axis.
-     * @return {boolean}
-     */
-    isHorizontal: function () {
-        var position = this.position;
-        return position === 'top' || position === 'bottom';
-
-    },
-
-    /**
-     * @override
-     */
-    pointToData: function (point, clamp) {
-        return this.coordinateSystem.pointToData(point, clamp)[0];
-    },
-
-    /**
-     * Convert the local coord(processed by dataToCoord())
-     * to global coord(concrete pixel coord).
-     * designated by module:echarts/coord/single/Single.
-     * @type {Function}
-     */
-    toGlobalCoord: null,
-
-    /**
-     * Convert the global coord to local coord.
-     * designated by module:echarts/coord/single/Single.
-     * @type {Function}
-     */
-    toLocalCoord: null
-
-};
-
-zrUtil.inherits(SingleAxis, Axis);
-
-export default SingleAxis;

+ 0 - 51
admin/node_modules/echarts/src/coord/single/prepareCustom.js

@@ -1,51 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-function dataToCoordSize(dataSize, dataItem) {
-    // dataItem is necessary in log axis.
-    var axis = this.getAxis();
-    var val = dataItem instanceof Array ? dataItem[0] : dataItem;
-    var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2;
-    return axis.type === 'category'
-        ? axis.getBandWidth()
-        : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));
-}
-
-export default function (coordSys) {
-    var rect = coordSys.getRect();
-
-    return {
-        coordSys: {
-            type: 'singleAxis',
-            x: rect.x,
-            y: rect.y,
-            width: rect.width,
-            height: rect.height
-        },
-        api: {
-            coord: function (val) {
-                // do not provide "out" param
-                return coordSys.dataToPoint(val);
-            },
-            size: zrUtil.bind(dataToCoordSize, coordSys)
-        }
-    };
-}

+ 0 - 78
admin/node_modules/echarts/src/coord/single/singleAxisHelper.js

@@ -1,78 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-/**
- * @param {Object} opt {labelInside}
- * @return {Object} {
- *  position, rotation, labelDirection, labelOffset,
- *  tickDirection, labelRotate, z2
- * }
- */
-export function layout(axisModel, opt) {
-    opt = opt || {};
-    var single = axisModel.coordinateSystem;
-    var axis = axisModel.axis;
-    var layout = {};
-
-    var axisPosition = axis.position;
-    var orient = axis.orient;
-
-    var rect = single.getRect();
-    var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];
-
-    var positionMap = {
-        horizontal: {top: rectBound[2], bottom: rectBound[3]},
-        vertical: {left: rectBound[0], right: rectBound[1]}
-    };
-
-    layout.position = [
-        orient === 'vertical'
-            ? positionMap.vertical[axisPosition]
-            : rectBound[0],
-        orient === 'horizontal'
-            ? positionMap.horizontal[axisPosition]
-            : rectBound[3]
-    ];
-
-    var r = {horizontal: 0, vertical: 1};
-    layout.rotation = Math.PI / 2 * r[orient];
-
-    var directionMap = {top: -1, bottom: 1, right: 1, left: -1};
-
-    layout.labelDirection = layout.tickDirection =
-        layout.nameDirection = directionMap[axisPosition];
-
-    if (axisModel.get('axisTick.inside')) {
-        layout.tickDirection = -layout.tickDirection;
-    }
-
-    if (zrUtil.retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {
-        layout.labelDirection = -layout.labelDirection;
-    }
-
-    var labelRotation = opt.rotate;
-    labelRotation == null && (labelRotation = axisModel.get('axisLabel.rotate'));
-    layout.labelRotation = axisPosition === 'top' ? -labelRotation : labelRotation;
-
-    layout.z2 = 1;
-
-    return layout;
-}

+ 0 - 64
admin/node_modules/echarts/src/coord/single/singleCreator.js

@@ -1,64 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Single coordinate system creator.
- */
-
-import Single from './Single';
-import CoordinateSystem from '../../CoordinateSystem';
-
-/**
- * Create single coordinate system and inject it into seriesModel.
- *
- * @param {module:echarts/model/Global} ecModel
- * @param {module:echarts/ExtensionAPI} api
- * @return {Array.<module:echarts/coord/single/Single>}
- */
-function create(ecModel, api) {
-    var singles = [];
-
-    ecModel.eachComponent('singleAxis', function (axisModel, idx) {
-
-        var single = new Single(axisModel, ecModel, api);
-        single.name = 'single_' + idx;
-        single.resize(axisModel, api);
-        axisModel.coordinateSystem = single;
-        singles.push(single);
-
-    });
-
-    ecModel.eachSeries(function (seriesModel) {
-        if (seriesModel.get('coordinateSystem') === 'singleAxis') {
-            var singleAxisModel = ecModel.queryComponents({
-                mainType: 'singleAxis',
-                index: seriesModel.get('singleAxisIndex'),
-                id: seriesModel.get('singleAxisId')
-            })[0];
-            seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem;
-        }
-    });
-
-    return singles;
-}
-
-CoordinateSystem.register('single', {
-    create: create,
-    dimensions: Single.prototype.dimensions
-});

+ 0 - 145
admin/node_modules/echarts/src/data/DataDiffer.js

@@ -1,145 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-
-function defaultKeyGetter(item) {
-    return item;
-}
-
-/**
- * @param {Array} oldArr
- * @param {Array} newArr
- * @param {Function} oldKeyGetter
- * @param {Function} newKeyGetter
- * @param {Object} [context] Can be visited by this.context in callback.
- */
-function DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context) {
-    this._old = oldArr;
-    this._new = newArr;
-
-    this._oldKeyGetter = oldKeyGetter || defaultKeyGetter;
-    this._newKeyGetter = newKeyGetter || defaultKeyGetter;
-
-    this.context = context;
-}
-
-DataDiffer.prototype = {
-
-    constructor: DataDiffer,
-
-    /**
-     * Callback function when add a data
-     */
-    add: function (func) {
-        this._add = func;
-        return this;
-    },
-
-    /**
-     * Callback function when update a data
-     */
-    update: function (func) {
-        this._update = func;
-        return this;
-    },
-
-    /**
-     * Callback function when remove a data
-     */
-    remove: function (func) {
-        this._remove = func;
-        return this;
-    },
-
-    execute: function () {
-        var oldArr = this._old;
-        var newArr = this._new;
-
-        var oldDataIndexMap = {};
-        var newDataIndexMap = {};
-        var oldDataKeyArr = [];
-        var newDataKeyArr = [];
-        var i;
-
-        initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter', this);
-        initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter', this);
-
-        for (i = 0; i < oldArr.length; i++) {
-            var key = oldDataKeyArr[i];
-            var idx = newDataIndexMap[key];
-
-            // idx can never be empty array here. see 'set null' logic below.
-            if (idx != null) {
-                // Consider there is duplicate key (for example, use dataItem.name as key).
-                // We should make sure every item in newArr and oldArr can be visited.
-                var len = idx.length;
-                if (len) {
-                    len === 1 && (newDataIndexMap[key] = null);
-                    idx = idx.shift();
-                }
-                else {
-                    newDataIndexMap[key] = null;
-                }
-                this._update && this._update(idx, i);
-            }
-            else {
-                this._remove && this._remove(i);
-            }
-        }
-
-        for (var i = 0; i < newDataKeyArr.length; i++) {
-            var key = newDataKeyArr[i];
-            if (newDataIndexMap.hasOwnProperty(key)) {
-                var idx = newDataIndexMap[key];
-                if (idx == null) {
-                    continue;
-                }
-                // idx can never be empty array here. see 'set null' logic above.
-                if (!idx.length) {
-                    this._add && this._add(idx);
-                }
-                else {
-                    for (var j = 0, len = idx.length; j < len; j++) {
-                        this._add && this._add(idx[j]);
-                    }
-                }
-            }
-        }
-    }
-};
-
-function initIndexMap(arr, map, keyArr, keyGetterName, dataDiffer) {
-    for (var i = 0; i < arr.length; i++) {
-        // Add prefix to avoid conflict with Object.prototype.
-        var key = '_ec_' + dataDiffer[keyGetterName](arr[i], i);
-        var existence = map[key];
-        if (existence == null) {
-            keyArr.push(key);
-            map[key] = i;
-        }
-        else {
-            if (!existence.length) {
-                map[key] = existence = [existence];
-            }
-            existence.push(i);
-        }
-    }
-}
-
-export default DataDiffer;

+ 0 - 135
admin/node_modules/echarts/src/data/DataDimensionInfo.js

@@ -1,135 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-
-/**
- * @class
- * @param {Object|DataDimensionInfo} [opt] All of the fields will be shallow copied.
- */
-function DataDimensionInfo(opt) {
-    if (opt != null) {
-        zrUtil.extend(this, opt);
-    }
-
-    /**
-     * Dimension name.
-     * Mandatory.
-     * @type {string}
-     */
-    // this.name;
-
-    /**
-     * The origin name in dimsDef, see source helper.
-     * If displayName given, the tooltip will displayed vertically.
-     * Optional.
-     * @type {string}
-     */
-    // this.displayName;
-
-    /**
-     * Which coordSys dimension this dimension mapped to.
-     * A `coordDim` can be a "coordSysDim" that the coordSys required
-     * (for example, an item in `coordSysDims` of `model/referHelper#CoordSysInfo`),
-     * or an generated "extra coord name" if does not mapped to any "coordSysDim"
-     * (That is determined by whether `isExtraCoord` is `true`).
-     * Mandatory.
-     * @type {string}
-     */
-    // this.coordDim;
-
-    /**
-     * The index of this dimension in `series.encode[coordDim]`.
-     * Mandatory.
-     * @type {number}
-     */
-    // this.coordDimIndex;
-
-    /**
-     * Dimension type. The enumerable values are the key of
-     * `dataCtors` of `data/List`.
-     * Optional.
-     * @type {string}
-     */
-    // this.type;
-
-    /**
-     * This index of this dimension info in `data/List#_dimensionInfos`.
-     * Mandatory after added to `data/List`.
-     * @type {number}
-     */
-    // this.index;
-
-    /**
-     * The format of `otherDims` is:
-     * ```js
-     * {
-     *     tooltip: number optional,
-     *     label: number optional,
-     *     itemName: number optional,
-     *     seriesName: number optional,
-     * }
-     * ```
-     *
-     * A `series.encode` can specified these fields:
-     * ```js
-     * encode: {
-     *     // "3, 1, 5" is the index of data dimension.
-     *     tooltip: [3, 1, 5],
-     *     label: [0, 3],
-     *     ...
-     * }
-     * ```
-     * `otherDims` is the parse result of the `series.encode` above, like:
-     * ```js
-     * // Suppose the index of this data dimension is `3`.
-     * this.otherDims = {
-     *     // `3` is at the index `0` of the `encode.tooltip`
-     *     tooltip: 0,
-     *     // `3` is at the index `1` of the `encode.tooltip`
-     *     label: 1
-     * };
-     * ```
-     *
-     * This prop should never be `null`/`undefined` after initialized.
-     * @type {Object}
-     */
-    this.otherDims = {};
-
-    /**
-     * Be `true` if this dimension is not mapped to any "coordSysDim" that the
-     * "coordSys" required.
-     * Mandatory.
-     * @type {boolean}
-     */
-    // this.isExtraCoord;
-
-    /**
-     * @type {module:data/OrdinalMeta}
-     */
-    // this.ordinalMeta;
-
-    /**
-     * Whether to create inverted indices.
-     * @type {boolean}
-     */
-    // this.createInvertedIndices;
-};
-
-export default DataDimensionInfo;

+ 0 - 536
admin/node_modules/echarts/src/data/Graph.js

@@ -1,536 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {__DEV__} from '../config';
-import * as zrUtil from 'zrender/src/core/util';
-import {enableClassCheck} from '../util/clazz';
-
-// id may be function name of Object, add a prefix to avoid this problem.
-function generateNodeKey(id) {
-    return '_EC_' + id;
-}
-/**
- * @alias module:echarts/data/Graph
- * @constructor
- * @param {boolean} directed
- */
-var Graph = function (directed) {
-    /**
-     * 是否是有向图
-     * @type {boolean}
-     * @private
-     */
-    this._directed = directed || false;
-
-    /**
-     * @type {Array.<module:echarts/data/Graph.Node>}
-     * @readOnly
-     */
-    this.nodes = [];
-
-    /**
-     * @type {Array.<module:echarts/data/Graph.Edge>}
-     * @readOnly
-     */
-    this.edges = [];
-
-    /**
-     * @type {Object.<string, module:echarts/data/Graph.Node>}
-     * @private
-     */
-    this._nodesMap = {};
-    /**
-     * @type {Object.<string, module:echarts/data/Graph.Edge>}
-     * @private
-     */
-    this._edgesMap = {};
-
-    /**
-     * @type {module:echarts/data/List}
-     * @readOnly
-     */
-    this.data;
-
-    /**
-     * @type {module:echarts/data/List}
-     * @readOnly
-     */
-    this.edgeData;
-};
-
-var graphProto = Graph.prototype;
-/**
- * @type {string}
- */
-graphProto.type = 'graph';
-
-/**
- * If is directed graph
- * @return {boolean}
- */
-graphProto.isDirected = function () {
-    return this._directed;
-};
-
-/**
- * Add a new node
- * @param {string} id
- * @param {number} [dataIndex]
- */
-graphProto.addNode = function (id, dataIndex) {
-    id = id == null ? ('' + dataIndex) : ('' + id);
-
-    var nodesMap = this._nodesMap;
-
-    if (nodesMap[generateNodeKey(id)]) {
-        if (__DEV__) {
-            console.error('Graph nodes have duplicate name or id');
-        }
-        return;
-    }
-
-    var node = new Node(id, dataIndex);
-    node.hostGraph = this;
-
-    this.nodes.push(node);
-
-    nodesMap[generateNodeKey(id)] = node;
-    return node;
-};
-
-/**
- * Get node by data index
- * @param  {number} dataIndex
- * @return {module:echarts/data/Graph~Node}
- */
-graphProto.getNodeByIndex = function (dataIndex) {
-    var rawIdx = this.data.getRawIndex(dataIndex);
-    return this.nodes[rawIdx];
-};
-/**
- * Get node by id
- * @param  {string} id
- * @return {module:echarts/data/Graph.Node}
- */
-graphProto.getNodeById = function (id) {
-    return this._nodesMap[generateNodeKey(id)];
-};
-
-/**
- * Add a new edge
- * @param {number|string|module:echarts/data/Graph.Node} n1
- * @param {number|string|module:echarts/data/Graph.Node} n2
- * @param {number} [dataIndex=-1]
- * @return {module:echarts/data/Graph.Edge}
- */
-graphProto.addEdge = function (n1, n2, dataIndex) {
-    var nodesMap = this._nodesMap;
-    var edgesMap = this._edgesMap;
-
-    // PNEDING
-    if (typeof n1 === 'number') {
-        n1 = this.nodes[n1];
-    }
-    if (typeof n2 === 'number') {
-        n2 = this.nodes[n2];
-    }
-
-    if (!Node.isInstance(n1)) {
-        n1 = nodesMap[generateNodeKey(n1)];
-    }
-    if (!Node.isInstance(n2)) {
-        n2 = nodesMap[generateNodeKey(n2)];
-    }
-    if (!n1 || !n2) {
-        return;
-    }
-
-    var key = n1.id + '-' + n2.id;
-    // PENDING
-    if (edgesMap[key]) {
-        return;
-    }
-
-    var edge = new Edge(n1, n2, dataIndex);
-    edge.hostGraph = this;
-
-    if (this._directed) {
-        n1.outEdges.push(edge);
-        n2.inEdges.push(edge);
-    }
-    n1.edges.push(edge);
-    if (n1 !== n2) {
-        n2.edges.push(edge);
-    }
-
-    this.edges.push(edge);
-    edgesMap[key] = edge;
-
-    return edge;
-};
-
-/**
- * Get edge by data index
- * @param  {number} dataIndex
- * @return {module:echarts/data/Graph~Node}
- */
-graphProto.getEdgeByIndex = function (dataIndex) {
-    var rawIdx = this.edgeData.getRawIndex(dataIndex);
-    return this.edges[rawIdx];
-};
-/**
- * Get edge by two linked nodes
- * @param  {module:echarts/data/Graph.Node|string} n1
- * @param  {module:echarts/data/Graph.Node|string} n2
- * @return {module:echarts/data/Graph.Edge}
- */
-graphProto.getEdge = function (n1, n2) {
-    if (Node.isInstance(n1)) {
-        n1 = n1.id;
-    }
-    if (Node.isInstance(n2)) {
-        n2 = n2.id;
-    }
-
-    var edgesMap = this._edgesMap;
-
-    if (this._directed) {
-        return edgesMap[n1 + '-' + n2];
-    }
-    else {
-        return edgesMap[n1 + '-' + n2]
-            || edgesMap[n2 + '-' + n1];
-    }
-};
-
-/**
- * Iterate all nodes
- * @param  {Function} cb
- * @param  {*} [context]
- */
-graphProto.eachNode = function (cb, context) {
-    var nodes = this.nodes;
-    var len = nodes.length;
-    for (var i = 0; i < len; i++) {
-        if (nodes[i].dataIndex >= 0) {
-            cb.call(context, nodes[i], i);
-        }
-    }
-};
-
-/**
- * Iterate all edges
- * @param  {Function} cb
- * @param  {*} [context]
- */
-graphProto.eachEdge = function (cb, context) {
-    var edges = this.edges;
-    var len = edges.length;
-    for (var i = 0; i < len; i++) {
-        if (edges[i].dataIndex >= 0
-            && edges[i].node1.dataIndex >= 0
-            && edges[i].node2.dataIndex >= 0
-        ) {
-            cb.call(context, edges[i], i);
-        }
-    }
-};
-
-/**
- * Breadth first traverse
- * @param {Function} cb
- * @param {module:echarts/data/Graph.Node} startNode
- * @param {string} [direction='none'] 'none'|'in'|'out'
- * @param {*} [context]
- */
-graphProto.breadthFirstTraverse = function (
-    cb, startNode, direction, context
-) {
-    if (!Node.isInstance(startNode)) {
-        startNode = this._nodesMap[generateNodeKey(startNode)];
-    }
-    if (!startNode) {
-        return;
-    }
-
-    var edgeType = direction === 'out'
-        ? 'outEdges' : (direction === 'in' ? 'inEdges' : 'edges');
-
-    for (var i = 0; i < this.nodes.length; i++) {
-        this.nodes[i].__visited = false;
-    }
-
-    if (cb.call(context, startNode, null)) {
-        return;
-    }
-
-    var queue = [startNode];
-    while (queue.length) {
-        var currentNode = queue.shift();
-        var edges = currentNode[edgeType];
-
-        for (var i = 0; i < edges.length; i++) {
-            var e = edges[i];
-            var otherNode = e.node1 === currentNode
-                ? e.node2 : e.node1;
-            if (!otherNode.__visited) {
-                if (cb.call(context, otherNode, currentNode)) {
-                    // Stop traversing
-                    return;
-                }
-                queue.push(otherNode);
-                otherNode.__visited = true;
-            }
-        }
-    }
-};
-
-// TODO
-// graphProto.depthFirstTraverse = function (
-//     cb, startNode, direction, context
-// ) {
-
-// };
-
-// Filter update
-graphProto.update = function () {
-    var data = this.data;
-    var edgeData = this.edgeData;
-    var nodes = this.nodes;
-    var edges = this.edges;
-
-    for (var i = 0, len = nodes.length; i < len; i++) {
-        nodes[i].dataIndex = -1;
-    }
-    for (var i = 0, len = data.count(); i < len; i++) {
-        nodes[data.getRawIndex(i)].dataIndex = i;
-    }
-
-    edgeData.filterSelf(function (idx) {
-        var edge = edges[edgeData.getRawIndex(idx)];
-        return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0;
-    });
-
-    // Update edge
-    for (var i = 0, len = edges.length; i < len; i++) {
-        edges[i].dataIndex = -1;
-    }
-    for (var i = 0, len = edgeData.count(); i < len; i++) {
-        edges[edgeData.getRawIndex(i)].dataIndex = i;
-    }
-};
-
-/**
- * @return {module:echarts/data/Graph}
- */
-graphProto.clone = function () {
-    var graph = new Graph(this._directed);
-    var nodes = this.nodes;
-    var edges = this.edges;
-    for (var i = 0; i < nodes.length; i++) {
-        graph.addNode(nodes[i].id, nodes[i].dataIndex);
-    }
-    for (var i = 0; i < edges.length; i++) {
-        var e = edges[i];
-        graph.addEdge(e.node1.id, e.node2.id, e.dataIndex);
-    }
-    return graph;
-};
-
-
-/**
- * @alias module:echarts/data/Graph.Node
- */
-function Node(id, dataIndex) {
-    /**
-    * @type {string}
-    */
-    this.id = id == null ? '' : id;
-
-    /**
-    * @type {Array.<module:echarts/data/Graph.Edge>}
-    */
-    this.inEdges = [];
-    /**
-    * @type {Array.<module:echarts/data/Graph.Edge>}
-    */
-    this.outEdges = [];
-    /**
-    * @type {Array.<module:echarts/data/Graph.Edge>}
-    */
-    this.edges = [];
-    /**
-     * @type {module:echarts/data/Graph}
-     */
-    this.hostGraph;
-
-    /**
-     * @type {number}
-     */
-    this.dataIndex = dataIndex == null ? -1 : dataIndex;
-}
-
-Node.prototype = {
-
-    constructor: Node,
-
-    /**
-     * @return {number}
-     */
-    degree: function () {
-        return this.edges.length;
-    },
-
-    /**
-     * @return {number}
-     */
-    inDegree: function () {
-        return this.inEdges.length;
-    },
-
-    /**
-    * @return {number}
-    */
-    outDegree: function () {
-        return this.outEdges.length;
-    },
-
-    /**
-     * @param {string} [path]
-     * @return {module:echarts/model/Model}
-     */
-    getModel: function (path) {
-        if (this.dataIndex < 0) {
-            return;
-        }
-        var graph = this.hostGraph;
-        var itemModel = graph.data.getItemModel(this.dataIndex);
-
-        return itemModel.getModel(path);
-    }
-};
-
-/**
- * 图边
- * @alias module:echarts/data/Graph.Edge
- * @param {module:echarts/data/Graph.Node} n1
- * @param {module:echarts/data/Graph.Node} n2
- * @param {number} [dataIndex=-1]
- */
-function Edge(n1, n2, dataIndex) {
-
-    /**
-     * 节点1,如果是有向图则为源节点
-     * @type {module:echarts/data/Graph.Node}
-     */
-    this.node1 = n1;
-
-    /**
-     * 节点2,如果是有向图则为目标节点
-     * @type {module:echarts/data/Graph.Node}
-     */
-    this.node2 = n2;
-
-    this.dataIndex = dataIndex == null ? -1 : dataIndex;
-}
-
-/**
- * @param {string} [path]
- * @return {module:echarts/model/Model}
- */
-Edge.prototype.getModel = function (path) {
-    if (this.dataIndex < 0) {
-        return;
-    }
-    var graph = this.hostGraph;
-    var itemModel = graph.edgeData.getItemModel(this.dataIndex);
-
-    return itemModel.getModel(path);
-};
-
-var createGraphDataProxyMixin = function (hostName, dataName) {
-    return {
-        /**
-         * @param {string=} [dimension='value'] Default 'value'. can be 'a', 'b', 'c', 'd', 'e'.
-         * @return {number}
-         */
-        getValue: function (dimension) {
-            var data = this[hostName][dataName];
-            return data.get(data.getDimension(dimension || 'value'), this.dataIndex);
-        },
-
-        /**
-         * @param {Object|string} key
-         * @param {*} [value]
-         */
-        setVisual: function (key, value) {
-            this.dataIndex >= 0
-                && this[hostName][dataName].setItemVisual(this.dataIndex, key, value);
-        },
-
-        /**
-         * @param {string} key
-         * @return {boolean}
-         */
-        getVisual: function (key, ignoreParent) {
-            return this[hostName][dataName].getItemVisual(this.dataIndex, key, ignoreParent);
-        },
-
-        /**
-         * @param {Object} layout
-         * @return {boolean} [merge=false]
-         */
-        setLayout: function (layout, merge) {
-            this.dataIndex >= 0
-                && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge);
-        },
-
-        /**
-         * @return {Object}
-         */
-        getLayout: function () {
-            return this[hostName][dataName].getItemLayout(this.dataIndex);
-        },
-
-        /**
-         * @return {module:zrender/Element}
-         */
-        getGraphicEl: function () {
-            return this[hostName][dataName].getItemGraphicEl(this.dataIndex);
-        },
-
-        /**
-         * @return {number}
-         */
-        getRawIndex: function () {
-            return this[hostName][dataName].getRawIndex(this.dataIndex);
-        }
-    };
-};
-
-zrUtil.mixin(Node, createGraphDataProxyMixin('hostGraph', 'data'));
-zrUtil.mixin(Edge, createGraphDataProxyMixin('hostGraph', 'edgeData'));
-
-Graph.Node = Node;
-Graph.Edge = Edge;
-
-enableClassCheck(Node);
-enableClassCheck(Edge);
-
-export default Graph;

+ 0 - 2038
admin/node_modules/echarts/src/data/List.js

@@ -1,2038 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/* global Float64Array, Int32Array, Uint32Array, Uint16Array */
-
-/**
- * List for data storage
- * @module echarts/data/List
- */
-
-import {__DEV__} from '../config';
-import * as zrUtil from 'zrender/src/core/util';
-import Model from '../model/Model';
-import DataDiffer from './DataDiffer';
-import Source from './Source';
-import {defaultDimValueGetters, DefaultDataProvider} from './helper/dataProvider';
-import {summarizeDimensions} from './helper/dimensionHelper';
-import DataDimensionInfo from './DataDimensionInfo';
-
-var isObject = zrUtil.isObject;
-
-var UNDEFINED = 'undefined';
-var INDEX_NOT_FOUND = -1;
-
-// Use prefix to avoid index to be the same as otherIdList[idx],
-// which will cause weird udpate animation.
-var ID_PREFIX = 'e\0\0';
-
-var dataCtors = {
-    'float': typeof Float64Array === UNDEFINED
-        ? Array : Float64Array,
-    'int': typeof Int32Array === UNDEFINED
-        ? Array : Int32Array,
-    // Ordinal data type can be string or int
-    'ordinal': Array,
-    'number': Array,
-    'time': Array
-};
-
-// Caution: MUST not use `new CtorUint32Array(arr, 0, len)`, because the Ctor of array is
-// different from the Ctor of typed array.
-var CtorUint32Array = typeof Uint32Array === UNDEFINED ? Array : Uint32Array;
-var CtorInt32Array = typeof Int32Array === UNDEFINED ? Array : Int32Array;
-var CtorUint16Array = typeof Uint16Array === UNDEFINED ? Array : Uint16Array;
-
-function getIndicesCtor(list) {
-    // The possible max value in this._indicies is always this._rawCount despite of filtering.
-    return list._rawCount > 65535 ? CtorUint32Array : CtorUint16Array;
-}
-
-function cloneChunk(originalChunk) {
-    var Ctor = originalChunk.constructor;
-    // Only shallow clone is enough when Array.
-    return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk);
-}
-
-var TRANSFERABLE_PROPERTIES = [
-    'hasItemOption', '_nameList', '_idList', '_invertedIndicesMap',
-    '_rawData', '_chunkSize', '_chunkCount', '_dimValueGetter',
-    '_count', '_rawCount', '_nameDimIdx', '_idDimIdx'
-];
-var CLONE_PROPERTIES = [
-    '_extent', '_approximateExtent', '_rawExtent'
-];
-
-function transferProperties(target, source) {
-    zrUtil.each(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function (propName) {
-        if (source.hasOwnProperty(propName)) {
-            target[propName] = source[propName];
-        }
-    });
-
-    target.__wrappedMethods = source.__wrappedMethods;
-
-    zrUtil.each(CLONE_PROPERTIES, function (propName) {
-        target[propName] = zrUtil.clone(source[propName]);
-    });
-
-    target._calculationInfo = zrUtil.extend(source._calculationInfo);
-}
-
-
-
-
-
-/**
- * @constructor
- * @alias module:echarts/data/List
- *
- * @param {Array.<string|Object|module:data/DataDimensionInfo>} dimensions
- *      For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...].
- *      Dimensions should be concrete names like x, y, z, lng, lat, angle, radius
- * @param {module:echarts/model/Model} hostModel
- */
-var List = function (dimensions, hostModel) {
-
-    dimensions = dimensions || ['x', 'y'];
-
-    var dimensionInfos = {};
-    var dimensionNames = [];
-    var invertedIndicesMap = {};
-
-    for (var i = 0; i < dimensions.length; i++) {
-        // Use the original dimensions[i], where other flag props may exists.
-        var dimensionInfo = dimensions[i];
-
-        if (zrUtil.isString(dimensionInfo)) {
-            dimensionInfo = new DataDimensionInfo({name: dimensionInfo});
-        }
-        else if (!(dimensionInfo instanceof DataDimensionInfo)) {
-            dimensionInfo = new DataDimensionInfo(dimensionInfo);
-        }
-
-        var dimensionName = dimensionInfo.name;
-        dimensionInfo.type = dimensionInfo.type || 'float';
-        if (!dimensionInfo.coordDim) {
-            dimensionInfo.coordDim = dimensionName;
-            dimensionInfo.coordDimIndex = 0;
-        }
-
-        dimensionInfo.otherDims = dimensionInfo.otherDims || {};
-        dimensionNames.push(dimensionName);
-        dimensionInfos[dimensionName] = dimensionInfo;
-
-        dimensionInfo.index = i;
-
-        if (dimensionInfo.createInvertedIndices) {
-            invertedIndicesMap[dimensionName] = [];
-        }
-    }
-
-    /**
-     * @readOnly
-     * @type {Array.<string>}
-     */
-    this.dimensions = dimensionNames;
-
-    /**
-     * Infomation of each data dimension, like data type.
-     * @type {Object}
-     */
-    this._dimensionInfos = dimensionInfos;
-
-    /**
-     * @type {module:echarts/model/Model}
-     */
-    this.hostModel = hostModel;
-
-    /**
-     * @type {module:echarts/model/Model}
-     */
-    this.dataType;
-
-    /**
-     * Indices stores the indices of data subset after filtered.
-     * This data subset will be used in chart.
-     * @type {Array.<number>}
-     * @readOnly
-     */
-    this._indices = null;
-
-    this._count = 0;
-    this._rawCount = 0;
-
-    /**
-     * Data storage
-     * @type {Object.<key, Array.<TypedArray|Array>>}
-     * @private
-     */
-    this._storage = {};
-
-    /**
-     * @type {Array.<string>}
-     */
-    this._nameList = [];
-    /**
-     * @type {Array.<string>}
-     */
-    this._idList = [];
-
-    /**
-     * Models of data option is stored sparse for optimizing memory cost
-     * @type {Array.<module:echarts/model/Model>}
-     * @private
-     */
-    this._optionModels = [];
-
-    /**
-     * Global visual properties after visual coding
-     * @type {Object}
-     * @private
-     */
-    this._visual = {};
-
-    /**
-     * Globel layout properties.
-     * @type {Object}
-     * @private
-     */
-    this._layout = {};
-
-    /**
-     * Item visual properties after visual coding
-     * @type {Array.<Object>}
-     * @private
-     */
-    this._itemVisuals = [];
-
-    /**
-     * Key: visual type, Value: boolean
-     * @type {Object}
-     * @readOnly
-     */
-    this.hasItemVisual = {};
-
-    /**
-     * Item layout properties after layout
-     * @type {Array.<Object>}
-     * @private
-     */
-    this._itemLayouts = [];
-
-    /**
-     * Graphic elemnents
-     * @type {Array.<module:zrender/Element>}
-     * @private
-     */
-    this._graphicEls = [];
-
-    /**
-     * Max size of each chunk.
-     * @type {number}
-     * @private
-     */
-    this._chunkSize = 1e5;
-
-    /**
-     * @type {number}
-     * @private
-     */
-    this._chunkCount = 0;
-
-    /**
-     * @type {Array.<Array|Object>}
-     * @private
-     */
-    this._rawData;
-
-    /**
-     * Raw extent will not be cloned, but only transfered.
-     * It will not be calculated util needed.
-     * key: dim,
-     * value: {end: number, extent: Array.<number>}
-     * @type {Object}
-     * @private
-     */
-    this._rawExtent = {};
-
-    /**
-     * @type {Object}
-     * @private
-     */
-    this._extent = {};
-
-    /**
-     * key: dim
-     * value: extent
-     * @type {Object}
-     * @private
-     */
-    this._approximateExtent = {};
-
-    /**
-     * Cache summary info for fast visit. See "dimensionHelper".
-     * @type {Object}
-     * @private
-     */
-    this._dimensionsSummary = summarizeDimensions(this);
-
-    /**
-     * @type {Object.<Array|TypedArray>}
-     * @private
-     */
-    this._invertedIndicesMap = invertedIndicesMap;
-
-    /**
-     * @type {Object}
-     * @private
-     */
-    this._calculationInfo = {};
-
-    /**
-     * User output info of this data.
-     * DO NOT use it in other places!
-     *
-     * When preparing user params for user callbacks, we have
-     * to clone these inner data structures to prevent users
-     * from modifying them to effect built-in logic. And for
-     * performance consideration we make this `userOutput` to
-     * avoid clone them too many times.
-     *
-     * @type {Object}
-     * @readOnly
-     */
-    this.userOutput = this._dimensionsSummary.userOutput;
-};
-
-var listProto = List.prototype;
-
-listProto.type = 'list';
-
-/**
- * If each data item has it's own option
- * @type {boolean}
- */
-listProto.hasItemOption = true;
-
-/**
- * The meanings of the input parameter `dim`:
- *
- * + If dim is a number (e.g., `1`), it means the index of the dimension.
- *   For example, `getDimension(0)` will return 'x' or 'lng' or 'radius'.
- * + If dim is a number-like string (e.g., `"1"`):
- *     + If there is the same concrete dim name defined in `this.dimensions`, it means that concrete name.
- *     + If not, it will be converted to a number, which means the index of the dimension.
- *        (why? because of the backward compatbility. We have been tolerating number-like string in
- *        dimension setting, although now it seems that it is not a good idea.)
- *     For example, `visualMap[i].dimension: "1"` is the same meaning as `visualMap[i].dimension: 1`,
- *     if no dimension name is defined as `"1"`.
- * + If dim is a not-number-like string, it means the concrete dim name.
- *   For example, it can be be default name `"x"`, `"y"`, `"z"`, `"lng"`, `"lat"`, `"angle"`, `"radius"`,
- *   or customized in `dimensions` property of option like `"age"`.
- *
- * Get dimension name
- * @param {string|number} dim See above.
- * @return {string} Concrete dim name.
- */
-listProto.getDimension = function (dim) {
-    if (typeof dim === 'number'
-        // If being a number-like string but not being defined a dimension name.
-        || (!isNaN(dim) && !this._dimensionInfos.hasOwnProperty(dim))
-    ) {
-        dim = this.dimensions[dim];
-    }
-    return dim;
-};
-
-/**
- * Get type and calculation info of particular dimension
- * @param {string|number} dim
- *        Dimension can be concrete names like x, y, z, lng, lat, angle, radius
- *        Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius'
- */
-listProto.getDimensionInfo = function (dim) {
-    // Do not clone, because there may be categories in dimInfo.
-    return this._dimensionInfos[this.getDimension(dim)];
-};
-
-/**
- * @return {Array.<string>} concrete dimension name list on coord.
- */
-listProto.getDimensionsOnCoord = function () {
-    return this._dimensionsSummary.dataDimsOnCoord.slice();
-};
-
-/**
- * @param {string} coordDim
- * @param {number} [idx] A coordDim may map to more than one data dim.
- *        If idx is `true`, return a array of all mapped dims.
- *        If idx is not specified, return the first dim not extra.
- * @return {string|Array.<string>} concrete data dim.
- *        If idx is number, and not found, return null/undefined.
- *        If idx is `true`, and not found, return empty array (always return array).
- */
-listProto.mapDimension = function (coordDim, idx) {
-    var dimensionsSummary = this._dimensionsSummary;
-
-    if (idx == null) {
-        return dimensionsSummary.encodeFirstDimNotExtra[coordDim];
-    }
-
-    var dims = dimensionsSummary.encode[coordDim];
-    return idx === true
-        // always return array if idx is `true`
-        ? (dims || []).slice()
-        : (dims && dims[idx]);
-};
-
-/**
- * Initialize from data
- * @param {Array.<Object|number|Array>} data source or data or data provider.
- * @param {Array.<string>} [nameLIst] The name of a datum is used on data diff and
- *        defualt label/tooltip.
- *        A name can be specified in encode.itemName,
- *        or dataItem.name (only for series option data),
- *        or provided in nameList from outside.
- * @param {Function} [dimValueGetter] (dataItem, dimName, dataIndex, dimIndex) => number
- */
-listProto.initData = function (data, nameList, dimValueGetter) {
-
-    var notProvider = Source.isInstance(data) || zrUtil.isArrayLike(data);
-    if (notProvider) {
-        data = new DefaultDataProvider(data, this.dimensions.length);
-    }
-
-    if (__DEV__) {
-        if (!notProvider && (typeof data.getItem !== 'function' || typeof data.count !== 'function')) {
-            throw new Error('Inavlid data provider.');
-        }
-    }
-
-    this._rawData = data;
-
-    // Clear
-    this._storage = {};
-    this._indices = null;
-
-    this._nameList = nameList || [];
-
-    this._idList = [];
-
-    this._nameRepeatCount = {};
-
-    if (!dimValueGetter) {
-        this.hasItemOption = false;
-    }
-
-    /**
-     * @readOnly
-     */
-    this.defaultDimValueGetter = defaultDimValueGetters[
-        this._rawData.getSource().sourceFormat
-    ];
-    // Default dim value getter
-    this._dimValueGetter = dimValueGetter = dimValueGetter
-        || this.defaultDimValueGetter;
-    this._dimValueGetterArrayRows = defaultDimValueGetters.arrayRows;
-
-    // Reset raw extent.
-    this._rawExtent = {};
-
-    this._initDataFromProvider(0, data.count());
-
-    // If data has no item option.
-    if (data.pure) {
-        this.hasItemOption = false;
-    }
-};
-
-listProto.getProvider = function () {
-    return this._rawData;
-};
-
-/**
- * Caution: Can be only called on raw data (before `this._indices` created).
- */
-listProto.appendData = function (data) {
-    if (__DEV__) {
-        zrUtil.assert(!this._indices, 'appendData can only be called on raw data.');
-    }
-
-    var rawData = this._rawData;
-    var start = this.count();
-    rawData.appendData(data);
-    var end = rawData.count();
-    if (!rawData.persistent) {
-        end += start;
-    }
-    this._initDataFromProvider(start, end);
-};
-
-/**
- * Caution: Can be only called on raw data (before `this._indices` created).
- * This method does not modify `rawData` (`dataProvider`), but only
- * add values to storage.
- *
- * The final count will be increased by `Math.max(values.length, names.length)`.
- *
- * @param {Array.<Array.<*>>} values That is the SourceType: 'arrayRows', like
- *        [
- *            [12, 33, 44],
- *            [NaN, 43, 1],
- *            ['-', 'asdf', 0]
- *        ]
- *        Each item is exaclty cooresponding to a dimension.
- * @param {Array.<string>} [names]
- */
-listProto.appendValues = function (values, names) {
-    var chunkSize = this._chunkSize;
-    var storage = this._storage;
-    var dimensions = this.dimensions;
-    var dimLen = dimensions.length;
-    var rawExtent = this._rawExtent;
-
-    var start = this.count();
-    var end = start + Math.max(values.length, names ? names.length : 0);
-    var originalChunkCount = this._chunkCount;
-
-    for (var i = 0; i < dimLen; i++) {
-        var dim = dimensions[i];
-        if (!rawExtent[dim]) {
-            rawExtent[dim] = getInitialExtent();
-        }
-        if (!storage[dim]) {
-            storage[dim] = [];
-        }
-        prepareChunks(storage, this._dimensionInfos[dim], chunkSize, originalChunkCount, end);
-        this._chunkCount = storage[dim].length;
-    }
-
-    var emptyDataItem = new Array(dimLen);
-    for (var idx = start; idx < end; idx++) {
-        var sourceIdx = idx - start;
-        var chunkIndex = Math.floor(idx / chunkSize);
-        var chunkOffset = idx % chunkSize;
-
-        // Store the data by dimensions
-        for (var k = 0; k < dimLen; k++) {
-            var dim = dimensions[k];
-            var val = this._dimValueGetterArrayRows(
-                values[sourceIdx] || emptyDataItem, dim, sourceIdx, k
-            );
-            storage[dim][chunkIndex][chunkOffset] = val;
-
-            var dimRawExtent = rawExtent[dim];
-            val < dimRawExtent[0] && (dimRawExtent[0] = val);
-            val > dimRawExtent[1] && (dimRawExtent[1] = val);
-        }
-
-        if (names) {
-            this._nameList[idx] = names[sourceIdx];
-        }
-    }
-
-    this._rawCount = this._count = end;
-
-    // Reset data extent
-    this._extent = {};
-
-    prepareInvertedIndex(this);
-};
-
-listProto._initDataFromProvider = function (start, end) {
-    // Optimize.
-    if (start >= end) {
-        return;
-    }
-
-    var chunkSize = this._chunkSize;
-    var rawData = this._rawData;
-    var storage = this._storage;
-    var dimensions = this.dimensions;
-    var dimLen = dimensions.length;
-    var dimensionInfoMap = this._dimensionInfos;
-    var nameList = this._nameList;
-    var idList = this._idList;
-    var rawExtent = this._rawExtent;
-    var nameRepeatCount = this._nameRepeatCount = {};
-    var nameDimIdx;
-
-    var originalChunkCount = this._chunkCount;
-    for (var i = 0; i < dimLen; i++) {
-        var dim = dimensions[i];
-        if (!rawExtent[dim]) {
-            rawExtent[dim] = getInitialExtent();
-        }
-
-        var dimInfo = dimensionInfoMap[dim];
-        if (dimInfo.otherDims.itemName === 0) {
-            nameDimIdx = this._nameDimIdx = i;
-        }
-        if (dimInfo.otherDims.itemId === 0) {
-            this._idDimIdx = i;
-        }
-
-        if (!storage[dim]) {
-            storage[dim] = [];
-        }
-
-        prepareChunks(storage, dimInfo, chunkSize, originalChunkCount, end);
-
-        this._chunkCount = storage[dim].length;
-    }
-
-    var dataItem = new Array(dimLen);
-    for (var idx = start; idx < end; idx++) {
-        // NOTICE: Try not to write things into dataItem
-        dataItem = rawData.getItem(idx, dataItem);
-        // Each data item is value
-        // [1, 2]
-        // 2
-        // Bar chart, line chart which uses category axis
-        // only gives the 'y' value. 'x' value is the indices of category
-        // Use a tempValue to normalize the value to be a (x, y) value
-        var chunkIndex = Math.floor(idx / chunkSize);
-        var chunkOffset = idx % chunkSize;
-
-        // Store the data by dimensions
-        for (var k = 0; k < dimLen; k++) {
-            var dim = dimensions[k];
-            var dimStorage = storage[dim][chunkIndex];
-            // PENDING NULL is empty or zero
-            var val = this._dimValueGetter(dataItem, dim, idx, k);
-            dimStorage[chunkOffset] = val;
-
-            var dimRawExtent = rawExtent[dim];
-            val < dimRawExtent[0] && (dimRawExtent[0] = val);
-            val > dimRawExtent[1] && (dimRawExtent[1] = val);
-        }
-
-        // ??? FIXME not check by pure but sourceFormat?
-        // TODO refactor these logic.
-        if (!rawData.pure) {
-            var name = nameList[idx];
-
-            if (dataItem && name == null) {
-                // If dataItem is {name: ...}, it has highest priority.
-                // That is appropriate for many common cases.
-                if (dataItem.name != null) {
-                    // There is no other place to persistent dataItem.name,
-                    // so save it to nameList.
-                    nameList[idx] = name = dataItem.name;
-                }
-                else if (nameDimIdx != null) {
-                    var nameDim = dimensions[nameDimIdx];
-                    var nameDimChunk = storage[nameDim][chunkIndex];
-                    if (nameDimChunk) {
-                        name = nameDimChunk[chunkOffset];
-                        var ordinalMeta = dimensionInfoMap[nameDim].ordinalMeta;
-                        if (ordinalMeta && ordinalMeta.categories.length) {
-                            name = ordinalMeta.categories[name];
-                        }
-                    }
-                }
-            }
-
-            // Try using the id in option
-            // id or name is used on dynamical data, mapping old and new items.
-            var id = dataItem == null ? null : dataItem.id;
-
-            if (id == null && name != null) {
-                // Use name as id and add counter to avoid same name
-                nameRepeatCount[name] = nameRepeatCount[name] || 0;
-                id = name;
-                if (nameRepeatCount[name] > 0) {
-                    id += '__ec__' + nameRepeatCount[name];
-                }
-                nameRepeatCount[name]++;
-            }
-            id != null && (idList[idx] = id);
-        }
-    }
-
-    if (!rawData.persistent && rawData.clean) {
-        // Clean unused data if data source is typed array.
-        rawData.clean();
-    }
-
-    this._rawCount = this._count = end;
-
-    // Reset data extent
-    this._extent = {};
-
-    prepareInvertedIndex(this);
-};
-
-function prepareChunks(storage, dimInfo, chunkSize, chunkCount, end) {
-    var DataCtor = dataCtors[dimInfo.type];
-    var lastChunkIndex = chunkCount - 1;
-    var dim = dimInfo.name;
-    var resizeChunkArray = storage[dim][lastChunkIndex];
-    if (resizeChunkArray && resizeChunkArray.length < chunkSize) {
-        var newStore = new DataCtor(Math.min(end - lastChunkIndex * chunkSize, chunkSize));
-        // The cost of the copy is probably inconsiderable
-        // within the initial chunkSize.
-        for (var j = 0; j < resizeChunkArray.length; j++) {
-            newStore[j] = resizeChunkArray[j];
-        }
-        storage[dim][lastChunkIndex] = newStore;
-    }
-
-    // Create new chunks.
-    for (var k = chunkCount * chunkSize; k < end; k += chunkSize) {
-        storage[dim].push(new DataCtor(Math.min(end - k, chunkSize)));
-    }
-}
-
-function prepareInvertedIndex(list) {
-    var invertedIndicesMap = list._invertedIndicesMap;
-    zrUtil.each(invertedIndicesMap, function (invertedIndices, dim) {
-        var dimInfo = list._dimensionInfos[dim];
-
-        // Currently, only dimensions that has ordinalMeta can create inverted indices.
-        var ordinalMeta = dimInfo.ordinalMeta;
-        if (ordinalMeta) {
-            invertedIndices = invertedIndicesMap[dim] = new CtorInt32Array(
-                ordinalMeta.categories.length
-            );
-            // The default value of TypedArray is 0. To avoid miss
-            // mapping to 0, we should set it as INDEX_NOT_FOUND.
-            for (var i = 0; i < invertedIndices.length; i++) {
-                invertedIndices[i] = INDEX_NOT_FOUND;
-            }
-            for (var i = 0; i < list._count; i++) {
-                // Only support the case that all values are distinct.
-                invertedIndices[list.get(dim, i)] = i;
-            }
-        }
-    });
-}
-
-function getRawValueFromStore(list, dimIndex, rawIndex) {
-    var val;
-    if (dimIndex != null) {
-        var chunkSize = list._chunkSize;
-        var chunkIndex = Math.floor(rawIndex / chunkSize);
-        var chunkOffset = rawIndex % chunkSize;
-        var dim = list.dimensions[dimIndex];
-        var chunk = list._storage[dim][chunkIndex];
-        if (chunk) {
-            val = chunk[chunkOffset];
-            var ordinalMeta = list._dimensionInfos[dim].ordinalMeta;
-            if (ordinalMeta && ordinalMeta.categories.length) {
-                val = ordinalMeta.categories[val];
-            }
-        }
-    }
-    return val;
-}
-
-/**
- * @return {number}
- */
-listProto.count = function () {
-    return this._count;
-};
-
-listProto.getIndices = function () {
-    var newIndices;
-
-    var indices = this._indices;
-    if (indices) {
-        var Ctor = indices.constructor;
-        var thisCount = this._count;
-        // `new Array(a, b, c)` is different from `new Uint32Array(a, b, c)`.
-        if (Ctor === Array) {
-            newIndices = new Ctor(thisCount);
-            for (var i = 0; i < thisCount; i++) {
-                newIndices[i] = indices[i];
-            }
-        }
-        else {
-            newIndices = new Ctor(indices.buffer, 0, thisCount);
-        }
-    }
-    else {
-        var Ctor = getIndicesCtor(this);
-        var newIndices = new Ctor(this.count());
-        for (var i = 0; i < newIndices.length; i++) {
-            newIndices[i] = i;
-        }
-    }
-
-    return newIndices;
-};
-
-/**
- * Get value. Return NaN if idx is out of range.
- * @param {string} dim Dim must be concrete name.
- * @param {number} idx
- * @param {boolean} stack
- * @return {number}
- */
-listProto.get = function (dim, idx /*, stack */) {
-    if (!(idx >= 0 && idx < this._count)) {
-        return NaN;
-    }
-    var storage = this._storage;
-    if (!storage[dim]) {
-        // TODO Warn ?
-        return NaN;
-    }
-
-    idx = this.getRawIndex(idx);
-
-    var chunkIndex = Math.floor(idx / this._chunkSize);
-    var chunkOffset = idx % this._chunkSize;
-
-    var chunkStore = storage[dim][chunkIndex];
-    var value = chunkStore[chunkOffset];
-    // FIXME ordinal data type is not stackable
-    // if (stack) {
-    //     var dimensionInfo = this._dimensionInfos[dim];
-    //     if (dimensionInfo && dimensionInfo.stackable) {
-    //         var stackedOn = this.stackedOn;
-    //         while (stackedOn) {
-    //             // Get no stacked data of stacked on
-    //             var stackedValue = stackedOn.get(dim, idx);
-    //             // Considering positive stack, negative stack and empty data
-    //             if ((value >= 0 && stackedValue > 0)  // Positive stack
-    //                 || (value <= 0 && stackedValue < 0) // Negative stack
-    //             ) {
-    //                 value += stackedValue;
-    //             }
-    //             stackedOn = stackedOn.stackedOn;
-    //         }
-    //     }
-    // }
-
-    return value;
-};
-
-/**
- * @param {string} dim concrete dim
- * @param {number} rawIndex
- * @return {number|string}
- */
-listProto.getByRawIndex = function (dim, rawIdx) {
-    if (!(rawIdx >= 0 && rawIdx < this._rawCount)) {
-        return NaN;
-    }
-    var dimStore = this._storage[dim];
-    if (!dimStore) {
-        // TODO Warn ?
-        return NaN;
-    }
-
-    var chunkIndex = Math.floor(rawIdx / this._chunkSize);
-    var chunkOffset = rawIdx % this._chunkSize;
-    var chunkStore = dimStore[chunkIndex];
-    return chunkStore[chunkOffset];
-};
-
-/**
- * FIXME Use `get` on chrome maybe slow(in filterSelf and selectRange).
- * Hack a much simpler _getFast
- * @private
- */
-listProto._getFast = function (dim, rawIdx) {
-    var chunkIndex = Math.floor(rawIdx / this._chunkSize);
-    var chunkOffset = rawIdx % this._chunkSize;
-    var chunkStore = this._storage[dim][chunkIndex];
-    return chunkStore[chunkOffset];
-};
-
-/**
- * Get value for multi dimensions.
- * @param {Array.<string>} [dimensions] If ignored, using all dimensions.
- * @param {number} idx
- * @return {number}
- */
-listProto.getValues = function (dimensions, idx /*, stack */) {
-    var values = [];
-
-    if (!zrUtil.isArray(dimensions)) {
-        // stack = idx;
-        idx = dimensions;
-        dimensions = this.dimensions;
-    }
-
-    for (var i = 0, len = dimensions.length; i < len; i++) {
-        values.push(this.get(dimensions[i], idx /*, stack */));
-    }
-
-    return values;
-};
-
-/**
- * If value is NaN. Inlcuding '-'
- * Only check the coord dimensions.
- * @param {string} dim
- * @param {number} idx
- * @return {number}
- */
-listProto.hasValue = function (idx) {
-    var dataDimsOnCoord = this._dimensionsSummary.dataDimsOnCoord;
-    for (var i = 0, len = dataDimsOnCoord.length; i < len; i++) {
-        // Ordinal type originally can be string or number.
-        // But when an ordinal type is used on coord, it can
-        // not be string but only number. So we can also use isNaN.
-        if (isNaN(this.get(dataDimsOnCoord[i], idx))) {
-            return false;
-        }
-    }
-    return true;
-};
-
-/**
- * Get extent of data in one dimension
- * @param {string} dim
- * @param {boolean} stack
- */
-listProto.getDataExtent = function (dim /*, stack */) {
-    // Make sure use concrete dim as cache name.
-    dim = this.getDimension(dim);
-    var dimData = this._storage[dim];
-    var initialExtent = getInitialExtent();
-
-    // stack = !!((stack || false) && this.getCalculationInfo(dim));
-
-    if (!dimData) {
-        return initialExtent;
-    }
-
-    // Make more strict checkings to ensure hitting cache.
-    var currEnd = this.count();
-    // var cacheName = [dim, !!stack].join('_');
-    // var cacheName = dim;
-
-    // Consider the most cases when using data zoom, `getDataExtent`
-    // happened before filtering. We cache raw extent, which is not
-    // necessary to be cleared and recalculated when restore data.
-    var useRaw = !this._indices; // && !stack;
-    var dimExtent;
-
-    if (useRaw) {
-        return this._rawExtent[dim].slice();
-    }
-    dimExtent = this._extent[dim];
-    if (dimExtent) {
-        return dimExtent.slice();
-    }
-    dimExtent = initialExtent;
-
-    var min = dimExtent[0];
-    var max = dimExtent[1];
-
-    for (var i = 0; i < currEnd; i++) {
-        // var value = stack ? this.get(dim, i, true) : this._getFast(dim, this.getRawIndex(i));
-        var value = this._getFast(dim, this.getRawIndex(i));
-        value < min && (min = value);
-        value > max && (max = value);
-    }
-
-    dimExtent = [min, max];
-
-    this._extent[dim] = dimExtent;
-
-    return dimExtent;
-};
-
-/**
- * Optimize for the scenario that data is filtered by a given extent.
- * Consider that if data amount is more than hundreds of thousand,
- * extent calculation will cost more than 10ms and the cache will
- * be erased because of the filtering.
- */
-listProto.getApproximateExtent = function (dim /*, stack */) {
-    dim = this.getDimension(dim);
-    return this._approximateExtent[dim] || this.getDataExtent(dim /*, stack */);
-};
-
-listProto.setApproximateExtent = function (extent, dim /*, stack */) {
-    dim = this.getDimension(dim);
-    this._approximateExtent[dim] = extent.slice();
-};
-
-/**
- * @param {string} key
- * @return {*}
- */
-listProto.getCalculationInfo = function (key) {
-    return this._calculationInfo[key];
-};
-
-/**
- * @param {string|Object} key or k-v object
- * @param {*} [value]
- */
-listProto.setCalculationInfo = function (key, value) {
-    isObject(key)
-        ? zrUtil.extend(this._calculationInfo, key)
-        : (this._calculationInfo[key] = value);
-};
-
-/**
- * Get sum of data in one dimension
- * @param {string} dim
- */
-listProto.getSum = function (dim /*, stack */) {
-    var dimData = this._storage[dim];
-    var sum = 0;
-    if (dimData) {
-        for (var i = 0, len = this.count(); i < len; i++) {
-            var value = this.get(dim, i /*, stack */);
-            if (!isNaN(value)) {
-                sum += value;
-            }
-        }
-    }
-    return sum;
-};
-
-/**
- * Get median of data in one dimension
- * @param {string} dim
- */
-listProto.getMedian = function (dim /*, stack */) {
-    var dimDataArray = [];
-    // map all data of one dimension
-    this.each(dim, function (val, idx) {
-        if (!isNaN(val)) {
-            dimDataArray.push(val);
-        }
-    });
-
-    // TODO
-    // Use quick select?
-
-    // immutability & sort
-    var sortedDimDataArray = [].concat(dimDataArray).sort(function (a, b) {
-        return a - b;
-    });
-    var len = this.count();
-    // calculate median
-    return len === 0
-        ? 0
-        : len % 2 === 1
-        ? sortedDimDataArray[(len - 1) / 2]
-        : (sortedDimDataArray[len / 2] + sortedDimDataArray[len / 2 - 1]) / 2;
-};
-
-// /**
-//  * Retreive the index with given value
-//  * @param {string} dim Concrete dimension.
-//  * @param {number} value
-//  * @return {number}
-//  */
-// Currently incorrect: should return dataIndex but not rawIndex.
-// Do not fix it until this method is to be used somewhere.
-// FIXME Precision of float value
-// listProto.indexOf = function (dim, value) {
-//     var storage = this._storage;
-//     var dimData = storage[dim];
-//     var chunkSize = this._chunkSize;
-//     if (dimData) {
-//         for (var i = 0, len = this.count(); i < len; i++) {
-//             var chunkIndex = Math.floor(i / chunkSize);
-//             var chunkOffset = i % chunkSize;
-//             if (dimData[chunkIndex][chunkOffset] === value) {
-//                 return i;
-//             }
-//         }
-//     }
-//     return -1;
-// };
-
-/**
- * Only support the dimension which inverted index created.
- * Do not support other cases until required.
- * @param {string} concrete dim
- * @param {number|string} value
- * @return {number} rawIndex
- */
-listProto.rawIndexOf = function (dim, value) {
-    var invertedIndices = dim && this._invertedIndicesMap[dim];
-    if (__DEV__) {
-        if (!invertedIndices) {
-            throw new Error('Do not supported yet');
-        }
-    }
-    var rawIndex = invertedIndices[value];
-    if (rawIndex == null || isNaN(rawIndex)) {
-        return INDEX_NOT_FOUND;
-    }
-    return rawIndex;
-};
-
-/**
- * Retreive the index with given name
- * @param {number} idx
- * @param {number} name
- * @return {number}
- */
-listProto.indexOfName = function (name) {
-    for (var i = 0, len = this.count(); i < len; i++) {
-        if (this.getName(i) === name) {
-            return i;
-        }
-    }
-
-    return -1;
-};
-
-/**
- * Retreive the index with given raw data index
- * @param {number} idx
- * @param {number} name
- * @return {number}
- */
-listProto.indexOfRawIndex = function (rawIndex) {
-    if (rawIndex >= this._rawCount || rawIndex < 0) {
-        return -1;
-    }
-
-    if (!this._indices) {
-        return rawIndex;
-    }
-
-    // Indices are ascending
-    var indices = this._indices;
-
-    // If rawIndex === dataIndex
-    var rawDataIndex = indices[rawIndex];
-    if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) {
-        return rawIndex;
-    }
-
-    var left = 0;
-    var right = this._count - 1;
-    while (left <= right) {
-        var mid = (left + right) / 2 | 0;
-        if (indices[mid] < rawIndex) {
-            left = mid + 1;
-        }
-        else if (indices[mid] > rawIndex) {
-            right = mid - 1;
-        }
-        else {
-            return mid;
-        }
-    }
-    return -1;
-};
-
-/**
- * Retreive the index of nearest value
- * @param {string} dim
- * @param {number} value
- * @param {number} [maxDistance=Infinity]
- * @return {Array.<number>} If and only if multiple indices has
- *        the same value, they are put to the result.
- */
-listProto.indicesOfNearest = function (dim, value, maxDistance) {
-    var storage = this._storage;
-    var dimData = storage[dim];
-    var nearestIndices = [];
-
-    if (!dimData) {
-        return nearestIndices;
-    }
-
-    if (maxDistance == null) {
-        maxDistance = Infinity;
-    }
-
-    var minDist = Infinity;
-    var minDiff = -1;
-    var nearestIndicesLen = 0;
-
-    // Check the test case of `test/ut/spec/data/List.js`.
-    for (var i = 0, len = this.count(); i < len; i++) {
-        var diff = value - this.get(dim, i);
-        var dist = Math.abs(diff);
-        if (dist <= maxDistance) {
-            // When the `value` is at the middle of `this.get(dim, i)` and `this.get(dim, i+1)`,
-            // we'd better not push both of them to `nearestIndices`, otherwise it is easy to
-            // get more than one item in `nearestIndices` (more specifically, in `tooltip`).
-            // So we chose the one that `diff >= 0` in this csae.
-            // But if `this.get(dim, i)` and `this.get(dim, j)` get the same value, both of them
-            // should be push to `nearestIndices`.
-            if (dist < minDist
-                || (dist === minDist && diff >= 0 && minDiff < 0)
-            ) {
-                minDist = dist;
-                minDiff = diff;
-                nearestIndicesLen = 0;
-            }
-            if (diff === minDiff) {
-                nearestIndices[nearestIndicesLen++] = i;
-            }
-        }
-    }
-    nearestIndices.length = nearestIndicesLen;
-
-    return nearestIndices;
-};
-
-/**
- * Get raw data index
- * @param {number} idx
- * @return {number}
- */
-listProto.getRawIndex = getRawIndexWithoutIndices;
-
-function getRawIndexWithoutIndices(idx) {
-    return idx;
-}
-
-function getRawIndexWithIndices(idx) {
-    if (idx < this._count && idx >= 0) {
-        return this._indices[idx];
-    }
-    return -1;
-}
-
-/**
- * Get raw data item
- * @param {number} idx
- * @return {number}
- */
-listProto.getRawDataItem = function (idx) {
-    if (!this._rawData.persistent) {
-        var val = [];
-        for (var i = 0; i < this.dimensions.length; i++) {
-            var dim = this.dimensions[i];
-            val.push(this.get(dim, idx));
-        }
-        return val;
-    }
-    else {
-        return this._rawData.getItem(this.getRawIndex(idx));
-    }
-};
-
-/**
- * @param {number} idx
- * @param {boolean} [notDefaultIdx=false]
- * @return {string}
- */
-listProto.getName = function (idx) {
-    var rawIndex = this.getRawIndex(idx);
-    return this._nameList[rawIndex]
-        || getRawValueFromStore(this, this._nameDimIdx, rawIndex)
-        || '';
-};
-
-/**
- * @param {number} idx
- * @param {boolean} [notDefaultIdx=false]
- * @return {string}
- */
-listProto.getId = function (idx) {
-    return getId(this, this.getRawIndex(idx));
-};
-
-function getId(list, rawIndex) {
-    var id = list._idList[rawIndex];
-    if (id == null) {
-        id = getRawValueFromStore(list, list._idDimIdx, rawIndex);
-    }
-    if (id == null) {
-        // FIXME Check the usage in graph, should not use prefix.
-        id = ID_PREFIX + rawIndex;
-    }
-    return id;
-}
-
-function normalizeDimensions(dimensions) {
-    if (!zrUtil.isArray(dimensions)) {
-        dimensions = [dimensions];
-    }
-    return dimensions;
-}
-
-function validateDimensions(list, dims) {
-    for (var i = 0; i < dims.length; i++) {
-        // stroage may be empty when no data, so use
-        // dimensionInfos to check.
-        if (!list._dimensionInfos[dims[i]]) {
-            console.error('Unkown dimension ' + dims[i]);
-        }
-    }
-}
-
-/**
- * Data iteration
- * @param {string|Array.<string>}
- * @param {Function} cb
- * @param {*} [context=this]
- *
- * @example
- *  list.each('x', function (x, idx) {});
- *  list.each(['x', 'y'], function (x, y, idx) {});
- *  list.each(function (idx) {})
- */
-listProto.each = function (dims, cb, context, contextCompat) {
-    'use strict';
-
-    if (!this._count) {
-        return;
-    }
-
-    if (typeof dims === 'function') {
-        contextCompat = context;
-        context = cb;
-        cb = dims;
-        dims = [];
-    }
-
-    // contextCompat just for compat echarts3
-    context = context || contextCompat || this;
-
-    dims = zrUtil.map(normalizeDimensions(dims), this.getDimension, this);
-
-    if (__DEV__) {
-        validateDimensions(this, dims);
-    }
-
-    var dimSize = dims.length;
-
-    for (var i = 0; i < this.count(); i++) {
-        // Simple optimization
-        switch (dimSize) {
-            case 0:
-                cb.call(context, i);
-                break;
-            case 1:
-                cb.call(context, this.get(dims[0], i), i);
-                break;
-            case 2:
-                cb.call(context, this.get(dims[0], i), this.get(dims[1], i), i);
-                break;
-            default:
-                var k = 0;
-                var value = [];
-                for (; k < dimSize; k++) {
-                    value[k] = this.get(dims[k], i);
-                }
-                // Index
-                value[k] = i;
-                cb.apply(context, value);
-        }
-    }
-};
-
-/**
- * Data filter
- * @param {string|Array.<string>}
- * @param {Function} cb
- * @param {*} [context=this]
- */
-listProto.filterSelf = function (dimensions, cb, context, contextCompat) {
-    'use strict';
-
-    if (!this._count) {
-        return;
-    }
-
-    if (typeof dimensions === 'function') {
-        contextCompat = context;
-        context = cb;
-        cb = dimensions;
-        dimensions = [];
-    }
-
-    // contextCompat just for compat echarts3
-    context = context || contextCompat || this;
-
-    dimensions = zrUtil.map(
-        normalizeDimensions(dimensions), this.getDimension, this
-    );
-
-    if (__DEV__) {
-        validateDimensions(this, dimensions);
-    }
-
-
-    var count = this.count();
-    var Ctor = getIndicesCtor(this);
-    var newIndices = new Ctor(count);
-    var value = [];
-    var dimSize = dimensions.length;
-
-    var offset = 0;
-    var dim0 = dimensions[0];
-
-    for (var i = 0; i < count; i++) {
-        var keep;
-        var rawIdx = this.getRawIndex(i);
-        // Simple optimization
-        if (dimSize === 0) {
-            keep = cb.call(context, i);
-        }
-        else if (dimSize === 1) {
-            var val = this._getFast(dim0, rawIdx);
-            keep = cb.call(context, val, i);
-        }
-        else {
-            for (var k = 0; k < dimSize; k++) {
-                value[k] = this._getFast(dim0, rawIdx);
-            }
-            value[k] = i;
-            keep = cb.apply(context, value);
-        }
-        if (keep) {
-            newIndices[offset++] = rawIdx;
-        }
-    }
-
-    // Set indices after filtered.
-    if (offset < count) {
-        this._indices = newIndices;
-    }
-    this._count = offset;
-    // Reset data extent
-    this._extent = {};
-
-    this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;
-
-    return this;
-};
-
-/**
- * Select data in range. (For optimization of filter)
- * (Manually inline code, support 5 million data filtering in data zoom.)
- */
-listProto.selectRange = function (range) {
-    'use strict';
-
-    if (!this._count) {
-        return;
-    }
-
-    var dimensions = [];
-    for (var dim in range) {
-        if (range.hasOwnProperty(dim)) {
-            dimensions.push(dim);
-        }
-    }
-
-    if (__DEV__) {
-        validateDimensions(this, dimensions);
-    }
-
-    var dimSize = dimensions.length;
-    if (!dimSize) {
-        return;
-    }
-
-    var originalCount = this.count();
-    var Ctor = getIndicesCtor(this);
-    var newIndices = new Ctor(originalCount);
-
-    var offset = 0;
-    var dim0 = dimensions[0];
-
-    var min = range[dim0][0];
-    var max = range[dim0][1];
-
-    var quickFinished = false;
-    if (!this._indices) {
-        // Extreme optimization for common case. About 2x faster in chrome.
-        var idx = 0;
-        if (dimSize === 1) {
-            var dimStorage = this._storage[dimensions[0]];
-            for (var k = 0; k < this._chunkCount; k++) {
-                var chunkStorage = dimStorage[k];
-                var len = Math.min(this._count - k * this._chunkSize, this._chunkSize);
-                for (var i = 0; i < len; i++) {
-                    var val = chunkStorage[i];
-                    // NaN will not be filtered. Consider the case, in line chart, empty
-                    // value indicates the line should be broken. But for the case like
-                    // scatter plot, a data item with empty value will not be rendered,
-                    // but the axis extent may be effected if some other dim of the data
-                    // item has value. Fortunately it is not a significant negative effect.
-                    if (
-                        (val >= min && val <= max) || isNaN(val)
-                    ) {
-                        newIndices[offset++] = idx;
-                    }
-                    idx++;
-                }
-            }
-            quickFinished = true;
-        }
-        else if (dimSize === 2) {
-            var dimStorage = this._storage[dim0];
-            var dimStorage2 = this._storage[dimensions[1]];
-            var min2 = range[dimensions[1]][0];
-            var max2 = range[dimensions[1]][1];
-            for (var k = 0; k < this._chunkCount; k++) {
-                var chunkStorage = dimStorage[k];
-                var chunkStorage2 = dimStorage2[k];
-                var len = Math.min(this._count - k * this._chunkSize, this._chunkSize);
-                for (var i = 0; i < len; i++) {
-                    var val = chunkStorage[i];
-                    var val2 = chunkStorage2[i];
-                    // Do not filter NaN, see comment above.
-                    if ((
-                            (val >= min && val <= max) || isNaN(val)
-                        )
-                        && (
-                            (val2 >= min2 && val2 <= max2) || isNaN(val2)
-                        )
-                    ) {
-                        newIndices[offset++] = idx;
-                    }
-                    idx++;
-                }
-            }
-            quickFinished = true;
-        }
-    }
-    if (!quickFinished) {
-        if (dimSize === 1) {
-            for (var i = 0; i < originalCount; i++) {
-                var rawIndex = this.getRawIndex(i);
-                var val = this._getFast(dim0, rawIndex);
-                // Do not filter NaN, see comment above.
-                if (
-                    (val >= min && val <= max) || isNaN(val)
-                ) {
-                    newIndices[offset++] = rawIndex;
-                }
-            }
-        }
-        else {
-            for (var i = 0; i < originalCount; i++) {
-                var keep = true;
-                var rawIndex = this.getRawIndex(i);
-                for (var k = 0; k < dimSize; k++) {
-                    var dimk = dimensions[k];
-                    var val = this._getFast(dim, rawIndex);
-                    // Do not filter NaN, see comment above.
-                    if (val < range[dimk][0] || val > range[dimk][1]) {
-                        keep = false;
-                    }
-                }
-                if (keep) {
-                    newIndices[offset++] = this.getRawIndex(i);
-                }
-            }
-        }
-    }
-
-    // Set indices after filtered.
-    if (offset < originalCount) {
-        this._indices = newIndices;
-    }
-    this._count = offset;
-    // Reset data extent
-    this._extent = {};
-
-    this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;
-
-    return this;
-};
-
-/**
- * Data mapping to a plain array
- * @param {string|Array.<string>} [dimensions]
- * @param {Function} cb
- * @param {*} [context=this]
- * @return {Array}
- */
-listProto.mapArray = function (dimensions, cb, context, contextCompat) {
-    'use strict';
-
-    if (typeof dimensions === 'function') {
-        contextCompat = context;
-        context = cb;
-        cb = dimensions;
-        dimensions = [];
-    }
-
-    // contextCompat just for compat echarts3
-    context = context || contextCompat || this;
-
-    var result = [];
-    this.each(dimensions, function () {
-        result.push(cb && cb.apply(this, arguments));
-    }, context);
-    return result;
-};
-
-// Data in excludeDimensions is copied, otherwise transfered.
-function cloneListForMapAndSample(original, excludeDimensions) {
-    var allDimensions = original.dimensions;
-    var list = new List(
-        zrUtil.map(allDimensions, original.getDimensionInfo, original),
-        original.hostModel
-    );
-    // FIXME If needs stackedOn, value may already been stacked
-    transferProperties(list, original);
-
-    var storage = list._storage = {};
-    var originalStorage = original._storage;
-
-    // Init storage
-    for (var i = 0; i < allDimensions.length; i++) {
-        var dim = allDimensions[i];
-        if (originalStorage[dim]) {
-            // Notice that we do not reset invertedIndicesMap here, becuase
-            // there is no scenario of mapping or sampling ordinal dimension.
-            if (zrUtil.indexOf(excludeDimensions, dim) >= 0) {
-                storage[dim] = cloneDimStore(originalStorage[dim]);
-                list._rawExtent[dim] = getInitialExtent();
-                list._extent[dim] = null;
-            }
-            else {
-                // Direct reference for other dimensions
-                storage[dim] = originalStorage[dim];
-            }
-        }
-    }
-    return list;
-}
-
-function cloneDimStore(originalDimStore) {
-    var newDimStore = new Array(originalDimStore.length);
-    for (var j = 0; j < originalDimStore.length; j++) {
-        newDimStore[j] = cloneChunk(originalDimStore[j]);
-    }
-    return newDimStore;
-}
-
-function getInitialExtent() {
-    return [Infinity, -Infinity];
-}
-
-/**
- * Data mapping to a new List with given dimensions
- * @param {string|Array.<string>} dimensions
- * @param {Function} cb
- * @param {*} [context=this]
- * @return {Array}
- */
-listProto.map = function (dimensions, cb, context, contextCompat) {
-    'use strict';
-
-    // contextCompat just for compat echarts3
-    context = context || contextCompat || this;
-
-    dimensions = zrUtil.map(
-        normalizeDimensions(dimensions), this.getDimension, this
-    );
-
-    if (__DEV__) {
-        validateDimensions(this, dimensions);
-    }
-
-    var list = cloneListForMapAndSample(this, dimensions);
-
-    // Following properties are all immutable.
-    // So we can reference to the same value
-    list._indices = this._indices;
-    list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;
-
-    var storage = list._storage;
-
-    var tmpRetValue = [];
-    var chunkSize = this._chunkSize;
-    var dimSize = dimensions.length;
-    var dataCount = this.count();
-    var values = [];
-    var rawExtent = list._rawExtent;
-
-    for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) {
-        for (var dimIndex = 0; dimIndex < dimSize; dimIndex++) {
-            values[dimIndex] = this.get(dimensions[dimIndex], dataIndex /*, stack */);
-        }
-        values[dimSize] = dataIndex;
-
-        var retValue = cb && cb.apply(context, values);
-        if (retValue != null) {
-            // a number or string (in oridinal dimension)?
-            if (typeof retValue !== 'object') {
-                tmpRetValue[0] = retValue;
-                retValue = tmpRetValue;
-            }
-
-            var rawIndex = this.getRawIndex(dataIndex);
-            var chunkIndex = Math.floor(rawIndex / chunkSize);
-            var chunkOffset = rawIndex % chunkSize;
-
-            for (var i = 0; i < retValue.length; i++) {
-                var dim = dimensions[i];
-                var val = retValue[i];
-                var rawExtentOnDim = rawExtent[dim];
-
-                var dimStore = storage[dim];
-                if (dimStore) {
-                    dimStore[chunkIndex][chunkOffset] = val;
-                }
-
-                if (val < rawExtentOnDim[0]) {
-                    rawExtentOnDim[0] = val;
-                }
-                if (val > rawExtentOnDim[1]) {
-                    rawExtentOnDim[1] = val;
-                }
-            }
-        }
-    }
-
-    return list;
-};
-
-/**
- * Large data down sampling on given dimension
- * @param {string} dimension
- * @param {number} rate
- * @param {Function} sampleValue
- * @param {Function} sampleIndex Sample index for name and id
- */
-listProto.downSample = function (dimension, rate, sampleValue, sampleIndex) {
-    var list = cloneListForMapAndSample(this, [dimension]);
-    var targetStorage = list._storage;
-
-    var frameValues = [];
-    var frameSize = Math.floor(1 / rate);
-
-    var dimStore = targetStorage[dimension];
-    var len = this.count();
-    var chunkSize = this._chunkSize;
-    var rawExtentOnDim = list._rawExtent[dimension];
-
-    var newIndices = new (getIndicesCtor(this))(len);
-
-    var offset = 0;
-    for (var i = 0; i < len; i += frameSize) {
-        // Last frame
-        if (frameSize > len - i) {
-            frameSize = len - i;
-            frameValues.length = frameSize;
-        }
-        for (var k = 0; k < frameSize; k++) {
-            var dataIdx = this.getRawIndex(i + k);
-            var originalChunkIndex = Math.floor(dataIdx / chunkSize);
-            var originalChunkOffset = dataIdx % chunkSize;
-            frameValues[k] = dimStore[originalChunkIndex][originalChunkOffset];
-        }
-        var value = sampleValue(frameValues);
-        var sampleFrameIdx = this.getRawIndex(
-            Math.min(i + sampleIndex(frameValues, value) || 0, len - 1)
-        );
-        var sampleChunkIndex = Math.floor(sampleFrameIdx / chunkSize);
-        var sampleChunkOffset = sampleFrameIdx % chunkSize;
-        // Only write value on the filtered data
-        dimStore[sampleChunkIndex][sampleChunkOffset] = value;
-
-        if (value < rawExtentOnDim[0]) {
-            rawExtentOnDim[0] = value;
-        }
-        if (value > rawExtentOnDim[1]) {
-            rawExtentOnDim[1] = value;
-        }
-
-        newIndices[offset++] = sampleFrameIdx;
-    }
-
-    list._count = offset;
-    list._indices = newIndices;
-
-    list.getRawIndex = getRawIndexWithIndices;
-
-    return list;
-};
-
-/**
- * Get model of one data item.
- *
- * @param {number} idx
- */
-// FIXME Model proxy ?
-listProto.getItemModel = function (idx) {
-    var hostModel = this.hostModel;
-    return new Model(this.getRawDataItem(idx), hostModel, hostModel && hostModel.ecModel);
-};
-
-/**
- * Create a data differ
- * @param {module:echarts/data/List} otherList
- * @return {module:echarts/data/DataDiffer}
- */
-listProto.diff = function (otherList) {
-    var thisList = this;
-
-    return new DataDiffer(
-        otherList ? otherList.getIndices() : [],
-        this.getIndices(),
-        function (idx) {
-            return getId(otherList, idx);
-        },
-        function (idx) {
-            return getId(thisList, idx);
-        }
-    );
-};
-/**
- * Get visual property.
- * @param {string} key
- */
-listProto.getVisual = function (key) {
-    var visual = this._visual;
-    return visual && visual[key];
-};
-
-/**
- * Set visual property
- * @param {string|Object} key
- * @param {*} [value]
- *
- * @example
- *  setVisual('color', color);
- *  setVisual({
- *      'color': color
- *  });
- */
-listProto.setVisual = function (key, val) {
-    if (isObject(key)) {
-        for (var name in key) {
-            if (key.hasOwnProperty(name)) {
-                this.setVisual(name, key[name]);
-            }
-        }
-        return;
-    }
-    this._visual = this._visual || {};
-    this._visual[key] = val;
-};
-
-/**
- * Set layout property.
- * @param {string|Object} key
- * @param {*} [val]
- */
-listProto.setLayout = function (key, val) {
-    if (isObject(key)) {
-        for (var name in key) {
-            if (key.hasOwnProperty(name)) {
-                this.setLayout(name, key[name]);
-            }
-        }
-        return;
-    }
-    this._layout[key] = val;
-};
-
-/**
- * Get layout property.
- * @param  {string} key.
- * @return {*}
- */
-listProto.getLayout = function (key) {
-    return this._layout[key];
-};
-
-/**
- * Get layout of single data item
- * @param {number} idx
- */
-listProto.getItemLayout = function (idx) {
-    return this._itemLayouts[idx];
-};
-
-/**
- * Set layout of single data item
- * @param {number} idx
- * @param {Object} layout
- * @param {boolean=} [merge=false]
- */
-listProto.setItemLayout = function (idx, layout, merge) {
-    this._itemLayouts[idx] = merge
-        ? zrUtil.extend(this._itemLayouts[idx] || {}, layout)
-        : layout;
-};
-
-/**
- * Clear all layout of single data item
- */
-listProto.clearItemLayouts = function () {
-    this._itemLayouts.length = 0;
-};
-
-/**
- * Get visual property of single data item
- * @param {number} idx
- * @param {string} key
- * @param {boolean} [ignoreParent=false]
- */
-listProto.getItemVisual = function (idx, key, ignoreParent) {
-    var itemVisual = this._itemVisuals[idx];
-    var val = itemVisual && itemVisual[key];
-    if (val == null && !ignoreParent) {
-        // Use global visual property
-        return this.getVisual(key);
-    }
-    return val;
-};
-
-/**
- * Set visual property of single data item
- *
- * @param {number} idx
- * @param {string|Object} key
- * @param {*} [value]
- *
- * @example
- *  setItemVisual(0, 'color', color);
- *  setItemVisual(0, {
- *      'color': color
- *  });
- */
-listProto.setItemVisual = function (idx, key, value) {
-    var itemVisual = this._itemVisuals[idx] || {};
-    var hasItemVisual = this.hasItemVisual;
-    this._itemVisuals[idx] = itemVisual;
-
-    if (isObject(key)) {
-        for (var name in key) {
-            if (key.hasOwnProperty(name)) {
-                itemVisual[name] = key[name];
-                hasItemVisual[name] = true;
-            }
-        }
-        return;
-    }
-    itemVisual[key] = value;
-    hasItemVisual[key] = true;
-};
-
-/**
- * Clear itemVisuals and list visual.
- */
-listProto.clearAllVisual = function () {
-    this._visual = {};
-    this._itemVisuals = [];
-    this.hasItemVisual = {};
-};
-
-var setItemDataAndSeriesIndex = function (child) {
-    child.seriesIndex = this.seriesIndex;
-    child.dataIndex = this.dataIndex;
-    child.dataType = this.dataType;
-};
-/**
- * Set graphic element relative to data. It can be set as null
- * @param {number} idx
- * @param {module:zrender/Element} [el]
- */
-listProto.setItemGraphicEl = function (idx, el) {
-    var hostModel = this.hostModel;
-
-    if (el) {
-        // Add data index and series index for indexing the data by element
-        // Useful in tooltip
-        el.dataIndex = idx;
-        el.dataType = this.dataType;
-        el.seriesIndex = hostModel && hostModel.seriesIndex;
-        if (el.type === 'group') {
-            el.traverse(setItemDataAndSeriesIndex, el);
-        }
-    }
-
-    this._graphicEls[idx] = el;
-};
-
-/**
- * @param {number} idx
- * @return {module:zrender/Element}
- */
-listProto.getItemGraphicEl = function (idx) {
-    return this._graphicEls[idx];
-};
-
-/**
- * @param {Function} cb
- * @param {*} context
- */
-listProto.eachItemGraphicEl = function (cb, context) {
-    zrUtil.each(this._graphicEls, function (el, idx) {
-        if (el) {
-            cb && cb.call(context, el, idx);
-        }
-    });
-};
-
-/**
- * Shallow clone a new list except visual and layout properties, and graph elements.
- * New list only change the indices.
- */
-listProto.cloneShallow = function (list) {
-    if (!list) {
-        var dimensionInfoList = zrUtil.map(this.dimensions, this.getDimensionInfo, this);
-        list = new List(dimensionInfoList, this.hostModel);
-    }
-
-    // FIXME
-    list._storage = this._storage;
-
-    transferProperties(list, this);
-
-    // Clone will not change the data extent and indices
-    if (this._indices) {
-        var Ctor = this._indices.constructor;
-        list._indices = new Ctor(this._indices);
-    }
-    else {
-        list._indices = null;
-    }
-    list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;
-
-    return list;
-};
-
-/**
- * Wrap some method to add more feature
- * @param {string} methodName
- * @param {Function} injectFunction
- */
-listProto.wrapMethod = function (methodName, injectFunction) {
-    var originalMethod = this[methodName];
-    if (typeof originalMethod !== 'function') {
-        return;
-    }
-    this.__wrappedMethods = this.__wrappedMethods || [];
-    this.__wrappedMethods.push(methodName);
-    this[methodName] = function () {
-        var res = originalMethod.apply(this, arguments);
-        return injectFunction.apply(this, [res].concat(zrUtil.slice(arguments)));
-    };
-};
-
-// Methods that create a new list based on this list should be listed here.
-// Notice that those method should `RETURN` the new list.
-listProto.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'map'];
-// Methods that change indices of this list should be listed here.
-listProto.CHANGABLE_METHODS = ['filterSelf', 'selectRange'];
-
-export default List;

+ 0 - 147
admin/node_modules/echarts/src/data/OrdinalMeta.js

@@ -1,147 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {createHashMap, isObject, map} from 'zrender/src/core/util';
-
-/**
- * @constructor
- * @param {Object} [opt]
- * @param {Object} [opt.categories=[]]
- * @param {Object} [opt.needCollect=false]
- * @param {Object} [opt.deduplication=false]
- */
-function OrdinalMeta(opt) {
-
-    /**
-     * @readOnly
-     * @type {Array.<string>}
-     */
-    this.categories = opt.categories || [];
-
-    /**
-     * @private
-     * @type {boolean}
-     */
-    this._needCollect = opt.needCollect;
-
-    /**
-     * @private
-     * @type {boolean}
-     */
-    this._deduplication = opt.deduplication;
-
-    /**
-     * @private
-     * @type {boolean}
-     */
-    this._map;
-}
-
-/**
- * @param {module:echarts/model/Model} axisModel
- * @return {module:echarts/data/OrdinalMeta}
- */
-OrdinalMeta.createByAxisModel = function (axisModel) {
-    var option = axisModel.option;
-    var data = option.data;
-    var categories = data && map(data, getName);
-
-    return new OrdinalMeta({
-        categories: categories,
-        needCollect: !categories,
-        // deduplication is default in axis.
-        deduplication: option.dedplication !== false
-    });
-};
-
-var proto = OrdinalMeta.prototype;
-
-/**
- * @param {string} category
- * @return {number} ordinal
- */
-proto.getOrdinal = function (category) {
-    return getOrCreateMap(this).get(category);
-};
-
-/**
- * @param {*} category
- * @return {number} The ordinal. If not found, return NaN.
- */
-proto.parseAndCollect = function (category) {
-    var index;
-    var needCollect = this._needCollect;
-
-    // The value of category dim can be the index of the given category set.
-    // This feature is only supported when !needCollect, because we should
-    // consider a common case: a value is 2017, which is a number but is
-    // expected to be tread as a category. This case usually happen in dataset,
-    // where it happent to be no need of the index feature.
-    if (typeof category !== 'string' && !needCollect) {
-        return category;
-    }
-
-    // Optimize for the scenario:
-    // category is ['2012-01-01', '2012-01-02', ...], where the input
-    // data has been ensured not duplicate and is large data.
-    // Notice, if a dataset dimension provide categroies, usually echarts
-    // should remove duplication except user tell echarts dont do that
-    // (set axis.deduplication = false), because echarts do not know whether
-    // the values in the category dimension has duplication (consider the
-    // parallel-aqi example)
-    if (needCollect && !this._deduplication) {
-        index = this.categories.length;
-        this.categories[index] = category;
-        return index;
-    }
-
-    var map = getOrCreateMap(this);
-    index = map.get(category);
-
-    if (index == null) {
-        if (needCollect) {
-            index = this.categories.length;
-            this.categories[index] = category;
-            map.set(category, index);
-        }
-        else {
-            index = NaN;
-        }
-    }
-
-    return index;
-};
-
-// Consider big data, do not create map until needed.
-function getOrCreateMap(ordinalMeta) {
-    return ordinalMeta._map || (
-        ordinalMeta._map = createHashMap(ordinalMeta.categories)
-    );
-}
-
-function getName(obj) {
-    if (isObject(obj) && obj.value != null) {
-        return obj.value;
-    }
-    else {
-        return obj + '';
-    }
-}
-
-export default OrdinalMeta;

+ 0 - 149
admin/node_modules/echarts/src/data/Source.js

@@ -1,149 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {createHashMap, isTypedArray} from 'zrender/src/core/util';
-import {enableClassCheck} from '../util/clazz';
-import {
-    SOURCE_FORMAT_ORIGINAL,
-    SERIES_LAYOUT_BY_COLUMN,
-    SOURCE_FORMAT_UNKNOWN,
-    SOURCE_FORMAT_TYPED_ARRAY,
-    SOURCE_FORMAT_KEYED_COLUMNS
-} from './helper/sourceType';
-
-/**
- * [sourceFormat]
- *
- * + "original":
- * This format is only used in series.data, where
- * itemStyle can be specified in data item.
- *
- * + "arrayRows":
- * [
- *     ['product', 'score', 'amount'],
- *     ['Matcha Latte', 89.3, 95.8],
- *     ['Milk Tea', 92.1, 89.4],
- *     ['Cheese Cocoa', 94.4, 91.2],
- *     ['Walnut Brownie', 85.4, 76.9]
- * ]
- *
- * + "objectRows":
- * [
- *     {product: 'Matcha Latte', score: 89.3, amount: 95.8},
- *     {product: 'Milk Tea', score: 92.1, amount: 89.4},
- *     {product: 'Cheese Cocoa', score: 94.4, amount: 91.2},
- *     {product: 'Walnut Brownie', score: 85.4, amount: 76.9}
- * ]
- *
- * + "keyedColumns":
- * {
- *     'product': ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie'],
- *     'count': [823, 235, 1042, 988],
- *     'score': [95.8, 81.4, 91.2, 76.9]
- * }
- *
- * + "typedArray"
- *
- * + "unknown"
- */
-
-/**
- * @constructor
- * @param {Object} fields
- * @param {string} fields.sourceFormat
- * @param {Array|Object} fields.fromDataset
- * @param {Array|Object} [fields.data]
- * @param {string} [seriesLayoutBy='column']
- * @param {Array.<Object|string>} [dimensionsDefine]
- * @param {Objet|HashMap} [encodeDefine]
- * @param {number} [startIndex=0]
- * @param {number} [dimensionsDetectCount]
- */
-function Source(fields) {
-
-    /**
-     * @type {boolean}
-     */
-    this.fromDataset = fields.fromDataset;
-
-    /**
-     * Not null/undefined.
-     * @type {Array|Object}
-     */
-    this.data = fields.data || (
-        fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []
-    );
-
-    /**
-     * See also "detectSourceFormat".
-     * Not null/undefined.
-     * @type {string}
-     */
-    this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN;
-
-    /**
-     * 'row' or 'column'
-     * Not null/undefined.
-     * @type {string} seriesLayoutBy
-     */
-    this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN;
-
-    /**
-     * dimensions definition in option.
-     * can be null/undefined.
-     * @type {Array.<Object|string>}
-     */
-    this.dimensionsDefine = fields.dimensionsDefine;
-
-    /**
-     * encode definition in option.
-     * can be null/undefined.
-     * @type {Objet|HashMap}
-     */
-    this.encodeDefine = fields.encodeDefine && createHashMap(fields.encodeDefine);
-
-    /**
-     * Not null/undefined, uint.
-     * @type {number}
-     */
-    this.startIndex = fields.startIndex || 0;
-
-    /**
-     * Can be null/undefined (when unknown), uint.
-     * @type {number}
-     */
-    this.dimensionsDetectCount = fields.dimensionsDetectCount;
-}
-
-/**
- * Wrap original series data for some compatibility cases.
- */
-Source.seriesDataToSource = function (data) {
-    return new Source({
-        data: data,
-        sourceFormat: isTypedArray(data)
-            ? SOURCE_FORMAT_TYPED_ARRAY
-            : SOURCE_FORMAT_ORIGINAL,
-        fromDataset: false
-    });
-};
-
-enableClassCheck(Source);
-
-export default Source;

+ 0 - 536
admin/node_modules/echarts/src/data/Tree.js

@@ -1,536 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Tree data structure
- *
- * @module echarts/data/Tree
- */
-
-import * as zrUtil from 'zrender/src/core/util';
-import Model from '../model/Model';
-import linkList from './helper/linkList';
-import List from './List';
-import createDimensions from './helper/createDimensions';
-
-/**
- * @constructor module:echarts/data/Tree~TreeNode
- * @param {string} name
- * @param {module:echarts/data/Tree} hostTree
- */
-var TreeNode = function (name, hostTree) {
-    /**
-     * @type {string}
-     */
-    this.name = name || '';
-
-    /**
-     * Depth of node
-     *
-     * @type {number}
-     * @readOnly
-     */
-    this.depth = 0;
-
-    /**
-     * Height of the subtree rooted at this node.
-     * @type {number}
-     * @readOnly
-     */
-    this.height = 0;
-
-    /**
-     * @type {module:echarts/data/Tree~TreeNode}
-     * @readOnly
-     */
-    this.parentNode = null;
-
-    /**
-     * Reference to list item.
-     * Do not persistent dataIndex outside,
-     * besause it may be changed by list.
-     * If dataIndex -1,
-     * this node is logical deleted (filtered) in list.
-     *
-     * @type {Object}
-     * @readOnly
-     */
-    this.dataIndex = -1;
-
-    /**
-     * @type {Array.<module:echarts/data/Tree~TreeNode>}
-     * @readOnly
-     */
-    this.children = [];
-
-    /**
-     * @type {Array.<module:echarts/data/Tree~TreeNode>}
-     * @pubilc
-     */
-    this.viewChildren = [];
-
-    /**
-     * @type {moduel:echarts/data/Tree}
-     * @readOnly
-     */
-    this.hostTree = hostTree;
-};
-
-TreeNode.prototype = {
-
-    constructor: TreeNode,
-
-    /**
-     * The node is removed.
-     * @return {boolean} is removed.
-     */
-    isRemoved: function () {
-        return this.dataIndex < 0;
-    },
-
-    /**
-     * Travel this subtree (include this node).
-     * Usage:
-     *    node.eachNode(function () { ... }); // preorder
-     *    node.eachNode('preorder', function () { ... }); // preorder
-     *    node.eachNode('postorder', function () { ... }); // postorder
-     *    node.eachNode(
-     *        {order: 'postorder', attr: 'viewChildren'},
-     *        function () { ... }
-     *    ); // postorder
-     *
-     * @param {(Object|string)} options If string, means order.
-     * @param {string=} options.order 'preorder' or 'postorder'
-     * @param {string=} options.attr 'children' or 'viewChildren'
-     * @param {Function} cb If in preorder and return false,
-     *                      its subtree will not be visited.
-     * @param {Object} [context]
-     */
-    eachNode: function (options, cb, context) {
-        if (typeof options === 'function') {
-            context = cb;
-            cb = options;
-            options = null;
-        }
-
-        options = options || {};
-        if (zrUtil.isString(options)) {
-            options = {order: options};
-        }
-
-        var order = options.order || 'preorder';
-        var children = this[options.attr || 'children'];
-
-        var suppressVisitSub;
-        order === 'preorder' && (suppressVisitSub = cb.call(context, this));
-
-        for (var i = 0; !suppressVisitSub && i < children.length; i++) {
-            children[i].eachNode(options, cb, context);
-        }
-
-        order === 'postorder' && cb.call(context, this);
-    },
-
-    /**
-     * Update depth and height of this subtree.
-     *
-     * @param  {number} depth
-     */
-    updateDepthAndHeight: function (depth) {
-        var height = 0;
-        this.depth = depth;
-        for (var i = 0; i < this.children.length; i++) {
-            var child = this.children[i];
-            child.updateDepthAndHeight(depth + 1);
-            if (child.height > height) {
-                height = child.height;
-            }
-        }
-        this.height = height + 1;
-    },
-
-    /**
-     * @param  {string} id
-     * @return {module:echarts/data/Tree~TreeNode}
-     */
-    getNodeById: function (id) {
-        if (this.getId() === id) {
-            return this;
-        }
-        for (var i = 0, children = this.children, len = children.length; i < len; i++) {
-            var res = children[i].getNodeById(id);
-            if (res) {
-                return res;
-            }
-        }
-    },
-
-    /**
-     * @param {module:echarts/data/Tree~TreeNode} node
-     * @return {boolean}
-     */
-    contains: function (node) {
-        if (node === this) {
-            return true;
-        }
-        for (var i = 0, children = this.children, len = children.length; i < len; i++) {
-            var res = children[i].contains(node);
-            if (res) {
-                return res;
-            }
-        }
-    },
-
-    /**
-     * @param {boolean} includeSelf Default false.
-     * @return {Array.<module:echarts/data/Tree~TreeNode>} order: [root, child, grandchild, ...]
-     */
-    getAncestors: function (includeSelf) {
-        var ancestors = [];
-        var node = includeSelf ? this : this.parentNode;
-        while (node) {
-            ancestors.push(node);
-            node = node.parentNode;
-        }
-        ancestors.reverse();
-        return ancestors;
-    },
-
-    /**
-     * @param {string|Array=} [dimension='value'] Default 'value'. can be 0, 1, 2, 3
-     * @return {number} Value.
-     */
-    getValue: function (dimension) {
-        var data = this.hostTree.data;
-        return data.get(data.getDimension(dimension || 'value'), this.dataIndex);
-    },
-
-    /**
-     * @param {Object} layout
-     * @param {boolean=} [merge=false]
-     */
-    setLayout: function (layout, merge) {
-        this.dataIndex >= 0
-            && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge);
-    },
-
-    /**
-     * @return {Object} layout
-     */
-    getLayout: function () {
-        return this.hostTree.data.getItemLayout(this.dataIndex);
-    },
-
-    /**
-     * @param {string} [path]
-     * @return {module:echarts/model/Model}
-     */
-    getModel: function (path) {
-        if (this.dataIndex < 0) {
-            return;
-        }
-        var hostTree = this.hostTree;
-        var itemModel = hostTree.data.getItemModel(this.dataIndex);
-        var levelModel = this.getLevelModel();
-
-        // FIXME: refactor levelModel to "beforeLink", and remove levelModel here.
-        if (levelModel) {
-            return itemModel.getModel(path, levelModel.getModel(path));
-        }
-        else {
-            return itemModel.getModel(path);
-        }
-    },
-
-    /**
-     * @return {module:echarts/model/Model}
-     */
-    getLevelModel: function () {
-        return (this.hostTree.levelModels || [])[this.depth];
-    },
-
-    /**
-     * @example
-     *  setItemVisual('color', color);
-     *  setItemVisual({
-     *      'color': color
-     *  });
-     */
-    setVisual: function (key, value) {
-        this.dataIndex >= 0
-            && this.hostTree.data.setItemVisual(this.dataIndex, key, value);
-    },
-
-    /**
-     * Get item visual
-     */
-    getVisual: function (key, ignoreParent) {
-        return this.hostTree.data.getItemVisual(this.dataIndex, key, ignoreParent);
-    },
-
-    /**
-     * @public
-     * @return {number}
-     */
-    getRawIndex: function () {
-        return this.hostTree.data.getRawIndex(this.dataIndex);
-    },
-
-    /**
-     * @public
-     * @return {string}
-     */
-    getId: function () {
-        return this.hostTree.data.getId(this.dataIndex);
-    },
-
-    /**
-     * if this is an ancestor of another node
-     *
-     * @public
-     * @param {TreeNode} node another node
-     * @return {boolean} if is ancestor
-     */
-    isAncestorOf: function (node) {
-        var parent = node.parentNode;
-        while (parent) {
-            if (parent === this) {
-                return true;
-            }
-            parent = parent.parentNode;
-        }
-        return false;
-    },
-
-    /**
-     * if this is an descendant of another node
-     *
-     * @public
-     * @param {TreeNode} node another node
-     * @return {boolean} if is descendant
-     */
-    isDescendantOf: function (node) {
-        return node !== this && node.isAncestorOf(this);
-    }
-};
-
-/**
- * @constructor
- * @alias module:echarts/data/Tree
- * @param {module:echarts/model/Model} hostModel
- * @param {Array.<Object>} levelOptions
- */
-function Tree(hostModel, levelOptions) {
-    /**
-     * @type {module:echarts/data/Tree~TreeNode}
-     * @readOnly
-     */
-    this.root;
-
-    /**
-     * @type {module:echarts/data/List}
-     * @readOnly
-     */
-    this.data;
-
-    /**
-     * Index of each item is the same as the raw index of coresponding list item.
-     * @private
-     * @type {Array.<module:echarts/data/Tree~TreeNode}
-     */
-    this._nodes = [];
-
-    /**
-     * @private
-     * @readOnly
-     * @type {module:echarts/model/Model}
-     */
-    this.hostModel = hostModel;
-
-    /**
-     * @private
-     * @readOnly
-     * @type {Array.<module:echarts/model/Model}
-     */
-    this.levelModels = zrUtil.map(levelOptions || [], function (levelDefine) {
-        return new Model(levelDefine, hostModel, hostModel.ecModel);
-    });
-
-}
-
-Tree.prototype = {
-
-    constructor: Tree,
-
-    type: 'tree',
-
-    /**
-     * Travel this subtree (include this node).
-     * Usage:
-     *    node.eachNode(function () { ... }); // preorder
-     *    node.eachNode('preorder', function () { ... }); // preorder
-     *    node.eachNode('postorder', function () { ... }); // postorder
-     *    node.eachNode(
-     *        {order: 'postorder', attr: 'viewChildren'},
-     *        function () { ... }
-     *    ); // postorder
-     *
-     * @param {(Object|string)} options If string, means order.
-     * @param {string=} options.order 'preorder' or 'postorder'
-     * @param {string=} options.attr 'children' or 'viewChildren'
-     * @param {Function} cb
-     * @param {Object}   [context]
-     */
-    eachNode: function (options, cb, context) {
-        this.root.eachNode(options, cb, context);
-    },
-
-    /**
-     * @param {number} dataIndex
-     * @return {module:echarts/data/Tree~TreeNode}
-     */
-    getNodeByDataIndex: function (dataIndex) {
-        var rawIndex = this.data.getRawIndex(dataIndex);
-        return this._nodes[rawIndex];
-    },
-
-    /**
-     * @param {string} name
-     * @return {module:echarts/data/Tree~TreeNode}
-     */
-    getNodeByName: function (name) {
-        return this.root.getNodeByName(name);
-    },
-
-    /**
-     * Update item available by list,
-     * when list has been performed options like 'filterSelf' or 'map'.
-     */
-    update: function () {
-        var data = this.data;
-        var nodes = this._nodes;
-
-        for (var i = 0, len = nodes.length; i < len; i++) {
-            nodes[i].dataIndex = -1;
-        }
-
-        for (var i = 0, len = data.count(); i < len; i++) {
-            nodes[data.getRawIndex(i)].dataIndex = i;
-        }
-    },
-
-    /**
-     * Clear all layouts
-     */
-    clearLayouts: function () {
-        this.data.clearItemLayouts();
-    }
-};
-
-/**
- * data node format:
- * {
- *     name: ...
- *     value: ...
- *     children: [
- *         {
- *             name: ...
- *             value: ...
- *             children: ...
- *         },
- *         ...
- *     ]
- * }
- *
- * @static
- * @param {Object} dataRoot Root node.
- * @param {module:echarts/model/Model} hostModel
- * @param {Object} treeOptions
- * @param {Array.<Object>} treeOptions.levels
- * @return module:echarts/data/Tree
- */
-Tree.createTree = function (dataRoot, hostModel, treeOptions, beforeLink) {
-
-    var tree = new Tree(hostModel, treeOptions && treeOptions.levels);
-    var listData = [];
-    var dimMax = 1;
-
-    buildHierarchy(dataRoot);
-
-    function buildHierarchy(dataNode, parentNode) {
-        var value = dataNode.value;
-        dimMax = Math.max(dimMax, zrUtil.isArray(value) ? value.length : 1);
-
-        listData.push(dataNode);
-
-        var node = new TreeNode(dataNode.name, tree);
-        parentNode
-            ? addChild(node, parentNode)
-            : (tree.root = node);
-
-        tree._nodes.push(node);
-
-        var children = dataNode.children;
-        if (children) {
-            for (var i = 0; i < children.length; i++) {
-                buildHierarchy(children[i], node);
-            }
-        }
-    }
-
-    tree.root.updateDepthAndHeight(0);
-
-    var dimensionsInfo = createDimensions(listData, {
-        coordDimensions: ['value'],
-        dimensionsCount: dimMax
-    });
-
-    var list = new List(dimensionsInfo, hostModel);
-    list.initData(listData);
-
-    beforeLink && beforeLink(list);
-
-    linkList({
-        mainData: list,
-        struct: tree,
-        structAttr: 'tree'
-    });
-
-    tree.update();
-
-    return tree;
-};
-
-/**
- * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote,
- * so this function is not ready and not necessary to be public.
- *
- * @param {(module:echarts/data/Tree~TreeNode|Object)} child
- */
-function addChild(child, node) {
-    var children = node.children;
-    if (child.parentNode === node) {
-        return;
-    }
-
-    children.push(child);
-    child.parentNode = node;
-}
-
-export default Tree;

+ 0 - 298
admin/node_modules/echarts/src/data/helper/completeDimensions.js

@@ -1,298 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * @deprecated
- * Use `echarts/data/helper/createDimensions` instead.
- */
-
-import {createHashMap, each, isString, defaults, extend, isObject, clone} from 'zrender/src/core/util';
-import {normalizeToArray} from '../../util/model';
-import {guessOrdinal, BE_ORDINAL} from './sourceHelper';
-import Source from '../Source';
-import {OTHER_DIMENSIONS} from './dimensionHelper';
-import DataDimensionInfo from '../DataDimensionInfo';
-
-/**
- * @see {module:echarts/test/ut/spec/data/completeDimensions}
- *
- * This method builds the relationship between:
- * + "what the coord sys or series requires (see `sysDims`)",
- * + "what the user defines (in `encode` and `dimensions`, see `opt.dimsDef` and `opt.encodeDef`)"
- * + "what the data source provids (see `source`)".
- *
- * Some guess strategy will be adapted if user does not define something.
- * If no 'value' dimension specified, the first no-named dimension will be
- * named as 'value'.
- *
- * @param {Array.<string>} sysDims Necessary dimensions, like ['x', 'y'], which
- *      provides not only dim template, but also default order.
- *      properties: 'name', 'type', 'displayName'.
- *      `name` of each item provides default coord name.
- *      [{dimsDef: [string|Object, ...]}, ...] dimsDef of sysDim item provides default dim name, and
- *                                    provide dims count that the sysDim required.
- *      [{ordinalMeta}] can be specified.
- * @param {module:echarts/data/Source|Array|Object} source or data (for compatibal with pervious)
- * @param {Object} [opt]
- * @param {Array.<Object|string>} [opt.dimsDef] option.series.dimensions User defined dimensions
- *      For example: ['asdf', {name, type}, ...].
- * @param {Object|HashMap} [opt.encodeDef] option.series.encode {x: 2, y: [3, 1], tooltip: [1, 2], label: 3}
- * @param {Function} [opt.encodeDefaulter] Called if no `opt.encodeDef` exists.
- *      If not specified, auto find the next available data dim.
- *      param source {module:data/Source}
- *      param dimCount {number}
- *      return {Object} encode Never be `null/undefined`.
- * @param {string} [opt.generateCoord] Generate coord dim with the given name.
- *      If not specified, extra dim names will be:
- *      'value', 'value0', 'value1', ...
- * @param {number} [opt.generateCoordCount] By default, the generated dim name is `generateCoord`.
- *      If `generateCoordCount` specified, the generated dim names will be:
- *      `generateCoord` + 0, `generateCoord` + 1, ...
- *      can be Infinity, indicate that use all of the remain columns.
- * @param {number} [opt.dimCount] If not specified, guess by the first data item.
- * @return {Array.<module:data/DataDimensionInfo>}
- */
-function completeDimensions(sysDims, source, opt) {
-    if (!Source.isInstance(source)) {
-        source = Source.seriesDataToSource(source);
-    }
-
-    opt = opt || {};
-    sysDims = (sysDims || []).slice();
-    var dimsDef = (opt.dimsDef || []).slice();
-    var dataDimNameMap = createHashMap();
-    var coordDimNameMap = createHashMap();
-    // var valueCandidate;
-    var result = [];
-
-    var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimCount);
-
-    // Apply user defined dims (`name` and `type`) and init result.
-    for (var i = 0; i < dimCount; i++) {
-        var dimDefItem = dimsDef[i] = extend(
-            {}, isObject(dimsDef[i]) ? dimsDef[i] : {name: dimsDef[i]}
-        );
-        var userDimName = dimDefItem.name;
-        var resultItem = result[i] = new DataDimensionInfo();
-        // Name will be applied later for avoiding duplication.
-        if (userDimName != null && dataDimNameMap.get(userDimName) == null) {
-            // Only if `series.dimensions` is defined in option
-            // displayName, will be set, and dimension will be diplayed vertically in
-            // tooltip by default.
-            resultItem.name = resultItem.displayName = userDimName;
-            dataDimNameMap.set(userDimName, i);
-        }
-        dimDefItem.type != null && (resultItem.type = dimDefItem.type);
-        dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName);
-    }
-
-    var encodeDef = opt.encodeDef;
-    if (!encodeDef && opt.encodeDefaulter) {
-        encodeDef = opt.encodeDefaulter(source, dimCount);
-    }
-    encodeDef = createHashMap(encodeDef);
-
-    // Set `coordDim` and `coordDimIndex` by `encodeDef` and normalize `encodeDef`.
-    encodeDef.each(function (dataDims, coordDim) {
-        dataDims = normalizeToArray(dataDims).slice();
-
-        // Note: It is allowed that `dataDims.length` is `0`, e.g., options is
-        // `{encode: {x: -1, y: 1}}`. Should not filter anything in
-        // this case.
-        if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) {
-            encodeDef.set(coordDim, false);
-            return;
-        }
-
-        var validDataDims = encodeDef.set(coordDim, []);
-        each(dataDims, function (resultDimIdx, idx) {
-            // The input resultDimIdx can be dim name or index.
-            isString(resultDimIdx) && (resultDimIdx = dataDimNameMap.get(resultDimIdx));
-            if (resultDimIdx != null && resultDimIdx < dimCount) {
-                validDataDims[idx] = resultDimIdx;
-                applyDim(result[resultDimIdx], coordDim, idx);
-            }
-        });
-    });
-
-    // Apply templetes and default order from `sysDims`.
-    var availDimIdx = 0;
-    each(sysDims, function (sysDimItem, sysDimIndex) {
-        var coordDim;
-        var sysDimItem;
-        var sysDimItemDimsDef;
-        var sysDimItemOtherDims;
-        if (isString(sysDimItem)) {
-            coordDim = sysDimItem;
-            sysDimItem = {};
-        }
-        else {
-            coordDim = sysDimItem.name;
-            var ordinalMeta = sysDimItem.ordinalMeta;
-            sysDimItem.ordinalMeta = null;
-            sysDimItem = clone(sysDimItem);
-            sysDimItem.ordinalMeta = ordinalMeta;
-            // `coordDimIndex` should not be set directly.
-            sysDimItemDimsDef = sysDimItem.dimsDef;
-            sysDimItemOtherDims = sysDimItem.otherDims;
-            sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex =
-                sysDimItem.dimsDef = sysDimItem.otherDims = null;
-        }
-
-        var dataDims = encodeDef.get(coordDim);
-
-        // negative resultDimIdx means no need to mapping.
-        if (dataDims === false) {
-            return;
-        }
-
-        var dataDims = normalizeToArray(dataDims);
-
-        // dimensions provides default dim sequences.
-        if (!dataDims.length) {
-            for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) {
-                while (availDimIdx < result.length && result[availDimIdx].coordDim != null) {
-                    availDimIdx++;
-                }
-                availDimIdx < result.length && dataDims.push(availDimIdx++);
-            }
-        }
-
-        // Apply templates.
-        each(dataDims, function (resultDimIdx, coordDimIndex) {
-            var resultItem = result[resultDimIdx];
-            applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex);
-            if (resultItem.name == null && sysDimItemDimsDef) {
-                var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex];
-                !isObject(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = {name: sysDimItemDimsDefItem});
-                resultItem.name = resultItem.displayName = sysDimItemDimsDefItem.name;
-                resultItem.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip;
-            }
-            // FIXME refactor, currently only used in case: {otherDims: {tooltip: false}}
-            sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims);
-        });
-    });
-
-    function applyDim(resultItem, coordDim, coordDimIndex) {
-        if (OTHER_DIMENSIONS.get(coordDim) != null) {
-            resultItem.otherDims[coordDim] = coordDimIndex;
-        }
-        else {
-            resultItem.coordDim = coordDim;
-            resultItem.coordDimIndex = coordDimIndex;
-            coordDimNameMap.set(coordDim, true);
-        }
-    }
-
-    // Make sure the first extra dim is 'value'.
-    var generateCoord = opt.generateCoord;
-    var generateCoordCount = opt.generateCoordCount;
-    var fromZero = generateCoordCount != null;
-    generateCoordCount = generateCoord ? (generateCoordCount || 1) : 0;
-    var extra = generateCoord || 'value';
-
-    // Set dim `name` and other `coordDim` and other props.
-    for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) {
-        var resultItem = result[resultDimIdx] = result[resultDimIdx] || new DataDimensionInfo();
-        var coordDim = resultItem.coordDim;
-
-        if (coordDim == null) {
-            resultItem.coordDim = genName(
-                extra, coordDimNameMap, fromZero
-            );
-            resultItem.coordDimIndex = 0;
-            if (!generateCoord || generateCoordCount <= 0) {
-                resultItem.isExtraCoord = true;
-            }
-            generateCoordCount--;
-        }
-
-        resultItem.name == null && (resultItem.name = genName(
-            resultItem.coordDim,
-            dataDimNameMap
-        ));
-
-        if (resultItem.type == null
-            && (
-                guessOrdinal(source, resultDimIdx, resultItem.name) === BE_ORDINAL.Must
-                // Consider the case:
-                // {
-                //    dataset: {source: [
-                //        ['2001', 123],
-                //        ['2002', 456],
-                //        ...
-                //        ['The others', 987],
-                //    ]},
-                //    series: {type: 'pie'}
-                // }
-                // The first colum should better be treated as a "ordinal" although it
-                // might not able to be detected as an "ordinal" by `guessOrdinal`.
-                || (resultItem.isExtraCoord
-                    && (resultItem.otherDims.itemName != null
-                        || resultItem.otherDims.seriesName != null
-                    )
-                )
-            )
-        ) {
-            resultItem.type = 'ordinal';
-        }
-    }
-
-    return result;
-}
-
-// ??? TODO
-// Originally detect dimCount by data[0]. Should we
-// optimize it to only by sysDims and dimensions and encode.
-// So only necessary dims will be initialized.
-// But
-// (1) custom series should be considered. where other dims
-// may be visited.
-// (2) sometimes user need to calcualte bubble size or use visualMap
-// on other dimensions besides coordSys needed.
-// So, dims that is not used by system, should be shared in storage?
-function getDimCount(source, sysDims, dimsDef, optDimCount) {
-    // Note that the result dimCount should not small than columns count
-    // of data, otherwise `dataDimNameMap` checking will be incorrect.
-    var dimCount = Math.max(
-        source.dimensionsDetectCount || 1,
-        sysDims.length,
-        dimsDef.length,
-        optDimCount || 0
-    );
-    each(sysDims, function (sysDimItem) {
-        var sysDimItemDimsDef = sysDimItem.dimsDef;
-        sysDimItemDimsDef && (dimCount = Math.max(dimCount, sysDimItemDimsDef.length));
-    });
-    return dimCount;
-}
-
-function genName(name, map, fromZero) {
-    if (fromZero || map.get(name) != null) {
-        var i = 0;
-        while (map.get(name + i) != null) {
-            i++;
-        }
-        name += i;
-    }
-    map.set(name, true);
-    return name;
-}
-
-export default completeDimensions;

+ 0 - 48
admin/node_modules/echarts/src/data/helper/createDimensions.js

@@ -1,48 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Substitute `completeDimensions`.
- * `completeDimensions` is to be deprecated.
- */
-import completeDimensions from './completeDimensions';
-
-/**
- * @param {module:echarts/data/Source|module:echarts/data/List} source or data.
- * @param {Object|Array} [opt]
- * @param {Array.<string|Object>} [opt.coordDimensions=[]]
- * @param {number} [opt.dimensionsCount]
- * @param {string} [opt.generateCoord]
- * @param {string} [opt.generateCoordCount]
- * @param {Array.<string|Object>} [opt.dimensionsDefine=source.dimensionsDefine] Overwrite source define.
- * @param {Object|HashMap} [opt.encodeDefine=source.encodeDefine] Overwrite source define.
- * @param {Function} [opt.encodeDefaulter] Make default encode if user not specified.
- * @return {Array.<Object>} dimensionsInfo
- */
-export default function (source, opt) {
-    opt = opt || {};
-    return completeDimensions(opt.coordDimensions || [], source, {
-        dimsDef: opt.dimensionsDefine || source.dimensionsDefine,
-        encodeDef: opt.encodeDefine || source.encodeDefine,
-        dimCount: opt.dimensionsCount,
-        encodeDefaulter: opt.encodeDefaulter,
-        generateCoord: opt.generateCoord,
-        generateCoordCount: opt.generateCoordCount
-    });
-}

+ 0 - 382
admin/node_modules/echarts/src/data/helper/dataProvider.js

@@ -1,382 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// TODO
-// ??? refactor? check the outer usage of data provider.
-// merge with defaultDimValueGetter?
-
-import {__DEV__} from '../../config';
-import {isTypedArray, extend, assert, each, isObject} from 'zrender/src/core/util';
-import {getDataItemValue, isDataItemOption} from '../../util/model';
-import {parseDate} from '../../util/number';
-import Source from '../Source';
-import {
-    SOURCE_FORMAT_TYPED_ARRAY,
-    SOURCE_FORMAT_ARRAY_ROWS,
-    SOURCE_FORMAT_ORIGINAL,
-    SOURCE_FORMAT_OBJECT_ROWS
-} from './sourceType';
-
-/**
- * If normal array used, mutable chunk size is supported.
- * If typed array used, chunk size must be fixed.
- */
-export function DefaultDataProvider(source, dimSize) {
-    if (!Source.isInstance(source)) {
-        source = Source.seriesDataToSource(source);
-    }
-    this._source = source;
-
-    var data = this._data = source.data;
-    var sourceFormat = source.sourceFormat;
-
-    // Typed array. TODO IE10+?
-    if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {
-        if (__DEV__) {
-            if (dimSize == null) {
-                throw new Error('Typed array data must specify dimension size');
-            }
-        }
-        this._offset = 0;
-        this._dimSize = dimSize;
-        this._data = data;
-    }
-
-    var methods = providerMethods[
-        sourceFormat === SOURCE_FORMAT_ARRAY_ROWS
-        ? sourceFormat + '_' + source.seriesLayoutBy
-        : sourceFormat
-    ];
-
-    if (__DEV__) {
-        assert(methods, 'Invalide sourceFormat: ' + sourceFormat);
-    }
-
-    extend(this, methods);
-}
-
-var providerProto = DefaultDataProvider.prototype;
-// If data is pure without style configuration
-providerProto.pure = false;
-// If data is persistent and will not be released after use.
-providerProto.persistent = true;
-
-// ???! FIXME legacy data provider do not has method getSource
-providerProto.getSource = function () {
-    return this._source;
-};
-
-var providerMethods = {
-
-    'arrayRows_column': {
-        pure: true,
-        count: function () {
-            return Math.max(0, this._data.length - this._source.startIndex);
-        },
-        getItem: function (idx) {
-            return this._data[idx + this._source.startIndex];
-        },
-        appendData: appendDataSimply
-    },
-
-    'arrayRows_row': {
-        pure: true,
-        count: function () {
-            var row = this._data[0];
-            return row ? Math.max(0, row.length - this._source.startIndex) : 0;
-        },
-        getItem: function (idx) {
-            idx += this._source.startIndex;
-            var item = [];
-            var data = this._data;
-            for (var i = 0; i < data.length; i++) {
-                var row = data[i];
-                item.push(row ? row[idx] : null);
-            }
-            return item;
-        },
-        appendData: function () {
-            throw new Error('Do not support appendData when set seriesLayoutBy: "row".');
-        }
-    },
-
-    'objectRows': {
-        pure: true,
-        count: countSimply,
-        getItem: getItemSimply,
-        appendData: appendDataSimply
-    },
-
-    'keyedColumns': {
-        pure: true,
-        count: function () {
-            var dimName = this._source.dimensionsDefine[0].name;
-            var col = this._data[dimName];
-            return col ? col.length : 0;
-        },
-        getItem: function (idx) {
-            var item = [];
-            var dims = this._source.dimensionsDefine;
-            for (var i = 0; i < dims.length; i++) {
-                var col = this._data[dims[i].name];
-                item.push(col ? col[idx] : null);
-            }
-            return item;
-        },
-        appendData: function (newData) {
-            var data = this._data;
-            each(newData, function (newCol, key) {
-                var oldCol = data[key] || (data[key] = []);
-                for (var i = 0; i < (newCol || []).length; i++) {
-                    oldCol.push(newCol[i]);
-                }
-            });
-        }
-    },
-
-    'original': {
-        count: countSimply,
-        getItem: getItemSimply,
-        appendData: appendDataSimply
-    },
-
-    'typedArray': {
-        persistent: false,
-        pure: true,
-        count: function () {
-            return this._data ? (this._data.length / this._dimSize) : 0;
-        },
-        getItem: function (idx, out) {
-            idx = idx - this._offset;
-            out = out || [];
-            var offset = this._dimSize * idx;
-            for (var i = 0; i < this._dimSize; i++) {
-                out[i] = this._data[offset + i];
-            }
-            return out;
-        },
-        appendData: function (newData) {
-            if (__DEV__) {
-                assert(
-                    isTypedArray(newData),
-                    'Added data must be TypedArray if data in initialization is TypedArray'
-                );
-            }
-
-            this._data = newData;
-        },
-
-        // Clean self if data is already used.
-        clean: function () {
-            // PENDING
-            this._offset += this.count();
-            this._data = null;
-        }
-    }
-};
-
-function countSimply() {
-    return this._data.length;
-}
-function getItemSimply(idx) {
-    return this._data[idx];
-}
-function appendDataSimply(newData) {
-    for (var i = 0; i < newData.length; i++) {
-        this._data.push(newData[i]);
-    }
-}
-
-
-
-var rawValueGetters = {
-
-    arrayRows: getRawValueSimply,
-
-    objectRows: function (dataItem, dataIndex, dimIndex, dimName) {
-        return dimIndex != null ? dataItem[dimName] : dataItem;
-    },
-
-    keyedColumns: getRawValueSimply,
-
-    original: function (dataItem, dataIndex, dimIndex, dimName) {
-        // FIXME
-        // In some case (markpoint in geo (geo-map.html)), dataItem
-        // is {coord: [...]}
-        var value = getDataItemValue(dataItem);
-        return (dimIndex == null || !(value instanceof Array))
-            ? value
-            : value[dimIndex];
-    },
-
-    typedArray: getRawValueSimply
-};
-
-function getRawValueSimply(dataItem, dataIndex, dimIndex, dimName) {
-    return dimIndex != null ? dataItem[dimIndex] : dataItem;
-}
-
-
-export var defaultDimValueGetters = {
-
-    arrayRows: getDimValueSimply,
-
-    objectRows: function (dataItem, dimName, dataIndex, dimIndex) {
-        return converDataValue(dataItem[dimName], this._dimensionInfos[dimName]);
-    },
-
-    keyedColumns: getDimValueSimply,
-
-    original: function (dataItem, dimName, dataIndex, dimIndex) {
-        // Performance sensitive, do not use modelUtil.getDataItemValue.
-        // If dataItem is an plain object with no value field, the var `value`
-        // will be assigned with the object, but it will be tread correctly
-        // in the `convertDataValue`.
-        var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value);
-
-        // If any dataItem is like { value: 10 }
-        if (!this._rawData.pure && isDataItemOption(dataItem)) {
-            this.hasItemOption = true;
-        }
-        return converDataValue(
-            (value instanceof Array)
-                ? value[dimIndex]
-                // If value is a single number or something else not array.
-                : value,
-            this._dimensionInfos[dimName]
-        );
-    },
-
-    typedArray: function (dataItem, dimName, dataIndex, dimIndex) {
-        return dataItem[dimIndex];
-    }
-
-};
-
-function getDimValueSimply(dataItem, dimName, dataIndex, dimIndex) {
-    return converDataValue(dataItem[dimIndex], this._dimensionInfos[dimName]);
-}
-
-/**
- * This helper method convert value in data.
- * @param {string|number|Date} value
- * @param {Object|string} [dimInfo] If string (like 'x'), dimType defaults 'number'.
- *        If "dimInfo.ordinalParseAndSave", ordinal value can be parsed.
- */
-function converDataValue(value, dimInfo) {
-    // Performance sensitive.
-    var dimType = dimInfo && dimInfo.type;
-    if (dimType === 'ordinal') {
-        // If given value is a category string
-        var ordinalMeta = dimInfo && dimInfo.ordinalMeta;
-        return ordinalMeta
-            ? ordinalMeta.parseAndCollect(value)
-            : value;
-    }
-
-    if (dimType === 'time'
-        // spead up when using timestamp
-        && typeof value !== 'number'
-        && value != null
-        && value !== '-'
-    ) {
-        value = +parseDate(value);
-    }
-
-    // dimType defaults 'number'.
-    // If dimType is not ordinal and value is null or undefined or NaN or '-',
-    // parse to NaN.
-    return (value == null || value === '')
-        ? NaN
-        // If string (like '-'), using '+' parse to NaN
-        // If object, also parse to NaN
-        : +value;
-}
-
-// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem,
-// Consider persistent.
-// Caution: why use raw value to display on label or tooltip?
-// A reason is to avoid format. For example time value we do not know
-// how to format is expected. More over, if stack is used, calculated
-// value may be 0.91000000001, which have brings trouble to display.
-// TODO: consider how to treat null/undefined/NaN when display?
-/**
- * @param {module:echarts/data/List} data
- * @param {number} dataIndex
- * @param {string|number} [dim] dimName or dimIndex
- * @return {Array.<number>|string|number} can be null/undefined.
- */
-export function retrieveRawValue(data, dataIndex, dim) {
-    if (!data) {
-        return;
-    }
-
-    // Consider data may be not persistent.
-    var dataItem = data.getRawDataItem(dataIndex);
-
-    if (dataItem == null) {
-        return;
-    }
-
-    var sourceFormat = data.getProvider().getSource().sourceFormat;
-    var dimName;
-    var dimIndex;
-
-    var dimInfo = data.getDimensionInfo(dim);
-    if (dimInfo) {
-        dimName = dimInfo.name;
-        dimIndex = dimInfo.index;
-    }
-
-    return rawValueGetters[sourceFormat](dataItem, dataIndex, dimIndex, dimName);
-}
-
-/**
- * Compatible with some cases (in pie, map) like:
- * data: [{name: 'xx', value: 5, selected: true}, ...]
- * where only sourceFormat is 'original' and 'objectRows' supported.
- *
- * ??? TODO
- * Supported detail options in data item when using 'arrayRows'.
- *
- * @param {module:echarts/data/List} data
- * @param {number} dataIndex
- * @param {string} attr like 'selected'
- */
-export function retrieveRawAttr(data, dataIndex, attr) {
-    if (!data) {
-        return;
-    }
-
-    var sourceFormat = data.getProvider().getSource().sourceFormat;
-
-    if (sourceFormat !== SOURCE_FORMAT_ORIGINAL
-        && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS
-    ) {
-        return;
-    }
-
-    var dataItem = data.getRawDataItem(dataIndex);
-    if (sourceFormat === SOURCE_FORMAT_ORIGINAL && !isObject(dataItem)) {
-        dataItem = null;
-    }
-    if (dataItem) {
-        return dataItem[attr];
-    }
-}

+ 0 - 162
admin/node_modules/echarts/src/data/helper/dataStackHelper.js

@@ -1,162 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {each, isString} from 'zrender/src/core/util';
-
-/**
- * Note that it is too complicated to support 3d stack by value
- * (have to create two-dimension inverted index), so in 3d case
- * we just support that stacked by index.
- *
- * @param {module:echarts/model/Series} seriesModel
- * @param {Array.<string|Object>} dimensionInfoList The same as the input of <module:echarts/data/List>.
- *        The input dimensionInfoList will be modified.
- * @param {Object} [opt]
- * @param {boolean} [opt.stackedCoordDimension=''] Specify a coord dimension if needed.
- * @param {boolean} [opt.byIndex=false]
- * @return {Object} calculationInfo
- * {
- *     stackedDimension: string
- *     stackedByDimension: string
- *     isStackedByIndex: boolean
- *     stackedOverDimension: string
- *     stackResultDimension: string
- * }
- */
-export function enableDataStack(seriesModel, dimensionInfoList, opt) {
-    opt = opt || {};
-    var byIndex = opt.byIndex;
-    var stackedCoordDimension = opt.stackedCoordDimension;
-
-    // Compatibal: when `stack` is set as '', do not stack.
-    var mayStack = !!(seriesModel && seriesModel.get('stack'));
-    var stackedByDimInfo;
-    var stackedDimInfo;
-    var stackResultDimension;
-    var stackedOverDimension;
-
-    each(dimensionInfoList, function (dimensionInfo, index) {
-        if (isString(dimensionInfo)) {
-            dimensionInfoList[index] = dimensionInfo = {name: dimensionInfo};
-        }
-
-        if (mayStack && !dimensionInfo.isExtraCoord) {
-            // Find the first ordinal dimension as the stackedByDimInfo.
-            if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) {
-                stackedByDimInfo = dimensionInfo;
-            }
-            // Find the first stackable dimension as the stackedDimInfo.
-            if (!stackedDimInfo
-                && dimensionInfo.type !== 'ordinal'
-                && dimensionInfo.type !== 'time'
-                && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)
-            ) {
-                stackedDimInfo = dimensionInfo;
-            }
-        }
-    });
-
-    if (stackedDimInfo && !byIndex && !stackedByDimInfo) {
-        // Compatible with previous design, value axis (time axis) only stack by index.
-        // It may make sense if the user provides elaborately constructed data.
-        byIndex = true;
-    }
-
-    // Add stack dimension, they can be both calculated by coordinate system in `unionExtent`.
-    // That put stack logic in List is for using conveniently in echarts extensions, but it
-    // might not be a good way.
-    if (stackedDimInfo) {
-        // Use a weird name that not duplicated with other names.
-        stackResultDimension = '__\0ecstackresult';
-        stackedOverDimension = '__\0ecstackedover';
-
-        // Create inverted index to fast query index by value.
-        if (stackedByDimInfo) {
-            stackedByDimInfo.createInvertedIndices = true;
-        }
-
-        var stackedDimCoordDim = stackedDimInfo.coordDim;
-        var stackedDimType = stackedDimInfo.type;
-        var stackedDimCoordIndex = 0;
-
-        each(dimensionInfoList, function (dimensionInfo) {
-            if (dimensionInfo.coordDim === stackedDimCoordDim) {
-                stackedDimCoordIndex++;
-            }
-        });
-
-        dimensionInfoList.push({
-            name: stackResultDimension,
-            coordDim: stackedDimCoordDim,
-            coordDimIndex: stackedDimCoordIndex,
-            type: stackedDimType,
-            isExtraCoord: true,
-            isCalculationCoord: true
-        });
-
-        stackedDimCoordIndex++;
-
-        dimensionInfoList.push({
-            name: stackedOverDimension,
-            // This dimension contains stack base (generally, 0), so do not set it as
-            // `stackedDimCoordDim` to avoid extent calculation, consider log scale.
-            coordDim: stackedOverDimension,
-            coordDimIndex: stackedDimCoordIndex,
-            type: stackedDimType,
-            isExtraCoord: true,
-            isCalculationCoord: true
-        });
-    }
-
-    return {
-        stackedDimension: stackedDimInfo && stackedDimInfo.name,
-        stackedByDimension: stackedByDimInfo && stackedByDimInfo.name,
-        isStackedByIndex: byIndex,
-        stackedOverDimension: stackedOverDimension,
-        stackResultDimension: stackResultDimension
-    };
-}
-
-/**
- * @param {module:echarts/data/List} data
- * @param {string} stackedDim
- */
-export function isDimensionStacked(data, stackedDim /*, stackedByDim*/) {
-    // Each single series only maps to one pair of axis. So we do not need to
-    // check stackByDim, whatever stacked by a dimension or stacked by index.
-    return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension');
-        // && (
-        //     stackedByDim != null
-        //         ? stackedByDim === data.getCalculationInfo('stackedByDimension')
-        //         : data.getCalculationInfo('isStackedByIndex')
-        // );
-}
-
-/**
- * @param {module:echarts/data/List} data
- * @param {string} targetDim
- * @param {string} [stackedByDim] If not input this parameter, check whether
- *                                stacked by index.
- * @return {string} dimension
- */
-export function getStackedDimension(data, targetDim) {
-    return isDimensionStacked(data, targetDim)
-        ? data.getCalculationInfo('stackResultDimension')
-        : targetDim;
-}

+ 0 - 152
admin/node_modules/echarts/src/data/helper/dimensionHelper.js

@@ -1,152 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {each, createHashMap, assert} from 'zrender/src/core/util';
-import { __DEV__ } from '../../config';
-
-export var OTHER_DIMENSIONS = createHashMap([
-    'tooltip', 'label', 'itemName', 'itemId', 'seriesName'
-]);
-
-export function summarizeDimensions(data) {
-    var summary = {};
-    var encode = summary.encode = {};
-    var notExtraCoordDimMap = createHashMap();
-    var defaultedLabel = [];
-    var defaultedTooltip = [];
-
-    // See the comment of `List.js#userOutput`.
-    var userOutput = summary.userOutput = {
-        dimensionNames: data.dimensions.slice(),
-        encode: {}
-    };
-
-    each(data.dimensions, function (dimName) {
-        var dimItem = data.getDimensionInfo(dimName);
-
-        var coordDim = dimItem.coordDim;
-        if (coordDim) {
-            if (__DEV__) {
-                assert(OTHER_DIMENSIONS.get(coordDim) == null);
-            }
-
-            var coordDimIndex = dimItem.coordDimIndex;
-            getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName;
-
-            if (!dimItem.isExtraCoord) {
-                notExtraCoordDimMap.set(coordDim, 1);
-
-                // Use the last coord dim (and label friendly) as default label,
-                // because when dataset is used, it is hard to guess which dimension
-                // can be value dimension. If both show x, y on label is not look good,
-                // and conventionally y axis is focused more.
-                if (mayLabelDimType(dimItem.type)) {
-                    defaultedLabel[0] = dimName;
-                }
-
-                // User output encode do not contain generated coords.
-                // And it only has index. User can use index to retrieve value from the raw item array.
-                getOrCreateEncodeArr(userOutput.encode, coordDim)[coordDimIndex] = dimItem.index;
-            }
-            if (dimItem.defaultTooltip) {
-                defaultedTooltip.push(dimName);
-            }
-        }
-
-        OTHER_DIMENSIONS.each(function (v, otherDim) {
-            var encodeArr = getOrCreateEncodeArr(encode, otherDim);
-
-            var dimIndex = dimItem.otherDims[otherDim];
-            if (dimIndex != null && dimIndex !== false) {
-                encodeArr[dimIndex] = dimItem.name;
-            }
-        });
-    });
-
-    var dataDimsOnCoord = [];
-    var encodeFirstDimNotExtra = {};
-
-    notExtraCoordDimMap.each(function (v, coordDim) {
-        var dimArr = encode[coordDim];
-        // ??? FIXME extra coord should not be set in dataDimsOnCoord.
-        // But should fix the case that radar axes: simplify the logic
-        // of `completeDimension`, remove `extraPrefix`.
-        encodeFirstDimNotExtra[coordDim] = dimArr[0];
-        // Not necessary to remove duplicate, because a data
-        // dim canot on more than one coordDim.
-        dataDimsOnCoord = dataDimsOnCoord.concat(dimArr);
-    });
-
-    summary.dataDimsOnCoord = dataDimsOnCoord;
-    summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra;
-
-    var encodeLabel = encode.label;
-    // FIXME `encode.label` is not recommanded, because formatter can not be set
-    // in this way. Use label.formatter instead. May be remove this approach someday.
-    if (encodeLabel && encodeLabel.length) {
-        defaultedLabel = encodeLabel.slice();
-    }
-
-    var encodeTooltip = encode.tooltip;
-    if (encodeTooltip && encodeTooltip.length) {
-        defaultedTooltip = encodeTooltip.slice();
-    }
-    else if (!defaultedTooltip.length) {
-        defaultedTooltip = defaultedLabel.slice();
-    }
-
-    encode.defaultedLabel = defaultedLabel;
-    encode.defaultedTooltip = defaultedTooltip;
-
-    return summary;
-}
-
-function getOrCreateEncodeArr(encode, dim) {
-    if (!encode.hasOwnProperty(dim)) {
-        encode[dim] = [];
-    }
-    return encode[dim];
-}
-
-export function getDimensionTypeByAxis(axisType) {
-    return axisType === 'category'
-        ? 'ordinal'
-        : axisType === 'time'
-        ? 'time'
-        : 'float';
-}
-
-function mayLabelDimType(dimType) {
-    // In most cases, ordinal and time do not suitable for label.
-    // Ordinal info can be displayed on axis. Time is too long.
-    return !(dimType === 'ordinal' || dimType === 'time');
-}
-
-// function findTheLastDimMayLabel(data) {
-//     // Get last value dim
-//     var dimensions = data.dimensions.slice();
-//     var valueType;
-//     var valueDim;
-//     while (dimensions.length && (
-//         valueDim = dimensions.pop(),
-//         valueType = data.getDimensionInfo(valueDim).type,
-//         valueType === 'ordinal' || valueType === 'time'
-//     )) {} // jshint ignore:line
-//     return valueDim;
-// }

+ 0 - 151
admin/node_modules/echarts/src/data/helper/linkList.js

@@ -1,151 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Link lists and struct (graph or tree)
- */
-
-import * as zrUtil from 'zrender/src/core/util';
-
-var each = zrUtil.each;
-
-var DATAS = '\0__link_datas';
-var MAIN_DATA = '\0__link_mainData';
-
-// Caution:
-// In most case, either list or its shallow clones (see list.cloneShallow)
-// is active in echarts process. So considering heap memory consumption,
-// we do not clone tree or graph, but share them among list and its shallow clones.
-// But in some rare case, we have to keep old list (like do animation in chart). So
-// please take care that both the old list and the new list share the same tree/graph.
-
-/**
- * @param {Object} opt
- * @param {module:echarts/data/List} opt.mainData
- * @param {Object} [opt.struct] For example, instance of Graph or Tree.
- * @param {string} [opt.structAttr] designation: list[structAttr] = struct;
- * @param {Object} [opt.datas] {dataType: data},
- *                 like: {node: nodeList, edge: edgeList}.
- *                 Should contain mainData.
- * @param {Object} [opt.datasAttr] {dataType: attr},
- *                 designation: struct[datasAttr[dataType]] = list;
- */
-function linkList(opt) {
-    var mainData = opt.mainData;
-    var datas = opt.datas;
-
-    if (!datas) {
-        datas = {main: mainData};
-        opt.datasAttr = {main: 'data'};
-    }
-    opt.datas = opt.mainData = null;
-
-    linkAll(mainData, datas, opt);
-
-    // Porxy data original methods.
-    each(datas, function (data) {
-        each(mainData.TRANSFERABLE_METHODS, function (methodName) {
-            data.wrapMethod(methodName, zrUtil.curry(transferInjection, opt));
-        });
-
-    });
-
-    // Beyond transfer, additional features should be added to `cloneShallow`.
-    mainData.wrapMethod('cloneShallow', zrUtil.curry(cloneShallowInjection, opt));
-
-    // Only mainData trigger change, because struct.update may trigger
-    // another changable methods, which may bring about dead lock.
-    each(mainData.CHANGABLE_METHODS, function (methodName) {
-        mainData.wrapMethod(methodName, zrUtil.curry(changeInjection, opt));
-    });
-
-    // Make sure datas contains mainData.
-    zrUtil.assert(datas[mainData.dataType] === mainData);
-}
-
-function transferInjection(opt, res) {
-    if (isMainData(this)) {
-        // Transfer datas to new main data.
-        var datas = zrUtil.extend({}, this[DATAS]);
-        datas[this.dataType] = res;
-        linkAll(res, datas, opt);
-    }
-    else {
-        // Modify the reference in main data to point newData.
-        linkSingle(res, this.dataType, this[MAIN_DATA], opt);
-    }
-    return res;
-}
-
-function changeInjection(opt, res) {
-    opt.struct && opt.struct.update(this);
-    return res;
-}
-
-function cloneShallowInjection(opt, res) {
-    // cloneShallow, which brings about some fragilities, may be inappropriate
-    // to be exposed as an API. So for implementation simplicity we can make
-    // the restriction that cloneShallow of not-mainData should not be invoked
-    // outside, but only be invoked here.
-    each(res[DATAS], function (data, dataType) {
-        data !== res && linkSingle(data.cloneShallow(), dataType, res, opt);
-    });
-    return res;
-}
-
-/**
- * Supplement method to List.
- *
- * @public
- * @param {string} [dataType] If not specified, return mainData.
- * @return {module:echarts/data/List}
- */
-function getLinkedData(dataType) {
-    var mainData = this[MAIN_DATA];
-    return (dataType == null || mainData == null)
-        ? mainData
-        : mainData[DATAS][dataType];
-}
-
-function isMainData(data) {
-    return data[MAIN_DATA] === data;
-}
-
-function linkAll(mainData, datas, opt) {
-    mainData[DATAS] = {};
-    each(datas, function (data, dataType) {
-        linkSingle(data, dataType, mainData, opt);
-    });
-}
-
-function linkSingle(data, dataType, mainData, opt) {
-    mainData[DATAS][dataType] = data;
-    data[MAIN_DATA] = mainData;
-    data.dataType = dataType;
-
-    if (opt.struct) {
-        data[opt.structAttr] = opt.struct;
-        opt.struct[opt.datasAttr[dataType]] = data;
-    }
-
-    // Supplement method.
-    data.getLinkedData = getLinkedData;
-}
-
-export default linkList;

+ 0 - 679
admin/node_modules/echarts/src/data/helper/sourceHelper.js

@@ -1,679 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import {__DEV__} from '../../config';
-import {makeInner, getDataItemValue} from '../../util/model';
-import {
-    createHashMap,
-    each,
-    map,
-    isArray,
-    isString,
-    isObject,
-    isTypedArray,
-    isArrayLike,
-    extend,
-    assert
-} from 'zrender/src/core/util';
-import Source from '../Source';
-
-import {
-    SOURCE_FORMAT_ORIGINAL,
-    SOURCE_FORMAT_ARRAY_ROWS,
-    SOURCE_FORMAT_OBJECT_ROWS,
-    SOURCE_FORMAT_KEYED_COLUMNS,
-    SOURCE_FORMAT_UNKNOWN,
-    SOURCE_FORMAT_TYPED_ARRAY,
-    SERIES_LAYOUT_BY_ROW
-} from './sourceType';
-
-// The result of `guessOrdinal`.
-export var BE_ORDINAL = {
-    Must: 1, // Encounter string but not '-' and not number-like.
-    Might: 2, // Encounter string but number-like.
-    Not: 3 // Other cases
-};
-
-var inner = makeInner();
-
-/**
- * @see {module:echarts/data/Source}
- * @param {module:echarts/component/dataset/DatasetModel} datasetModel
- * @return {string} sourceFormat
- */
-export function detectSourceFormat(datasetModel) {
-    var data = datasetModel.option.source;
-    var sourceFormat = SOURCE_FORMAT_UNKNOWN;
-
-    if (isTypedArray(data)) {
-        sourceFormat = SOURCE_FORMAT_TYPED_ARRAY;
-    }
-    else if (isArray(data)) {
-        // FIXME Whether tolerate null in top level array?
-        if (data.length === 0) {
-            sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;
-        }
-
-        for (var i = 0, len = data.length; i < len; i++) {
-            var item = data[i];
-
-            if (item == null) {
-                continue;
-            }
-            else if (isArray(item)) {
-                sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;
-                break;
-            }
-            else if (isObject(item)) {
-                sourceFormat = SOURCE_FORMAT_OBJECT_ROWS;
-                break;
-            }
-        }
-    }
-    else if (isObject(data)) {
-        for (var key in data) {
-            if (data.hasOwnProperty(key) && isArrayLike(data[key])) {
-                sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS;
-                break;
-            }
-        }
-    }
-    else if (data != null) {
-        throw new Error('Invalid data');
-    }
-
-    inner(datasetModel).sourceFormat = sourceFormat;
-}
-
-/**
- * [Scenarios]:
- * (1) Provide source data directly:
- *     series: {
- *         encode: {...},
- *         dimensions: [...]
- *         seriesLayoutBy: 'row',
- *         data: [[...]]
- *     }
- * (2) Refer to datasetModel.
- *     series: [{
- *         encode: {...}
- *         // Ignore datasetIndex means `datasetIndex: 0`
- *         // and the dimensions defination in dataset is used
- *     }, {
- *         encode: {...},
- *         seriesLayoutBy: 'column',
- *         datasetIndex: 1
- *     }]
- *
- * Get data from series itself or datset.
- * @return {module:echarts/data/Source} source
- */
-export function getSource(seriesModel) {
-    return inner(seriesModel).source;
-}
-
-/**
- * MUST be called before mergeOption of all series.
- * @param {module:echarts/model/Global} ecModel
- */
-export function resetSourceDefaulter(ecModel) {
-    // `datasetMap` is used to make default encode.
-    inner(ecModel).datasetMap = createHashMap();
-}
-
-/**
- * [Caution]:
- * MUST be called after series option merged and
- * before "series.getInitailData()" called.
- *
- * [The rule of making default encode]:
- * Category axis (if exists) alway map to the first dimension.
- * Each other axis occupies a subsequent dimension.
- *
- * [Why make default encode]:
- * Simplify the typing of encode in option, avoiding the case like that:
- * series: [{encode: {x: 0, y: 1}}, {encode: {x: 0, y: 2}}, {encode: {x: 0, y: 3}}],
- * where the "y" have to be manually typed as "1, 2, 3, ...".
- *
- * @param {module:echarts/model/Series} seriesModel
- */
-export function prepareSource(seriesModel) {
-    var seriesOption = seriesModel.option;
-
-    var data = seriesOption.data;
-    var sourceFormat = isTypedArray(data)
-        ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL;
-    var fromDataset = false;
-
-    var seriesLayoutBy = seriesOption.seriesLayoutBy;
-    var sourceHeader = seriesOption.sourceHeader;
-    var dimensionsDefine = seriesOption.dimensions;
-
-    var datasetModel = getDatasetModel(seriesModel);
-    if (datasetModel) {
-        var datasetOption = datasetModel.option;
-
-        data = datasetOption.source;
-        sourceFormat = inner(datasetModel).sourceFormat;
-        fromDataset = true;
-
-        // These settings from series has higher priority.
-        seriesLayoutBy = seriesLayoutBy || datasetOption.seriesLayoutBy;
-        sourceHeader == null && (sourceHeader = datasetOption.sourceHeader);
-        dimensionsDefine = dimensionsDefine || datasetOption.dimensions;
-    }
-
-    var completeResult = completeBySourceData(
-        data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine
-    );
-
-    inner(seriesModel).source = new Source({
-        data: data,
-        fromDataset: fromDataset,
-        seriesLayoutBy: seriesLayoutBy,
-        sourceFormat: sourceFormat,
-        dimensionsDefine: completeResult.dimensionsDefine,
-        startIndex: completeResult.startIndex,
-        dimensionsDetectCount: completeResult.dimensionsDetectCount,
-        // Note: dataset option does not have `encode`.
-        encodeDefine: seriesOption.encode
-    });
-}
-
-// return {startIndex, dimensionsDefine, dimensionsCount}
-function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine) {
-    if (!data) {
-        return {dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine)};
-    }
-
-    var dimensionsDetectCount;
-    var startIndex;
-
-    if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
-        // Rule: Most of the first line are string: it is header.
-        // Caution: consider a line with 5 string and 1 number,
-        // it still can not be sure it is a head, because the
-        // 5 string may be 5 values of category columns.
-        if (sourceHeader === 'auto' || sourceHeader == null) {
-            arrayRowsTravelFirst(function (val) {
-                // '-' is regarded as null/undefined.
-                if (val != null && val !== '-') {
-                    if (isString(val)) {
-                        startIndex == null && (startIndex = 1);
-                    }
-                    else {
-                        startIndex = 0;
-                    }
-                }
-            // 10 is an experience number, avoid long loop.
-            }, seriesLayoutBy, data, 10);
-        }
-        else {
-            startIndex = sourceHeader ? 1 : 0;
-        }
-
-        if (!dimensionsDefine && startIndex === 1) {
-            dimensionsDefine = [];
-            arrayRowsTravelFirst(function (val, index) {
-                dimensionsDefine[index] = val != null ? val : '';
-            }, seriesLayoutBy, data);
-        }
-
-        dimensionsDetectCount = dimensionsDefine
-            ? dimensionsDefine.length
-            : seriesLayoutBy === SERIES_LAYOUT_BY_ROW
-            ? data.length
-            : data[0]
-            ? data[0].length
-            : null;
-    }
-    else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
-        if (!dimensionsDefine) {
-            dimensionsDefine = objectRowsCollectDimensions(data);
-        }
-    }
-    else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
-        if (!dimensionsDefine) {
-            dimensionsDefine = [];
-            each(data, function (colArr, key) {
-                dimensionsDefine.push(key);
-            });
-        }
-    }
-    else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {
-        var value0 = getDataItemValue(data[0]);
-        dimensionsDetectCount = isArray(value0) && value0.length || 1;
-    }
-    else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {
-        if (__DEV__) {
-            assert(!!dimensionsDefine, 'dimensions must be given if data is TypedArray.');
-        }
-    }
-
-    return {
-        startIndex: startIndex,
-        dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine),
-        dimensionsDetectCount: dimensionsDetectCount
-    };
-}
-
-// Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'],
-// which is reasonable. But dimension name is duplicated.
-// Returns undefined or an array contains only object without null/undefiend or string.
-function normalizeDimensionsDefine(dimensionsDefine) {
-    if (!dimensionsDefine) {
-        // The meaning of null/undefined is different from empty array.
-        return;
-    }
-    var nameMap = createHashMap();
-    return map(dimensionsDefine, function (item, index) {
-        item = extend({}, isObject(item) ? item : {name: item});
-
-        // User can set null in dimensions.
-        // We dont auto specify name, othewise a given name may
-        // cause it be refered unexpectedly.
-        if (item.name == null) {
-            return item;
-        }
-
-        // Also consider number form like 2012.
-        item.name += '';
-        // User may also specify displayName.
-        // displayName will always exists except user not
-        // specified or dim name is not specified or detected.
-        // (A auto generated dim name will not be used as
-        // displayName).
-        if (item.displayName == null) {
-            item.displayName = item.name;
-        }
-
-        var exist = nameMap.get(item.name);
-        if (!exist) {
-            nameMap.set(item.name, {count: 1});
-        }
-        else {
-            item.name += '-' + exist.count++;
-        }
-
-        return item;
-    });
-}
-
-function arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) {
-    maxLoop == null && (maxLoop = Infinity);
-    if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {
-        for (var i = 0; i < data.length && i < maxLoop; i++) {
-            cb(data[i] ? data[i][0] : null, i);
-        }
-    }
-    else {
-        var value0 = data[0] || [];
-        for (var i = 0; i < value0.length && i < maxLoop; i++) {
-            cb(value0[i], i);
-        }
-    }
-}
-
-function objectRowsCollectDimensions(data) {
-    var firstIndex = 0;
-    var obj;
-    while (firstIndex < data.length && !(obj = data[firstIndex++])) {} // jshint ignore: line
-    if (obj) {
-        var dimensions = [];
-        each(obj, function (value, key) {
-            dimensions.push(key);
-        });
-        return dimensions;
-    }
-}
-
-/**
- * [The strategy of the arrengment of data dimensions for dataset]:
- * "value way": all axes are non-category axes. So series one by one take
- *     several (the number is coordSysDims.length) dimensions from dataset.
- *     The result of data arrengment of data dimensions like:
- *     | ser0_x | ser0_y | ser1_x | ser1_y | ser2_x | ser2_y |
- * "category way": at least one axis is category axis. So the the first data
- *     dimension is always mapped to the first category axis and shared by
- *     all of the series. The other data dimensions are taken by series like
- *     "value way" does.
- *     The result of data arrengment of data dimensions like:
- *     | ser_shared_x | ser0_y | ser1_y | ser2_y |
- *
- * @param {Array.<Object|string>} coordDimensions [{name: <string>, type: <string>, dimsDef: <Array>}, ...]
- * @param {module:model/Series} seriesModel
- * @param {module:data/Source} source
- * @return {Object} encode Never be `null/undefined`.
- */
-export function makeSeriesEncodeForAxisCoordSys(coordDimensions, seriesModel, source) {
-    var encode = {};
-
-    var datasetModel = getDatasetModel(seriesModel);
-    // Currently only make default when using dataset, util more reqirements occur.
-    if (!datasetModel || !coordDimensions) {
-        return encode;
-    }
-
-    var encodeItemName = [];
-    var encodeSeriesName = [];
-
-    var ecModel = seriesModel.ecModel;
-    var datasetMap = inner(ecModel).datasetMap;
-    var key = datasetModel.uid + '_' + source.seriesLayoutBy;
-
-    var baseCategoryDimIndex;
-    var categoryWayValueDimStart;
-    coordDimensions = coordDimensions.slice();
-    each(coordDimensions, function (coordDimInfo, coordDimIdx) {
-        !isObject(coordDimInfo) && (coordDimensions[coordDimIdx] = {name: coordDimInfo});
-        if (coordDimInfo.type === 'ordinal' && baseCategoryDimIndex == null) {
-            baseCategoryDimIndex = coordDimIdx;
-            categoryWayValueDimStart = getDataDimCountOnCoordDim(coordDimensions[coordDimIdx]);
-        }
-        encode[coordDimInfo.name] = [];
-    });
-
-    var datasetRecord = datasetMap.get(key)
-        || datasetMap.set(key, {categoryWayDim: categoryWayValueDimStart, valueWayDim: 0});
-
-    // TODO
-    // Auto detect first time axis and do arrangement.
-    each(coordDimensions, function (coordDimInfo, coordDimIdx) {
-        var coordDimName = coordDimInfo.name;
-        var count = getDataDimCountOnCoordDim(coordDimInfo);
-
-        // In value way.
-        if (baseCategoryDimIndex == null) {
-            var start = datasetRecord.valueWayDim;
-            pushDim(encode[coordDimName], start, count);
-            pushDim(encodeSeriesName, start, count);
-            datasetRecord.valueWayDim += count;
-
-            // ??? TODO give a better default series name rule?
-            // especially when encode x y specified.
-            // consider: when mutiple series share one dimension
-            // category axis, series name should better use
-            // the other dimsion name. On the other hand, use
-            // both dimensions name.
-        }
-        // In category way, the first category axis.
-        else if (baseCategoryDimIndex === coordDimIdx) {
-            pushDim(encode[coordDimName], 0, count);
-            pushDim(encodeItemName, 0, count);
-        }
-        // In category way, the other axis.
-        else {
-            var start = datasetRecord.categoryWayDim;
-            pushDim(encode[coordDimName], start, count);
-            pushDim(encodeSeriesName, start, count);
-            datasetRecord.categoryWayDim += count;
-        }
-    });
-
-    function pushDim(dimIdxArr, idxFrom, idxCount) {
-        for (var i = 0; i < idxCount; i++) {
-            dimIdxArr.push(idxFrom + i);
-        }
-    }
-
-    function getDataDimCountOnCoordDim(coordDimInfo) {
-        var dimsDef = coordDimInfo.dimsDef;
-        return dimsDef ? dimsDef.length : 1;
-    }
-
-    encodeItemName.length && (encode.itemName = encodeItemName);
-    encodeSeriesName.length && (encode.seriesName = encodeSeriesName);
-
-    return encode;
-}
-
-/**
- * Work for data like [{name: ..., value: ...}, ...].
- *
- * @param {module:model/Series} seriesModel
- * @param {module:data/Source} source
- * @return {Object} encode Never be `null/undefined`.
- */
-export function makeSeriesEncodeForNameBased(seriesModel, source, dimCount) {
-    var encode = {};
-
-    var datasetModel = getDatasetModel(seriesModel);
-    // Currently only make default when using dataset, util more reqirements occur.
-    if (!datasetModel) {
-        return encode;
-    }
-
-    var sourceFormat = source.sourceFormat;
-    var dimensionsDefine = source.dimensionsDefine;
-
-    var potentialNameDimIndex;
-    if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
-        each(dimensionsDefine, function (dim, idx) {
-            if ((isObject(dim) ? dim.name : dim) === 'name') {
-                potentialNameDimIndex = idx;
-            }
-        });
-    }
-
-    // idxResult: {v, n}.
-    var idxResult = (function () {
-
-        var idxRes0 = {};
-        var idxRes1 = {};
-        var guessRecords = [];
-
-        // 5 is an experience value.
-        for (var i = 0, len = Math.min(5, dimCount); i < len; i++) {
-            var guessResult = doGuessOrdinal(
-                source.data, sourceFormat, source.seriesLayoutBy,
-                dimensionsDefine, source.startIndex, i
-            );
-            guessRecords.push(guessResult);
-            var isPureNumber = guessResult === BE_ORDINAL.Not;
-
-            // [Strategy of idxRes0]: find the first BE_ORDINAL.Not as the value dim,
-            // and then find a name dim with the priority:
-            // "BE_ORDINAL.Might|BE_ORDINAL.Must" > "other dim" > "the value dim itself".
-            if (isPureNumber && idxRes0.v == null && i !== potentialNameDimIndex) {
-                idxRes0.v = i;
-            }
-            if (idxRes0.n == null
-                || (idxRes0.n === idxRes0.v)
-                || (!isPureNumber && guessRecords[idxRes0.n] === BE_ORDINAL.Not)
-            ) {
-                idxRes0.n = i;
-            }
-            if (fulfilled(idxRes0) && guessRecords[idxRes0.n] !== BE_ORDINAL.Not) {
-                return idxRes0;
-            }
-
-            // [Strategy of idxRes1]: if idxRes0 not satisfied (that is, no BE_ORDINAL.Not),
-            // find the first BE_ORDINAL.Might as the value dim,
-            // and then find a name dim with the priority:
-            // "other dim" > "the value dim itself".
-            // That is for backward compat: number-like (e.g., `'3'`, `'55'`) can be
-            // treated as number.
-            if (!isPureNumber) {
-                if (guessResult === BE_ORDINAL.Might && idxRes1.v == null && i !== potentialNameDimIndex) {
-                    idxRes1.v = i;
-                }
-                if (idxRes1.n == null || (idxRes1.n === idxRes1.v)) {
-                    idxRes1.n = i;
-                }
-            }
-        }
-
-        function fulfilled(idxResult) {
-            return idxResult.v != null && idxResult.n != null;
-        }
-
-        return fulfilled(idxRes0) ? idxRes0 : fulfilled(idxRes1) ? idxRes1 : null;
-    })();
-
-    if (idxResult) {
-        encode.value = idxResult.v;
-        // `potentialNameDimIndex` has highest priority.
-        var nameDimIndex = potentialNameDimIndex != null ? potentialNameDimIndex : idxResult.n;
-        // By default, label use itemName in charts.
-        // So we dont set encodeLabel here.
-        encode.itemName = [nameDimIndex];
-        encode.seriesName = [nameDimIndex];
-    }
-
-    return encode;
-}
-
-/**
- * If return null/undefined, indicate that should not use datasetModel.
- */
-function getDatasetModel(seriesModel) {
-    var option = seriesModel.option;
-    // Caution: consider the scenario:
-    // A dataset is declared and a series is not expected to use the dataset,
-    // and at the beginning `setOption({series: { noData })` (just prepare other
-    // option but no data), then `setOption({series: {data: [...]}); In this case,
-    // the user should set an empty array to avoid that dataset is used by default.
-    var thisData = option.data;
-    if (!thisData) {
-        return seriesModel.ecModel.getComponent('dataset', option.datasetIndex || 0);
-    }
-}
-
-/**
- * The rule should not be complex, otherwise user might not
- * be able to known where the data is wrong.
- * The code is ugly, but how to make it neat?
- *
- * @param {module:echars/data/Source} source
- * @param {number} dimIndex
- * @return {BE_ORDINAL} guess result.
- */
-export function guessOrdinal(source, dimIndex) {
-    return doGuessOrdinal(
-        source.data,
-        source.sourceFormat,
-        source.seriesLayoutBy,
-        source.dimensionsDefine,
-        source.startIndex,
-        dimIndex
-    );
-}
-
-// dimIndex may be overflow source data.
-// return {BE_ORDINAL}
-function doGuessOrdinal(
-    data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex
-) {
-    var result;
-    // Experience value.
-    var maxLoop = 5;
-
-    if (isTypedArray(data)) {
-        return BE_ORDINAL.Not;
-    }
-
-    // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine
-    // always exists in source.
-    var dimName;
-    var dimType;
-    if (dimensionsDefine) {
-        var dimDefItem = dimensionsDefine[dimIndex];
-        if (isObject(dimDefItem)) {
-            dimName = dimDefItem.name;
-            dimType = dimDefItem.type;
-        }
-        else if (isString(dimDefItem)) {
-            dimName = dimDefItem;
-        }
-    }
-
-    if (dimType != null) {
-        return dimType === 'ordinal' ? BE_ORDINAL.Must : BE_ORDINAL.Not;
-    }
-
-    if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
-        if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {
-            var sample = data[dimIndex];
-            for (var i = 0; i < (sample || []).length && i < maxLoop; i++) {
-                if ((result = detectValue(sample[startIndex + i])) != null) {
-                    return result;
-                }
-            }
-        }
-        else {
-            for (var i = 0; i < data.length && i < maxLoop; i++) {
-                var row = data[startIndex + i];
-                if (row && (result = detectValue(row[dimIndex])) != null) {
-                    return result;
-                }
-            }
-        }
-    }
-    else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
-        if (!dimName) {
-            return BE_ORDINAL.Not;
-        }
-        for (var i = 0; i < data.length && i < maxLoop; i++) {
-            var item = data[i];
-            if (item && (result = detectValue(item[dimName])) != null) {
-                return result;
-            }
-        }
-    }
-    else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
-        if (!dimName) {
-            return BE_ORDINAL.Not;
-        }
-        var sample = data[dimName];
-        if (!sample || isTypedArray(sample)) {
-            return BE_ORDINAL.Not;
-        }
-        for (var i = 0; i < sample.length && i < maxLoop; i++) {
-            if ((result = detectValue(sample[i])) != null) {
-                return result;
-            }
-        }
-    }
-    else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {
-        for (var i = 0; i < data.length && i < maxLoop; i++) {
-            var item = data[i];
-            var val = getDataItemValue(item);
-            if (!isArray(val)) {
-                return BE_ORDINAL.Not;
-            }
-            if ((result = detectValue(val[dimIndex])) != null) {
-                return result;
-            }
-        }
-    }
-
-    function detectValue(val) {
-        var beStr = isString(val);
-        // Consider usage convenience, '1', '2' will be treated as "number".
-        // `isFinit('')` get `true`.
-        if (val != null && isFinite(val) && val !== '') {
-            return beStr ? BE_ORDINAL.Might : BE_ORDINAL.Not;
-        }
-        else if (beStr && val !== '-') {
-            return BE_ORDINAL.Must;
-        }
-    }
-
-    return BE_ORDINAL.Not;
-}

+ 0 - 30
admin/node_modules/echarts/src/data/helper/sourceType.js

@@ -1,30 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-// Avoid typo.
-export var SOURCE_FORMAT_ORIGINAL = 'original';
-export var SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows';
-export var SOURCE_FORMAT_OBJECT_ROWS = 'objectRows';
-export var SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns';
-export var SOURCE_FORMAT_UNKNOWN = 'unknown';
-// ??? CHANGE A NAME
-export var SOURCE_FORMAT_TYPED_ARRAY = 'typedArray';
-
-export var SERIES_LAYOUT_BY_COLUMN = 'column';
-export var SERIES_LAYOUT_BY_ROW = 'row';

+ 0 - 2473
admin/node_modules/echarts/src/echarts.js

@@ -1,2473 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-import {__DEV__} from './config';
-import * as zrender from 'zrender/src/zrender';
-import * as zrUtil from 'zrender/src/core/util';
-import * as colorTool from 'zrender/src/tool/color';
-import env from 'zrender/src/core/env';
-import timsort from 'zrender/src/core/timsort';
-import Eventful from 'zrender/src/mixin/Eventful';
-import GlobalModel from './model/Global';
-import ExtensionAPI from './ExtensionAPI';
-import CoordinateSystemManager from './CoordinateSystem';
-import OptionManager from './model/OptionManager';
-import backwardCompat from './preprocessor/backwardCompat';
-import dataStack from './processor/dataStack';
-import ComponentModel from './model/Component';
-import SeriesModel from './model/Series';
-import ComponentView from './view/Component';
-import ChartView from './view/Chart';
-import * as graphic from './util/graphic';
-import * as modelUtil from './util/model';
-import {throttle} from './util/throttle';
-import seriesColor from './visual/seriesColor';
-import aria from './visual/aria';
-import loadingDefault from './loading/default';
-import Scheduler from './stream/Scheduler';
-import lightTheme from './theme/light';
-import darkTheme from './theme/dark';
-import './component/dataset';
-import mapDataStorage from './coord/geo/mapDataStorage';
-
-var assert = zrUtil.assert;
-var each = zrUtil.each;
-var isFunction = zrUtil.isFunction;
-var isObject = zrUtil.isObject;
-var parseClassType = ComponentModel.parseClassType;
-
-export var version = '4.8.0';
-
-export var dependencies = {
-    zrender: '4.3.1'
-};
-
-var TEST_FRAME_REMAIN_TIME = 1;
-
-var PRIORITY_PROCESSOR_FILTER = 1000;
-var PRIORITY_PROCESSOR_SERIES_FILTER = 800;
-var PRIORITY_PROCESSOR_DATASTACK = 900;
-var PRIORITY_PROCESSOR_STATISTIC = 5000;
-
-var PRIORITY_VISUAL_LAYOUT = 1000;
-var PRIORITY_VISUAL_PROGRESSIVE_LAYOUT = 1100;
-var PRIORITY_VISUAL_GLOBAL = 2000;
-var PRIORITY_VISUAL_CHART = 3000;
-var PRIORITY_VISUAL_POST_CHART_LAYOUT = 3500;
-var PRIORITY_VISUAL_COMPONENT = 4000;
-// FIXME
-// necessary?
-var PRIORITY_VISUAL_BRUSH = 5000;
-
-export var PRIORITY = {
-    PROCESSOR: {
-        FILTER: PRIORITY_PROCESSOR_FILTER,
-        SERIES_FILTER: PRIORITY_PROCESSOR_SERIES_FILTER,
-        STATISTIC: PRIORITY_PROCESSOR_STATISTIC
-    },
-    VISUAL: {
-        LAYOUT: PRIORITY_VISUAL_LAYOUT,
-        PROGRESSIVE_LAYOUT: PRIORITY_VISUAL_PROGRESSIVE_LAYOUT,
-        GLOBAL: PRIORITY_VISUAL_GLOBAL,
-        CHART: PRIORITY_VISUAL_CHART,
-        POST_CHART_LAYOUT: PRIORITY_VISUAL_POST_CHART_LAYOUT,
-        COMPONENT: PRIORITY_VISUAL_COMPONENT,
-        BRUSH: PRIORITY_VISUAL_BRUSH
-    }
-};
-
-// 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 = '__flagInMainProcess';
-var OPTION_UPDATED = '__optionUpdated';
-var ACTION_REG = /^[a-zA-Z0-9_]+$/;
-
-
-function createRegisterEventWithLowercaseName(method, ignoreDisposed) {
-    return function (eventName, handler, context) {
-        if (!ignoreDisposed && this._disposed) {
-            disposedWarning(this.id);
-            return;
-        }
-
-        // 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', true);
-MessageCenter.prototype.off = createRegisterEventWithLowercaseName('off', true);
-MessageCenter.prototype.one = createRegisterEventWithLowercaseName('one', true);
-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 {HTMLElement}
-     * @private
-     */
-    this._dom = dom;
-
-    var defaultRenderer = 'canvas';
-    if (__DEV__) {
-        defaultRenderer = (
-            typeof window === 'undefined' ? global : window
-        ).__ECHARTS__DEFAULT__RENDERER__ || defaultRenderer;
-    }
-
-    /**
-     * @type {module:zrender/ZRender}
-     * @private
-     */
-    var zr = this._zr = zrender.init(dom, {
-        renderer: opts.renderer || defaultRenderer,
-        devicePixelRatio: opts.devicePixelRatio,
-        width: opts.width,
-        height: opts.height
-    });
-
-    /**
-     * Expect 60 fps.
-     * @type {Function}
-     * @private
-     */
-    this._throttledZrFlush = throttle(zrUtil.bind(zr.flush, zr), 17);
-
-    var theme = zrUtil.clone(theme);
-    theme && backwardCompat(theme, true);
-    /**
-     * @type {Object}
-     * @private
-     */
-    this._theme = 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/CoordinateSystem}
-     * @private
-     */
-    this._coordSysMgr = new CoordinateSystemManager();
-
-    /**
-     * @type {module:echarts/ExtensionAPI}
-     * @private
-     */
-    var api = this._api = createExtensionAPI(this);
-
-    // Sort on demand
-    function prioritySortFunc(a, b) {
-        return a.__prio - b.__prio;
-    }
-    timsort(visualFuncs, prioritySortFunc);
-    timsort(dataProcessorFuncs, prioritySortFunc);
-
-    /**
-     * @type {module:echarts/stream/Scheduler}
-     */
-    this._scheduler = new Scheduler(this, api, dataProcessorFuncs, visualFuncs);
-
-    Eventful.call(this, this._ecEventProcessor = new EventProcessor());
-
-    /**
-     * @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 = [];
-
-    zr.animation.on('frame', this._onframe, this);
-
-    bindRenderedEvent(zr, this);
-
-    // ECharts instance can be used as value.
-    zrUtil.setAsPrimitive(this);
-}
-
-var echartsProto = ECharts.prototype;
-
-echartsProto._onframe = function () {
-    if (this._disposed) {
-        return;
-    }
-
-    var scheduler = this._scheduler;
-
-    // Lazy update
-    if (this[OPTION_UPDATED]) {
-        var silent = this[OPTION_UPDATED].silent;
-
-        this[IN_MAIN_PROCESS] = true;
-
-        prepare(this);
-        updateMethods.update.call(this);
-
-        this[IN_MAIN_PROCESS] = false;
-
-        this[OPTION_UPDATED] = false;
-
-        flushPendingActions.call(this, silent);
-
-        triggerUpdatedEvent.call(this, silent);
-    }
-    // Avoid do both lazy update and progress in one frame.
-    else if (scheduler.unfinished) {
-        // Stream progress.
-        var remainTime = TEST_FRAME_REMAIN_TIME;
-        var ecModel = this._model;
-        var api = this._api;
-        scheduler.unfinished = false;
-        do {
-            var startTime = +new Date();
-
-            scheduler.performSeriesTasks(ecModel);
-
-            // Currently dataProcessorFuncs do not check threshold.
-            scheduler.performDataProcessorTasks(ecModel);
-
-            updateStreamModes(this, ecModel);
-
-            // Do not update coordinate system here. Because that coord system update in
-            // each frame is not a good user experience. So we follow the rule that
-            // the extent of the coordinate system is determin in the first frame (the
-            // frame is executed immedietely after task reset.
-            // this._coordSysMgr.update(ecModel, api);
-
-            // console.log('--- ec frame visual ---', remainTime);
-            scheduler.performVisualTasks(ecModel);
-
-            renderSeries(this, this._model, api, 'remain');
-
-            remainTime -= (+new Date() - startTime);
-        }
-        while (remainTime > 0 && scheduler.unfinished);
-
-        // Call flush explicitly for trigger finished event.
-        if (!scheduler.unfinished) {
-            this._zr.flush();
-        }
-        // Else, zr flushing be ensue within the same frame,
-        // because zr flushing is after onframe event.
-    }
-};
-
-/**
- * @return {HTMLElement}
- */
-echartsProto.getDom = function () {
-    return this._dom;
-};
-
-/**
- * @return {module:zrender~ZRender}
- */
-echartsProto.getZr = function () {
-    return this._zr;
-};
-
-/**
- * Usage:
- * chart.setOption(option, notMerge, lazyUpdate);
- * chart.setOption(option, {
- *     notMerge: ...,
- *     lazyUpdate: ...,
- *     silent: ...
- * });
- *
- * @param {Object} option
- * @param {Object|boolean} [opts] opts or notMerge.
- * @param {boolean} [opts.notMerge=false]
- * @param {boolean} [opts.lazyUpdate=false] Useful when setOption frequently.
- */
-echartsProto.setOption = function (option, notMerge, lazyUpdate) {
-    if (__DEV__) {
-        assert(!this[IN_MAIN_PROCESS], '`setOption` should not be called during main process.');
-    }
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    var silent;
-    if (isObject(notMerge)) {
-        lazyUpdate = notMerge.lazyUpdate;
-        silent = notMerge.silent;
-        notMerge = notMerge.notMerge;
-    }
-
-    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();
-        ecModel.scheduler = this._scheduler;
-        ecModel.init(null, null, theme, optionManager);
-    }
-
-    this._model.setOption(option, optionPreprocessorFuncs);
-
-    if (lazyUpdate) {
-        this[OPTION_UPDATED] = {silent: silent};
-        this[IN_MAIN_PROCESS] = false;
-    }
-    else {
-        prepare(this);
-
-        updateMethods.update.call(this);
-
-        // Ensure zr refresh sychronously, and then pixel in canvas can be
-        // fetched after `setOption`.
-        this._zr.flush();
-
-        this[OPTION_UPDATED] = false;
-        this[IN_MAIN_PROCESS] = false;
-
-        flushPendingActions.call(this, silent);
-        triggerUpdatedEvent.call(this, silent);
-    }
-};
-
-/**
- * @DEPRECATED
- */
-echartsProto.setTheme = function () {
-    console.error('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 && this._model.getOption();
-};
-
-/**
- * @return {number}
- */
-echartsProto.getWidth = function () {
-    return this._zr.getWidth();
-};
-
-/**
- * @return {number}
- */
-echartsProto.getHeight = function () {
-    return this._zr.getHeight();
-};
-
-/**
- * @return {number}
- */
-echartsProto.getDevicePixelRatio = function () {
-    return this._zr.painter.dpr || window.devicePixelRatio || 1;
-};
-
-/**
- * Get canvas which has all thing rendered
- * @param {Object} opts
- * @param {string} [opts.backgroundColor]
- * @return {string}
- */
-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
-    // Never works before in init animation, so remove it.
-    // zrUtil.each(list, function (el) {
-    //     el.stopAnimation(true);
-    // });
-    return zr.painter.getRenderedCanvas(opts);
-};
-
-/**
- * Get svg data url
- * @return {string}
- */
-echartsProto.getSvgDataURL = function () {
-    if (!env.svgSupported) {
-        return;
-    }
-
-    var zr = this._zr;
-    var list = zr.storage.getDisplayList();
-    // Stop animations
-    zrUtil.each(list, function (el) {
-        el.stopAnimation(true);
-    });
-
-    return zr.painter.toDataURL();
-};
-
-/**
- * @return {string}
- * @param {Object} opts
- * @param {string} [opts.type='png']
- * @param {string} [opts.pixelRatio=1]
- * @param {string} [opts.backgroundColor]
- * @param {string} [opts.excludeComponents]
- */
-echartsProto.getDataURL = function (opts) {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    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._zr.painter.getType() === 'svg'
-        ? this.getSvgDataURL()
-        : 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 (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    if (!env.canvasSupported) {
-        return;
-    }
-    var isSvg = opts.type === 'svg';
-    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;
-
-        zrUtil.each(instances, function (chart, id) {
-            if (chart.group === groupId) {
-                var canvas = isSvg
-                    ? chart.getZr().painter.getSvgDom().innerHTML
-                    : 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();
-        var zr = zrender.init(targetCanvas, {
-            renderer: isSvg ? 'svg' : 'canvas'
-        });
-        zr.resize({
-            width: width,
-            height: height
-        });
-
-        if (isSvg) {
-            var content = '';
-            each(canvasList, function (item) {
-                var x = item.left - left;
-                var y = item.top - top;
-                content += '<g transform="translate(' + x + ','
-                    + y + ')">' + item.dom + '</g>';
-            });
-            zr.painter.getSvgRoot().innerHTML = content;
-
-            if (opts.connectedBackgroundColor) {
-                zr.painter.setBackgroundColor(opts.connectedBackgroundColor);
-            }
-
-            zr.refreshImmediately();
-            return zr.painter.toDataURL();
-        }
-        else {
-            // Background between the charts
-            if (opts.connectedBackgroundColor) {
-                zr.add(new graphic.Rect({
-                    shape: {
-                        x: 0,
-                        y: 0,
-                        width: width,
-                        height: height
-                    },
-                    style: {
-                        fill: opts.connectedBackgroundColor
-                    }
-                }));
-            }
-
-            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);
-    }
-};
-
-/**
- * Convert from logical coordinate system to pixel coordinate system.
- * See CoordinateSystem#convertToPixel.
- * @param {string|Object} finder
- *        If string, e.g., 'geo', means {geoIndex: 0}.
- *        If Object, could contain some of these properties below:
- *        {
- *            seriesIndex / seriesId / seriesName,
- *            geoIndex / geoId, geoName,
- *            bmapIndex / bmapId / bmapName,
- *            xAxisIndex / xAxisId / xAxisName,
- *            yAxisIndex / yAxisId / yAxisName,
- *            gridIndex / gridId / gridName,
- *            ... (can be extended)
- *        }
- * @param {Array|number} value
- * @return {Array|number} result
- */
-echartsProto.convertToPixel = zrUtil.curry(doConvertPixel, 'convertToPixel');
-
-/**
- * Convert from pixel coordinate system to logical coordinate system.
- * See CoordinateSystem#convertFromPixel.
- * @param {string|Object} finder
- *        If string, e.g., 'geo', means {geoIndex: 0}.
- *        If Object, could contain some of these properties below:
- *        {
- *            seriesIndex / seriesId / seriesName,
- *            geoIndex / geoId / geoName,
- *            bmapIndex / bmapId / bmapName,
- *            xAxisIndex / xAxisId / xAxisName,
- *            yAxisIndex / yAxisId / yAxisName
- *            gridIndex / gridId / gridName,
- *            ... (can be extended)
- *        }
- * @param {Array|number} value
- * @return {Array|number} result
- */
-echartsProto.convertFromPixel = zrUtil.curry(doConvertPixel, 'convertFromPixel');
-
-function doConvertPixel(methodName, finder, value) {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    var ecModel = this._model;
-    var coordSysList = this._coordSysMgr.getCoordinateSystems();
-    var result;
-
-    finder = modelUtil.parseFinder(ecModel, finder);
-
-    for (var i = 0; i < coordSysList.length; i++) {
-        var coordSys = coordSysList[i];
-        if (coordSys[methodName]
-            && (result = coordSys[methodName](ecModel, finder, value)) != null
-        ) {
-            return result;
-        }
-    }
-
-    if (__DEV__) {
-        console.warn(
-            'No coordinate system that supports ' + methodName + ' found by the given finder.'
-        );
-    }
-}
-
-/**
- * Is the specified coordinate systems or components contain the given pixel point.
- * @param {string|Object} finder
- *        If string, e.g., 'geo', means {geoIndex: 0}.
- *        If Object, could contain some of these properties below:
- *        {
- *            seriesIndex / seriesId / seriesName,
- *            geoIndex / geoId / geoName,
- *            bmapIndex / bmapId / bmapName,
- *            xAxisIndex / xAxisId / xAxisName,
- *            yAxisIndex / yAxisId / yAxisName,
- *            gridIndex / gridId / gridName,
- *            ... (can be extended)
- *        }
- * @param {Array|number} value
- * @return {boolean} result
- */
-echartsProto.containPixel = function (finder, value) {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    var ecModel = this._model;
-    var result;
-
-    finder = modelUtil.parseFinder(ecModel, finder);
-
-    zrUtil.each(finder, function (models, key) {
-        key.indexOf('Models') >= 0 && zrUtil.each(models, function (model) {
-            var coordSys = model.coordinateSystem;
-            if (coordSys && coordSys.containPoint) {
-                result |= !!coordSys.containPoint(value);
-            }
-            else if (key === 'seriesModels') {
-                var view = this._chartsMap[model.__viewId];
-                if (view && view.containPoint) {
-                    result |= view.containPoint(value, model);
-                }
-                else {
-                    if (__DEV__) {
-                        console.warn(key + ': ' + (view
-                            ? 'The found component do not support containPoint.'
-                            : 'No view mapping to the found component.'
-                        ));
-                    }
-                }
-            }
-            else {
-                if (__DEV__) {
-                    console.warn(key + ': containPoint is not supported');
-                }
-            }
-        }, this);
-    }, this);
-
-    return !!result;
-};
-
-/**
- * Get visual from series or data.
- * @param {string|Object} finder
- *        If string, e.g., 'series', means {seriesIndex: 0}.
- *        If Object, could contain some of these properties below:
- *        {
- *            seriesIndex / seriesId / seriesName,
- *            dataIndex / dataIndexInside
- *        }
- *        If dataIndex is not specified, series visual will be fetched,
- *        but not data item visual.
- *        If all of seriesIndex, seriesId, seriesName are not specified,
- *        visual will be fetched from first series.
- * @param {string} visualType 'color', 'symbol', 'symbolSize'
- */
-echartsProto.getVisual = function (finder, visualType) {
-    var ecModel = this._model;
-
-    finder = modelUtil.parseFinder(ecModel, finder, {defaultMainType: 'series'});
-
-    var seriesModel = finder.seriesModel;
-
-    if (__DEV__) {
-        if (!seriesModel) {
-            console.warn('There is no specified seires model');
-        }
-    }
-
-    var data = seriesModel.getData();
-
-    var dataIndexInside = finder.hasOwnProperty('dataIndexInside')
-        ? finder.dataIndexInside
-        : finder.hasOwnProperty('dataIndex')
-        ? data.indexOfRawIndex(finder.dataIndex)
-        : null;
-
-    return dataIndexInside != null
-        ? data.getItemVisual(dataIndexInside, visualType)
-        : data.getVisual(visualType);
-};
-
-/**
- * Get view of corresponding component model
- * @param  {module:echarts/model/Component} componentModel
- * @return {module:echarts/view/Component}
- */
-echartsProto.getViewOfComponentModel = function (componentModel) {
-    return this._componentsMap[componentModel.__viewId];
-};
-
-/**
- * Get view of corresponding series model
- * @param  {module:echarts/model/Series} seriesModel
- * @return {module:echarts/view/Chart}
- */
-echartsProto.getViewOfSeriesModel = function (seriesModel) {
-    return this._chartsMap[seriesModel.__viewId];
-};
-
-var updateMethods = {
-
-    prepareAndUpdate: function (payload) {
-        prepare(this);
-        updateMethods.update.call(this, payload);
-    },
-
-    /**
-     * @param {Object} payload
-     * @private
-     */
-    update: function (payload) {
-        // console.profile && console.profile('update');
-
-        var ecModel = this._model;
-        var api = this._api;
-        var zr = this._zr;
-        var coordSysMgr = this._coordSysMgr;
-        var scheduler = this._scheduler;
-
-        // update before setOption
-        if (!ecModel) {
-            return;
-        }
-
-        scheduler.restoreData(ecModel, payload);
-
-        scheduler.performSeriesTasks(ecModel);
-
-        // 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(ecModel, api);
-
-        scheduler.performDataProcessorTasks(ecModel, payload);
-
-        // Current stream render is not supported in data process. So we can update
-        // stream modes after data processing, where the filtered data is used to
-        // deteming whether use progressive rendering.
-        updateStreamModes(this, ecModel);
-
-        // We update stream modes before coordinate system updated, then the modes info
-        // can be fetched when coord sys updating (consider the barGrid extent fix). But
-        // the drawback is the full coord info can not be fetched. Fortunately this full
-        // coord is not requied in stream mode updater currently.
-        coordSysMgr.update(ecModel, api);
-
-        clearColorPalette(ecModel);
-        scheduler.performVisualTasks(ecModel, payload);
-
-        render(this, ecModel, api, payload);
-
-        // Set background
-        var backgroundColor = ecModel.get('backgroundColor') || 'transparent';
-
-        // In IE8
-        if (!env.canvasSupported) {
-            var colorArr = colorTool.parse(backgroundColor);
-            backgroundColor = colorTool.stringify(colorArr, 'rgb');
-            if (colorArr[3] === 0) {
-                backgroundColor = 'transparent';
-            }
-        }
-        else {
-            zr.setBackgroundColor(backgroundColor);
-        }
-
-        performPostUpdateFuncs(ecModel, api);
-
-        // console.profile && console.profileEnd('update');
-    },
-
-    /**
-     * @param {Object} payload
-     * @private
-     */
-    updateTransform: function (payload) {
-        var ecModel = this._model;
-        var ecIns = this;
-        var api = this._api;
-
-        // update before setOption
-        if (!ecModel) {
-            return;
-        }
-
-        // ChartView.markUpdateMethod(payload, 'updateTransform');
-
-        var componentDirtyList = [];
-        ecModel.eachComponent(function (componentType, componentModel) {
-            var componentView = ecIns.getViewOfComponentModel(componentModel);
-            if (componentView && componentView.__alive) {
-                if (componentView.updateTransform) {
-                    var result = componentView.updateTransform(componentModel, ecModel, api, payload);
-                    result && result.update && componentDirtyList.push(componentView);
-                }
-                else {
-                    componentDirtyList.push(componentView);
-                }
-            }
-        });
-
-        var seriesDirtyMap = zrUtil.createHashMap();
-        ecModel.eachSeries(function (seriesModel) {
-            var chartView = ecIns._chartsMap[seriesModel.__viewId];
-            if (chartView.updateTransform) {
-                var result = chartView.updateTransform(seriesModel, ecModel, api, payload);
-                result && result.update && seriesDirtyMap.set(seriesModel.uid, 1);
-            }
-            else {
-                seriesDirtyMap.set(seriesModel.uid, 1);
-            }
-        });
-
-        clearColorPalette(ecModel);
-        // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
-        // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);
-        this._scheduler.performVisualTasks(
-            ecModel, payload, {setDirty: true, dirtyMap: seriesDirtyMap}
-        );
-
-        // Currently, not call render of components. Geo render cost a lot.
-        // renderComponents(ecIns, ecModel, api, payload, componentDirtyList);
-        renderSeries(ecIns, ecModel, api, payload, seriesDirtyMap);
-
-        performPostUpdateFuncs(ecModel, this._api);
-    },
-
-    /**
-     * @param {Object} payload
-     * @private
-     */
-    updateView: function (payload) {
-        var ecModel = this._model;
-
-        // update before setOption
-        if (!ecModel) {
-            return;
-        }
-
-        ChartView.markUpdateMethod(payload, 'updateView');
-
-        clearColorPalette(ecModel);
-
-        // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
-        this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true});
-
-        render(this, this._model, this._api, payload);
-
-        performPostUpdateFuncs(ecModel, this._api);
-    },
-
-    /**
-     * @param {Object} payload
-     * @private
-     */
-    updateVisual: function (payload) {
-        updateMethods.update.call(this, payload);
-
-        // var ecModel = this._model;
-
-        // // update before setOption
-        // if (!ecModel) {
-        //     return;
-        // }
-
-        // ChartView.markUpdateMethod(payload, 'updateVisual');
-
-        // clearColorPalette(ecModel);
-
-        // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
-        // this._scheduler.performVisualTasks(ecModel, payload, {visualType: 'visual', setDirty: true});
-
-        // render(this, this._model, this._api, payload);
-
-        // performPostUpdateFuncs(ecModel, this._api);
-    },
-
-    /**
-     * @param {Object} payload
-     * @private
-     */
-    updateLayout: function (payload) {
-        updateMethods.update.call(this, payload);
-
-        // var ecModel = this._model;
-
-        // // update before setOption
-        // if (!ecModel) {
-        //     return;
-        // }
-
-        // ChartView.markUpdateMethod(payload, 'updateLayout');
-
-        // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
-        // // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);
-        // this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true});
-
-        // render(this, this._model, this._api, payload);
-
-        // performPostUpdateFuncs(ecModel, this._api);
-    }
-};
-
-function prepare(ecIns) {
-    var ecModel = ecIns._model;
-    var scheduler = ecIns._scheduler;
-
-    scheduler.restorePipelines(ecModel);
-
-    scheduler.prepareStageTasks();
-
-    prepareView(ecIns, 'component', ecModel, scheduler);
-
-    prepareView(ecIns, 'chart', ecModel, scheduler);
-
-    scheduler.plan();
-}
-
-/**
- * @private
- */
-function updateDirectly(ecIns, method, payload, mainType, subType) {
-    var ecModel = ecIns._model;
-
-    // broadcast
-    if (!mainType) {
-        // FIXME
-        // Chart will not be update directly here, except set dirty.
-        // But there is no such scenario now.
-        each(ecIns._componentsViews.concat(ecIns._chartsViews), callView);
-        return;
-    }
-
-    var query = {};
-    query[mainType + 'Id'] = payload[mainType + 'Id'];
-    query[mainType + 'Index'] = payload[mainType + 'Index'];
-    query[mainType + 'Name'] = payload[mainType + 'Name'];
-
-    var condition = {mainType: mainType, query: query};
-    subType && (condition.subType = subType); // subType may be '' by parseClassType;
-
-    var excludeSeriesId = payload.excludeSeriesId;
-    if (excludeSeriesId != null) {
-        excludeSeriesId = zrUtil.createHashMap(modelUtil.normalizeToArray(excludeSeriesId));
-    }
-
-    // If dispatchAction before setOption, do nothing.
-    ecModel && ecModel.eachComponent(condition, function (model) {
-        if (!excludeSeriesId || excludeSeriesId.get(model.id) == null) {
-            callView(ecIns[
-                mainType === 'series' ? '_chartsMap' : '_componentsMap'
-            ][model.__viewId]);
-        }
-    }, ecIns);
-
-    function callView(view) {
-        view && view.__alive && view[method] && view[method](
-            view.__model, ecModel, ecIns._api, payload
-        );
-    }
-}
-
-/**
- * Resize the chart
- * @param {Object} opts
- * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)
- * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)
- * @param {boolean} [opts.silent=false]
- */
-echartsProto.resize = function (opts) {
-    if (__DEV__) {
-        assert(!this[IN_MAIN_PROCESS], '`resize` should not be called during main process.');
-    }
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    this._zr.resize(opts);
-
-    var ecModel = this._model;
-
-    // Resize loading effect
-    this._loadingFX && this._loadingFX.resize();
-
-    if (!ecModel) {
-        return;
-    }
-
-    var optionChanged = ecModel.resetOption('media');
-
-    var silent = opts && opts.silent;
-
-    this[IN_MAIN_PROCESS] = true;
-
-    optionChanged && prepare(this);
-    updateMethods.update.call(this);
-
-    this[IN_MAIN_PROCESS] = false;
-
-    flushPendingActions.call(this, silent);
-
-    triggerUpdatedEvent.call(this, silent);
-};
-
-function updateStreamModes(ecIns, ecModel) {
-    var chartsMap = ecIns._chartsMap;
-    var scheduler = ecIns._scheduler;
-    ecModel.eachSeries(function (seriesModel) {
-        scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]);
-    });
-}
-
-/**
- * Show loading effect
- * @param  {string} [name='default']
- * @param  {Object} [cfg]
- */
-echartsProto.showLoading = function (name, cfg) {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    if (isObject(name)) {
-        cfg = name;
-        name = '';
-    }
-    name = name || 'default';
-
-    this.hideLoading();
-    if (!loadingEffects[name]) {
-        if (__DEV__) {
-            console.warn('Loading effects ' + name + ' not exists.');
-        }
-        return;
-    }
-    var el = loadingEffects[name](this._api, cfg);
-    var zr = this._zr;
-    this._loadingFX = el;
-
-    zr.add(el);
-};
-
-/**
- * Hide loading effect
- */
-echartsProto.hideLoading = function () {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    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 {Object|boolean} [opt] If pass boolean, means opt.silent
- * @param {boolean} [opt.silent=false] Whether trigger events.
- * @param {boolean} [opt.flush=undefined]
- *                  true: Flush immediately, and then pixel in canvas can be fetched
- *                      immediately. Caution: it might affect performance.
- *                  false: Not flush.
- *                  undefined: Auto decide whether perform flush.
- */
-echartsProto.dispatchAction = function (payload, opt) {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    if (!isObject(opt)) {
-        opt = {silent: !!opt};
-    }
-
-    if (!actions[payload.type]) {
-        return;
-    }
-
-    // Avoid dispatch action before setOption. Especially in `connect`.
-    if (!this._model) {
-        return;
-    }
-
-    // May dispatchAction in rendering procedure
-    if (this[IN_MAIN_PROCESS]) {
-        this._pendingActions.push(payload);
-        return;
-    }
-
-    doDispatchAction.call(this, payload, opt.silent);
-
-    if (opt.flush) {
-        this._zr.flush(true);
-    }
-    else if (opt.flush !== false && env.browser.weChat) {
-        // In WeChat embeded browser, `requestAnimationFrame` and `setInterval`
-        // hang when sliding page (on touch event), which cause that zr does not
-        // refresh util user interaction finished, which is not expected.
-        // But `dispatchAction` may be called too frequently when pan on touch
-        // screen, which impacts performance if do not throttle them.
-        this._throttledZrFlush();
-    }
-
-    flushPendingActions.call(this, opt.silent);
-
-    triggerUpdatedEvent.call(this, opt.silent);
-};
-
-function doDispatchAction(payload, silent) {
-    var payloadType = payload.type;
-    var escapeConnect = payload.escapeConnect;
-    var actionWrap = actions[payloadType];
-    var actionInfo = actionWrap.actionInfo;
-
-    var cptType = (actionInfo.update || 'update').split(':');
-    var updateMethod = cptType.pop();
-    cptType = cptType[0] != null && parseClassType(cptType[0]);
-
-    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 isHighDown = payloadType === 'highlight' || payloadType === 'downplay';
-
-    each(payloads, function (batchItem) {
-        // Action can specify the event by return it.
-        eventObj = actionWrap.action(batchItem, this._model, this._api);
-        // Emit event outside
-        eventObj = eventObj || zrUtil.extend({}, batchItem);
-        // Convert type to eventType
-        eventObj.type = actionInfo.event || eventObj.type;
-        eventObjBatch.push(eventObj);
-
-        // light update does not perform data process, layout and visual.
-        if (isHighDown) {
-            // method, payload, mainType, subType
-            updateDirectly(this, updateMethod, batchItem, 'series');
-        }
-        else if (cptType) {
-            updateDirectly(this, updateMethod, batchItem, cptType.main, cptType.sub);
-        }
-    }, this);
-
-    if (updateMethod !== 'none' && !isHighDown && !cptType) {
-        // Still dirty
-        if (this[OPTION_UPDATED]) {
-            // FIXME Pass payload ?
-            prepare(this);
-            updateMethods.update.call(this, payload);
-            this[OPTION_UPDATED] = false;
-        }
-        else {
-            updateMethods[updateMethod].call(this, payload);
-        }
-    }
-
-    // Follow the rule of action batch
-    if (batched) {
-        eventObj = {
-            type: actionInfo.event || payloadType,
-            escapeConnect: escapeConnect,
-            batch: eventObjBatch
-        };
-    }
-    else {
-        eventObj = eventObjBatch[0];
-    }
-
-    this[IN_MAIN_PROCESS] = false;
-
-    !silent && this._messageCenter.trigger(eventObj.type, eventObj);
-}
-
-function flushPendingActions(silent) {
-    var pendingActions = this._pendingActions;
-    while (pendingActions.length) {
-        var payload = pendingActions.shift();
-        doDispatchAction.call(this, payload, silent);
-    }
-}
-
-function triggerUpdatedEvent(silent) {
-    !silent && this.trigger('updated');
-}
-
-/**
- * Event `rendered` is triggered when zr
- * rendered. It is useful for realtime
- * snapshot (reflect animation).
- *
- * Event `finished` is triggered when:
- * (1) zrender rendering finished.
- * (2) initial animation finished.
- * (3) progressive rendering finished.
- * (4) no pending action.
- * (5) no delayed setOption needs to be processed.
- */
-function bindRenderedEvent(zr, ecIns) {
-    zr.on('rendered', function () {
-
-        ecIns.trigger('rendered');
-
-        // The `finished` event should not be triggered repeatly,
-        // so it should only be triggered when rendering indeed happend
-        // in zrender. (Consider the case that dipatchAction is keep
-        // triggering when mouse move).
-        if (
-            // Although zr is dirty if initial animation is not finished
-            // and this checking is called on frame, we also check
-            // animation finished for robustness.
-            zr.animation.isFinished()
-            && !ecIns[OPTION_UPDATED]
-            && !ecIns._scheduler.unfinished
-            && !ecIns._pendingActions.length
-        ) {
-            ecIns.trigger('finished');
-        }
-    });
-}
-
-/**
- * @param {Object} params
- * @param {number} params.seriesIndex
- * @param {Array|TypedArray} params.data
- */
-echartsProto.appendData = function (params) {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-
-    var seriesIndex = params.seriesIndex;
-    var ecModel = this.getModel();
-    var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
-
-    if (__DEV__) {
-        assert(params.data && seriesModel);
-    }
-
-    seriesModel.appendData(params);
-
-    // Note: `appendData` does not support that update extent of coordinate
-    // system, util some scenario require that. In the expected usage of
-    // `appendData`, the initial extent of coordinate system should better
-    // be fixed by axis `min`/`max` setting or initial data, otherwise if
-    // the extent changed while `appendData`, the location of the painted
-    // graphic elements have to be changed, which make the usage of
-    // `appendData` meaningless.
-
-    this._scheduler.unfinished = true;
-};
-
-/**
- * Register event
- * @method
- */
-echartsProto.on = createRegisterEventWithLowercaseName('on', false);
-echartsProto.off = createRegisterEventWithLowercaseName('off', false);
-echartsProto.one = createRegisterEventWithLowercaseName('one', false);
-
-/**
- * Prepare view instances of charts and components
- * @param  {module:echarts/model/Global} ecModel
- * @private
- */
-function prepareView(ecIns, type, ecModel, scheduler) {
-    var isComponent = type === 'component';
-    var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews;
-    var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap;
-    var zr = ecIns._zr;
-    var api = ecIns._api;
-
-    for (var i = 0; i < viewList.length; i++) {
-        viewList[i].__alive = false;
-    }
-
-    isComponent
-        ? ecModel.eachComponent(function (componentType, model) {
-            componentType !== 'series' && doPrepare(model);
-        })
-        : ecModel.eachSeries(doPrepare);
-
-    function doPrepare(model) {
-        // Consider: id same and type changed.
-        var viewId = '_ec_' + model.id + '_' + model.type;
-        var view = viewMap[viewId];
-        if (!view) {
-            var classType = parseClassType(model.type);
-            var Clazz = isComponent
-                ? ComponentView.getClass(classType.main, classType.sub)
-                : ChartView.getClass(classType.sub);
-
-            if (__DEV__) {
-                assert(Clazz, classType.sub + ' does not exist.');
-            }
-
-            view = new Clazz();
-            view.init(ecModel, api);
-            viewMap[viewId] = view;
-            viewList.push(view);
-            zr.add(view.group);
-        }
-
-        model.__viewId = view.__id = viewId;
-        view.__alive = true;
-        view.__model = model;
-        view.group.__ecComponentInfo = {
-            mainType: model.mainType,
-            index: model.componentIndex
-        };
-        !isComponent && scheduler.prepareView(view, model, ecModel, api);
-    }
-
-    for (var i = 0; i < viewList.length;) {
-        var view = viewList[i];
-        if (!view.__alive) {
-            !isComponent && view.renderTask.dispose();
-            zr.remove(view.group);
-            view.dispose(ecModel, api);
-            viewList.splice(i, 1);
-            delete viewMap[view.__id];
-            view.__id = view.group.__ecComponentInfo = null;
-        }
-        else {
-            i++;
-        }
-    }
-}
-
-// /**
-//  * Encode visual infomation from data after data processing
-//  *
-//  * @param {module:echarts/model/Global} ecModel
-//  * @param {object} layout
-//  * @param {boolean} [layoutFilter] `true`: only layout,
-//  *                                 `false`: only not layout,
-//  *                                 `null`/`undefined`: all.
-//  * @param {string} taskBaseTag
-//  * @private
-//  */
-// function startVisualEncoding(ecIns, ecModel, api, payload, layoutFilter) {
-//     each(visualFuncs, function (visual, index) {
-//         var isLayout = visual.isLayout;
-//         if (layoutFilter == null
-//             || (layoutFilter === false && !isLayout)
-//             || (layoutFilter === true && isLayout)
-//         ) {
-//             visual.func(ecModel, api, payload);
-//         }
-//     });
-// }
-
-function clearColorPalette(ecModel) {
-    ecModel.clearColorPalette();
-    ecModel.eachSeries(function (seriesModel) {
-        seriesModel.clearColorPalette();
-    });
-}
-
-function render(ecIns, ecModel, api, payload) {
-
-    renderComponents(ecIns, ecModel, api, payload);
-
-    each(ecIns._chartsViews, function (chart) {
-        chart.__alive = false;
-    });
-
-    renderSeries(ecIns, ecModel, api, payload);
-
-    // Remove groups of unrendered charts
-    each(ecIns._chartsViews, function (chart) {
-        if (!chart.__alive) {
-            chart.remove(ecModel, api);
-        }
-    });
-}
-
-function renderComponents(ecIns, ecModel, api, payload, dirtyList) {
-    each(dirtyList || ecIns._componentsViews, function (componentView) {
-        var componentModel = componentView.__model;
-        componentView.render(componentModel, ecModel, api, payload);
-
-        updateZ(componentModel, componentView);
-    });
-}
-
-/**
- * Render each chart and component
- * @private
- */
-function renderSeries(ecIns, ecModel, api, payload, dirtyMap) {
-    // Render all charts
-    var scheduler = ecIns._scheduler;
-    var unfinished;
-    ecModel.eachSeries(function (seriesModel) {
-        var chartView = ecIns._chartsMap[seriesModel.__viewId];
-        chartView.__alive = true;
-
-        var renderTask = chartView.renderTask;
-        scheduler.updatePayload(renderTask, payload);
-
-        if (dirtyMap && dirtyMap.get(seriesModel.uid)) {
-            renderTask.dirty();
-        }
-
-        unfinished |= renderTask.perform(scheduler.getPerformArgs(renderTask));
-
-        chartView.group.silent = !!seriesModel.get('silent');
-
-        updateZ(seriesModel, chartView);
-
-        updateBlend(seriesModel, chartView);
-    });
-    scheduler.unfinished |= unfinished;
-
-    // If use hover layer
-    updateHoverLayerStatus(ecIns, ecModel);
-
-    // Add aria
-    aria(ecIns._zr.dom, ecModel);
-}
-
-function performPostUpdateFuncs(ecModel, api) {
-    each(postUpdateFuncs, function (func) {
-        func(ecModel, api);
-    });
-}
-
-
-var MOUSE_EVENT_NAMES = [
-    'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove',
-    'mousedown', 'mouseup', 'globalout', 'contextmenu'
-];
-
-/**
- * @private
- */
-echartsProto._initEvents = function () {
-    each(MOUSE_EVENT_NAMES, function (eveName) {
-        var handler = function (e) {
-            var ecModel = this.getModel();
-            var el = e.target;
-            var params;
-            var isGlobalOut = eveName === 'globalout';
-
-            // no e.target when 'globalout'.
-            if (isGlobalOut) {
-                params = {};
-            }
-            else if (el && el.dataIndex != null) {
-                var dataModel = el.dataModel || ecModel.getSeriesByIndex(el.seriesIndex);
-                params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType, el) || {};
-            }
-            // If element has custom eventData of components
-            else if (el && el.eventData) {
-                params = zrUtil.extend({}, el.eventData);
-            }
-
-            // Contract: if params prepared in mouse event,
-            // these properties must be specified:
-            // {
-            //    componentType: string (component main type)
-            //    componentIndex: number
-            // }
-            // Otherwise event query can not work.
-
-            if (params) {
-                var componentType = params.componentType;
-                var componentIndex = params.componentIndex;
-                // Special handling for historic reason: when trigger by
-                // markLine/markPoint/markArea, the componentType is
-                // 'markLine'/'markPoint'/'markArea', but we should better
-                // enable them to be queried by seriesIndex, since their
-                // option is set in each series.
-                if (componentType === 'markLine'
-                    || componentType === 'markPoint'
-                    || componentType === 'markArea'
-                ) {
-                    componentType = 'series';
-                    componentIndex = params.seriesIndex;
-                }
-                var model = componentType && componentIndex != null
-                    && ecModel.getComponent(componentType, componentIndex);
-                var view = model && this[
-                    model.mainType === 'series' ? '_chartsMap' : '_componentsMap'
-                ][model.__viewId];
-
-                if (__DEV__) {
-                    // `event.componentType` and `event[componentTpype + 'Index']` must not
-                    // be missed, otherwise there is no way to distinguish source component.
-                    // See `dataFormat.getDataParams`.
-                    if (!isGlobalOut && !(model && view)) {
-                        console.warn('model or view can not be found by params');
-                    }
-                }
-
-                params.event = e;
-                params.type = eveName;
-
-                this._ecEventProcessor.eventInfo = {
-                    targetEl: el,
-                    packedEvent: params,
-                    model: model,
-                    view: view
-                };
-
-                this.trigger(eveName, params);
-            }
-        };
-        // Consider that some component (like tooltip, brush, ...)
-        // register zr event handler, but user event handler might
-        // do anything, such as call `setOption` or `dispatchAction`,
-        // which probably update any of the content and probably
-        // cause problem if it is called previous other inner handlers.
-        handler.zrEventfulCallAtLast = true;
-        this._zr.on(eveName, handler, 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 () {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-    this.setOption({ series: [] }, true);
-};
-
-/**
- * Dispose instance
- */
-echartsProto.dispose = function () {
-    if (this._disposed) {
-        disposedWarning(this.id);
-        return;
-    }
-    this._disposed = true;
-
-    modelUtil.setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, '');
-
-    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 disposedWarning(id) {
-    if (__DEV__) {
-        console.warn('Instance ' + id + ' has been disposed');
-    }
-}
-
-function updateHoverLayerStatus(ecIns, ecModel) {
-    var zr = ecIns._zr;
-    var storage = zr.storage;
-    var elCount = 0;
-
-    storage.traverse(function (el) {
-        elCount++;
-    });
-
-    if (elCount > ecModel.get('hoverLayerThreshold') && !env.node) {
-        ecModel.eachSeries(function (seriesModel) {
-            if (seriesModel.preventUsingHoverLayer) {
-                return;
-            }
-            var chartView = ecIns._chartsMap[seriesModel.__viewId];
-            if (chartView.__alive) {
-                chartView.group.traverse(function (el) {
-                    // Don't switch back.
-                    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 updateBlend(seriesModel, chartView) {
-    var blendMode = seriesModel.get('blendMode') || null;
-    if (__DEV__) {
-        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) {
-            // Only set if blendMode is changed. In case element is incremental and don't wan't to rerender.
-            if (el.style.blend !== blendMode) {
-                el.setStyle('blend', blendMode);
-            }
-        }
-        if (el.eachPendingDisplayable) {
-            el.eachPendingDisplayable(function (displayable) {
-                displayable.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);
-        }
-    });
-}
-
-function createExtensionAPI(ecInstance) {
-    var coordSysMgr = ecInstance._coordSysMgr;
-    return zrUtil.extend(new ExtensionAPI(ecInstance), {
-        // Inject methods
-        getCoordinateSystems: zrUtil.bind(
-            coordSysMgr.getCoordinateSystems, coordSysMgr
-        ),
-        getComponentByElement: function (el) {
-            while (el) {
-                var modelInfo = el.__ecComponentInfo;
-                if (modelInfo != null) {
-                    return ecInstance._model.getComponent(modelInfo.mainType, modelInfo.index);
-                }
-                el = el.parent;
-            }
-        }
-    });
-}
-
-
-/**
- * @class
- * Usage of query:
- * `chart.on('click', query, handler);`
- * The `query` can be:
- * + The component type query string, only `mainType` or `mainType.subType`,
- *   like: 'xAxis', 'series', 'xAxis.category' or 'series.line'.
- * + The component query object, like:
- *   `{seriesIndex: 2}`, `{seriesName: 'xx'}`, `{seriesId: 'some'}`,
- *   `{xAxisIndex: 2}`, `{xAxisName: 'xx'}`, `{xAxisId: 'some'}`.
- * + The data query object, like:
- *   `{dataIndex: 123}`, `{dataType: 'link'}`, `{name: 'some'}`.
- * + The other query object (cmponent customized query), like:
- *   `{element: 'some'}` (only available in custom series).
- *
- * Caveat: If a prop in the `query` object is `null/undefined`, it is the
- * same as there is no such prop in the `query` object.
- */
-function EventProcessor() {
-    // These info required: targetEl, packedEvent, model, view
-    this.eventInfo;
-}
-EventProcessor.prototype = {
-    constructor: EventProcessor,
-
-    normalizeQuery: function (query) {
-        var cptQuery = {};
-        var dataQuery = {};
-        var otherQuery = {};
-
-        // `query` is `mainType` or `mainType.subType` of component.
-        if (zrUtil.isString(query)) {
-            var condCptType = parseClassType(query);
-            // `.main` and `.sub` may be ''.
-            cptQuery.mainType = condCptType.main || null;
-            cptQuery.subType = condCptType.sub || null;
-        }
-        // `query` is an object, convert to {mainType, index, name, id}.
-        else {
-            // `xxxIndex`, `xxxName`, `xxxId`, `name`, `dataIndex`, `dataType` is reserved,
-            // can not be used in `compomentModel.filterForExposedEvent`.
-            var suffixes = ['Index', 'Name', 'Id'];
-            var dataKeys = {name: 1, dataIndex: 1, dataType: 1};
-            zrUtil.each(query, function (val, key) {
-                var reserved = false;
-                for (var i = 0; i < suffixes.length; i++) {
-                    var propSuffix = suffixes[i];
-                    var suffixPos = key.lastIndexOf(propSuffix);
-                    if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) {
-                        var mainType = key.slice(0, suffixPos);
-                        // Consider `dataIndex`.
-                        if (mainType !== 'data') {
-                            cptQuery.mainType = mainType;
-                            cptQuery[propSuffix.toLowerCase()] = val;
-                            reserved = true;
-                        }
-                    }
-                }
-                if (dataKeys.hasOwnProperty(key)) {
-                    dataQuery[key] = val;
-                    reserved = true;
-                }
-                if (!reserved) {
-                    otherQuery[key] = val;
-                }
-            });
-        }
-
-        return {
-            cptQuery: cptQuery,
-            dataQuery: dataQuery,
-            otherQuery: otherQuery
-        };
-    },
-
-    filter: function (eventType, query, args) {
-        // They should be assigned before each trigger call.
-        var eventInfo = this.eventInfo;
-
-        if (!eventInfo) {
-            return true;
-        }
-
-        var targetEl = eventInfo.targetEl;
-        var packedEvent = eventInfo.packedEvent;
-        var model = eventInfo.model;
-        var view = eventInfo.view;
-
-        // For event like 'globalout'.
-        if (!model || !view) {
-            return true;
-        }
-
-        var cptQuery = query.cptQuery;
-        var dataQuery = query.dataQuery;
-
-        return check(cptQuery, model, 'mainType')
-            && check(cptQuery, model, 'subType')
-            && check(cptQuery, model, 'index', 'componentIndex')
-            && check(cptQuery, model, 'name')
-            && check(cptQuery, model, 'id')
-            && check(dataQuery, packedEvent, 'name')
-            && check(dataQuery, packedEvent, 'dataIndex')
-            && check(dataQuery, packedEvent, 'dataType')
-            && (!view.filterForExposedEvent || view.filterForExposedEvent(
-                eventType, query.otherQuery, targetEl, packedEvent
-            ));
-
-        function check(query, host, prop, propOnHost) {
-            return query[prop] == null || host[propOnHost || prop] === query[prop];
-        }
-    },
-
-    afterTrigger: function () {
-        // Make sure the eventInfo wont be used in next trigger.
-        this.eventInfo = null;
-    }
-};
-
-
-/**
- * @type {Object} key: actionType.
- * @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 = [];
-
-/**
- * @type {Array.<Function>}
- * @inner
- */
-var postUpdateFuncs = [];
-
-/**
- * Visual encoding functions of each stage
- * @type {Array.<Object.<string, Function>>}
- */
-var visualFuncs = [];
-
-/**
- * Theme storage
- * @type {Object.<key, Object>}
- */
-var themeStorage = {};
-/**
- * Loading effects
- */
-var loadingEffects = {};
-
-var instances = {};
-var connectedGroups = {};
-
-var idBase = new Date() - 0;
-var groupIdBase = new Date() - 0;
-var DOM_ATTRIBUTE_KEY = '_echarts_instance_';
-
-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;
-        }
-    }
-
-    each(eventActionMap, function (actionType, eventType) {
-        chart._messageCenter.on(eventType, function (event) {
-            if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) {
-                if (event && event.escapeConnect) {
-                    return;
-                }
-
-                var action = chart.makeActionFromEvent(event);
-                var otherCharts = [];
-
-                each(instances, function (otherChart) {
-                    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 {HTMLElement} dom
- * @param {Object} [theme]
- * @param {Object} opts
- * @param {number} [opts.devicePixelRatio] Use window.devicePixelRatio by default
- * @param {string} [opts.renderer] Can choose 'canvas' or 'svg' to render the chart.
- * @param {number} [opts.width] Use clientWidth of the input `dom` by default.
- *                              Can be 'auto' (the same as null/undefined)
- * @param {number} [opts.height] Use clientHeight of the input `dom` by default.
- *                               Can be 'auto' (the same as null/undefined)
- */
-export function init(dom, theme, opts) {
-    if (__DEV__) {
-        // Check version
-        if ((zrender.version.replace('.', '') - 0) < (dependencies.zrender.replace('.', '') - 0)) {
-            throw new Error(
-                'zrender/src ' + zrender.version
-                + ' is too old for ECharts ' + version
-                + '. Current version need ZRender '
-                + dependencies.zrender + '+'
-            );
-        }
-
-        if (!dom) {
-            throw new Error('Initialize failed: invalid dom.');
-        }
-    }
-
-    var existInstance = getInstanceByDom(dom);
-    if (existInstance) {
-        if (__DEV__) {
-            console.warn('There is a chart instance already initialized on the dom.');
-        }
-        return existInstance;
-    }
-
-    if (__DEV__) {
-        if (zrUtil.isDom(dom)
-            && dom.nodeName.toUpperCase() !== 'CANVAS'
-            && (
-                (!dom.clientWidth && (!opts || opts.width == null))
-                || (!dom.clientHeight && (!opts || opts.height == null))
-            )
-        ) {
-            console.warn('Can\'t get DOM width or height. Please check '
-            + 'dom.clientWidth and dom.clientHeight. They should not be 0.'
-            + 'For example, you may need to call this in the callback '
-            + 'of window.onload.');
-        }
-    }
-
-    var chart = new ECharts(dom, theme, opts);
-    chart.id = 'ec_' + idBase++;
-    instances[chart.id] = chart;
-
-    modelUtil.setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id);
-
-    enableConnect(chart);
-
-    return chart;
-}
-
-/**
- * @return {string|Array.<module:echarts~ECharts>} groupId
- */
-export function connect(groupId) {
-    // Is array of charts
-    if (zrUtil.isArray(groupId)) {
-        var charts = groupId;
-        groupId = null;
-        // If any chart has group
-        each(charts, function (chart) {
-            if (chart.group != null) {
-                groupId = chart.group;
-            }
-        });
-        groupId = groupId || ('g_' + groupIdBase++);
-        each(charts, function (chart) {
-            chart.group = groupId;
-        });
-    }
-    connectedGroups[groupId] = true;
-    return groupId;
-}
-
-/**
- * @DEPRECATED
- * @return {string} groupId
- */
-export function disConnect(groupId) {
-    connectedGroups[groupId] = false;
-}
-
-/**
- * @return {string} groupId
- */
-export var disconnect = disConnect;
-
-/**
- * Dispose a chart instance
- * @param  {module:echarts~ECharts|HTMLDomElement|string} chart
- */
-export function dispose(chart) {
-    if (typeof chart === 'string') {
-        chart = instances[chart];
-    }
-    else if (!(chart instanceof ECharts)) {
-        // Try to treat as dom
-        chart = getInstanceByDom(chart);
-    }
-    if ((chart instanceof ECharts) && !chart.isDisposed()) {
-        chart.dispose();
-    }
-}
-
-/**
- * @param  {HTMLElement} dom
- * @return {echarts~ECharts}
- */
-export function getInstanceByDom(dom) {
-    return instances[modelUtil.getAttribute(dom, DOM_ATTRIBUTE_KEY)];
-}
-
-/**
- * @param {string} key
- * @return {echarts~ECharts}
- */
-export function getInstanceById(key) {
-    return instances[key];
-}
-
-/**
- * Register theme
- */
-export function registerTheme(name, theme) {
-    themeStorage[name] = theme;
-}
-
-/**
- * Register option preprocessor
- * @param {Function} preprocessorFunc
- */
-export function registerPreprocessor(preprocessorFunc) {
-    optionPreprocessorFuncs.push(preprocessorFunc);
-}
-
-/**
- * @param {number} [priority=1000]
- * @param {Object|Function} processor
- */
-export function registerProcessor(priority, processor) {
-    normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_FILTER);
-}
-
-/**
- * Register postUpdater
- * @param {Function} postUpdateFunc
- */
-export function registerPostUpdate(postUpdateFunc) {
-    postUpdateFuncs.push(postUpdateFunc);
-}
-
-/**
- * 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
- */
-export function registerAction(actionInfo, eventName, action) {
-    if (typeof eventName === 'function') {
-        action = eventName;
-        eventName = '';
-    }
-    var actionType = isObject(actionInfo)
-        ? actionInfo.type
-        : ([actionInfo, actionInfo = {
-            event: eventName
-        }][0]);
-
-    // Event name is all lowercase
-    actionInfo.event = (actionInfo.event || actionType).toLowerCase();
-    eventName = actionInfo.event;
-
-    // Validate action type and event name.
-    assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName));
-
-    if (!actions[actionType]) {
-        actions[actionType] = {action: action, actionInfo: actionInfo};
-    }
-    eventActionMap[eventName] = actionType;
-}
-
-/**
- * @param {string} type
- * @param {*} CoordinateSystem
- */
-export function registerCoordinateSystem(type, CoordinateSystem) {
-    CoordinateSystemManager.register(type, CoordinateSystem);
-}
-
-/**
- * Get dimensions of specified coordinate system.
- * @param {string} type
- * @return {Array.<string|Object>}
- */
-export function getCoordinateSystemDimensions(type) {
-    var coordSysCreator = CoordinateSystemManager.get(type);
-    if (coordSysCreator) {
-        return coordSysCreator.getDimensionsInfo
-                ? coordSysCreator.getDimensionsInfo()
-                : coordSysCreator.dimensions.slice();
-    }
-}
-
-/**
- * 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 {number} [priority=1000]
- * @param {Function} layoutTask
- */
-export function registerLayout(priority, layoutTask) {
-    normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout');
-}
-
-/**
- * @param {number} [priority=3000]
- * @param {module:echarts/stream/Task} visualTask
- */
-export function registerVisual(priority, visualTask) {
-    normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual');
-}
-
-/**
- * @param {Object|Function} fn: {seriesType, createOnAllSeries, performRawSeries, reset}
- */
-function normalizeRegister(targetList, priority, fn, defaultPriority, visualType) {
-    if (isFunction(priority) || isObject(priority)) {
-        fn = priority;
-        priority = defaultPriority;
-    }
-
-    if (__DEV__) {
-        if (isNaN(priority) || priority == null) {
-            throw new Error('Illegal priority');
-        }
-        // Check duplicate
-        each(targetList, function (wrap) {
-            assert(wrap.__raw !== fn);
-        });
-    }
-
-    var stageHandler = Scheduler.wrapStageHandler(fn, visualType);
-
-    stageHandler.__prio = priority;
-    stageHandler.__raw = fn;
-    targetList.push(stageHandler);
-
-    return stageHandler;
-}
-
-/**
- * @param {string} name
- */
-export function registerLoading(name, loadingFx) {
-    loadingEffects[name] = loadingFx;
-}
-
-/**
- * @param {Object} opts
- * @param {string} [superClass]
- */
-export function extendComponentModel(opts/*, superClass*/) {
-    // var Clazz = ComponentModel;
-    // if (superClass) {
-    //     var classType = parseClassType(superClass);
-    //     Clazz = ComponentModel.getClass(classType.main, classType.sub, true);
-    // }
-    return ComponentModel.extend(opts);
-}
-
-/**
- * @param {Object} opts
- * @param {string} [superClass]
- */
-export function extendComponentView(opts/*, superClass*/) {
-    // var Clazz = ComponentView;
-    // if (superClass) {
-    //     var classType = parseClassType(superClass);
-    //     Clazz = ComponentView.getClass(classType.main, classType.sub, true);
-    // }
-    return ComponentView.extend(opts);
-}
-
-/**
- * @param {Object} opts
- * @param {string} [superClass]
- */
-export function extendSeriesModel(opts/*, superClass*/) {
-    // var Clazz = SeriesModel;
-    // if (superClass) {
-    //     superClass = 'series.' + superClass.replace('series.', '');
-    //     var classType = parseClassType(superClass);
-    //     Clazz = ComponentModel.getClass(classType.main, classType.sub, true);
-    // }
-    return SeriesModel.extend(opts);
-}
-
-/**
- * @param {Object} opts
- * @param {string} [superClass]
- */
-export function extendChartView(opts/*, superClass*/) {
-    // var Clazz = ChartView;
-    // if (superClass) {
-    //     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);
- *     });
- */
-export function setCanvasCreator(creator) {
-    zrUtil.$override('createCanvas', creator);
-}
-
-/**
- * @param {string} mapName
- * @param {Array.<Object>|Object|string} geoJson
- * @param {Object} [specialAreas]
- *
- * @example GeoJSON
- *     $.get('USA.json', function (geoJson) {
- *         echarts.registerMap('USA', geoJson);
- *         // Or
- *         echarts.registerMap('USA', {
- *             geoJson: geoJson,
- *             specialAreas: {}
- *         })
- *     });
- *
- *     $.get('airport.svg', function (svg) {
- *         echarts.registerMap('airport', {
- *             svg: svg
- *         }
- *     });
- *
- *     echarts.registerMap('eu', [
- *         {svg: eu-topographic.svg},
- *         {geoJSON: eu.json}
- *     ])
- */
-export function registerMap(mapName, geoJson, specialAreas) {
-    mapDataStorage.registerMap(mapName, geoJson, specialAreas);
-}
-
-/**
- * @param {string} mapName
- * @return {Object}
- */
-export function getMap(mapName) {
-    // For backward compatibility, only return the first one.
-    var records = mapDataStorage.retrieveMap(mapName);
-    return records && records[0] && {
-        geoJson: records[0].geoJSON,
-        specialAreas: records[0].specialAreas
-    };
-}
-
-registerVisual(PRIORITY_VISUAL_GLOBAL, seriesColor);
-registerPreprocessor(backwardCompat);
-registerProcessor(PRIORITY_PROCESSOR_DATASTACK, dataStack);
-registerLoading('default', loadingDefault);
-
-// Default actions
-
-registerAction({
-    type: 'highlight',
-    event: 'highlight',
-    update: 'highlight'
-}, zrUtil.noop);
-
-registerAction({
-    type: 'downplay',
-    event: 'downplay',
-    update: 'downplay'
-}, zrUtil.noop);
-
-// Default theme
-registerTheme('light', lightTheme);
-registerTheme('dark', darkTheme);
-
-// For backward compatibility, where the namespace `dataTool` will
-// be mounted on `echarts` is the extension `dataTool` is imported.
-export var dataTool = {};

+ 0 - 97
admin/node_modules/echarts/src/export.js

@@ -1,97 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Do not mount those modules on 'src/echarts' for better tree shaking.
- */
-
-import * as zrender from 'zrender/src/zrender';
-import * as matrix from 'zrender/src/core/matrix';
-import * as vector from 'zrender/src/core/vector';
-import * as zrUtil from 'zrender/src/core/util';
-import * as colorTool from 'zrender/src/tool/color';
-import * as graphicUtil from './util/graphic';
-import * as numberUtil from './util/number';
-import * as formatUtil from './util/format';
-import {throttle} from './util/throttle';
-import * as ecHelper from './helper';
-import parseGeoJSON from './coord/geo/parseGeoJson';
-
-
-export {zrender};
-export {default as List} from './data/List';
-export {default as Model} from './model/Model';
-export {default as Axis} from './coord/Axis';
-export {numberUtil as number};
-export {formatUtil as format};
-export {throttle};
-export {ecHelper as helper};
-export {matrix};
-export {vector};
-export {colorTool as color};
-export {default as env} from 'zrender/src/core/env';
-
-export {parseGeoJSON};
-export var parseGeoJson = parseGeoJSON;
-
-var ecUtil = {};
-zrUtil.each(
-    [
-        'map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter',
-        'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction',
-        'extend', 'defaults', 'clone', 'merge'
-    ],
-    function (name) {
-        ecUtil[name] = zrUtil[name];
-    }
-);
-export {ecUtil as util};
-
-var graphic = {};
-zrUtil.each(
-    [
-        'extendShape', 'extendPath', 'makePath', 'makeImage',
-        'mergePath', 'resizePath', 'createIcon',
-        'setHoverStyle', 'setLabelStyle', 'setTextStyle', 'setText',
-        'getFont', 'updateProps', 'initProps', 'getTransform',
-        'clipPointsByRect', 'clipRectByRect',
-        'registerShape', 'getShapeClass',
-        'Group',
-        'Image',
-        'Text',
-        'Circle',
-        'Sector',
-        'Ring',
-        'Polygon',
-        'Polyline',
-        'Rect',
-        'Line',
-        'BezierCurve',
-        'Arc',
-        'IncrementalDisplayable',
-        'CompoundPath',
-        'LinearGradient',
-        'RadialGradient',
-        'BoundingRect'
-    ],
-    function (name) {
-        graphic[name] = graphicUtil[name];
-    }
-);
-export {graphic};

+ 0 - 107
admin/node_modules/echarts/src/helper.js

@@ -1,107 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import * as zrUtil from 'zrender/src/core/util';
-import createListFromArray from './chart/helper/createListFromArray';
-// import createGraphFromNodeEdge from './chart/helper/createGraphFromNodeEdge';
-import * as axisHelper from './coord/axisHelper';
-import axisModelCommonMixin from './coord/axisModelCommonMixin';
-import Model from './model/Model';
-import {getLayoutRect} from './util/layout';
-import {
-    enableDataStack,
-    isDimensionStacked,
-    getStackedDimension
-} from './data/helper/dataStackHelper';
-
-/**
- * Create a muti dimension List structure from seriesModel.
- * @param  {module:echarts/model/Model} seriesModel
- * @return {module:echarts/data/List} list
- */
-export function createList(seriesModel) {
-    return createListFromArray(seriesModel.getSource(), seriesModel);
-}
-
-// export function createGraph(seriesModel) {
-//     var nodes = seriesModel.get('data');
-//     var links = seriesModel.get('links');
-//     return createGraphFromNodeEdge(nodes, links, seriesModel);
-// }
-
-export {getLayoutRect};
-
-/**
- * // TODO: @deprecated
- */
-export {default as completeDimensions} from './data/helper/completeDimensions';
-
-export {default as createDimensions} from './data/helper/createDimensions';
-
-export var dataStack = {
-    isDimensionStacked: isDimensionStacked,
-    enableDataStack: enableDataStack,
-    getStackedDimension: getStackedDimension
-};
-
-/**
- * Create a symbol element with given symbol configuration: shape, x, y, width, height, color
- * @param {string} symbolDesc
- * @param {number} x
- * @param {number} y
- * @param {number} w
- * @param {number} h
- * @param {string} color
- */
-export {createSymbol} from './util/symbol';
-
-/**
- * Create scale
- * @param {Array.<number>} dataExtent
- * @param {Object|module:echarts/Model} option
- */
-export function createScale(dataExtent, option) {
-    var axisModel = option;
-    if (!Model.isInstance(option)) {
-        axisModel = new Model(option);
-        zrUtil.mixin(axisModel, axisModelCommonMixin);
-    }
-
-    var scale = axisHelper.createScaleByModel(axisModel);
-    scale.setExtent(dataExtent[0], dataExtent[1]);
-
-    axisHelper.niceScaleExtent(scale, axisModel);
-    return scale;
-}
-
-/**
- * Mixin common methods to axis model,
- *
- * Inlcude methods
- * `getFormattedLabels() => Array.<string>`
- * `getCategories() => Array.<string>`
- * `getMin(origin: boolean) => number`
- * `getMax(origin: boolean) => number`
- * `getNeedCrossZero() => boolean`
- * `setRange(start: number, end: number)`
- * `resetRange()`
- */
-export function mixinAxisModelCommonMethods(Model) {
-    zrUtil.mixin(Model, axisModelCommonMixin);
-}

+ 0 - 126
admin/node_modules/echarts/src/lang.js

@@ -1,126 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Language: (Simplified) Chinese.
- */
-
-export default {
-    legend: {
-        selector: {
-            all: '全选',
-            inverse: '反选'
-        }
-    },
-    toolbox: {
-        brush: {
-            title: {
-                rect: '矩形选择',
-                polygon: '圈选',
-                lineX: '横向选择',
-                lineY: '纵向选择',
-                keep: '保持选择',
-                clear: '清除选择'
-            }
-        },
-        dataView: {
-            title: '数据视图',
-            lang: ['数据视图', '关闭', '刷新']
-        },
-        dataZoom: {
-            title: {
-                zoom: '区域缩放',
-                back: '区域缩放还原'
-            }
-        },
-        magicType: {
-            title: {
-                line: '切换为折线图',
-                bar: '切换为柱状图',
-                stack: '切换为堆叠',
-                tiled: '切换为平铺'
-            }
-        },
-        restore: {
-            title: '还原'
-        },
-        saveAsImage: {
-            title: '保存为图片',
-            lang: ['右键另存为图片']
-        }
-    },
-    series: {
-        typeNames: {
-            pie: '饼图',
-            bar: '柱状图',
-            line: '折线图',
-            scatter: '散点图',
-            effectScatter: '涟漪散点图',
-            radar: '雷达图',
-            tree: '树图',
-            treemap: '矩形树图',
-            boxplot: '箱型图',
-            candlestick: 'K线图',
-            k: 'K线图',
-            heatmap: '热力图',
-            map: '地图',
-            parallel: '平行坐标图',
-            lines: '线图',
-            graph: '关系图',
-            sankey: '桑基图',
-            funnel: '漏斗图',
-            gauge: '仪表盘图',
-            pictorialBar: '象形柱图',
-            themeRiver: '主题河流图',
-            sunburst: '旭日图'
-        }
-    },
-    aria: {
-        general: {
-            withTitle: '这是一个关于“{title}”的图表。',
-            withoutTitle: '这是一个图表,'
-        },
-        series: {
-            single: {
-                prefix: '',
-                withName: '图表类型是{seriesType},表示{seriesName}。',
-                withoutName: '图表类型是{seriesType}。'
-            },
-            multiple: {
-                prefix: '它由{seriesCount}个图表系列组成。',
-                withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',
-                withoutName: '第{seriesId}个系列是一个{seriesType},',
-                separator: {
-                    middle: ';',
-                    end: '。'
-                }
-            }
-        },
-        data: {
-            allData: '其数据是——',
-            partialData: '其中,前{displayCnt}项是——',
-            withName: '{name}的数据是{value}',
-            withoutName: '{value}',
-            separator: {
-                middle: ',',
-                end: ''
-            }
-        }
-    }
-};

+ 0 - 126
admin/node_modules/echarts/src/langEN.js

@@ -1,126 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-/**
- * Language: English.
- */
-
-export default {
-    legend: {
-        selector: {
-            all: 'All',
-            inverse: 'Inv'
-        }
-    },
-    toolbox: {
-        brush: {
-            title: {
-                rect: 'Box Select',
-                polygon: 'Lasso Select',
-                lineX: 'Horizontally Select',
-                lineY: 'Vertically Select',
-                keep: 'Keep Selections',
-                clear: 'Clear Selections'
-            }
-        },
-        dataView: {
-            title: 'Data View',
-            lang: ['Data View', 'Close', 'Refresh']
-        },
-        dataZoom: {
-            title: {
-                zoom: 'Zoom',
-                back: 'Zoom Reset'
-            }
-        },
-        magicType: {
-            title: {
-                line: 'Switch to Line Chart',
-                bar: 'Switch to Bar Chart',
-                stack: 'Stack',
-                tiled: 'Tile'
-            }
-        },
-        restore: {
-            title: 'Restore'
-        },
-        saveAsImage: {
-            title: 'Save as Image',
-            lang: ['Right Click to Save Image']
-        }
-    },
-    series: {
-        typeNames: {
-            pie: 'Pie chart',
-            bar: 'Bar chart',
-            line: 'Line chart',
-            scatter: 'Scatter plot',
-            effectScatter: 'Ripple scatter plot',
-            radar: 'Radar chart',
-            tree: 'Tree',
-            treemap: 'Treemap',
-            boxplot: 'Boxplot',
-            candlestick: 'Candlestick',
-            k: 'K line chart',
-            heatmap: 'Heat map',
-            map: 'Map',
-            parallel: 'Parallel coordinate map',
-            lines: 'Line graph',
-            graph: 'Relationship graph',
-            sankey: 'Sankey diagram',
-            funnel: 'Funnel chart',
-            gauge: 'Guage',
-            pictorialBar: 'Pictorial bar',
-            themeRiver: 'Theme River Map',
-            sunburst: 'Sunburst'
-        }
-    },
-    aria: {
-        general: {
-            withTitle: 'This is a chart about "{title}"',
-            withoutTitle: 'This is a chart'
-        },
-        series: {
-            single: {
-                prefix: '',
-                withName: ' with type {seriesType} named {seriesName}.',
-                withoutName: ' with type {seriesType}.'
-            },
-            multiple: {
-                prefix: '. It consists of {seriesCount} series count.',
-                withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',
-                withoutName: ' The {seriesId} series is a {seriesType}.',
-                separator: {
-                    middle: '',
-                    end: ''
-                }
-            }
-        },
-        data: {
-            allData: 'The data is as follows: ',
-            partialData: 'The first {displayCnt} items are: ',
-            withName: 'the data for {name} is {value}',
-            withoutName: '{value}',
-            separator: {
-                middle: ',',
-                end: '.'
-            }
-        }
-    }
-};

部分文件因文件數量過多而無法顯示