8
0
Просмотр исходного кода

Feature: Introduced `TableWalkerValue#isSpanned`.

Szymon Cofalik 6 лет назад
Родитель
Сommit
c9a7bdcf16

+ 6 - 3
packages/ckeditor5-table/src/tablewalker.js

@@ -193,7 +193,7 @@ export default class TableWalker {
 			cell = this._getSpanned( this._row, this._column );
 
 			skipCurrentValue = !this.includeSpanned || this._shouldSkipRow() || this._shouldSkipColumn();
-			outValue = this._formatOutValue( cell, this._column );
+			outValue = this._formatOutValue( cell, this._column, true );
 		} else {
 			cell = row.getChild( this._cellIndex );
 
@@ -218,7 +218,7 @@ export default class TableWalker {
 			this._nextCellAtColumn = this._column + colspan;
 
 			skipCurrentValue = this._shouldSkipRow() || this._shouldSkipColumn();
-			outValue = this._formatOutValue( cell, this._column, rowspan, colspan );
+			outValue = this._formatOutValue( cell, this._column, false, rowspan, colspan );
 		}
 
 		// Advance to the next column before returning value.
@@ -259,17 +259,19 @@ export default class TableWalker {
 	 * @private
 	 * @param {module:engine/model/element~Element} cell The table cell to output.
 	 * @param {Number} column Column index (use the cached value).
+	 * @param {Boolean} isSpanned Whether the value is returned for a spanned cell location or actual cell.
 	 * @param {Number} rowspan Rowspan of the current cell.
 	 * @param {Number} colspan Colspan of the current cell.
 	 * @returns {{done: boolean, value: {cell: *, row: Number, column: *, rowspan: *, colspan: *, cellIndex: Number}}}
 	 */
-	_formatOutValue( cell, column, rowspan = 1, colspan = 1 ) {
+	_formatOutValue( cell, column, isSpanned, rowspan = 1, colspan = 1 ) {
 		return {
 			done: false,
 			value: {
 				cell,
 				row: this._row,
 				column,
+				isSpanned,
 				rowspan,
 				colspan,
 				cellIndex: this._cellIndex
@@ -387,6 +389,7 @@ export default class TableWalker {
  * @property {module:engine/model/element~Element} cell The current table cell.
  * @property {Number} row The row index of a cell.
  * @property {Number} column The column index of a cell. Column index is adjusted to widths and heights of previous cells.
+ * @param {Boolean} isSpanned Whether the value is returned for a spanned cell location or actual cell.
  * @property {Number} colspan The `colspan` attribute of a cell. It is always defined even if the model attribute is not present.
  * @property {Number} rowspan The `rowspan` attribute of a cell. It is always defined even if the model attribute is not present.
  * @property {Number} cellIndex The index of the current cell in a parent row.

+ 70 - 69
packages/ckeditor5-table/tests/tablewalker.js

@@ -37,9 +37,10 @@ describe( 'TableWalker', () => {
 			result.push( tableInfo );
 		}
 
-		const formattedResult = result.map( ( { row, column, cell, cellIndex } ) => ( {
+		const formattedResult = result.map( ( { row, column, isSpanned, cell, cellIndex } ) => ( {
 			row,
 			column,
+			isSpanned,
 			data: cell && cell.getChild( 0 ).getChild( 0 ).data,
 			index: cellIndex
 		} ) );
@@ -52,10 +53,10 @@ describe( 'TableWalker', () => {
 			[ '00', '01' ],
 			[ '10', '11' ]
 		], [
-			{ row: 0, column: 0, index: 0, data: '00' },
-			{ row: 0, column: 1, index: 1, data: '01' },
-			{ row: 1, column: 0, index: 0, data: '10' },
-			{ row: 1, column: 1, index: 1, data: '11' }
+			{ row: 0, column: 0, index: 0, data: '00', isSpanned: false },
+			{ row: 0, column: 1, index: 1, data: '01', isSpanned: false },
+			{ row: 1, column: 0, index: 0, data: '10', isSpanned: false },
+			{ row: 1, column: 1, index: 1, data: '11', isSpanned: false }
 		] );
 	} );
 
@@ -63,8 +64,8 @@ describe( 'TableWalker', () => {
 		testWalker( [
 			[ { colspan: 2, contents: '00' }, '13' ]
 		], [
-			{ row: 0, column: 0, index: 0, data: '00' },
-			{ row: 0, column: 2, index: 1, data: '13' }
+			{ row: 0, column: 0, index: 0, data: '00', isSpanned: false },
+			{ row: 0, column: 2, index: 1, data: '13', isSpanned: false }
 		] );
 	} );
 
@@ -75,13 +76,13 @@ describe( 'TableWalker', () => {
 			[ '22' ],
 			[ '30', '31', '32' ]
 		], [
-			{ row: 0, column: 0, index: 0, data: '00' },
-			{ row: 0, column: 2, index: 1, data: '02' },
-			{ row: 1, column: 2, index: 0, data: '12' },
-			{ row: 2, column: 2, index: 0, data: '22' },
-			{ row: 3, column: 0, index: 0, data: '30' },
-			{ row: 3, column: 1, index: 1, data: '31' },
-			{ row: 3, column: 2, index: 2, data: '32' }
+			{ row: 0, column: 0, index: 0, data: '00', isSpanned: false },
+			{ row: 0, column: 2, index: 1, data: '02', isSpanned: false },
+			{ row: 1, column: 2, index: 0, data: '12', isSpanned: false },
+			{ row: 2, column: 2, index: 0, data: '22', isSpanned: false },
+			{ row: 3, column: 0, index: 0, data: '30', isSpanned: false },
+			{ row: 3, column: 1, index: 1, data: '31', isSpanned: false },
+			{ row: 3, column: 2, index: 2, data: '32', isSpanned: false }
 		] );
 	} );
 
@@ -92,15 +93,15 @@ describe( 'TableWalker', () => {
 			[ '33' ],
 			[ '41', '42', '43' ]
 		], [
-			{ row: 0, column: 0, index: 0, data: '11' },
-			{ row: 0, column: 1, index: 1, data: '12' },
-			{ row: 0, column: 2, index: 2, data: '13' },
-			{ row: 1, column: 1, index: 0, data: '22' },
-			{ row: 1, column: 2, index: 1, data: '23' },
-			{ row: 2, column: 2, index: 0, data: '33' },
-			{ row: 3, column: 0, index: 0, data: '41' },
-			{ row: 3, column: 1, index: 1, data: '42' },
-			{ row: 3, column: 2, index: 2, data: '43' }
+			{ row: 0, column: 0, index: 0, data: '11', isSpanned: false },
+			{ row: 0, column: 1, index: 1, data: '12', isSpanned: false },
+			{ row: 0, column: 2, index: 2, data: '13', isSpanned: false },
+			{ row: 1, column: 1, index: 0, data: '22', isSpanned: false },
+			{ row: 1, column: 2, index: 1, data: '23', isSpanned: false },
+			{ row: 2, column: 2, index: 0, data: '33', isSpanned: false },
+			{ row: 3, column: 0, index: 0, data: '41', isSpanned: false },
+			{ row: 3, column: 1, index: 1, data: '42', isSpanned: false },
+			{ row: 3, column: 2, index: 2, data: '43', isSpanned: false }
 		] );
 	} );
 
@@ -112,10 +113,10 @@ describe( 'TableWalker', () => {
 				[ '33' ],
 				[ '41', '42', '43' ]
 			], [
-				{ row: 2, column: 2, index: 0, data: '33' },
-				{ row: 3, column: 0, index: 0, data: '41' },
-				{ row: 3, column: 1, index: 1, data: '42' },
-				{ row: 3, column: 2, index: 2, data: '43' }
+				{ row: 2, column: 2, index: 0, data: '33', isSpanned: false },
+				{ row: 3, column: 0, index: 0, data: '41', isSpanned: false },
+				{ row: 3, column: 1, index: 1, data: '42', isSpanned: false },
+				{ row: 3, column: 2, index: 2, data: '43', isSpanned: false }
 			], { startRow: 2 } );
 		} );
 	} );
@@ -128,22 +129,22 @@ describe( 'TableWalker', () => {
 				[ '33' ],
 				[ '41', '42', '43' ]
 			], [
-				{ row: 0, column: 0, index: 0, data: '11' },
-				{ row: 0, column: 2, index: 1, data: '13' },
-				{ row: 1, column: 2, index: 0, data: '23' },
-				{ row: 2, column: 2, index: 0, data: '33' }
+				{ row: 0, column: 0, index: 0, data: '11', isSpanned: false },
+				{ row: 0, column: 2, index: 1, data: '13', isSpanned: false },
+				{ row: 1, column: 2, index: 0, data: '23', isSpanned: false },
+				{ row: 2, column: 2, index: 0, data: '33', isSpanned: false }
 			], { endRow: 2 } );
 		} );
 
