define("crm-modules/common/echarts/chart/boxplot/BoxplotSeries", [ "crm-modules/common/echarts/zrender/core/util", "../../model/Series", "../helper/whiskerBoxCommon" ], function(require, exports, module) {
    "use strict";
    var zrUtil = require("crm-modules/common/echarts/zrender/core/util");
    var SeriesModel = require("../../model/Series");
    var whiskerBoxCommon = require("../helper/whiskerBoxCommon");
    var BoxplotSeries = SeriesModel.extend({
        type: "series.boxplot",
        dependencies: [ "xAxis", "yAxis", "grid" ],
        valueDimensions: [ "min", "Q1", "median", "Q3", "max" ],
        dimensions: null,
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "cartesian2d",
            legendHoverLink: true,
            hoverAnimation: true,
            xAxisIndex: 0,
            yAxisIndex: 0,
            layout: null,
            boxWidth: [ 7, 50 ],
            itemStyle: {
                normal: {
                    color: "#fff",
                    borderWidth: 1
                },
                emphasis: {
                    borderWidth: 2,
                    shadowBlur: 5,
                    shadowOffsetX: 2,
                    shadowOffsetY: 2,
                    shadowColor: "rgba(0,0,0,0.4)"
                }
            },
            animationEasing: "elasticOut",
            animationDuration: 800
        }
    });
    zrUtil.mixin(BoxplotSeries, whiskerBoxCommon.seriesModelMixin, true);
    return BoxplotSeries;
});
Example #2
0
define("crm-modules/common/echarts/model/Component", [ "./Model", "crm-modules/common/echarts/zrender/core/util", "../util/component", "../util/clazz", "../util/layout", "./mixin/boxLayout" ], function(require, exports, module) {
    var Model = require("./Model");
    var zrUtil = require("crm-modules/common/echarts/zrender/core/util");
    var arrayPush = Array.prototype.push;
    var componentUtil = require("../util/component");
    var clazzUtil = require("../util/clazz");
    var layout = require("../util/layout");
    var ComponentModel = Model.extend({
        type: "component",
        id: "",
        name: "",
        mainType: "",
        subType: "",
        componentIndex: 0,
        defaultOption: null,
        ecModel: null,
        dependentModels: [],
        uid: null,
        layoutMode: null,
        init: function(option, parentModel, ecModel, extraOpt) {
            this.mergeDefaultAndTheme(this.option, this.ecModel);
        },
        mergeDefaultAndTheme: function(option, ecModel) {
            var layoutMode = this.layoutMode;
            var inputPositionParams = layoutMode ? layout.getLayoutParams(option) : {};
            var themeModel = ecModel.getTheme();
            zrUtil.merge(option, themeModel.get(this.mainType));
            zrUtil.merge(option, this.getDefaultOption());
            if (layoutMode) {
                layout.mergeLayoutParam(option, inputPositionParams, layoutMode);
            }
        },
        mergeOption: function(option) {
            zrUtil.merge(this.option, option, true);
            var layoutMode = this.layoutMode;
            if (layoutMode) {
                layout.mergeLayoutParam(this.option, option, layoutMode);
            }
        },
        getDefaultOption: function() {
            if (!this.hasOwnProperty("__defaultOption")) {
                var optList = [];
                var Class = this.constructor;
                while (Class) {
                    var opt = Class.prototype.defaultOption;
                    opt && optList.push(opt);
                    Class = Class.superClass;
                }
                var defaultOption = {};
                for (var i = optList.length - 1; i >= 0; i--) {
                    defaultOption = zrUtil.merge(defaultOption, optList[i], true);
                }
                this.__defaultOption = defaultOption;
            }
            return this.__defaultOption;
        }
    });
    clazzUtil.enableClassExtend(ComponentModel, function(option, parentModel, ecModel, extraOpt) {
        zrUtil.extend(this, extraOpt);
        this.uid = componentUtil.getUID("componentModel");
        this.setReadOnly([ "type", "id", "uid", "name", "mainType", "subType", "dependentModels", "componentIndex" ]);
    });
    clazzUtil.enableClassManagement(ComponentModel, {
        registerWhenExtend: true
    });
    componentUtil.enableSubTypeDefaulter(ComponentModel);
    componentUtil.enableTopologicalTravel(ComponentModel, getDependencies);
    function getDependencies(componentType) {
        var deps = [];
        zrUtil.each(ComponentModel.getClassesByMainType(componentType), function(Clazz) {
            arrayPush.apply(deps, Clazz.prototype.dependencies || []);
        });
        return zrUtil.map(deps, function(type) {
            return clazzUtil.parseClassType(type).main;
        });
    }
    zrUtil.mixin(ComponentModel, require("./mixin/boxLayout"));
    return ComponentModel;
});
Example #3
0
define("crm-modules/common/echarts/chart/map/MapSeries", [ "../../data/List", "../../echarts", "../../model/Series", "crm-modules/common/echarts/zrender/core/util", "../../data/helper/completeDimensions", "../../util/format", "../helper/dataSelectableMixin" ], function(require, exports, module) {
    var List = require("../../data/List");
    var echarts = require("../../echarts");
    var SeriesModel = require("../../model/Series");
    var zrUtil = require("crm-modules/common/echarts/zrender/core/util");
    var completeDimensions = require("../../data/helper/completeDimensions");
    var formatUtil = require("../../util/format");
    var encodeHTML = formatUtil.encodeHTML;
    var addCommas = formatUtil.addCommas;
    var dataSelectableMixin = require("../helper/dataSelectableMixin");
    function fillData(dataOpt, geoJson) {
        var dataNameMap = {};
        var features = geoJson.features;
        for (var i = 0; i < dataOpt.length; i++) {
            dataNameMap[dataOpt[i].name] = dataOpt[i];
        }
        for (var i = 0; i < features.length; i++) {
            var name = features[i].properties.name;
            if (!dataNameMap[name]) {
                dataOpt.push({
                    value: NaN,
                    name: name
                });
            }
        }
        return dataOpt;
    }
    var MapSeries = SeriesModel.extend({
        type: "series.map",
        needsDrawMap: false,
        seriesGroup: [],
        init: function(option) {
            option = this._fillOption(option);
            this.option = option;
            this.$superApply("init", arguments);
            this.updateSelectedMap();
        },
        getInitialData: function(option) {
            var dimensions = completeDimensions([ "value" ], option.data || []);
            var list = new List(dimensions, this);
            list.initData(option.data);
            return list;
        },
        mergeOption: function(newOption) {
            newOption = this._fillOption(newOption);
            SeriesModel.prototype.mergeOption.call(this, newOption);
            this.updateSelectedMap();
        },
        _fillOption: function(option) {
            option = zrUtil.extend({}, option);
            var map = echarts.getMap(option.mapType);
            var geoJson = map && map.geoJson;
            geoJson && option.data && (option.data = fillData(option.data, geoJson));
            return option;
        },
        setRoamZoom: function(zoom) {
            var roamDetail = this.option.roamDetail;
            roamDetail && (roamDetail.zoom = zoom);
        },
        setRoamPan: function(x, y) {
            var roamDetail = this.option.roamDetail;
            if (roamDetail) {
                roamDetail.x = x;
                roamDetail.y = y;
            }
        },
        formatTooltip: function(dataIndex) {
            var data = this._data;
            var formattedValue = addCommas(this.getRawValue(dataIndex));
            var name = data.getName(dataIndex);
            var seriesGroup = this.seriesGroup;
            var seriesNames = [];
            for (var i = 0; i < seriesGroup.length; i++) {
                if (!isNaN(seriesGroup[i].getRawValue(dataIndex))) {
                    seriesNames.push(encodeHTML(seriesGroup[i].name));
                }
            }
            return seriesNames.join(", ") + "<br />" + name + " : " + formattedValue;
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "geo",
            map: "china",
            left: "center",
            top: "center",
            showLegendSymbol: true,
            dataRangeHoverLink: true,
            roamDetail: {
                x: 0,
                y: 0,
                zoom: 1
            },
            label: {
                normal: {
                    show: false,
                    textStyle: {
                        color: "#000"
                    }
                },
                emphasis: {
                    show: false,
                    textStyle: {
                        color: "#000"
                    }
                }
            },
            itemStyle: {
                normal: {
                    borderWidth: .5,
                    borderColor: "#444",
                    areaColor: "#eee"
                },
                emphasis: {
                    areaColor: "rgba(255,215, 0, 0.8)"
                }
            }
        }
    });
    zrUtil.mixin(MapSeries, dataSelectableMixin);
    return MapSeries;
});
Example #4
0
define("crm-modules/common/echarts/model/Series", [ "crm-modules/common/echarts/zrender/core/util", "../util/format", "../util/model", "./Component" ], function(require, exports, module) {
    "use strict";
    var zrUtil = require("crm-modules/common/echarts/zrender/core/util");
    var formatUtil = require("../util/format");
    var modelUtil = require("../util/model");
    var ComponentModel = require("./Component");
    var encodeHTML = formatUtil.encodeHTML;
    var addCommas = formatUtil.addCommas;
    var SeriesModel = ComponentModel.extend({
        type: "series",
        seriesIndex: 0,
        coordinateSystem: null,
        defaultOption: null,
        legendDataProvider: null,
        init: function(option, parentModel, ecModel, extraOpt) {
            this.seriesIndex = this.componentIndex;
            this.mergeDefaultAndTheme(option, ecModel);
            this._dataBeforeProcessed = this.getInitialData(option, ecModel);
            this._data = this._dataBeforeProcessed.cloneShallow();
        },
        mergeDefaultAndTheme: function(option, ecModel) {
            zrUtil.merge(option, ecModel.getTheme().get(this.subType));
            zrUtil.merge(option, this.getDefaultOption());
            modelUtil.defaultEmphasis(option.label, [ "position", "show", "textStyle", "distance", "formatter" ]);
        },
        mergeOption: function(newSeriesOption, ecModel) {
            newSeriesOption = zrUtil.merge(this.option, newSeriesOption, true);
            var data = this.getInitialData(newSeriesOption, ecModel);
            if (data) {
                this._data = data;
                this._dataBeforeProcessed = data.cloneShallow();
            }
        },
        getInitialData: function() {},
        getData: function() {
            return this._data;
        },
        setData: function(data) {
            this._data = data;
        },
        getRawData: function() {
            return this._dataBeforeProcessed;
        },
        getRawDataArray: function() {
            return this.option.data;
        },
        getDimensionsOnAxis: function(axisDim) {
            return [ axisDim ];
        },
        formatTooltip: function(dataIndex, mutipleSeries) {
            var data = this._data;
            var value = this.getRawValue(dataIndex);
            var formattedValue = zrUtil.isArray(value) ? zrUtil.map(value, addCommas).join(", ") : addCommas(value);
            var name = data.getName(dataIndex);
            return !mutipleSeries ? encodeHTML(this.name) + "<br />" + (name ? encodeHTML(name) + " : " + formattedValue : formattedValue) : encodeHTML(this.name) + " : " + formattedValue;
        },
        restoreData: function() {
            this._data = this._dataBeforeProcessed.cloneShallow();
        }
    });
    zrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin);
    return SeriesModel;
});
Example #5
0
define("crm-modules/common/echarts/echarts", [ "./model/Global", "./ExtensionAPI", "./CoordinateSystem", "./model/OptionManager", "./model/Component", "./model/Series", "./view/Component", "./view/Chart", "./util/graphic", "crm-modules/common/echarts/zrender/zrender", "crm-modules/common/echarts/zrender/core/util", "crm-modules/common/echarts/zrender/tool/color", "crm-modules/common/echarts/zrender/core/env", "crm-modules/common/echarts/zrender/mixin/Eventful", "./loading/default", "./visual/seriesColor", "./preprocessor/backwardCompat", "./util/graphic", "./util/number", "./util/format", "crm-modules/common/echarts/zrender/core/matrix", "crm-modules/common/echarts/zrender/core/vector" ], function(require, exports, module) {
    var GlobalModel = require("./model/Global");
    var ExtensionAPI = require("./ExtensionAPI");
    var CoordinateSystemManager = require("./CoordinateSystem");
    var OptionManager = require("./model/OptionManager");
    var ComponentModel = require("./model/Component");
    var SeriesModel = require("./model/Series");
    var ComponentView = require("./view/Component");
    var ChartView = require("./view/Chart");
    var graphic = require("./util/graphic");
    var zrender = require("crm-modules/common/echarts/zrender/zrender");
    var zrUtil = require("crm-modules/common/echarts/zrender/core/util");
    var colorTool = require("crm-modules/common/echarts/zrender/tool/color");
    var env = require("crm-modules/common/echarts/zrender/core/env");
    var Eventful = require("crm-modules/common/echarts/zrender/mixin/Eventful");
    var each = zrUtil.each;
    var VISUAL_CODING_STAGES = [ "echarts", "chart", "component" ];
    var PROCESSOR_STAGES = [ "transform", "filter", "statistic" ];
    function createRegisterEventWithLowercaseName(method) {
        return function(eventName, handler, context) {
            eventName = eventName && eventName.toLowerCase();
            Eventful.prototype[method].call(this, eventName, handler, context);
        };
    }
    function MessageCenter() {
        Eventful.call(this);
    }
    MessageCenter.prototype.on = createRegisterEventWithLowercaseName("on");
    MessageCenter.prototype.off = createRegisterEventWithLowercaseName("off");
    MessageCenter.prototype.one = createRegisterEventWithLowercaseName("one");
    zrUtil.mixin(MessageCenter, Eventful);
    function ECharts(dom, theme, opts) {
        opts = opts || {};
        if (theme) {
            each(optionPreprocessorFuncs, function(preProcess) {
                preProcess(theme);
            });
        }
        this.id;
        this.group;
        this._dom = dom;
        this._zr = zrender.init(dom, {
            renderer: opts.renderer || "canvas",
            devicePixelRatio: opts.devicePixelRatio
        });
        if (typeof theme === "string") {
            theme = themeStorage[theme];
        }
        this._theme = zrUtil.clone(theme);
        this._chartsViews = [];
        this._chartsMap = {};
        this._componentsViews = [];
        this._componentsMap = {};
        this._api = new ExtensionAPI(this);
        this._coordinateSystem = new CoordinateSystemManager();
        Eventful.call(this);
        this._messageCenter = new MessageCenter();
        this._initEvents();
        this.resize = zrUtil.bind(this.resize, this);
    }
    var echartsProto = ECharts.prototype;
    echartsProto.getDom = function() {
        return this._dom;
    };
    echartsProto.getZr = function() {
        return this._zr;
    };
    echartsProto.setOption = function(option, notMerge, notRefreshImmediately) {
        if (!this._model || notMerge) {
            this._model = new GlobalModel(null, null, this._theme, new OptionManager(this._api));
        }
        this._model.setOption(option, optionPreprocessorFuncs);
        updateMethods.prepareAndUpdate.call(this);
        !notRefreshImmediately && this._zr.refreshImmediately();
    };
    echartsProto.setTheme = function() {
        console.log("ECharts#setTheme() is DEPRECATED in ECharts 3.0");
    };
    echartsProto.getModel = function() {
        return this._model;
    };
    echartsProto.getOption = function() {
        return zrUtil.clone(this._model.option);
    };
    echartsProto.getWidth = function() {
        return this._zr.getWidth();
    };
    echartsProto.getHeight = function() {
        return this._zr.getHeight();
    };
    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();
        zrUtil.each(list, function(el) {
            el.stopAnimation(true);
        });
        return zr.painter.getRenderedCanvas(opts);
    };
    echartsProto.getDataURL = function(opts) {
        opts = opts || {};
        var excludeComponents = opts.excludeComponents;
        var ecModel = this._model;
        var excludesComponentViews = [];
        var self = this;
        each(excludeComponents, function(componentType) {
            ecModel.eachComponent({
                mainType: componentType
            }, function(component) {
                var view = self._componentsMap[component.__viewId];
                if (!view.group.ignore) {
                    excludesComponentViews.push(view);
                    view.group.ignore = true;
                }
            });
        });
        var url = this.getRenderedCanvas(opts).toDataURL("image/" + (opts && opts.type || "png"));
        each(excludesComponentViews, function(view) {
            view.group.ignore = false;
        });
        return url;
    };
    echartsProto.getConnectedDataURL = function(opts) {
        if (!env.canvasSupported) {
            return;
        }
        var groupId = this.group;
        var mathMin = Math.min;
        var mathMax = Math.max;
        var MAX_NUMBER = Infinity;
        if (connectedGroups[groupId]) {
            var left = MAX_NUMBER;
            var top = MAX_NUMBER;
            var right = -MAX_NUMBER;
            var bottom = -MAX_NUMBER;
            var canvasList = [];
            var dpr = opts && opts.pixelRatio || 1;
            for (var id in instances) {
                var chart = instances[id];
                if (chart.group === groupId) {
                    var canvas = chart.getRenderedCanvas(zrUtil.clone(opts));
                    var boundingRect = chart.getDom().getBoundingClientRect();
                    left = mathMin(boundingRect.left, left);
                    top = mathMin(boundingRect.top, top);
                    right = mathMax(boundingRect.right, right);
                    bottom = mathMax(boundingRect.bottom, bottom);
                    canvasList.push({
                        dom: canvas,
                        left: boundingRect.left,
                        top: boundingRect.top
                    });
                }
            }
            left *= dpr;
            top *= dpr;
            right *= dpr;
            bottom *= dpr;
            var width = right - left;
            var height = bottom - top;
            var targetCanvas = zrUtil.createCanvas();
            targetCanvas.width = width;
            targetCanvas.height = height;
            var zr = zrender.init(targetCanvas);
            each(canvasList, function(item) {
                var img = new graphic.Image({
                    style: {
                        x: item.left * dpr - left,
                        y: item.top * dpr - top,
                        image: item.dom
                    }
                });
                zr.add(img);
            });
            zr.refreshImmediately();
            return targetCanvas.toDataURL("image/" + (opts && opts.type || "png"));
        } else {
            return this.getDataURL(opts);
        }
    };
    var updateMethods = {
        update: function(payload) {
            var ecModel = this._model;
            if (!ecModel) {
                return;
            }
            ecModel.restoreData();
            processData.call(this, ecModel);
            stackSeriesData.call(this, ecModel);
            this._coordinateSystem.update(ecModel, this._api);
            doLayout.call(this, ecModel, payload);
            doVisualCoding.call(this, ecModel, payload);
            doRender.call(this, ecModel, payload);
            var backgroundColor = ecModel.get("backgroundColor") || "transparent";
            var painter = this._zr.painter;
            if (painter.isSingleCanvas && painter.isSingleCanvas()) {
                this._zr.configLayer(0, {
                    clearColor: backgroundColor
                });
            } else {
                if (!env.canvasSupported) {
                    var colorArr = colorTool.parse(backgroundColor);
                    backgroundColor = colorTool.stringify(colorArr, "rgb");
                    if (colorArr[3] === 0) {
                        backgroundColor = "transparent";
                    }
                }
                backgroundColor = backgroundColor;
                this._dom.style.backgroundColor = backgroundColor;
            }
        },
        updateView: function(payload) {
            var ecModel = this._model;
            if (!ecModel) {
                return;
            }
            doLayout.call(this, ecModel, payload);
            doVisualCoding.call(this, ecModel, payload);
            invokeUpdateMethod.call(this, "updateView", ecModel, payload);
        },
        updateVisual: function(payload) {
            var ecModel = this._model;
            if (!ecModel) {
                return;
            }
            doVisualCoding.call(this, ecModel, payload);
            invokeUpdateMethod.call(this, "updateVisual", ecModel, payload);
        },
        updateLayout: function(payload) {
            var ecModel = this._model;
            if (!ecModel) {
                return;
            }
            doLayout.call(this, ecModel, payload);
            invokeUpdateMethod.call(this, "updateLayout", ecModel, payload);
        },
        highlight: function(payload) {
            toggleHighlight.call(this, "highlight", payload);
        },
        downplay: function(payload) {
            toggleHighlight.call(this, "downplay", payload);
        },
        prepareAndUpdate: function(payload) {
            var ecModel = this._model;
            prepareView.call(this, "component", ecModel);
            prepareView.call(this, "chart", ecModel);
            updateMethods.update.call(this, payload);
        }
    };
    function toggleHighlight(method, payload) {
        var ecModel = this._model;
        if (!ecModel) {
            return;
        }
        ecModel.eachComponent({
            mainType: "series",
            query: payload
        }, function(seriesModel, index) {
            var chartView = this._chartsMap[seriesModel.__viewId];
            if (chartView && chartView.__alive) {
                chartView[method](seriesModel, ecModel, this._api, payload);
            }
        }, this);
    }
    echartsProto.resize = function() {
        this._zr.resize();
        var optionChanged = this._model && this._model.resetOption("media");
        updateMethods[optionChanged ? "prepareAndUpdate" : "update"].call(this);
        this._loadingFX && this._loadingFX.resize();
    };
    var defaultLoadingEffect = require("./loading/default");
    echartsProto.showLoading = function(name, cfg) {
        if (zrUtil.isObject(name)) {
            cfg = name;
            name = "default";
        }
        var el = defaultLoadingEffect(this._api, cfg);
        var zr = this._zr;
        this._loadingFX = el;
        zr.add(el);
    };
    echartsProto.hideLoading = function() {
        this._loadingFX && this._zr.remove(this._loadingFX);
        this._loadingFX = null;
    };
    echartsProto.makeActionFromEvent = function(eventObj) {
        var payload = zrUtil.extend({}, eventObj);
        payload.type = eventActionMap[eventObj.type];
        return payload;
    };
    echartsProto.dispatchAction = function(payload, silent) {
        var actionWrap = actions[payload.type];
        if (actionWrap) {
            var actionInfo = actionWrap.actionInfo;
            var updateMethod = actionInfo.update || "update";
            var payloads = [ payload ];
            var batched = false;
            if (payload.batch) {
                batched = true;
                payloads = zrUtil.map(payload.batch, function(item) {
                    item = zrUtil.defaults(zrUtil.extend({}, item), payload);
                    item.batch = null;
                    return item;
                });
            }
            var eventObjBatch = [];
            var eventObj;
            var isHighlightOrDownplay = payload.type === "highlight" || payload.type === "downplay";
            for (var i = 0; i < payloads.length; i++) {
                var batchItem = payloads[i];
                eventObj = actionWrap.action(batchItem, this._model);
                eventObj = eventObj || zrUtil.extend({}, batchItem);
                eventObj.type = actionInfo.event || eventObj.type;
                eventObjBatch.push(eventObj);
                isHighlightOrDownplay && updateMethods[updateMethod].call(this, batchItem);
            }
            updateMethod !== "none" && !isHighlightOrDownplay && updateMethods[updateMethod].call(this, payload);
            if (!silent) {
                if (batched) {
                    eventObj = {
                        type: eventObjBatch[0].type,
                        batch: eventObjBatch
                    };
                } else {
                    eventObj = eventObjBatch[0];
                }
                this._messageCenter.trigger(eventObj.type, eventObj);
            }
        }
    };
    echartsProto.on = createRegisterEventWithLowercaseName("on");
    echartsProto.off = createRegisterEventWithLowercaseName("off");
    echartsProto.one = createRegisterEventWithLowercaseName("one");
    function invokeUpdateMethod(methodName, ecModel, payload) {
        var api = this._api;
        each(this._componentsViews, function(component) {
            var componentModel = component.__model;
            component[methodName](componentModel, ecModel, api, payload);
            updateZ(componentModel, component);
        }, this);
        ecModel.eachSeries(function(seriesModel, idx) {
            var chart = this._chartsMap[seriesModel.__viewId];
            chart[methodName](seriesModel, ecModel, api, payload);
            updateZ(seriesModel, chart);
        }, this);
    }
    function prepareView(type, ecModel) {
        var isComponent = type === "component";
        var viewList = isComponent ? this._componentsViews : this._chartsViews;
        var viewMap = isComponent ? this._componentsMap : this._chartsMap;
        var zr = this._zr;
        for (var i = 0; i < viewList.length; i++) {
            viewList[i].__alive = false;
        }
        ecModel[isComponent ? "eachComponent" : "eachSeries"](function(componentType, model) {
            if (isComponent) {
                if (componentType === "series") {
                    return;
                }
            } else {
                model = componentType;
            }
            var viewId = model.id + "_" + model.type;
            var view = viewMap[viewId];
            if (!view) {
                var classType = ComponentModel.parseClassType(model.type);
                var Clazz = isComponent ? ComponentView.getClass(classType.main, classType.sub) : ChartView.getClass(classType.sub);
                if (Clazz) {
                    view = new Clazz();
                    view.init(ecModel, this._api);
                    viewMap[viewId] = view;
                    viewList.push(view);
                    zr.add(view.group);
                } else {
                    return;
                }
            }
            model.__viewId = viewId;
            view.__alive = true;
            view.__id = viewId;
            view.__model = model;
        }, this);
        for (var i = 0; i < viewList.length; ) {
            var view = viewList[i];
            if (!view.__alive) {
                zr.remove(view.group);
                view.dispose(ecModel, this._api);
                viewList.splice(i, 1);
                delete viewMap[view.__id];
            } else {
                i++;
            }
        }
    }
    function processData(ecModel) {
        each(PROCESSOR_STAGES, function(stage) {
            each(dataProcessorFuncs[stage] || [], function(process) {
                process(ecModel);
            });
        });
    }
    function stackSeriesData(ecModel) {
        var stackedDataMap = {};
        ecModel.eachSeries(function(series) {
            var stack = series.get("stack");
            var data = series.getData();
            if (stack && data.type === "list") {
                var previousStack = stackedDataMap[stack];
                if (previousStack) {
                    data.stackedOn = previousStack;
                }
                stackedDataMap[stack] = data;
            }
        });
    }
    function doLayout(ecModel, payload) {
        var api = this._api;
        each(layoutFuncs, function(layout) {
            layout(ecModel, api, payload);
        });
    }
    function doVisualCoding(ecModel, payload) {
        each(VISUAL_CODING_STAGES, function(stage) {
            each(visualCodingFuncs[stage] || [], function(visualCoding) {
                visualCoding(ecModel, payload);
            });
        });
    }
    function doRender(ecModel, payload) {
        var api = this._api;
        each(this._componentsViews, function(componentView) {
            var componentModel = componentView.__model;
            componentView.render(componentModel, ecModel, api, payload);
            updateZ(componentModel, componentView);
        }, this);
        each(this._chartsViews, function(chart) {
            chart.__alive = false;
        }, this);
        ecModel.eachSeries(function(seriesModel, idx) {
            var chartView = this._chartsMap[seriesModel.__viewId];
            chartView.__alive = true;
            chartView.render(seriesModel, ecModel, api, payload);
            updateZ(seriesModel, chartView);
        }, this);
        each(this._chartsViews, function(chart) {
            if (!chart.__alive) {
                chart.remove(ecModel, api);
            }
        }, this);
    }
    var MOUSE_EVENT_NAMES = [ "click", "dblclick", "mouseover", "mouseout", "globalout" ];
    echartsProto._initEvents = function() {
        var zr = this._zr;
        each(MOUSE_EVENT_NAMES, function(eveName) {
            zr.on(eveName, function(e) {
                var ecModel = this.getModel();
                var el = e.target;
                if (el && el.dataIndex != null) {
                    var hostModel = el.hostModel || ecModel.getSeriesByIndex(el.seriesIndex);
                    var params = hostModel && hostModel.getDataParams(el.dataIndex) || {};
                    params.event = e;
                    params.type = eveName;
                    this.trigger(eveName, params);
                }
            }, this);
        }, this);
        each(eventActionMap, function(actionType, eventType) {
            this._messageCenter.on(eventType, function(event) {
                this.trigger(eventType, event);
            }, this);
        }, this);
    };
    echartsProto.isDisposed = function() {
        return this._disposed;
    };
    echartsProto.clear = function() {
        this.setOption({}, true);
    };
    echartsProto.dispose = function() {
        this._disposed = true;
        var api = this._api;
        var ecModel = this._model;
        each(this._componentsViews, function(component) {
            component.dispose(ecModel, api);
        });
        each(this._chartsViews, function(chart) {
            chart.dispose(ecModel, api);
        });
        this._zr.dispose();
        instances[this.id] = null;
    };
    zrUtil.mixin(ECharts, Eventful);
    function updateZ(model, view) {
        var z = model.get("z");
        var zlevel = model.get("zlevel");
        view.group.traverse(function(el) {
            z != null && (el.z = z);
            zlevel != null && (el.zlevel = zlevel);
        });
    }
    var actions = [];
    var eventActionMap = {};
    var layoutFuncs = [];
    var dataProcessorFuncs = {};
    var optionPreprocessorFuncs = [];
    var visualCodingFuncs = {};
    var themeStorage = {};
    var instances = {};
    var connectedGroups = {};
    var idBase = new Date() - 0;
    var groupIdBase = new Date() - 0;
    var DOM_ATTRIBUTE_KEY = "_echarts_instance_";
    var echarts = {
        version: "3.0.2",
        dependencies: {
            zrender: "3.0.1"
        }
    };
    function enableConnect(chart) {
        var STATUS_PENDING = 0;
        var STATUS_UPDATING = 1;
        var STATUS_UPDATED = 2;
        var STATUS_KEY = "__connectUpdateStatus";
        function updateConnectedChartsStatus(charts, status) {
            for (var i = 0; i < charts.length; i++) {
                var otherChart = charts[i];
                otherChart[STATUS_KEY] = status;
            }
        }
        zrUtil.each(eventActionMap, function(actionType, eventType) {
            chart._messageCenter.on(eventType, function(event) {
                if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) {
                    var action = chart.makeActionFromEvent(event);
                    var otherCharts = [];
                    for (var id in instances) {
                        var otherChart = instances[id];
                        if (otherChart !== chart && otherChart.group === chart.group) {
                            otherCharts.push(otherChart);
                        }
                    }
                    updateConnectedChartsStatus(otherCharts, STATUS_PENDING);
                    each(otherCharts, function(otherChart) {
                        if (otherChart[STATUS_KEY] !== STATUS_UPDATING) {
                            otherChart.dispatchAction(action);
                        }
                    });
                    updateConnectedChartsStatus(otherCharts, STATUS_UPDATED);
                }
            });
        });
    }
    echarts.init = function(dom, theme, opts) {
        if (zrender.version.replace(".", "") - 0 < echarts.dependencies.zrender.replace(".", "") - 0) {
            throw new Error("ZRender " + zrender.version + " is too old for ECharts " + echarts.version + ". Current version need ZRender " + echarts.dependencies.zrender + "+");
        }
        if (!dom) {
            throw new Error("Initialize failed: invalid dom.");
        }
        var chart = new ECharts(dom, theme, opts);
        chart.id = "ec_" + idBase++;
        instances[chart.id] = chart;
        dom.setAttribute && dom.setAttribute(DOM_ATTRIBUTE_KEY, chart.id);
        enableConnect(chart);
        return chart;
    };
    echarts.connect = function(groupId) {
        if (zrUtil.isArray(groupId)) {
            var charts = groupId;
            groupId = null;
            zrUtil.each(charts, function(chart) {
                if (chart.group != null) {
                    groupId = chart.group;
                }
            });
            groupId = groupId || "g_" + groupIdBase++;
            zrUtil.each(charts, function(chart) {
                chart.group = groupId;
            });
        }
        connectedGroups[groupId] = true;
        return groupId;
    };
    echarts.disConnect = function(groupId) {
        connectedGroups[groupId] = false;
    };
    echarts.dispose = function(chart) {
        if (zrUtil.isDom(chart)) {
            chart = echarts.getInstanceByDom(chart);
        } else if (typeof chart === "string") {
            chart = instances[chart];
        }
        if (chart instanceof ECharts && !chart.isDisposed()) {
            chart.dispose();
        }
    };
    echarts.getInstanceByDom = function(dom) {
        var key = dom.getAttribute(DOM_ATTRIBUTE_KEY);
        return instances[key];
    };
    echarts.getInstanceById = function(key) {
        return instances[key];
    };
    echarts.registerTheme = function(name, theme) {
        themeStorage[name] = theme;
    };
    echarts.registerPreprocessor = function(preprocessorFunc) {
        optionPreprocessorFuncs.push(preprocessorFunc);
    };
    echarts.registerProcessor = function(stage, processorFunc) {
        if (zrUtil.indexOf(PROCESSOR_STAGES, stage) < 0) {
            throw new Error("stage should be one of " + PROCESSOR_STAGES);
        }
        var funcs = dataProcessorFuncs[stage] || (dataProcessorFuncs[stage] = []);
        funcs.push(processorFunc);
    };
    echarts.registerAction = function(actionInfo, eventName, action) {
        if (typeof eventName === "function") {
            action = eventName;
            eventName = "";
        }
        var actionType = zrUtil.isObject(actionInfo) ? actionInfo.type : [ actionInfo, actionInfo = {
            event: eventName
        } ][0];
        actionInfo.event = (actionInfo.event || actionType).toLowerCase();
        eventName = actionInfo.event;
        if (!actions[actionType]) {
            actions[actionType] = {
                action: action,
                actionInfo: actionInfo
            };
        }
        eventActionMap[eventName] = actionType;
    };
    echarts.registerCoordinateSystem = function(type, CoordinateSystem) {
        CoordinateSystemManager.register(type, CoordinateSystem);
    };
    echarts.registerLayout = function(layout) {
        if (zrUtil.indexOf(layoutFuncs, layout) < 0) {
            layoutFuncs.push(layout);
        }
    };
    echarts.registerVisualCoding = function(stage, visualCodingFunc) {
        if (zrUtil.indexOf(VISUAL_CODING_STAGES, stage) < 0) {
            throw new Error("stage should be one of " + VISUAL_CODING_STAGES);
        }
        var funcs = visualCodingFuncs[stage] || (visualCodingFuncs[stage] = []);
        funcs.push(visualCodingFunc);
    };
    echarts.extendChartView = function(opts) {
        return ChartView.extend(opts);
    };
    echarts.extendComponentModel = function(opts) {
        return ComponentModel.extend(opts);
    };
    echarts.extendSeriesModel = function(opts) {
        return SeriesModel.extend(opts);
    };
    echarts.extendComponentView = function(opts) {
        return ComponentView.extend(opts);
    };
    echarts.setCanvasCreator = function(creator) {
        zrUtil.createCanvas = creator;
    };
    echarts.registerVisualCoding("echarts", zrUtil.curry(require("./visual/seriesColor"), "", "itemStyle"));
    echarts.registerPreprocessor(require("./preprocessor/backwardCompat"));
    echarts.registerAction({
        type: "highlight",
        event: "highlight",
        update: "highlight"
    }, zrUtil.noop);
    echarts.registerAction({
        type: "downplay",
        event: "downplay",
        update: "downplay"
    }, zrUtil.noop);
    echarts.graphic = require("./util/graphic");
    echarts.number = require("./util/number");
    echarts.format = require("./util/format");
    echarts.matrix = require("crm-modules/common/echarts/zrender/core/matrix");
    echarts.vector = require("crm-modules/common/echarts/zrender/core/vector");
    echarts.util = {};
    each([ "map", "each", "filter", "indexOf", "inherits", "reduce", "filter", "bind", "curry", "isArray", "isString", "isObject", "isFunction", "extend" ], function(name) {
        echarts.util[name] = zrUtil[name];
    });
    return echarts;
});
Example #6
0
define("crm-modules/common/echarts/coord/geo/Geo", [ "./parseGeoJson", "crm-modules/common/echarts/zrender/core/util", "crm-modules/common/echarts/zrender/core/BoundingRect", "../View", "./fix/nanhai", "./fix/textCoord", "./fix/geoCoord" ], function(require, exports, module) {
    var parseGeoJson = require("./parseGeoJson");
    var zrUtil = require("crm-modules/common/echarts/zrender/core/util");
    var BoundingRect = require("crm-modules/common/echarts/zrender/core/BoundingRect");
    var View = require("../View");
    var geoFixFuncs = [ require("./fix/nanhai"), require("./fix/textCoord"), require("./fix/geoCoord") ];
    function Geo(name, map, geoJson, specialAreas, nameMap) {
        View.call(this, name);
        this.map = map;
        this._nameCoordMap = {};
        this.loadGeoJson(geoJson, specialAreas, nameMap);
    }
    Geo.prototype = {
        constructor: Geo,
        type: "geo",
        dimensions: [ "lng", "lat" ],
        loadGeoJson: function(geoJson, specialAreas, nameMap) {
            try {
                this.regions = geoJson ? parseGeoJson(geoJson) : [];
            } catch (e) {
                throw "Invalid geoJson format\n" + e;
            }
            specialAreas = specialAreas || {};
            nameMap = nameMap || {};
            var regions = this.regions;
            var regionsMap = {};
            for (var i = 0; i < regions.length; i++) {
                var regionName = regions[i].name;
                regionName = nameMap[regionName] || regionName;
                regions[i].name = regionName;
                regionsMap[regionName] = regions[i];
                this.addGeoCoord(regionName, regions[i].center);
                var specialArea = specialAreas[regionName];
                if (specialArea) {
                    regions[i].transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height);
                }
            }
            this._regionsMap = regionsMap;
            this._rect = null;
            zrUtil.each(geoFixFuncs, function(fixFunc) {
                fixFunc(this);
            }, this);
        },
        transformTo: function(x, y, width, height) {
            var rect = this.getBoundingRect();
            rect = rect.clone();
            rect.y = -rect.y - rect.height;
            var viewTransform = this._viewTransform;
            viewTransform.transform = rect.calculateTransform(new BoundingRect(x, y, width, height));
            viewTransform.decomposeTransform();
            var scale = viewTransform.scale;
            scale[1] = -scale[1];
            viewTransform.updateTransform();
            this._updateTransform();
        },
        getRegion: function(name) {
            return this._regionsMap[name];
        },
        addGeoCoord: function(name, geoCoord) {
            this._nameCoordMap[name] = geoCoord;
        },
        getGeoCoord: function(name) {
            return this._nameCoordMap[name];
        },
        getBoundingRect: function() {
            if (this._rect) {
                return this._rect;
            }
            var rect;
            var regions = this.regions;
            for (var i = 0; i < regions.length; i++) {
                var regionRect = regions[i].getBoundingRect();
                rect = rect || regionRect.clone();
                rect.union(regionRect);
            }
            return this._rect = rect || new BoundingRect(0, 0, 0, 0);
        },
        dataToPoints: function(data) {
            var item = [];
            return data.mapArray([ "lng", "lat" ], function(lon, lat) {
                item[0] = lon;
                item[1] = lat;
                return this.dataToPoint(item);
            }, this);
        },
        dataToPoint: function(data) {
            if (typeof data === "string") {
                data = this.getGeoCoord(data);
            }
            if (data) {
                return View.prototype.dataToPoint.call(this, data);
            }
        }
    };
    zrUtil.mixin(Geo, View);
    return Geo;
});