@operato/scene-table 0.0.17
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/@types/global/index.d.ts +1 -0
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +33 -0
- package/assets/icon-data-list.png +0 -0
- package/assets/icon-table.png +0 -0
- package/dist/data-list/data-cell.d.ts +22 -0
- package/dist/data-list/data-cell.js +56 -0
- package/dist/data-list/data-cell.js.map +1 -0
- package/dist/data-list/data-list-layout.d.ts +10 -0
- package/dist/data-list/data-list-layout.js +95 -0
- package/dist/data-list/data-list-layout.js.map +1 -0
- package/dist/data-list/data-list.d.ts +56 -0
- package/dist/data-list/data-list.js +536 -0
- package/dist/data-list/data-list.js.map +1 -0
- package/dist/helper-functions.d.ts +37 -0
- package/dist/helper-functions.js +135 -0
- package/dist/helper-functions.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/table-cell.d.ts +41 -0
- package/dist/table-cell.js +104 -0
- package/dist/table-cell.js.map +1 -0
- package/dist/table.d.ts +54 -0
- package/dist/table.js +1270 -0
- package/dist/table.js.map +1 -0
- package/dist/templates/data-list.d.ts +18 -0
- package/dist/templates/data-list.js +20 -0
- package/dist/templates/data-list.js.map +1 -0
- package/dist/templates/index.d.ts +18 -0
- package/dist/templates/index.js +4 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/table.d.ts +20 -0
- package/dist/templates/table.js +26 -0
- package/dist/templates/table.js.map +1 -0
- package/helps/scene/component/data-cell.ko.md +13 -0
- package/helps/scene/component/data-cell.md +13 -0
- package/helps/scene/component/data-cell.zh.md +13 -0
- package/helps/scene/component/data-list.ko.md +6 -0
- package/helps/scene/component/data-list.md +6 -0
- package/helps/scene/component/data-list.zh.md +8 -0
- package/helps/scene/component/table-cell.ko.md +58 -0
- package/helps/scene/component/table-cell.md +58 -0
- package/helps/scene/component/table-cell.zh.md +61 -0
- package/helps/scene/component/table.ko.md +68 -0
- package/helps/scene/component/table.md +68 -0
- package/helps/scene/component/table.zh.md +68 -0
- package/helps/scene/images/table-01.png +0 -0
- package/helps/scene/images/table-02.png +0 -0
- package/helps/scene/images/table-03.png +0 -0
- package/helps/scene/images/table-04.png +0 -0
- package/helps/scene/images/table-05.png +0 -0
- package/helps/scene/images/table-06.png +0 -0
- package/helps/scene/images/table-07.png +0 -0
- package/helps/scene/images/table-08.png +0 -0
- package/helps/scene/images/table-09.png +0 -0
- package/helps/scene/images/table-10.png +0 -0
- package/helps/scene/images/table-11.png +0 -0
- package/helps/scene/images/table-12.png +0 -0
- package/helps/scene/images/table-13.png +0 -0
- package/helps/scene/images/table-14.png +0 -0
- package/package.json +62 -0
- package/src/data-list/data-cell.ts +66 -0
- package/src/data-list/data-list-layout.ts +113 -0
- package/src/data-list/data-list.ts +654 -0
- package/src/helper-functions.ts +168 -0
- package/src/index.ts +6 -0
- package/src/table-cell.ts +126 -0
- package/src/table.ts +1406 -0
- package/src/templates/data-list.ts +20 -0
- package/src/templates/index.ts +4 -0
- package/src/templates/table.ts +26 -0
- package/test/basic-test.html +67 -0
- package/test/index.html +22 -0
- package/test/unit/a-test-table.js +72 -0
- package/test/unit/test-table-find-merged-cell.js +95 -0
- package/test/unit/test-table-insert-column.js +81 -0
- package/test/unit/test-table-insert-row.js +79 -0
- package/test/unit/test-table-rows-columns.js +47 -0
- package/test/unit/util.js +21 -0
- package/things-scene.config.js +5 -0
- package/translations/en.json +3 -0
- package/translations/ko.json +3 -0
- package/translations/ms.json +3 -0
- package/translations/zh.json +3 -0
- package/tsconfig.json +22 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +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 {\n CLEAR_STYLE,\n WHERE,\n above,\n after,\n array,\n before,\n below,\n buildCopiedCell,\n buildNewCell,\n columnControlHandler,\n isBottomMost,\n isLeftMost,\n isRightMost,\n isTopMost,\n rowControlHandler,\n setCellBorder\n} from './helper-functions'\nimport { Component, ComponentNature, Container, Control, Layout, Model, State, Style } from '@hatiolab/things-scene'\n\nimport { TableCell } from '.'\n\nconst NATURE = {\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', 'data']\n }\n }\n ],\n 'value-property': 'data',\n help: 'scene/component/table'\n}\n\n\nexport default class Table extends Container {\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.get('widths')\n var heights = this.get('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.get('type') == 'table-cell'\n }\n\n get focusible() {\n /* 이 컨테이너에는 컴포넌트를 임의로 추가 및 삭제할 수 없도록 함 */\n return false\n }\n\n get widths() {\n var widths = this.get('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.get('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.get('rows'))\n }\n\n setCellsStyle(cells: TableCell[], style: Style, where: WHERE) {\n var components = this.components\n var total = components.length\n var columns = this.get('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\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 = 'text' } = this.state\n\n cells.forEach(cell => {\n var dataKey = cell.model.dataKey\n var dataIndex = cell.model.dataIndex\n if (dataKey && dataIndex >= 0) {\n (cell as any)[spreadTo] = (data[dataIndex] || {})[dataKey]\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.get('text'))\n } else {\n bCell.rowspan -= 1\n }\n })\n this.remove(this.getCellsByRow(row))\n }\n })\n heights.splice(rows, 1)\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 (\n column === superCellColumn &&\n superCellColumn !== this.columns - 1 &&\n bCell.colspan > 1\n ) {\n aCell.rowspan = bCell.rowspan\n aCell.colspan = bCell.colspan - 1\n aCell.merged = false\n aCell.set('text', bCell.get('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.get('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.get('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.get('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.get('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.get('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 ? widths.filter((width: number, i: number) => i < this.columns).reduce((sum: number, width: number) => sum + width, 0) : this.columns\n }\n\n get heights_sum(): number {\n var heights = this.heights\n return heights ? heights.filter((height: number, i: number) => i < this.rows).reduce((sum: number, height: number) => sum + height, 0) : 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 oncellchanged(after: State, before: State) {\n if ('dataKey' in after || 'dataIndex' in after) {\n this.setCellsData()\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"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
type: string;
|
|
3
|
+
description: string;
|
|
4
|
+
group: string;
|
|
5
|
+
icon: any;
|
|
6
|
+
model: {
|
|
7
|
+
type: string;
|
|
8
|
+
top: number;
|
|
9
|
+
left: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
strokeStyle: string;
|
|
13
|
+
fillStyle: string;
|
|
14
|
+
lineWidth: number;
|
|
15
|
+
columns: number;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import icon from '../../assets/icon-data-list.png';
|
|
2
|
+
export default {
|
|
3
|
+
type: 'data-list',
|
|
4
|
+
description: 'data list',
|
|
5
|
+
group: 'table',
|
|
6
|
+
/* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
|
|
7
|
+
icon,
|
|
8
|
+
model: {
|
|
9
|
+
type: 'data-list',
|
|
10
|
+
top: 100,
|
|
11
|
+
left: 100,
|
|
12
|
+
width: 500,
|
|
13
|
+
height: 200,
|
|
14
|
+
strokeStyle: '#999',
|
|
15
|
+
fillStyle: 'white',
|
|
16
|
+
lineWidth: 2,
|
|
17
|
+
columns: 5
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-list.js","sourceRoot":"","sources":["../../src/templates/data-list.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,iCAAiC,CAAA;AAElD,eAAe;IACb,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,WAAW;IACxB,KAAK,EAAE,OAAO;IACd,gGAAgG;IAChG,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,MAAM;QACnB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;KACX;CACF,CAAA","sourcesContent":["import icon from '../../assets/icon-data-list.png'\n\nexport default {\n type: 'data-list',\n description: 'data list',\n group: 'table',\n /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */\n icon,\n model: {\n type: 'data-list',\n top: 100,\n left: 100,\n width: 500,\n height: 200,\n strokeStyle: '#999',\n fillStyle: 'white',\n lineWidth: 2,\n columns: 5\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
type: string;
|
|
3
|
+
description: string;
|
|
4
|
+
group: string;
|
|
5
|
+
icon: any;
|
|
6
|
+
model: {
|
|
7
|
+
type: string;
|
|
8
|
+
top: number;
|
|
9
|
+
left: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
strokeStyle: string;
|
|
13
|
+
fillStyle: string;
|
|
14
|
+
lineWidth: number;
|
|
15
|
+
columns: number;
|
|
16
|
+
};
|
|
17
|
+
}[];
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,aAAa,CAAA;AAClC,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA","sourcesContent":["import dataList from \"./data-list\"\nimport table from \"./table\"\n\nexport default [dataList, table]"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
type: string;
|
|
3
|
+
description: string;
|
|
4
|
+
group: string;
|
|
5
|
+
icon: any;
|
|
6
|
+
model: {
|
|
7
|
+
type: string;
|
|
8
|
+
top: number;
|
|
9
|
+
left: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
strokeStyle: string;
|
|
13
|
+
fillStyle: string;
|
|
14
|
+
lineWidth: number;
|
|
15
|
+
rows: number;
|
|
16
|
+
columns: number;
|
|
17
|
+
data: (string[] | number[])[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import icon from '../../assets/icon-table.png';
|
|
2
|
+
export default {
|
|
3
|
+
type: 'table',
|
|
4
|
+
description: 'table',
|
|
5
|
+
group: 'table',
|
|
6
|
+
/* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
|
|
7
|
+
icon,
|
|
8
|
+
model: {
|
|
9
|
+
type: 'table',
|
|
10
|
+
top: 100,
|
|
11
|
+
left: 100,
|
|
12
|
+
width: 500,
|
|
13
|
+
height: 200,
|
|
14
|
+
strokeStyle: '#999',
|
|
15
|
+
fillStyle: 'white',
|
|
16
|
+
lineWidth: 2,
|
|
17
|
+
rows: 5,
|
|
18
|
+
columns: 5,
|
|
19
|
+
data: [
|
|
20
|
+
['header1', 'header2', 'header3'],
|
|
21
|
+
[100, 200, 300],
|
|
22
|
+
[1000, 2000, 3000]
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/templates/table.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,6BAA6B,CAAA;AAE9C,eAAe;IACb,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,OAAO;IACpB,KAAK,EAAE,OAAO;IACd,gGAAgG;IAChG,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,MAAM;QACnB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,CAAC;QACV,IAAI,EAAE;YACJ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;YACjC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YACf,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;SACnB;KACF;CACF,CAAA","sourcesContent":["import icon from '../../assets/icon-table.png'\n\nexport default {\n type: 'table',\n description: 'table',\n group: 'table',\n /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */\n icon,\n model: {\n type: 'table',\n top: 100,\n left: 100,\n width: 500,\n height: 200,\n strokeStyle: '#999',\n fillStyle: 'white',\n lineWidth: 2,\n rows: 5,\n columns: 5,\n data: [\n ['header1', 'header2', 'header3'],\n [100, 200, 300],\n [1000, 2000, 3000]\n ]\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# table cell
|
|
2
|
+
## Properties
|
|
3
|
+
1. Border Style - 선택된 셀의 테두리의 굵기 및 색상을 변경. 스타일 값을 입력 후 ![Table-셀 스타일 종류][table-04] 중 적용할 셀의 버튼을 누른다.
|
|
4
|
+
![Table-셀 스타일][table-05]
|
|
5
|
+
1. Border Type - 선택 된 셀의 선의 종류를 변경. 테두리 종류를 선택 후 ![Table-셀 스타일 종류][table-04] 중 적용할 셀의 버튼을 누른다.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
[table-03]: ../images/table-03.png
|
|
10
|
+
|
|
11
|
+
[table-04]: ../images/table-04.png
|
|
12
|
+
|
|
13
|
+
[table-05]: ../images/table-05.png
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# table cell
|
|
2
|
+
## Properties
|
|
3
|
+
1. Border Style - Change the thickness and color of border of the selected cell. After enter the style value, type the button of cell in which will apply it among ![Table-셀 스타일 종류][table-04].
|
|
4
|
+
![Table-Cell style][table-05]
|
|
5
|
+
1. Border Type - Change the type of line of the selected cell. After select the border type, type the button of cell in which will apply it among ![Table-셀 스타일 종류][table-04].
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
[table-03]: ../images/table-03.png
|
|
10
|
+
|
|
11
|
+
[table-04]: ../images/table-04.png
|
|
12
|
+
|
|
13
|
+
[table-05]: ../images/table-05.png
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# table-cell
|
|
2
|
+
表格单元格
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## 属性
|
|
6
|
+
1. Border Style - 变更所选单元格的边框厚度以及颜色。输入样式值之后,输入![Table-单元格样式类型][table-04]中将要适用的单元格的按钮。
|
|
7
|
+
![Table-单元格样式][table-05]
|
|
8
|
+
1. Border Type - 变更所选单元格的线的类型。选择边框类型之后, 输入![Table-单元格样式类型][table-04]将要适用的单元格的按钮。
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
[table-04]: ../images/table-04.png
|
|
12
|
+
|
|
13
|
+
[table-05]: ../images/table-05.png
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# data-list
|
|
2
|
+
A component used to express multiple data in the form of a table.
|
|
3
|
+
The row is automatically changed according to the amount of data, and when the content exceeds the edge, a scroll is automatically created.
|
|
4
|
+
## properties
|
|
5
|
+
|
|
6
|
+
1. Column(Number)-Adjust the number of columns
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# table cell
|
|
2
|
+
## Properties
|
|
3
|
+
1. Border Style - 선택된 셀의 테두리의 굵기 및 색상을 변경. 스타일 값을 입력 후 ![Table-셀 스타일 종류][table-04] 중 적용할 셀의 버튼을 누른다.
|
|
4
|
+
![Table-셀 스타일][table-05]
|
|
5
|
+
1. Border Type - 선택 된 셀의 선의 종류를 변경. 테두리 종류를 선택 후 ![Table-셀 스타일 종류][table-04] 중 적용할 셀의 버튼을 누른다.
|
|
6
|
+
__(!!셀의 테두리와 테이블의 테두리는 서로 다르게 적용)__
|
|
7
|
+
1. Merge Cells - 선택된 셀을 병합(붙어있는 셀만 적용)
|
|
8
|
+
1. Split Cells - 셀의 병합을 해제
|
|
9
|
+
1. Delete Row - 선택된 행을 삭제
|
|
10
|
+
![Table-셀 행 삭제][table-06]
|
|
11
|
+
1. Delete Column - 선택된 열을 삭제
|
|
12
|
+
![Table-셀 열 삭제][table-07]
|
|
13
|
+
1. Insert Above - 선택된 셀의 위쪽에 새로운 셀 삽입
|
|
14
|
+
![Table-셀 위쪽 삽입][table-08]
|
|
15
|
+
1. Insert Below - 선택된 셀의 아래쪽에 새로운 셀 삽입
|
|
16
|
+
![Table-셀 아래쪽 삽입][table-09]
|
|
17
|
+
1. Insert Left - 선택된 셀의 왼쪽에 새로운 셀 삽입
|
|
18
|
+
![Table-셀 왼쪽 삽입][table-10]
|
|
19
|
+
1. Insert Right - 선택된 셀의 오른쪽에 새로운 셀 삽입
|
|
20
|
+
![Table-셀 오른쪽 삽입][table-11]
|
|
21
|
+
1. Distribute Horizontal - 선택된 열들의 넓이를 같게
|
|
22
|
+
![Table-셀 넓이 같게][table-12]
|
|
23
|
+
1. Distribute Vertical - 선택된 행들의 높이를 같게
|
|
24
|
+
![Table-셀 높이 같게][table-13]
|
|
25
|
+
1. Data Key - 테이블에 데이터를 매핑할 때 데이터 헤더의 필드명. DataKey는 열이 위치하는 번호가 아닌 반드시 필드명으로 입력한다.
|
|
26
|
+
1. Data Index - 테이블에 데이터를 매핑할 때 데이터 행의 위치. DataIndex는 헤더를 제외한 데이터의 시작번호를 0으로 한다.
|
|
27
|
+
![Table-데이터 예시][table-14]
|
|
28
|
+
위 사진과 같은 데이터가 왔을시 Date의 '01-03'의 데이터를 표시한다면 DataKey = Date, DataIndex = 2를 입력한다.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
[table-01]: ../images/table-01.png
|
|
33
|
+
|
|
34
|
+
[table-02]: ../images/table-02.png
|
|
35
|
+
|
|
36
|
+
[table-03]: ../images/table-03.png
|
|
37
|
+
|
|
38
|
+
[table-04]: ../images/table-04.png
|
|
39
|
+
|
|
40
|
+
[table-05]: ../images/table-05.png
|
|
41
|
+
|
|
42
|
+
[table-06]: ../images/table-06.png
|
|
43
|
+
|
|
44
|
+
[table-07]: ../images/table-07.png
|
|
45
|
+
|
|
46
|
+
[table-08]: ../images/table-08.png
|
|
47
|
+
|
|
48
|
+
[table-09]: ../images/table-09.png
|
|
49
|
+
|
|
50
|
+
[table-10]: ../images/table-10.png
|
|
51
|
+
|
|
52
|
+
[table-11]: ../images/table-11.png
|
|
53
|
+
|
|
54
|
+
[table-12]: ../images/table-12.png
|
|
55
|
+
|
|
56
|
+
[table-13]: ../images/table-13.png
|
|
57
|
+
|
|
58
|
+
[table-14]: ../images/table-14.png
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# table cell
|
|
2
|
+
## Properties
|
|
3
|
+
1. Border Style - Change the thickness and color of border of the selected cell. After enter the style value, type the button of cell in which will apply it among ![Table-셀 스타일 종류][table-04].
|
|
4
|
+
![Table-Cell style][table-05]
|
|
5
|
+
1. Border Type - Change the type of line of the selected cell. After select the border type, type the button of cell in which will apply it among ![Table-셀 스타일 종류][table-04].
|
|
6
|
+
__(!!Apply cell border and table border differently.)__
|
|
7
|
+
1. Merge Cells - Merge the selected cells. (Apply to the neighboring cells only)
|
|
8
|
+
1. Split Cells - Unmerge the cells.
|
|
9
|
+
1. Delete Row - Delete the selected row.
|
|
10
|
+
![Table-Delete the cell row][table-06]
|
|
11
|
+
1. Delete Column - Delete the selected column.
|
|
12
|
+
![Table-Delete the cell column][table-07]
|
|
13
|
+
1. Insert Above - Insert a new cell on the top of the selected cell.
|
|
14
|
+
![Table-Insert on the top of cell][table-08]
|
|
15
|
+
1. Insert Below - Insert a new cell on the bottom of the selected cell.
|
|
16
|
+
![Table-Insert on the bottom of cell][table-09]
|
|
17
|
+
1. Insert Left - Insert a new cell on the left of the selected cell.
|
|
18
|
+
![Table-Insert on the left of cell][table-10]
|
|
19
|
+
1. Insert Right - Insert a new cell on the right of the selected cell.
|
|
20
|
+
![Table-Insert on the right of cell][table-11]
|
|
21
|
+
1. Distribute Horizontally - Make the width of the selected columns be the same.
|
|
22
|
+
![Table-Make the cell width the same][table-12]
|
|
23
|
+
1. Distribute Vertically - Make the height of the selected rows the same.
|
|
24
|
+
![Table-Make the cell height the same][table-13]
|
|
25
|
+
1. Data Key - The field name of data header when mapping the data in table. DataKey must be entered as the field name rather than the number of column.
|
|
26
|
+
1. Data Index - The location of data row when mapping the data in table. DataIndex makes the start number of data except the header as 0.
|
|
27
|
+
![Table-데이터 예시][table-14]
|
|
28
|
+
When receive the data as in the above image, if want to display the data of ‘01-03’ of Date, you can enter DataKey = Date, DataIndex = 2.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
[table-01]: ../images/table-01.png
|
|
33
|
+
|
|
34
|
+
[table-02]: ../images/table-02.png
|
|
35
|
+
|
|
36
|
+
[table-03]: ../images/table-03.png
|
|
37
|
+
|
|
38
|
+
[table-04]: ../images/table-04.png
|
|
39
|
+
|
|
40
|
+
[table-05]: ../images/table-05.png
|
|
41
|
+
|
|
42
|
+
[table-06]: ../images/table-06.png
|
|
43
|
+
|
|
44
|
+
[table-07]: ../images/table-07.png
|
|
45
|
+
|
|
46
|
+
[table-08]: ../images/table-08.png
|
|
47
|
+
|
|
48
|
+
[table-09]: ../images/table-09.png
|
|
49
|
+
|
|
50
|
+
[table-10]: ../images/table-10.png
|
|
51
|
+
|
|
52
|
+
[table-11]: ../images/table-11.png
|
|
53
|
+
|
|
54
|
+
[table-12]: ../images/table-12.png
|
|
55
|
+
|
|
56
|
+
[table-13]: ../images/table-13.png
|
|
57
|
+
|
|
58
|
+
[table-14]: ../images/table-14.png
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# table-cell
|
|
2
|
+
表格单元格
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## 属性
|
|
6
|
+
1. Border Style - 变更所选单元格的边框厚度以及颜色。输入样式值之后,输入![Table-单元格样式类型][table-04]中将要适用的单元格的按钮。
|
|
7
|
+
![Table-单元格样式][table-05]
|
|
8
|
+
1. Border Type - 变更所选单元格的线的类型。选择边框类型之后, 输入![Table-单元格样式类型][table-04]将要适用的单元格的按钮。
|
|
9
|
+
__(!!适用不同的单元格边框和表格边框。)__
|
|
10
|
+
1. Merge Cells - 合并所选单元格(只适用于邻近的单元格。)
|
|
11
|
+
1. Split Cells - 解除单元格的合并。
|
|
12
|
+
1. Delete Row - 删除所选行。
|
|
13
|
+
![Table-删除单元格的行][table-06]
|
|
14
|
+
1. Delete Column - 删除所选列。
|
|
15
|
+
![Table-删除单元格的列][table-07]
|
|
16
|
+
1. Insert Above - 在所选单元格的上方,插入新的单元格。
|
|
17
|
+
![Table-插入单元格上方][table-08]
|
|
18
|
+
1. Insert Below - 在所选单元格的下方,插入新的单元格。
|
|
19
|
+
![Table-插入单元格下方][table-09]
|
|
20
|
+
1. Insert Left - 在所选单元格的左侧,插入新的单元格。
|
|
21
|
+
![Table-插入单元格左侧][table-10]
|
|
22
|
+
1. Insert Right - 在所选单元格的右侧,插入新的单元格。
|
|
23
|
+
![Table-插入单元格右侧][table-11]
|
|
24
|
+
1. Distribute Horizontal - 统一所选列的宽度。
|
|
25
|
+
![Table-统一单元格宽度][table-12]
|
|
26
|
+
1. Distribute Vertical - 统一所选行的高度。
|
|
27
|
+
![Table-统一单元格高度][table-13]
|
|
28
|
+
1. Data Key - 当在表格匹配数据时,数据标题的字段名称。一定要用非列所位置的号码的、字段名称输入Data Key。
|
|
29
|
+
1. Data Index - 当在表格匹配数据时,数据行的位置。DataIndex以除标题的、数据的起始号码为0。
|
|
30
|
+
![Table-数据例题][table-14]
|
|
31
|
+
当收到如上述图片的数据时,如果想要显示Date的‘01-03’的数据,可以输入DataKey = Date,DataIndex = 2。
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
[table-01]: ../images/table-01.png
|
|
36
|
+
|
|
37
|
+
[table-02]: ../images/table-02.png
|
|
38
|
+
|
|
39
|
+
[table-03]: ../images/table-03.png
|
|
40
|
+
|
|
41
|
+
[table-04]: ../images/table-04.png
|
|
42
|
+
|
|
43
|
+
[table-05]: ../images/table-05.png
|
|
44
|
+
|
|
45
|
+
[table-06]: ../images/table-06.png
|
|
46
|
+
|
|
47
|
+
[table-07]: ../images/table-07.png
|
|
48
|
+
|
|
49
|
+
[table-08]: ../images/table-08.png
|
|
50
|
+
|
|
51
|
+
[table-09]: ../images/table-09.png
|
|
52
|
+
|
|
53
|
+
[table-10]: ../images/table-10.png
|
|
54
|
+
|
|
55
|
+
[table-11]: ../images/table-11.png
|
|
56
|
+
|
|
57
|
+
[table-12]: ../images/table-12.png
|
|
58
|
+
|
|
59
|
+
[table-13]: ../images/table-13.png
|
|
60
|
+
|
|
61
|
+
[table-14]: ../images/table-14.png
|