Sign up (with export icon)

TableWalker

Api-class icon class

The table iterator class. It allows to iterate over table cells. For each cell the iterator yields TableSlot with proper table cell attributes.

Properties

Methods

  • Chevron-right icon

    constructor( table, options )

    Creates an instance of the table walker.

    The table walker iterates internally by traversing the table from row index = 0 and column index = 0. It walks row by row and column by column in order to output values defined in the constructor. By default it will output only the locations that are occupied by a cell. To include also spanned rows and columns, pass the includeAllSlots option to the constructor.

    The most important values of the iterator are column and row indexes of a cell.

    See TableSlot what values are returned by the table walker.

    To iterate over a given row:

    const tableWalker = new TableWalker( table, { startRow: 1, endRow: 2 } );
    
    for ( const tableSlot of tableWalker ) {
      console.log( 'A cell at row', tableSlot.row, 'and column', tableSlot.column );
    }
    
    Copy code

    For instance the code above for the following table:

    +----+----+----+----+----+----+ | 00 | 02 | 03 | 04 | 05 | | +----+----+----+----+ | | 12 | 14 | 15 | | +----+----+----+ + | | 22 | | |----+----+----+----+----+ + | 30 | 31 | 32 | 33 | 34 | | +----+----+----+----+----+----+

    will log in the console:

    'A cell at row 1 and column 2' 'A cell at row 1 and column 4' 'A cell at row 1 and column 5' 'A cell at row 2 and column 2'

    To also iterate over spanned cells:

    const tableWalker = new TableWalker( table, { row: 1, includeAllSlots: true } );
    
    for ( const tableSlot of tableWalker ) {
      console.log( 'Slot at', tableSlot.row, 'x', tableSlot.column, ':', tableSlot.isAnchor ? 'is anchored' : 'is spanned' );
    }
    
    Copy code

    will log in the console for the table from the previous example:

    'Cell at 1 x 0 : is spanned' 'Cell at 1 x 1 : is spanned' 'Cell at 1 x 2 : is anchored' 'Cell at 1 x 3 : is spanned' 'Cell at 1 x 4 : is anchored' 'Cell at 1 x 5 : is anchored'

    Note: Option row is a shortcut that sets both startRow and endRow to the same row. (Use either row or startRow and endRow but never together). Similarly the column option sets both startColumn and endColumn to the same column (Use either column or startColumn and endColumn but never together).

    Parameters

    table : ModelElement

    A table over which the walker iterates.

    options : TableWalkerOptions

    An object with configuration.

    Defaults to {}

  • Chevron-right icon

    Symbol.iterator() → IterableIterator<TableSlot>

    Iterable interface.

    Returns

    IterableIterator<TableSlot>
  • Chevron-right icon

    next() → IteratorResult<TableSlot, undefined>

    Gets the next table walker's value.

    Returns

    IteratorResult<TableSlot, undefined>

    The next table walker's value.

  • Chevron-right icon

    skipRow( row ) → void

    Marks a row to skip in the next iteration. It will also skip cells from the current row if there are any cells from the current row to output.

    Parameters

    row : number

    The row index to skip.

    Returns

    void
  • Chevron-right icon

    _advanceToNextRow() → IteratorResult<TableSlot, undefined>
    Lock icon private

    Advances internal cursor to the next row.

    Returns

    IteratorResult<TableSlot, undefined>
  • Chevron-right icon

    _canJumpToStartRow() → boolean
    Lock icon private

    Checks if part of the table can be skipped.

    Returns

    boolean
  • Chevron-right icon

    _formatOutValue( cell, anchorRow, anchorColumn ) → IteratorYieldResult<TableSlot>
    Lock icon private

    A common method for formatting the iterator's output value.

    Parameters

    cell : ModelElement

    The table cell to output.

    anchorRow : number

    The row index of a cell anchor slot.

    Defaults to ...

    anchorColumn : number

    The column index of a cell anchor slot.

    Defaults to ...

    Returns

    IteratorYieldResult<TableSlot>
  • Chevron-right icon

    _getRowLength( rowIndex ) → number
    Lock icon private

    Returns a number of columns in a row taking colspan into consideration.

    Parameters

    rowIndex : number

    Returns

    number
  • Chevron-right icon

    _getSpanned() → null | CellData
    Lock icon private

    Returns the cell element that is spanned over the current cell location.

    Returns

    null | CellData
  • Chevron-right icon

    _isOverEndColumn() → boolean
    Lock icon private

    Checks if the current cell is over _endColumn

    Returns

    boolean
  • Chevron-right icon

    _isOverEndRow() → boolean
    Lock icon private

    Checks if the current row is over _endRow.

    Returns

    boolean
  • Chevron-right icon

    _jumpToNonSpannedRowClosestToStartRow() → void
    Lock icon private

    Sets the current row to this._startRow or the first row before it that has the number of cells equal to the number of columns in the table.

    Example: +----+----+----+ | 00 | 01 | 02 | |----+----+----+ | 10 | 12 | | +----+ | | 22 | | +----+ | | 32 | <--- Start row +----+----+----+ | 40 | 41 | 42 | +----+----+----+

    If the 4th row is a this._startRow, this method will: 1.) Count the number of columns this table has based on the first row (3 columns in this case). 2.) Check if the 4th row contains 3 cells. It doesn't, so go to the row before it. 3.) Check if the 3rd row contains 3 cells. It doesn't, so go to the row before it. 4.) Check if the 2nd row contains 3 cells. It does, so set the current row to that row.

    Setting the current row this way is necessary to let the next() method loop over the cells spanning multiple rows or columns and update the this._spannedCells property.

    Returns

    void
  • Chevron-right icon

    _markSpannedCell( row, column, data ) → void
    Lock icon private

    Marks the cell location as spanned by another cell.

    Parameters

    row : number

    The row index of the cell location.

    column : number

    The column index of the cell location.

    data : CellData

    A spanned cell details (cell element, anchor row and column).

    Returns

    void
  • Chevron-right icon

    _recordSpans( cell, rowspan, colspan ) → void
    Lock icon private

    Updates spanned cells map relative to the current cell location and its span dimensions.

    Parameters

    cell : ModelElement

    A cell that is spanned.

    rowspan : number

    Cell height.

    colspan : number

    Cell width.

    Returns

    void
  • Chevron-right icon

    _shouldSkipSlot() → boolean
    Lock icon private

    Checks if the current slot should be skipped.

    Returns

    boolean