| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936 | 
							- /**
 
-  * Created with JetBrains PhpStorm.
 
-  * User: taoqili
 
-  * Date: 13-2-20
 
-  * Time: 下午6:25
 
-  * To change this template use File | Settings | File Templates.
 
-  */
 
- ;
 
- (function () {
 
-     var UT = UE.UETable,
 
-         getTableItemsByRange = function (editor) {
 
-             return UT.getTableItemsByRange(editor);
 
-         },
 
-         getUETableBySelected = function (editor) {
 
-             return UT.getUETableBySelected(editor)
 
-         },
 
-         getDefaultValue = function (editor, table) {
 
-             return UT.getDefaultValue(editor, table);
 
-         },
 
-         getUETable = function (tdOrTable) {
 
-             return UT.getUETable(tdOrTable);
 
-         };
 
-     UE.commands['inserttable'] = {
 
-         queryCommandState: function () {
 
-             return getTableItemsByRange(this).table ? -1 : 0;
 
-         },
 
-         execCommand: function (cmd, opt) {
 
-             function createTable(opt, tdWidth) {
 
-                 var html = [],
 
-                     rowsNum = opt.numRows,
 
-                     colsNum = opt.numCols;
 
-                 for (var r = 0; r < rowsNum; r++) {
 
-                     html.push('<tr' + (r == 0 ? ' class="firstRow"':'') + '>');
 
-                     for (var c = 0; c < colsNum; c++) {
 
-                         html.push('<td width="' + tdWidth + '"  vAlign="' + opt.tdvalign + '" >' + (browser.ie && browser.version < 11 ? domUtils.fillChar : '<br/>') + '</td>')
 
-                     }
 
-                     html.push('</tr>')
 
-                 }
 
-                 //禁止指定table-width
 
-                 return '<table><tbody>' + html.join('') + '</tbody></table>'
 
-             }
 
-             if (!opt) {
 
-                 opt = utils.extend({}, {
 
-                     numCols: this.options.defaultCols,
 
-                     numRows: this.options.defaultRows,
 
-                     tdvalign: this.options.tdvalign
 
-                 })
 
-             }
 
-             var me = this;
 
-             var range = this.selection.getRange(),
 
-                 start = range.startContainer,
 
-                 firstParentBlock = domUtils.findParent(start, function (node) {
 
-                     return domUtils.isBlockElm(node);
 
-                 }, true) || me.body;
 
-             var defaultValue = getDefaultValue(me),
 
-                 tableWidth = firstParentBlock.offsetWidth,
 
-                 tdWidth = Math.floor(tableWidth / opt.numCols - defaultValue.tdPadding * 2 - defaultValue.tdBorder);
 
-             //todo其他属性
 
-             !opt.tdvalign && (opt.tdvalign = me.options.tdvalign);
 
-             me.execCommand("inserthtml", createTable(opt, tdWidth));
 
-         }
 
-     };
 
-     UE.commands['insertparagraphbeforetable'] = {
 
-         queryCommandState: function () {
 
-             return getTableItemsByRange(this).cell ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 var p = this.document.createElement("p");
 
-                 p.innerHTML = browser.ie ? ' ' : '<br />';
 
-                 table.parentNode.insertBefore(p, table);
 
-                 this.selection.getRange().setStart(p, 0).setCursor();
 
-             }
 
-         }
 
-     };
 
-     UE.commands['deletetable'] = {
 
-         queryCommandState: function () {
 
-             var rng = this.selection.getRange();
 
-             return domUtils.findParentByTagName(rng.startContainer, 'table', true) ? 0 : -1;
 
-         },
 
-         execCommand: function (cmd, table) {
 
-             var rng = this.selection.getRange();
 
-             table = table || domUtils.findParentByTagName(rng.startContainer, 'table', true);
 
-             if (table) {
 
-                 var next = table.nextSibling;
 
-                 if (!next) {
 
-                     next = domUtils.createElement(this.document, 'p', {
 
-                         'innerHTML': browser.ie ? domUtils.fillChar : '<br/>'
 
-                     });
 
-                     table.parentNode.insertBefore(next, table);
 
-                 }
 
-                 domUtils.remove(table);
 
-                 rng = this.selection.getRange();
 
-                 if (next.nodeType == 3) {
 
-                     rng.setStartBefore(next)
 
-                 } else {
 
-                     rng.setStart(next, 0)
 
-                 }
 
-                 rng.setCursor(false, true)
 
-                 this.fireEvent("tablehasdeleted")
 
-             }
 
-         }
 
-     };
 
-     UE.commands['cellalign'] = {
 
-         queryCommandState: function () {
 
-             return getSelectedArr(this).length ? 0 : -1
 
-         },
 
-         execCommand: function (cmd, align) {
 
-             var selectedTds = getSelectedArr(this);
 
-             if (selectedTds.length) {
 
-                 for (var i = 0, ci; ci = selectedTds[i++];) {
 
-                     ci.setAttribute('align', align);
 
-                 }
 
-             }
 
-         }
 
-     };
 
-     UE.commands['cellvalign'] = {
 
-         queryCommandState: function () {
 
-             return getSelectedArr(this).length ? 0 : -1;
 
-         },
 
-         execCommand: function (cmd, valign) {
 
-             var selectedTds = getSelectedArr(this);
 
-             if (selectedTds.length) {
 
-                 for (var i = 0, ci; ci = selectedTds[i++];) {
 
-                     ci.setAttribute('vAlign', valign);
 
-                 }
 
-             }
 
-         }
 
-     };
 
-     UE.commands['insertcaption'] = {
 
-         queryCommandState: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 return table.getElementsByTagName('caption').length == 0 ? 1 : -1;
 
-             }
 
-             return -1;
 
-         },
 
