@operato/scene-table 9.0.0-beta.9 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/table.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, ComponentNature, Container, Control, Layout, State, Style } from '@hatiolab/things-scene'\n\nimport {\n above,\n after,\n array,\n before,\n below,\n buildCopiedCell,\n buildNewCell,\n CLEAR_STYLE,\n columnControlHandler,\n isBottomMost,\n isLeftMost,\n isRightMost,\n isTopMost,\n rowControlHandler,\n setCellBorder,\n WHERE,\n adjustCellWidth,\n adjustCellHeight\n} from './helper-functions.js'\nimport TableCell from './table-cell.js'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'rows',\n name: 'rows',\n property: 'rows'\n },\n {\n type: 'number',\n label: 'columns',\n name: 'columns',\n property: 'columns'\n },\n {\n type: 'select',\n label: 'data-spread-to',\n name: 'spreadTo',\n property: {\n options: ['', 'text']\n }\n }\n ],\n 'value-property': 'data',\n help: 'scene/component/table'\n}\n\nexport default class Table extends Container {\n reflowing: boolean = false\n\n created() {\n var tobeSize = this.rows * this.columns\n var gap = this.size() - tobeSize\n\n if (this.data) {\n this.setCellsData()\n }\n\n if (gap == 0) {\n return\n } else if (gap > 0) {\n let removals = this.components.slice(gap)\n this.remove(removals)\n } else {\n let newbies = []\n\n for (let i = 0; i < -gap; i++) newbies.push(buildNewCell('table-cell', this.app))\n\n this.add(newbies)\n }\n\n var widths = this.getState('widths')\n var heights = this.getState('heights')\n\n if (!widths || widths.length < this.columns) this.set('widths', this.widths)\n if (!heights || heights.length < this.rows) this.set('heights', this.heights)\n }\n\n containable(component: Component) {\n return component.getState('type') == 'table-cell'\n }\n\n get focusible() {\n /* 이 컨테이너에는 컴포넌트를 임의로 추가 및 삭제할 수 없도록 함 */\n return false\n }\n\n get widths() {\n var widths = this.getState('widths')\n\n if (!widths) return array(1, this.columns)\n\n if (widths.length < this.columns) return widths.concat(array(1, this.columns - widths.length))\n else if (widths.length > this.columns) return widths.slice(0, this.columns)\n\n return widths\n }\n\n get heights() {\n var heights = this.getState('heights')\n\n if (!heights) return array(1, this.rows)\n\n if (heights.length < this.rows) return heights.concat(array(1, this.rows - heights.length))\n else if (heights.length > this.rows) return heights.slice(0, this.rows)\n\n return heights\n }\n\n buildCells(newrows: number, newcolumns: number, oldrows: number, oldcolumns: number) {\n if (newrows < oldrows) {\n let removals: TableCell[] = ([] = this.components.slice(oldcolumns * newrows) as TableCell[])\n\n // 지우려는 셀중에 병합된 셀을 찾는다.\n let mergedCells: TableCell[] = []\n removals.forEach(cell => {\n if (cell.merged === true || cell.rowspan > 1 || cell.colspan > 1) mergedCells.push(cell)\n })\n\n // 병합된 셀 중에서 슈퍼셀을 찾는다.\n if (mergedCells.length > 0) {\n // 부모 셀을 저장\n let superCells: TableCell[] = []\n // 부모 셀의 인덱스를 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.components.indexOf(cell) % oldcolumns\n row = Math.floor(this.components.indexOf(cell) / oldcolumns)\n index = row * oldcolumns + col + 1\n while (index) {\n --index\n let component: TableCell = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.components.indexOf(component) % oldcolumns\n let spColEnd = (this.components.indexOf(component) % oldcolumns) + component.colspan\n let spRowStart = Math.floor(this.components.indexOf(component) / oldcolumns)\n let spRowEnd = Math.floor(this.components.indexOf(component) / oldcolumns) + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n // 슈퍼셀에서 colspan 을 감소시킨다\n superCells.forEach(cell => {\n // newcolumns < oldcolumns 케이스와 이 부분만 다름\n cell.rowspan -= oldrows - newrows\n })\n }\n\n this.remove(removals)\n }\n\n var minrows = Math.min(newrows, oldrows)\n\n if (newcolumns > oldcolumns) {\n for (let r = 0; r < minrows; r++) {\n for (let c = oldcolumns; c < newcolumns; c++) {\n this.insertComponentAt(buildNewCell('table-cell', this.app), r * newcolumns + c)\n }\n }\n } else if (newcolumns < oldcolumns) {\n let removals: TableCell[] = []\n\n for (let r = 0; r < minrows; r++) {\n for (let c = newcolumns; c < oldcolumns; c++) {\n removals.push(this.components[r * oldcolumns + c] as TableCell)\n }\n }\n // 지우려는 셀중에 병합된 셀을 찾는다.\n let mergedCells: TableCell[] = []\n removals.forEach(cell => {\n if (cell.merged === true || cell.rowspan > 1 || cell.colspan > 1) mergedCells.push(cell)\n })\n\n // 병합된 셀 중에서 슈퍼셀을 찾는다.\n if (mergedCells.length > 0) {\n // 부모 셀을 저장\n let superCells: TableCell[] = []\n // 부모 셀의 인덱스를 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.components.indexOf(cell) % oldcolumns\n row = Math.floor(this.components.indexOf(cell) / oldcolumns)\n index = row * oldcolumns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.components.indexOf(component) % oldcolumns\n let spColEnd = (this.components.indexOf(component) % oldcolumns) + component.colspan\n let spRowStart = Math.floor(this.components.indexOf(component) / oldcolumns)\n let spRowEnd = Math.floor(this.components.indexOf(component) / oldcolumns) + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n // 슈퍼셀에서 colspan 을 감소시킨다\n superCells.forEach(cell => {\n cell.colspan -= oldcolumns - newcolumns\n })\n }\n\n this.remove(removals)\n }\n\n if (newrows > oldrows) {\n let newbies = []\n\n for (let r = oldrows; r < newrows; r++) {\n for (let i = 0; i < newcolumns; i++) {\n newbies.push(buildNewCell('table-cell', this.app))\n }\n }\n this.add(newbies)\n }\n\n this.set({\n widths: this.widths,\n heights: this.heights\n })\n }\n\n get layout() {\n return Layout.get('table')\n }\n\n get rows() {\n return Number(this.getState('rows'))\n }\n\n setCellsStyle(cells: TableCell[], style: Style, where: WHERE, clearBefore = true) {\n var components = this.components\n var total = components.length\n var columns = this.getState('columns')\n\n // 병합된 셀도 포함시킨다.\n var _cells: TableCell[] = []\n cells.forEach(c => {\n _cells.push(c)\n if (c.colspan || c.rowspan) {\n let col = this.getRowColumn(c).column\n let row = this.getRowColumn(c).row\n for (let i = row; i < row + c.rowspan; i++)\n for (let j = col; j < col + c.colspan; j++)\n if (i != row || j != col) _cells.push(this.components[i * this.columns + j] as TableCell)\n }\n })\n var indices = _cells.map(cell => components.indexOf(cell))\n indices.forEach(i => {\n var cell = components[i]\n clearBefore && setCellBorder(cell, CLEAR_STYLE, 'all')\n\n switch (where) {\n case 'all':\n setCellBorder(cell, style, where)\n\n if (isLeftMost(total, columns, indices, i)) setCellBorder(components[before(columns, i)], style, 'right')\n if (isRightMost(total, columns, indices, i)) setCellBorder(components[after(columns, i)], style, 'left')\n if (isTopMost(total, columns, indices, i)) setCellBorder(components[above(columns, i)], style, 'bottom')\n if (isBottomMost(total, columns, indices, i)) setCellBorder(components[below(columns, i)], style, 'top')\n break\n case 'in':\n if (!isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n }\n if (!isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n }\n if (!isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n }\n if (!isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n }\n break\n case 'out':\n if (isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n setCellBorder(components[before(columns, i)], style, 'right')\n }\n if (isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n setCellBorder(components[after(columns, i)], style, 'left')\n }\n if (isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n setCellBorder(components[above(columns, i)], style, 'bottom')\n }\n if (isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n setCellBorder(components[below(columns, i)], style, 'top')\n }\n break\n case 'left':\n if (isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n setCellBorder(components[before(columns, i)], style, 'right')\n }\n break\n case 'right':\n if (isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n setCellBorder(components[after(columns, i)], style, 'left')\n }\n break\n case 'center':\n if (!isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n }\n if (!isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n }\n break\n case 'middle':\n if (!isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n }\n if (!isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n }\n break\n case 'top':\n if (isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n setCellBorder(components[above(columns, i)], style, 'bottom')\n }\n break\n case 'bottom':\n if (isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n setCellBorder(components[below(columns, i)], style, 'top')\n }\n break\n case 'clear':\n setCellBorder(cell, CLEAR_STYLE, 'all')\n\n if (isLeftMost(total, columns, indices, i))\n setCellBorder(components[before(columns, i)], CLEAR_STYLE, 'right')\n if (isRightMost(total, columns, indices, i)) setCellBorder(components[after(columns, i)], CLEAR_STYLE, 'left')\n if (isTopMost(total, columns, indices, i)) setCellBorder(components[above(columns, i)], CLEAR_STYLE, 'bottom')\n if (isBottomMost(total, columns, indices, i)) setCellBorder(components[below(columns, i)], CLEAR_STYLE, 'top')\n }\n })\n }\n\n setCellsData() {\n var data = this.data\n\n if (!data) return\n\n data = this.toObjectArrayValue(data) || []\n\n var cells = this.components as TableCell[]\n\n var { spreadTo } = this.state\n\n cells.forEach(cell => {\n var dataKey = cell.model.dataKey\n var dataIndex = cell.model.dataIndex\n\n if (dataIndex >= 0) {\n const cellData = dataKey ? (data[dataIndex] || {})[dataKey] : data[dataIndex]\n\n ;(cell as any).data = cellData\n if (spreadTo) {\n ;(cell as any)[spreadTo] = cellData\n }\n }\n })\n }\n\n getRowColumn(cell: TableCell): { column: number; row: number } {\n var idx = this.components.indexOf(cell)\n\n return {\n column: idx % this.columns,\n row: Math.floor(idx / this.columns)\n }\n }\n\n getCellsByRow(row: number) {\n return this.components.slice(row * this.columns, (row + 1) * this.columns)\n }\n\n getCellsByColumn(column: number) {\n var cells = []\n for (var i = 0; i < this.rows; i++) cells.push(this.components[this.columns * i + column])\n\n return cells\n }\n\n // 한 개의 행을 매개변수로 받아서 첫 번째 셀부터 우측으로 이동하면서 병합된 셀이 있는지 검사한다.\n findMergedCellByX(row: number) {\n let mergedCells: TableCell[] = []\n let cell: TableCell\n for (let i = 0; i < this.columns; i++) {\n cell = this.components[row * this.columns + i] as TableCell\n if (cell.merged === true || cell.rowspan > 1 || cell.colspan > 1) mergedCells.push(cell)\n }\n return mergedCells\n }\n\n // 한 개의 열을 매개변수로 받아서 첫 번째 셀부터 아래로 이동하면서 병합된 셀이 있는지 검사한다.\n findMergedCellByY(column: number) {\n let mergedCells: TableCell[] = []\n let cell: TableCell\n for (let i = 0; i < this.rows; i++) {\n cell = this.components[i * this.columns + column] as TableCell\n if (cell.merged === true || cell.rowspan > 1 || cell.colspan > 1) mergedCells.push(cell)\n }\n return mergedCells\n }\n\n mergeCells(cells: TableCell[]) {\n // 선택한 셀이 들어있는 행\n let mergeableRows: number[] = []\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == mergeableRows.indexOf(row)) mergeableRows.push(row)\n })\n\n // 선택한 셀의 행이 연속적인 숫자가 아니라면 병합하지 않는다.\n if (mergeableRows.length - 1 !== mergeableRows[mergeableRows.length - 1] - mergeableRows[0]) return false\n\n // 선택한 셀이 들어있는 열\n let mergeableColumns: number[] = []\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == mergeableColumns.indexOf(column)) mergeableColumns.push(column)\n })\n\n // 선택한 셀의 열이 연속적인 숫자가 아니라면 병합하지 않는다.\n if (mergeableColumns.length - 1 !== mergeableColumns[mergeableColumns.length - 1] - mergeableColumns[0])\n return false\n\n // 병합할 행의 수\n let numberOfRows = mergeableRows.length\n\n // 병합할 열의 수\n let numberOfColumns = mergeableColumns.length\n\n // 선택된 셀의 수\n let numberOfCells = cells.length\n\n // 병합될 조건 검사\n // 행과 열의 곱이 셀의 수가 아니거나 셀의 수가 2보다 작은 경우는 병합하지 않는다.\n if (numberOfCells !== numberOfRows * numberOfColumns || numberOfCells < 2) return false\n\n // 선택한 셀들을 index 값이 낮은 것부터 순서대로 재정렬\n cells.sort((a, b) => {\n return (\n this.getRowColumn(a).row * this.columns +\n this.getRowColumn(a).column -\n (this.getRowColumn(b).row * this.columns + this.getRowColumn(b).column)\n )\n })\n\n // 셀을 병합함\n let firstCell = cells[0]\n firstCell.set({\n colspan: numberOfColumns,\n rowspan: numberOfRows\n })\n\n // 첫 번째 셀을 제외한 나머지 셀을 true로 지정\n for (let i = 1; i < numberOfCells; i++) cells[i].merged = true\n\n // 병합 후에는 첫 번째 셀을 선택하도록 함\n this.root.selected = [firstCell]\n }\n\n splitCells(cells: TableCell[]) {\n // 선택한 병합된 셀의 정보를 가져온다.\n let firstCellRowColumn = this.getRowColumn(cells[0])\n let firstCell = cells[0]\n let firstCellIndex = this.components.indexOf(cells[0])\n let length = this.components.length\n let lastCell = this.components[length - 1] as TableCell\n let lastCellRowColumn = this.getRowColumn(lastCell)\n let startIndex = length / (lastCellRowColumn.row + 1)\n\n // 병합된 셀들을 구해서 merged를 false로 설정한다.\n // 자식 셀이 갖고 있는 부모 셀의 위치를 초기화 한다.\n for (let j = 0; j < firstCell.rowspan; j++) {\n let index\n let nextCell: TableCell\n for (let i = firstCellIndex; i < firstCellIndex + firstCell.colspan; i++) {\n index = startIndex * j + i\n nextCell = this.components[index] as TableCell\n nextCell.merged = false\n }\n }\n\n // 첫 번째 셀의 rowspan, colspan = 1로 지정한다.\n firstCell.colspan = 1\n firstCell.rowspan = 1\n }\n\n deleteRows(cells: TableCell[]) {\n // 만약 선택한 셀이 병합된 셀이라면 삭제하지 않는다.\n if (cells[0].merged == true) return false\n // 먼저 cells 위치의 행을 구한다.\n let rows: number[] = []\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) rows.push(row)\n })\n rows.sort((a, b) => {\n return a - b\n })\n rows.reverse()\n var heights = this.heights.slice()\n rows.forEach(row => {\n // rows에서 가로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByX(row)\n // mergedCells.length가 0이면 일반적으로 행을 지운다.\n if (mergedCells.length === 0) {\n this.remove(this.getCellsByRow(row))\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 행을 지워야 한다.\n //\n else {\n // 삭제할 행에서 병합된 셀을 삭제할 때 해당 셀을 임시로 저장\n let temp = []\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n let superCellRow = Math.floor(index / this.columns)\n // 지우려는 행이 슈퍼셀을 포함한 경우이면서 슈퍼셀이 마지막 행의 셀이 아닌 경우\n // 그리고 슈퍼셀의 rowspan이 1보다 큰 경우\n let aCell: TableCell = this.components[index + this.columns] as TableCell\n let bCell: TableCell = this.components[index] as TableCell\n if (row === superCellRow && superCellRow !== this.rows - 1 && bCell.rowspan > 1) {\n aCell.rowspan = bCell.rowspan - 1\n aCell.colspan = bCell.colspan\n aCell.merged = false\n aCell.set('text', bCell.getState('text'))\n } else {\n bCell.rowspan -= 1\n }\n })\n this.remove(this.getCellsByRow(row))\n }\n })\n\n rows.forEach(row => heights.splice(row, 1))\n\n this.model.rows -= rows.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n this.set('heights', heights)\n }\n\n deleteColumns(cells: TableCell[]) {\n // 만약 선택한 셀이 병합된 셀이라면 삭제하지 않는다.\n if (cells[0].merged == true) return false\n // 먼저 cells 위치의 열을 구한다.\n let columns: number[] = []\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n\n columns.forEach(column => {\n var widths = this.widths.slice()\n // columns에서 세로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByY(column)\n // mergedCells.length가 0이면 일반적으로 열을 지운다.\n if (mergedCells.length === 0) {\n this.remove(this.getCellsByColumn(column))\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 열을 지워야 한다.\n else {\n // 삭제할 열에서 병합된 셀을 삭제할 때 해당 셀을 임시로 저장\n let temp = []\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스를 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n let superCellColumn = index % this.columns\n\n let aCell: TableCell = this.components[index + 1] as TableCell\n let bCell: TableCell = this.components[index] as TableCell\n // 지우려는 열이 슈퍼셀을 포함한 경우이면서 슈퍼셀이 마지막 열의 셀이 아닌 경우\n // 그리고 슈퍼셀의 colspan이 1보다 큰 경우\n if (column === superCellColumn && superCellColumn !== this.columns - 1 && bCell.colspan > 1) {\n aCell.rowspan = bCell.rowspan\n aCell.colspan = bCell.colspan - 1\n aCell.merged = false\n aCell.set('text', bCell.getState('text'))\n } else {\n bCell.colspan -= 1\n }\n })\n this.remove(this.getCellsByColumn(column))\n }\n widths.splice(column, 1)\n this.model.columns -= 1 // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n this.set('widths', widths)\n })\n }\n\n insertCellsAbove(cells: TableCell[]) {\n // 먼저 cells 위치의 행을 구한다.\n let rows: number[] = []\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) rows.push(row)\n })\n rows.sort((a, b) => {\n return a - b\n })\n rows.reverse()\n // 행 2개 이상은 추가 안함. 임시로 막아놓음\n if (rows.length >= 2) return false\n let insertionRowPosition = rows[0]\n let newbieRowHeights: number[] = []\n let newbieCells: TableCell[] = []\n rows.forEach(row => {\n // rows에서 가로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByX(row)\n // mergedCells.length가 0이면 일반적으로 행을 위에 추가한다.\n if (mergedCells.length === 0) {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += rows.length\n\n this.clearCache()\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 행을 추가해야 한다.\n else {\n // 선택한 행이 2개 이상 있고 그 중에 병합된 셀이 적어도 한 개라도 있으면\n // 병합된 셀이 포함된 행의 추가는 무시한다. 임시방편으로 막아놈\n if (rows.length > 1) return false\n // 추가할 행에서 병합된 셀을 추가할 때 해당 셀을 임시로 저장\n let temp = []\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n // 추가하려는 셀은 일반 셀인데 그 위치에 다른 병합된 셀이 있는 문제로 임시로 막아 놓음. 수정해야함\n if (superCellIndexes.length >= 2) return false\n let superCellRow = Math.floor(index / this.columns)\n let cell: TableCell = this.components[index] as TableCell\n\n let superCellObj = {\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n text: cell.getState('text'),\n merged: cell.merged\n }\n\n // 추가하려는 행이 슈퍼셀을 포함한 경우\n if (superCellRow === row) {\n for (let i = 0; i < this.columns; i++) newbieCells.push(buildNewCell('table-cell', this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n let addedCell = this.components[index + this.columns] as TableCell\n\n addedCell.rowspan = superCellObj.rowspan\n addedCell.colspan = superCellObj.colspan\n addedCell.set('text', superCellObj.text)\n addedCell.merged = superCellObj.merged\n } else {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n cell.rowspan += 1\n }\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += rows.length\n\n this.clearCache()\n })\n }\n })\n }\n\n insertCellsBelow(cells: TableCell[]) {\n // 먼저 cells 위치의 행을 구한다.\n let rows: number[] = []\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) rows.push(row)\n })\n rows.sort((a, b) => {\n return a - b\n })\n rows.reverse()\n\n // 행 2개 이상은 추가 안함. 임시로 막아놓음\n if (rows.length >= 2) return false\n let insertionRowPosition = rows[rows.length - 1] + 1\n let newbieRowHeights: number[] = []\n let newbieCells: TableCell[] = []\n\n rows.forEach(row => {\n // rows에서 가로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByX(row)\n // mergedCells.length가 0이면 일반적으로 행을 아래에 추가한다.\n if (mergedCells.length === 0) {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += 1\n\n this.clearCache()\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 행을 추가해야 한다.\n else {\n // 추가할 행에서 병합된 셀을 추가할 때 해당 셀을 임시로 저장\n let temp = []\n // 부모 셀을 저장\n let superCells: TableCell[] = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n // 추가하려는 셀은 일반 셀인데 그 위치에 다른 병합된 셀이 있는 문제로 임시로 막아 놓음. 수정해야함\n if (superCellIndexes.length >= 2) return false\n let superCellRow = Math.floor(index / this.columns)\n let cell = this.components[index] as TableCell\n\n let superCellObj = {\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n text: cell.getState('text'),\n merged: cell.merged\n }\n // 추가하려는 행이 병합된 셀중 마지막 행인 경우\n if (superCellRow + superCellObj.rowspan - 1 === row) {\n for (let i = 0; i < this.columns; i++) newbieCells.push(buildNewCell('table-cell', this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n } else if (superCellRow === row) {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n\n cell.rowspan += 1\n\n let newbieCell = this.components[index + this.columns] as TableCell\n // 슈퍼셀이 복사됐으므로 그 해당 셀을 병합된 셀로 설정한다.\n newbieCell.rowspan = 1\n newbieCell.colspan = 1\n newbieCell.merged = true\n newbieCell.set('text', '')\n } else {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n cell.rowspan += 1\n }\n\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += 1\n\n this.clearCache()\n })\n }\n })\n }\n\n insertCellsLeft(cells: TableCell[]) {\n // 먼저 cells 위치의 열을 구한다.\n let columns: number[] = []\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n // 열 2개 이상은 추가 안함. 임시로 막아놓음\n if (columns.length >= 2) return false\n let insertionColumnPosition = columns[0]\n let newbieColumnWidths: number[] = []\n let newbieCells: TableCell[] = []\n columns.forEach(column => {\n // columns에서 세로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByY(column)\n // mergedCells.length가 0이면 일반적으로 열을 왼쪽에 추가한다.\n if (mergedCells.length === 0) {\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let index = this.rows\n newbieCells.reverse().forEach(cell => {\n if (index == 0) {\n index = this.rows\n increasedColumns++\n }\n\n index--\n this.insertComponentAt(cell, insertionColumnPosition + index * increasedColumns)\n })\n\n let widths = this.widths.slice()\n this.model.columns += columns.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 열을 추가해야 한다.\n else {\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n // 추가하려는 셀은 일반 셀인데 그 위치에 다른 병합된 셀이 있는 문제로 임시로 막아 놓음. 수정해야함\n if (superCellIndexes.length >= 2) return false\n let superCellColumn = index % this.columns\n let cell = this.components[index] as TableCell\n\n let superCellObj = {\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n text: cell.getState('text'),\n merged: cell.merged\n }\n // 추가하려는 열이 슈퍼셀을 포함한 경우\n if (superCellColumn === column) {\n for (let i = 0; i < this.rows; i++) newbieCells.push(buildNewCell('table-cell', this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n } else {\n cell.colspan += 1\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n }\n let widths = this.widths.slice()\n this.model.columns += columns.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n })\n }\n })\n }\n\n insertCellsRight(cells: TableCell[]) {\n // 먼저 cells 위치의 열을 구한다.\n let columns: number[] = []\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n // 열 2개 이상은 추가 안함. 임시로 막아놓음\n if (columns.length >= 2) return false\n let insertionColumnPosition = columns[columns.length - 1] + 1\n let newbieColumnWidths: number[] = []\n let newbieCells: TableCell[] = []\n columns.forEach(column => {\n // columns에서 세로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByY(column)\n // mergedCells.length가 0이면 일반적으로 열을 오른쪽에 추가한다.\n if (mergedCells.length === 0) {\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let index = this.rows\n newbieCells.reverse().forEach(cell => {\n if (index == 0) {\n index = this.rows\n increasedColumns++\n }\n\n index--\n this.insertComponentAt(cell, insertionColumnPosition + index * increasedColumns)\n })\n\n let widths = this.widths.slice()\n this.model.columns += columns.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 열을 추가해야 한다.\n else {\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n // 추가하려는 셀은 일반 셀인데 그 위치에 다른 병합된 셀이 있는 문제로 임시로 막아 놓음. 수정해야함\n if (superCellIndexes.length >= 2) return false\n let superCellRow = Math.floor(index / this.columns)\n let superCellColumn = index % this.columns\n let cell = this.components[index] as TableCell\n\n let superCellObj = {\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n text: cell.getState('text'),\n merged: cell.merged\n }\n // 추가하려는 열이 병합된 셀중 마지막 열인 경우\n if (superCellColumn + superCellObj.colspan - 1 === column) {\n for (let i = 0; i < this.rows; i++) newbieCells.push(buildNewCell('table-cell', this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n } else if (superCellColumn === column) {\n cell.colspan += 1\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n // 슈퍼셀이 복사됐으므로 그 해당 셀을 병합된 셀로 설정한다.\n let newbieCell = this.components[index + superCellRow + 1] as TableCell\n newbieCell.rowspan = 1\n newbieCell.colspan = 1\n newbieCell.merged = true\n newbieCell.set('text', '')\n } else {\n cell.colspan += 1\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n }\n let widths = this.widths.slice()\n this.model.columns += columns.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n })\n }\n })\n }\n\n distributeHorizontal(cells: TableCell[]) {\n var columns: number[] = []\n\n cells.forEach(cell => {\n let rowcolumn = this.getRowColumn(cell)\n\n if (-1 == columns.indexOf(rowcolumn.column)) columns.push(rowcolumn.column)\n })\n\n var sum = columns.reduce((sum, column) => {\n return sum + this.widths[column]\n }, 0)\n\n var newval = Math.round((sum / columns.length) * 100) / 100\n var widths = this.widths.slice()\n columns.forEach(column => {\n widths[column] = newval\n })\n\n this.set('widths', widths)\n }\n\n distributeVertical(cells: TableCell[]) {\n var rows: number[] = []\n\n cells.forEach((cell: TableCell) => {\n let rowcolumn = this.getRowColumn(cell)\n\n if (-1 == rows.indexOf(rowcolumn.row)) rows.push(rowcolumn.row)\n })\n\n var sum: number = rows.reduce((sum, row) => {\n return sum + this.heights[row]\n }, 0)\n\n var newval = Math.round((sum / rows.length) * 100) / 100\n var heights = this.heights.slice()\n rows.forEach(row => {\n heights[row] = newval\n })\n\n this.set('heights', heights)\n }\n\n toObjectArrayValue(array: any[]) {\n if (!array || array.length === 0) return null\n\n if (!array[0].hasOwnProperty('__field1')) {\n return array\n }\n\n let indexKeyMap: { [key: string]: any } = {}\n let value = []\n\n for (let key in array[0]) {\n indexKeyMap[key] = array[0][key]\n }\n\n for (var i = 1; i < array.length; i++) {\n let object: { [key: string]: any } = {}\n let thisObject = array[i]\n for (let key in indexKeyMap) {\n let k = indexKeyMap[key]\n let v = thisObject[key]\n object[k] = v\n }\n\n value.push(object)\n }\n\n return value\n }\n\n get columns() {\n return Number(this.getState('columns'))\n }\n\n get lefts() {\n return this.components.filter((c, i) => {\n return !(i % this.columns)\n })\n }\n\n get centers() {\n return this.components.filter((c, i) => {\n return i % this.columns && (i + 1) % this.columns\n })\n }\n\n get rights() {\n return this.components.filter((c, i) => {\n return !((i + 1) % this.columns)\n })\n }\n\n get tops() {\n return this.components.slice(0, this.columns)\n }\n\n get middles() {\n return this.components.slice(this.columns, this.columns * (this.rows - 1))\n }\n\n get bottoms() {\n return this.components.slice(this.columns * (this.rows - 1))\n }\n\n get widths_sum(): number {\n var widths = this.widths\n return widths\n ? widths\n .filter((width: number, i: number) => i < this.columns)\n .reduce((sum: number, width: number) => sum + width, 0)\n : this.columns\n }\n\n get heights_sum(): number {\n var heights = this.heights\n return heights\n ? heights\n .filter((height: number, i: number) => i < this.rows)\n .reduce((sum: number, height: number) => sum + height, 0)\n : this.rows\n }\n\n get nature(): ComponentNature {\n return NATURE\n }\n\n get controls(): Control[] {\n var widths = this.widths\n var heights = this.heights\n var inside = this.textBounds\n\n var width_unit = inside!.width / this.widths_sum\n var height_unit = inside!.height / this.heights_sum\n\n var x = inside!.left\n var y = inside!.top\n\n var controls: Control[] = []\n\n widths.slice(0, this.columns - 1).forEach((width: number) => {\n x += width * width_unit\n controls.push({\n x: x,\n y: inside!.top,\n handler: columnControlHandler\n })\n })\n\n heights.slice(0, this.rows - 1).forEach((height: number) => {\n y += height * height_unit\n controls.push({\n x: inside!.left,\n y: y,\n handler: rowControlHandler\n })\n })\n\n return controls\n }\n\n onchange(after: State, before: State) {\n if ('rows' in after || 'columns' in after) {\n let { rows, columns } = this\n\n this.buildCells(\n rows,\n columns,\n 'rows' in before ? before.rows : rows,\n 'columns' in before ? before.columns : columns\n )\n }\n\n if ('data' in after) {\n this.setCellsData()\n }\n }\n\n get eventMap() {\n return {\n '(self)': {\n '(descendant)': {\n change: this.oncellchanged\n }\n }\n }\n }\n\n reflow() {\n this.reflowing = true\n super.reflow()\n this.reflowing = false\n }\n\n oncellchanged(after: State, before: State, hint: { origin: Component }) {\n if ('dataKey' in after || 'dataIndex' in after) {\n this.setCellsData()\n }\n\n if (!this.reflowing) {\n if ('width' in after) {\n var diff = after.width - before.width\n var index = this.components.indexOf(hint.origin)\n\n if (index !== -1) {\n adjustCellWidth(this, index % this.columns, diff)\n }\n }\n\n if ('height' in after) {\n var diff = after.height - before.height\n var index = this.components.indexOf(hint.origin)\n\n if (index !== -1) {\n index = Math.floor(index / this.columns)\n adjustCellHeight(this, index, diff)\n }\n }\n }\n }\n}\n\n;['rows', 'columns', 'widths', 'heights', 'widths_sum', 'heights_sum', 'controls'].forEach(getter =>\n Component.memoize(Table.prototype, getter, false)\n)\n\nComponent.register('table', Table)\n"]}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport {\n Component,\n ComponentNature,\n Container,\n Control,\n Layout,\n State,\n Style,\n sceneComponent\n} from '@hatiolab/things-scene'\n\nimport {\n above,\n after,\n array,\n before,\n below,\n buildCopiedCell,\n buildNewCell,\n CLEAR_STYLE,\n columnControlHandler,\n isBottomMost,\n isLeftMost,\n isRightMost,\n isTopMost,\n rowControlHandler,\n setCellBorder,\n WHERE,\n adjustCellWidth,\n adjustCellHeight\n} from './helper-functions.js'\nimport TableCell from './table-cell.js'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'rows',\n name: 'rows',\n property: 'rows'\n },\n {\n type: 'number',\n label: 'columns',\n name: 'columns',\n property: 'columns'\n },\n {\n type: 'select',\n label: 'data-spread-to',\n name: 'spreadTo',\n property: {\n options: ['', 'text']\n }\n }\n ],\n 'value-property': 'data',\n help: 'scene/component/table'\n}\n\n@sceneComponent('table')\nexport default class Table extends Container {\n reflowing: boolean = false\n\n created() {\n var tobeSize = this.rows * this.columns\n var gap = this.size() - tobeSize\n\n if (this.data) {\n this.setCellsData()\n }\n\n if (gap == 0) {\n return\n } else if (gap > 0) {\n let removals = this.components.slice(gap)\n this.remove(removals)\n } else {\n let newbies = []\n\n for (let i = 0; i < -gap; i++) newbies.push(buildNewCell('table-cell', this.app))\n\n this.add(newbies)\n }\n\n var widths = this.getState('widths')\n var heights = this.getState('heights')\n\n if (!widths || widths.length < this.columns) this.set('widths', this.widths)\n if (!heights || heights.length < this.rows) this.set('heights', this.heights)\n }\n\n containable(component: Component) {\n return component.getState('type') == 'table-cell'\n }\n\n get focusible() {\n /* 이 컨테이너에는 컴포넌트를 임의로 추가 및 삭제할 수 없도록 함 */\n return false\n }\n\n get widths() {\n var widths = this.getState('widths')\n\n if (!widths) return array(1, this.columns)\n\n if (widths.length < this.columns) return widths.concat(array(1, this.columns - widths.length))\n else if (widths.length > this.columns) return widths.slice(0, this.columns)\n\n return widths\n }\n\n get heights() {\n var heights = this.getState('heights')\n\n if (!heights) return array(1, this.rows)\n\n if (heights.length < this.rows) return heights.concat(array(1, this.rows - heights.length))\n else if (heights.length > this.rows) return heights.slice(0, this.rows)\n\n return heights\n }\n\n buildCells(newrows: number, newcolumns: number, oldrows: number, oldcolumns: number) {\n if (newrows < oldrows) {\n let removals: TableCell[] = ([] = this.components.slice(oldcolumns * newrows) as TableCell[])\n\n // 지우려는 셀중에 병합된 셀을 찾는다.\n let mergedCells: TableCell[] = []\n removals.forEach(cell => {\n if (cell.merged === true || cell.rowspan > 1 || cell.colspan > 1) mergedCells.push(cell)\n })\n\n // 병합된 셀 중에서 슈퍼셀을 찾는다.\n if (mergedCells.length > 0) {\n // 부모 셀을 저장\n let superCells: TableCell[] = []\n // 부모 셀의 인덱스를 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.components.indexOf(cell) % oldcolumns\n row = Math.floor(this.components.indexOf(cell) / oldcolumns)\n index = row * oldcolumns + col + 1\n while (index) {\n --index\n let component: TableCell = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.components.indexOf(component) % oldcolumns\n let spColEnd = (this.components.indexOf(component) % oldcolumns) + component.colspan\n let spRowStart = Math.floor(this.components.indexOf(component) / oldcolumns)\n let spRowEnd = Math.floor(this.components.indexOf(component) / oldcolumns) + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n // 슈퍼셀에서 colspan 을 감소시킨다\n superCells.forEach(cell => {\n // newcolumns < oldcolumns 케이스와 이 부분만 다름\n cell.rowspan -= oldrows - newrows\n })\n }\n\n this.remove(removals)\n }\n\n var minrows = Math.min(newrows, oldrows)\n\n if (newcolumns > oldcolumns) {\n for (let r = 0; r < minrows; r++) {\n for (let c = oldcolumns; c < newcolumns; c++) {\n this.insertComponentAt(buildNewCell('table-cell', this.app), r * newcolumns + c)\n }\n }\n } else if (newcolumns < oldcolumns) {\n let removals: TableCell[] = []\n\n for (let r = 0; r < minrows; r++) {\n for (let c = newcolumns; c < oldcolumns; c++) {\n removals.push(this.components[r * oldcolumns + c] as TableCell)\n }\n }\n // 지우려는 셀중에 병합된 셀을 찾는다.\n let mergedCells: TableCell[] = []\n removals.forEach(cell => {\n if (cell.merged === true || cell.rowspan > 1 || cell.colspan > 1) mergedCells.push(cell)\n })\n\n // 병합된 셀 중에서 슈퍼셀을 찾는다.\n if (mergedCells.length > 0) {\n // 부모 셀을 저장\n let superCells: TableCell[] = []\n // 부모 셀의 인덱스를 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.components.indexOf(cell) % oldcolumns\n row = Math.floor(this.components.indexOf(cell) / oldcolumns)\n index = row * oldcolumns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.components.indexOf(component) % oldcolumns\n let spColEnd = (this.components.indexOf(component) % oldcolumns) + component.colspan\n let spRowStart = Math.floor(this.components.indexOf(component) / oldcolumns)\n let spRowEnd = Math.floor(this.components.indexOf(component) / oldcolumns) + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n // 슈퍼셀에서 colspan 을 감소시킨다\n superCells.forEach(cell => {\n cell.colspan -= oldcolumns - newcolumns\n })\n }\n\n this.remove(removals)\n }\n\n if (newrows > oldrows) {\n let newbies = []\n\n for (let r = oldrows; r < newrows; r++) {\n for (let i = 0; i < newcolumns; i++) {\n newbies.push(buildNewCell('table-cell', this.app))\n }\n }\n this.add(newbies)\n }\n\n this.set({\n widths: this.widths,\n heights: this.heights\n })\n }\n\n get layout() {\n return Layout.get('table')\n }\n\n get rows() {\n return Number(this.getState('rows'))\n }\n\n setCellsStyle(cells: TableCell[], style: Style, where: WHERE, clearBefore = true) {\n var components = this.components\n var total = components.length\n var columns = this.getState('columns')\n\n // 병합된 셀도 포함시킨다.\n var _cells: TableCell[] = []\n cells.forEach(c => {\n _cells.push(c)\n if (c.colspan || c.rowspan) {\n let col = this.getRowColumn(c).column\n let row = this.getRowColumn(c).row\n for (let i = row; i < row + c.rowspan; i++)\n for (let j = col; j < col + c.colspan; j++)\n if (i != row || j != col) _cells.push(this.components[i * this.columns + j] as TableCell)\n }\n })\n var indices = _cells.map(cell => components.indexOf(cell))\n indices.forEach(i => {\n var cell = components[i]\n clearBefore && setCellBorder(cell, CLEAR_STYLE, 'all')\n\n switch (where) {\n case 'all':\n setCellBorder(cell, style, where)\n\n if (isLeftMost(total, columns, indices, i)) setCellBorder(components[before(columns, i)], style, 'right')\n if (isRightMost(total, columns, indices, i)) setCellBorder(components[after(columns, i)], style, 'left')\n if (isTopMost(total, columns, indices, i)) setCellBorder(components[above(columns, i)], style, 'bottom')\n if (isBottomMost(total, columns, indices, i)) setCellBorder(components[below(columns, i)], style, 'top')\n break\n case 'in':\n if (!isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n }\n if (!isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n }\n if (!isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n }\n if (!isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n }\n break\n case 'out':\n if (isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n setCellBorder(components[before(columns, i)], style, 'right')\n }\n if (isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n setCellBorder(components[after(columns, i)], style, 'left')\n }\n if (isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n setCellBorder(components[above(columns, i)], style, 'bottom')\n }\n if (isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n setCellBorder(components[below(columns, i)], style, 'top')\n }\n break\n case 'left':\n if (isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n setCellBorder(components[before(columns, i)], style, 'right')\n }\n break\n case 'right':\n if (isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n setCellBorder(components[after(columns, i)], style, 'left')\n }\n break\n case 'center':\n if (!isLeftMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'left')\n }\n if (!isRightMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'right')\n }\n break\n case 'middle':\n if (!isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n }\n if (!isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n }\n break\n case 'top':\n if (isTopMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'top')\n setCellBorder(components[above(columns, i)], style, 'bottom')\n }\n break\n case 'bottom':\n if (isBottomMost(total, columns, indices, i)) {\n setCellBorder(cell, style, 'bottom')\n setCellBorder(components[below(columns, i)], style, 'top')\n }\n break\n case 'clear':\n setCellBorder(cell, CLEAR_STYLE, 'all')\n\n if (isLeftMost(total, columns, indices, i))\n setCellBorder(components[before(columns, i)], CLEAR_STYLE, 'right')\n if (isRightMost(total, columns, indices, i)) setCellBorder(components[after(columns, i)], CLEAR_STYLE, 'left')\n if (isTopMost(total, columns, indices, i)) setCellBorder(components[above(columns, i)], CLEAR_STYLE, 'bottom')\n if (isBottomMost(total, columns, indices, i)) setCellBorder(components[below(columns, i)], CLEAR_STYLE, 'top')\n }\n })\n }\n\n setCellsData() {\n var data = this.data\n\n if (!data) return\n\n data = this.toObjectArrayValue(data) || []\n\n var cells = this.components as TableCell[]\n\n var { spreadTo } = this.state\n\n cells.forEach(cell => {\n var dataKey = cell.model.dataKey\n var dataIndex = cell.model.dataIndex\n\n if (dataIndex >= 0) {\n const cellData = dataKey ? (data[dataIndex] || {})[dataKey] : data[dataIndex]\n\n ;(cell as any).data = cellData\n if (spreadTo) {\n ;(cell as any)[spreadTo] = cellData\n }\n }\n })\n }\n\n getRowColumn(cell: TableCell): { column: number; row: number } {\n var idx = this.components.indexOf(cell)\n\n return {\n column: idx % this.columns,\n row: Math.floor(idx / this.columns)\n }\n }\n\n getCellsByRow(row: number) {\n return this.components.slice(row * this.columns, (row + 1) * this.columns)\n }\n\n getCellsByColumn(column: number) {\n var cells = []\n for (var i = 0; i < this.rows; i++) cells.push(this.components[this.columns * i + column])\n\n return cells\n }\n\n // 한 개의 행을 매개변수로 받아서 첫 번째 셀부터 우측으로 이동하면서 병합된 셀이 있는지 검사한다.\n findMergedCellByX(row: number) {\n let mergedCells: TableCell[] = []\n let cell: TableCell\n for (let i = 0; i < this.columns; i++) {\n cell = this.components[row * this.columns + i] as TableCell\n if (cell.merged === true || cell.rowspan > 1 || cell.colspan > 1) mergedCells.push(cell)\n }\n return mergedCells\n }\n\n // 한 개의 열을 매개변수로 받아서 첫 번째 셀부터 아래로 이동하면서 병합된 셀이 있는지 검사한다.\n findMergedCellByY(column: number) {\n let mergedCells: TableCell[] = []\n let cell: TableCell\n for (let i = 0; i < this.rows; i++) {\n cell = this.components[i * this.columns + column] as TableCell\n if (cell.merged === true || cell.rowspan > 1 || cell.colspan > 1) mergedCells.push(cell)\n }\n return mergedCells\n }\n\n mergeCells(cells: TableCell[]) {\n // 선택한 셀이 들어있는 행\n let mergeableRows: number[] = []\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == mergeableRows.indexOf(row)) mergeableRows.push(row)\n })\n\n // 선택한 셀의 행이 연속적인 숫자가 아니라면 병합하지 않는다.\n if (mergeableRows.length - 1 !== mergeableRows[mergeableRows.length - 1] - mergeableRows[0]) return false\n\n // 선택한 셀이 들어있는 열\n let mergeableColumns: number[] = []\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == mergeableColumns.indexOf(column)) mergeableColumns.push(column)\n })\n\n // 선택한 셀의 열이 연속적인 숫자가 아니라면 병합하지 않는다.\n if (mergeableColumns.length - 1 !== mergeableColumns[mergeableColumns.length - 1] - mergeableColumns[0])\n return false\n\n // 병합할 행의 수\n let numberOfRows = mergeableRows.length\n\n // 병합할 열의 수\n let numberOfColumns = mergeableColumns.length\n\n // 선택된 셀의 수\n let numberOfCells = cells.length\n\n // 병합될 조건 검사\n // 행과 열의 곱이 셀의 수가 아니거나 셀의 수가 2보다 작은 경우는 병합하지 않는다.\n if (numberOfCells !== numberOfRows * numberOfColumns || numberOfCells < 2) return false\n\n // 선택한 셀들을 index 값이 낮은 것부터 순서대로 재정렬\n cells.sort((a, b) => {\n return (\n this.getRowColumn(a).row * this.columns +\n this.getRowColumn(a).column -\n (this.getRowColumn(b).row * this.columns + this.getRowColumn(b).column)\n )\n })\n\n // 셀을 병합함\n let firstCell = cells[0]\n firstCell.set({\n colspan: numberOfColumns,\n rowspan: numberOfRows\n })\n\n // 첫 번째 셀을 제외한 나머지 셀을 true로 지정\n for (let i = 1; i < numberOfCells; i++) cells[i].merged = true\n\n // 병합 후에는 첫 번째 셀을 선택하도록 함\n this.root.selected = [firstCell]\n }\n\n splitCells(cells: TableCell[]) {\n // 선택한 병합된 셀의 정보를 가져온다.\n let firstCellRowColumn = this.getRowColumn(cells[0])\n let firstCell = cells[0]\n let firstCellIndex = this.components.indexOf(cells[0])\n let length = this.components.length\n let lastCell = this.components[length - 1] as TableCell\n let lastCellRowColumn = this.getRowColumn(lastCell)\n let startIndex = length / (lastCellRowColumn.row + 1)\n\n // 병합된 셀들을 구해서 merged를 false로 설정한다.\n // 자식 셀이 갖고 있는 부모 셀의 위치를 초기화 한다.\n for (let j = 0; j < firstCell.rowspan; j++) {\n let index\n let nextCell: TableCell\n for (let i = firstCellIndex; i < firstCellIndex + firstCell.colspan; i++) {\n index = startIndex * j + i\n nextCell = this.components[index] as TableCell\n nextCell.merged = false\n }\n }\n\n // 첫 번째 셀의 rowspan, colspan = 1로 지정한다.\n firstCell.colspan = 1\n firstCell.rowspan = 1\n }\n\n deleteRows(cells: TableCell[]) {\n // 만약 선택한 셀이 병합된 셀이라면 삭제하지 않는다.\n if (cells[0].merged == true) return false\n // 먼저 cells 위치의 행을 구한다.\n let rows: number[] = []\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) rows.push(row)\n })\n rows.sort((a, b) => {\n return a - b\n })\n rows.reverse()\n var heights = this.heights.slice()\n rows.forEach(row => {\n // rows에서 가로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByX(row)\n // mergedCells.length가 0이면 일반적으로 행을 지운다.\n if (mergedCells.length === 0) {\n this.remove(this.getCellsByRow(row))\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 행을 지워야 한다.\n //\n else {\n // 삭제할 행에서 병합된 셀을 삭제할 때 해당 셀을 임시로 저장\n let temp = []\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n let superCellRow = Math.floor(index / this.columns)\n // 지우려는 행이 슈퍼셀을 포함한 경우이면서 슈퍼셀이 마지막 행의 셀이 아닌 경우\n // 그리고 슈퍼셀의 rowspan이 1보다 큰 경우\n let aCell: TableCell = this.components[index + this.columns] as TableCell\n let bCell: TableCell = this.components[index] as TableCell\n if (row === superCellRow && superCellRow !== this.rows - 1 && bCell.rowspan > 1) {\n aCell.rowspan = bCell.rowspan - 1\n aCell.colspan = bCell.colspan\n aCell.merged = false\n aCell.set('text', bCell.getState('text'))\n } else {\n bCell.rowspan -= 1\n }\n })\n this.remove(this.getCellsByRow(row))\n }\n })\n\n rows.forEach(row => heights.splice(row, 1))\n\n this.model.rows -= rows.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n this.set('heights', heights)\n }\n\n deleteColumns(cells: TableCell[]) {\n // 만약 선택한 셀이 병합된 셀이라면 삭제하지 않는다.\n if (cells[0].merged == true) return false\n // 먼저 cells 위치의 열을 구한다.\n let columns: number[] = []\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n\n columns.forEach(column => {\n var widths = this.widths.slice()\n // columns에서 세로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByY(column)\n // mergedCells.length가 0이면 일반적으로 열을 지운다.\n if (mergedCells.length === 0) {\n this.remove(this.getCellsByColumn(column))\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 열을 지워야 한다.\n else {\n // 삭제할 열에서 병합된 셀을 삭제할 때 해당 셀을 임시로 저장\n let temp = []\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스를 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n let superCellColumn = index % this.columns\n\n let aCell: TableCell = this.components[index + 1] as TableCell\n let bCell: TableCell = this.components[index] as TableCell\n // 지우려는 열이 슈퍼셀을 포함한 경우이면서 슈퍼셀이 마지막 열의 셀이 아닌 경우\n // 그리고 슈퍼셀의 colspan이 1보다 큰 경우\n if (column === superCellColumn && superCellColumn !== this.columns - 1 && bCell.colspan > 1) {\n aCell.rowspan = bCell.rowspan\n aCell.colspan = bCell.colspan - 1\n aCell.merged = false\n aCell.set('text', bCell.getState('text'))\n } else {\n bCell.colspan -= 1\n }\n })\n this.remove(this.getCellsByColumn(column))\n }\n widths.splice(column, 1)\n this.model.columns -= 1 // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n this.set('widths', widths)\n })\n }\n\n insertCellsAbove(cells: TableCell[]) {\n // 먼저 cells 위치의 행을 구한다.\n let rows: number[] = []\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) rows.push(row)\n })\n rows.sort((a, b) => {\n return a - b\n })\n rows.reverse()\n // 행 2개 이상은 추가 안함. 임시로 막아놓음\n if (rows.length >= 2) return false\n let insertionRowPosition = rows[0]\n let newbieRowHeights: number[] = []\n let newbieCells: TableCell[] = []\n rows.forEach(row => {\n // rows에서 가로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByX(row)\n // mergedCells.length가 0이면 일반적으로 행을 위에 추가한다.\n if (mergedCells.length === 0) {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += rows.length\n\n this.clearCache()\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 행을 추가해야 한다.\n else {\n // 선택한 행이 2개 이상 있고 그 중에 병합된 셀이 적어도 한 개라도 있으면\n // 병합된 셀이 포함된 행의 추가는 무시한다. 임시방편으로 막아놈\n if (rows.length > 1) return false\n // 추가할 행에서 병합된 셀을 추가할 때 해당 셀을 임시로 저장\n let temp = []\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n // 추가하려는 셀은 일반 셀인데 그 위치에 다른 병합된 셀이 있는 문제로 임시로 막아 놓음. 수정해야함\n if (superCellIndexes.length >= 2) return false\n let superCellRow = Math.floor(index / this.columns)\n let cell: TableCell = this.components[index] as TableCell\n\n let superCellObj = {\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n text: cell.getState('text'),\n merged: cell.merged\n }\n\n // 추가하려는 행이 슈퍼셀을 포함한 경우\n if (superCellRow === row) {\n for (let i = 0; i < this.columns; i++) newbieCells.push(buildNewCell('table-cell', this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n let addedCell = this.components[index + this.columns] as TableCell\n\n addedCell.rowspan = superCellObj.rowspan\n addedCell.colspan = superCellObj.colspan\n addedCell.set('text', superCellObj.text)\n addedCell.merged = superCellObj.merged\n } else {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n cell.rowspan += 1\n }\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += rows.length\n\n this.clearCache()\n })\n }\n })\n }\n\n insertCellsBelow(cells: TableCell[]) {\n // 먼저 cells 위치의 행을 구한다.\n let rows: number[] = []\n cells.forEach(cell => {\n let row = this.getRowColumn(cell).row\n if (-1 == rows.indexOf(row)) rows.push(row)\n })\n rows.sort((a, b) => {\n return a - b\n })\n rows.reverse()\n\n // 행 2개 이상은 추가 안함. 임시로 막아놓음\n if (rows.length >= 2) return false\n let insertionRowPosition = rows[rows.length - 1] + 1\n let newbieRowHeights: number[] = []\n let newbieCells: TableCell[] = []\n\n rows.forEach(row => {\n // rows에서 가로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByX(row)\n // mergedCells.length가 0이면 일반적으로 행을 아래에 추가한다.\n if (mergedCells.length === 0) {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += 1\n\n this.clearCache()\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 행을 추가해야 한다.\n else {\n // 추가할 행에서 병합된 셀을 추가할 때 해당 셀을 임시로 저장\n let temp = []\n // 부모 셀을 저장\n let superCells: TableCell[] = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n // 추가하려는 셀은 일반 셀인데 그 위치에 다른 병합된 셀이 있는 문제로 임시로 막아 놓음. 수정해야함\n if (superCellIndexes.length >= 2) return false\n let superCellRow = Math.floor(index / this.columns)\n let cell = this.components[index] as TableCell\n\n let superCellObj = {\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n text: cell.getState('text'),\n merged: cell.merged\n }\n // 추가하려는 행이 병합된 셀중 마지막 행인 경우\n if (superCellRow + superCellObj.rowspan - 1 === row) {\n for (let i = 0; i < this.columns; i++) newbieCells.push(buildNewCell('table-cell', this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n } else if (superCellRow === row) {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n\n cell.rowspan += 1\n\n let newbieCell = this.components[index + this.columns] as TableCell\n // 슈퍼셀이 복사됐으므로 그 해당 셀을 병합된 셀로 설정한다.\n newbieCell.rowspan = 1\n newbieCell.colspan = 1\n newbieCell.merged = true\n newbieCell.set('text', '')\n } else {\n for (let i = 0; i < this.columns; i++)\n newbieCells.push(buildCopiedCell(this.components[row * this.columns + i].model, this.app))\n newbieRowHeights.push(this.heights[row])\n\n newbieCells.reverse().forEach(cell => {\n this.insertComponentAt(cell, insertionRowPosition * this.columns)\n })\n cell.rowspan += 1\n }\n\n let heights = this.heights.slice()\n heights.splice(insertionRowPosition, 0, ...newbieRowHeights)\n this.set('heights', heights)\n\n this.model.rows += 1\n\n this.clearCache()\n })\n }\n })\n }\n\n insertCellsLeft(cells: TableCell[]) {\n // 먼저 cells 위치의 열을 구한다.\n let columns: number[] = []\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n // 열 2개 이상은 추가 안함. 임시로 막아놓음\n if (columns.length >= 2) return false\n let insertionColumnPosition = columns[0]\n let newbieColumnWidths: number[] = []\n let newbieCells: TableCell[] = []\n columns.forEach(column => {\n // columns에서 세로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByY(column)\n // mergedCells.length가 0이면 일반적으로 열을 왼쪽에 추가한다.\n if (mergedCells.length === 0) {\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let index = this.rows\n newbieCells.reverse().forEach(cell => {\n if (index == 0) {\n index = this.rows\n increasedColumns++\n }\n\n index--\n this.insertComponentAt(cell, insertionColumnPosition + index * increasedColumns)\n })\n\n let widths = this.widths.slice()\n this.model.columns += columns.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 열을 추가해야 한다.\n else {\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n // 추가하려는 셀은 일반 셀인데 그 위치에 다른 병합된 셀이 있는 문제로 임시로 막아 놓음. 수정해야함\n if (superCellIndexes.length >= 2) return false\n let superCellColumn = index % this.columns\n let cell = this.components[index] as TableCell\n\n let superCellObj = {\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n text: cell.getState('text'),\n merged: cell.merged\n }\n // 추가하려는 열이 슈퍼셀을 포함한 경우\n if (superCellColumn === column) {\n for (let i = 0; i < this.rows; i++) newbieCells.push(buildNewCell('table-cell', this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n } else {\n cell.colspan += 1\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n }\n let widths = this.widths.slice()\n this.model.columns += columns.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n })\n }\n })\n }\n\n insertCellsRight(cells: TableCell[]) {\n // 먼저 cells 위치의 열을 구한다.\n let columns: number[] = []\n cells.forEach(cell => {\n let column = this.getRowColumn(cell).column\n if (-1 == columns.indexOf(column)) columns.push(column)\n })\n columns.sort((a, b) => {\n return a - b\n })\n columns.reverse()\n // 열 2개 이상은 추가 안함. 임시로 막아놓음\n if (columns.length >= 2) return false\n let insertionColumnPosition = columns[columns.length - 1] + 1\n let newbieColumnWidths: number[] = []\n let newbieCells: TableCell[] = []\n columns.forEach(column => {\n // columns에서 세로 방향으로 이동하면서 병합된 셀을 찾는다.\n let mergedCells = this.findMergedCellByY(column)\n // mergedCells.length가 0이면 일반적으로 열을 오른쪽에 추가한다.\n if (mergedCells.length === 0) {\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let index = this.rows\n newbieCells.reverse().forEach(cell => {\n if (index == 0) {\n index = this.rows\n increasedColumns++\n }\n\n index--\n this.insertComponentAt(cell, insertionColumnPosition + index * increasedColumns)\n })\n\n let widths = this.widths.slice()\n this.model.columns += columns.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n }\n // mergedCells.length가 0이 아니면 병합된 셀을 고려하여 열을 추가해야 한다.\n else {\n // 부모 셀을 저장\n let superCells = []\n // 부모 셀의 인덱스 값을 저장\n let superCellIndexes: number[] = []\n mergedCells.forEach(cell => {\n let col, row, index\n col = this.getRowColumn(cell).column\n row = this.getRowColumn(cell).row\n index = row * this.columns + col + 1\n while (index) {\n --index\n let component = this.components[index] as TableCell\n // 슈퍼셀을 찾고 슈퍼셀의 위치에서 rowspan, colspan 거리만큼 이동하면서 cell이 있는지 검증해야함\n if (component.rowspan > 1 || component.colspan > 1) {\n let spColStart = this.getRowColumn(component).column\n let spColEnd = this.getRowColumn(component).column + component.colspan\n let spRowStart = this.getRowColumn(component).row\n let spRowEnd = this.getRowColumn(component).row + component.rowspan\n // 슈퍼셀 영역 안에 자식 셀이 있으면 superCells에 부모셀을 추가\n if (col >= spColStart && col < spColEnd && row >= spRowStart && row < spRowEnd) {\n if (-1 == superCellIndexes.indexOf(index)) {\n superCellIndexes.push(index)\n superCells.push(component)\n }\n }\n }\n }\n })\n superCellIndexes.forEach(index => {\n // 추가하려는 셀은 일반 셀인데 그 위치에 다른 병합된 셀이 있는 문제로 임시로 막아 놓음. 수정해야함\n if (superCellIndexes.length >= 2) return false\n let superCellRow = Math.floor(index / this.columns)\n let superCellColumn = index % this.columns\n let cell = this.components[index] as TableCell\n\n let superCellObj = {\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n text: cell.getState('text'),\n merged: cell.merged\n }\n // 추가하려는 열이 병합된 셀중 마지막 열인 경우\n if (superCellColumn + superCellObj.colspan - 1 === column) {\n for (let i = 0; i < this.rows; i++) newbieCells.push(buildNewCell('table-cell', this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n } else if (superCellColumn === column) {\n cell.colspan += 1\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n // 슈퍼셀이 복사됐으므로 그 해당 셀을 병합된 셀로 설정한다.\n let newbieCell = this.components[index + superCellRow + 1] as TableCell\n newbieCell.rowspan = 1\n newbieCell.colspan = 1\n newbieCell.merged = true\n newbieCell.set('text', '')\n } else {\n cell.colspan += 1\n for (let i = 0; i < this.rows; i++)\n newbieCells.push(buildCopiedCell(this.components[column + this.columns * i].model, this.app))\n newbieColumnWidths.push(this.widths[column])\n\n let increasedColumns = this.columns\n let rowIndex = this.rows\n newbieCells.reverse().forEach(cell => {\n if (rowIndex == 0) {\n rowIndex = this.rows\n increasedColumns++\n }\n\n rowIndex--\n this.insertComponentAt(cell, insertionColumnPosition + rowIndex * increasedColumns)\n })\n }\n let widths = this.widths.slice()\n this.model.columns += columns.length // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.\n\n widths.splice(insertionColumnPosition, 0, ...newbieColumnWidths)\n\n this.set('widths', widths)\n })\n }\n })\n }\n\n distributeHorizontal(cells: TableCell[]) {\n var columns: number[] = []\n\n cells.forEach(cell => {\n let rowcolumn = this.getRowColumn(cell)\n\n if (-1 == columns.indexOf(rowcolumn.column)) columns.push(rowcolumn.column)\n })\n\n var sum = columns.reduce((sum, column) => {\n return sum + this.widths[column]\n }, 0)\n\n var newval = Math.round((sum / columns.length) * 100) / 100\n var widths = this.widths.slice()\n columns.forEach(column => {\n widths[column] = newval\n })\n\n this.set('widths', widths)\n }\n\n distributeVertical(cells: TableCell[]) {\n var rows: number[] = []\n\n cells.forEach((cell: TableCell) => {\n let rowcolumn = this.getRowColumn(cell)\n\n if (-1 == rows.indexOf(rowcolumn.row)) rows.push(rowcolumn.row)\n })\n\n var sum: number = rows.reduce((sum, row) => {\n return sum + this.heights[row]\n }, 0)\n\n var newval = Math.round((sum / rows.length) * 100) / 100\n var heights = this.heights.slice()\n rows.forEach(row => {\n heights[row] = newval\n })\n\n this.set('heights', heights)\n }\n\n toObjectArrayValue(array: any[]) {\n if (!array || array.length === 0) return null\n\n if (!array[0].hasOwnProperty('__field1')) {\n return array\n }\n\n let indexKeyMap: { [key: string]: any } = {}\n let value = []\n\n for (let key in array[0]) {\n indexKeyMap[key] = array[0][key]\n }\n\n for (var i = 1; i < array.length; i++) {\n let object: { [key: string]: any } = {}\n let thisObject = array[i]\n for (let key in indexKeyMap) {\n let k = indexKeyMap[key]\n let v = thisObject[key]\n object[k] = v\n }\n\n value.push(object)\n }\n\n return value\n }\n\n get columns() {\n return Number(this.getState('columns'))\n }\n\n get lefts() {\n return this.components.filter((c, i) => {\n return !(i % this.columns)\n })\n }\n\n get centers() {\n return this.components.filter((c, i) => {\n return i % this.columns && (i + 1) % this.columns\n })\n }\n\n get rights() {\n return this.components.filter((c, i) => {\n return !((i + 1) % this.columns)\n })\n }\n\n get tops() {\n return this.components.slice(0, this.columns)\n }\n\n get middles() {\n return this.components.slice(this.columns, this.columns * (this.rows - 1))\n }\n\n get bottoms() {\n return this.components.slice(this.columns * (this.rows - 1))\n }\n\n get widths_sum(): number {\n var widths = this.widths\n return widths\n ? widths\n .filter((width: number, i: number) => i < this.columns)\n .reduce((sum: number, width: number) => sum + width, 0)\n : this.columns\n }\n\n get heights_sum(): number {\n var heights = this.heights\n return heights\n ? heights\n .filter((height: number, i: number) => i < this.rows)\n .reduce((sum: number, height: number) => sum + height, 0)\n : this.rows\n }\n\n get nature(): ComponentNature {\n return NATURE\n }\n\n get controls(): Control[] {\n var widths = this.widths\n var heights = this.heights\n var inside = this.textBounds\n\n var width_unit = inside!.width / this.widths_sum\n var height_unit = inside!.height / this.heights_sum\n\n var x = inside!.left\n var y = inside!.top\n\n var controls: Control[] = []\n\n widths.slice(0, this.columns - 1).forEach((width: number) => {\n x += width * width_unit\n controls.push({\n x: x,\n y: inside!.top,\n handler: columnControlHandler\n })\n })\n\n heights.slice(0, this.rows - 1).forEach((height: number) => {\n y += height * height_unit\n controls.push({\n x: inside!.left,\n y: y,\n handler: rowControlHandler\n })\n })\n\n return controls\n }\n\n onchange(after: State, before: State) {\n if ('rows' in after || 'columns' in after) {\n let { rows, columns } = this\n\n this.buildCells(\n rows,\n columns,\n 'rows' in before ? before.rows : rows,\n 'columns' in before ? before.columns : columns\n )\n }\n\n if ('data' in after) {\n this.setCellsData()\n }\n }\n\n get eventMap() {\n return {\n '(self)': {\n '(descendant)': {\n change: this.oncellchanged\n }\n }\n }\n }\n\n reflow() {\n this.reflowing = true\n super.reflow()\n this.reflowing = false\n }\n\n oncellchanged(after: State, before: State, hint: { origin: Component }) {\n if ('dataKey' in after || 'dataIndex' in after) {\n this.setCellsData()\n }\n\n if (!this.reflowing) {\n if ('width' in after) {\n var diff = after.width - before.width\n var index = this.components.indexOf(hint.origin)\n\n if (index !== -1) {\n adjustCellWidth(this, index % this.columns, diff)\n }\n }\n\n if ('height' in after) {\n var diff = after.height - before.height\n var index = this.components.indexOf(hint.origin)\n\n if (index !== -1) {\n index = Math.floor(index / this.columns)\n adjustCellHeight(this, index, diff)\n }\n }\n }\n }\n}\n\n;['rows', 'columns', 'widths', 'heights', 'widths_sum', 'heights_sum', 'controls'].forEach(getter =>\n Component.memoize(Table.prototype, getter, false)\n)\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@operato/scene-table",
3
3
  "description": "Things Scene Table Component.",
4
- "version": "9.0.0-beta.9",
4
+ "version": "9.0.0",
5
5
  "type": "module",
6
6
  "author": "heartyoh",
7
7
  "main": "dist/index.js",
@@ -28,7 +28,7 @@
28
28
  "migration": "things-factory-migration"
29
29
  },
30
30
  "dependencies": {
31
- "@hatiolab/things-scene": "^9.0.0-beta"
31
+ "@hatiolab/things-scene": "^9.0.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@hatiolab/prettier-config": "^1.0.0",
@@ -60,5 +60,5 @@
60
60
  "prettier --write"
61
61
  ]
62
62
  },
63
- "gitHead": "a055d01e45284ed000513e62768dcad61f926293"
63
+ "gitHead": "0c295810b93773e6373f96d69fe62e930d71c0cd"
64
64
  }