diff --git a/src/commands/mergecellcommand.js b/src/commands/mergecellcommand.js index f8449990..20da81c3 100644 --- a/src/commands/mergecellcommand.js +++ b/src/commands/mergecellcommand.js @@ -153,7 +153,10 @@ export default class MergeCellCommand extends Command { // @param {String} direction // @returns {module:engine/model/node~Node|null} function getHorizontalCell( tableCell, direction, tableUtils ) { + const tableRow = tableCell.parent; + const table = tableRow.parent; const horizontalCell = direction == 'right' ? tableCell.nextSibling : tableCell.previousSibling; + const headingColumns = table.getAttribute( 'headingColumns' ) || 0; if ( !horizontalCell ) { return; @@ -169,6 +172,13 @@ function getHorizontalCell( tableCell, direction, tableUtils ) { const leftCellSpan = parseInt( cellOnLeft.getAttribute( 'colspan' ) || 1 ); + const isMergeWithBodyCell = direction == 'right' && rightCellColumn === headingColumns; + const isMergeWithHeadCell = direction == 'left' && leftCellColumn === (headingColumns - 1); + + if ( headingColumns && ( isMergeWithBodyCell || isMergeWithHeadCell )) { + return; + } + // The cell on the right must have index that is distant to the cell on the left by the left cell's width (colspan). const cellsAreTouching = leftCellColumn + leftCellSpan === rightCellColumn; diff --git a/tests/commands/mergecellcommand.js b/tests/commands/mergecellcommand.js index 694ff799..5e9d6523 100644 --- a/tests/commands/mergecellcommand.js +++ b/tests/commands/mergecellcommand.js @@ -93,6 +93,14 @@ describe( 'MergeCellCommand', () => { expect( command.isEnabled ).to.be.false; } ); + + it( 'should be false if mergeable cell is in other table section then current cell', () => { + setData( model, modelTable( [ + [ '00[]', '01' ], + ], { headingColumns: 1 } ) ); + + expect( command.isEnabled ).to.be.false; + } ); } ); describe( 'value', () => { @@ -273,6 +281,14 @@ describe( 'MergeCellCommand', () => { expect( command.isEnabled ).to.be.false; } ); + + it( 'should be false if mergeable cell is in other table section then current cell', () => { + setData( model, modelTable( [ + [ '00', '01[]' ], + ], { headingColumns: 1 } ) ); + + expect( command.isEnabled ).to.be.false; + } ); } ); describe( 'value', () => {