format.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. var zrUtil = require("zrender/lib/core/util");
  2. var textContain = require("zrender/lib/contain/text");
  3. var numberUtil = require("./number");
  4. /**
  5. * 每三位默认加,格式化
  6. * @param {string|number} x
  7. * @return {string}
  8. */
  9. function addCommas(x) {
  10. if (isNaN(x)) {
  11. return '-';
  12. }
  13. x = (x + '').split('.');
  14. return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + (x.length > 1 ? '.' + x[1] : '');
  15. }
  16. /**
  17. * @param {string} str
  18. * @param {boolean} [upperCaseFirst=false]
  19. * @return {string} str
  20. */
  21. function toCamelCase(str, upperCaseFirst) {
  22. str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) {
  23. return group1.toUpperCase();
  24. });
  25. if (upperCaseFirst && str) {
  26. str = str.charAt(0).toUpperCase() + str.slice(1);
  27. }
  28. return str;
  29. }
  30. var normalizeCssArray = zrUtil.normalizeCssArray;
  31. function encodeHTML(source) {
  32. return String(source).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
  33. }
  34. var TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
  35. var wrapVar = function (varName, seriesIdx) {
  36. return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';
  37. };
  38. /**
  39. * Template formatter
  40. * @param {string} tpl
  41. * @param {Array.<Object>|Object} paramsList
  42. * @param {boolean} [encode=false]
  43. * @return {string}
  44. */
  45. function formatTpl(tpl, paramsList, encode) {
  46. if (!zrUtil.isArray(paramsList)) {
  47. paramsList = [paramsList];
  48. }
  49. var seriesLen = paramsList.length;
  50. if (!seriesLen) {
  51. return '';
  52. }
  53. var $vars = paramsList[0].$vars || [];
  54. for (var i = 0; i < $vars.length; i++) {
  55. var alias = TPL_VAR_ALIAS[i];
  56. var val = wrapVar(alias, 0);
  57. tpl = tpl.replace(wrapVar(alias), encode ? encodeHTML(val) : val);
  58. }
  59. for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {
  60. for (var k = 0; k < $vars.length; k++) {
  61. var val = paramsList[seriesIdx][$vars[k]];
  62. tpl = tpl.replace(wrapVar(TPL_VAR_ALIAS[k], seriesIdx), encode ? encodeHTML(val) : val);
  63. }
  64. }
  65. return tpl;
  66. }
  67. /**
  68. * simple Template formatter
  69. *
  70. * @param {string} tpl
  71. * @param {Object} param
  72. * @param {boolean} [encode=false]
  73. * @return {string}
  74. */
  75. function formatTplSimple(tpl, param, encode) {
  76. zrUtil.each(param, function (value, key) {
  77. tpl = tpl.replace('{' + key + '}', encode ? encodeHTML(value) : value);
  78. });
  79. return tpl;
  80. }
  81. /**
  82. * @param {string} color
  83. * @param {string} [extraCssText]
  84. * @return {string}
  85. */
  86. function getTooltipMarker(color, extraCssText) {
  87. return color ? '<span style="display:inline-block;margin-right:5px;' + 'border-radius:10px;width:9px;height:9px;background-color:' + encodeHTML(color) + ';' + (extraCssText || '') + '"></span>' : '';
  88. }
  89. /**
  90. * @param {string} str
  91. * @return {string}
  92. * @inner
  93. */
  94. var s2d = function (str) {
  95. return str < 10 ? '0' + str : str;
  96. };
  97. /**
  98. * ISO Date format
  99. * @param {string} tpl
  100. * @param {number} value
  101. * @param {boolean} [isUTC=false] Default in local time.
  102. * see `module:echarts/scale/Time`
  103. * and `module:echarts/util/number#parseDate`.
  104. * @inner
  105. */
  106. function formatTime(tpl, value, isUTC) {
  107. if (tpl === 'week' || tpl === 'month' || tpl === 'quarter' || tpl === 'half-year' || tpl === 'year') {
  108. tpl = 'MM-dd\nyyyy';
  109. }
  110. var date = numberUtil.parseDate(value);
  111. var utc = isUTC ? 'UTC' : '';
  112. var y = date['get' + utc + 'FullYear']();
  113. var M = date['get' + utc + 'Month']() + 1;
  114. var d = date['get' + utc + 'Date']();
  115. var h = date['get' + utc + 'Hours']();
  116. var m = date['get' + utc + 'Minutes']();
  117. var s = date['get' + utc + 'Seconds']();
  118. tpl = tpl.replace('MM', s2d(M)).replace('M', M).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);
  119. return tpl;
  120. }
  121. /**
  122. * Capital first
  123. * @param {string} str
  124. * @return {string}
  125. */
  126. function capitalFirst(str) {
  127. return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;
  128. }
  129. var truncateText = textContain.truncateText;
  130. var getTextRect = textContain.getBoundingRect;
  131. exports.addCommas = addCommas;
  132. exports.toCamelCase = toCamelCase;
  133. exports.normalizeCssArray = normalizeCssArray;
  134. exports.encodeHTML = encodeHTML;
  135. exports.formatTpl = formatTpl;
  136. exports.formatTplSimple = formatTplSimple;
  137. exports.getTooltipMarker = getTooltipMarker;
  138. exports.formatTime = formatTime;
  139. exports.capitalFirst = capitalFirst;
  140. exports.truncateText = truncateText;
  141. exports.getTextRect = getTextRect;