File: /www/wwwroot/bs.kntsleep.com/system/extend/ueditor/_src/plugins/charts.js
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;
}
});