/** * 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 = '^'; arr.push(""); if (hasCaption) { arr.push(''); } if (hasTitle) { arr.push(''); if (hasTitleCol) { arr.push(''); } for (var j = 0; j < 5; j++) { arr.push(''); } arr.push(''); } for (var i = 0; i < 6; i++) { arr.push(''); if (hasTitleCol) { arr.push(''); } for (var k = 0; k < 5; k++) { arr.push(''); } arr.push(''); } arr.push('
' + lang.captionName + '
' + lang.titleName + '' + lang.titleName + '
' + lang.titleName + '' + lang.cellsName + '
'); 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; }; })();