-		it( 'should iterate over given row 0 only', () => {
+		it( 'should iterate over given row only', () => {
 			testWalker( [
 				[ { colspan: 2, rowspan: 3, contents: '11' }, '13' ],
 				[ '23' ],
 				[ '33' ],
 				[ '41', '42', '43' ]
 			], [
-				{ row: 0, column: 0, index: 0, data: '11' },
-				{ row: 0, column: 2, index: 1, data: '13' }
+				{ row: 0, column: 0, index: 0, data: '11', isSpanned: false },
+				{ row: 0, column: 2, index: 1, data: '13', isSpanned: false }
 			], { endRow: 0 } );
 		} );
 	} );
@@ -154,10 +155,10 @@ describe( 'TableWalker', () => {
 				[ '00', { rowspan: 2, contents: '01' } ],
 				[ '10' ]
 			], [
-				{ row: 0, column: 0, index: 0, data: '00' },
-				{ row: 0, column: 1, index: 1, data: '01' },
-				{ row: 1, column: 0, index: 0, data: '10' },
-				{ row: 1, column: 1, index: 1, data: '01' }
+				{ row: 0, column: 0, index: 0, data: '00', isSpanned: false },
+				{ row: 0, column: 1, index: 1, data: '01', isSpanned: false },
+				{ row: 1, column: 0, index: 0, data: '10', isSpanned: false },
+				{ row: 1, column: 1, index: 1, data: '01', isSpanned: true }
 			], { includeSpanned: true } );
 		} );
 
