浏览代码

Revert "Reset RemoveColumnCommand to latest master version."

This reverts commit 520ce167
Maciej Gołaszewski 5 年之前
父节点
当前提交
6da093cda0
共有 1 个文件被更改,包括 21 次插入3 次删除
  1. 21 3
      packages/ckeditor5-table/src/commands/removecolumncommand.js

+ 21 - 3
packages/ckeditor5-table/src/commands/removecolumncommand.js

@@ -51,7 +51,6 @@ export default class RemoveColumnCommand extends Command {
 		const table = tableRow.parent;
 
 		const headingColumns = table.getAttribute( 'headingColumns' ) || 0;
-		const row = table.getChildIndex( tableRow );
 
 		// Cache the table before removing or updating colspans.
 		const tableMap = [ ...new TableWalker( table ) ];
@@ -59,14 +58,23 @@ export default class RemoveColumnCommand extends Command {
 		// Get column index of removed column.
 		const cellData = tableMap.find( value => value.cell === tableCell );
 		const removedColumn = cellData.column;
+		const removedRow = cellData.row;
+
+		let cellToFocus;
+
+		const tableUtils = this.editor.plugins.get( 'TableUtils' );
+		const columns = tableUtils.getColumns( tableCell.parent.parent );
+
+		const columnToFocus = removedColumn === columns - 1 ? removedColumn - 1 : removedColumn + 1;
+		const rowToFocus = removedRow;
 
 		model.change( writer => {
 			// Update heading columns attribute if removing a row from head section.
-			if ( headingColumns && row <= headingColumns ) {
+			if ( headingColumns && removedRow <= headingColumns ) {
 				writer.setAttribute( 'headingColumns', headingColumns - 1, table );
 			}
 
-			for ( const { cell, column, colspan } of tableMap ) {
+			for ( const { cell, row, column, rowspan, colspan } of tableMap ) {
 				// If colspaned cell overlaps removed column decrease it's span.
 				if ( column <= removedColumn && colspan > 1 && column + colspan > removedColumn ) {
 					updateNumericAttribute( 'colspan', colspan - 1, cell, writer );
@@ -74,7 +82,17 @@ export default class RemoveColumnCommand extends Command {
 					// The cell in removed column has colspan of 1.
 					writer.remove( cell );
 				}
+
+				if ( isCellToFocusAfterRemoving( row, rowToFocus, rowspan, column, columnToFocus, colspan ) ) {
+					cellToFocus = cell;
+				}
 			}
+
+			writer.setSelection( writer.createPositionAt( cellToFocus, 0 ) );
 		} );
 	}
 }
+
+function isCellToFocusAfterRemoving( row, rowToFocus, rowspan, column, columnToFocus, colspan ) {
+	return ( row <= rowToFocus && row + rowspan >= rowToFocus ) && ( column <= columnToFocus && column + colspan >= columnToFocus );
+}