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.
248 lines
7.6 KiB
248 lines
7.6 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;
|
|
};
|
|
})();
|
|
|