Skip to content

Commit

Permalink
Merge pull request #6752 from ckeditor/i/6607
Browse files Browse the repository at this point in the history
Fix (table): Fixed insert table row/column commands when a widget is selected inside the table cell. Closes #6607.
  • Loading branch information
jodator committed May 7, 2020
2 parents c9e2754 + 542c77b commit 3d85aca
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 16 deletions.
11 changes: 5 additions & 6 deletions packages/ckeditor5-table/src/commands/insertcolumncommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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 } );
}
Expand Down
14 changes: 6 additions & 8 deletions packages/ckeditor5-table/src/commands/insertrowcommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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 } );
}
}
19 changes: 18 additions & 1 deletion packages/ckeditor5-table/tests/commands/insertcolumncommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -18,7 +19,7 @@ describe( 'InsertColumnCommand', () => {
beforeEach( () => {
return ModelTestEditor
.create( {
plugins: [ TableUtils, TableSelection ]
plugins: [ TableUtils, TableSelection, HorizontalLineEditing ]
} )
.then( newEditor => {
editor = newEditor;
Expand Down Expand Up @@ -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', '[<horizontalLine></horizontalLine>]' ]
] ) );

command.execute();

assertEqualMarkup( getData( model, { withoutSelection: true } ), modelTable( [
[ '11', '12', '' ],
[ '21', '22', '' ],
[ '31', '<horizontalLine></horizontalLine>', '' ]
] ) );
} );
} );
} );

Expand Down
20 changes: 19 additions & 1 deletion packages/ckeditor5-table/tests/commands/insertrowcommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -18,7 +19,7 @@ describe( 'InsertRowCommand', () => {
beforeEach( () => {
return ModelTestEditor
.create( {
plugins: [ TableUtils, TableSelection ]
plugins: [ TableUtils, TableSelection, HorizontalLineEditing ]
} )
.then( newEditor => {
editor = newEditor;
Expand Down Expand Up @@ -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', '[<horizontalLine></horizontalLine>]' ]
] ) );

command.execute();

assertEqualMarkup( getData( model, { withoutSelection: true } ), modelTable( [
[ '11', '12' ],
[ '21', '22' ],
[ '31', '<horizontalLine></horizontalLine>' ],
[ '', '' ]
] ) );
} );
} );
} );

Expand Down

0 comments on commit 3d85aca

Please sign in to comment.