@@ -168,18 +169,18 @@ describe( 'TableWalker', () => {
 				[ '22' ],
 				[ '30', { colspan: 2, contents: '31' } ]
 			], [
-				{ row: 0, column: 0, index: 0, data: '00' },
-				{ row: 0, column: 1, index: 0, data: '00' },
-				{ row: 0, column: 2, index: 1, data: '02' },
-				{ row: 1, column: 0, index: 0, data: '00' },
-				{ row: 1, column: 1, index: 0, data: '00' },
-				{ row: 1, column: 2, index: 0, data: '12' },
-				{ row: 2, column: 0, index: 0, data: '00' },
-				{ row: 2, column: 1, index: 0, data: '00' },
-				{ row: 2, column: 2, index: 0, data: '22' },
-				{ row: 3, column: 0, index: 0, data: '30' },
-				{ row: 3, column: 1, index: 1, data: '31' },
-				{ row: 3, column: 2, index: 1, data: '31' }
+				{ row: 0, column: 0, index: 0, data: '00', isSpanned: false },
+				{ row: 0, column: 1, index: 0, data: '00', isSpanned: true },
+				{ row: 0, column: 2, index: 1, data: '02', isSpanned: false },
+				{ row: 1, column: 0, index: 0, data: '00', isSpanned: true },
+				{ row: 1, column: 1, index: 0, data: '00', isSpanned: true },
+				{ row: 1, column: 2, index: 0, data: '12', isSpanned: false },
+				{ row: 2, column: 0, index: 0, data: '00', isSpanned: true },
+				{ row: 2, column: 1, index: 0, data: '00', isSpanned: true },
+				{ row: 2, column: 2, index: 0, data: '22', isSpanned: false },
+				{ row: 3, column: 0, index: 0, data: '30', isSpanned: false },
+				{ row: 3, column: 1, index: 1, data: '31', isSpanned: false },
+				{ row: 3, column: 2, index: 1, data: '31', isSpanned: true }
 			], { includeSpanned: true } );
 		} );
 
