handsontable 14.5.0-next-ede811d-20240717 → 14.5.0-next-7541a88-20240725
Sign up to get free protection for your applications and to get access to all the features.
- package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleColumns.js +126 -0
- package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleColumns.mjs +122 -0
- package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleRows.js +119 -0
- package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleRows.mjs +115 -0
- package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleColumns.js +125 -0
- package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleColumns.mjs +121 -0
- package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleRows.js +118 -0
- package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleRows.mjs +114 -0
- package/3rdparty/walkontable/src/calculator/{renderAllColumns.js → calculationType/renderedAllColumns.js} +32 -9
- package/3rdparty/walkontable/src/calculator/{renderAllColumns.mjs → calculationType/renderedAllColumns.mjs} +31 -8
- package/3rdparty/walkontable/src/calculator/{renderAllRows.js → calculationType/renderedAllRows.js} +32 -9
- package/3rdparty/walkontable/src/calculator/{renderAllRows.mjs → calculationType/renderedAllRows.mjs} +31 -8
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +37 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +33 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +37 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +33 -0
- package/3rdparty/walkontable/src/calculator/index.js +18 -17
- package/3rdparty/walkontable/src/calculator/index.mjs +11 -6
- package/3rdparty/walkontable/src/calculator/viewportBase.js +92 -0
- package/3rdparty/walkontable/src/calculator/viewportBase.mjs +88 -0
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +51 -145
- package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +51 -145
- package/3rdparty/walkontable/src/calculator/viewportRows.js +59 -141
- package/3rdparty/walkontable/src/calculator/viewportRows.mjs +59 -141
- package/3rdparty/walkontable/src/index.js +2 -0
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/table.js +5 -11
- package/3rdparty/walkontable/src/table.mjs +5 -11
- package/3rdparty/walkontable/src/utils/column.js +2 -1
- package/3rdparty/walkontable/src/utils/column.mjs +2 -1
- package/3rdparty/walkontable/src/utils/columnStretching.js +10 -19
- package/3rdparty/walkontable/src/utils/columnStretching.mjs +10 -19
- package/3rdparty/walkontable/src/viewport.js +35 -46
- package/3rdparty/walkontable/src/viewport.mjs +36 -47
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.js +1 -1
- package/core.mjs +2 -2
- package/dist/handsontable.css +2 -2
- package/dist/handsontable.full.css +2 -2
- package/dist/handsontable.full.js +2494 -1961
- package/dist/handsontable.full.min.css +2 -2
- package/dist/handsontable.full.min.js +148 -148
- package/dist/handsontable.js +2495 -1962
- package/dist/handsontable.min.css +2 -2
- package/dist/handsontable.min.js +32 -32
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/package.json +1 -1
- package/plugins/autoColumnSize/autoColumnSize.js +1 -1
- package/plugins/autoColumnSize/autoColumnSize.mjs +2 -2
- package/plugins/manualRowResize/manualRowResize.js +1 -1
- package/plugins/manualRowResize/manualRowResize.mjs +2 -2
- package/3rdparty/walkontable/src/calculator/constants.js +0 -26
- package/3rdparty/walkontable/src/calculator/constants.mjs +0 -23
@@ -1,87 +1,59 @@
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
2
|
-
import "core-js/modules/es.array.at.js";
|
3
2
|
import "core-js/modules/es.array.push.js";
|
4
|
-
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
5
|
-
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
6
3
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
7
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
8
5
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
import { RENDER_TYPE, FULLY_VISIBLE_TYPE } from "./constants.mjs";
|
6
|
+
import { ViewportBaseCalculator } from "./viewportBase.mjs";
|
7
|
+
export const DEFAULT_WIDTH = 50;
|
8
|
+
|
13
9
|
/**
|
14
10
|
* @typedef {object} ViewportColumnsCalculatorOptions
|
11
|
+
* @property {Map<string, ViewportBaseCalculator>} calculationTypes The calculation types to be performed.
|
15
12
|
* @property {number} viewportWidth Width of the viewport.
|
16
13
|
* @property {number} scrollOffset Current horizontal scroll position of the viewport.
|
17
14
|
* @property {number} totalColumns Total number of columns.
|
18
15
|
* @property {Function} columnWidthFn Function that returns the width of the column at a given index (in px).
|
19
|
-
* @property {Function} overrideFn Function that
|
20
|
-
* MergeCells plugin).
|
21
|
-
* @property {string} calculationType String which describes types of calculation which will be performed.
|
16
|
+
* @property {Function} overrideFn Function that allows to adjust the `startRow` and `endRow` parameters.
|
22
17
|
* @property {string} inlineStartOffset Inline-start offset of the parent container.
|
23
|
-
* @property {string} stretchMode Stretch mode 'all' or 'last'.
|
24
|
-
* @property {Function} stretchingColumnWidthFn Function that returns the new width of the stretched column.
|
25
18
|
*/
|
26
19
|
/**
|
27
|
-
* Calculates indexes of columns to render OR columns that are visible.
|
28
|
-
* To redo the calculation, you need to create a new calculator.
|
20
|
+
* Calculates indexes of columns to render OR columns that are visible OR partially visible in the viewport.
|
29
21
|
*
|
30
22
|
* @class ViewportColumnsCalculator
|
31
23
|
*/
|
32
|
-
|
33
|
-
export class ViewportColumnsCalculator {
|
34
|
-
/**
|
35
|
-
* Default column width.
|
36
|
-
*
|
37
|
-
* @type {number}
|
38
|
-
*/
|
39
|
-
static get DEFAULT_WIDTH() {
|
40
|
-
return 50;
|
41
|
-
}
|
42
|
-
|
43
|
-
/**
|
44
|
-
* Number of rendered/visible columns.
|
45
|
-
*
|
46
|
-
* @type {number}
|
47
|
-
*/
|
48
|
-
|
24
|
+
export class ViewportColumnsCalculator extends ViewportBaseCalculator {
|
49
25
|
/**
|
50
26
|
* @param {ViewportColumnsCalculatorOptions} options Object with all options specified for column viewport calculation.
|
51
27
|
*/
|
52
|
-
constructor(
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
_defineProperty(this, "
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
_defineProperty(this, "
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
* @type {ViewportColumnsCalculatorOptions}
|
82
|
-
*/
|
83
|
-
_classPrivateFieldInitSpec(this, _options, void 0);
|
84
|
-
_classPrivateFieldSet(_options, this, options);
|
28
|
+
constructor(_ref) {
|
29
|
+
let {
|
30
|
+
calculationTypes,
|
31
|
+
viewportWidth,
|
32
|
+
scrollOffset,
|
33
|
+
totalColumns,
|
34
|
+
columnWidthFn,
|
35
|
+
overrideFn,
|
36
|
+
inlineStartOffset
|
37
|
+
} = _ref;
|
38
|
+
super(calculationTypes);
|
39
|
+
_defineProperty(this, "viewportWidth", 0);
|
40
|
+
_defineProperty(this, "scrollOffset", 0);
|
41
|
+
_defineProperty(this, "zeroBasedScrollOffset", 0);
|
42
|
+
_defineProperty(this, "totalColumns", 0);
|
43
|
+
_defineProperty(this, "columnWidthFn", null);
|
44
|
+
_defineProperty(this, "columnWidth", 0);
|
45
|
+
_defineProperty(this, "overrideFn", null);
|
46
|
+
_defineProperty(this, "inlineStartOffset", 0);
|
47
|
+
_defineProperty(this, "totalCalculatedWidth", 0);
|
48
|
+
_defineProperty(this, "startPositions", []);
|
49
|
+
_defineProperty(this, "needReverse", true);
|
50
|
+
this.viewportWidth = viewportWidth;
|
51
|
+
this.scrollOffset = scrollOffset;
|
52
|
+
this.zeroBasedScrollOffset = Math.max(scrollOffset, 0);
|
53
|
+
this.totalColumns = totalColumns;
|
54
|
+
this.columnWidthFn = columnWidthFn;
|
55
|
+
this.overrideFn = overrideFn;
|
56
|
+
this.inlineStartOffset = inlineStartOffset;
|
85
57
|
this.calculate();
|
86
58
|
}
|
87
59
|
|
@@ -89,96 +61,30 @@ export class ViewportColumnsCalculator {
|
|
89
61
|
* Calculates viewport.
|
90
62
|
*/
|
91
63
|
calculate() {
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
// +1 pixel for row header width compensation for horizontal scroll > 0
|
101
|
-
const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;
|
102
|
-
let sum = 0;
|
103
|
-
let needReverse = true;
|
104
|
-
const startPositions = [];
|
105
|
-
let columnWidth;
|
106
|
-
let firstVisibleColumnWidth = 0;
|
107
|
-
let lastVisibleColumnWidth = 0;
|
108
|
-
for (let i = 0; i < totalColumns; i++) {
|
109
|
-
columnWidth = this._getColumnWidth(i);
|
110
|
-
if (sum <= zeroBasedScrollOffset && calculationType !== FULLY_VISIBLE_TYPE) {
|
111
|
-
this.startColumn = i;
|
112
|
-
firstVisibleColumnWidth = columnWidth;
|
113
|
-
}
|
114
|
-
if (sum >= zeroBasedScrollOffset && sum + (calculationType === FULLY_VISIBLE_TYPE ? columnWidth : 0) <= zeroBasedScrollOffset + compensatedViewportWidth) {
|
115
|
-
if (this.startColumn === null || this.startColumn === undefined) {
|
116
|
-
this.startColumn = i;
|
117
|
-
firstVisibleColumnWidth = columnWidth;
|
118
|
-
}
|
119
|
-
this.endColumn = i;
|
120
|
-
}
|
121
|
-
startPositions.push(sum);
|
122
|
-
sum += columnWidth;
|
123
|
-
lastVisibleColumnWidth = columnWidth;
|
124
|
-
if (calculationType !== FULLY_VISIBLE_TYPE) {
|
125
|
-
this.endColumn = i;
|
126
|
-
}
|
127
|
-
if (sum >= zeroBasedScrollOffset + viewportWidth) {
|
128
|
-
needReverse = false;
|
64
|
+
this._initialize(this);
|
65
|
+
for (let column = 0; column < this.totalColumns; column++) {
|
66
|
+
this.columnWidth = this.getColumnWidth(column);
|
67
|
+
this._process(column, this);
|
68
|
+
this.startPositions.push(this.totalCalculatedWidth);
|
69
|
+
this.totalCalculatedWidth += this.columnWidth;
|
70
|
+
if (this.totalCalculatedWidth >= this.zeroBasedScrollOffset + this.viewportWidth) {
|
71
|
+
this.needReverse = false;
|
129
72
|
break;
|
130
73
|
}
|
131
74
|
}
|
132
|
-
|
133
|
-
const inlineEndColumnOffset = calculationType === FULLY_VISIBLE_TYPE ? 0 : lastVisibleColumnWidth;
|
134
|
-
const inlineStartColumnOffset = calculationType === FULLY_VISIBLE_TYPE ? firstVisibleColumnWidth : 0;
|
135
|
-
if (
|
136
|
-
// the table is to the left of the viewport
|
137
|
-
mostRightScrollOffset < -1 * _classPrivateFieldGet(_options, this).inlineStartOffset || scrollOffset > startPositions.at(-1) + inlineEndColumnOffset ||
|
138
|
-
// the table is to the right of the viewport
|
139
|
-
-1 * _classPrivateFieldGet(_options, this).scrollOffset - _classPrivateFieldGet(_options, this).viewportWidth > -1 * inlineStartColumnOffset) {
|
140
|
-
this.isVisibleInTrimmingContainer = false;
|
141
|
-
} else {
|
142
|
-
this.isVisibleInTrimmingContainer = true;
|
143
|
-
}
|
144
|
-
if (this.endColumn === totalColumns - 1 && needReverse) {
|
145
|
-
this.startColumn = this.endColumn;
|
146
|
-
while (this.startColumn > 0) {
|
147
|
-
const viewportSum = startPositions[this.endColumn] + columnWidth - startPositions[this.startColumn - 1];
|
148
|
-
if (viewportSum <= viewportWidth || calculationType !== FULLY_VISIBLE_TYPE) {
|
149
|
-
this.startColumn -= 1;
|
150
|
-
}
|
151
|
-
if (viewportSum > viewportWidth) {
|
152
|
-
break;
|
153
|
-
}
|
154
|
-
}
|
155
|
-
}
|
156
|
-
if (calculationType === RENDER_TYPE && this.startColumn !== null && overrideFn) {
|
157
|
-
overrideFn(this);
|
158
|
-
}
|
159
|
-
this.startPosition = startPositions[this.startColumn];
|
160
|
-
if (this.startPosition === undefined) {
|
161
|
-
this.startPosition = null;
|
162
|
-
}
|
163
|
-
|
164
|
-
// If totalColumns exceeded its total columns size set endColumn to the latest item
|
165
|
-
if (totalColumns < this.endColumn) {
|
166
|
-
this.endColumn = totalColumns - 1;
|
167
|
-
}
|
168
|
-
if (this.startColumn !== null) {
|
169
|
-
this.count = this.endColumn - this.startColumn + 1;
|
170
|
-
}
|
75
|
+
this._finalize(this);
|
171
76
|
}
|
172
77
|
|
173
78
|
/**
|
174
|
-
*
|
79
|
+
* Gets the column width at the specified column index.
|
80
|
+
*
|
81
|
+
* @param {number} column Column index.
|
175
82
|
* @returns {number}
|
176
|
-
* @private
|
177
83
|
*/
|
178
|
-
|
179
|
-
|
84
|
+
getColumnWidth(column) {
|
85
|
+
const width = this.columnWidthFn(column);
|
180
86
|
if (isNaN(width)) {
|
181
|
-
|
87
|
+
return DEFAULT_WIDTH;
|
182
88
|
}
|
183
89
|
return width;
|
184
90
|
}
|
@@ -2,86 +2,63 @@
|
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
require("core-js/modules/es.error.cause.js");
|
5
|
-
require("core-js/modules/es.array.at.js");
|
6
5
|
require("core-js/modules/es.array.push.js");
|
7
|
-
var
|
8
|
-
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
9
|
-
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
6
|
+
var _viewportBase = require("./viewportBase");
|
10
7
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
11
8
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
12
9
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
13
|
-
|
14
|
-
|
15
|
-
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
10
|
+
const DEFAULT_HEIGHT = exports.DEFAULT_HEIGHT = 23;
|
11
|
+
|
16
12
|
/**
|
17
13
|
* @typedef {object} ViewportRowsCalculatorOptions
|
14
|
+
* @property {Map<string, ViewportBaseCalculator>} calculationTypes The calculation types to be performed.
|
18
15
|
* @property {number} viewportHeight Height of the viewport.
|
19
16
|
* @property {number} scrollOffset Current vertical scroll position of the viewport.
|
20
17
|
* @property {number} totalRows Total number of rows.
|
21
18
|
* @property {Function} rowHeightFn Function that returns the height of the row at a given index (in px).
|
22
|
-
* @property {Function} overrideFn Function that
|
23
|
-
* @property {string} calculationType String which describes types of calculation which will be performed.
|
19
|
+
* @property {Function} overrideFn Function that allows to adjust the `startRow` and `endRow` parameters.
|
24
20
|
* @property {number} horizontalScrollbarHeight The scrollbar height.
|
25
21
|
*/
|
26
22
|
/**
|
27
|
-
* Calculates indexes of rows to render OR rows that are visible.
|
28
|
-
* To redo the calculation, you need to create a new calculator.
|
23
|
+
* Calculates indexes of rows to render OR rows that are visible OR partially visible in the viewport.
|
29
24
|
*
|
30
25
|
* @class ViewportRowsCalculator
|
31
26
|
*/
|
32
|
-
|
33
|
-
class ViewportRowsCalculator {
|
34
|
-
/**
|
35
|
-
* Default row height.
|
36
|
-
*
|
37
|
-
* @type {number}
|
38
|
-
*/
|
39
|
-
static get DEFAULT_HEIGHT() {
|
40
|
-
return 23;
|
41
|
-
}
|
42
|
-
|
43
|
-
/**
|
44
|
-
* Number of rendered/visible rows.
|
45
|
-
*
|
46
|
-
* @type {number}
|
47
|
-
*/
|
48
|
-
|
27
|
+
class ViewportRowsCalculator extends _viewportBase.ViewportBaseCalculator {
|
49
28
|
/**
|
50
29
|
* @param {ViewportRowsCalculatorOptions} options Object with all options specified for row viewport calculation.
|
51
30
|
*/
|
52
|
-
constructor(
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
_defineProperty(this, "
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
_defineProperty(this, "
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
_classPrivateFieldInitSpec(this, _options, void 0);
|
84
|
-
_classPrivateFieldSet(_options, this, options);
|
31
|
+
constructor(_ref) {
|
32
|
+
let {
|
33
|
+
calculationTypes,
|
34
|
+
viewportHeight,
|
35
|
+
scrollOffset,
|
36
|
+
totalRows,
|
37
|
+
rowHeightFn,
|
38
|
+
overrideFn,
|
39
|
+
horizontalScrollbarHeight
|
40
|
+
} = _ref;
|
41
|
+
super(calculationTypes);
|
42
|
+
_defineProperty(this, "viewportHeight", 0);
|
43
|
+
_defineProperty(this, "scrollOffset", 0);
|
44
|
+
_defineProperty(this, "zeroBasedScrollOffset", 0);
|
45
|
+
_defineProperty(this, "totalRows", 0);
|
46
|
+
_defineProperty(this, "rowHeightFn", null);
|
47
|
+
_defineProperty(this, "rowHeight", 0);
|
48
|
+
_defineProperty(this, "overrideFn", null);
|
49
|
+
_defineProperty(this, "horizontalScrollbarHeight", 0);
|
50
|
+
_defineProperty(this, "innerViewportHeight", 0);
|
51
|
+
_defineProperty(this, "totalCalculatedHeight", 0);
|
52
|
+
_defineProperty(this, "startPositions", []);
|
53
|
+
_defineProperty(this, "needReverse", true);
|
54
|
+
this.viewportHeight = viewportHeight;
|
55
|
+
this.scrollOffset = scrollOffset;
|
56
|
+
this.zeroBasedScrollOffset = Math.max(scrollOffset, 0);
|
57
|
+
this.totalRows = totalRows;
|
58
|
+
this.rowHeightFn = rowHeightFn;
|
59
|
+
this.overrideFn = overrideFn;
|
60
|
+
this.horizontalScrollbarHeight = horizontalScrollbarHeight !== null && horizontalScrollbarHeight !== void 0 ? horizontalScrollbarHeight : 0;
|
61
|
+
this.innerViewportHeight = this.zeroBasedScrollOffset + this.viewportHeight - this.horizontalScrollbarHeight;
|
85
62
|
this.calculate();
|
86
63
|
}
|
87
64
|
|
@@ -89,91 +66,32 @@ class ViewportRowsCalculator {
|
|
89
66
|
* Calculates viewport.
|
90
67
|
*/
|
91
68
|
calculate() {
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
const zeroBasedScrollOffset = Math.max(_classPrivateFieldGet(_options, this).scrollOffset, 0);
|
101
|
-
const horizontalScrollbarHeight = _classPrivateFieldGet(_options, this).horizontalScrollbarHeight || 0;
|
102
|
-
const innerViewportHeight = zeroBasedScrollOffset + viewportHeight - horizontalScrollbarHeight;
|
103
|
-
let sum = 0;
|
104
|
-
let needReverse = true;
|
105
|
-
const startPositions = [];
|
106
|
-
let rowHeight;
|
107
|
-
let firstVisibleRowHeight = 0;
|
108
|
-
let lastVisibleRowHeight = 0;
|
109
|
-
|
110
|
-
// Calculate the number (start and end index) of rows needed
|
111
|
-
for (let i = 0; i < totalRows; i++) {
|
112
|
-
rowHeight = rowHeightFn(i);
|
113
|
-
if (isNaN(rowHeight)) {
|
114
|
-
rowHeight = ViewportRowsCalculator.DEFAULT_HEIGHT;
|
115
|
-
}
|
116
|
-
if (sum <= zeroBasedScrollOffset && calculationType !== _constants.FULLY_VISIBLE_TYPE) {
|
117
|
-
this.startRow = i;
|
118
|
-
firstVisibleRowHeight = rowHeight;
|
119
|
-
}
|
120
|
-
if (sum >= zeroBasedScrollOffset && sum + (calculationType === _constants.FULLY_VISIBLE_TYPE ? rowHeight : 0) <= innerViewportHeight) {
|
121
|
-
if (this.startRow === null) {
|
122
|
-
this.startRow = i;
|
123
|
-
firstVisibleRowHeight = rowHeight;
|
124
|
-
}
|
125
|
-
this.endRow = i;
|
126
|
-
}
|
127
|
-
startPositions.push(sum);
|
128
|
-
sum += rowHeight;
|
129
|
-
lastVisibleRowHeight = rowHeight;
|
130
|
-
if (calculationType !== _constants.FULLY_VISIBLE_TYPE) {
|
131
|
-
this.endRow = i;
|
132
|
-
}
|
133
|
-
if (sum >= innerViewportHeight) {
|
134
|
-
needReverse = false;
|
69
|
+
this._initialize(this);
|
70
|
+
for (let row = 0; row < this.totalRows; row++) {
|
71
|
+
this.rowHeight = this.getRowHeight(row);
|
72
|
+
this._process(row, this);
|
73
|
+
this.startPositions.push(this.totalCalculatedHeight);
|
74
|
+
this.totalCalculatedHeight += this.rowHeight;
|
75
|
+
if (this.totalCalculatedHeight >= this.innerViewportHeight) {
|
76
|
+
this.needReverse = false;
|
135
77
|
break;
|
136
78
|
}
|
137
79
|
}
|
138
|
-
|
139
|
-
|
140
|
-
const bottomRowOffset = calculationType === _constants.FULLY_VISIBLE_TYPE ? 0 : lastVisibleRowHeight;
|
141
|
-
if (mostBottomScrollOffset < topRowOffset || scrollOffset > startPositions.at(-1) + bottomRowOffset) {
|
142
|
-
this.isVisibleInTrimmingContainer = false;
|
143
|
-
} else {
|
144
|
-
this.isVisibleInTrimmingContainer = true;
|
145
|
-
}
|
146
|
-
|
147
|
-
// If the estimation has reached the last row and there is still some space available in the viewport,
|
148
|
-
// we need to render in reverse in order to fill the whole viewport with rows
|
149
|
-
if (this.endRow === totalRows - 1 && needReverse) {
|
150
|
-
this.startRow = this.endRow;
|
151
|
-
while (this.startRow > 0) {
|
152
|
-
// rowHeight is the height of the last row
|
153
|
-
const viewportSum = startPositions[this.endRow] + rowHeight - startPositions[this.startRow - 1];
|
154
|
-
if (viewportSum <= viewportHeight - horizontalScrollbarHeight || calculationType !== _constants.FULLY_VISIBLE_TYPE) {
|
155
|
-
this.startRow -= 1;
|
156
|
-
}
|
157
|
-
if (viewportSum >= viewportHeight - horizontalScrollbarHeight) {
|
158
|
-
break;
|
159
|
-
}
|
160
|
-
}
|
161
|
-
}
|
162
|
-
if (calculationType === _constants.RENDER_TYPE && this.startRow !== null && overrideFn) {
|
163
|
-
overrideFn(this);
|
164
|
-
}
|
165
|
-
this.startPosition = startPositions[this.startRow];
|
166
|
-
if (this.startPosition === undefined) {
|
167
|
-
this.startPosition = null;
|
168
|
-
}
|
80
|
+
this._finalize(this);
|
81
|
+
}
|
169
82
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
83
|
+
/**
|
84
|
+
* Gets the row height at the specified row index.
|
85
|
+
*
|
86
|
+
* @param {number} row Row index.
|
87
|
+
* @returns {number}
|
88
|
+
*/
|
89
|
+
getRowHeight(row) {
|
90
|
+
const rowHeight = this.rowHeightFn(row);
|
91
|
+
if (isNaN(rowHeight)) {
|
92
|
+
return DEFAULT_HEIGHT;
|
176
93
|
}
|
94
|
+
return rowHeight;
|
177
95
|
}
|
178
96
|
}
|
179
97
|
exports.ViewportRowsCalculator = ViewportRowsCalculator;
|