-         execCommand: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 var caption = this.document.createElement('caption');
 
-                 caption.innerHTML = browser.ie ? domUtils.fillChar : '<br/>';
 
-                 table.insertBefore(caption, table.firstChild);
 
-                 var range = this.selection.getRange();
 
-                 range.setStart(caption, 0).setCursor();
 
-             }
 
-         }
 
-     };
 
-     UE.commands['deletecaption'] = {
 
-         queryCommandState: function () {
 
-             var rng = this.selection.getRange(),
 
-                 table = domUtils.findParentByTagName(rng.startContainer, 'table');
 
-             if (table) {
 
-                 return table.getElementsByTagName('caption').length == 0 ? -1 : 1;
 
-             }
 
-             return -1;
 
-         },
 
-         execCommand: function () {
 
-             var rng = this.selection.getRange(),
 
-                 table = domUtils.findParentByTagName(rng.startContainer, 'table');
 
-             if (table) {
 
-                 domUtils.remove(table.getElementsByTagName('caption')[0]);
 
-                 var range = this.selection.getRange();
 
-                 range.setStart(table.rows[0].cells[0], 0).setCursor();
 
-             }
 
-         }
 
-     };
 
-     UE.commands['inserttitle'] = {
 
-         queryCommandState: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 var firstRow = table.rows[0];
 
-                 return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase() != 'th' ? 0 : -1
 
-             }
 
-             return -1;
 
-         },
 
-         execCommand: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 getUETable(table).insertRow(0, 'th');
 
-             }
 
-             var th = table.getElementsByTagName('th')[0];
 
-             this.selection.getRange().setStart(th, 0).setCursor(false, true);
 
-         }
 
-     };
 
-     UE.commands['deletetitle'] = {
 
-         queryCommandState: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 var firstRow = table.rows[0];
 
-                 return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase() == 'th' ? 0 : -1
 
-             }
 
-             return -1;
 
-         },
 
-         execCommand: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 domUtils.remove(table.rows[0])
 
-             }
 
-             var td = table.getElementsByTagName('td')[0];
 
-             this.selection.getRange().setStart(td, 0).setCursor(false, true);
 
-         }
 
-     };
 
-     UE.commands['inserttitlecol'] = {
 
-         queryCommandState: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 var lastRow = table.rows[table.rows.length-1];
 
-                 return lastRow.getElementsByTagName('th').length ? -1 : 0;
 
-             }
 
-             return -1;
 
-         },
 
-         execCommand: function (cmd) {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 getUETable(table).insertCol(0, 'th');
 
-             }
 
-             resetTdWidth(table, this);
 
-             var th = table.getElementsByTagName('th')[0];
 
-             this.selection.getRange().setStart(th, 0).setCursor(false, true);
 
-         }
 
-     };
 
-     UE.commands['deletetitlecol'] = {
 
-         queryCommandState: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 var lastRow = table.rows[table.rows.length-1];
 
-                 return lastRow.getElementsByTagName('th').length ? 0 : -1;
 
-             }
 
-             return -1;
 
-         },
 
