format.js 5.3 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
tweak.  
sushuang 已提交
38 39 40 41 42 43 44

var replaceReg = /([&<>"'])/g;
var replaceMap = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
S
sushuang 已提交
45
    '\'': '&#39;'
S
tweak.  
sushuang 已提交
46 47
};

S
sushuang 已提交
48
export function encodeHTML(source) {
S
tweak.  
sushuang 已提交
49 50
    return source == null
        ? ''
S
sushuang 已提交
51 52
        : (source + '').replace(replaceReg, function (str, c) {
            return replaceMap[c];
S
tweak.  
sushuang 已提交
53
        });
S
sushuang 已提交
54
}
S
sushuang 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67 68

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 已提交
69
export function formatTpl(tpl, paramsList, encode) {
S
sushuang 已提交
70 71 72 73 74 75 76 77 78 79 80
    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 已提交
81
        tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0));
S
sushuang 已提交
82 83 84 85
    }
    for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {
        for (var k = 0; k < $vars.length; k++) {
            var val = paramsList[seriesIdx][$vars[k]];
D
dengxiaohong01 已提交
86
            tpl = tpl.replace(
S
sushuang 已提交
87 88
                wrapVar(TPL_VAR_ALIAS[k], seriesIdx),
                encode ? encodeHTML(val) : val
D
dengxiaohong01 已提交
89
            );
D
deqingli 已提交
90
        }
S
sushuang 已提交
91 92 93
    }

    return tpl;
S
sushuang 已提交
94
}
S
sushuang 已提交
95 96 97 98 99 100 101 102 103

/**
 * simple Template formatter
 *
 * @param {string} tpl
 * @param {Object} param
 * @param {boolean} [encode=false]
 * @return {string}
 */
S
sushuang 已提交
104
export function formatTplSimple(tpl, param, encode) {
S
sushuang 已提交
105 106 107 108 109 110 111
    zrUtil.each(param, function (value, key) {
        tpl = tpl.replace(
            '{' + key + '}',
            encode ? encodeHTML(value) : value
        );
    });
    return tpl;
S
sushuang 已提交
112
}
S
sushuang 已提交
113 114

/**
S
tweak  
sushuang 已提交
115 116 117 118
 * @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 已提交
119 120
 * @return {string}
 */
S
tweak  
sushuang 已提交
121 122 123 124 125 126 127 128 129 130 131 132 133
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 已提交
134
            + encodeHTML(color) + ';' + (extraCssText || '') + '"></span>'
S
tweak  
sushuang 已提交
135 136 137
        : '<span style="display:inline-block;margin-right:5px;'
            + 'border-radius:10px;width:10px;height:10px;background-color:'
            + encodeHTML(color) + ';' + (extraCssText || '') + '"></span>';
S
sushuang 已提交
138
}
S
sushuang 已提交
139

S
sushuang 已提交
140 141 142 143 144
function pad(str, len) {
    str += '';
    return '0000'.substr(0, len - str.length) + str;
}

S
sushuang 已提交
145 146 147 148 149 150 151 152 153 154

/**
 * 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 已提交
155
export function formatTime(tpl, value, isUTC) {
S
sushuang 已提交
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
    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 已提交
173
    var S = date['get' + utc + 'Milliseconds']();
S
sushuang 已提交
174

S
sushuang 已提交
175
    tpl = tpl.replace('MM', pad(M, 2))
S
sushuang 已提交
176 177 178
        .replace('M', M)
        .replace('yyyy', y)
        .replace('yy', y % 100)
S
sushuang 已提交
179
        .replace('dd', pad(d, 2))
S
sushuang 已提交
180
        .replace('d', d)
S
sushuang 已提交
181
        .replace('hh', pad(h, 2))
S
sushuang 已提交
182
        .replace('h', h)
S
sushuang 已提交
183
        .replace('mm', pad(m, 2))
S
sushuang 已提交
184
        .replace('m', m)
S
sushuang 已提交
185 186 187
        .replace('ss', pad(s, 2))
        .replace('s', s)
        .replace('SSS', pad(S, 3));
S
sushuang 已提交
188 189

    return tpl;
S
sushuang 已提交
190
}
S
sushuang 已提交
191 192 193 194 195 196

/**
 * Capital first
 * @param {string} str
 * @return {string}
 */
S
sushuang 已提交
197
export function capitalFirst(str) {
S
sushuang 已提交
198
    return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;
S
sushuang 已提交
199
}
S
sushuang 已提交
200

S
sushuang 已提交
201
export var truncateText = textContain.truncateText;
S
sushuang 已提交
202

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