charts.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. UE.plugin.register("charts", function() {
  2. var me = this;
  3. return {
  4. bindEvents: {
  5. chartserror: function() {}
  6. },
  7. commands: {
  8. charts: {
  9. execCommand: function(cmd, data) {
  10. var tableNode = domUtils.findParentByTagName(
  11. this.selection.getRange().startContainer,
  12. "table",
  13. true
  14. ),
  15. flagText = [],
  16. config = {};
  17. if (!tableNode) {
  18. return false;
  19. }
  20. if (!validData(tableNode)) {
  21. me.fireEvent("chartserror");
  22. return false;
  23. }
  24. config.title = data.title || "";
  25. config.subTitle = data.subTitle || "";
  26. config.xTitle = data.xTitle || "";
  27. config.yTitle = data.yTitle || "";
  28. config.suffix = data.suffix || "";
  29. config.tip = data.tip || "";
  30. //数据对齐方式
  31. config.dataFormat = data.tableDataFormat || "";
  32. //图表类型
  33. config.chartType = data.chartType || 0;
  34. for (var key in config) {
  35. if (!config.hasOwnProperty(key)) {
  36. continue;
  37. }
  38. flagText.push(key + ":" + config[key]);
  39. }
  40. tableNode.setAttribute("data-chart", flagText.join(";"));
  41. domUtils.addClass(tableNode, "edui-charts-table");
  42. },
  43. queryCommandState: function(cmd, name) {
  44. var tableNode = domUtils.findParentByTagName(
  45. this.selection.getRange().startContainer,
  46. "table",
  47. true
  48. );
  49. return tableNode && validData(tableNode) ? 0 : -1;
  50. }
  51. }
  52. },
  53. inputRule: function(root) {
  54. utils.each(root.getNodesByTagName("table"), function(tableNode) {
  55. if (tableNode.getAttr("data-chart") !== undefined) {
  56. tableNode.setAttr("style");
  57. }
  58. });
  59. },
  60. outputRule: function(root) {
  61. utils.each(root.getNodesByTagName("table"), function(tableNode) {
  62. if (tableNode.getAttr("data-chart") !== undefined) {
  63. tableNode.setAttr("style", "display: none;");
  64. }
  65. });
  66. }
  67. };
  68. function validData(table) {
  69. var firstRows = null,
  70. cellCount = 0;
  71. //行数不够
  72. if (table.rows.length < 2) {
  73. return false;
  74. }
  75. //列数不够
  76. if (table.rows[0].cells.length < 2) {
  77. return false;
  78. }
  79. //第一行所有cell必须是th
  80. firstRows = table.rows[0].cells;
  81. cellCount = firstRows.length;
  82. for (var i = 0, cell; (cell = firstRows[i]); i++) {
  83. if (cell.tagName.toLowerCase() !== "th") {
  84. return false;
  85. }
  86. }
  87. for (var i = 1, row; (row = table.rows[i]); i++) {
  88. //每行单元格数不匹配, 返回false
  89. if (row.cells.length != cellCount) {
  90. return false;
  91. }
  92. //第一列不是th也返回false
  93. if (row.cells[0].tagName.toLowerCase() !== "th") {
  94. return false;
  95. }
  96. for (var j = 1, cell; (cell = row.cells[j]); j++) {
  97. var value = utils.trim(cell.innerText || cell.textContent || "");
  98. value = value
  99. .replace(new RegExp(UE.dom.domUtils.fillChar, "g"), "")
  100. .replace(/^\s+|\s+$/g, "");
  101. //必须是数字
  102. if (!/^\d*\.?\d+$/.test(value)) {
  103. return false;
  104. }
  105. }
  106. }
  107. return true;
  108. }
  109. });