-         execCommand: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (table) {
 
-                 for(var i = 0; i< table.rows.length; i++ ){
 
-                     domUtils.remove(table.rows[i].children[0])
 
-                 }
 
-             }
 
-             resetTdWidth(table, this);
 
-             var td = table.getElementsByTagName('td')[0];
 
-             this.selection.getRange().setStart(td, 0).setCursor(false, true);
 
-         }
 
-     };
 
-     UE.commands["mergeright"] = {
 
-         queryCommandState: function (cmd) {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 table = tableItems.table,
 
-                 cell = tableItems.cell;
 
-             if (!table || !cell) return -1;
 
-             var ut = getUETable(table);
 
-             if (ut.selectedTds.length) return -1;
 
-             var cellInfo = ut.getCellInfo(cell),
 
-                 rightColIndex = cellInfo.colIndex + cellInfo.colSpan;
 
-             if (rightColIndex >= ut.colsNum) return -1; // 如果处于最右边则不能向右合并
 
-             var rightCellInfo = ut.indexTable[cellInfo.rowIndex][rightColIndex],
 
-                 rightCell = table.rows[rightCellInfo.rowIndex].cells[rightCellInfo.cellIndex];
 
-             if (!rightCell || cell.tagName != rightCell.tagName) return -1; // TH和TD不能相互合并
 
-             // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并
 
-             return (rightCellInfo.rowIndex == cellInfo.rowIndex && rightCellInfo.rowSpan == cellInfo.rowSpan) ? 0 : -1;
 
-         },
 
-         execCommand: function (cmd) {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell);
 
-             ut.mergeRight(cell);
 
-             rng.moveToBookmark(bk).select();
 
-         }
 
-     };
 
-     UE.commands["mergedown"] = {
 
-         queryCommandState: function (cmd) {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 table = tableItems.table,
 
-                 cell = tableItems.cell;
 
-             if (!table || !cell) return -1;
 
-             var ut = getUETable(table);
 
-             if (ut.selectedTds.length)return -1;
 
-             var cellInfo = ut.getCellInfo(cell),
 
-                 downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan;
 
-             if (downRowIndex >= ut.rowsNum) return -1; // 如果处于最下边则不能向下合并
 
-             var downCellInfo = ut.indexTable[downRowIndex][cellInfo.colIndex],
 
-                 downCell = table.rows[downCellInfo.rowIndex].cells[downCellInfo.cellIndex];
 
-             if (!downCell || cell.tagName != downCell.tagName) return -1; // TH和TD不能相互合并
 
-             // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并
 
-             return (downCellInfo.colIndex == cellInfo.colIndex && downCellInfo.colSpan == cellInfo.colSpan) ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell);
 
-             ut.mergeDown(cell);
 
-             rng.moveToBookmark(bk).select();
 
-         }
 
-     };
 
-     UE.commands["mergecells"] = {
 
-         queryCommandState: function () {
 
-             return getUETableBySelected(this) ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var ut = getUETableBySelected(this);
 
-             if (ut && ut.selectedTds.length) {
 
-                 var cell = ut.selectedTds[0];
 
-                 ut.mergeRange();
 
-                 var rng = this.selection.getRange();
 
-                 if (domUtils.isEmptyBlock(cell)) {
 
-                     rng.setStart(cell, 0).collapse(true)
 
-                 } else {
 
-                     rng.selectNodeContents(cell)
 
-                 }
 
-                 rng.select();
 
-             }
 
-         }
 
-     };
 
-     UE.commands["insertrow"] = {
 
-         queryCommandState: function () {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell;
 
-             return cell && (cell.tagName == "TD" || (cell.tagName == 'TH' && tableItems.tr !== tableItems.table.rows[0])) &&
 
-                 getUETable(tableItems.table).rowsNum < this.options.maxRowNum ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell,
 
-                 table = tableItems.table,
 
-                 ut = getUETable(table),
 
-                 cellInfo = ut.getCellInfo(cell);
 
-             //ut.insertRow(!ut.selectedTds.length ? cellInfo.rowIndex:ut.cellsRange.beginRowIndex,'');
 
-             if (!ut.selectedTds.length) {
 
-                 ut.insertRow(cellInfo.rowIndex, cell);
 
-             } else {
 
-                 var range = ut.cellsRange;
 
-                 for (var i = 0, len = range.endRowIndex - range.beginRowIndex + 1; i < len; i++) {
 
-                     ut.insertRow(range.beginRowIndex, cell);
 
-                 }
 
-             }
 
-             rng.moveToBookmark(bk).select();
 
-             if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table);
 
-         }
 
