createListFromArray.js 4.9 KB
Newer Older
L
lang 已提交
1 2 3 4
define(function(require) {
    'use strict';

    var List = require('../../data/List');
P
pah100 已提交
5
    var completeDimensions = require('../../data/helper/completeDimensions');
L
lang 已提交
6 7 8 9

    /**
     * Helper function to create a list from option data
     */
P
pah100 已提交
10
    function createListFromArray(data, seriesModel, ecModel) {
L
Tweak  
lang 已提交
11 12 13
        // If data is undefined
        data = data || [];

P
pah100 已提交
14 15 16
        var result = creaters[seriesModel.get('coordinateSystem')](
            data, seriesModel, ecModel
        );
L
lang 已提交
17

P
pah100 已提交
18
        var list = new List(result.dimensions, seriesModel);
L
Tweak  
lang 已提交
19

P
pah100 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
        var nameList = createNameList(result, data);

        list.initData(data, nameList);

        return list;
    }

    /**
     * Creaters for each coord system.
     * @return {Object} {dimensions, categoryAxisModel};
     */
    var creaters = {

        cartesian2d: function (data, seriesModel, ecModel) {
            var dimensions = [];
            var categoryAxisModel;
L
lang 已提交
36 37
            var xAxisModel = ecModel.getComponent('xAxis', seriesModel.get('xAxisIndex'));
            var yAxisModel = ecModel.getComponent('yAxis', seriesModel.get('yAxisIndex'));
L
lang 已提交
38 39 40 41
            var xAxisType = xAxisModel.get('type');
            var yAxisType = yAxisModel.get('type');
            var isYAxisCategory = yAxisType === 'category';
            if (xAxisType === 'category') {
L
lang 已提交
42 43
                dimensions = [{
                    name: 'x',
L
lang 已提交
44
                    type: 'ordinal'
L
lang 已提交
45
                }, {
L
lang 已提交
46 47 48 49
                    name: 'y',
                    // If two category axes
                    type: isYAxisCategory ? 'ordinal' : 'number',
                    stackable: !isYAxisCategory
L
lang 已提交
50
                }];
L
lang 已提交
51 52 53

                categoryAxisModel = xAxisModel;
            }
L
lang 已提交
54
            else if (isYAxisCategory) {
L
lang 已提交
55 56
                dimensions = [{
                    name: 'y',
L
lang 已提交
57
                    type: 'ordinal'
L
lang 已提交
58 59 60 61 62 63 64
                }, {
                    name: 'x',
                    stackable: true
                }];

                categoryAxisModel = yAxisModel;
            }
P
pah100 已提交
65 66 67 68 69 70 71 72 73

            completeDimensions(dimensions, data, ['x', 'y', 'z']);

            return {dimensions: dimensions, categoryAxisModel: categoryAxisModel};
        },

        polar: function (data, seriesModel, ecModel) {
            var dimensions = [];
            var categoryAxisModel;
L
lang 已提交
74 75
            var axisFinder = function (axisModel) {
                return axisModel.get('polarIndex') === polarIndex;
P
pah100 已提交
76
            };
L
lang 已提交
77 78 79 80
            var polarIndex = seriesModel.get('polarIndex') || 0;
            var angleAxisModel = ecModel.findComponent('angleAxis', axisFinder);
            var radiusAxisModel = ecModel.findComponent('radiusAxis', axisFinder);

L
lang 已提交
81
            var isRadiusAxisCategory = radiusAxisModel.get('type') === 'category';
L
lang 已提交
82 83 84
            if (angleAxisModel.get('type') === 'category') {
                dimensions = [{
                    name: 'angle',
L
lang 已提交
85
                    type: 'ordinal'
L
lang 已提交
86 87
                }, {
                    name: 'radius',
L
lang 已提交
88 89 90
                    // If two category axes
                    type: isRadiusAxisCategory ? 'ordinal' : 'number',
                    stackable: !isRadiusAxisCategory
L
lang 已提交
91 92 93 94
                }];

                categoryAxisModel = angleAxisModel;
            }
L
lang 已提交
95
            else if (isRadiusAxisCategory) {
L
lang 已提交
96 97
                dimensions = [{
                    name: 'radius',
L
lang 已提交
98
                    type: 'ordinal'
L
lang 已提交
99 100 101 102 103 104 105
                }, {
                    name: 'angle',
                    stackable: true
                }];

                categoryAxisModel = radiusAxisModel;
            }
P
pah100 已提交
106 107 108 109 110 111 112

            completeDimensions(dimensions, data, ['radius', 'angle', 'value']);

            return {dimensions: dimensions, categoryAxisModel: categoryAxisModel};
        },

        geo: function (data, seriesModel, ecModel) {
L
lang 已提交
113 114
            // TODO Region
            // 多个散点图系列在同一个地区的时候
P
pah100 已提交
115 116
            return {
                dimensions: [
L
lang 已提交
117
                    {name: 'lng'},
P
pah100 已提交
118 119 120 121
                    {name: 'lat'},
                    {name: 'value'}
                ]
            };
L
lang 已提交
122
        }
P
pah100 已提交
123
    };
L
lang 已提交
124

P
pah100 已提交
125
    function createNameList(result, data) {
L
lang 已提交
126
        var nameList = [];
P
pah100 已提交
127 128

        if (result.categoryAxisModel) {
L
lang 已提交
129
            // FIXME Two category axis
L
lang 已提交
130
            var categories = result.categoryAxisModel.getCategories();
L
lang 已提交
131 132 133 134 135 136 137 138
            if (categories) {
                var dataLen = data.length;
                // Ordered data is given explicitly like
                // [[1, 0.2], [2, 0.3], [3, 0.15]]
                // Pick the category
                if (data[0] && data[0].length > 1 && categories.length > dataLen) {
                    nameList = [];
                    for (var i = 0; i < dataLen; i++) {
L
lang 已提交
139
                        nameList[i] = categories[i];
L
lang 已提交
140 141 142
                    }
                }
                else {
L
lang 已提交
143
                    nameList = categories.slice(0);
L
lang 已提交
144 145 146 147
                }
            }
        }

P
pah100 已提交
148 149
        return nameList;
    }
L
lang 已提交
150

P
pah100 已提交
151
    return createListFromArray;
L
lang 已提交
152 153

});