@operato/scene-table 9.0.0-beta.1 → 9.0.0-beta.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"data-cell.js","sourceRoot":"","sources":["../../src/data-list/data-cell.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport { Component, ComponentNature, RectPath, Style } from '@hatiolab/things-scene'\n\nimport { Table } from '../'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'editor-table',\n label: '',\n name: '',\n property: {\n merge: false,\n split: false\n }\n }\n ],\n 'value-property': 'value',\n help: 'scene/component/data-cell'\n}\n\nexport default class DataCell extends RectPath(Component) {\n get nature() {\n return NATURE\n }\n\n get value() {\n return this.state.value\n }\n\n set value(value) {\n this.setState({\n value,\n data: value\n })\n }\n\n renderBorder(context: CanvasRenderingContext2D, x: number, y: number, to_x: number, to_y: number, style: Style) {\n if (style && style.strokeStyle && style.lineWidth && style.lineDash) {\n context.beginPath()\n context.moveTo(x, y)\n context.lineTo(to_x, to_y)\n Component.drawStroke(context, style)\n }\n }\n\n render(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n\n var { border } = this.state\n border ||= {}\n\n // Cell 채우기.\n context.beginPath()\n context.lineWidth = 0\n context.rect(left, top, width, height)\n this.drawFill(context)\n\n // Border 그리기\n var parent = this.parent as Table\n var idx = parent.components.indexOf(this)\n var columns = parent.columns || 1\n\n this.renderBorder(context, left, top, left + width, top, border.top)\n this.renderBorder(context, left, top + height, left, top, border.left)\n if ((idx + 1) % columns == 0) {\n /* if this filed is right most, draw right side border. */\n this.renderBorder(context, left + width, top, left + width, top + height, border.right)\n }\n this.renderBorder(context, left + width, top + height, left, top + height, border.bottom)\n }\n}\n\nComponent.register('data-cell', DataCell)\n"]}
1
+ {"version":3,"file":"data-cell.js","sourceRoot":"","sources":["../../src/data-list/data-cell.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport { Component, ComponentNature, RectPath, Style } from '@hatiolab/things-scene'\n\nimport { Table } from '../index.js'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'editor-table',\n label: '',\n name: '',\n property: {\n merge: false,\n split: false\n }\n }\n ],\n 'value-property': 'value',\n help: 'scene/component/data-cell'\n}\n\nexport default class DataCell extends RectPath(Component) {\n get nature() {\n return NATURE\n }\n\n get value() {\n return this.state.value\n }\n\n set value(value) {\n this.setState({\n value,\n data: value\n })\n }\n\n renderBorder(context: CanvasRenderingContext2D, x: number, y: number, to_x: number, to_y: number, style: Style) {\n if (style && style.strokeStyle && style.lineWidth && style.lineDash) {\n context.beginPath()\n context.moveTo(x, y)\n context.lineTo(to_x, to_y)\n Component.drawStroke(context, style)\n }\n }\n\n render(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n\n var { border } = this.state\n border ||= {}\n\n // Cell 채우기.\n context.beginPath()\n context.lineWidth = 0\n context.rect(left, top, width, height)\n this.drawFill(context)\n\n // Border 그리기\n var parent = this.parent as Table\n var idx = parent.components.indexOf(this)\n var columns = parent.columns || 1\n\n this.renderBorder(context, left, top, left + width, top, border.top)\n this.renderBorder(context, left, top + height, left, top, border.left)\n if ((idx + 1) % columns == 0) {\n /* if this filed is right most, draw right side border. */\n this.renderBorder(context, left + width, top, left + width, top + height, border.right)\n }\n this.renderBorder(context, left + width, top + height, left, top + height, border.bottom)\n }\n}\n\nComponent.register('data-cell', DataCell)\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"data-list-layout.js","sourceRoot":"","sources":["../../src/data-list/data-list-layout.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, Container, Layout } from '@hatiolab/things-scene'\n\nimport DataCell from './data-cell'\nimport DataList from './data-list'\n\nvar DataListLayout = {\n reflow: function (container: Container) {\n var layoutConfig = container.getState('layoutConfig')\n\n var columns = (layoutConfig && layoutConfig.columns) || container.getState('columns')\n var rows = (layoutConfig && layoutConfig.rows) || container.getState('rows')\n var widths = (layoutConfig && layoutConfig.widths) || container.getState('widths')\n var heights = (layoutConfig && layoutConfig.heights) || container.getState('heights')\n var { offset = { x: 0, y: 0 } } = container.state\n\n var widths_sum = widths\n ? widths.filter((width: number, i: number) => i < columns).reduce((sum: number, width: number) => sum + width, 0)\n : columns\n var heights_sum = heights\n ? heights.filter((height: number, i: number) => i < rows).reduce((sum: number, height: number) => sum + height, 0)\n : rows\n\n var inside = container.textBounds\n var paddingLeft = container.getState('paddingLeft') || 0\n var paddingTop = container.getState('paddingTop') || 0\n\n var width_unit = inside.width / widths_sum\n var height_unit = inside.height / heights_sum\n\n var x = offset.x\n var y = offset.y\n var components = container.components\n\n components.forEach((component, idx) => {\n let w = widths ? widths[idx % columns] : 1\n let h = heights ? heights[0] : 1\n\n let left = paddingLeft + x\n let top = paddingTop + y\n let width = width_unit * w\n let height = height_unit * h\n\n component.bounds = {\n left,\n top,\n width,\n height\n }\n component.set('rotation', 0)\n\n if (idx % columns == columns - 1) {\n x = 0\n y += h * height_unit\n } else {\n x += w * width_unit\n }\n })\n },\n\n capturables: function (container: Container) {\n return container.components\n },\n\n drawables: function (container: Container) {\n return container.components\n },\n\n isStuck: function (component: Component) {\n return true\n },\n\n /*\n * 레이아웃별로, 키보드 방향키 등을 사용해서 네비게이션 할 수 있는 기능을 제공할 수 있다.\n * 하나의 컴포넌트만 선택되어있고, 키보드 이벤트가 발생했을 때 호출되게 된다.\n * keyNavigate 메쏘드가 정의되어 있지 않으면, 'Tab' 키에 대한 네비게이션만 작동한다.\n * 'Tab'키에 의한 네비게이션은 모든 레이아웃에 공통으로 적용된다.\n */\n keyNavigate: function (container: Container, component: Component, e: KeyboardEvent) {\n var layoutConfig = container.getState('layoutConfig')\n\n var columns = (layoutConfig && layoutConfig.columns) || container.getState('columns')\n var rows = (layoutConfig && layoutConfig.rows) || container.getState('rows')\n\n var { row, column } = (container as DataList).getRowColumn(component as DataCell)\n\n switch (e.code) {\n case 'ArrowUp':\n if (row > 0) return container.getAt((row - 1) * columns + column)\n break\n case 'ArrowDown':\n if (row < rows - 1) return container.getAt((row + 1) * columns + column)\n break\n case 'ArrowRight':\n if (column < columns - 1) return container.getAt(row * columns + column + 1)\n break\n case 'ArrowLeft':\n if (column > 0) return container.getAt(row * columns + column - 1)\n break\n default:\n return component\n }\n },\n\n /*\n * 하위 컴포넌트를 영역으로 선택하는 경우에, 바운드에 join만 되어도 선택된 것으로 판단하도록 한다.\n * joinType이 false이거나, 정의되어있지 않으면, 바운드에 포함되어야 선택된 것으로 판단한다.\n */\n joinType: true\n}\n\nLayout.register('data-list', DataListLayout)\n\nexport default DataListLayout\n"]}
1
+ {"version":3,"file":"data-list-layout.js","sourceRoot":"","sources":["../../src/data-list/data-list-layout.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, Container, Layout } from '@hatiolab/things-scene'\n\nimport DataCell from './data-cell.js'\nimport DataList from './data-list.js'\n\nvar DataListLayout = {\n reflow: function (container: Container) {\n var layoutConfig = container.getState('layoutConfig')\n\n var columns = (layoutConfig && layoutConfig.columns) || container.getState('columns')\n var rows = (layoutConfig && layoutConfig.rows) || container.getState('rows')\n var widths = (layoutConfig && layoutConfig.widths) || container.getState('widths')\n var heights = (layoutConfig && layoutConfig.heights) || container.getState('heights')\n var { offset = { x: 0, y: 0 } } = container.state\n\n var widths_sum = widths\n ? widths.filter((width: number, i: number) => i < columns).reduce((sum: number, width: number) => sum + width, 0)\n : columns\n var heights_sum = heights\n ? heights.filter((height: number, i: number) => i < rows).reduce((sum: number, height: number) => sum + height, 0)\n : rows\n\n var inside = container.textBounds\n var paddingLeft = container.getState('paddingLeft') || 0\n var paddingTop = container.getState('paddingTop') || 0\n\n var width_unit = inside.width / widths_sum\n var height_unit = inside.height / heights_sum\n\n var x = offset.x\n var y = offset.y\n var components = container.components\n\n components.forEach((component, idx) => {\n let w = widths ? widths[idx % columns] : 1\n let h = heights ? heights[0] : 1\n\n let left = paddingLeft + x\n let top = paddingTop + y\n let width = width_unit * w\n let height = height_unit * h\n\n component.bounds = {\n left,\n top,\n width,\n height\n }\n component.set('rotation', 0)\n\n if (idx % columns == columns - 1) {\n x = 0\n y += h * height_unit\n } else {\n x += w * width_unit\n }\n })\n },\n\n capturables: function (container: Container) {\n return container.components\n },\n\n drawables: function (container: Container) {\n return container.components\n },\n\n isStuck: function (component: Component) {\n return true\n },\n\n /*\n * 레이아웃별로, 키보드 방향키 등을 사용해서 네비게이션 할 수 있는 기능을 제공할 수 있다.\n * 하나의 컴포넌트만 선택되어있고, 키보드 이벤트가 발생했을 때 호출되게 된다.\n * keyNavigate 메쏘드가 정의되어 있지 않으면, 'Tab' 키에 대한 네비게이션만 작동한다.\n * 'Tab'키에 의한 네비게이션은 모든 레이아웃에 공통으로 적용된다.\n */\n keyNavigate: function (container: Container, component: Component, e: KeyboardEvent) {\n var layoutConfig = container.getState('layoutConfig')\n\n var columns = (layoutConfig && layoutConfig.columns) || container.getState('columns')\n var rows = (layoutConfig && layoutConfig.rows) || container.getState('rows')\n\n var { row, column } = (container as DataList).getRowColumn(component as DataCell)\n\n switch (e.code) {\n case 'ArrowUp':\n if (row > 0) return container.getAt((row - 1) * columns + column)\n break\n case 'ArrowDown':\n if (row < rows - 1) return container.getAt((row + 1) * columns + column)\n break\n case 'ArrowRight':\n if (column < columns - 1) return container.getAt(row * columns + column + 1)\n break\n case 'ArrowLeft':\n if (column > 0) return container.getAt(row * columns + column - 1)\n break\n default:\n return component\n }\n },\n\n /*\n * 하위 컴포넌트를 영역으로 선택하는 경우에, 바운드에 join만 되어도 선택된 것으로 판단하도록 한다.\n * joinType이 false이거나, 정의되어있지 않으면, 바운드에 포함되어야 선택된 것으로 판단한다.\n */\n joinType: true\n}\n\nLayout.register('data-list', DataListLayout)\n\nexport default DataListLayout\n"]}
@@ -1,7 +1,7 @@
1
- import './data-cell';
2
- import './data-list-layout';
1
+ import './data-cell.js';
2
+ import './data-list-layout.js';
3
3
  import { Component, ComponentNature, Container, Control, State, Style } from '@hatiolab/things-scene';
4
- import { WHERE } from '../helper-functions';
4
+ import { WHERE } from '../helper-functions.js';
5
5
  export default class DataList extends Container {
6
6
  reflowing: boolean;
7
7
  postrender(context: CanvasRenderingContext2D): void;
@@ -1,10 +1,10 @@
1
1
  /*
2
2
  * Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
- import './data-cell';
5
- import './data-list-layout';
4
+ import './data-cell.js';
5
+ import './data-list-layout.js';
6
6
  import { Component, Container, Layout, Model } from '@hatiolab/things-scene';
7
- import { above, after, array, before, below, buildCopiedCell, buildNewCell, CLEAR_STYLE, columnControlHandler, isBottomMost, isLeftMost, isRightMost, isTopMost, rowControlHandler, setCellBorder, adjustCellWidth, adjustCellHeight } from '../helper-functions';
7
+ import { above, after, array, before, below, buildCopiedCell, buildNewCell, CLEAR_STYLE, columnControlHandler, isBottomMost, isLeftMost, isRightMost, isTopMost, rowControlHandler, setCellBorder, adjustCellWidth, adjustCellHeight } from '../helper-functions.js';
8
8
  const NATURE = {
9
9
  mutable: false,
10
10
  resizable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"data-list.js","sourceRoot":"","sources":["../../src/data-list/data-list.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './data-cell'\nimport './data-list-layout'\n\nimport { Component, ComponentNature, Container, Control, Layout, Model, 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'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'columns',\n name: 'columns',\n property: 'columns'\n }\n ],\n 'value-property': 'data',\n help: 'scene/component/data-list'\n}\n\nexport default class DataList extends Container {\n reflowing: boolean = false\n\n postrender(context: CanvasRenderingContext2D) {\n super.postrender(context)\n\n // child component들을 다 그린 후에 scrollbar를 표현한다.\n if (this.app.isViewMode) {\n this.renderScrollbar(context)\n }\n }\n\n renderScrollbar(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n var { offset = { x: 0, y: 0 }, data } = this.state\n\n var fullHeight = ((data && data.length) || 0) * (this.heights[0] / this.heights_sum) * height\n\n if (fullHeight <= height) {\n return\n }\n\n var start = (-offset.y / fullHeight) * height\n var end = ((-offset.y + height) / fullHeight) * height\n\n context.strokeStyle = 'gray'\n context.lineWidth = 10\n context.globalAlpha = 0.3\n\n context.beginPath()\n context.moveTo(left + width - 10, top + start)\n context.lineTo(left + width - 10, top + end)\n\n context.stroke()\n }\n\n created() {\n this.set('rows', 2)\n\n var rows = 1\n\n var tobeSize = 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('data-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 < rows) this.set('heights', this.heights)\n }\n\n _onwheel(e: WheelEvent) {\n e.stopPropagation()\n\n const { height } = this.bounds\n const { offset = { x: 0, y: 0 } } = this.state\n\n const recordHeight = (this.heights[0] / this.heights.reduce((sum: number, height: number) => sum + height)) * height\n\n const minX = 0\n const minY = this.data && this.data.length ? Math.min(-recordHeight * this.data.length + height, 0) : 0\n\n if (e.deltaY === 0 && e.deltaX === 0) return\n\n const x = e.deltaX + offset.x\n const y = -e.deltaY + offset.y\n\n // 계산된 새로운 offset이 경계 내에 있는지 확인\n const clampedX = Math.max(Math.min(0, x), minX)\n const clampedY = Math.max(Math.min(0, y), minY)\n\n // offset이 실제로 변경되는 경우에만 preventDefault 호출\n if (offset.x !== clampedX || offset.y !== clampedY) {\n this.setState({\n offset: {\n x: clampedX,\n y: clampedY\n }\n })\n\n e.preventDefault() // 기본 동작 방지 (스크롤 막기)\n }\n }\n\n private __START_OFFSET?: { x: number; y: number }\n private __START_Y?: number\n\n _ontouchstart(e: TouchEvent) {\n e.stopPropagation()\n // e.preventDefault()\n\n this.__START_OFFSET = this.state.offset || {\n x: 0,\n y: 0\n }\n this.__START_Y = e.touches[0].clientY // 터치의 Y 좌표 저장\n }\n\n _ontouchmove(e: TouchEvent) {\n e.stopPropagation()\n\n if (!this.__START_OFFSET) {\n return\n }\n\n const { height } = this.bounds\n const recordHeight = (this.heights[0] / this.heights.reduce((sum: number, height: number) => sum + height)) * height\n const minY = this.data && this.data.length ? Math.min(-recordHeight * this.data.length + height, 0) : 0\n\n const x = 0\n const y = this.__START_OFFSET.y + (e.touches[0].clientY - this.__START_Y!) / this.rootModel.state.scale.y\n\n // 새로운 offset 계산 후 경계 내로 클램핑\n const clampedY = Math.max(Math.min(0, y), minY)\n\n const offset = this.state.offset || { x: 0, y: 0 }\n\n // offset이 실제로 변경될 수 있는 경우에만 preventDefault 호출\n if (offset.y !== clampedY) {\n this.setState('offset', {\n x: 0,\n y: clampedY\n })\n\n e.preventDefault() // 기본 동작 방지 (스크롤 막기)\n }\n }\n\n _ontouchend(e: TouchEvent) {\n e.stopPropagation()\n // e.preventDefault()\n\n delete this.__START_OFFSET\n delete this.__START_Y\n }\n\n get layout() {\n return Layout.get('data-list')\n }\n\n containable(component: Component) {\n return component.getState('type') == 'data-cell'\n }\n\n get focusible() {\n /* 이 컨테이너에는 컴포넌트를 임의로 추가 및 삭제할 수 없도록 함 */\n return false\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 ? heights.filter((height, i) => i < this.rows).reduce((sum, height) => sum + height, 0) : this.rows\n }\n\n get widths(): number[] {\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(): number[] {\n var heights = this.getState('heights')\n var rows = 2\n\n if (!heights) {\n return array(1, rows)\n }\n\n if (heights.length < rows) return heights.concat(array(1, rows - heights.length))\n else if (heights.length > rows) return heights.slice(0, rows)\n\n return heights\n }\n\n get columns() {\n return Number(this.getState('columns'))\n }\n\n get rows(): number {\n /* 1 for first record fields, 1 for rest record fields */\n return 2\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 => {\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 => {\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 ('data' in after) {\n this.setCellsData()\n }\n\n if ('columns' in after) {\n let { columns } = this\n\n this.buildCells(columns, Number(before.columns))\n }\n }\n\n get eventMap() {\n return {\n '(self)': {\n '(descendant)': {\n change: this.oncellchanged\n },\n '(all)': {\n wheel: this._onwheel,\n touchstart: this._ontouchstart,\n touchmove: this._ontouchmove,\n touchend: this._ontouchend\n }\n }\n }\n }\n\n oncellchanged(after: State, before: State, hint: { origin: Component }) {\n if (this.reflowing) {\n return\n }\n\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 adjustCellHeight(this, 0, diff)\n }\n }\n }\n\n reflow() {\n this.reflowing = true\n super.reflow()\n this.reflowing = false\n }\n\n setCellsData() {\n if (!this.app.isViewMode) {\n return\n }\n\n var data = this.data || []\n if (!(data instanceof Array)) {\n data = [data]\n }\n\n /* 기존의 레코드를 모두 삭제 (템플릿 레코드만 남긴다.) */\n this.remove(this.components.slice(this.columns), true /* silent - do not let root-container refreshMappings */)\n\n /* template 레코드의 데이터를 클리어시킨다 */\n var templates = this.getCellsByRow(0)\n templates.forEach(field => {\n field.data = ''\n })\n\n /* 데이터의 크기만큼 새로운 레코드를 만든다 */\n if (data.length > 1) {\n let newbies: Component[] = []\n\n for (let i = 1; i < data.length; i++) {\n newbies = newbies.concat(\n templates.map(field => {\n const { refid, id, data, ...org } = field.model\n return Model.compile(org, this.app)\n })\n )\n }\n\n this.add(newbies, true /* silent - do not let root-container refreshMappings */)\n }\n\n data.forEach((record: any[], idx: number) => {\n let data = {\n _idx: idx,\n ...record\n }\n let row = this.getCellsByRow(idx)\n row.forEach(field => {\n // @ts-ignore TODO - remove this comment later\n field.value = data\n })\n })\n\n /* 스크롤 위치를 조정 */\n var { height } = this.bounds\n var fullHeight = data.length * (this.heights[0] / this.heights_sum) * height\n\n if (fullHeight <= height) {\n // 데이터가 화면보다 작을 경우, 스크롤 위치를 최상단으로 이동\n this.setState({\n offset: {\n x: 0,\n y: 0\n }\n })\n } else {\n // 데이터가 화면보다 클 경우, 현재 스크롤 위치를 보정\n var minY = Math.min(-fullHeight + height, 0)\n var { offset = { x: 0, y: 0 } } = this.state\n\n this.setState({\n offset: {\n x: 0,\n y: Math.max(minY, offset.y)\n }\n })\n }\n }\n\n setCellsStyle(cells: Component[], style: Style, where: WHERE, clearBefore = true) {\n var components = this.components\n var total = components.length\n var columns = this.getState('columns')\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 buildCells(newcolumns: number, oldcolumns: number) {\n var minrows = 1\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('data-cell', this.app), r * newcolumns + c)\n }\n }\n } else if (newcolumns < oldcolumns) {\n let removals = []\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])\n }\n }\n\n this.remove(removals)\n }\n\n this.set({\n widths: this.widths,\n heights: this.heights\n })\n\n this.setCellsData()\n }\n\n getRowColumn(cell: Component) {\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): Component[] {\n return this.components.slice(row * this.columns, (row + 1) * this.columns)\n }\n\n getCellsByColumn(column: number): Component[] {\n var cells = []\n for (let i = 0; i < this.rows; i++) cells.push(this.components[this.columns * i + column])\n\n return cells\n }\n\n mergeCells(cells: Component[]) {}\n\n splitCells(cells: Component[]) {}\n\n deleteRows(cells: Component[]) {}\n\n deleteColumns(cells: Component[]) {\n // 만약 선택한 셀이 병합된 셀이라면 삭제하지 않는다.\n // if (cells[0].merged == true) return false\n\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 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: Component[]) {}\n\n insertCellsBelow(cells: Component[]) {}\n\n insertCellsLeft(cells: Component[]) {\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 // 열 2개 이상은 추가 안함. 임시로 막아놓음\n if (columns.length >= 2) return false\n let insertionColumnPosition = columns[0]\n let newbieColumnWidths: number[] = []\n let newbieCells: Component[] = []\n columns.forEach(column => {\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 }\n\n insertCellsRight(cells: Component[]) {\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: Component[] = []\n columns.forEach(column => {\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 }\n\n distributeHorizontal(cells: Component[]) {\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: Component[]) {}\n}\n\nComponent.register('data-list', DataList)\n"]}
1
+ {"version":3,"file":"data-list.js","sourceRoot":"","sources":["../../src/data-list/data-list.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './data-cell.js'\nimport './data-list-layout.js'\n\nimport { Component, ComponentNature, Container, Control, Layout, Model, 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'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'columns',\n name: 'columns',\n property: 'columns'\n }\n ],\n 'value-property': 'data',\n help: 'scene/component/data-list'\n}\n\nexport default class DataList extends Container {\n reflowing: boolean = false\n\n postrender(context: CanvasRenderingContext2D) {\n super.postrender(context)\n\n // child component들을 다 그린 후에 scrollbar를 표현한다.\n if (this.app.isViewMode) {\n this.renderScrollbar(context)\n }\n }\n\n renderScrollbar(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n var { offset = { x: 0, y: 0 }, data } = this.state\n\n var fullHeight = ((data && data.length) || 0) * (this.heights[0] / this.heights_sum) * height\n\n if (fullHeight <= height) {\n return\n }\n\n var start = (-offset.y / fullHeight) * height\n var end = ((-offset.y + height) / fullHeight) * height\n\n context.strokeStyle = 'gray'\n context.lineWidth = 10\n context.globalAlpha = 0.3\n\n context.beginPath()\n context.moveTo(left + width - 10, top + start)\n context.lineTo(left + width - 10, top + end)\n\n context.stroke()\n }\n\n created() {\n this.set('rows', 2)\n\n var rows = 1\n\n var tobeSize = 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('data-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 < rows) this.set('heights', this.heights)\n }\n\n _onwheel(e: WheelEvent) {\n e.stopPropagation()\n\n const { height } = this.bounds\n const { offset = { x: 0, y: 0 } } = this.state\n\n const recordHeight = (this.heights[0] / this.heights.reduce((sum: number, height: number) => sum + height)) * height\n\n const minX = 0\n const minY = this.data && this.data.length ? Math.min(-recordHeight * this.data.length + height, 0) : 0\n\n if (e.deltaY === 0 && e.deltaX === 0) return\n\n const x = e.deltaX + offset.x\n const y = -e.deltaY + offset.y\n\n // 계산된 새로운 offset이 경계 내에 있는지 확인\n const clampedX = Math.max(Math.min(0, x), minX)\n const clampedY = Math.max(Math.min(0, y), minY)\n\n // offset이 실제로 변경되는 경우에만 preventDefault 호출\n if (offset.x !== clampedX || offset.y !== clampedY) {\n this.setState({\n offset: {\n x: clampedX,\n y: clampedY\n }\n })\n\n e.preventDefault() // 기본 동작 방지 (스크롤 막기)\n }\n }\n\n private __START_OFFSET?: { x: number; y: number }\n private __START_Y?: number\n\n _ontouchstart(e: TouchEvent) {\n e.stopPropagation()\n // e.preventDefault()\n\n this.__START_OFFSET = this.state.offset || {\n x: 0,\n y: 0\n }\n this.__START_Y = e.touches[0].clientY // 터치의 Y 좌표 저장\n }\n\n _ontouchmove(e: TouchEvent) {\n e.stopPropagation()\n\n if (!this.__START_OFFSET) {\n return\n }\n\n const { height } = this.bounds\n const recordHeight = (this.heights[0] / this.heights.reduce((sum: number, height: number) => sum + height)) * height\n const minY = this.data && this.data.length ? Math.min(-recordHeight * this.data.length + height, 0) : 0\n\n const x = 0\n const y = this.__START_OFFSET.y + (e.touches[0].clientY - this.__START_Y!) / this.rootModel.state.scale.y\n\n // 새로운 offset 계산 후 경계 내로 클램핑\n const clampedY = Math.max(Math.min(0, y), minY)\n\n const offset = this.state.offset || { x: 0, y: 0 }\n\n // offset이 실제로 변경될 수 있는 경우에만 preventDefault 호출\n if (offset.y !== clampedY) {\n this.setState('offset', {\n x: 0,\n y: clampedY\n })\n\n e.preventDefault() // 기본 동작 방지 (스크롤 막기)\n }\n }\n\n _ontouchend(e: TouchEvent) {\n e.stopPropagation()\n // e.preventDefault()\n\n delete this.__START_OFFSET\n delete this.__START_Y\n }\n\n get layout() {\n return Layout.get('data-list')\n }\n\n containable(component: Component) {\n return component.getState('type') == 'data-cell'\n }\n\n get focusible() {\n /* 이 컨테이너에는 컴포넌트를 임의로 추가 및 삭제할 수 없도록 함 */\n return false\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 ? heights.filter((height, i) => i < this.rows).reduce((sum, height) => sum + height, 0) : this.rows\n }\n\n get widths(): number[] {\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(): number[] {\n var heights = this.getState('heights')\n var rows = 2\n\n if (!heights) {\n return array(1, rows)\n }\n\n if (heights.length < rows) return heights.concat(array(1, rows - heights.length))\n else if (heights.length > rows) return heights.slice(0, rows)\n\n return heights\n }\n\n get columns() {\n return Number(this.getState('columns'))\n }\n\n get rows(): number {\n /* 1 for first record fields, 1 for rest record fields */\n return 2\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 => {\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 => {\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 ('data' in after) {\n this.setCellsData()\n }\n\n if ('columns' in after) {\n let { columns } = this\n\n this.buildCells(columns, Number(before.columns))\n }\n }\n\n get eventMap() {\n return {\n '(self)': {\n '(descendant)': {\n change: this.oncellchanged\n },\n '(all)': {\n wheel: this._onwheel,\n touchstart: this._ontouchstart,\n touchmove: this._ontouchmove,\n touchend: this._ontouchend\n }\n }\n }\n }\n\n oncellchanged(after: State, before: State, hint: { origin: Component }) {\n if (this.reflowing) {\n return\n }\n\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 adjustCellHeight(this, 0, diff)\n }\n }\n }\n\n reflow() {\n this.reflowing = true\n super.reflow()\n this.reflowing = false\n }\n\n setCellsData() {\n if (!this.app.isViewMode) {\n return\n }\n\n var data = this.data || []\n if (!(data instanceof Array)) {\n data = [data]\n }\n\n /* 기존의 레코드를 모두 삭제 (템플릿 레코드만 남긴다.) */\n this.remove(this.components.slice(this.columns), true /* silent - do not let root-container refreshMappings */)\n\n /* template 레코드의 데이터를 클리어시킨다 */\n var templates = this.getCellsByRow(0)\n templates.forEach(field => {\n field.data = ''\n })\n\n /* 데이터의 크기만큼 새로운 레코드를 만든다 */\n if (data.length > 1) {\n let newbies: Component[] = []\n\n for (let i = 1; i < data.length; i++) {\n newbies = newbies.concat(\n templates.map(field => {\n const { refid, id, data, ...org } = field.model\n return Model.compile(org, this.app)\n })\n )\n }\n\n this.add(newbies, true /* silent - do not let root-container refreshMappings */)\n }\n\n data.forEach((record: any[], idx: number) => {\n let data = {\n _idx: idx,\n ...record\n }\n let row = this.getCellsByRow(idx)\n row.forEach(field => {\n // @ts-ignore TODO - remove this comment later\n field.value = data\n })\n })\n\n /* 스크롤 위치를 조정 */\n var { height } = this.bounds\n var fullHeight = data.length * (this.heights[0] / this.heights_sum) * height\n\n if (fullHeight <= height) {\n // 데이터가 화면보다 작을 경우, 스크롤 위치를 최상단으로 이동\n this.setState({\n offset: {\n x: 0,\n y: 0\n }\n })\n } else {\n // 데이터가 화면보다 클 경우, 현재 스크롤 위치를 보정\n var minY = Math.min(-fullHeight + height, 0)\n var { offset = { x: 0, y: 0 } } = this.state\n\n this.setState({\n offset: {\n x: 0,\n y: Math.max(minY, offset.y)\n }\n })\n }\n }\n\n setCellsStyle(cells: Component[], style: Style, where: WHERE, clearBefore = true) {\n var components = this.components\n var total = components.length\n var columns = this.getState('columns')\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 buildCells(newcolumns: number, oldcolumns: number) {\n var minrows = 1\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('data-cell', this.app), r * newcolumns + c)\n }\n }\n } else if (newcolumns < oldcolumns) {\n let removals = []\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])\n }\n }\n\n this.remove(removals)\n }\n\n this.set({\n widths: this.widths,\n heights: this.heights\n })\n\n this.setCellsData()\n }\n\n getRowColumn(cell: Component) {\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): Component[] {\n return this.components.slice(row * this.columns, (row + 1) * this.columns)\n }\n\n getCellsByColumn(column: number): Component[] {\n var cells = []\n for (let i = 0; i < this.rows; i++) cells.push(this.components[this.columns * i + column])\n\n return cells\n }\n\n mergeCells(cells: Component[]) {}\n\n splitCells(cells: Component[]) {}\n\n deleteRows(cells: Component[]) {}\n\n deleteColumns(cells: Component[]) {\n // 만약 선택한 셀이 병합된 셀이라면 삭제하지 않는다.\n // if (cells[0].merged == true) return false\n\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 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: Component[]) {}\n\n insertCellsBelow(cells: Component[]) {}\n\n insertCellsLeft(cells: Component[]) {\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 // 열 2개 이상은 추가 안함. 임시로 막아놓음\n if (columns.length >= 2) return false\n let insertionColumnPosition = columns[0]\n let newbieColumnWidths: number[] = []\n let newbieCells: Component[] = []\n columns.forEach(column => {\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 }\n\n insertCellsRight(cells: Component[]) {\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: Component[] = []\n columns.forEach(column => {\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 }\n\n distributeHorizontal(cells: Component[]) {\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: Component[]) {}\n}\n\nComponent.register('data-list', DataList)\n"]}
@@ -1,7 +1,7 @@
1
1
  import { ApplicationContext, Model, POINT, Style } from '@hatiolab/things-scene';
2
- import Table from './table';
3
- import TableCell from './table-cell';
4
- import DataList from './data-list/data-list';
2
+ import Table from './table.js';
3
+ import TableCell from './table-cell.js';
4
+ import DataList from './data-list/data-list.js';
5
5
  export type WHERE = 'all' | 'in' | 'out' | 'left' | 'right' | 'center' | 'middle' | 'top' | 'bottom' | 'clear';
6
6
  export declare const SIDES: {
7
7
  [key: string]: string[];
@@ -1,5 +1,5 @@
1
1
  import { Model } from '@hatiolab/things-scene';
2
- import merge from 'lodash-es/merge';
2
+ import merge from 'lodash-es/merge.js';
3
3
  export const SIDES = {
4
4
  all: ['top', 'left', 'bottom', 'right'],
5
5
  out: ['top', 'left', 'bottom', 'right'],
@@ -1 +1 @@
1
- {"version":3,"file":"helper-functions.js","sourceRoot":"","sources":["../src/helper-functions.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApplicationContext, Component, Model, POINT, Style } from '@hatiolab/things-scene'\nimport merge from 'lodash-es/merge'\nimport Table from './table'\nimport TableCell from './table-cell'\nimport DataList from './data-list/data-list'\n\nexport type WHERE = 'all' | 'in' | 'out' | 'left' | 'right' | 'center' | 'middle' | 'top' | 'bottom' | 'clear'\n\nexport const SIDES: { [key: string]: string[] } = {\n all: ['top', 'left', 'bottom', 'right'],\n out: ['top', 'left', 'bottom', 'right'],\n left: ['left'],\n right: ['right'],\n top: ['top'],\n bottom: ['bottom'],\n leftright: ['left', 'right'],\n topbottom: ['top', 'bottom']\n}\n\nexport const CLEAR_STYLE = {\n strokeStyle: '',\n lineDash: 'solid',\n lineWidth: 0\n}\n\nexport const DEFAULT_STYLE = {\n strokeStyle: '#999',\n lineDash: 'solid',\n lineWidth: 1\n}\n\nexport function buildNewCell(type: string, app: ApplicationContext): TableCell {\n return Model.compile(\n {\n type,\n left: 0,\n top: 0,\n width: 1,\n height: 1,\n textWrap: true,\n border: buildBorderStyle(DEFAULT_STYLE, 'all')\n },\n app\n ) as TableCell\n}\n\nexport function buildCopiedCell(copy: Model, app: ApplicationContext): TableCell {\n var obj = JSON.parse(JSON.stringify(copy))\n delete obj.text\n delete obj.refid\n\n return Model.compile(obj, app) as TableCell\n}\n\nexport function buildBorderStyle(style: Style, where: string) {\n return (SIDES[where] || []).reduce((border: { [key: string]: any }, side: string) => {\n border[side] = style\n return border\n }, {} as { [key: string]: any })\n}\n\nexport function setCellBorder(cell: any, style: Style, where: string) {\n if (!cell) return\n cell.set('border', merge({}, cell.getState('border') || {}, buildBorderStyle(style, where)))\n}\n\nexport function isLeftMost(total: number, columns: number, indices: number[], i: number) {\n return i == 0 || !(i % columns) || indices.indexOf(i - 1) == -1\n}\n\nexport function isRightMost(total: number, columns: number, indices: number[], i: number) {\n return i == total - 1 || i % columns == columns - 1 || indices.indexOf(i + 1) == -1\n}\n\nexport function isTopMost(total: number, columns: number, indices: number[], i: number) {\n return i < columns || indices.indexOf(i - columns) == -1\n}\n\nexport function isBottomMost(total: number, columns: number, indices: number[], i: number) {\n return i > total - columns - 1 || indices.indexOf(i + columns) == -1\n}\n\nexport function above(columns: number, i: number) {\n return i - columns\n}\n\nexport function below(columns: number, i: number) {\n return i + columns\n}\n\nexport function before(columns: number, i: number) {\n return !(i % columns) ? -1 : i - 1\n}\n\nexport function after(columns: number, i: number) {\n return !((i + 1) % columns) ? -1 : i + 1\n}\n\nexport function array(value: any, size: number) {\n var arr = []\n for (let i = 0; i < size; i++) arr.push(1)\n return arr\n}\n\nexport function adjustCellWidth(component: Table | DataList, index: number, diff: number) {\n var { width } = component.textBounds\n var widths_sum = component.widths_sum\n\n var widths = component.widths.slice()\n\n var diff_unit = (diff / width) * widths_sum\n\n var min_width_unit = (widths_sum / width) * 10 // 10픽셀정도를 최소로\n\n if (diff_unit < 0) diff_unit = -Math.min(widths[index] - min_width_unit, -diff_unit)\n else diff_unit = Math.min(widths[index + 1] - min_width_unit, diff_unit)\n\n widths[index] = Math.round((widths[index] + diff_unit) * 100) / 100\n widths[index + 1] = Math.round((widths[index + 1] - diff_unit) * 100) / 100\n\n component.set('widths', widths)\n}\n\nexport function adjustCellHeight(component: Table | DataList, index: number, diff: number) {\n var { height } = component.textBounds\n var heights_sum = component.heights_sum\n\n var heights = component.heights.slice()\n\n var diff_unit = (diff / height) * heights_sum\n\n var min_height_unit = (heights_sum / height) * 10 // 10픽셀정도를 최소로\n\n if (diff_unit < 0) diff_unit = -Math.min(heights[index] - min_height_unit, -diff_unit)\n else diff_unit = Math.min(heights[index + 1] - min_height_unit, diff_unit)\n\n heights[index] = Math.round((heights[index] + diff_unit) * 100) / 100\n heights[index + 1] = Math.round((heights[index + 1] - diff_unit) * 100) / 100\n\n component.set('heights', heights)\n}\n\nexport var columnControlHandler = {\n ondragmove: function (point: POINT, index: number, component: Table) {\n var { left, width } = component.textBounds\n var widths_sum = component.widths_sum\n\n var widths = component.widths.slice()\n\n /* 컨트롤의 원래 위치를 구한다. */\n var origin_pos_unit = widths.slice(0, index + 1).reduce((sum: number, width: number) => sum + width, 0)\n var origin_offset = left + (origin_pos_unit / widths_sum) * width\n\n /*\n * point의 좌표는 부모 레이어 기준의 x, y 값이다.\n * 따라서, 도형의 회전을 감안한 좌표로의 변환이 필요하다.\n * Transcoord시에는 point좌표가 부모까지 transcoord되어있는 상태이므로,\n * 컴포넌트자신에 대한 transcoord만 필요하다.(마지막 파라미터를 false로).\n */\n var transcoorded = component.transcoordP2S(point.x, point.y)\n\n adjustCellWidth(component, index, transcoorded.x - origin_offset)\n }\n}\n\nexport var rowControlHandler = {\n ondragmove: function (point: POINT, index: number, component: Table) {\n var { top, height } = component.textBounds\n var heights_sum = component.heights_sum\n\n var heights = component.heights.slice()\n\n /* 컨트롤의 원래 위치를 구한다. */\n index -= component.columns - 1\n var origin_pos_unit = heights.slice(0, index + 1).reduce((sum: number, height: number) => sum + height, 0)\n var origin_offset = top + (origin_pos_unit / heights_sum) * height\n\n /*\n * point의 좌표는 부모 레이어 기준의 x, y 값이다.\n * 따라서, 도형의 회전을 감안한 좌표로의 변환이 필요하다.\n * Transcoord시에는 point좌표가 부모까지 transcoord되어있는 상태이므로,\n * 컴포넌트자신에 대한 transcoord만 필요하다.(마지막 파라미터를 false로).\n */\n var transcoorded = component.transcoordP2S(point.x, point.y)\n var diff = transcoorded.y - origin_offset\n\n adjustCellHeight(component, index, diff)\n }\n}\n"]}
1
+ {"version":3,"file":"helper-functions.js","sourceRoot":"","sources":["../src/helper-functions.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApplicationContext, Component, Model, POINT, Style } from '@hatiolab/things-scene'\nimport merge from 'lodash-es/merge.js'\nimport Table from './table.js'\nimport TableCell from './table-cell.js'\nimport DataList from './data-list/data-list.js'\n\nexport type WHERE = 'all' | 'in' | 'out' | 'left' | 'right' | 'center' | 'middle' | 'top' | 'bottom' | 'clear'\n\nexport const SIDES: { [key: string]: string[] } = {\n all: ['top', 'left', 'bottom', 'right'],\n out: ['top', 'left', 'bottom', 'right'],\n left: ['left'],\n right: ['right'],\n top: ['top'],\n bottom: ['bottom'],\n leftright: ['left', 'right'],\n topbottom: ['top', 'bottom']\n}\n\nexport const CLEAR_STYLE = {\n strokeStyle: '',\n lineDash: 'solid',\n lineWidth: 0\n}\n\nexport const DEFAULT_STYLE = {\n strokeStyle: '#999',\n lineDash: 'solid',\n lineWidth: 1\n}\n\nexport function buildNewCell(type: string, app: ApplicationContext): TableCell {\n return Model.compile(\n {\n type,\n left: 0,\n top: 0,\n width: 1,\n height: 1,\n textWrap: true,\n border: buildBorderStyle(DEFAULT_STYLE, 'all')\n },\n app\n ) as TableCell\n}\n\nexport function buildCopiedCell(copy: Model, app: ApplicationContext): TableCell {\n var obj = JSON.parse(JSON.stringify(copy))\n delete obj.text\n delete obj.refid\n\n return Model.compile(obj, app) as TableCell\n}\n\nexport function buildBorderStyle(style: Style, where: string) {\n return (SIDES[where] || []).reduce((border: { [key: string]: any }, side: string) => {\n border[side] = style\n return border\n }, {} as { [key: string]: any })\n}\n\nexport function setCellBorder(cell: any, style: Style, where: string) {\n if (!cell) return\n cell.set('border', merge({}, cell.getState('border') || {}, buildBorderStyle(style, where)))\n}\n\nexport function isLeftMost(total: number, columns: number, indices: number[], i: number) {\n return i == 0 || !(i % columns) || indices.indexOf(i - 1) == -1\n}\n\nexport function isRightMost(total: number, columns: number, indices: number[], i: number) {\n return i == total - 1 || i % columns == columns - 1 || indices.indexOf(i + 1) == -1\n}\n\nexport function isTopMost(total: number, columns: number, indices: number[], i: number) {\n return i < columns || indices.indexOf(i - columns) == -1\n}\n\nexport function isBottomMost(total: number, columns: number, indices: number[], i: number) {\n return i > total - columns - 1 || indices.indexOf(i + columns) == -1\n}\n\nexport function above(columns: number, i: number) {\n return i - columns\n}\n\nexport function below(columns: number, i: number) {\n return i + columns\n}\n\nexport function before(columns: number, i: number) {\n return !(i % columns) ? -1 : i - 1\n}\n\nexport function after(columns: number, i: number) {\n return !((i + 1) % columns) ? -1 : i + 1\n}\n\nexport function array(value: any, size: number) {\n var arr = []\n for (let i = 0; i < size; i++) arr.push(1)\n return arr\n}\n\nexport function adjustCellWidth(component: Table | DataList, index: number, diff: number) {\n var { width } = component.textBounds\n var widths_sum = component.widths_sum\n\n var widths = component.widths.slice()\n\n var diff_unit = (diff / width) * widths_sum\n\n var min_width_unit = (widths_sum / width) * 10 // 10픽셀정도를 최소로\n\n if (diff_unit < 0) diff_unit = -Math.min(widths[index] - min_width_unit, -diff_unit)\n else diff_unit = Math.min(widths[index + 1] - min_width_unit, diff_unit)\n\n widths[index] = Math.round((widths[index] + diff_unit) * 100) / 100\n widths[index + 1] = Math.round((widths[index + 1] - diff_unit) * 100) / 100\n\n component.set('widths', widths)\n}\n\nexport function adjustCellHeight(component: Table | DataList, index: number, diff: number) {\n var { height } = component.textBounds\n var heights_sum = component.heights_sum\n\n var heights = component.heights.slice()\n\n var diff_unit = (diff / height) * heights_sum\n\n var min_height_unit = (heights_sum / height) * 10 // 10픽셀정도를 최소로\n\n if (diff_unit < 0) diff_unit = -Math.min(heights[index] - min_height_unit, -diff_unit)\n else diff_unit = Math.min(heights[index + 1] - min_height_unit, diff_unit)\n\n heights[index] = Math.round((heights[index] + diff_unit) * 100) / 100\n heights[index + 1] = Math.round((heights[index + 1] - diff_unit) * 100) / 100\n\n component.set('heights', heights)\n}\n\nexport var columnControlHandler = {\n ondragmove: function (point: POINT, index: number, component: Table) {\n var { left, width } = component.textBounds\n var widths_sum = component.widths_sum\n\n var widths = component.widths.slice()\n\n /* 컨트롤의 원래 위치를 구한다. */\n var origin_pos_unit = widths.slice(0, index + 1).reduce((sum: number, width: number) => sum + width, 0)\n var origin_offset = left + (origin_pos_unit / widths_sum) * width\n\n /*\n * point의 좌표는 부모 레이어 기준의 x, y 값이다.\n * 따라서, 도형의 회전을 감안한 좌표로의 변환이 필요하다.\n * Transcoord시에는 point좌표가 부모까지 transcoord되어있는 상태이므로,\n * 컴포넌트자신에 대한 transcoord만 필요하다.(마지막 파라미터를 false로).\n */\n var transcoorded = component.transcoordP2S(point.x, point.y)\n\n adjustCellWidth(component, index, transcoorded.x - origin_offset)\n }\n}\n\nexport var rowControlHandler = {\n ondragmove: function (point: POINT, index: number, component: Table) {\n var { top, height } = component.textBounds\n var heights_sum = component.heights_sum\n\n var heights = component.heights.slice()\n\n /* 컨트롤의 원래 위치를 구한다. */\n index -= component.columns - 1\n var origin_pos_unit = heights.slice(0, index + 1).reduce((sum: number, height: number) => sum + height, 0)\n var origin_offset = top + (origin_pos_unit / heights_sum) * height\n\n /*\n * point의 좌표는 부모 레이어 기준의 x, y 값이다.\n * 따라서, 도형의 회전을 감안한 좌표로의 변환이 필요하다.\n * Transcoord시에는 point좌표가 부모까지 transcoord되어있는 상태이므로,\n * 컴포넌트자신에 대한 transcoord만 필요하다.(마지막 파라미터를 false로).\n */\n var transcoorded = component.transcoordP2S(point.x, point.y)\n var diff = transcoorded.y - origin_offset\n\n adjustCellHeight(component, index, diff)\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { default as Table } from './table';
2
- export { default as TableCell } from './table-cell';
3
- export { default as DataList } from './data-list/data-list';
1
+ export { default as Table } from './table.js';
2
+ export { default as TableCell } from './table-cell.js';
3
+ export { default as DataList } from './data-list/data-list.js';
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
- export { default as Table } from './table';
5
- export { default as TableCell } from './table-cell';
6
- export { default as DataList } from './data-list/data-list';
4
+ export { default as Table } from './table.js';
5
+ export { default as TableCell } from './table-cell.js';
6
+ export { default as DataList } from './data-list/data-list.js';
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uBAAuB,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nexport { default as Table } from './table'\nexport { default as TableCell } from './table-cell'\nexport { default as DataList } from './data-list/data-list'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,0BAA0B,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nexport { default as Table } from './table.js'\nexport { default as TableCell } from './table-cell.js'\nexport { default as DataList } from './data-list/data-list.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"table-cell.js","sourceRoot":"","sources":["../src/table-cell.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport { Component, ComponentNature, RectPath } from '@hatiolab/things-scene'\n\nimport Table from './table'\n\ntype Style = { [style: string]: any }\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'editor-table',\n label: '',\n name: '',\n property: {\n merge: true,\n split: true\n }\n },\n {\n type: 'string',\n label: 'data-key',\n name: 'dataKey',\n property: 'dataKey'\n },\n {\n type: 'number',\n label: 'data-index',\n name: 'dataIndex',\n property: 'dataIndex'\n }\n ],\n help: 'scene/component/table-cell'\n}\n\nconst EMPTY_BORDER = {}\n\nfunction isBottomMost(idx: number, rows: number, columns: number, components: Component[]) {\n return idx >= (rows - 1) * columns || (components[idx + columns] && components[idx + columns].hidden)\n}\n\nfunction isRightMost(idx: number, rows: number, columns: number, components: Component[]) {\n return (idx + 1) % columns == 0 || (components[idx + 1] && components[idx + 1].hidden)\n}\n\n/**\n * 1. 스타일을 상속 받아야 함. (cascade-style)\n * 2. 스타일을 동적처리할 수 있음. (로직처리)\n * 3. 데이타를 받을 수 있음.\n */\nexport default class TableCell extends RectPath(Component) {\n // export default class TableCell extends Container {\n\n // get layout() {\n // return Layout.getState(this.getState('layout') || 'card')\n // }\n\n get nature() {\n return NATURE\n }\n\n set merged(merged) {\n this.set('merged', !!merged)\n if (merged) this.set('text', '')\n }\n\n get merged() {\n return this.getState('merged')\n }\n\n set rowspan(rowspan) {\n this.set('rowspan', rowspan)\n }\n\n get rowspan() {\n return this.getState('rowspan')\n }\n\n set colspan(colspan) {\n this.set('colspan', colspan)\n }\n\n get colspan() {\n return this.getState('colspan')\n }\n\n set strokeStyle(strokeStyle: string) {\n const { lineWidth, lineDash } = this.state\n var style = { strokeStyle } as any\n\n lineWidth && (style.lineWidth = lineWidth)\n lineDash && (style.lineDash = lineDash)\n\n const table = this.parent as Table\n table?.setCellsStyle([this], style, 'out', false /* not clear before */)\n }\n\n _drawBorder(context: CanvasRenderingContext2D, x: number, y: number, to_x: number, to_y: number, style: Style) {\n if (style && style.strokeStyle && style.lineWidth && style.lineDash) {\n context.beginPath()\n context.moveTo(x, y)\n context.lineTo(to_x, to_y)\n Component.drawStroke(context, style)\n }\n }\n\n render(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.state\n\n var { border } = this.state\n border ||= {}\n\n // Cell 채우기.\n context.beginPath()\n context.lineWidth = 0\n context.rect(left, top, width, height)\n this.drawFill(context)\n\n // Border 그리기\n var parent = this.parent as Table\n var idx = parent.components.indexOf(this)\n var columns = parent.columns || 1\n var rows = parent.rows || 1\n\n this._drawBorder(context, left, top, left + width, top, border.top)\n this._drawBorder(context, left, top + height, left, top, border.left)\n if (isRightMost(idx, rows, columns, parent.components))\n this._drawBorder(context, left + width, top, left + width, top + height, border.right)\n if (isBottomMost(idx, rows, columns, parent.components))\n this._drawBorder(context, left + width, top + height, left, top + height, border.bottom)\n }\n}\n\nComponent.register('table-cell', TableCell)\n"]}
1
+ {"version":3,"file":"table-cell.js","sourceRoot":"","sources":["../src/table-cell.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAmB,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAM7E,MAAM,MAAM,GAAoB;IAC9B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE;gBACR,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;aACZ;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,SAAS;SACpB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,WAAW;SACtB;KACF;IACD,IAAI,EAAE,4BAA4B;CACnC,CAAA;AAED,MAAM,YAAY,GAAG,EAAE,CAAA;AAEvB,SAAS,YAAY,CAAC,GAAW,EAAE,IAAY,EAAE,OAAe,EAAE,UAAuB;IACvF,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AACvG,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,IAAY,EAAE,OAAe,EAAE,UAAuB;IACtF,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACxF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,QAAQ,CAAC,SAAS,CAAC;IACxD,qDAAqD;IAErD,iBAAiB;IACjB,8DAA8D;IAC9D,IAAI;IAEJ,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,MAAM,CAAC,MAAM;QACf,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;QAC5B,IAAI,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC;IAED,IAAI,OAAO,CAAC,OAAO;QACjB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,OAAO,CAAC,OAAO;QACjB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,WAAW,CAAC,WAAmB;QACjC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAC1C,IAAI,KAAK,GAAG,EAAE,WAAW,EAAS,CAAA;QAElC,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,CAAA;QAC1C,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAA;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAe,CAAA;QAClC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IAC1E,CAAC;IAED,WAAW,CAAC,OAAiC,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,IAAY,EAAE,KAAY;QAC3G,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpE,OAAO,CAAC,SAAS,EAAE,CAAA;YACnB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC1B,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAiC;QACtC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAE7C,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAC3B,MAAM,KAAN,MAAM,GAAK,EAAE,EAAA;QAEb,YAAY;QACZ,OAAO,CAAC,SAAS,EAAE,CAAA;QACnB,OAAO,CAAC,SAAS,GAAG,CAAC,CAAA;QACrB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAEtB,aAAa;QACb,IAAI,MAAM,GAAG,IAAI,CAAC,MAAe,CAAA;QACjC,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAA;QACjC,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAA;QAE3B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACnE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QACrE,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;YACpD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACxF,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;YACrD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5F,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport { Component, ComponentNature, RectPath } from '@hatiolab/things-scene'\n\nimport Table from './table.js'\n\ntype Style = { [style: string]: any }\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'editor-table',\n label: '',\n name: '',\n property: {\n merge: true,\n split: true\n }\n },\n {\n type: 'string',\n label: 'data-key',\n name: 'dataKey',\n property: 'dataKey'\n },\n {\n type: 'number',\n label: 'data-index',\n name: 'dataIndex',\n property: 'dataIndex'\n }\n ],\n help: 'scene/component/table-cell'\n}\n\nconst EMPTY_BORDER = {}\n\nfunction isBottomMost(idx: number, rows: number, columns: number, components: Component[]) {\n return idx >= (rows - 1) * columns || (components[idx + columns] && components[idx + columns].hidden)\n}\n\nfunction isRightMost(idx: number, rows: number, columns: number, components: Component[]) {\n return (idx + 1) % columns == 0 || (components[idx + 1] && components[idx + 1].hidden)\n}\n\n/**\n * 1. 스타일을 상속 받아야 함. (cascade-style)\n * 2. 스타일을 동적처리할 수 있음. (로직처리)\n * 3. 데이타를 받을 수 있음.\n */\nexport default class TableCell extends RectPath(Component) {\n // export default class TableCell extends Container {\n\n // get layout() {\n // return Layout.getState(this.getState('layout') || 'card')\n // }\n\n get nature() {\n return NATURE\n }\n\n set merged(merged) {\n this.set('merged', !!merged)\n if (merged) this.set('text', '')\n }\n\n get merged() {\n return this.getState('merged')\n }\n\n set rowspan(rowspan) {\n this.set('rowspan', rowspan)\n }\n\n get rowspan() {\n return this.getState('rowspan')\n }\n\n set colspan(colspan) {\n this.set('colspan', colspan)\n }\n\n get colspan() {\n return this.getState('colspan')\n }\n\n set strokeStyle(strokeStyle: string) {\n const { lineWidth, lineDash } = this.state\n var style = { strokeStyle } as any\n\n lineWidth && (style.lineWidth = lineWidth)\n lineDash && (style.lineDash = lineDash)\n\n const table = this.parent as Table\n table?.setCellsStyle([this], style, 'out', false /* not clear before */)\n }\n\n _drawBorder(context: CanvasRenderingContext2D, x: number, y: number, to_x: number, to_y: number, style: Style) {\n if (style && style.strokeStyle && style.lineWidth && style.lineDash) {\n context.beginPath()\n context.moveTo(x, y)\n context.lineTo(to_x, to_y)\n Component.drawStroke(context, style)\n }\n }\n\n render(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.state\n\n var { border } = this.state\n border ||= {}\n\n // Cell 채우기.\n context.beginPath()\n context.lineWidth = 0\n context.rect(left, top, width, height)\n this.drawFill(context)\n\n // Border 그리기\n var parent = this.parent as Table\n var idx = parent.components.indexOf(this)\n var columns = parent.columns || 1\n var rows = parent.rows || 1\n\n this._drawBorder(context, left, top, left + width, top, border.top)\n this._drawBorder(context, left, top + height, left, top, border.left)\n if (isRightMost(idx, rows, columns, parent.components))\n this._drawBorder(context, left + width, top, left + width, top + height, border.right)\n if (isBottomMost(idx, rows, columns, parent.components))\n this._drawBorder(context, left + width, top + height, left, top + height, border.bottom)\n }\n}\n\nComponent.register('table-cell', TableCell)\n"]}
package/dist/table.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Component, ComponentNature, Container, Control, State, Style } from '@hatiolab/things-scene';
2
- import { WHERE } from './helper-functions';
3
- import TableCell from './table-cell';
2
+ import { WHERE } from './helper-functions.js';
3
+ import TableCell from './table-cell.js';
4
4
  export default class Table extends Container {
5
5
  reflowing: boolean;
6
6
  created(): void;
package/dist/table.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
4
  import { Component, Container, Layout } from '@hatiolab/things-scene';
5
- import { above, after, array, before, below, buildCopiedCell, buildNewCell, CLEAR_STYLE, columnControlHandler, isBottomMost, isLeftMost, isRightMost, isTopMost, rowControlHandler, setCellBorder, adjustCellWidth, adjustCellHeight } from './helper-functions';
5
+ import { above, after, array, before, below, buildCopiedCell, buildNewCell, CLEAR_STYLE, columnControlHandler, isBottomMost, isLeftMost, isRightMost, isTopMost, rowControlHandler, setCellBorder, adjustCellWidth, adjustCellHeight } from './helper-functions.js';
6
6
  const NATURE = {
7
7
  mutable: false,
8
8
  resizable: true,
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'\nimport TableCell from './table-cell'\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 { 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"]}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { WHERE } from './helper-functions';
1
+ import { WHERE } from './helper-functions.js';
2
2
  import { Component, LAYOUT, Style } from '@hatiolab/things-scene';
3
3
  export interface ITableCell {
4
4
  }
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import { WHERE } from './helper-functions'\nimport { Component, LAYOUT, Style } from '@hatiolab/things-scene'\n\nexport interface ITableCell {}\n\nexport interface ITable {\n get widths(): number[]\n get heights(): number[]\n get layout(): LAYOUT\n get rows(): number\n\n buildCells(newrows: number, newcolumns: number, oldrows: number, oldcolumns: number): void\n setCellsStyle(cells: ITableCell[], style: Style, where: WHERE): void\n setCellsData(): void\n\n getRowColumn(cell: ITableCell): { column: number; row: number }\n getCellsByRow(row: number): Component[]\n\n getCellsByColumn(column: number): Component[]\n\n // 한 개의 행을 매개변수로 받아서 첫 번째 셀부터 우측으로 이동하면서 병합된 셀이 있는지 검사한다.\n findMergedCellByX(row: number): Component[]\n\n // 한 개의 열을 매개변수로 받아서 첫 번째 셀부터 아래로 이동하면서 병합된 셀이 있는지 검사한다.\n findMergedCellByY(column: number): Component[]\n\n mergeCells(cells: ITableCell[]): void\n splitCells(cells: ITableCell[]): void\n deleteRows(cells: ITableCell[]): void\n\n deleteColumns(cells: ITableCell[]): void\n insertCellsAbove(cells: ITableCell[]): void\n insertCellsBelow(cells: ITableCell[]): void\n insertCellsLeft(cells: ITableCell[]): void\n insertCellsRight(cells: ITableCell[]): void\n distributeHorizontal(cells: ITableCell[]): void\n\n distributeVertical(cells: ITableCell[]): void\n toObjectArrayValue(array: any[]): void\n\n get columns(): number\n get lefts(): Component[]\n get centers(): Component[]\n\n get rights(): Component[]\n get tops(): Component[]\n get middles(): Component[]\n get bottoms(): Component[]\n get widths_sum(): number\n get heights_sum(): number\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import { WHERE } from './helper-functions.js'\nimport { Component, LAYOUT, Style } from '@hatiolab/things-scene'\n\nexport interface ITableCell {}\n\nexport interface ITable {\n get widths(): number[]\n get heights(): number[]\n get layout(): LAYOUT\n get rows(): number\n\n buildCells(newrows: number, newcolumns: number, oldrows: number, oldcolumns: number): void\n setCellsStyle(cells: ITableCell[], style: Style, where: WHERE): void\n setCellsData(): void\n\n getRowColumn(cell: ITableCell): { column: number; row: number }\n getCellsByRow(row: number): Component[]\n\n getCellsByColumn(column: number): Component[]\n\n // 한 개의 행을 매개변수로 받아서 첫 번째 셀부터 우측으로 이동하면서 병합된 셀이 있는지 검사한다.\n findMergedCellByX(row: number): Component[]\n\n // 한 개의 열을 매개변수로 받아서 첫 번째 셀부터 아래로 이동하면서 병합된 셀이 있는지 검사한다.\n findMergedCellByY(column: number): Component[]\n\n mergeCells(cells: ITableCell[]): void\n splitCells(cells: ITableCell[]): void\n deleteRows(cells: ITableCell[]): void\n\n deleteColumns(cells: ITableCell[]): void\n insertCellsAbove(cells: ITableCell[]): void\n insertCellsBelow(cells: ITableCell[]): void\n insertCellsLeft(cells: ITableCell[]): void\n insertCellsRight(cells: ITableCell[]): void\n distributeHorizontal(cells: ITableCell[]): void\n\n distributeVertical(cells: ITableCell[]): void\n toObjectArrayValue(array: any[]): void\n\n get columns(): number\n get lefts(): Component[]\n get centers(): Component[]\n\n get rights(): Component[]\n get tops(): Component[]\n get middles(): Component[]\n get bottoms(): Component[]\n get widths_sum(): number\n get heights_sum(): number\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@operato/scene-table",
3
3
  "description": "Things Scene Table Component.",
4
- "version": "9.0.0-beta.1",
4
+ "version": "9.0.0-beta.3",
5
+ "type": "module",
5
6
  "author": "heartyoh",
6
7
  "main": "dist/index.js",
7
8
  "module": "dist/index.js",
@@ -58,5 +59,5 @@
58
59
  "prettier --write"
59
60
  ]
60
61
  },
61
- "gitHead": "6c745ed97d64cb720df566cba0f809f2041b09e8"
62
+ "gitHead": "5f81f48c4dfc0101ca86998417d03463f8112072"
62
63
  }
@@ -1,4 +1,4 @@
1
- import templates from './dist/templates'
1
+ import templates from './dist/templates.js'
2
2
 
3
3
  export default {
4
4
  templates