@kdcloudjs/table 1.0.2 → 1.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/dist/@kdcloudjs/table.css +1 -1
- package/dist/@kdcloudjs/table.js +270 -188
- package/dist/@kdcloudjs/table.js.map +1 -1
- package/dist/@kdcloudjs/table.min.css +1 -1
- package/dist/@kdcloudjs/table.min.js +7 -7
- package/dist/@kdcloudjs/table.min.js.map +1 -1
- package/es/table/base/calculations.js +1 -1
- package/es/table/base/empty.js +2 -2
- package/es/table/base/header.js +7 -11
- package/es/table/base/html-table.js +13 -22
- package/es/table/base/styles.d.ts +10 -0
- package/es/table/base/styles.js +13 -3
- package/es/table/common-views.js +2 -2
- package/es/table/pipeline/features/__test__/treeMode.test.js +2 -1
- package/es/table/pipeline/features/columnDrag.js +62 -21
- package/es/table/pipeline/features/contextMenu.js +37 -22
- package/es/table/pipeline/features/multiSelect.js +83 -79
- package/es/table/pipeline/features/rowDetail.js +2 -1
- package/es/table/pipeline/features/rowGrouping.js +2 -1
- package/es/table/pipeline/features/treeMode.js +3 -2
- package/es/table/pipeline/pipeline.d.ts +4 -0
- package/es/table/pipeline/pipeline.js +17 -0
- package/es/table/pivot/pivot-utils/convert-utils.js +4 -2
- package/lib/table/base/calculations.js +1 -1
- package/lib/table/base/empty.js +2 -2
- package/lib/table/base/header.js +8 -11
- package/lib/table/base/html-table.js +14 -22
- package/lib/table/base/styles.d.ts +10 -0
- package/lib/table/base/styles.js +13 -3
- package/lib/table/common-views.js +1 -1
- package/lib/table/pipeline/features/__test__/treeMode.test.js +3 -1
- package/lib/table/pipeline/features/columnDrag.js +63 -22
- package/lib/table/pipeline/features/contextMenu.js +37 -22
- package/lib/table/pipeline/features/multiSelect.js +79 -75
- package/lib/table/pipeline/features/rowDetail.js +3 -1
- package/lib/table/pipeline/features/rowGrouping.js +3 -1
- package/lib/table/pipeline/features/treeMode.js +4 -2
- package/lib/table/pipeline/pipeline.d.ts +4 -0
- package/lib/table/pipeline/pipeline.js +17 -0
- package/lib/table/pivot/pivot-utils/convert-utils.js +6 -2
- package/package.json +1 -1
|
@@ -191,7 +191,7 @@ function getHorizontalRenderRange(_ref) {
|
|
|
191
191
|
return {
|
|
192
192
|
leftIndex: leftIndex,
|
|
193
193
|
leftBlank: leftBlank,
|
|
194
|
-
rightIndex: leftIndex + centerCount
|
|
194
|
+
rightIndex: leftIndex + centerCount,
|
|
195
195
|
rightBlank: rightBlank
|
|
196
196
|
};
|
|
197
197
|
} // 一顿计算,将表格本次渲染所需要的数据都给算出来(代码写得有点乱,有较大优化空间)
|
package/es/table/base/empty.js
CHANGED
|
@@ -23,10 +23,10 @@ export function EmptyHtmlTable(_ref) {
|
|
|
23
23
|
}, /*#__PURE__*/React.createElement(Colgroup, {
|
|
24
24
|
descriptors: descriptors
|
|
25
25
|
}), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", {
|
|
26
|
-
className: cx(Classes.tableRow,
|
|
26
|
+
className: cx(Classes.tableRow, Classes.first, Classes.last, 'no-hover'),
|
|
27
27
|
"data-rowindex": 0
|
|
28
28
|
}, /*#__PURE__*/React.createElement("td", {
|
|
29
|
-
className: cx(Classes.tableCell,
|
|
29
|
+
className: cx(Classes.tableCell, Classes.first, Classes.last),
|
|
30
30
|
colSpan: descriptors.length,
|
|
31
31
|
style: {
|
|
32
32
|
height: emptyCellHeight !== null && emptyCellHeight !== void 0 ? emptyCellHeight : 200
|
package/es/table/base/header.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
|
|
1
2
|
import _extends from "@babel/runtime-corejs3/helpers/extends";
|
|
2
3
|
import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
|
|
3
4
|
import _flatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/flat";
|
|
@@ -241,6 +242,8 @@ export default function TableHeader(_ref2) {
|
|
|
241
242
|
var rightFlatCount = flat.right.length;
|
|
242
243
|
|
|
243
244
|
var thead = _mapInstanceProperty(_context4 = headerRenderInfo.leveled).call(_context4, function (wrappedCols, level) {
|
|
245
|
+
var _cx2;
|
|
246
|
+
|
|
244
247
|
var _wrappedCols = _concatInstanceProperty(wrappedCols).call(wrappedCols); // 左中右区域渲染,分组列可能单独位于一个区域,此时其他区域也需要适配分组的高度
|
|
245
248
|
// rowspan 需要空白的列头去占位, 需要补充额外的空白列头
|
|
246
249
|
|
|
@@ -258,6 +261,8 @@ export default function TableHeader(_ref2) {
|
|
|
258
261
|
var _a, _b, _c;
|
|
259
262
|
|
|
260
263
|
if (wrapped.type === 'normal') {
|
|
264
|
+
var _cx;
|
|
265
|
+
|
|
261
266
|
var colIndex = wrapped.colIndex,
|
|
262
267
|
colSpan = wrapped.colSpan,
|
|
263
268
|
isLeaf = wrapped.isLeaf,
|
|
@@ -277,13 +282,7 @@ export default function TableHeader(_ref2) {
|
|
|
277
282
|
var cell = /*#__PURE__*/React.createElement("th", _extends({
|
|
278
283
|
key: colIndex
|
|
279
284
|
}, headerCellProps, {
|
|
280
|
-
className: cx(Classes.tableHeaderCell, headerCellProps.className, {
|
|
281
|
-
first: colIndex === 0,
|
|
282
|
-
last: colIndex + colSpan === fullFlatCount,
|
|
283
|
-
'lock-left': colIndex < leftFlatCount || theaderPosition === 'left',
|
|
284
|
-
'lock-right': colIndex >= fullFlatCount - rightFlatCount || theaderPosition === 'right',
|
|
285
|
-
leaf: wrapped.isLeaf
|
|
286
|
-
}),
|
|
285
|
+
className: cx(Classes.tableHeaderCell, headerCellProps.className, (_cx = {}, _defineProperty(_cx, Classes.first, colIndex === 0), _defineProperty(_cx, Classes.last, colIndex + colSpan === fullFlatCount), _defineProperty(_cx, Classes.lockLeft, colIndex < leftFlatCount || theaderPosition === 'left'), _defineProperty(_cx, Classes.lockRight, colIndex >= fullFlatCount - rightFlatCount || theaderPosition === 'right'), _defineProperty(_cx, Classes.leaf, wrapped.isLeaf), _cx)),
|
|
287
286
|
colSpan: colSpan,
|
|
288
287
|
rowSpan: isLeaf ? rowCount - level : undefined,
|
|
289
288
|
style: _extends(_extends({
|
|
@@ -314,10 +313,7 @@ export default function TableHeader(_ref2) {
|
|
|
314
313
|
|
|
315
314
|
return /*#__PURE__*/React.createElement("tr", {
|
|
316
315
|
key: level,
|
|
317
|
-
className: cx(Classes.tableHeaderRow, {
|
|
318
|
-
first: level === 0,
|
|
319
|
-
last: level === rowCount - 1
|
|
320
|
-
})
|
|
316
|
+
className: cx(Classes.tableHeaderRow, (_cx2 = {}, _defineProperty(_cx2, Classes.first, level === 0), _defineProperty(_cx2, Classes.last, level === rowCount - 1), _cx2))
|
|
321
317
|
}, headerCells);
|
|
322
318
|
});
|
|
323
319
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import _extends from "@babel/runtime-corejs3/helpers/extends";
|
|
2
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
|
|
2
3
|
import _flatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/flat";
|
|
3
4
|
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
|
4
5
|
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
|
@@ -31,17 +32,12 @@ export function HtmlTable(_ref) {
|
|
|
31
32
|
}), /*#__PURE__*/React.createElement(tbodyHtmlTag, null, _mapInstanceProperty(data).call(data, renderRow)));
|
|
32
33
|
|
|
33
34
|
function renderRow(record, i) {
|
|
34
|
-
var _context;
|
|
35
|
+
var _cx, _context;
|
|
35
36
|
|
|
36
37
|
var rowIndex = verInfo.offset + i;
|
|
37
38
|
spanManager.stripUpwards(rowIndex);
|
|
38
39
|
var rowProps = getRowProps(record, rowIndex);
|
|
39
|
-
var rowClass = cx(Classes.tableRow, {
|
|
40
|
-
first: rowIndex === verInfo.first,
|
|
41
|
-
last: rowIndex === verInfo.last,
|
|
42
|
-
even: rowIndex % 2 === 0,
|
|
43
|
-
odd: rowIndex % 2 === 1
|
|
44
|
-
}, rowProps === null || rowProps === void 0 ? void 0 : rowProps.className);
|
|
40
|
+
var rowClass = cx(Classes.tableRow, (_cx = {}, _defineProperty(_cx, Classes.first, rowIndex === verInfo.first), _defineProperty(_cx, Classes.last, rowIndex === verInfo.last), _defineProperty(_cx, Classes.even, rowIndex % 2 === 0), _defineProperty(_cx, Classes.odd, rowIndex % 2 === 1), _cx), rowProps === null || rowProps === void 0 ? void 0 : rowProps.className);
|
|
45
41
|
|
|
46
42
|
var visibleColumnDescriptor = _concatInstanceProperty(_context = hozInfo.visible).call(_context); // 左中右区域渲染,存在融合单元格时需要适配rowspan属性
|
|
47
43
|
// 如果固定的列均存在融合单元格,需空白一列做占位,否则融合的单元格不会渲染,导致显示异常
|
|
@@ -77,6 +73,8 @@ export function HtmlTable(_ref) {
|
|
|
77
73
|
}
|
|
78
74
|
|
|
79
75
|
function renderBodyCell(record, rowIndex, column, colIndex) {
|
|
76
|
+
var _cx2;
|
|
77
|
+
|
|
80
78
|
var _a, _b, _c;
|
|
81
79
|
|
|
82
80
|
if (spanManager.testSkip(rowIndex, colIndex)) {
|
|
@@ -106,20 +104,20 @@ export function HtmlTable(_ref) {
|
|
|
106
104
|
if (cellProps.rowSpan != null) {
|
|
107
105
|
rowSpan = cellProps.rowSpan;
|
|
108
106
|
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
var hasSpan = colSpan > 1 || rowSpan > 1;
|
|
110
|
+
|
|
111
|
+
if (hasSpan) {
|
|
112
|
+
spanManager.add(rowIndex, colIndex, colSpan, rowSpan);
|
|
109
113
|
} // rowSpan/colSpan 不能过大,避免 rowSpan/colSpan 影响因虚拟滚动而未渲染的单元格
|
|
110
114
|
|
|
111
115
|
|
|
112
116
|
rowSpan = Math.min(rowSpan, verInfo.limit - rowIndex);
|
|
113
|
-
colSpan = Math.min(colSpan,
|
|
117
|
+
colSpan = Math.min(colSpan, hozInfo.visible.length - colIndex); // todo: 右侧有列固定的情况下colSpan计算不对,这里先限制一下
|
|
114
118
|
|
|
115
119
|
rowSpan = Math.max(rowSpan, 1);
|
|
116
120
|
colSpan = Math.max(colSpan, 1);
|
|
117
|
-
var hasSpan = colSpan > 1 || rowSpan > 1;
|
|
118
|
-
|
|
119
|
-
if (hasSpan) {
|
|
120
|
-
spanManager.add(rowIndex, colIndex, colSpan, rowSpan);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
121
|
var positionStyle = {};
|
|
124
122
|
var scrollbarWidth = hasScrollY ? getScrollbarSize().width : 0;
|
|
125
123
|
|
|
@@ -134,14 +132,7 @@ export function HtmlTable(_ref) {
|
|
|
134
132
|
return /*#__PURE__*/React.createElement('td', _extends(_extends(_extends(_extends({
|
|
135
133
|
key: colIndex
|
|
136
134
|
}, cellProps), {
|
|
137
|
-
className: cx(Classes.tableCell, cellProps.className, {
|
|
138
|
-
// class
|
|
139
|
-
first: colIndex === 0,
|
|
140
|
-
last: colIndex + colSpan === fullFlatCount,
|
|
141
|
-
'lock-left': colIndex < leftFlatCount || tbodyPosition === 'left',
|
|
142
|
-
'lock-right': colIndex >= fullFlatCount - rightFlatCount,
|
|
143
|
-
'row-span': rowSpan > 1
|
|
144
|
-
})
|
|
135
|
+
className: cx(Classes.tableCell, cellProps.className, (_cx2 = {}, _defineProperty(_cx2, Classes.first, colIndex === 0), _defineProperty(_cx2, Classes.last, colIndex + colSpan === fullFlatCount), _defineProperty(_cx2, Classes.lockLeft, colIndex < leftFlatCount || tbodyPosition === 'left'), _defineProperty(_cx2, Classes.lockRight, colIndex >= fullFlatCount - rightFlatCount), _defineProperty(_cx2, Classes.rowSpan, rowSpan > 1), _cx2))
|
|
145
136
|
}), hasSpan ? {
|
|
146
137
|
colSpan: colSpan,
|
|
147
138
|
rowSpan: rowSpan
|
|
@@ -50,6 +50,16 @@ export declare const Classes: {
|
|
|
50
50
|
readonly rowDetailContainer: string;
|
|
51
51
|
readonly rowDetailItem: string;
|
|
52
52
|
readonly emptyColCell: string;
|
|
53
|
+
readonly first: string;
|
|
54
|
+
readonly last: string;
|
|
55
|
+
readonly even: string;
|
|
56
|
+
readonly odd: string;
|
|
57
|
+
readonly lockLeft: string;
|
|
58
|
+
readonly lockRight: string;
|
|
59
|
+
readonly rowSpan: string;
|
|
60
|
+
readonly leaf: string;
|
|
61
|
+
readonly expanded: string;
|
|
62
|
+
readonly collapsed: string;
|
|
53
63
|
};
|
|
54
64
|
export declare const MenuClasses: {
|
|
55
65
|
menu: string;
|
package/es/table/base/styles.js
CHANGED
|
@@ -62,7 +62,17 @@ export var Classes = {
|
|
|
62
62
|
fixedRight: "".concat(prefix, "fixed-right"),
|
|
63
63
|
rowDetailContainer: "".concat(prefix, "row-detail-container"),
|
|
64
64
|
rowDetailItem: "".concat(prefix, "row-detail-item"),
|
|
65
|
-
emptyColCell: "".concat(prefix, "empty-col-cell")
|
|
65
|
+
emptyColCell: "".concat(prefix, "empty-col-cell"),
|
|
66
|
+
first: "".concat(prefix, "first"),
|
|
67
|
+
last: "".concat(prefix, "last"),
|
|
68
|
+
even: "".concat(prefix, "even"),
|
|
69
|
+
odd: "".concat(prefix, "odd"),
|
|
70
|
+
lockLeft: "".concat(prefix, "lock-left"),
|
|
71
|
+
lockRight: "".concat(prefix, "lock-right"),
|
|
72
|
+
rowSpan: "".concat(prefix, "row-span"),
|
|
73
|
+
leaf: "".concat(prefix, "leaf"),
|
|
74
|
+
expanded: "".concat(prefix, "expanded"),
|
|
75
|
+
collapsed: "".concat(prefix, "collapsed")
|
|
66
76
|
};
|
|
67
77
|
export var MenuClasses = {
|
|
68
78
|
menu: "".concat(prefix, "table-menu"),
|
|
@@ -81,7 +91,7 @@ var Z = {
|
|
|
81
91
|
scrollItem: 30,
|
|
82
92
|
loadingIndicator: 40
|
|
83
93
|
};
|
|
84
|
-
var outerBorderStyleMixin = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border-top: 1px solid #cccccc;\n border-right: 1px solid #cccccc;\n border-bottom: 1px solid #cccccc;\n border-left: 1px solid #cccccc;\n\n td.
|
|
94
|
+
var outerBorderStyleMixin = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border-top: 1px solid #cccccc;\n border-right: 1px solid #cccccc;\n border-bottom: 1px solid #cccccc;\n border-left: 1px solid #cccccc;\n\n td.", ",\n th.", " {\n border-left: none;\n }\n td.", ",\n th.", " {\n --border-right: none;\n }\n\n thead tr.", " th,\n tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tfoot tr.", " td {\n border-bottom: none;\n }\n &:not(.has-footer) tbody tr.", " td {\n border-bottom: none;\n }\n td.", ":not(.", "){\n border-left: var(---cell-border-vertical);\n }\n td.", ":not(.", "){\n border-right: var(---cell-border-vertical);\n }\n"])), Classes.first, Classes.first, Classes.last, Classes.last, Classes.first, Classes.first, Classes.last, Classes.last, Classes.rowSpan, Classes.first, Classes.rowSpan, Classes.last);
|
|
85
95
|
export var defaultCSSVariables = {
|
|
86
96
|
'--row-height': '48px',
|
|
87
97
|
'--color': '#333',
|
|
@@ -111,7 +121,7 @@ export var defaultCSSVariables = {
|
|
|
111
121
|
'--header-cell-border-vertical': '1px solid #dfe3e8'
|
|
112
122
|
};
|
|
113
123
|
export var variableConst = getCssVariableText(defaultCSSVariables);
|
|
114
|
-
export var StyledArtTableWrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n user-select:none;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right:none\n }\n\n th.
|
|
124
|
+
export var StyledArtTableWrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n user-select:none;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right:none\n }\n\n th.", " {\n border-right: none;\n border-bottom: none;\n }\n\n tr.", " th {\n border-top: var(--header-cell-border-horizontal);\n }\n th.", " {\n border-left: var(--header-cell-border-vertical);\n }\n\n td {\n padding: var(--cell-padding);\n background: var(--bgcolor);\n height: var(--row-height);\n border:1px solid transparent;\n border-right: var(--cell-border-vertical);\n border-bottom: var(--cell-border-horizontal);\n word-break: break-all;\n }\n td.", " {\n border-left: var(--cell-border-vertical);\n }\n tr.", " td {\n border-top: var(--cell-border-horizontal);\n }\n &.has-header tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tbody tr.", " td {\n border-bottom: none;\n }\n\n .", ",\n .", " {\n z-index: ", ";\n }\n\n //#region \u9501\u5217\u9634\u5F71\n .", " {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: ", ";\n pointer-events: none;\n overflow: hidden;\n\n .", " {\n height: 100%;\n }\n\n .", " {\n margin-right: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-right: var(--cell-border-vertical);\n }\n }\n\n .", " {\n margin-left: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-left: var(--cell-border-vertical);\n }\n }\n }\n //#endregion\n\n //#region \u7A7A\u8868\u683C\u5C55\u73B0\n .", " {\n pointer-events: none;\n color: #99a3b3;\n font-size: 12px;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n .empty-image {\n width: 50px;\n height: 50px;\n }\n\n .empty-tips {\n margin-top: 16px;\n line-height: 1.5;\n }\n }\n //#endregion\n\n //#region IE\u517C\u5BB9\n &.ie-polyfill-wrapper {\n //\u9501\u5B9A\u5217\u517C\u5BB9 \u4EC5\u5728\u9501\u5B9A\u5217\u7684\u60C5\u51B5\u4E0B\u751F\u6548\n .", " {\n overflow-x: hidden;\n }\n .", ", .", " {\n position:relative;\n }\n .", " {\n overflow: hidden;\n }\n .", " {\n position: relative;\n }\n\n .", " {\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n }\n\n .", ", .", "{\n position: absolute;\n z-index: ", ";\n top: 0;\n }\n .", "{\n left:0;\n }\n .", "{\n right:0;\n }\n\n .", "{\n .", "{\n position: absolute;\n top: 0;\n width: 100%;\n z-index: ", ";\n }\n }\n\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n }\n //#endregion\n\n //#region \u7C98\u6027\u6EDA\u52A8\u6761\n .", " {\n overflow-y: hidden;\n overflow-x: auto;\n z-index: ", ";\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-color);\n background: var(--bgcolor);\n }\n\n .", " {\n // \u5FC5\u987B\u6709\u9AD8\u5EA6\u624D\u80FD\u51FA\u73B0\u6EDA\u52A8\u6761\n height: 1px;\n visibility: hidden;\n }\n //#endregion\n\n //#region \u52A0\u8F7D\u6837\u5F0F\n .", " {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n .", " {\n filter: none;\n width: 100%;\n height: 100%;\n overflow: auto;\n display: flex;\n position: relative;\n flex-direction: column;\n }\n\n .", " {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .", " {\n position: sticky;\n z-index: ", ";\n transform: translateY(-50%);\n }\n }\n //#endregion\n \n //#region \u8868\u683C\u8FC7\u6EE4\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u6392\u5E8F\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u6EDA\u52A8\u6761\u5360\u4F4D\n .", " {\n visibility: hidden;\n flex-shrink: 0;\n }\n .", " .", " {\n border-top: var(--cell-border-horizontal);\n }\n //#endregion\n "])), variableConst, variableConst, outerBorderStyleMixin, Classes.artTable, Classes.tableHeader, Classes.tableHeaderCellContent, Classes.virtual, Classes.tableFooter, Classes.tableBody, Classes.tableFooter, Classes.tableRow, Classes.tableBody, Classes.tableCellRangeSelected, Classes.tableCellRangeTop, Classes.tableCellRangeLeft, Classes.tableCellRangeBottom, Classes.tableCellRangeRight, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.leaf, Classes.first, Classes.first, Classes.first, Classes.first, Classes.first, Classes.last, Classes.lockLeft, Classes.lockRight, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.virtual, Classes.tableBody, Classes.tableFooter, Classes.tableHeaderMain, Classes.tableHeader, Classes.tableFooterMain, Classes.fixedLeft, Classes.fixedRight, Z.lock, Classes.fixedLeft, Classes.fixedRight, Classes.rowDetailContainer, Classes.rowDetailItem, Z.rowDetail, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingContentWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator, Classes.tableFilterTrigger, Classes.tableSortIcon, Classes.verticalScrollPlaceholder, Classes.tableFooter, Classes.verticalScrollPlaceholder);
|
|
115
125
|
export var ButtonCSS = css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n ", "\n //#region \u6309\u94AE\n .", "{\n color: var(--color);\n background:#ffffff;\n border:1px solid var(--strong-border-color);\n border-radius: 2px;\n cursor: pointer;\n &:hover{\n color: var(--primary-color);\n border:1px solid var(--primary-color);\n }\n }\n .", " {\n color:#ffffff;\n background-color: var(--primary-color);\n border:none;\n &:hover{\n color:#ffffff;\n background-color: var(--primary-color-level2);\n border:none;\n }\n }\n//#endregion\n"])), variableConst, Classes.button, Classes.buttonPrimary);
|
|
116
126
|
|
|
117
127
|
function getCssVariableText(obj) {
|
package/es/table/common-views.js
CHANGED
|
@@ -5,9 +5,9 @@ var _templateObject, _templateObject2, _templateObject3;
|
|
|
5
5
|
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import styled from 'styled-components';
|
|
8
|
-
import { MenuClasses } from './base/styles';
|
|
8
|
+
import { MenuClasses, Classes } from './base/styles';
|
|
9
9
|
export var InlineFlexCell = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n"])));
|
|
10
|
-
export var ExpansionCell = styled(InlineFlexCell)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n &.
|
|
10
|
+
export var ExpansionCell = styled(InlineFlexCell)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n &.", " {\n cursor: default;\n }\n\n .expansion-icon {\n fill: #999;\n flex: 0 0 16px;\n transition: transform 200ms;\n\n &.", " {\n transform-origin: center center;\n transform: rotate(90deg);\n }\n }\n"])), Classes.leaf, Classes.expanded);
|
|
11
11
|
|
|
12
12
|
function CaretDownIcon(props) {
|
|
13
13
|
return /*#__PURE__*/React.createElement("svg", _extends({
|
|
@@ -3,6 +3,7 @@ import { treeMode } from '../treeMode';
|
|
|
3
3
|
import { useTablePipeline } from '../../pipeline';
|
|
4
4
|
import { mount } from 'enzyme';
|
|
5
5
|
import { renderHook } from '@testing-library/react-hooks';
|
|
6
|
+
import { Classes } from '../../../base/styles';
|
|
6
7
|
|
|
7
8
|
function makeChildren(prefix) {
|
|
8
9
|
return [{
|
|
@@ -160,7 +161,7 @@ describe('treeMode 单元测试', function () {
|
|
|
160
161
|
expect(opts.onChangeOpenKeys).toBeCalledWith(['4-2'], '4', 'collapse'); // 叶子节点渲染
|
|
161
162
|
|
|
162
163
|
var leafWrapper = mount(col[0].render('一级标题', newPipeline.getDataSource()[9], 9));
|
|
163
|
-
expect(_findInstanceProperty(leafWrapper).call(leafWrapper,
|
|
164
|
+
expect(_findInstanceProperty(leafWrapper).call(leafWrapper, ".expansion-cell.".concat(Classes.leaf)).length).toBe(2);
|
|
164
165
|
});
|
|
165
166
|
it('getCellProps', function () {
|
|
166
167
|
var col = newPipeline.getColumns(); // clickArea: 'content' 取默认的cellProps
|
|
@@ -1,29 +1,41 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
|
|
2
2
|
import _extends from "@babel/runtime-corejs3/helpers/extends";
|
|
3
|
+
import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
|
|
3
4
|
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
|
4
5
|
import { makeRecursiveMapper, mergeCellProps, collectNodes, isLeafNode } from '../../utils';
|
|
5
6
|
import { FILL_COLUMN_CODE } from './autoFill';
|
|
6
7
|
var stateKey = 'columnDrag';
|
|
8
|
+
var SCROLL_SIZE = 30;
|
|
7
9
|
|
|
8
|
-
function sortColumns(
|
|
9
|
-
var res = new Array(
|
|
10
|
+
function sortColumns(columns, sort) {
|
|
11
|
+
var res = new Array(columns.length);
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
var lastColumns = _toConsumableArray(columns);
|
|
14
|
+
|
|
15
|
+
while (columns.length) {
|
|
16
|
+
var cloumn = columns.pop();
|
|
13
17
|
res[sort[cloumn.code]] = cloumn;
|
|
14
18
|
}
|
|
15
19
|
|
|
20
|
+
if (_filterInstanceProperty(res).call(res, Boolean).length !== lastColumns.length) {
|
|
21
|
+
return lastColumns;
|
|
22
|
+
}
|
|
23
|
+
|
|
16
24
|
return res;
|
|
17
25
|
}
|
|
18
26
|
|
|
27
|
+
function stopClickPropagation(e) {
|
|
28
|
+
e.stopPropagation();
|
|
29
|
+
}
|
|
30
|
+
|
|
19
31
|
export function columnDrag() {
|
|
20
32
|
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
21
33
|
return function (pipeline) {
|
|
22
34
|
var _pipeline$getStateAtK = pipeline.getStateAtKey(stateKey, {}),
|
|
23
|
-
cloumnsSortData = _pipeline$getStateAtK.cloumnsSortData,
|
|
24
35
|
cloumnsTranslateData = _pipeline$getStateAtK.cloumnsTranslateData;
|
|
25
36
|
|
|
26
|
-
var columns = pipeline.getColumns();
|
|
37
|
+
var columns = pipeline.getColumns();
|
|
38
|
+
var tableBody = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.tableBody; // if (cloumnsSortData) {
|
|
27
39
|
// columns = sortColumns(columns, cloumnsSortData)
|
|
28
40
|
// }
|
|
29
41
|
|
|
@@ -65,28 +77,55 @@ export function columnDrag() {
|
|
|
65
77
|
var columns = pipeline.getColumns();
|
|
66
78
|
|
|
67
79
|
var _pipeline$getStateAtK2 = pipeline.getStateAtKey(stateKey, {}),
|
|
68
|
-
cloumnsSortData = _pipeline$getStateAtK2.cloumnsSortData,
|
|
69
80
|
cloumnsTranslateData = _pipeline$getStateAtK2.cloumnsTranslateData;
|
|
70
81
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
columns.forEach(function (item, index) {
|
|
76
|
-
cloumnsSortData[item.code] = index;
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
82
|
+
var cloumnsSortData = {};
|
|
83
|
+
columns.forEach(function (item, index) {
|
|
84
|
+
cloumnsSortData[item.code] = index;
|
|
85
|
+
});
|
|
80
86
|
var currentTarget = e.currentTarget;
|
|
81
87
|
var rect = e.currentTarget.parentElement.getClientRects()[0];
|
|
82
88
|
var startX = rect.left;
|
|
83
89
|
var moveData = [];
|
|
84
90
|
var allColumns = collectNodes(columns);
|
|
91
|
+
var tableBodyClientRect = tableBody.getBoundingClientRect();
|
|
92
|
+
var startScrollLeft = pipeline.ref.current.domHelper.virtual.scrollLeft;
|
|
93
|
+
|
|
94
|
+
var updateScrollPosition = function updateScrollPosition(client) {
|
|
95
|
+
var clientX = client.clientX;
|
|
96
|
+
var left = tableBodyClientRect.left,
|
|
97
|
+
width = tableBodyClientRect.width;
|
|
98
|
+
|
|
99
|
+
if (clientX + SCROLL_SIZE >= left + width) {
|
|
100
|
+
pipeline.ref.current.domHelper.virtual.scrollLeft += SCROLL_SIZE;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (clientX - SCROLL_SIZE <= left) {
|
|
104
|
+
pipeline.ref.current.domHelper.virtual.scrollLeft -= SCROLL_SIZE;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
var stopClickPropagationFlag = false;
|
|
85
109
|
|
|
86
110
|
function handleMouseMove(e) {
|
|
87
|
-
|
|
111
|
+
var client = {
|
|
112
|
+
clientX: e.clientX,
|
|
113
|
+
clientY: e.clientY
|
|
114
|
+
};
|
|
115
|
+
var scrollDistance = pipeline.ref.current.domHelper.virtual.scrollLeft - startScrollLeft;
|
|
116
|
+
var leftPosition = startX - scrollDistance; // 表头最左边起点
|
|
117
|
+
|
|
118
|
+
updateScrollPosition(client);
|
|
119
|
+
|
|
120
|
+
if (e.clientX - leftPosition < 20) {
|
|
88
121
|
return;
|
|
89
122
|
} else {
|
|
123
|
+
// 阻止列头点击事件,防止拖动后触发列头过滤事件
|
|
124
|
+
if (stopClickPropagationFlag === false) {
|
|
125
|
+
stopClickPropagationFlag = true;
|
|
126
|
+
currentTarget.addEventListener('click', stopClickPropagation);
|
|
127
|
+
}
|
|
128
|
+
|
|
90
129
|
e.stopPropagation();
|
|
91
130
|
}
|
|
92
131
|
|
|
@@ -123,7 +162,7 @@ export function columnDrag() {
|
|
|
123
162
|
var replaceIndex = 0;
|
|
124
163
|
var totalWitdth = getColumnWidth(columns[replaceIndex]);
|
|
125
164
|
|
|
126
|
-
while (totalWitdth < e.clientX -
|
|
165
|
+
while (totalWitdth < e.clientX - leftPosition && replaceIndex < columns.length - 1) {
|
|
127
166
|
replaceIndex++;
|
|
128
167
|
totalWitdth += getColumnWidth(columns[replaceIndex]);
|
|
129
168
|
} // 需要取最新startIndex, 不能直接用makeRecursiveMapper提供的startIndex(因为map时还没添加选择列、充满列等后面use添加的列)
|
|
@@ -196,7 +235,6 @@ export function columnDrag() {
|
|
|
196
235
|
|
|
197
236
|
window.requestAnimationFrame(function () {
|
|
198
237
|
pipeline.setStateAtKey(stateKey, {
|
|
199
|
-
cloumnsSortData: cloumnsSortData,
|
|
200
238
|
cloumnsTranslateData: cloumnsTranslateData
|
|
201
239
|
});
|
|
202
240
|
moveData = [startIndex, replaceIndex];
|
|
@@ -208,6 +246,11 @@ export function columnDrag() {
|
|
|
208
246
|
document.body.removeEventListener('mousemove', handleMouseMove);
|
|
209
247
|
document.body.removeEventListener('mouseup', handleMouseUp);
|
|
210
248
|
window.requestAnimationFrame(function () {
|
|
249
|
+
// 取消阻止列头点击事件
|
|
250
|
+
currentTarget.removeEventListener('click', stopClickPropagation);
|
|
251
|
+
stopClickPropagationFlag = false;
|
|
252
|
+
currentTarget = null;
|
|
253
|
+
|
|
211
254
|
var _moveData = moveData,
|
|
212
255
|
_moveData2 = _slicedToArray(_moveData, 2),
|
|
213
256
|
startIndex = _moveData2[0],
|
|
@@ -277,14 +320,12 @@ export function columnDrag() {
|
|
|
277
320
|
}
|
|
278
321
|
|
|
279
322
|
pipeline.setStateAtKey(stateKey, {
|
|
280
|
-
cloumnsSortData: cloumnsSortData,
|
|
281
323
|
cloumnsTranslateData: null
|
|
282
324
|
});
|
|
283
325
|
});
|
|
284
326
|
document.body.style.userSelect = '';
|
|
285
327
|
currentTarget.style.opacity = '';
|
|
286
328
|
currentTarget.style.cursor = '';
|
|
287
|
-
currentTarget = null;
|
|
288
329
|
}
|
|
289
330
|
|
|
290
331
|
document.body.addEventListener('mousemove', handleMouseMove);
|
|
@@ -89,20 +89,25 @@ export function contextMenu() {
|
|
|
89
89
|
};
|
|
90
90
|
|
|
91
91
|
var showContextMenu = function showContextMenu(e) {
|
|
92
|
-
var
|
|
93
|
-
var cellEle =
|
|
92
|
+
var path = getEventPath(e);
|
|
93
|
+
var cellEle = getCellEleInEventPath(path);
|
|
94
94
|
var code;
|
|
95
95
|
var rowIndex;
|
|
96
|
+
var isInFooter;
|
|
96
97
|
|
|
97
98
|
if (cellEle) {
|
|
98
|
-
code = cellEle.getAttribute('data-code')
|
|
99
|
+
code = cellEle.getAttribute('data-code');
|
|
100
|
+
rowIndex = cellEle.getAttribute('data-rowindex');
|
|
101
|
+
isInFooter = isElementInsideTheFooter(cellEle);
|
|
99
102
|
} else {
|
|
100
|
-
var rowEle =
|
|
103
|
+
var rowEle = getRowEleInEventPath(path);
|
|
101
104
|
rowIndex = rowEle === null || rowEle === void 0 ? void 0 : rowEle.getAttribute('data-rowindex');
|
|
105
|
+
isInFooter = isElementInsideTheFooter(rowEle);
|
|
102
106
|
}
|
|
103
107
|
|
|
108
|
+
var dataSource = isInFooter ? pipeline.getFooterDataSource() || [] : pipeline.getDataSource();
|
|
104
109
|
var record = dataSource[rowIndex];
|
|
105
|
-
var column = code !== undefined && findByTree(pipeline.getColumns(), function (item
|
|
110
|
+
var column = code !== undefined && findByTree(pipeline.getColumns(), function (item) {
|
|
106
111
|
return item.code === code;
|
|
107
112
|
});
|
|
108
113
|
var value = column && record && internals.safeGetValue(column, record, rowIndex);
|
|
@@ -275,18 +280,6 @@ function isEventFromCurrentPopup(event, ele) {
|
|
|
275
280
|
|
|
276
281
|
return false;
|
|
277
282
|
}
|
|
278
|
-
|
|
279
|
-
function getCellEleInEventPath(path) {
|
|
280
|
-
return getTargetEleInEventPath(path, function (ele) {
|
|
281
|
-
return ele && ele.getAttribute('data-role') === 'table-cell';
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
function getRowEleInEventPath(path) {
|
|
286
|
-
return getTargetEleInEventPath(path, function (ele) {
|
|
287
|
-
return ele && ele.getAttribute('data-role') === 'table-row';
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
283
|
/** 是否点击是外部 end */
|
|
291
284
|
|
|
292
285
|
/** 计算位置 start */
|
|
@@ -363,15 +356,37 @@ function keepWithinBounds(popupParent, ePopup, x, y) {
|
|
|
363
356
|
/** 获得点击的元素 start */
|
|
364
357
|
|
|
365
358
|
|
|
366
|
-
function
|
|
367
|
-
return
|
|
359
|
+
function getCellEleInEventPath(path) {
|
|
360
|
+
return getTargetEleInEventPath(path, function (ele) {
|
|
361
|
+
return ele && ele.getAttribute('data-role') === 'table-cell';
|
|
362
|
+
});
|
|
368
363
|
}
|
|
369
364
|
|
|
370
|
-
function
|
|
371
|
-
return
|
|
365
|
+
function getRowEleInEventPath(path) {
|
|
366
|
+
return getTargetEleInEventPath(path, function (ele) {
|
|
367
|
+
return ele && ele.getAttribute('data-role') === 'table-row';
|
|
368
|
+
});
|
|
372
369
|
}
|
|
373
370
|
/** 获得点击的元素 end */
|
|
374
|
-
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
function isElementInsideTheFooter(ele) {
|
|
374
|
+
var pointer = ele;
|
|
375
|
+
|
|
376
|
+
while (pointer) {
|
|
377
|
+
if (pointer.tagName === 'TFOOT') {
|
|
378
|
+
return true;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
if (pointer.tagName === 'TABLE' || pointer.tagName === 'TBODY') {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
pointer = pointer.parentElement;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return false;
|
|
389
|
+
} // 禁止弹出右键菜单
|
|
375
390
|
|
|
376
391
|
|
|
377
392
|
function suppressShowContextMenu(e) {
|