Module

table/utils/structure

@ckeditor/ckeditor5-table/src/utils/structure

module

Filtering

Functions

  • adjustLastColumnIndex( table, dimensions = { dimensions.firstRow, dimensions.firstColumn, dimensions.lastRow, dimensions.lastColumn } ) → Number

    Returns adjusted last column index if selection covers part of a column with empty slots (spanned by other cells). The dimensions.lastColumn is equal to last column index but selection might be bigger.

    This happens only on rectangular selection so we analyze a case like this:

      0   1   2   3
    +---+---+---+---+
    | a             |
    +---+---+---+---+
    | b | c | d     |
    +---+---+---+---+
    | e     | f     |
    +---+---+---+---+
    | g | h         |
    +---+---+---+---+
              ^
             last column, each cell has colspan = 2, so we need to return 3, not 2

    Parameters

    table : Element
    dimensions : Object
    Properties
    dimensions.firstRow : Number
    dimensions.firstColumn : Number
    dimensions.lastRow : Number
    dimensions.lastColumn : Number

    Returns

    Number

    Adjusted last column index.

  • adjustLastRowIndex( table, dimensions = { dimensions.firstRow, dimensions.firstColumn, dimensions.lastRow, dimensions.lastColumn } ) → Number

    Returns adjusted last row index if selection covers part of a row with empty slots (spanned by other cells). The dimensions.lastRow is equal to last row index but selection might be bigger.

    This happens only on rectangular selection so we analyze a case like this:

      +---+---+---+---+
    0 | a | b | c | d |
      +   +   +---+---+
    1 |   | e | f | g |
      +   +---+   +---+
    2 |   | h |   | i | <- last row, each cell has rowspan = 2,
      +   +   +   +   +    so we need to return 3, not 2
    3 |   |   |   |   |
      +---+---+---+---+

    Parameters

    table : Element
    dimensions : Object
    Properties
    dimensions.firstRow : Number
    dimensions.firstColumn : Number
    dimensions.lastRow : Number
    dimensions.lastColumn : Number

    Returns

    Number

    Adjusted last row index.

  • cropTableToDimensions( sourceTable, cropDimensions = { cropDimensions.startRow, cropDimensions.startColumn, cropDimensions.endRow, cropDimensions.endColumn }, writer ) → Element

    Returns a cropped table according to given dimensions. To return a cropped table that starts at first row and first column and end in third row and column:

    const croppedTable = cropTableToDimensions( table, {
    	startRow: 1,
    	endRow: 3,
    	startColumn: 1,
    	endColumn: 3
    }, writer );
    

    Calling the code above for the table below:

         0   1   2   3   4                      0   1   2
       ┌───┬───┬───┬───┬───┐
    0  │ a │ b │ c │ d │ e │
       ├───┴───┤   ├───┴───┤                  ┌───┬───┬───┐
    1  │ f     │   │ g     │                  │   │   │ g │  0
       ├───┬───┴───┼───┬───┤   will return:   ├───┴───┼───┤
    2  │ h │ i     │ j │ k │                  │ i     │ j │  1
       ├───┤       ├───┤   │                  │       ├───┤
    3  │ l │       │ m │   │                  │       │ m │  2
       ├───┼───┬───┤   ├───┤                  └───────┴───┘
    4  │ n │ o │ p │   │ q │
       └───┴───┴───┴───┴───┘

    Parameters

    sourceTable : Element
    cropDimensions : Object
    Properties
    cropDimensions.startRow : Number
    cropDimensions.startColumn : Number
    cropDimensions.endRow : Number
    cropDimensions.endColumn : Number
    writer : Writer

    Returns

    Element
  • getHorizontallyOverlappingCells( table, overlapColumn ) → Array.<TableSlot>

    Returns slot info of cells that starts before and overlaps a given column.

    In a table below, passing overlapColumn = 3

      0   1   2   3   4
    ┌───────┬───────┬───┐
    │ a     │ b     │ c │
    │───┬───┴───────┼───┤
    │ d │ e         │ f │
    ├───┼───┬───────┴───┤
    │ g │ h │ i         │
    ├───┼───┼───┬───────┤
    │ j │ k │ l │ m     │
    ├───┼───┴───┼───┬───┤
    │ n │ o     │ p │ q │
    └───┴───────┴───┴───┘
                  ^
                  Overlap column to check
    

    will return slot info for cells: "b", "e", "i".

    Parameters

    table : Element

    The table to check.

    overlapColumn : Number

    The index of the column to check.

    Returns

    Array.<TableSlot>
  • getVerticallyOverlappingCells( table, overlapRow, [ startRow ] ) → Array.<TableSlot>

    Returns slot info of cells that starts above and overlaps a given row.

    In a table below, passing overlapRow = 3

       ┌───┬───┬───┬───┬───┐
    0  │ a │ b │ c │ d │ e │
       │   ├───┼───┼───┼───┤
    1  │   │ f │ g │ h │ i │
       ├───┤   ├───┼───┤   │
    2  │ j │   │ k │ l │   │
       │   │   │   ├───┼───┤
    3  │   │   │   │ m │ n │  <- overlap row to check
       ├───┼───┤   │   ├───│
    4  │ o │ p │   │   │ q │
       └───┴───┴───┴───┴───┘
    

    will return slot info for cells: "j", "f", "k".

    Parameters

    table : Element

    The table to check.

    overlapRow : Number

    The index of the row to check.

    [ startRow ] : Number

    A row to start analysis. Use it when it is known that the cells above that row will not overlap.

    Defaults to 0

    Returns

    Array.<TableSlot>
  • removeEmptyColumns( table, tableUtils ) → Boolean

    protected

    Removes columns that have no cells anchored.

    In table below:

    +----+----+----+----+----+----+----+
    | 00 | 01      | 03 | 04      | 06 |
    +----+----+----+----+         +----+
    | 10 | 11      | 13 |         | 16 |
    +----+----+----+----+----+----+----+
    | 20 | 21      | 23 | 24      | 26 |
    +----+----+----+----+----+----+----+
                 ^--- empty ---^
    

    Will remove columns 2 and 5.

    Note: This is a low-level helper method for clearing invalid model state when doing table modifications. To remove a column from a table use TableUtils.removeColumns().

    Parameters

    table : Element
    tableUtils : TableUtils

    Returns

    Boolean

    True if removed some columns.

  • removeEmptyRows( table, tableUtils ) → Boolean

    protected

    Removes rows that have no cells anchored.

    In table below:

    +----+----+----+
    | 00 | 01 | 02 |
    +----+----+----+
    | 10 | 11 | 12 |
    +    +    +    +
    |    |    |    | <-- empty
    +----+----+----+
    | 30 | 31 | 32 |
    +----+----+----+
    | 40      | 42 |
    +         +    +
    |         |    | <-- empty
    +----+----+----+
    | 60 | 61 | 62 |
    +----+----+----+
    

    Will remove rows 2 and 5.

    Note: This is a low-level helper method for clearing invalid model state when doing table modifications. To remove a row from a table use TableUtils.removeRows().

    Parameters

    table : Element
    tableUtils : TableUtils

    Returns

    Boolean

    True if removed some rows.

  • removeEmptyRowsColumns( table, tableUtils )

    protected

    Removes rows and columns that have no cells anchored.

    In table below:

    +----+----+----+----+
    | 00      | 02      |
    +----+----+         +
    | 10      |         |
    +----+----+----+----+
    | 20      | 22 | 23 |
    +         +    +    +
    |         |    |    | <-- empty row
    +----+----+----+----+
            ^--- empty column
    

    Will remove row 3 and column 1.

    Note: This is a low-level helper method for clearing invalid model state when doing table modifications. To remove a rows from a table use TableUtils.removeRows() and TableUtils.removeColumns() to remove a column.

    Parameters

    table : Element
    tableUtils : TableUtils
  • splitHorizontally( tableCell, splitRow, writer ) → Element

    Splits the table cell horizontally.

    Parameters

    tableCell : Element
    splitRow : Number
    writer : Writer

    Returns

    Element

    Created table cell.

  • splitVertically( tableCell, columnIndex, splitColumn, writer ) → Element

    Splits the table cell vertically.

    Parameters

    tableCell : Element
    columnIndex : Number

    The table cell column index.

    splitColumn : Number

    The index of column to split cell on.

    writer : Writer

    Returns

    Element

    Created table cell.

  • trimTableCellIfNeeded( tableCell, cellRow, cellColumn, limitRow, limitColumn, writer )

    Adjusts table cell dimensions to not exceed limit row and column.

    If table cell width (or height) covers a column (or row) that is after a limit column (or row) this method will trim "colspan" (or "rowspan") attribute so the table cell will fit in a defined limits.

    Parameters

    tableCell : Element
    cellRow : Number
    cellColumn : Number
    limitRow : Number
    limitColumn : Number
    writer : Writer