diff --git a/packages/ckeditor5-table/src/commands/insertcolumncommand.js b/packages/ckeditor5-table/src/commands/insertcolumncommand.js
index 3690c6c1fae..ab27c7cdbb8 100644
--- a/packages/ckeditor5-table/src/commands/insertcolumncommand.js
+++ b/packages/ckeditor5-table/src/commands/insertcolumncommand.js
@@ -9,6 +9,7 @@
import Command from '@ckeditor/ckeditor5-core/src/command';
import { findAncestor } from './utils';
+import { getColumnIndexes, getSelectionAffectedTableCells } from '../utils';
/**
* The insert column command.
@@ -72,13 +73,11 @@ export default class InsertColumnCommand extends Command {
const tableUtils = editor.plugins.get( 'TableUtils' );
const insertBefore = this.order === 'left';
- const referencePosition = insertBefore ? selection.getFirstPosition() : selection.getLastPosition();
- const referenceRange = insertBefore ? selection.getFirstRange() : selection.getLastRange();
+ const affectedTableCells = getSelectionAffectedTableCells( selection );
+ const columnIndexes = getColumnIndexes( affectedTableCells );
- const tableCell = referenceRange.getContainedElement() || findAncestor( 'tableCell', referencePosition );
- const table = tableCell.parent.parent;
-
- const { column } = tableUtils.getCellLocation( tableCell );
+ const column = insertBefore ? columnIndexes.first : columnIndexes.last;
+ const table = findAncestor( 'table', affectedTableCells[ 0 ] );
tableUtils.insertColumns( table, { columns: 1, at: insertBefore ? column : column + 1 } );
}
diff --git a/packages/ckeditor5-table/src/commands/insertrowcommand.js b/packages/ckeditor5-table/src/commands/insertrowcommand.js
index ebdd839c827..623ece4da5f 100644
--- a/packages/ckeditor5-table/src/commands/insertrowcommand.js
+++ b/packages/ckeditor5-table/src/commands/insertrowcommand.js
@@ -9,6 +9,7 @@
import Command from '@ckeditor/ckeditor5-core/src/command';
import { findAncestor } from './utils';
+import { getRowIndexes, getSelectionAffectedTableCells } from '../utils';
/**
* The insert row command.
@@ -71,15 +72,12 @@ export default class InsertRowCommand extends Command {
const tableUtils = editor.plugins.get( 'TableUtils' );
const insertAbove = this.order === 'above';
- const referencePosition = insertAbove ? selection.getFirstPosition() : selection.getLastPosition();
- const referenceRange = insertAbove ? selection.getFirstRange() : selection.getLastRange();
+ const affectedTableCells = getSelectionAffectedTableCells( selection );
+ const rowIndexes = getRowIndexes( affectedTableCells );
- const tableCell = referenceRange.getContainedElement() || findAncestor( 'tableCell', referencePosition );
- const tableRow = tableCell.parent;
- const table = tableRow.parent;
+ const row = insertAbove ? rowIndexes.first : rowIndexes.last;
+ const table = findAncestor( 'table', affectedTableCells[ 0 ] );
- const row = table.getChildIndex( tableRow );
-
- tableUtils.insertRows( table, { rows: 1, at: this.order === 'below' ? row + 1 : row } );
+ tableUtils.insertRows( table, { rows: 1, at: insertAbove ? row : row + 1 } );
}
}
diff --git a/packages/ckeditor5-table/tests/commands/insertcolumncommand.js b/packages/ckeditor5-table/tests/commands/insertcolumncommand.js
index 717828b22ad..179dd8f767b 100644
--- a/packages/ckeditor5-table/tests/commands/insertcolumncommand.js
+++ b/packages/ckeditor5-table/tests/commands/insertcolumncommand.js
@@ -4,6 +4,7 @@
*/
import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
+import HorizontalLineEditing from '@ckeditor/ckeditor5-horizontal-line/src/horizontallineediting';
import { getData, setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
import InsertColumnCommand from '../../src/commands/insertcolumncommand';
@@ -18,7 +19,7 @@ describe( 'InsertColumnCommand', () => {
beforeEach( () => {
return ModelTestEditor
.create( {
- plugins: [ TableUtils, TableSelection ]
+ plugins: [ TableUtils, TableSelection, HorizontalLineEditing ]
} )
.then( newEditor => {
editor = newEditor;
@@ -181,6 +182,22 @@ describe( 'InsertColumnCommand', () => {
[ { colspan: 5, contents: '31' }, { colspan: 2, contents: '34' } ]
], { headingColumns: 5 } ) );
} );
+
+ it( 'should insert a column when a widget in the table cell is selected', () => {
+ setData( model, modelTable( [
+ [ '11', '12' ],
+ [ '21', '22' ],
+ [ '31', '[]' ]
+ ] ) );
+
+ command.execute();
+
+ assertEqualMarkup( getData( model, { withoutSelection: true } ), modelTable( [
+ [ '11', '12', '' ],
+ [ '21', '22', '' ],
+ [ '31', '', '' ]
+ ] ) );
+ } );
} );
} );
diff --git a/packages/ckeditor5-table/tests/commands/insertrowcommand.js b/packages/ckeditor5-table/tests/commands/insertrowcommand.js
index 1f20ff4b920..721ed9e461f 100644
--- a/packages/ckeditor5-table/tests/commands/insertrowcommand.js
+++ b/packages/ckeditor5-table/tests/commands/insertrowcommand.js
@@ -4,6 +4,7 @@
*/
import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
+import HorizontalLineEditing from '@ckeditor/ckeditor5-horizontal-line/src/horizontallineediting';
import { getData, setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
import InsertRowCommand from '../../src/commands/insertrowcommand';
@@ -18,7 +19,7 @@ describe( 'InsertRowCommand', () => {
beforeEach( () => {
return ModelTestEditor
.create( {
- plugins: [ TableUtils, TableSelection ]
+ plugins: [ TableUtils, TableSelection, HorizontalLineEditing ]
} )
.then( newEditor => {
editor = newEditor;
@@ -214,6 +215,23 @@ describe( 'InsertRowCommand', () => {
[ 0, 0 ]
] );
} );
+
+ it( 'should insert a row when a widget in the table cell is selected', () => {
+ setData( model, modelTable( [
+ [ '11', '12' ],
+ [ '21', '22' ],
+ [ '31', '[]' ]
+ ] ) );
+
+ command.execute();
+
+ assertEqualMarkup( getData( model, { withoutSelection: true } ), modelTable( [
+ [ '11', '12' ],
+ [ '21', '22' ],
+ [ '31', '' ],
+ [ '', '' ]
+ ] ) );
+ } );
} );
} );