@operato/scene-table 0.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/global/index.d.ts +1 -0
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +33 -0
- package/assets/icon-data-list.png +0 -0
- package/assets/icon-table.png +0 -0
- package/dist/data-list/data-cell.d.ts +22 -0
- package/dist/data-list/data-cell.js +56 -0
- package/dist/data-list/data-cell.js.map +1 -0
- package/dist/data-list/data-list-layout.d.ts +10 -0
- package/dist/data-list/data-list-layout.js +95 -0
- package/dist/data-list/data-list-layout.js.map +1 -0
- package/dist/data-list/data-list.d.ts +56 -0
- package/dist/data-list/data-list.js +536 -0
- package/dist/data-list/data-list.js.map +1 -0
- package/dist/helper-functions.d.ts +37 -0
- package/dist/helper-functions.js +135 -0
- package/dist/helper-functions.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/table-cell.d.ts +41 -0
- package/dist/table-cell.js +104 -0
- package/dist/table-cell.js.map +1 -0
- package/dist/table.d.ts +54 -0
- package/dist/table.js +1270 -0
- package/dist/table.js.map +1 -0
- package/dist/templates/data-list.d.ts +18 -0
- package/dist/templates/data-list.js +20 -0
- package/dist/templates/data-list.js.map +1 -0
- package/dist/templates/index.d.ts +18 -0
- package/dist/templates/index.js +4 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/table.d.ts +20 -0
- package/dist/templates/table.js +26 -0
- package/dist/templates/table.js.map +1 -0
- package/helps/scene/component/data-cell.ko.md +13 -0
- package/helps/scene/component/data-cell.md +13 -0
- package/helps/scene/component/data-cell.zh.md +13 -0
- package/helps/scene/component/data-list.ko.md +6 -0
- package/helps/scene/component/data-list.md +6 -0
- package/helps/scene/component/data-list.zh.md +8 -0
- package/helps/scene/component/table-cell.ko.md +58 -0
- package/helps/scene/component/table-cell.md +58 -0
- package/helps/scene/component/table-cell.zh.md +61 -0
- package/helps/scene/component/table.ko.md +68 -0
- package/helps/scene/component/table.md +68 -0
- package/helps/scene/component/table.zh.md +68 -0
- package/helps/scene/images/table-01.png +0 -0
- package/helps/scene/images/table-02.png +0 -0
- package/helps/scene/images/table-03.png +0 -0
- package/helps/scene/images/table-04.png +0 -0
- package/helps/scene/images/table-05.png +0 -0
- package/helps/scene/images/table-06.png +0 -0
- package/helps/scene/images/table-07.png +0 -0
- package/helps/scene/images/table-08.png +0 -0
- package/helps/scene/images/table-09.png +0 -0
- package/helps/scene/images/table-10.png +0 -0
- package/helps/scene/images/table-11.png +0 -0
- package/helps/scene/images/table-12.png +0 -0
- package/helps/scene/images/table-13.png +0 -0
- package/helps/scene/images/table-14.png +0 -0
- package/package.json +62 -0
- package/src/data-list/data-cell.ts +66 -0
- package/src/data-list/data-list-layout.ts +113 -0
- package/src/data-list/data-list.ts +654 -0
- package/src/helper-functions.ts +168 -0
- package/src/index.ts +6 -0
- package/src/table-cell.ts +126 -0
- package/src/table.ts +1406 -0
- package/src/templates/data-list.ts +20 -0
- package/src/templates/index.ts +4 -0
- package/src/templates/table.ts +26 -0
- package/test/basic-test.html +67 -0
- package/test/index.html +22 -0
- package/test/unit/a-test-table.js +72 -0
- package/test/unit/test-table-find-merged-cell.js +95 -0
- package/test/unit/test-table-insert-column.js +81 -0
- package/test/unit/test-table-insert-row.js +79 -0
- package/test/unit/test-table-rows-columns.js +47 -0
- package/test/unit/util.js +21 -0
- package/things-scene.config.js +5 -0
- package/translations/en.json +3 -0
- package/translations/ko.json +3 -0
- package/translations/ms.json +3 -0
- package/translations/zh.json +3 -0
- package/tsconfig.json +22 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# table
|
|
2
|
+
|
|
3
|
+
여러개의 데이터를 테이블의 형태로 표현할 때 사용하는 컴포넌트.
|
|
4
|
+
|
|
5
|
+
- Category : Table
|
|
6
|
+
- 속성(테이블) :
|
|
7
|
+
1. Row & Column(Number) - 행과 열의 개수를 조절
|
|
8
|
+
![Table-행열 갯수][table-02]
|
|
9
|
+
1. Cell Width & Height - 테이블의 빨간 핸들러를 마우스로 드래그하면 각 셀마다 크기를 조절할 수 있다.
|
|
10
|
+
![Table-행열의 크기][table-03]
|
|
11
|
+
|
|
12
|
+
- 속성(셀) :
|
|
13
|
+
1. Border Style - 선택된 셀의 테두리의 굵기 및 색상을 변경. 스타일 값을 입력 후 ![Table-셀 스타일 종류][table-04] 중 적용할 셀의 버튼을 누른다.
|
|
14
|
+
![Table-셀 스타일][table-05]
|
|
15
|
+
1. Border Type - 선택 된 셀의 선의 종류를 변경. 테두리 종류를 선택 후 ![Table-셀 스타일 종류][table-04] 중 적용할 셀의 버튼을 누른다.
|
|
16
|
+
__(!!셀의 테두리와 테이블의 테두리는 서로 다르게 적용)__
|
|
17
|
+
1. Merge Cells - 선택된 셀을 병합(붙어있는 셀만 적용)
|
|
18
|
+
1. Split Cells - 셀의 병합을 해제
|
|
19
|
+
1. Delete Row - 선택된 행을 삭제
|
|
20
|
+
![Table-셀 행 삭제][table-06]
|
|
21
|
+
1. Delete Column - 선택된 열을 삭제
|
|
22
|
+
![Table-셀 열 삭제][table-07]
|
|
23
|
+
1. Insert Above - 선택된 셀의 위쪽에 새로운 셀 삽입
|
|
24
|
+
![Table-셀 위쪽 삽입][table-08]
|
|
25
|
+
1. Insert Below - 선택된 셀의 아래쪽에 새로운 셀 삽입
|
|
26
|
+
![Table-셀 아래쪽 삽입][table-09]
|
|
27
|
+
1. Insert Left - 선택된 셀의 왼쪽에 새로운 셀 삽입
|
|
28
|
+
![Table-셀 왼쪽 삽입][table-10]
|
|
29
|
+
1. Insert Right - 선택된 셀의 오른쪽에 새로운 셀 삽입
|
|
30
|
+
![Table-셀 오른쪽 삽입][table-11]
|
|
31
|
+
1. Distribute Horizontal - 선택된 열들의 넓이를 같게
|
|
32
|
+
![Table-셀 넓이 같게][table-12]
|
|
33
|
+
1. Distribute Vertical - 선택된 행들의 높이를 같게
|
|
34
|
+
![Table-셀 높이 같게][table-13]
|
|
35
|
+
1. Data Key - 테이블에 데이터를 매핑할 때 데이터 헤더의 필드명. DataKey는 열이 위치하는 번호가 아닌 반드시 필드명으로 입력한다.
|
|
36
|
+
1. Data Index - 테이블에 데이터를 매핑할 때 데이터 행의 위치. DataIndex는 헤더를 제외한 데이터의 시작번호를 0으로 한다.
|
|
37
|
+
![Table-데이터 예시][table-14]
|
|
38
|
+
위 사진과 같은 데이터가 왔을시 Date의 '01-03'의 데이터를 표시한다면 DataKey = Date, DataIndex = 2를 입력한다.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
[table-01]: ../images/table-01.png
|
|
43
|
+
|
|
44
|
+
[table-02]: ../images/table-02.png
|
|
45
|
+
|
|
46
|
+
[table-03]: ../images/table-03.png
|
|
47
|
+
|
|
48
|
+
[table-04]: ../images/table-04.png
|
|
49
|
+
|
|
50
|
+
[table-05]: ../images/table-05.png
|
|
51
|
+
|
|
52
|
+
[table-06]: ../images/table-06.png
|
|
53
|
+
|
|
54
|
+
[table-07]: ../images/table-07.png
|
|
55
|
+
|
|
56
|
+
[table-08]: ../images/table-08.png
|
|
57
|
+
|
|
58
|
+
[table-09]: ../images/table-09.png
|
|
59
|
+
|
|
60
|
+
[table-10]: ../images/table-10.png
|
|
61
|
+
|
|
62
|
+
[table-11]: ../images/table-11.png
|
|
63
|
+
|
|
64
|
+
[table-12]: ../images/table-12.png
|
|
65
|
+
|
|
66
|
+
[table-13]: ../images/table-13.png
|
|
67
|
+
|
|
68
|
+
[table-14]: ../images/table-14.png
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# table
|
|
2
|
+
|
|
3
|
+
The component which is used to display several data in the form of table.
|
|
4
|
+
|
|
5
|
+
- Category : Table
|
|
6
|
+
- Property(Table):
|
|
7
|
+
1. Row & Column(Number) - Adjust the number of rows and columns.
|
|
8
|
+
![Table-The number of rows and columns][table-02]
|
|
9
|
+
1. Cell Width & Height - If drag the red handler of table with mouse, you can adjust the size of each cell.
|
|
10
|
+
![Table-The size of rows and columns][table-03]
|
|
11
|
+
|
|
12
|
+
- Property(Cell):
|
|
13
|
+
1. Border Style - Change the thickness and color of border of the selected cell. After enter the style value, type the button of cell in which will apply it among ![Table-셀 스타일 종류][table-04].
|
|
14
|
+
![Table-Cell style][table-05]
|
|
15
|
+
1. Border Type - Change the type of line of the selected cell. After select the border type, type the button of cell in which will apply it among ![Table-셀 스타일 종류][table-04].
|
|
16
|
+
__(!!Apply cell border and table border differently.)__
|
|
17
|
+
1. Merge Cells - Merge the selected cells. (Apply to the neighboring cells only)
|
|
18
|
+
1. Split Cells - Unmerge the cells.
|
|
19
|
+
1. Delete Row - Delete the selected row.
|
|
20
|
+
![Table-Delete the cell row][table-06]
|
|
21
|
+
1. Delete Column - Delete the selected column.
|
|
22
|
+
![Table-Delete the cell column][table-07]
|
|
23
|
+
1. Insert Above - Insert a new cell on the top of the selected cell.
|
|
24
|
+
![Table-Insert on the top of cell][table-08]
|
|
25
|
+
1. Insert Below - Insert a new cell on the bottom of the selected cell.
|
|
26
|
+
![Table-Insert on the bottom of cell][table-09]
|
|
27
|
+
1. Insert Left - Insert a new cell on the left of the selected cell.
|
|
28
|
+
![Table-Insert on the left of cell][table-10]
|
|
29
|
+
1. Insert Right - Insert a new cell on the right of the selected cell.
|
|
30
|
+
![Table-Insert on the right of cell][table-11]
|
|
31
|
+
1. Distribute Horizontally - Make the width of the selected columns be the same.
|
|
32
|
+
![Table-Make the cell width the same][table-12]
|
|
33
|
+
1. Distribute Vertically - Make the height of the selected rows the same.
|
|
34
|
+
![Table-Make the cell height the same][table-13]
|
|
35
|
+
1. Data Key - The field name of data header when mapping the data in table. DataKey must be entered as the field name rather than the number of column.
|
|
36
|
+
1. Data Index - The location of data row when mapping the data in table. DataIndex makes the start number of data except the header as 0.
|
|
37
|
+
![Table-데이터 예시][table-14]
|
|
38
|
+
When receive the data as in the above image, if want to display the data of ‘01-03’ of Date, you can enter DataKey = Date, DataIndex = 2.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
[table-01]: ../images/table-01.png
|
|
43
|
+
|
|
44
|
+
[table-02]: ../images/table-02.png
|
|
45
|
+
|
|
46
|
+
[table-03]: ../images/table-03.png
|
|
47
|
+
|
|
48
|
+
[table-04]: ../images/table-04.png
|
|
49
|
+
|
|
50
|
+
[table-05]: ../images/table-05.png
|
|
51
|
+
|
|
52
|
+
[table-06]: ../images/table-06.png
|
|
53
|
+
|
|
54
|
+
[table-07]: ../images/table-07.png
|
|
55
|
+
|
|
56
|
+
[table-08]: ../images/table-08.png
|
|
57
|
+
|
|
58
|
+
[table-09]: ../images/table-09.png
|
|
59
|
+
|
|
60
|
+
[table-10]: ../images/table-10.png
|
|
61
|
+
|
|
62
|
+
[table-11]: ../images/table-11.png
|
|
63
|
+
|
|
64
|
+
[table-12]: ../images/table-12.png
|
|
65
|
+
|
|
66
|
+
[table-13]: ../images/table-13.png
|
|
67
|
+
|
|
68
|
+
[table-14]: ../images/table-14.png
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# table
|
|
2
|
+
|
|
3
|
+
被用于用表格显示多个数据时的组件。
|
|
4
|
+
|
|
5
|
+
- 类型:表格
|
|
6
|
+
- 属性(表格):
|
|
7
|
+
1. Row & Column(Number) - 调整行和列的数量。
|
|
8
|
+
![Table-行和列的数量][table-02]
|
|
9
|
+
1. Cell Width & Height - 如果用鼠标拖动表格的红色句柄,就可以调整各个单元格的大小。
|
|
10
|
+
![Table-行和列的大小][table-03]
|
|
11
|
+
|
|
12
|
+
- 属性(单元格):
|
|
13
|
+
1. Border Style - 变更所选单元格的边框厚度以及颜色。输入样式值之后,输入![Table-单元格样式类型][table-04]中将要适用的单元格的按钮。
|
|
14
|
+
![Table-单元格样式][table-05]
|
|
15
|
+
1. Border Type - 变更所选单元格的线的类型。选择边框类型之后, 输入![Table-单元格样式类型][table-04]将要适用的单元格的按钮。
|
|
16
|
+
__(!!适用不同的单元格边框和表格边框。)__
|
|
17
|
+
1. Merge Cells - 合并所选单元格(只适用于邻近的单元格。)
|
|
18
|
+
1. Split Cells - 解除单元格的合并。
|
|
19
|
+
1. Delete Row - 删除所选行。
|
|
20
|
+
![Table-删除单元格的行][table-06]
|
|
21
|
+
1. Delete Column - 删除所选列。
|
|
22
|
+
![Table-删除单元格的列][table-07]
|
|
23
|
+
1. Insert Above - 在所选单元格的上方,插入新的单元格。
|
|
24
|
+
![Table-插入单元格上方][table-08]
|
|
25
|
+
1. Insert Below - 在所选单元格的下方,插入新的单元格。
|
|
26
|
+
![Table-插入单元格下方][table-09]
|
|
27
|
+
1. Insert Left - 在所选单元格的左侧,插入新的单元格。
|
|
28
|
+
![Table-插入单元格左侧][table-10]
|
|
29
|
+
1. Insert Right - 在所选单元格的右侧,插入新的单元格。
|
|
30
|
+
![Table-插入单元格右侧][table-11]
|
|
31
|
+
1. Distribute Horizontal - 统一所选列的宽度。
|
|
32
|
+
![Table-统一单元格宽度][table-12]
|
|
33
|
+
1. Distribute Vertical - 统一所选行的高度。
|
|
34
|
+
![Table-统一单元格高度][table-13]
|
|
35
|
+
1. Data Key - 当在表格匹配数据时,数据标题的字段名称。一定要用非列所位置的号码的、字段名称输入Data Key。
|
|
36
|
+
1. Data Index - 当在表格匹配数据时,数据行的位置。DataIndex以除标题的、数据的起始号码为0。
|
|
37
|
+
![Table-数据例题][table-14]
|
|
38
|
+
当收到如上述图片的数据时,如果想要显示Date的‘01-03’的数据,可以输入DataKey = Date,DataIndex = 2。
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
[table-01]: ../images/table-01.png
|
|
43
|
+
|
|
44
|
+
[table-02]: ../images/table-02.png
|
|
45
|
+
|
|
46
|
+
[table-03]: ../images/table-03.png
|
|
47
|
+
|
|
48
|
+
[table-04]: ../images/table-04.png
|
|
49
|
+
|
|
50
|
+
[table-05]: ../images/table-05.png
|
|
51
|
+
|
|
52
|
+
[table-06]: ../images/table-06.png
|
|
53
|
+
|
|
54
|
+
[table-07]: ../images/table-07.png
|
|
55
|
+
|
|
56
|
+
[table-08]: ../images/table-08.png
|
|
57
|
+
|
|
58
|
+
[table-09]: ../images/table-09.png
|
|
59
|
+
|
|
60
|
+
[table-10]: ../images/table-10.png
|
|
61
|
+
|
|
62
|
+
[table-11]: ../images/table-11.png
|
|
63
|
+
|
|
64
|
+
[table-12]: ../images/table-12.png
|
|
65
|
+
|
|
66
|
+
[table-13]: ../images/table-13.png
|
|
67
|
+
|
|
68
|
+
[table-14]: ../images/table-14.png
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@operato/scene-table",
|
|
3
|
+
"description": "Things Scene Table Component.",
|
|
4
|
+
"version": "0.0.17",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "heartyoh",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"module": "dist/index.js",
|
|
9
|
+
"things-scene": true,
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public",
|
|
12
|
+
"@operato:registry": "https://registry.npmjs.org"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/things-scene/operato-scene.git",
|
|
17
|
+
"directory": "packages/table"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"serve": "tsc && things-factory-dev",
|
|
21
|
+
"start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"prepublish": "tsc",
|
|
24
|
+
"lint": "eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore",
|
|
25
|
+
"format": "eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore",
|
|
26
|
+
"migration": "things-factory-migration"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@hatiolab/things-scene": "^2.7.26"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@hatiolab/prettier-config": "^1.0.0",
|
|
33
|
+
"@operato/board": "^0.2.45",
|
|
34
|
+
"@things-factory/builder": "^4.0.12",
|
|
35
|
+
"@things-factory/operato-board": "^4.0.12",
|
|
36
|
+
"@types/chart.js": "2.9.34",
|
|
37
|
+
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
|
38
|
+
"@typescript-eslint/parser": "^4.33.0",
|
|
39
|
+
"@web/dev-server": "^0.1.28",
|
|
40
|
+
"concurrently": "^5.3.0",
|
|
41
|
+
"eslint": "^7.32.0",
|
|
42
|
+
"eslint-config-prettier": "^8.3.0",
|
|
43
|
+
"husky": "^4.3.8",
|
|
44
|
+
"lint-staged": "^10.5.4",
|
|
45
|
+
"prettier": "^2.4.1",
|
|
46
|
+
"tslib": "^2.3.1",
|
|
47
|
+
"typescript": "^4.5.2"
|
|
48
|
+
},
|
|
49
|
+
"prettier": "@hatiolab/prettier-config",
|
|
50
|
+
"husky": {
|
|
51
|
+
"hooks": {
|
|
52
|
+
"pre-commit": "lint-staged"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"lint-staged": {
|
|
56
|
+
"*.ts": [
|
|
57
|
+
"eslint --fix",
|
|
58
|
+
"prettier --write"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"gitHead": "73c1f297d63e6a7c92516c206bcce3f5310c77ee"
|
|
62
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { Component, RectPath, Style } from '@hatiolab/things-scene'
|
|
5
|
+
|
|
6
|
+
import { Table } from '..'
|
|
7
|
+
|
|
8
|
+
const NATURE = {
|
|
9
|
+
mutable: false,
|
|
10
|
+
resizable: true,
|
|
11
|
+
rotatable: true,
|
|
12
|
+
properties: [
|
|
13
|
+
{
|
|
14
|
+
type: 'editor-table',
|
|
15
|
+
label: '',
|
|
16
|
+
name: '',
|
|
17
|
+
property: {
|
|
18
|
+
merge: false,
|
|
19
|
+
split: false
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
help: 'scene/component/data-cell'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default class DataCell extends RectPath(Component) {
|
|
27
|
+
get nature() {
|
|
28
|
+
return NATURE
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
_drawBorder(context: CanvasRenderingContext2D, x: number, y: number, to_x: number, to_y: number, style: Style) {
|
|
32
|
+
if (style && style.strokeStyle && style.lineWidth && style.lineDash) {
|
|
33
|
+
context.beginPath()
|
|
34
|
+
context.moveTo(x, y)
|
|
35
|
+
context.lineTo(to_x, to_y)
|
|
36
|
+
Component.drawStroke(context, style)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
_draw(context: CanvasRenderingContext2D) {
|
|
41
|
+
var { left, top, width, height } = this.bounds
|
|
42
|
+
|
|
43
|
+
var border = this.model.border || {}
|
|
44
|
+
|
|
45
|
+
// Cell 채우기.
|
|
46
|
+
context.beginPath()
|
|
47
|
+
context.lineWidth = 0
|
|
48
|
+
context.rect(left, top, width, height)
|
|
49
|
+
this.drawFill(context)
|
|
50
|
+
|
|
51
|
+
// Border 그리기
|
|
52
|
+
var parent = this.parent as Table
|
|
53
|
+
var idx = parent.components.indexOf(this)
|
|
54
|
+
var columns = parent.columns || 1
|
|
55
|
+
|
|
56
|
+
this._drawBorder(context, left, top, left + width, top, border.top)
|
|
57
|
+
this._drawBorder(context, left, top + height, left, top, border.left)
|
|
58
|
+
if ((idx + 1) % columns == 0) {
|
|
59
|
+
/* if this filed is right most, draw right side border. */
|
|
60
|
+
this._drawBorder(context, left + width, top, left + width, top + height, border.right)
|
|
61
|
+
}
|
|
62
|
+
this._drawBorder(context, left + width, top + height, left, top + height, border.bottom)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
Component.register('data-cell', DataCell)
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { Component, Container, Layout } from '@hatiolab/things-scene'
|
|
6
|
+
|
|
7
|
+
import DataCell from './data-cell'
|
|
8
|
+
import DataList from './data-list'
|
|
9
|
+
|
|
10
|
+
var DataListLayout = {
|
|
11
|
+
reflow: function(container: Container) {
|
|
12
|
+
var layoutConfig = container.get('layoutConfig')
|
|
13
|
+
|
|
14
|
+
var columns = (layoutConfig && layoutConfig.columns) || container.get('columns')
|
|
15
|
+
var rows = (layoutConfig && layoutConfig.rows) || container.get('rows')
|
|
16
|
+
var widths = (layoutConfig && layoutConfig.widths) || container.get('widths')
|
|
17
|
+
var heights = (layoutConfig && layoutConfig.heights) || container.get('heights')
|
|
18
|
+
var { offset = { x: 0, y: 0 } } = container.state
|
|
19
|
+
|
|
20
|
+
var widths_sum = widths ? widths.filter((width: number, i: number) => i < columns).reduce((sum: number, width: number) => sum + width, 0) : columns
|
|
21
|
+
var heights_sum = heights ? heights.filter((height: number, i: number) => i < rows).reduce((sum: number, height: number) => sum + height, 0) : rows
|
|
22
|
+
|
|
23
|
+
var inside = container.textBounds
|
|
24
|
+
var paddingLeft = container.get('paddingLeft') || 0
|
|
25
|
+
var paddingTop = container.get('paddingTop') || 0
|
|
26
|
+
|
|
27
|
+
var width_unit = inside.width / widths_sum
|
|
28
|
+
var height_unit = inside.height / heights_sum
|
|
29
|
+
|
|
30
|
+
var x = offset.x
|
|
31
|
+
var y = offset.y
|
|
32
|
+
var components = container.components
|
|
33
|
+
|
|
34
|
+
components.forEach((component, idx) => {
|
|
35
|
+
let w = widths ? widths[idx % columns] : 1
|
|
36
|
+
let h = heights ? heights[0] : 1
|
|
37
|
+
|
|
38
|
+
let left = paddingLeft + x
|
|
39
|
+
let top = paddingTop + y
|
|
40
|
+
let width = width_unit * w
|
|
41
|
+
let height = height_unit * h
|
|
42
|
+
|
|
43
|
+
component.bounds = {
|
|
44
|
+
left,
|
|
45
|
+
top,
|
|
46
|
+
width,
|
|
47
|
+
height
|
|
48
|
+
}
|
|
49
|
+
component.set('rotation', 0)
|
|
50
|
+
|
|
51
|
+
if (idx % columns == columns - 1) {
|
|
52
|
+
x = 0
|
|
53
|
+
y += h * height_unit
|
|
54
|
+
} else {
|
|
55
|
+
x += w * width_unit
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
capturables: function(container: Container) {
|
|
61
|
+
return container.components
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
drawables: function(container: Container) {
|
|
65
|
+
return container.components
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
isStuck: function(component: Component) {
|
|
69
|
+
return true
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* 레이아웃별로, 키보드 방향키 등을 사용해서 네비게이션 할 수 있는 기능을 제공할 수 있다.
|
|
74
|
+
* 하나의 컴포넌트만 선택되어있고, 키보드 이벤트가 발생했을 때 호출되게 된다.
|
|
75
|
+
* keyNavigate 메쏘드가 정의되어 있지 않으면, 'Tab' 키에 대한 네비게이션만 작동한다.
|
|
76
|
+
* 'Tab'키에 의한 네비게이션은 모든 레이아웃에 공통으로 적용된다.
|
|
77
|
+
*/
|
|
78
|
+
keyNavigate: function(container: Container, component: Component, e: KeyboardEvent) {
|
|
79
|
+
var layoutConfig = container.get('layoutConfig')
|
|
80
|
+
|
|
81
|
+
var columns = (layoutConfig && layoutConfig.columns) || container.get('columns')
|
|
82
|
+
var rows = (layoutConfig && layoutConfig.rows) || container.get('rows')
|
|
83
|
+
|
|
84
|
+
var { row, column } = (container as DataList).getRowColumn(component as DataCell)
|
|
85
|
+
|
|
86
|
+
switch (e.code) {
|
|
87
|
+
case 'ArrowUp':
|
|
88
|
+
if (row > 0) return container.getAt((row - 1) * columns + column)
|
|
89
|
+
break
|
|
90
|
+
case 'ArrowDown':
|
|
91
|
+
if (row < rows - 1) return container.getAt((row + 1) * columns + column)
|
|
92
|
+
break
|
|
93
|
+
case 'ArrowRight':
|
|
94
|
+
if (column < columns - 1) return container.getAt(row * columns + column + 1)
|
|
95
|
+
break
|
|
96
|
+
case 'ArrowLeft':
|
|
97
|
+
if (column > 0) return container.getAt(row * columns + column - 1)
|
|
98
|
+
break
|
|
99
|
+
default:
|
|
100
|
+
return component
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
/*
|
|
105
|
+
* 하위 컴포넌트를 영역으로 선택하는 경우에, 바운드에 join만 되어도 선택된 것으로 판단하도록 한다.
|
|
106
|
+
* joinType이 false이거나, 정의되어있지 않으면, 바운드에 포함되어야 선택된 것으로 판단한다.
|
|
107
|
+
*/
|
|
108
|
+
joinType: true
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
Layout.register('data-list', DataListLayout)
|
|
112
|
+
|
|
113
|
+
export default DataListLayout
|