table/utils/structure
Functions
adjustLastColumnIndex( table, dimensions = { dimensions.firstColumn, dimensions.firstRow, dimensions.lastColumn, dimensions.lastRow } ) → numberinternalmodule:table/utils/structure~adjustLastColumnIndexReturns adjusted last column index if selection covers part of a column with empty slots (spanned by other cells). The
dimensions.lastColumnis 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 2Copy codeParameters
table : ModelElementdimensions : object- Properties
dimensions.firstColumn : numberdimensions.firstRow : numberdimensions.lastColumn : numberdimensions.lastRow : number
Returns
numberAdjusted last column index.
adjustLastRowIndex( table, dimensions = { dimensions.firstColumn, dimensions.firstRow, dimensions.lastColumn, dimensions.lastRow } ) → numberinternalmodule:table/utils/structure~adjustLastRowIndexReturns adjusted last row index if selection covers part of a row with empty slots (spanned by other cells). The
dimensions.lastRowis 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 | | | | | +---+---+---+---+Copy codeParameters
table : ModelElementdimensions : object- Properties
dimensions.firstColumn : numberdimensions.firstRow : numberdimensions.lastColumn : numberdimensions.lastRow : number
Returns
numberAdjusted last row index.
cropTableToDimensions( sourceTable, cropDimensions = { cropDimensions.endColumn, cropDimensions.endRow, cropDimensions.startColumn, cropDimensions.startRow }, writer ) → ModelElementinternalmodule:table/utils/structure~cropTableToDimensionsReturns 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 );Copy codeCalling the code above for the table below:
0 1 2 3 4 0 1 2 ┌───┬───┬───┬───┬───┐Copy code0 │ 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 : ModelElementcropDimensions : object- Properties
cropDimensions.endColumn : numbercropDimensions.endRow : numbercropDimensions.startColumn : numbercropDimensions.startRow : number
writer : ModelWriter
Returns
getHorizontallyOverlappingCells( table, overlapColumn ) → Array<TableSlot>internalmodule:table/utils/structure~getHorizontallyOverlappingCellsReturns slot info of cells that starts before and overlaps a given column.
In a table below, passing
overlapColumn = 30 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 : ModelElementThe table to check.
overlapColumn : numberThe index of the column to check.
Returns
Array<TableSlot>
getVerticallyOverlappingCells( table, overlapRow, startRow ) → Array<TableSlot>internalmodule:table/utils/structure~getVerticallyOverlappingCellsReturns slot info of cells that starts above and overlaps a given row.
In a table below, passing
overlapRow = 3┌───┬───┬───┬───┬───┐Copy code0 │ 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 : ModelElementThe table to check.
overlapRow : numberThe index of the row to check.
startRow : numberrow to start analysis. Use it when it is known that the cells above that row will not overlap. Default value is 0.
Defaults to
0
Returns
Array<TableSlot>
removeEmptyColumns( table, tableUtils ) → booleaninternalmodule:table/utils/structure~removeEmptyColumnsRemoves columns that have no cells anchored.
In table below:
+----+----+----+----+----+----+----+ | 00 | 01 | 03 | 04 | 06 | +----+----+----+----+ +----+ | 10 | 11 | 13 | | 16 | +----+----+----+----+----+----+----+ | 20 | 21 | 23 | 24 | 26 | +----+----+----+----+----+----+----+ ^--- empty ---^Copy codeWill 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 : ModelElementtableUtils : TableUtils
Returns
booleanTrue if removed some columns.
removeEmptyRows( table, tableUtils ) → booleaninternalmodule:table/utils/structure~removeEmptyRowsRemoves 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 | +----+----+----+Copy codeWill 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 : ModelElementtableUtils : TableUtils
Returns
booleanTrue if removed some rows.
removeEmptyRowsColumns( table, tableUtils ) → voidinternalmodule:table/utils/structure~removeEmptyRowsColumnsRemoves rows and columns that have no cells anchored.
In table below:
+----+----+----+----+ | 00 | 02 | +----+----+ + | 10 | | +----+----+----+----+ | 20 | 22 | 23 | + + + + | | | | <-- empty row +----+----+----+----+ ^--- empty columnCopy codeWill 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()andTableUtils.removeColumns()to remove a column.Parameters
table : ModelElementtableUtils : TableUtils
Returns
void
splitHorizontally( tableCell, splitRow, writer ) → null | ModelElementinternalmodule:table/utils/structure~splitHorizontallySplits the table cell horizontally.
Parameters
tableCell : ModelElementsplitRow : numberwriter : ModelWriter
Returns
null | ModelElementCreated table cell, if any were created.
splitVertically( tableCell, columnIndex, splitColumn, writer ) → ModelElementinternalmodule:table/utils/structure~splitVerticallySplits the table cell vertically.
Parameters
tableCell : ModelElementcolumnIndex : numberThe table cell column index.
splitColumn : numberThe index of column to split cell on.
writer : ModelWriter
Returns
ModelElementCreated table cell.
trimTableCellIfNeeded( tableCell, cellRow, cellColumn, limitRow, limitColumn, writer ) → voidinternalmodule:table/utils/structure~trimTableCellIfNeededAdjusts 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 : ModelElementcellRow : numbercellColumn : numberlimitRow : numberlimitColumn : numberwriter : ModelWriter
Returns
void