UE.plugin.register("charts", function() { var me = this; return { bindEvents: { chartserror: function() {} }, commands: { charts: { execCommand: function(cmd, data) { var tableNode = domUtils.findParentByTagName( this.selection.getRange().startContainer, "table", true ), flagText = [], config = {}; if (!tableNode) { return false; } if (!validData(tableNode)) { me.fireEvent("chartserror"); return false; } config.title = data.title || ""; config.subTitle = data.subTitle || ""; config.xTitle = data.xTitle || ""; config.yTitle = data.yTitle || ""; config.suffix = data.suffix || ""; config.tip = data.tip || ""; //数据对齐方式 config.dataFormat = data.tableDataFormat || ""; //图表类型 config.chartType = data.chartType || 0; for (var key in config) { if (!config.hasOwnProperty(key)) { continue; } flagText.push(key + ":" + config[key]); } tableNode.setAttribute("data-chart", flagText.join(";")); domUtils.addClass(tableNode, "edui-charts-table"); }, queryCommandState: function(cmd, name) { var tableNode = domUtils.findParentByTagName( this.selection.getRange().startContainer, "table", true ); return tableNode && validData(tableNode) ? 0 : -1; } } }, inputRule: function(root) { utils.each(root.getNodesByTagName("table"), function(tableNode) { if (tableNode.getAttr("data-chart") !== undefined) { tableNode.setAttr("style"); } }); }, outputRule: function(root) { utils.each(root.getNodesByTagName("table"), function(tableNode) { if (tableNode.getAttr("data-chart") !== undefined) { tableNode.setAttr("style", "display: none;"); } }); } }; function validData(table) { var firstRows = null, cellCount = 0; //行数不够 if (table.rows.length < 2) { return false; } //列数不够 if (table.rows[0].cells.length < 2) { return false; } //第一行所有cell必须是th firstRows = table.rows[0].cells; cellCount = firstRows.length; for (var i = 0, cell; (cell = firstRows[i]); i++) { if (cell.tagName.toLowerCase() !== "th") { return false; } } for (var i = 1, row; (row = table.rows[i]); i++) { //每行单元格数不匹配, 返回false if (row.cells.length != cellCount) { return false; } //第一列不是th也返回false if (row.cells[0].tagName.toLowerCase() !== "th") { return false; } for (var j = 1, cell; (cell = row.cells[j]); j++) { var value = utils.trim(cell.innerText || cell.textContent || ""); value = value .replace(new RegExp(UE.dom.domUtils.fillChar, "g"), "") .replace(/^\s+|\s+$/g, ""); //必须是数字 if (!/^\d*\.?\d+$/.test(value)) { return false; } } } return true; } });