-     };
 
-     //后插入行
 
-     UE.commands["insertrownext"] = {
 
-         queryCommandState: function () {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell;
 
-             return cell && (cell.tagName == "TD") && getUETable(tableItems.table).rowsNum < this.options.maxRowNum ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell,
 
-                 table = tableItems.table,
 
-                 ut = getUETable(table),
 
-                 cellInfo = ut.getCellInfo(cell);
 
-             //ut.insertRow(!ut.selectedTds.length? cellInfo.rowIndex + cellInfo.rowSpan : ut.cellsRange.endRowIndex + 1,'');
 
-             if (!ut.selectedTds.length) {
 
-                 ut.insertRow(cellInfo.rowIndex + cellInfo.rowSpan, cell);
 
-             } else {
 
-                 var range = ut.cellsRange;
 
-                 for (var i = 0, len = range.endRowIndex - range.beginRowIndex + 1; i < len; i++) {
 
-                     ut.insertRow(range.endRowIndex + 1, cell);
 
-                 }
 
-             }
 
-             rng.moveToBookmark(bk).select();
 
-             if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table);
 
-         }
 
-     };
 
-     UE.commands["deleterow"] = {
 
-         queryCommandState: function () {
 
-             var tableItems = getTableItemsByRange(this);
 
-             return tableItems.cell ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell),
 
-                 cellsRange = ut.cellsRange,
 
-                 cellInfo = ut.getCellInfo(cell),
 
-                 preCell = ut.getVSideCell(cell),
 
-                 nextCell = ut.getVSideCell(cell, true),
 
-                 rng = this.selection.getRange();
 
-             if (utils.isEmptyObject(cellsRange)) {
 
-                 ut.deleteRow(cellInfo.rowIndex);
 
-             } else {
 
-                 for (var i = cellsRange.beginRowIndex; i < cellsRange.endRowIndex + 1; i++) {
 
-                     ut.deleteRow(cellsRange.beginRowIndex);
 
-                 }
 
-             }
 
-             var table = ut.table;
 
-             if (!table.getElementsByTagName('td').length) {
 
-                 var nextSibling = table.nextSibling;
 
-                 domUtils.remove(table);
 
-                 if (nextSibling) {
 
-                     rng.setStart(nextSibling, 0).setCursor(false, true);
 
-                 }
 
-             } else {
 
-                 if (cellInfo.rowSpan == 1 || cellInfo.rowSpan == cellsRange.endRowIndex - cellsRange.beginRowIndex + 1) {
 
-                     if (nextCell || preCell) rng.selectNodeContents(nextCell || preCell).setCursor(false, true);
 
-                 } else {
 
-                     var newCell = ut.getCell(cellInfo.rowIndex, ut.indexTable[cellInfo.rowIndex][cellInfo.colIndex].cellIndex);
 
-                     if (newCell) rng.selectNodeContents(newCell).setCursor(false, true);
 
-                 }
 
-             }
 
-             if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table);
 
-         }
 
-     };
 
-     UE.commands["insertcol"] = {
 
-         queryCommandState: function (cmd) {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell;
 
-             return cell && (cell.tagName == "TD" || (cell.tagName == 'TH' && cell !== tableItems.tr.cells[0])) &&
 
-                 getUETable(tableItems.table).colsNum < this.options.maxColNum ? 0 : -1;
 
-         },
 
-         execCommand: function (cmd) {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             if (this.queryCommandState(cmd) == -1)return;
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell),
 
-                 cellInfo = ut.getCellInfo(cell);
 
-             //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex:ut.cellsRange.beginColIndex);
 
-             if (!ut.selectedTds.length) {
 
-                 ut.insertCol(cellInfo.colIndex, cell);
 
-             } else {
 
-                 var range = ut.cellsRange;
 
-                 for (var i = 0, len = range.endColIndex - range.beginColIndex + 1; i < len; i++) {
 
-                     ut.insertCol(range.beginColIndex, cell);
 
-                 }
 
-             }
 
-             rng.moveToBookmark(bk).select(true);
 
-         }
 
-     };
 
