You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
241 lines
8.8 KiB
241 lines
8.8 KiB
/** |
|
* Created with JetBrains PhpStorm. |
|
* User: xuheng |
|
* Date: 12-12-19 |
|
* Time: 下午4:55 |
|
* To change this template use File | Settings | File Templates. |
|
*/ |
|
(function () { |
|
var title = $G("J_title"), |
|
titleCol = $G("J_titleCol"), |
|
caption = $G("J_caption"), |
|
sorttable = $G("J_sorttable"), |
|
autoSizeContent = $G("J_autoSizeContent"), |
|
autoSizePage = $G("J_autoSizePage"), |
|
tone = $G("J_tone"), |
|
me, |
|
preview = $G("J_preview"); |
|
|
|
var editTable = function () { |
|
me = this; |
|
me.init(); |
|
}; |
|
editTable.prototype = { |
|
init: function () { |
|
var colorPiker = new UE.ui.ColorPicker({ |
|
editor: editor |
|
}), |
|
colorPop = new UE.ui.Popup({ |
|
editor: editor, |
|
content: colorPiker |
|
}); |
|
|
|
title.checked = editor.queryCommandState("inserttitle") == -1; |
|
titleCol.checked = editor.queryCommandState("inserttitlecol") == -1; |
|
caption.checked = editor.queryCommandState("insertcaption") == -1; |
|
sorttable.checked = editor.queryCommandState("enablesort") == 1; |
|
|
|
var enablesortState = editor.queryCommandState("enablesort"), |
|
disablesortState = editor.queryCommandState("disablesort"); |
|
|
|
sorttable.checked = !!(enablesortState < 0 && disablesortState >= 0); |
|
sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0); |
|
sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg : ''; |
|
|
|
me.createTable(title.checked, titleCol.checked, caption.checked); |
|
me.setAutoSize(); |
|
me.setColor(me.getColor()); |
|
|
|
domUtils.on(title, "click", me.titleHanler); |
|
domUtils.on(titleCol, "click", me.titleColHanler); |
|
domUtils.on(caption, "click", me.captionHanler); |
|
domUtils.on(sorttable, "click", me.sorttableHanler); |
|
domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler); |
|
domUtils.on(autoSizePage, "click", me.autoSizePageHanler); |
|
|
|
domUtils.on(tone, "click", function () { |
|
colorPop.showAnchor(tone); |
|
}); |
|
domUtils.on(document, 'mousedown', function () { |
|
colorPop.hide(); |
|
}); |
|
colorPiker.addListener("pickcolor", function () { |
|
me.setColor(arguments[1]); |
|
colorPop.hide(); |
|
}); |
|
colorPiker.addListener("picknocolor", function () { |
|
me.setColor(""); |
|
colorPop.hide(); |
|
}); |
|
}, |
|
|
|
createTable: function (hasTitle, hasTitleCol, hasCaption) { |
|
var arr = [], |
|
sortSpan = '<span>^</span>'; |
|
arr.push("<table id='J_example'>"); |
|
if (hasCaption) { |
|
arr.push("<caption>" + lang.captionName + "</caption>") |
|
} |
|
if (hasTitle) { |
|
arr.push("<tr>"); |
|
if (hasTitleCol) { |
|
arr.push("<th>" + lang.titleName + "</th>"); |
|
} |
|
for (var j = 0; j < 5; j++) { |
|
arr.push("<th>" + lang.titleName + "</th>"); |
|
} |
|
arr.push("</tr>"); |
|
} |
|
for (var i = 0; i < 6; i++) { |
|
arr.push("<tr>"); |
|
if (hasTitleCol) { |
|
arr.push("<th>" + lang.titleName + "</th>") |
|
} |
|
for (var k = 0; k < 5; k++) { |
|
arr.push("<td>" + lang.cellsName + "</td>") |
|
} |
|
arr.push("</tr>"); |
|
} |
|
arr.push("</table>"); |
|
preview.innerHTML = arr.join(""); |
|
this.updateSortSpan(); |
|
}, |
|
titleHanler: function () { |
|
var example = $G("J_example"), |
|
frg = document.createDocumentFragment(), |
|
color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"), |
|
colCount = example.rows[0].children.length; |
|
|
|
if (title.checked) { |
|
example.insertRow(0); |
|
for (var i = 0, node; i < colCount; i++) { |
|
node = document.createElement("th"); |
|
node.innerHTML = lang.titleName; |
|
frg.appendChild(node); |
|
} |
|
example.rows[0].appendChild(frg); |
|
|
|
} else { |
|
domUtils.remove(example.rows[0]); |
|
} |
|
me.setColor(color); |
|
me.updateSortSpan(); |
|
}, |
|
titleColHanler: function () { |
|
var example = $G("J_example"), |
|
color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"), |
|
colArr = example.rows, |
|
colCount = colArr.length; |
|
|
|
if (titleCol.checked) { |
|
for (var i = 0, node; i < colCount; i++) { |
|
node = document.createElement("th"); |
|
node.innerHTML = lang.titleName; |
|
colArr[i].insertBefore(node, colArr[i].children[0]); |
|
} |
|
} else { |
|
for (var i = 0; i < colCount; i++) { |
|
domUtils.remove(colArr[i].children[0]); |
|
} |
|
} |
|
me.setColor(color); |
|
me.updateSortSpan(); |
|
}, |
|
captionHanler: function () { |
|
var example = $G("J_example"); |
|
if (caption.checked) { |
|
var row = document.createElement('caption'); |
|
row.innerHTML = lang.captionName; |
|
example.insertBefore(row, example.firstChild); |
|
} else { |
|
domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]); |
|
} |
|
}, |
|
sorttableHanler: function () { |
|
me.updateSortSpan(); |
|
}, |
|
autoSizeContentHanler: function () { |
|
var example = $G("J_example"); |
|
example.removeAttribute("width"); |
|
}, |
|
autoSizePageHanler: function () { |
|
var example = $G("J_example"); |
|
var tds = example.getElementsByTagName(example, "td"); |
|
utils.each(tds, function (td) { |
|
td.removeAttribute("width"); |
|
}); |
|
example.setAttribute('width', '100%'); |
|
}, |
|
updateSortSpan: function () { |
|
var example = $G("J_example"), |
|
row = example.rows[0]; |
|
|
|
var spans = domUtils.getElementsByTagName(example, "span"); |
|
utils.each(spans, function (span) { |
|
span.parentNode.removeChild(span); |
|
}); |
|
if (sorttable.checked) { |
|
utils.each(row.cells, function (cell, i) { |
|
var span = document.createElement("span"); |
|
span.innerHTML = "^"; |
|
cell.appendChild(span); |
|
}); |
|
} |
|
}, |
|
getColor: function () { |
|
var start = editor.selection.getStart(), color, |
|
cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true); |
|
color = cell && domUtils.getComputedStyle(cell, "border-color"); |
|
if (!color) color = "#DDDDDD"; |
|
return color; |
|
}, |
|
setColor: function (color) { |
|
var example = $G("J_example"), |
|
arr = domUtils.getElementsByTagName(example, "td").concat( |
|
domUtils.getElementsByTagName(example, "th"), |
|
domUtils.getElementsByTagName(example, "caption") |
|
); |
|
|
|
tone.value = color; |
|
utils.each(arr, function (node) { |
|
node.style.borderColor = color; |
|
}); |
|
|
|
}, |
|
setAutoSize: function () { |
|
var me = this; |
|
autoSizePage.checked = true; |
|
me.autoSizePageHanler(); |
|
} |
|
}; |
|
|
|
new editTable; |
|
|
|
dialog.onok = function () { |
|
editor.__hasEnterExecCommand = true; |
|
|
|
var checks = { |
|
title: "inserttitle deletetitle", |
|
titleCol: "inserttitlecol deletetitlecol", |
|
caption: "insertcaption deletecaption", |
|
sorttable: "enablesort disablesort" |
|
}; |
|
editor.fireEvent('saveScene'); |
|
for (var i in checks) { |
|
var cmds = checks[i].split(" "), |
|
input = $G("J_" + i); |
|
if (input["checked"]) { |
|
editor.queryCommandState(cmds[0]) != -1 && editor.execCommand(cmds[0]); |
|
} else { |
|
editor.queryCommandState(cmds[1]) != -1 && editor.execCommand(cmds[1]); |
|
} |
|
} |
|
|
|
editor.execCommand("edittable", tone.value); |
|
autoSizeContent.checked ? editor.execCommand('adaptbytext') : ""; |
|
autoSizePage.checked ? editor.execCommand("adaptbywindow") : ""; |
|
editor.fireEvent('saveScene'); |
|
|
|
editor.__hasEnterExecCommand = false; |
|
}; |
|
})();
|
|
|