e-virt-table 0.0.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.
- package/LICENSE +21 -0
- package/README.md +2 -0
- package/dist/index.cjs.js +14 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.es.js +5422 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.umd.js +14 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/lib/Autofill.d.ts +20 -0
- package/dist/lib/Autofill.js +185 -0
- package/dist/lib/Autofill.js.map +1 -0
- package/dist/lib/BaseCell.d.ts +22 -0
- package/dist/lib/BaseCell.js +111 -0
- package/dist/lib/BaseCell.js.map +1 -0
- package/dist/lib/Body.d.ts +29 -0
- package/dist/lib/Body.js +382 -0
- package/dist/lib/Body.js.map +1 -0
- package/dist/lib/Cell.d.ts +101 -0
- package/dist/lib/Cell.js +943 -0
- package/dist/lib/Cell.js.map +1 -0
- package/dist/lib/CellHeader.d.ts +64 -0
- package/dist/lib/CellHeader.js +355 -0
- package/dist/lib/CellHeader.js.map +1 -0
- package/dist/lib/Config.d.ts +106 -0
- package/dist/lib/Config.js +617 -0
- package/dist/lib/Config.js.map +1 -0
- package/dist/lib/Context.d.ts +123 -0
- package/dist/lib/Context.js +419 -0
- package/dist/lib/Context.js.map +1 -0
- package/dist/lib/Database.d.ts +228 -0
- package/dist/lib/Database.js +931 -0
- package/dist/lib/Database.js.map +1 -0
- package/dist/lib/EVirtTable.d.ts +61 -0
- package/dist/lib/EVirtTable.js +321 -0
- package/dist/lib/EVirtTable.js.map +1 -0
- package/dist/lib/Editor.d.ts +16 -0
- package/dist/lib/Editor.js +251 -0
- package/dist/lib/Editor.js.map +1 -0
- package/dist/lib/Empty.d.ts +7 -0
- package/dist/lib/Empty.js +45 -0
- package/dist/lib/Empty.js.map +1 -0
- package/dist/lib/EventBrowser.d.ts +17 -0
- package/dist/lib/EventBrowser.js +79 -0
- package/dist/lib/EventBrowser.js.map +1 -0
- package/dist/lib/EventBus.d.ts +12 -0
- package/dist/lib/EventBus.js +58 -0
- package/dist/lib/EventBus.js.map +1 -0
- package/dist/lib/EventTable.d.ts +26 -0
- package/dist/lib/EventTable.js +358 -0
- package/dist/lib/EventTable.js.map +1 -0
- package/dist/lib/Footer.d.ts +17 -0
- package/dist/lib/Footer.js +138 -0
- package/dist/lib/Footer.js.map +1 -0
- package/dist/lib/Header.d.ts +37 -0
- package/dist/lib/Header.js +482 -0
- package/dist/lib/Header.js.map +1 -0
- package/dist/lib/History.d.ts +27 -0
- package/dist/lib/History.js +106 -0
- package/dist/lib/History.js.map +1 -0
- package/dist/lib/Icons.d.ts +15 -0
- package/dist/lib/Icons.js +145 -0
- package/dist/lib/Icons.js.map +1 -0
- package/dist/lib/Overlayer.d.ts +10 -0
- package/dist/lib/Overlayer.js +267 -0
- package/dist/lib/Overlayer.js.map +1 -0
- package/dist/lib/Paint.d.ts +65 -0
- package/dist/lib/Paint.js +223 -0
- package/dist/lib/Paint.js.map +1 -0
- package/dist/lib/Row.d.ts +22 -0
- package/dist/lib/Row.js +125 -0
- package/dist/lib/Row.js.map +1 -0
- package/dist/lib/Scroller.d.ts +20 -0
- package/dist/lib/Scroller.js +448 -0
- package/dist/lib/Scroller.js.map +1 -0
- package/dist/lib/Selector.d.ts +38 -0
- package/dist/lib/Selector.js +532 -0
- package/dist/lib/Selector.js.map +1 -0
- package/dist/lib/Tooltip.d.ts +13 -0
- package/dist/lib/Tooltip.js +204 -0
- package/dist/lib/Tooltip.js.map +1 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.js +4 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/types.d.ts +160 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/util.d.ts +15 -0
- package/dist/lib/util.js +113 -0
- package/dist/lib/util.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import Cell from "./Cell";
|
|
2
|
+
import CellHeader from "./CellHeader";
|
|
3
|
+
export default class EventTable {
|
|
4
|
+
constructor(ctx) {
|
|
5
|
+
Object.defineProperty(this, "ctx", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
configurable: true,
|
|
8
|
+
writable: true,
|
|
9
|
+
value: void 0
|
|
10
|
+
});
|
|
11
|
+
Object.defineProperty(this, "visibleHoverCell", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true,
|
|
15
|
+
value: void 0
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(this, "resizeObserver", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: void 0
|
|
22
|
+
});
|
|
23
|
+
this.ctx = ctx;
|
|
24
|
+
this.init();
|
|
25
|
+
}
|
|
26
|
+
init() {
|
|
27
|
+
// 监听窗口大小变化
|
|
28
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
29
|
+
this.ctx.emit("resetHeader");
|
|
30
|
+
this.ctx.emit("resizeObserver");
|
|
31
|
+
});
|
|
32
|
+
if (this.ctx.target.parentElement) {
|
|
33
|
+
this.resizeObserver.observe(this.ctx.target);
|
|
34
|
+
}
|
|
35
|
+
// 按下事件
|
|
36
|
+
this.ctx.on("mousedown", (e) => {
|
|
37
|
+
// 左边点击
|
|
38
|
+
if (e.button !== 0) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// 是否忙碌,进行其他操作
|
|
42
|
+
if (this.isBusy(e)) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const y = e.offsetY;
|
|
46
|
+
const x = e.offsetX;
|
|
47
|
+
// header
|
|
48
|
+
const renderCellHeaders = this.ctx.header.renderCellHeaders;
|
|
49
|
+
for (const cell of renderCellHeaders) {
|
|
50
|
+
const drawX = cell.getDrawX();
|
|
51
|
+
const drawY = cell.getDrawY();
|
|
52
|
+
if (x > drawX &&
|
|
53
|
+
x < drawX + cell.width &&
|
|
54
|
+
y > drawY &&
|
|
55
|
+
y < drawY + cell.height) {
|
|
56
|
+
this.ctx.focusCellHeader = cell;
|
|
57
|
+
this.ctx.emit("cellHeaderMousedown", cell, e);
|
|
58
|
+
return; // 找到后直接返回
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// body
|
|
62
|
+
const renderRows = this.ctx.body.renderRows;
|
|
63
|
+
for (const row of renderRows) {
|
|
64
|
+
// 优先处理固定列
|
|
65
|
+
const cells = row.fixedCells.concat(row.noFixedCells);
|
|
66
|
+
for (const cell of cells) {
|
|
67
|
+
const drawX = cell.getDrawX();
|
|
68
|
+
const drawY = cell.getDrawY();
|
|
69
|
+
if (x > drawX &&
|
|
70
|
+
x < drawX + cell.width &&
|
|
71
|
+
y > drawY &&
|
|
72
|
+
y < drawY + cell.height) {
|
|
73
|
+
this.ctx.setFocusCell(cell);
|
|
74
|
+
this.ctx.emit("cellMousedown", cell, e);
|
|
75
|
+
return; // 找到后直接返回
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
this.ctx.on("click", (e) => {
|
|
81
|
+
// 左边点击
|
|
82
|
+
if (e.button !== 0) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// 是否忙碌,进行其他操作
|
|
86
|
+
if (this.isBusy(e)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const y = e.offsetY;
|
|
90
|
+
const x = e.offsetX;
|
|
91
|
+
// header
|
|
92
|
+
const renderCellHeaders = this.ctx.header.renderCellHeaders;
|
|
93
|
+
for (const cell of renderCellHeaders) {
|
|
94
|
+
const drawX = cell.getDrawX();
|
|
95
|
+
const drawY = cell.getDrawY();
|
|
96
|
+
if (x > drawX &&
|
|
97
|
+
x < drawX + cell.width &&
|
|
98
|
+
y > drawY &&
|
|
99
|
+
y < drawY + cell.height) {
|
|
100
|
+
this.ctx.clickCellHeader = cell;
|
|
101
|
+
this.ctx.emit("cellHeaderClick", cell, e);
|
|
102
|
+
// selection事件
|
|
103
|
+
this.selectionClick(cell);
|
|
104
|
+
return; // 找到后直接返回
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// body
|
|
108
|
+
const renderRows = this.ctx.body.renderRows;
|
|
109
|
+
for (const row of renderRows) {
|
|
110
|
+
// 优先处理固定列
|
|
111
|
+
const cells = row.fixedCells.concat(row.noFixedCells);
|
|
112
|
+
for (const cell of cells) {
|
|
113
|
+
const drawX = cell.getDrawX();
|
|
114
|
+
const drawY = cell.getDrawY();
|
|
115
|
+
if (x > drawX &&
|
|
116
|
+
x < drawX + cell.width &&
|
|
117
|
+
y > drawY &&
|
|
118
|
+
y < drawY + cell.height) {
|
|
119
|
+
this.ctx.clickCell = cell;
|
|
120
|
+
this.ctx.emit("cellClick", cell, e);
|
|
121
|
+
// selection事件
|
|
122
|
+
this.selectionClick(cell);
|
|
123
|
+
// 树事件
|
|
124
|
+
this.treeClick(cell);
|
|
125
|
+
return; // 找到后直接返回
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
this.ctx.on("mousemove", (e) => {
|
|
131
|
+
// 是否忙碌,进行其他操作
|
|
132
|
+
if (this.isBusy(e)) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const y = e.offsetY;
|
|
136
|
+
const x = e.offsetX;
|
|
137
|
+
// header
|
|
138
|
+
const renderCellHeaders = this.ctx.header.renderCellHeaders;
|
|
139
|
+
for (const cell of renderCellHeaders) {
|
|
140
|
+
const drawX = cell.getDrawX();
|
|
141
|
+
const drawY = cell.getDrawY();
|
|
142
|
+
if (x > drawX &&
|
|
143
|
+
x < drawX + cell.width &&
|
|
144
|
+
y > drawY &&
|
|
145
|
+
y < drawY + cell.height) {
|
|
146
|
+
this.ctx.emit("cellHeaderMouseenter", cell, e);
|
|
147
|
+
// 移出事件
|
|
148
|
+
if (this.ctx.hoverCellHeader && this.ctx.hoverCellHeader !== cell) {
|
|
149
|
+
this.ctx.emit("cellHeaderMouseleave", this.ctx.hoverCellHeader, e);
|
|
150
|
+
}
|
|
151
|
+
// selection头部事件
|
|
152
|
+
this.imageEnterAndLeave(cell, e);
|
|
153
|
+
if (this.ctx.hoverCellHeader === cell) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
this.ctx.hoverCellHeader = cell;
|
|
157
|
+
this.ctx.emit("cellHeaderHoverChange", cell);
|
|
158
|
+
return; // 找到后直接返回
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// body
|
|
162
|
+
const renderRows = this.ctx.body.renderRows;
|
|
163
|
+
for (const row of renderRows) {
|
|
164
|
+
// 优先处理固定列
|
|
165
|
+
const cells = row.fixedCells.concat(row.noFixedCells);
|
|
166
|
+
for (const cell of cells) {
|
|
167
|
+
const layerX = cell.getDrawX();
|
|
168
|
+
const layerY = cell.getDrawY();
|
|
169
|
+
// 因为可能有合并单元格,所以这里要判断是可视区域
|
|
170
|
+
if (x > layerX &&
|
|
171
|
+
x < layerX + cell.visibleWidth &&
|
|
172
|
+
y > layerY &&
|
|
173
|
+
y < layerY + cell.visibleHeight) {
|
|
174
|
+
// selection移入移除事件
|
|
175
|
+
this.imageEnterAndLeave(cell, e);
|
|
176
|
+
// this.ctx.emit("visibleCellHoverChange", cell, e);
|
|
177
|
+
if (this.visibleHoverCell !== cell) {
|
|
178
|
+
this.ctx.emit("visibleCellMouseleave", cell, e);
|
|
179
|
+
this.visibleHoverCell = cell;
|
|
180
|
+
this.ctx.emit("visibleCellHoverChange", cell, e);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (x > layerX &&
|
|
184
|
+
x < layerX + cell.width &&
|
|
185
|
+
y > layerY &&
|
|
186
|
+
y < layerY + cell.height) {
|
|
187
|
+
this.ctx.emit("cellMouseenter", cell, e);
|
|
188
|
+
// 移出事件
|
|
189
|
+
if (this.ctx.hoverCell && this.ctx.hoverCell !== cell) {
|
|
190
|
+
this.ctx.emit("cellMouseleave", this.ctx.hoverCell, e);
|
|
191
|
+
}
|
|
192
|
+
if (this.ctx.hoverCell === cell)
|
|
193
|
+
return;
|
|
194
|
+
if (this.ctx.hoverCell?.rowKey !== cell.rowKey) {
|
|
195
|
+
this.ctx.hoverCell = cell;
|
|
196
|
+
this.ctx.hoverRow = this.ctx.body.renderRows[cell.rowIndex];
|
|
197
|
+
this.ctx.emit("rowHoverChange", this.ctx.hoverRow, cell, e);
|
|
198
|
+
this.ctx.emit("draw");
|
|
199
|
+
}
|
|
200
|
+
this.ctx.hoverCell = cell;
|
|
201
|
+
this.ctx.emit("cellHoverChange", cell, e);
|
|
202
|
+
return; // 找到后直接返回
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
*选中点击
|
|
210
|
+
* @param cell
|
|
211
|
+
*/
|
|
212
|
+
selectionClick(cell) {
|
|
213
|
+
// 鼠标移动到图标上会变成pointer,所以这里判断是否是pointer就能判断出是图标点击的
|
|
214
|
+
const isSelection = ["selection", "index-selection"].includes(cell.type) &&
|
|
215
|
+
this.ctx.isPointer;
|
|
216
|
+
if (!isSelection) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
// 点击头部
|
|
220
|
+
if (cell instanceof CellHeader) {
|
|
221
|
+
if (cell.drawImageName === "checkbox-uncheck" ||
|
|
222
|
+
cell.drawImageName === "checkbox-indeterminate") {
|
|
223
|
+
this.ctx.database.toggleAllSelection();
|
|
224
|
+
}
|
|
225
|
+
else if (cell.drawImageName === "checkbox-check") {
|
|
226
|
+
this.ctx.database.clearSelection();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
// 点击body
|
|
231
|
+
// 是否可点击
|
|
232
|
+
const selectable = this.ctx.database.getRowSelectable(cell.rowKey);
|
|
233
|
+
if (!selectable) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
this.ctx.database.toggleRowSelection(cell.rowKey);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* 树点击
|
|
241
|
+
* @param cell
|
|
242
|
+
*/
|
|
243
|
+
treeClick(cell) {
|
|
244
|
+
// 鼠标移动到图标上会变成pointer,所以这里判断是否是pointer就能判断出是图标点击的
|
|
245
|
+
if (cell.type === "tree" && this.ctx.isPointer) {
|
|
246
|
+
const row = this.ctx.database.getRowForRowKey(cell.rowKey);
|
|
247
|
+
const { expand = false, expandLazy = false } = row || {};
|
|
248
|
+
const { EXPAND_LAZY, EXPAND_LAZY_METHOD } = this.ctx.config;
|
|
249
|
+
// 懒加载且有懒加载方法,不是展开的不是已经加载过的
|
|
250
|
+
if (EXPAND_LAZY && EXPAND_LAZY_METHOD && !expand && !expandLazy) {
|
|
251
|
+
if (typeof EXPAND_LAZY_METHOD === "function") {
|
|
252
|
+
this.ctx.database.expandLoading(cell.rowKey, true);
|
|
253
|
+
const expandLazyMethod = EXPAND_LAZY_METHOD;
|
|
254
|
+
expandLazyMethod({
|
|
255
|
+
row: cell.row,
|
|
256
|
+
rowIndex: cell.rowIndex,
|
|
257
|
+
colIndex: cell.colIndex,
|
|
258
|
+
column: cell.column,
|
|
259
|
+
value: cell.getValue(),
|
|
260
|
+
})
|
|
261
|
+
.then((res) => {
|
|
262
|
+
this.ctx.database.setExpandChildren(cell.rowKey, res);
|
|
263
|
+
this.ctx.database.expandLoading(cell.rowKey, false);
|
|
264
|
+
})
|
|
265
|
+
.catch((err) => {
|
|
266
|
+
this.ctx.database.expandLoading(cell.rowKey, false);
|
|
267
|
+
console.error(err);
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
// 懒加载
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
const isExpand = this.ctx.database.getIsExpand(cell.rowKey);
|
|
274
|
+
this.ctx.database.expandItem(cell.rowKey, !isExpand);
|
|
275
|
+
this.ctx.emit("expandChange");
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* 图标进入和离开事件,包括选中,展开,提示图标等
|
|
281
|
+
* @param cell
|
|
282
|
+
* @param e
|
|
283
|
+
*/
|
|
284
|
+
imageEnterAndLeave(cell, e) {
|
|
285
|
+
const y = e.offsetY;
|
|
286
|
+
const x = e.offsetX;
|
|
287
|
+
if (x > cell.drawImageX &&
|
|
288
|
+
x < cell.drawImageX + cell.drawImageWidth &&
|
|
289
|
+
y > cell.drawImageY &&
|
|
290
|
+
y < cell.drawImageY + cell.drawImageHeight) {
|
|
291
|
+
this.ctx.target.style.cursor = "pointer";
|
|
292
|
+
this.ctx.isPointer = true;
|
|
293
|
+
// body cell 选中图标
|
|
294
|
+
if (cell instanceof Cell &&
|
|
295
|
+
["selection", "index-selection"].includes(cell.type)) {
|
|
296
|
+
// body cell 需要处理是否可选
|
|
297
|
+
const selectable = this.ctx.database.getRowSelectable(cell.rowKey);
|
|
298
|
+
if (!selectable) {
|
|
299
|
+
this.ctx.target.style.cursor = "not-allowed";
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
this.ctx.isPointer = false;
|
|
305
|
+
if (this.ctx.target.style.cursor === "pointer") {
|
|
306
|
+
this.ctx.target.style.cursor = "default";
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
isBusy(e) {
|
|
311
|
+
const y = e.offsetY;
|
|
312
|
+
const x = e.offsetX;
|
|
313
|
+
if (!(e.target instanceof HTMLCanvasElement)) {
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
if (!this.ctx.isTarget(e.target)) {
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
// 行调整大小中不处理
|
|
320
|
+
if (this.ctx.target.style.cursor === "row-resize") {
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
// 列调整大小中不处理
|
|
324
|
+
if (this.ctx.target.style.cursor === "col-resize") {
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
// 列调整大小中不处理
|
|
328
|
+
if (this.ctx.columnResizing) {
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
// 行调整大小中不处理
|
|
332
|
+
if (this.ctx.rowResizing) {
|
|
333
|
+
return true;
|
|
334
|
+
}
|
|
335
|
+
const { SCROLLER_TRACK_SIZE } = this.ctx.config;
|
|
336
|
+
// 滚动条移动不处理
|
|
337
|
+
if (this.ctx.scrollerMove) {
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
// 滚动条悬浮不处理
|
|
341
|
+
if (this.ctx.scrollerFocus) {
|
|
342
|
+
return true;
|
|
343
|
+
}
|
|
344
|
+
// 点击滚动条不处理
|
|
345
|
+
if (y > this.ctx.target.height - SCROLLER_TRACK_SIZE) {
|
|
346
|
+
return true;
|
|
347
|
+
}
|
|
348
|
+
// 点击滚动条不处理
|
|
349
|
+
if (x > this.ctx.target.width - SCROLLER_TRACK_SIZE) {
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
return false;
|
|
353
|
+
}
|
|
354
|
+
destroy() {
|
|
355
|
+
this.resizeObserver.unobserve(this.ctx.target);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=EventTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventTable.js","sourceRoot":"","sources":["../../src/EventTable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import Context from "./Context";
|
|
2
|
+
export default class Footer {
|
|
3
|
+
private ctx;
|
|
4
|
+
private renderRows;
|
|
5
|
+
private data;
|
|
6
|
+
private x;
|
|
7
|
+
private y;
|
|
8
|
+
private width;
|
|
9
|
+
private height;
|
|
10
|
+
private visibleWidth;
|
|
11
|
+
private visibleHeight;
|
|
12
|
+
constructor(ctx: Context);
|
|
13
|
+
private init;
|
|
14
|
+
private drawFiexShadow;
|
|
15
|
+
update(): void;
|
|
16
|
+
draw(): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import Row from "./Row";
|
|
2
|
+
export default class Footer {
|
|
3
|
+
constructor(ctx) {
|
|
4
|
+
Object.defineProperty(this, "ctx", {
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true,
|
|
8
|
+
value: void 0
|
|
9
|
+
});
|
|
10
|
+
Object.defineProperty(this, "renderRows", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: []
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(this, "data", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: []
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "x", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: 0
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(this, "y", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: 0
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(this, "width", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: 0
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(this, "height", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
value: 0
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(this, "visibleWidth", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
configurable: true,
|
|
49
|
+
writable: true,
|
|
50
|
+
value: 0
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(this, "visibleHeight", {
|
|
53
|
+
enumerable: true,
|
|
54
|
+
configurable: true,
|
|
55
|
+
writable: true,
|
|
56
|
+
value: 0
|
|
57
|
+
});
|
|
58
|
+
this.ctx = ctx;
|
|
59
|
+
this.init();
|
|
60
|
+
}
|
|
61
|
+
init() {
|
|
62
|
+
this.data = this.ctx.database.getFooterData();
|
|
63
|
+
const { header, body, config: { CELL_FOOTER_HEIGHT, FOOTER_FIXED, SCROLLER_TRACK_SIZE }, } = this.ctx;
|
|
64
|
+
// 更新宽度
|
|
65
|
+
this.width = header.width;
|
|
66
|
+
this.visibleWidth = header.visibleWidth;
|
|
67
|
+
// 更新高度
|
|
68
|
+
this.height = this.data.reduce((sum) => {
|
|
69
|
+
return sum + CELL_FOOTER_HEIGHT;
|
|
70
|
+
}, 0);
|
|
71
|
+
// 可视区高度
|
|
72
|
+
this.visibleHeight = this.height;
|
|
73
|
+
if (FOOTER_FIXED) {
|
|
74
|
+
this.y = this.ctx.target.height - this.height - SCROLLER_TRACK_SIZE;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.y = body.y + body.height;
|
|
78
|
+
}
|
|
79
|
+
this.ctx.footer.x = this.x;
|
|
80
|
+
this.ctx.footer.y = this.y;
|
|
81
|
+
this.ctx.footer.height = this.height;
|
|
82
|
+
this.ctx.footer.width = this.width;
|
|
83
|
+
this.ctx.footer.visibleWidth = this.visibleWidth;
|
|
84
|
+
this.ctx.footer.visibleHeight = this.visibleHeight;
|
|
85
|
+
}
|
|
86
|
+
drawFiexShadow() {
|
|
87
|
+
const { fixedLeftWidth, fixedRightWidth, scrollX, header, target, config: { HEADER_BG_COLOR, SCROLLER_TRACK_SIZE }, } = this.ctx;
|
|
88
|
+
let y = this.y;
|
|
89
|
+
// 不是footer固定时
|
|
90
|
+
if (!this.ctx.config.FOOTER_FIXED) {
|
|
91
|
+
y = this.y - this.ctx.scrollY;
|
|
92
|
+
}
|
|
93
|
+
if (scrollX > 0 && fixedLeftWidth !== 0) {
|
|
94
|
+
this.ctx.paint.drawShadow(this.x, y, fixedLeftWidth, this.height, {
|
|
95
|
+
fillColor: HEADER_BG_COLOR,
|
|
96
|
+
side: "right",
|
|
97
|
+
shadowWidth: 4,
|
|
98
|
+
colorStart: "rgba(0,0,0,0.1)",
|
|
99
|
+
colorEnd: "rgba(0,0,0,0)",
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// 右边阴影
|
|
103
|
+
if (scrollX < Math.floor(header.width - header.visibleWidth - 1) &&
|
|
104
|
+
fixedRightWidth !== SCROLLER_TRACK_SIZE) {
|
|
105
|
+
const x = header.width - (this.x + this.width) + target.width - fixedRightWidth;
|
|
106
|
+
this.ctx.paint.drawShadow(x + 1, y, fixedRightWidth, this.height, {
|
|
107
|
+
fillColor: HEADER_BG_COLOR,
|
|
108
|
+
side: "left",
|
|
109
|
+
shadowWidth: 4,
|
|
110
|
+
colorStart: "rgba(0,0,0,0)",
|
|
111
|
+
colorEnd: "rgba(0,0,0,0.1)",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
update() {
|
|
116
|
+
this.init();
|
|
117
|
+
const { CELL_FOOTER_HEIGHT } = this.ctx.config;
|
|
118
|
+
let everyOffsetY = this.y;
|
|
119
|
+
const rows = [];
|
|
120
|
+
this.data.forEach((data, index) => {
|
|
121
|
+
const row = new Row(this.ctx, index, 0, everyOffsetY, this.width, CELL_FOOTER_HEIGHT, data, "footer");
|
|
122
|
+
everyOffsetY += CELL_FOOTER_HEIGHT;
|
|
123
|
+
rows.push(row);
|
|
124
|
+
});
|
|
125
|
+
this.renderRows = rows;
|
|
126
|
+
this.ctx.footer.renderRows = this.renderRows;
|
|
127
|
+
}
|
|
128
|
+
draw() {
|
|
129
|
+
this.renderRows.forEach((row) => {
|
|
130
|
+
row.drawCenter();
|
|
131
|
+
});
|
|
132
|
+
this.drawFiexShadow();
|
|
133
|
+
this.renderRows.forEach((row) => {
|
|
134
|
+
row.drawFixed();
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=Footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../src/Footer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import Context from "./Context";
|
|
2
|
+
export default class Header {
|
|
3
|
+
private ctx;
|
|
4
|
+
private x;
|
|
5
|
+
private y;
|
|
6
|
+
private width;
|
|
7
|
+
private height;
|
|
8
|
+
private resizeTarget;
|
|
9
|
+
private resizeNum;
|
|
10
|
+
private isResizing;
|
|
11
|
+
private offsetX;
|
|
12
|
+
private resizeDiff;
|
|
13
|
+
private columnIndex;
|
|
14
|
+
private isMouseDown;
|
|
15
|
+
private columns;
|
|
16
|
+
private visibleLeafColumns;
|
|
17
|
+
private visibleHeight;
|
|
18
|
+
private visibleWidth;
|
|
19
|
+
private allCellHeaders;
|
|
20
|
+
private leafCellHeaders;
|
|
21
|
+
private renderLeafCellHeaders;
|
|
22
|
+
private fixedLeftCellHeaders;
|
|
23
|
+
private centerCellHeaders;
|
|
24
|
+
private fixedRightCellHeaders;
|
|
25
|
+
private renderCenterCellHeaders;
|
|
26
|
+
private renderFixedCellHeaders;
|
|
27
|
+
constructor(ctx: Context);
|
|
28
|
+
init(): void;
|
|
29
|
+
private initResizeColumn;
|
|
30
|
+
private resizeColumn;
|
|
31
|
+
resizeAllColumn(fellWidth: number): void;
|
|
32
|
+
private render;
|
|
33
|
+
private drawTipLine;
|
|
34
|
+
private drawFiexShadow;
|
|
35
|
+
update(): void;
|
|
36
|
+
draw(): void;
|
|
37
|
+
}
|