-     UE.commands["insertcolnext"] = {
 
-         queryCommandState: function () {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell;
 
-             return cell && getUETable(tableItems.table).colsNum < this.options.maxColNum ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell),
 
-                 cellInfo = ut.getCellInfo(cell);
 
-             //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex + cellInfo.colSpan:ut.cellsRange.endColIndex +1);
 
-             if (!ut.selectedTds.length) {
 
-                 ut.insertCol(cellInfo.colIndex + cellInfo.colSpan, cell);
 
-             } else {
 
-                 var range = ut.cellsRange;
 
-                 for (var i = 0, len = range.endColIndex - range.beginColIndex + 1; i < len; i++) {
 
-                     ut.insertCol(range.endColIndex + 1, cell);
 
-                 }
 
-             }
 
-             rng.moveToBookmark(bk).select();
 
-         }
 
-     };
 
-     UE.commands["deletecol"] = {
 
-         queryCommandState: function () {
 
-             var tableItems = getTableItemsByRange(this);
 
-             return tableItems.cell ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell),
 
-                 range = ut.cellsRange,
 
-                 cellInfo = ut.getCellInfo(cell),
 
-                 preCell = ut.getHSideCell(cell),
 
-                 nextCell = ut.getHSideCell(cell, true);
 
-             if (utils.isEmptyObject(range)) {
 
-                 ut.deleteCol(cellInfo.colIndex);
 
-             } else {
 
-                 for (var i = range.beginColIndex; i < range.endColIndex + 1; i++) {
 
-                     ut.deleteCol(range.beginColIndex);
 
-                 }
 
-             }
 
-             var table = ut.table,
 
-                 rng = this.selection.getRange();
 
-             if (!table.getElementsByTagName('td').length) {
 
-                 var nextSibling = table.nextSibling;
 
-                 domUtils.remove(table);
 
-                 if (nextSibling) {
 
-                     rng.setStart(nextSibling, 0).setCursor(false, true);
 
-                 }
 
-             } else {
 
-                 if (domUtils.inDoc(cell, this.document)) {
 
-                     rng.setStart(cell, 0).setCursor(false, true);
 
-                 } else {
 
-                     if (nextCell && domUtils.inDoc(nextCell, this.document)) {
 
-                         rng.selectNodeContents(nextCell).setCursor(false, true);
 
-                     } else {
 
-                         if (preCell && domUtils.inDoc(preCell, this.document)) {
 
-                             rng.selectNodeContents(preCell).setCursor(true, true);
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-     };
 
-     UE.commands["splittocells"] = {
 
-         queryCommandState: function () {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell;
 
-             if (!cell) return -1;
 
-             var ut = getUETable(tableItems.table);
 
-             if (ut.selectedTds.length > 0) return -1;
 
-             return cell && (cell.colSpan > 1 || cell.rowSpan > 1) ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell);
 
-             ut.splitToCells(cell);
 
-             rng.moveToBookmark(bk).select();
 
-         }
 
-     };
 
-     UE.commands["splittorows"] = {
 
-         queryCommandState: function () {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell;
 
-             if (!cell) return -1;
 
-             var ut = getUETable(tableItems.table);
 
-             if (ut.selectedTds.length > 0) return -1;
 
-             return cell && cell.rowSpan > 1 ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell);
 
-             ut.splitToRows(cell);
 
-             rng.moveToBookmark(bk).select();
 
-         }
 
-     };
 
-     UE.commands["splittocols"] = {
 
-         queryCommandState: function () {
 
-             var tableItems = getTableItemsByRange(this),
 
-                 cell = tableItems.cell;
 
-             if (!cell) return -1;
 
-             var ut = getUETable(tableItems.table);
 
-             if (ut.selectedTds.length > 0) return -1;
 
-             return cell && cell.colSpan > 1 ? 0 : -1;
 
-         },
 
-         execCommand: function () {
 
-             var rng = this.selection.getRange(),
 
-                 bk = rng.createBookmark(true);
 
-             var cell = getTableItemsByRange(this).cell,
 
-                 ut = getUETable(cell);
 
-             ut.splitToCols(cell);
 
-             rng.moveToBookmark(bk).select();
 
-         }
 
-     };
 
-     UE.commands["adaptbytext"] =
 
-         UE.commands["adaptbywindow"] = {
 
-             queryCommandState: function () {
 
-                 return getTableItemsByRange(this).table ? 0 : -1
 
-             },
 
-             execCommand: function (cmd) {
 
-                 var tableItems = getTableItemsByRange(this),
 
-                     table = tableItems.table;
 
-                 if (table) {
 
-                     if (cmd == 'adaptbywindow') {
 
-                         resetTdWidth(table, this);
 
-                     } else {
 
-                         var cells = domUtils.getElementsByTagName(table, "td th");
 
-                         utils.each(cells, function (cell) {
 
-                             cell.removeAttribute("width");
 
-                         });
 
-                         table.removeAttribute("width");
 
-                     }
 
-                 }
 
-             }
 
-         };
 
-     //平均分配各列
 
-     UE.commands['averagedistributecol'] = {
 
-         queryCommandState: function () {
 
-             var ut = getUETableBySelected(this);
 
-             if (!ut) return -1;
 
-             return ut.isFullRow() || ut.isFullCol() ? 0 : -1;
 
-         },
 
-         execCommand: function (cmd) {
 
-             var me = this,
 
-                 ut = getUETableBySelected(me);
 
-             function getAverageWidth() {
 
-                 var tb = ut.table,
 
-                     averageWidth, sumWidth = 0, colsNum = 0,
 
-                     tbAttr = getDefaultValue(me, tb);
 
-                 if (ut.isFullRow()) {
 
-                     sumWidth = tb.offsetWidth;
 
-                     colsNum = ut.colsNum;
 
-                 } else {
 
-                     var begin = ut.cellsRange.beginColIndex,
 
-                         end = ut.cellsRange.endColIndex,
 
-                         node;
 
-                     for (var i = begin; i <= end;) {
 
-                         node = ut.selectedTds[i];
 
-                         sumWidth += node.offsetWidth;
 
-                         i += node.colSpan;
 
-                         colsNum += 1;
 
-                     }
 
-                 }
 
-                 averageWidth = Math.ceil(sumWidth / colsNum) - tbAttr.tdBorder * 2 - tbAttr.tdPadding * 2;
 
-                 return averageWidth;
 
-             }
 
-             function setAverageWidth(averageWidth) {
 
-                 utils.each(domUtils.getElementsByTagName(ut.table, "th"), function (node) {
 
-                     node.setAttribute("width", "");
 
-                 });
 
-                 var cells = ut.isFullRow() ? domUtils.getElementsByTagName(ut.table, "td") : ut.selectedTds;
 
-                 utils.each(cells, function (node) {
 
-                     if (node.colSpan == 1) {
 
-                         node.setAttribute("width", averageWidth);
 
-                     }
 
-                 });
 
-             }
 
-             if (ut && ut.selectedTds.length) {
 
-                 setAverageWidth(getAverageWidth());
 
-             }
 
-         }
 
-     };
 
-     //平均分配各行
 
-     UE.commands['averagedistributerow'] = {
 
-         queryCommandState: function () {
 
-             var ut = getUETableBySelected(this);
 
-             if (!ut) return -1;
 
-             if (ut.selectedTds && /th/ig.test(ut.selectedTds[0].tagName)) return -1;
 
-             return ut.isFullRow() || ut.isFullCol() ? 0 : -1;
 
-         },
 
-         execCommand: function (cmd) {
 
-             var me = this,
 
-                 ut = getUETableBySelected(me);
 
-             function getAverageHeight() {
 
-                 var averageHeight, rowNum, sumHeight = 0,
 
-                     tb = ut.table,
 
-                     tbAttr = getDefaultValue(me, tb),
 
-                     tdpadding = parseInt(domUtils.getComputedStyle(tb.getElementsByTagName('td')[0], "padding-top"));
 
-                 if (ut.isFullCol()) {
 
-                     var captionArr = domUtils.getElementsByTagName(tb, "caption"),
 
-                         thArr = domUtils.getElementsByTagName(tb, "th"),
 
-                         captionHeight, thHeight;
 
-                     if (captionArr.length > 0) {
 
-                         captionHeight = captionArr[0].offsetHeight;
 
-                     }
 
-                     if (thArr.length > 0) {
 
-                         thHeight = thArr[0].offsetHeight;
 
-                     }
 
-                     sumHeight = tb.offsetHeight - (captionHeight || 0) - (thHeight || 0);
 
-                     rowNum = thArr.length == 0 ? ut.rowsNum : (ut.rowsNum - 1);
 
-                 } else {
 
-                     var begin = ut.cellsRange.beginRowIndex,
 
-                         end = ut.cellsRange.endRowIndex,
 
-                         count = 0,
 
-                         trs = domUtils.getElementsByTagName(tb, "tr");
 
-                     for (var i = begin; i <= end; i++) {
 
-                         sumHeight += trs[i].offsetHeight;
 
-                         count += 1;
 
-                     }
 
-                     rowNum = count;
 
-                 }
 
-                 //ie8下是混杂模式
 
-                 if (browser.ie && browser.version < 9) {
 
-                     averageHeight = Math.ceil(sumHeight / rowNum);
 
-                 } else {
 
-                     averageHeight = Math.ceil(sumHeight / rowNum) - tbAttr.tdBorder * 2 - tdpadding * 2;
 
-                 }
 
-                 return averageHeight;
 
-             }
 
-             function setAverageHeight(averageHeight) {
 
-                 var cells = ut.isFullCol() ? domUtils.getElementsByTagName(ut.table, "td") : ut.selectedTds;
 
-                 utils.each(cells, function (node) {
 
-                     if (node.rowSpan == 1) {
 
-                         node.setAttribute("height", averageHeight);
 
-                     }
 
-                 });
 
-             }
 
-             if (ut && ut.selectedTds.length) {
 
-                 setAverageHeight(getAverageHeight());
 
-             }
 
-         }
 
-     };
 
-     //单元格对齐方式
 
-     UE.commands['cellalignment'] = {
 
-         queryCommandState: function () {
 
-             return getTableItemsByRange(this).table ? 0 : -1
 
-         },
 
-         execCommand: function (cmd, data) {
 
-             var me = this,
 
-                 ut = getUETableBySelected(me);
 
-             if (!ut) {
 
-                 var start = me.selection.getStart(),
 
-                     cell = start && domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
 
-                 if (!/caption/ig.test(cell.tagName)) {
 
-                     domUtils.setAttributes(cell, data);
 
-                 } else {
 
-                     cell.style.textAlign = data.align;
 
-                     cell.style.verticalAlign = data.vAlign;
 
-                 }
 
-                 me.selection.getRange().setCursor(true);
 
-             } else {
 
-                 utils.each(ut.selectedTds, function (cell) {
 
-                     domUtils.setAttributes(cell, data);
 
-                 });
 
-             }
 
-         },
 
-         /**
 
-          * 查询当前点击的单元格的对齐状态, 如果当前已经选择了多个单元格, 则会返回所有单元格经过统一协调过后的状态
 
-          * @see UE.UETable.getTableCellAlignState
 
-          */
 
-         queryCommandValue: function (cmd) {
 
-             var activeMenuCell = getTableItemsByRange( this).cell;
 
-             if( !activeMenuCell ) {
 
-                 activeMenuCell = getSelectedArr(this)[0];
 
-             }
 
-             if (!activeMenuCell) {
 
-                 return null;
 
-             } else {
 
-                 //获取同时选中的其他单元格
 
-                 var cells = UE.UETable.getUETable(activeMenuCell).selectedTds;
 
-                 !cells.length && ( cells = activeMenuCell );
 
-                 return UE.UETable.getTableCellAlignState(cells);
 
-             }
 
-         }
 
-     };
 
-     //表格对齐方式
 
-     UE.commands['tablealignment'] = {
 
-         queryCommandState: function () {
 
-             if (browser.ie && browser.version < 8) {
 
-                 return -1;
 
-             }
 
-             return getTableItemsByRange(this).table ? 0 : -1
 
-         },
 
-         execCommand: function (cmd, value) {
 
-             var me = this,
 
-                 start = me.selection.getStart(),
 
-                 table = start && domUtils.findParentByTagName(start, ["table"], true);
 
-             if (table) {
 
-                 table.setAttribute("align",value);
 
-             }
 
-         }
 
-     };
 
-     //表格属性
 
-     UE.commands['edittable'] = {
 
-         queryCommandState: function () {
 
-             return getTableItemsByRange(this).table ? 0 : -1
 
-         },
 
-         execCommand: function (cmd, color) {
 
-             var rng = this.selection.getRange(),
 
-                 table = domUtils.findParentByTagName(rng.startContainer, 'table');
 
-             if (table) {
 
-                 var arr = domUtils.getElementsByTagName(table, "td").concat(
 
-                     domUtils.getElementsByTagName(table, "th"),
 
-                     domUtils.getElementsByTagName(table, "caption")
 
-                 );
 
-                 utils.each(arr, function (node) {
 
-                     node.style.borderColor = color;
 
-                 });
 
-             }
 
-         }
 
-     };
 
-     //单元格属性
 
-     UE.commands['edittd'] = {
 
-         queryCommandState: function () {
 
-             return getTableItemsByRange(this).table ? 0 : -1
 
-         },
 
-         execCommand: function (cmd, bkColor) {
 
-             var me = this,
 
-                 ut = getUETableBySelected(me);
 
-             if (!ut) {
 
-                 var start = me.selection.getStart(),
 
-                     cell = start && domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
 
-                 if (cell) {
 
-                     cell.style.backgroundColor = bkColor;
 
-                 }
 
-             } else {
 
-                 utils.each(ut.selectedTds, function (cell) {
 
-                     cell.style.backgroundColor = bkColor;
 
-                 });
 
-             }
 
-         }
 
-     };
 
-     UE.commands["settablebackground"] = {
 
-         queryCommandState: function () {
 
-             return getSelectedArr(this).length > 1 ? 0 : -1;
 
-         },
 
-         execCommand: function (cmd, value) {
 
-             var cells, ut;
 
-             cells = getSelectedArr(this);
 
-             ut = getUETable(cells[0]);
 
-             ut.setBackground(cells, value);
 
-         }
 
-     };
 
-     UE.commands["cleartablebackground"] = {
 
-         queryCommandState: function () {
 
-             var cells = getSelectedArr(this);
 
-             if (!cells.length)return -1;
 
-             for (var i = 0, cell; cell = cells[i++];) {
 
-                 if (cell.style.backgroundColor !== "") return 0;
 
-             }
 
-             return -1;
 
-         },
 
-         execCommand: function () {
 
-             var cells = getSelectedArr(this),
 
-                 ut = getUETable(cells[0]);
 
-             ut.removeBackground(cells);
 
-         }
 
-     };
 
-     UE.commands["interlacetable"] = UE.commands["uninterlacetable"] = {
 
-         queryCommandState: function (cmd) {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (!table) return -1;
 
-             var interlaced = table.getAttribute("interlaced");
 
-             if (cmd == "interlacetable") {
 
-                 //TODO 待定
 
-                 //是否需要待定,如果设置,则命令只能单次执行成功,但反射具备toggle效果;否则可以覆盖前次命令,但反射将不存在toggle效果
 
-                 return (interlaced === "enabled") ? -1 : 0;
 
-             } else {
 
-                 return (!interlaced || interlaced === "disabled") ? -1 : 0;
 
-             }
 
-         },
 
-         execCommand: function (cmd, classList) {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (cmd == "interlacetable") {
 
-                 table.setAttribute("interlaced", "enabled");
 
-                 this.fireEvent("interlacetable", table, classList);
 
-             } else {
 
-                 table.setAttribute("interlaced", "disabled");
 
-                 this.fireEvent("uninterlacetable", table);
 
-             }
 
-         }
 
-     };
 
-     UE.commands["setbordervisible"] = {
 
-         queryCommandState: function (cmd) {
 
-             var table = getTableItemsByRange(this).table;
 
-             if (!table) return -1;
 
-             return 0;
 
-         },
 
-         execCommand: function () {
 
-             var table = getTableItemsByRange(this).table;
 
-             utils.each(domUtils.getElementsByTagName(table,'td'),function(td){
 
-                 td.style.borderWidth = '1px';
 
-                 td.style.borderStyle = 'solid';
 
-             })
 
-         }
 
-     };
 
-     function resetTdWidth(table, editor) {
 
-         var tds = domUtils.getElementsByTagName(table,'td th');
 
-         utils.each(tds, function (td) {
 
-             td.removeAttribute("width");
 
-         });
 
-         table.setAttribute('width', getTableWidth(editor, true, getDefaultValue(editor, table)));
 
-         var tdsWidths = [];
 
-         setTimeout(function () {
 
-             utils.each(tds, function (td) {
 
-                 (td.colSpan == 1) && tdsWidths.push(td.offsetWidth)
 
-             })
 
-             utils.each(tds, function (td,i) {
 
-                 (td.colSpan == 1) && td.setAttribute("width", tdsWidths[i] + "");
 
-             })
 
-         }, 0);
 
-     }
 
-     function getTableWidth(editor, needIEHack, defaultValue) {
 
-         var body = editor.body;
 
-         return body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (editor.options.offsetWidth || 0);
 
-     }
 
-     function getSelectedArr(editor) {
 
-         var cell = getTableItemsByRange(editor).cell;
 
-         if (cell) {
 
-             var ut = getUETable(cell);
 
-             return ut.selectedTds.length ? ut.selectedTds : [cell];
 
-         } else {
 
-             return [];
 
-         }
 
-     }
 
- })();
 
 
  |