compatStyle.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. var zrUtil = require("zrender/lib/core/util");
  2. var modelUtil = require("../../util/model");
  3. var each = zrUtil.each;
  4. var isObject = zrUtil.isObject;
  5. var POSSIBLE_STYLES = ['areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle', 'chordStyle', 'label', 'labelLine'];
  6. function compatItemStyle(opt) {
  7. var itemStyleOpt = opt && opt.itemStyle;
  8. if (!itemStyleOpt) {
  9. return;
  10. }
  11. for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) {
  12. var styleName = POSSIBLE_STYLES[i];
  13. var normalItemStyleOpt = itemStyleOpt.normal;
  14. var emphasisItemStyleOpt = itemStyleOpt.emphasis;
  15. if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {
  16. opt[styleName] = opt[styleName] || {};
  17. if (!opt[styleName].normal) {
  18. opt[styleName].normal = normalItemStyleOpt[styleName];
  19. } else {
  20. zrUtil.merge(opt[styleName].normal, normalItemStyleOpt[styleName]);
  21. }
  22. normalItemStyleOpt[styleName] = null;
  23. }
  24. if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {
  25. opt[styleName] = opt[styleName] || {};
  26. if (!opt[styleName].emphasis) {
  27. opt[styleName].emphasis = emphasisItemStyleOpt[styleName];
  28. } else {
  29. zrUtil.merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);
  30. }
  31. emphasisItemStyleOpt[styleName] = null;
  32. }
  33. }
  34. }
  35. function compatTextStyle(opt, propName) {
  36. var labelOptSingle = isObject(opt) && opt[propName];
  37. var textStyle = isObject(labelOptSingle) && labelOptSingle.textStyle;
  38. if (textStyle) {
  39. for (var i = 0, len = modelUtil.TEXT_STYLE_OPTIONS.length; i < len; i++) {
  40. var propName = modelUtil.TEXT_STYLE_OPTIONS[i];
  41. if (textStyle.hasOwnProperty(propName)) {
  42. labelOptSingle[propName] = textStyle[propName];
  43. }
  44. }
  45. }
  46. }
  47. function compatLabelTextStyle(labelOpt) {
  48. if (isObject(labelOpt)) {
  49. compatTextStyle(labelOpt, 'normal');
  50. compatTextStyle(labelOpt, 'emphasis');
  51. }
  52. }
  53. function processSeries(seriesOpt) {
  54. if (!isObject(seriesOpt)) {
  55. return;
  56. }
  57. compatItemStyle(seriesOpt);
  58. compatLabelTextStyle(seriesOpt.label); // treemap
  59. compatLabelTextStyle(seriesOpt.upperLabel); // graph
  60. compatLabelTextStyle(seriesOpt.edgeLabel);
  61. var markPoint = seriesOpt.markPoint;
  62. compatItemStyle(markPoint);
  63. compatLabelTextStyle(markPoint && markPoint.label);
  64. var markLine = seriesOpt.markLine;
  65. compatItemStyle(seriesOpt.markLine);
  66. compatLabelTextStyle(markLine && markLine.label);
  67. var markArea = seriesOpt.markArea;
  68. compatLabelTextStyle(markArea && markArea.label); // For gauge
  69. compatTextStyle(seriesOpt, 'axisLabel');
  70. compatTextStyle(seriesOpt, 'title');
  71. compatTextStyle(seriesOpt, 'detail');
  72. var data = seriesOpt.data;
  73. if (data) {
  74. for (var i = 0; i < data.length; i++) {
  75. compatItemStyle(data[i]);
  76. compatLabelTextStyle(data[i] && data[i].label);
  77. }
  78. } // mark point data
  79. var markPoint = seriesOpt.markPoint;
  80. if (markPoint && markPoint.data) {
  81. var mpData = markPoint.data;
  82. for (var i = 0; i < mpData.length; i++) {
  83. compatItemStyle(mpData[i]);
  84. compatLabelTextStyle(mpData[i] && mpData[i].label);
  85. }
  86. } // mark line data
  87. var markLine = seriesOpt.markLine;
  88. if (markLine && markLine.data) {
  89. var mlData = markLine.data;
  90. for (var i = 0; i < mlData.length; i++) {
  91. if (zrUtil.isArray(mlData[i])) {
  92. compatItemStyle(mlData[i][0]);
  93. compatLabelTextStyle(mlData[i][0] && mlData[i][0].label);
  94. compatItemStyle(mlData[i][1]);
  95. compatLabelTextStyle(mlData[i][1] && mlData[i][1].label);
  96. } else {
  97. compatItemStyle(mlData[i]);
  98. compatLabelTextStyle(mlData[i] && mlData[i].label);
  99. }
  100. }
  101. }
  102. }
  103. function toArr(o) {
  104. return zrUtil.isArray(o) ? o : o ? [o] : [];
  105. }
  106. function toObj(o) {
  107. return (zrUtil.isArray(o) ? o[0] : o) || {};
  108. }
  109. function _default(option, isTheme) {
  110. each(toArr(option.series), function (seriesOpt) {
  111. isObject(seriesOpt) && processSeries(seriesOpt);
  112. });
  113. var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar'];
  114. isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis');
  115. each(axes, function (axisName) {
  116. each(toArr(option[axisName]), function (axisOpt) {
  117. if (axisOpt) {
  118. compatTextStyle(axisOpt, 'axisLabel');
  119. compatTextStyle(axisOpt.axisPointer, 'label');
  120. }
  121. });
  122. });
  123. each(toArr(option.parallel), function (parallelOpt) {
  124. var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;
  125. compatTextStyle(parallelAxisDefault, 'axisLabel');
  126. compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label');
  127. });
  128. each(toArr(option.calendar), function (calendarOpt) {
  129. compatTextStyle(calendarOpt, 'dayLabel');
  130. compatTextStyle(calendarOpt, 'monthLabel');
  131. compatTextStyle(calendarOpt, 'yearLabel');
  132. }); // radar.name.textStyle
  133. each(toArr(option.radar), function (radarOpt) {
  134. compatTextStyle(radarOpt, 'name');
  135. });
  136. each(toArr(option.geo), function (geoOpt) {
  137. if (isObject(geoOpt)) {
  138. compatLabelTextStyle(geoOpt.label);
  139. each(toArr(geoOpt.regions), function (regionObj) {
  140. compatLabelTextStyle(regionObj.label);
  141. });
  142. }
  143. });
  144. compatLabelTextStyle(toObj(option.timeline).label);
  145. compatTextStyle(toObj(option.axisPointer), 'label');
  146. compatTextStyle(toObj(option.tooltip).axisPointer, 'label');
  147. }
  148. module.exports = _default;