format.js 5.9 KB
Newer Older
L
lang 已提交
1 2
define(function (require) {

L
lang 已提交
3
    var zrUtil = require('zrender/core/util');
D
deqingli 已提交
4
    var numberUtil = require('./number');
L
lang 已提交
5
    var textContain = require('zrender/contain/text');
D
deqingli 已提交
6

7
    var formatUtil = {};
8

L
lang 已提交
9 10
    /**
     * 每三位默认加,格式化
11 12
     * @param {string|number} x
     * @return {string}
L
lang 已提交
13
     */
14
    formatUtil.addCommas = function (x) {
L
lang 已提交
15 16 17 18 19 20
        if (isNaN(x)) {
            return '-';
        }
        x = (x + '').split('.');
        return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,'$1,')
               + (x.length > 1 ? ('.' + x[1]) : '');
21
    };
L
lang 已提交
22 23 24

    /**
     * @param {string} str
1
100pah 已提交
25
     * @param {boolean} [upperCaseFirst=false]
L
lang 已提交
26 27
     * @return {string} str
     */
1
100pah 已提交
28 29
    formatUtil.toCamelCase = function (str, upperCaseFirst) {
        str = (str || '').toLowerCase().replace(/-(.)/g, function(match, group1) {
L
lang 已提交
30 31
            return group1.toUpperCase();
        });
1
100pah 已提交
32 33 34 35 36 37

        if (upperCaseFirst && str) {
            str = str.charAt(0).toUpperCase() + str.slice(1);
        }

        return str;
38
    };
L
lang 已提交
39 40 41 42 43 44 45 46 47

    /**
     * Normalize css liked array configuration
     * e.g.
     *  3 => [3, 3, 3, 3]
     *  [4, 2] => [4, 2, 4, 2]
     *  [4, 3, 2] => [4, 3, 2, 3]
     * @param {number|Array.<number>} val
     */
Z
zhuangzhuang 已提交
48
    formatUtil.normalizeCssArray = function (val) {        
L
lang 已提交
49 50 51
        if (typeof (val) === 'number') {
            return [val, val, val, val];
        }
Z
zhuangzhuang 已提交
52 53
        var len = val.length;
        if (len === 2) {
L
lang 已提交
54 55 56 57 58 59 60 61
            // vertical | horizontal
            return [val[0], val[1], val[0], val[1]];
        }
        else if (len === 3) {
            // top | horizontal | bottom
            return [val[0], val[1], val[2], val[1]];
        }
        return val;
62
    };
L
lang 已提交
63

1
100pah 已提交
64
    var encodeHTML = formatUtil.encodeHTML = function (source) {
L
lang 已提交
65 66 67 68 69 70
        return String(source)
            .replace(/&/g, '&amp;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;');
71
    };
L
lang 已提交
72

L
lang 已提交
73 74
    var TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

75
    var wrapVar = function (varName, seriesIdx) {
L
lang 已提交
76
        return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';
77 78
    };

L
lang 已提交
79
    /**
L
lang 已提交
80
     * Template formatter
1
100pah 已提交
81 82 83
     * @param {string} tpl
     * @param {Array.<Object>|Object} paramsList
     * @param {boolean} [encode=false]
L
lang 已提交
84 85
     * @return {string}
     */
1
100pah 已提交
86
    formatUtil.formatTpl = function (tpl, paramsList, encode) {
L
lang 已提交
87 88 89 90 91 92 93 94
        if (!zrUtil.isArray(paramsList)) {
            paramsList = [paramsList];
        }
        var seriesLen = paramsList.length;
        if (!seriesLen) {
            return '';
        }

L
lang 已提交
95
        var $vars = paramsList[0].$vars || [];
L
lang 已提交
96 97
        for (var i = 0; i < $vars.length; i++) {
            var alias = TPL_VAR_ALIAS[i];
1
100pah 已提交
98 99
            var val = wrapVar(alias, 0);
            tpl = tpl.replace(wrapVar(alias), encode ? encodeHTML(val) : val);
L
lang 已提交
100 101 102
        }
        for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {
            for (var k = 0; k < $vars.length; k++) {
1
100pah 已提交
103
                var val = paramsList[seriesIdx][$vars[k]];
L
lang 已提交
104 105
                tpl = tpl.replace(
                    wrapVar(TPL_VAR_ALIAS[k], seriesIdx),
1
100pah 已提交
106
                    encode ? encodeHTML(val) : val
L
lang 已提交
107 108 109 110 111
                );
            }
        }

        return tpl;
112 113
    };

D
dengxiaohong01 已提交
114 115 116 117 118 119 120 121 122
    /**
     * simple Template formatter
     *
     * @param {string} tpl
     * @param {Object} param
     * @param {boolean} [encode=false]
     * @return {string}
     */
    formatUtil.formatTplSimple = function (tpl, param, encode) {
D
dengxiaohong01 已提交
123 124 125
        zrUtil.each(param, function (value, key) {
            tpl = tpl.replace(
                '{' + key + '}',
126
                encode ? encodeHTML(value) : value
D
dengxiaohong01 已提交
127 128
            );
        });
D
dengxiaohong01 已提交
129 130 131
        return tpl;
    };

P
rename  
pah100 已提交
132 133
    /**
     * @param {string} color
P
tweak  
pah100 已提交
134
     * @param {string} [extraCssText]
P
rename  
pah100 已提交
135 136
     * @return {string}
     */
P
tweak  
pah100 已提交
137
    formatUtil.getTooltipMarker = function (color, extraCssText) {
138 139 140
        return color
            ? '<span style="display:inline-block;margin-right:5px;'
                + 'border-radius:10px;width:9px;height:9px;background-color:'
P
tweak  
pah100 已提交
141
                + formatUtil.encodeHTML(color) + ';' + (extraCssText || '') + '"></span>'
142
            : '';
P
rename  
pah100 已提交
143
    };
144 145 146 147 148 149 150 151 152

    /**
     * @param {string} str
     * @return {string}
     * @inner
     */
    var s2d = function (str) {
        return str < 10 ? ('0' + str) : str;
    };
L
lang 已提交
153

D
deqingli 已提交
154 155 156 157
    /**
     * ISO Date format
     * @param {string} tpl
     * @param {number} value
P
pah100 已提交
158 159 160
     * @param {boolean} [isUTC=false] Default in local time.
     *           see `module:echarts/scale/Time`
     *           and `module:echarts/util/number#parseDate`.
D
deqingli 已提交
161 162
     * @inner
     */
P
pah100 已提交
163
    formatUtil.formatTime = function (tpl, value, isUTC) {
D
deqingli 已提交
164 165 166 167 168 169 170 171 172 173
        if (tpl === 'week'
            || tpl === 'month'
            || tpl === 'quarter'
            || tpl === 'half-year'
            || tpl === 'year'
        ) {
            tpl = 'MM-dd\nyyyy';
        }

        var date = numberUtil.parseDate(value);
P
pah100 已提交
174
        var utc = isUTC ? 'UTC' : '';
P
pah100 已提交
175 176 177 178 179 180
        var y = date['get' + utc + 'FullYear']();
        var M = date['get' + utc + 'Month']() + 1;
        var d = date['get' + utc + 'Date']();
        var h = date['get' + utc + 'Hours']();
        var m = date['get' + utc + 'Minutes']();
        var s = date['get' + utc + 'Seconds']();
D
deqingli 已提交
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195

        tpl = tpl.replace('MM', s2d(M))
            .toLowerCase()
            .replace('yyyy', y)
            .replace('yy', y % 100)
            .replace('dd', s2d(d))
            .replace('d', d)
            .replace('hh', s2d(h))
            .replace('h', h)
            .replace('mm', s2d(m))
            .replace('m', m)
            .replace('ss', s2d(s))
            .replace('s', s);

        return tpl;
196
    };
D
deqingli 已提交
197 198

    /**
199
     * Capital first
D
deqingli 已提交
200 201 202
     * @param {string} str
     * @return {string}
     */
203 204 205
    formatUtil.capitalFirst = function (str) {
        return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;
    };
D
deqingli 已提交
206

207
    formatUtil.truncateText = textContain.truncateText;
208

209
    return formatUtil;
D
dengxiaohong01 已提交
210
});