@@ -188,10 +189,10 @@ describe( 'TableWalker', () => {
 				[ '00', { rowspan: 2, contents: '01' } ],
 				[ '10' ]
 			], [
-				{ row: 0, column: 0, index: 0, data: '00' },
-				{ row: 0, column: 1, index: 1, data: '01' },
-				{ row: 1, column: 0, index: 0, data: '10' },
-				{ row: 1, column: 1, index: 1, data: '01' }
+				{ row: 0, column: 0, index: 0, data: '00', isSpanned: false },
+				{ row: 0, column: 1, index: 1, data: '01', isSpanned: false },
+				{ row: 1, column: 0, index: 0, data: '10', isSpanned: false },
+				{ row: 1, column: 1, index: 1, data: '01', isSpanned: true }
 			], { includeSpanned: true } );
 		} );
 
@@ -202,12 +203,12 @@ describe( 'TableWalker', () => {
 				[ '22' ],
 				[ '30', '31', '32' ]
 			], [
-				{ row: 1, column: 0, index: 0, data: '00' },
-				{ row: 1, column: 1, index: 0, data: '00' },
-				{ row: 1, column: 2, index: 0, data: '12' },
-				{ row: 2, column: 0, index: 0, data: '00' },
-				{ row: 2, column: 1, index: 0, data: '00' },
-				{ row: 2, column: 2, index: 0, data: '22' }
+				{ row: 1, column: 0, index: 0, data: '00', isSpanned: true },
+				{ row: 1, column: 1, index: 0, data: '00', isSpanned: true },
+				{ row: 1, column: 2, index: 0, data: '12', isSpanned: false },
+				{ row: 2, column: 0, index: 0, data: '00', isSpanned: true },
+				{ row: 2, column: 1, index: 0, data: '00', isSpanned: true },
+				{ row: 2, column: 2, index: 0, data: '22', isSpanned: false }
 			], { includeSpanned: true, startRow: 1, endRow: 2 } );
 		} );
 
@@ -217,10 +218,10 @@ describe( 'TableWalker', () => {
 				[ '10' ],
 				[ '20', '21' ]
 			], [
-				{ row: 0, column: 0, index: 0, data: '00' },
-				{ row: 0, column: 1, index: 1, data: '01' },
-				{ row: 1, column: 0, index: 0, data: '10' },
-				{ row: 1, column: 1, index: 1, data: '01' }
+				{ row: 0, column: 0, index: 0, data: '00', isSpanned: false },
+				{ row: 0, column: 1, index: 1, data: '01', isSpanned: false },
+				{ row: 1, column: 0, index: 0, data: '10', isSpanned: false },
+				{ row: 1, column: 1, index: 1, data: '01', isSpanned: true }
 			], { startRow: 0, endRow: 1, includeSpanned: true } );
 		} );
 	} );
@@ -233,7 +234,7 @@ describe( 'TableWalker', () => {
 				[ '22' ],
 				[ '30', '31', '32' ]
 			], [
-				{ row: 3, column: 1, index: 1, data: '31' }
+				{ row: 3, column: 1, index: 1, data: '31', isSpanned: false }
 			], { column: 1 } );
 		} );
 
@@ -244,10 +245,10 @@ describe( 'TableWalker', () => {
 				[ '22' ],
 				[ '30', '31', '32' ]
 			], [
-				{ row: 0, column: 1, index: 0, data: '00' },
-				{ row: 1, column: 1, index: 0, data: '00' },
-				{ row: 2, column: 1, index: 0, data: '00' },
-				{ row: 3, column: 1, index: 1, data: '31' }
+				{ row: 0, column: 1, index: 0, data: '00', isSpanned: true },
+				{ row: 1, column: 1, index: 0, data: '00', isSpanned: true },
+				{ row: 2, column: 1, index: 0, data: '00', isSpanned: true },
+				{ row: 3, column: 1, index: 1, data: '31', isSpanned: false }
 			], { column: 1, includeSpanned: true } );
 		} );
 	} );