format.js 5.1 KB
Newer Older
S
sushuang 已提交
1 2
import * as zrUtil from 'zrender/src/core/util';
import * as textContain from 'zrender/src/contain/text';
S
sushuang 已提交
3
import * as numberUtil from './number';
S
sushuang 已提交
4 5 6 7 8 9

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

/**
 * @param {string} str
 * @param {boolean} [upperCaseFirst=false]
 * @return {string} str
 */
S
sushuang 已提交
24
export function toCamelCase(str, upperCaseFirst) {
S
sushuang 已提交
25 26 27 28 29 30 31 32 33
    str = (str || '').toLowerCase().replace(/-(.)/g, function(match, group1) {
        return group1.toUpperCase();
    });

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

    return str;
S
sushuang 已提交
34
}
S
sushuang 已提交
35

S
sushuang 已提交
36
export var normalizeCssArray = zrUtil.normalizeCssArray;
S
sushuang 已提交
37

S
sushuang 已提交
38
export function encodeHTML(source) {
S
sushuang 已提交
39 40 41 42 43 44
    return String(source)
        .replace(/&/g, '&')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#39;');
S
sushuang 已提交
45
}
S
sushuang 已提交
46 47 48 49 50 51 52 53 54 55 56 57 58 59

var TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

var wrapVar = function (varName, seriesIdx) {
    return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';
};

/**
 * Template formatter
 * @param {string} tpl
 * @param {Array.<Object>|Object} paramsList
 * @param {boolean} [encode=false]
 * @return {string}
 */
S
sushuang 已提交
60
export function formatTpl(tpl, paramsList, encode) {
S
sushuang 已提交
61 62 63 64 65 66 67 68 69 70 71
    if (!zrUtil.isArray(paramsList)) {
        paramsList = [paramsList];
    }
    var seriesLen = paramsList.length;
    if (!seriesLen) {
        return '';
    }

    var $vars = paramsList[0].$vars || [];
    for (var i = 0; i < $vars.length; i++) {
        var alias = TPL_VAR_ALIAS[i];
S
sushuang 已提交
72
        tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0));
S
sushuang 已提交
73 74 75 76
    }
    for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {
        for (var k = 0; k < $vars.length; k++) {
            var val = paramsList[seriesIdx][$vars[k]];
D
dengxiaohong01 已提交
77
            tpl = tpl.replace(
S
sushuang 已提交
78 79
                wrapVar(TPL_VAR_ALIAS[k], seriesIdx),
                encode ? encodeHTML(val) : val
D
dengxiaohong01 已提交
80
            );
D
deqingli 已提交
81
        }
S
sushuang 已提交
82 83 84
    }

    return tpl;
S
sushuang 已提交
85
}
S
sushuang 已提交
86 87 88 89 90 91 92 93 94

/**
 * simple Template formatter
 *
 * @param {string} tpl
 * @param {Object} param
 * @param {boolean} [encode=false]
 * @return {string}
 */
S
sushuang 已提交
95
export function formatTplSimple(tpl, param, encode) {
S
sushuang 已提交
96 97 98 99 100 101 102
    zrUtil.each(param, function (value, key) {
        tpl = tpl.replace(
            '{' + key + '}',
            encode ? encodeHTML(value) : value
        );
    });
    return tpl;
S
sushuang 已提交
103
}
S
sushuang 已提交
104 105

/**
S
tweak  
sushuang 已提交
106 107 108 109
 * @param {Object|string} [opt] If string, means color.
 * @param {string} [opt.color]
 * @param {string} [opt.extraCssText]
 * @param {string} [opt.type='item'] 'item' or 'subItem'
S
sushuang 已提交
110 111
 * @return {string}
 */
S
tweak  
sushuang 已提交
112 113 114 115 116 117 118 119 120 121 122 123 124
export function getTooltipMarker(opt, extraCssText) {
    opt = zrUtil.isString(opt) ? {color: opt, extraCssText: extraCssText} : (opt || {});
    var color = opt.color;
    var type = opt.type;
    var extraCssText = opt.extraCssText;

    if (!color) {
        return '';
    }

    return type === 'subItem'
        ? '<span style="display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;'
            + 'border-radius:4px;width:4px;height:4px;background-color:'
S
sushuang 已提交
125
            + encodeHTML(color) + ';' + (extraCssText || '') + '"></span>'
S
tweak  
sushuang 已提交
126 127 128
        : '<span style="display:inline-block;margin-right:5px;'
            + 'border-radius:10px;width:10px;height:10px;background-color:'
            + encodeHTML(color) + ';' + (extraCssText || '') + '"></span>';
S
sushuang 已提交
129
}
S
sushuang 已提交
130

S
sushuang 已提交
131 132 133 134 135
function pad(str, len) {
    str += '';
    return '0000'.substr(0, len - str.length) + str;
}

S
sushuang 已提交
136 137 138 139 140 141 142 143 144 145

/**
 * ISO Date format
 * @param {string} tpl
 * @param {number} value
 * @param {boolean} [isUTC=false] Default in local time.
 *           see `module:echarts/scale/Time`
 *           and `module:echarts/util/number#parseDate`.
 * @inner
 */
S
sushuang 已提交
146
export function formatTime(tpl, value, isUTC) {
S
sushuang 已提交
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
    if (tpl === 'week'
        || tpl === 'month'
        || tpl === 'quarter'
        || tpl === 'half-year'
        || tpl === 'year'
    ) {
        tpl = 'MM-dd\nyyyy';
    }

    var date = numberUtil.parseDate(value);
    var utc = isUTC ? 'UTC' : '';
    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']();
S
sushuang 已提交
164
    var S = date['get' + utc + 'Milliseconds']();
S
sushuang 已提交
165

S
sushuang 已提交
166
    tpl = tpl.replace('MM', pad(M, 2))
S
sushuang 已提交
167 168 169
        .replace('M', M)
        .replace('yyyy', y)
        .replace('yy', y % 100)
S
sushuang 已提交
170
        .replace('dd', pad(d, 2))
S
sushuang 已提交
171
        .replace('d', d)
S
sushuang 已提交
172
        .replace('hh', pad(h, 2))
S
sushuang 已提交
173
        .replace('h', h)
S
sushuang 已提交
174
        .replace('mm', pad(m, 2))
S
sushuang 已提交
175
        .replace('m', m)
S
sushuang 已提交
176 177 178
        .replace('ss', pad(s, 2))
        .replace('s', s)
        .replace('SSS', pad(S, 3));
S
sushuang 已提交
179 180

    return tpl;
S
sushuang 已提交
181
}
S
sushuang 已提交
182 183 184 185 186 187

/**
 * Capital first
 * @param {string} str
 * @return {string}
 */
S
sushuang 已提交
188
export function capitalFirst(str) {
S
sushuang 已提交
189
    return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;
S
sushuang 已提交
190
}
S
sushuang 已提交
191

S
sushuang 已提交
192
export var truncateText = textContain.truncateText;
S
sushuang 已提交
193

S
sushuang 已提交
194
export var getTextRect = textContain.getBoundingRect;