@swimlane/ngx-datatable 19.0.0 → 20.0.0-alpha-1
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/README.md +0 -1
- package/esm2020/lib/components/body/body-cell.component.mjs +432 -0
- package/esm2020/lib/components/body/body-group-header-template.directive.mjs +16 -0
- package/esm2020/lib/components/body/body-group-header.directive.mjs +62 -0
- package/esm2020/lib/components/body/body-row-wrapper.component.mjs +140 -0
- package/esm2020/lib/components/body/body-row.component.mjs +262 -0
- package/esm2020/lib/components/body/body.component.mjs +863 -0
- package/esm2020/lib/components/body/progress-bar.component.mjs +27 -0
- package/esm2020/lib/components/body/scroller.component.mjs +91 -0
- package/esm2020/lib/components/body/selection.component.mjs +150 -0
- package/esm2020/lib/components/body/summary/summary-row.component.mjs +105 -0
- package/esm2020/lib/components/columns/column-cell.directive.mjs +14 -0
- package/esm2020/lib/components/columns/column-header.directive.mjs +14 -0
- package/esm2020/lib/components/columns/column.directive.mjs +98 -0
- package/esm2020/lib/components/columns/tree.directive.mjs +14 -0
- package/esm2020/lib/components/datatable.component.mjs +1008 -0
- package/esm2020/lib/components/footer/footer-template.directive.mjs +14 -0
- package/esm2020/lib/components/footer/footer.component.mjs +128 -0
- package/esm2020/lib/components/footer/footer.directive.mjs +35 -0
- package/esm2020/lib/components/footer/pager.component.mjs +181 -0
- package/esm2020/lib/components/header/header-cell.component.mjs +243 -0
- package/esm2020/lib/components/header/header.component.mjs +376 -0
- package/esm2020/lib/components/row-detail/row-detail-template.directive.mjs +16 -0
- package/esm2020/lib/components/row-detail/row-detail.directive.mjs +63 -0
- package/esm2020/lib/directives/draggable.directive.mjs +108 -0
- package/esm2020/lib/directives/long-press.directive.mjs +117 -0
- package/esm2020/lib/directives/orderable.directive.mjs +136 -0
- package/esm2020/lib/directives/resizeable.directive.mjs +93 -0
- package/esm2020/lib/directives/visibility.directive.mjs +63 -0
- package/esm2020/lib/events.mjs +7 -0
- package/esm2020/lib/ngx-datatable.module.mjs +139 -0
- package/esm2020/lib/services/column-changes.service.mjs +24 -0
- package/esm2020/lib/services/dimensions-helper.service.mjs +17 -0
- package/esm2020/lib/services/scrollbar-helper.service.mjs +37 -0
- package/esm2020/lib/types/click.type.mjs +6 -0
- package/esm2020/lib/types/column-mode.type.mjs +7 -0
- package/esm2020/lib/types/contextmenu.type.mjs +6 -0
- package/esm2020/lib/types/selection.type.mjs +9 -0
- package/esm2020/lib/types/sort-direction.type.mjs +6 -0
- package/esm2020/lib/types/sort-prop-dir.type.mjs +2 -0
- package/esm2020/lib/types/sort.type.mjs +6 -0
- package/esm2020/lib/types/table-column.type.mjs +2 -0
- package/esm2020/lib/utils/camel-case.mjs +28 -0
- package/esm2020/lib/utils/column-helper.mjs +95 -0
- package/esm2020/lib/utils/column-prop-getters.mjs +96 -0
- package/esm2020/lib/utils/column.mjs +69 -0
- package/esm2020/lib/utils/elm-from-point.mjs +38 -0
- package/esm2020/lib/utils/id.mjs +8 -0
- package/esm2020/lib/utils/keys.mjs +10 -0
- package/esm2020/lib/utils/math.mjs +146 -0
- package/esm2020/lib/utils/prefixes.mjs +38 -0
- package/esm2020/lib/utils/row-height-cache.mjs +138 -0
- package/esm2020/lib/utils/selection.mjs +40 -0
- package/esm2020/lib/utils/sort.mjs +127 -0
- package/esm2020/lib/utils/throttle.mjs +60 -0
- package/esm2020/lib/utils/translate.mjs +25 -0
- package/esm2020/lib/utils/tree.mjs +103 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
- package/{esm2015/swimlane-ngx-datatable.js → esm2020/swimlane-ngx-datatable.mjs} +1 -1
- package/fesm2015/{swimlane-ngx-datatable.js → swimlane-ngx-datatable.mjs} +4104 -3337
- package/fesm2015/swimlane-ngx-datatable.mjs.map +1 -0
- package/fesm2020/swimlane-ngx-datatable.mjs +5974 -0
- package/fesm2020/swimlane-ngx-datatable.mjs.map +1 -0
- package/lib/components/body/body-cell.component.d.ts +3 -0
- package/lib/components/body/body-group-header-template.directive.d.ts +3 -0
- package/lib/components/body/body-group-header.directive.d.ts +3 -0
- package/lib/components/body/body-row-wrapper.component.d.ts +3 -0
- package/lib/components/body/body-row.component.d.ts +3 -0
- package/lib/components/body/body.component.d.ts +3 -0
- package/lib/components/body/progress-bar.component.d.ts +3 -0
- package/lib/components/body/scroller.component.d.ts +3 -0
- package/lib/components/body/selection.component.d.ts +3 -0
- package/lib/components/body/summary/summary-row.component.d.ts +3 -0
- package/lib/components/columns/column-cell.directive.d.ts +3 -0
- package/lib/components/columns/column-header.directive.d.ts +3 -0
- package/lib/components/columns/column.directive.d.ts +3 -0
- package/lib/components/columns/tree.directive.d.ts +3 -0
- package/lib/components/datatable.component.d.ts +3 -0
- package/lib/components/footer/footer-template.directive.d.ts +3 -0
- package/lib/components/footer/footer.component.d.ts +3 -0
- package/lib/components/footer/footer.directive.d.ts +3 -0
- package/lib/components/footer/pager.component.d.ts +3 -0
- package/lib/components/header/header-cell.component.d.ts +3 -0
- package/lib/components/header/header.component.d.ts +3 -0
- package/lib/components/row-detail/row-detail-template.directive.d.ts +3 -0
- package/lib/components/row-detail/row-detail.directive.d.ts +3 -0
- package/lib/directives/draggable.directive.d.ts +3 -0
- package/lib/directives/long-press.directive.d.ts +3 -0
- package/lib/directives/orderable.directive.d.ts +3 -0
- package/lib/directives/resizeable.directive.d.ts +3 -0
- package/lib/directives/visibility.directive.d.ts +3 -0
- package/lib/ngx-datatable.module.d.ts +33 -0
- package/lib/services/column-changes.service.d.ts +3 -0
- package/lib/services/dimensions-helper.service.d.ts +3 -0
- package/lib/services/scrollbar-helper.service.d.ts +3 -0
- package/package.json +24 -12
- package/swimlane-ngx-datatable.d.ts +1 -0
- package/bundles/swimlane-ngx-datatable.umd.js +0 -5876
- package/bundles/swimlane-ngx-datatable.umd.js.map +0 -1
- package/bundles/swimlane-ngx-datatable.umd.min.js +0 -2
- package/bundles/swimlane-ngx-datatable.umd.min.js.map +0 -1
- package/esm2015/lib/components/body/body-cell.component.js +0 -361
- package/esm2015/lib/components/body/body-group-header-template.directive.js +0 -15
- package/esm2015/lib/components/body/body-group-header.directive.js +0 -54
- package/esm2015/lib/components/body/body-row-wrapper.component.js +0 -106
- package/esm2015/lib/components/body/body-row.component.js +0 -212
- package/esm2015/lib/components/body/body.component.js +0 -713
- package/esm2015/lib/components/body/progress-bar.component.js +0 -17
- package/esm2015/lib/components/body/scroller.component.js +0 -83
- package/esm2015/lib/components/body/selection.component.js +0 -140
- package/esm2015/lib/components/body/summary/summary-row.component.js +0 -81
- package/esm2015/lib/components/columns/column-cell.directive.js +0 -13
- package/esm2015/lib/components/columns/column-header.directive.js +0 -13
- package/esm2015/lib/components/columns/column.directive.js +0 -65
- package/esm2015/lib/components/columns/tree.directive.js +0 -13
- package/esm2015/lib/components/datatable.component.js +0 -925
- package/esm2015/lib/components/footer/footer-template.directive.js +0 -13
- package/esm2015/lib/components/footer/footer.component.js +0 -75
- package/esm2015/lib/components/footer/footer.directive.js +0 -22
- package/esm2015/lib/components/footer/pager.component.js +0 -136
- package/esm2015/lib/components/header/header-cell.component.js +0 -191
- package/esm2015/lib/components/header/header.component.js +0 -295
- package/esm2015/lib/components/row-detail/row-detail-template.directive.js +0 -15
- package/esm2015/lib/components/row-detail/row-detail.directive.js +0 -55
- package/esm2015/lib/directives/draggable.directive.js +0 -102
- package/esm2015/lib/directives/long-press.directive.js +0 -103
- package/esm2015/lib/directives/orderable.directive.js +0 -131
- package/esm2015/lib/directives/resizeable.directive.js +0 -89
- package/esm2015/lib/directives/visibility.directive.js +0 -62
- package/esm2015/lib/events.js +0 -7
- package/esm2015/lib/ngx-datatable.module.js +0 -96
- package/esm2015/lib/services/column-changes.service.js +0 -21
- package/esm2015/lib/services/dimensions-helper.service.js +0 -14
- package/esm2015/lib/services/scrollbar-helper.service.js +0 -34
- package/esm2015/lib/types/click.type.js +0 -6
- package/esm2015/lib/types/column-mode.type.js +0 -7
- package/esm2015/lib/types/contextmenu.type.js +0 -6
- package/esm2015/lib/types/selection.type.js +0 -9
- package/esm2015/lib/types/sort-direction.type.js +0 -6
- package/esm2015/lib/types/sort-prop-dir.type.js +0 -2
- package/esm2015/lib/types/sort.type.js +0 -6
- package/esm2015/lib/types/table-column.type.js +0 -2
- package/esm2015/lib/utils/camel-case.js +0 -28
- package/esm2015/lib/utils/column-helper.js +0 -95
- package/esm2015/lib/utils/column-prop-getters.js +0 -96
- package/esm2015/lib/utils/column.js +0 -69
- package/esm2015/lib/utils/elm-from-point.js +0 -38
- package/esm2015/lib/utils/id.js +0 -8
- package/esm2015/lib/utils/keys.js +0 -10
- package/esm2015/lib/utils/math.js +0 -146
- package/esm2015/lib/utils/prefixes.js +0 -40
- package/esm2015/lib/utils/row-height-cache.js +0 -138
- package/esm2015/lib/utils/selection.js +0 -40
- package/esm2015/lib/utils/sort.js +0 -127
- package/esm2015/lib/utils/throttle.js +0 -60
- package/esm2015/lib/utils/translate.js +0 -25
- package/esm2015/lib/utils/tree.js +0 -103
- package/fesm2015/swimlane-ngx-datatable.js.map +0 -1
- package/swimlane-ngx-datatable.metadata.json +0 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { columnsByPin, columnsTotalWidth } from './column';
|
|
2
|
+
/**
|
|
3
|
+
* Calculates the Total Flex Grow
|
|
4
|
+
*/
|
|
5
|
+
export function getTotalFlexGrow(columns) {
|
|
6
|
+
let totalFlexGrow = 0;
|
|
7
|
+
for (const c of columns) {
|
|
8
|
+
totalFlexGrow += c.flexGrow || 0;
|
|
9
|
+
}
|
|
10
|
+
return totalFlexGrow;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Adjusts the column widths.
|
|
14
|
+
* Inspired by: https://github.com/facebook/fixed-data-table/blob/master/src/FixedDataTableWidthHelper.js
|
|
15
|
+
*/
|
|
16
|
+
export function adjustColumnWidths(allColumns, expectedWidth) {
|
|
17
|
+
const columnsWidth = columnsTotalWidth(allColumns);
|
|
18
|
+
const totalFlexGrow = getTotalFlexGrow(allColumns);
|
|
19
|
+
const colsByGroup = columnsByPin(allColumns);
|
|
20
|
+
if (columnsWidth !== expectedWidth) {
|
|
21
|
+
scaleColumns(colsByGroup, expectedWidth, totalFlexGrow);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resizes columns based on the flexGrow property, while respecting manually set widths
|
|
26
|
+
*/
|
|
27
|
+
function scaleColumns(colsByGroup, maxWidth, totalFlexGrow) {
|
|
28
|
+
// calculate total width and flexgrow points for coulumns that can be resized
|
|
29
|
+
for (const attr in colsByGroup) {
|
|
30
|
+
for (const column of colsByGroup[attr]) {
|
|
31
|
+
if (!column.canAutoResize) {
|
|
32
|
+
maxWidth -= column.width;
|
|
33
|
+
totalFlexGrow -= column.flexGrow ? column.flexGrow : 0;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
column.width = 0;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const hasMinWidth = {};
|
|
41
|
+
let remainingWidth = maxWidth;
|
|
42
|
+
// resize columns until no width is left to be distributed
|
|
43
|
+
do {
|
|
44
|
+
const widthPerFlexPoint = remainingWidth / totalFlexGrow;
|
|
45
|
+
remainingWidth = 0;
|
|
46
|
+
for (const attr in colsByGroup) {
|
|
47
|
+
for (const column of colsByGroup[attr]) {
|
|
48
|
+
// if the column can be resize and it hasn't reached its minimum width yet
|
|
49
|
+
if (column.canAutoResize && !hasMinWidth[column.prop]) {
|
|
50
|
+
const newWidth = column.width + column.flexGrow * widthPerFlexPoint;
|
|
51
|
+
if (column.minWidth !== undefined && newWidth < column.minWidth) {
|
|
52
|
+
remainingWidth += newWidth - column.minWidth;
|
|
53
|
+
column.width = column.minWidth;
|
|
54
|
+
hasMinWidth[column.prop] = true;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
column.width = newWidth;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} while (remainingWidth !== 0);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Forces the width of the columns to
|
|
66
|
+
* distribute equally but overflowing when necessary
|
|
67
|
+
*
|
|
68
|
+
* Rules:
|
|
69
|
+
*
|
|
70
|
+
* - If combined withs are less than the total width of the grid,
|
|
71
|
+
* proportion the widths given the min / max / normal widths to fill the width.
|
|
72
|
+
*
|
|
73
|
+
* - If the combined widths, exceed the total width of the grid,
|
|
74
|
+
* use the standard widths.
|
|
75
|
+
*
|
|
76
|
+
* - If a column is resized, it should always use that width
|
|
77
|
+
*
|
|
78
|
+
* - The proportional widths should never fall below min size if specified.
|
|
79
|
+
*
|
|
80
|
+
* - If the grid starts off small but then becomes greater than the size ( + / - )
|
|
81
|
+
* the width should use the original width; not the newly proportioned widths.
|
|
82
|
+
*/
|
|
83
|
+
export function forceFillColumnWidths(allColumns, expectedWidth, startIdx, allowBleed, defaultColWidth = 300) {
|
|
84
|
+
const columnsToResize = allColumns.slice(startIdx + 1, allColumns.length).filter(c => {
|
|
85
|
+
return c.canAutoResize !== false;
|
|
86
|
+
});
|
|
87
|
+
for (const column of columnsToResize) {
|
|
88
|
+
if (!column.$$oldWidth) {
|
|
89
|
+
column.$$oldWidth = column.width;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
let additionWidthPerColumn = 0;
|
|
93
|
+
let exceedsWindow = false;
|
|
94
|
+
let contentWidth = getContentWidth(allColumns, defaultColWidth);
|
|
95
|
+
let remainingWidth = expectedWidth - contentWidth;
|
|
96
|
+
const columnsProcessed = [];
|
|
97
|
+
const remainingWidthLimit = 1; // when to stop
|
|
98
|
+
// This loop takes care of the
|
|
99
|
+
do {
|
|
100
|
+
additionWidthPerColumn = remainingWidth / columnsToResize.length;
|
|
101
|
+
exceedsWindow = contentWidth >= expectedWidth;
|
|
102
|
+
for (const column of columnsToResize) {
|
|
103
|
+
if (exceedsWindow && allowBleed) {
|
|
104
|
+
column.width = column.$$oldWidth || column.width || defaultColWidth;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const newSize = (column.width || defaultColWidth) + additionWidthPerColumn;
|
|
108
|
+
if (column.minWidth && newSize < column.minWidth) {
|
|
109
|
+
column.width = column.minWidth;
|
|
110
|
+
columnsProcessed.push(column);
|
|
111
|
+
}
|
|
112
|
+
else if (column.maxWidth && newSize > column.maxWidth) {
|
|
113
|
+
column.width = column.maxWidth;
|
|
114
|
+
columnsProcessed.push(column);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
column.width = newSize;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
column.width = Math.max(0, column.width);
|
|
121
|
+
}
|
|
122
|
+
contentWidth = getContentWidth(allColumns);
|
|
123
|
+
remainingWidth = expectedWidth - contentWidth;
|
|
124
|
+
removeProcessedColumns(columnsToResize, columnsProcessed);
|
|
125
|
+
} while (remainingWidth > remainingWidthLimit && columnsToResize.length !== 0);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Remove the processed columns from the current active columns.
|
|
129
|
+
*/
|
|
130
|
+
function removeProcessedColumns(columnsToResize, columnsProcessed) {
|
|
131
|
+
for (const column of columnsProcessed) {
|
|
132
|
+
const index = columnsToResize.indexOf(column);
|
|
133
|
+
columnsToResize.splice(index, 1);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Gets the width of the columns
|
|
138
|
+
*/
|
|
139
|
+
function getContentWidth(allColumns, defaultColWidth = 300) {
|
|
140
|
+
let contentWidth = 0;
|
|
141
|
+
for (const column of allColumns) {
|
|
142
|
+
contentWidth += column.width || defaultColWidth;
|
|
143
|
+
}
|
|
144
|
+
return contentWidth;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi91dGlscy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFM0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBYztJQUM3QyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFFdEIsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUU7UUFDdkIsYUFBYSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUFlLEVBQUUsYUFBa0I7SUFDcEUsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTdDLElBQUksWUFBWSxLQUFLLGFBQWEsRUFBRTtRQUNsQyxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUN6RDtBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFdBQWdCLEVBQUUsUUFBYSxFQUFFLGFBQWtCO0lBQ3ZFLDZFQUE2RTtJQUM3RSxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsRUFBRTtRQUM5QixLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtnQkFDekIsUUFB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OUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbEM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxVQUFlLEVBQUUsa0JBQTBCLEdBQUc7SUFDckUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRXJCLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFO1FBQy9CLFlBQVksSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQztLQUNqRDtJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2x1bW5zQnlQaW4sIGNvbHVtbnNUb3RhbFdpZHRoIH0gZnJvbSAnLi9jb2x1bW4nO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIFRvdGFsIEZsZXggR3Jvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG90YWxGbGV4R3Jvdyhjb2x1bW5zOiBhbnlbXSkge1xuICBsZXQgdG90YWxGbGV4R3JvdyA9IDA7XG5cbiAgZm9yIChjb25zdCBjIG9mIGNvbHVtbnMpIHtcbiAgICB0b3RhbEZsZXhHcm93ICs9IGMuZmxleEdyb3cgfHwgMDtcbiAgfVxuXG4gIHJldHVybiB0b3RhbEZsZXhHcm93O1xufVxuXG4vKipcbiAqIEFkanVzdHMgdGhlIGNvbHVtbiB3aWR0aHMuXG4gKiBJbnNwaXJlZCBieTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZpeGVkLWRhdGEtdGFibGUvYmxvYi9tYXN0ZXIvc3JjL0ZpeGVkRGF0YVRhYmxlV2lkdGhIZWxwZXIuanNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdENvbHVtbldpZHRocyhhbGxDb2x1bW5zOiBhbnksIGV4cGVjdGVkV2lkdGg6IGFueSkge1xuICBjb25zdCBjb2x1bW5zV2lkdGggPSBjb2x1bW5zVG90YWxXaWR0aChhbGxDb2x1bW5zKTtcbiAgY29uc3QgdG90YWxGbGV4R3JvdyA9IGdldFRvdGFsRmxleEdyb3coYWxsQ29sdW1ucyk7XG4gIGNvbnN0IGNvbHNCeUdyb3VwID0gY29sdW1uc0J5UGluKGFsbENvbHVtbnMpO1xuXG4gIGlmIChjb2x1bW5zV2lkdGggIT09IGV4cGVjdGVkV2lkdGgpIHtcbiAgICBzY2FsZUNvbHVtbnMoY29sc0J5R3JvdXAsIGV4cGVjdGVkV2lkdGgsIHRvdGFsRmxleEdyb3cpO1xuICB9XG59XG5cbi8qKlxuICogUmVzaXplcyBjb2x1bW5zIGJhc2VkIG9uIHRoZSBmbGV4R3JvdyBwcm9wZXJ0eSwgd2hpbGUgcmVzcGVjdGluZyBtYW51YWxseSBzZXQgd2lkdGhzXG4gKi9cbmZ1bmN0aW9uIHNjYWxlQ29sdW1ucyhjb2xzQnlHcm91cDogYW55LCBtYXhXaWR0aDogYW55LCB0b3RhbEZsZXhHcm93OiBhbnkpIHtcbiAgLy8gY2FsY3VsYXRlIHRvdGFsIHdpZHRoIGFuZCBmbGV4Z3JvdyBwb2ludHMgZm9yIGNvdWx1bW5zIHRoYXQgY2FuIGJlIHJlc2l6ZWRcbiAgZm9yIChjb25zdCBhdHRyIGluIGNvbHNCeUdyb3VwKSB7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sc0J5R3JvdXBbYXR0cl0pIHtcbiAgICAgIGlmICghY29sdW1uLmNhbkF1dG9SZXNpemUpIHtcbiAgICAgICAgbWF4V2lkdGggLT0gY29sdW1uLndpZHRoO1xuICAgICAgICB0b3RhbEZsZXhHcm93IC09IGNvbHVtbi5mbGV4R3JvdyA/IGNvbHVtbi5mbGV4R3JvdyA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW4ud2lkdGggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhc01pbldpZHRoID0ge307XG4gIGxldCByZW1haW5pbmdXaWR0aCA9IG1heFdpZHRoO1xuXG4gIC8vIHJlc2l6ZSBjb2x1bW5zIHVudGlsIG5vIHdpZHRoIGlzIGxlZnQgdG8gYmUgZGlzdHJpYnV0ZWRcbiAgZG8ge1xuICAgIGNvbnN0IHdpZHRoUGVyRmxleFBvaW50ID0gcmVtYWluaW5nV2lkdGggLyB0b3RhbEZsZXhHcm93O1xuICAgIHJlbWFpbmluZ1dpZHRoID0gMDtcblxuICAgIGZvciAoY29uc3QgYXR0ciBpbiBjb2xzQnlHcm91cCkge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sc0J5R3JvdXBbYXR0cl0pIHtcbiAgICAgICAgLy8gaWYgdGhlIGNvbHVtbiBjYW4gYmUgcmVzaXplIGFuZCBpdCBoYXNuJ3QgcmVhY2hlZCBpdHMgbWluaW11bSB3aWR0aCB5ZXRcbiAgICAgICAgaWYgKGNvbHVtbi5jYW5BdXRvUmVzaXplICYmICFoYXNNaW5XaWR0aFtjb2x1bW4ucHJvcF0pIHtcbiAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGNvbHVtbi53aWR0aCArIGNvbHVtbi5mbGV4R3JvdyAqIHdpZHRoUGVyRmxleFBvaW50O1xuICAgICAgICAgIGlmIChjb2x1bW4ubWluV2lkdGggIT09IHVuZGVmaW5lZCAmJiBuZXdXaWR0aCA8IGNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggKz0gbmV3V2lkdGggLSBjb2x1bW4ubWluV2lkdGg7XG4gICAgICAgICAgICBjb2x1bW4ud2lkdGggPSBjb2x1bW4ubWluV2lkdGg7XG4gICAgICAgICAgICBoYXNNaW5XaWR0aFtjb2x1bW4ucHJvcF0gPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2x1bW4ud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKHJlbWFpbmluZ1dpZHRoICE9PSAwKTtcbn1cblxuLyoqXG4gKiBGb3JjZXMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zIHRvXG4gKiBkaXN0cmlidXRlIGVxdWFsbHkgYnV0IG92ZXJmbG93aW5nIHdoZW4gbmVjZXNzYXJ5XG4gKlxuICogUnVsZXM6XG4gKlxuICogIC0gSWYgY29tYmluZWQgd2l0aHMgYXJlIGxlc3MgdGhhbiB0aGUgdG90YWwgd2lkdGggb2YgdGhlIGdyaWQsXG4gKiAgICBwcm9wb3J0aW9uIHRoZSB3aWR0aHMgZ2l2ZW4gdGhlIG1pbiAvIG1heCAvIG5vcm1hbCB3aWR0aHMgdG8gZmlsbCB0aGUgd2lkdGguXG4gKlxuICogIC0gSWYgdGhlIGNvbWJpbmVkIHdpZHRocywgZXhjZWVkIHRoZSB0b3RhbCB3aWR0aCBvZiB0aGUgZ3JpZCxcbiAqICAgIHVzZSB0aGUgc3RhbmRhcmQgd2lkdGhzLlxuICpcbiAqICAtIElmIGEgY29sdW1uIGlzIHJlc2l6ZWQsIGl0IHNob3VsZCBhbHdheXMgdXNlIHRoYXQgd2lkdGhcbiAqXG4gKiAgLSBUaGUgcHJvcG9ydGlvbmFsIHdpZHRocyBzaG91bGQgbmV2ZXIgZmFsbCBiZWxvdyBtaW4gc2l6ZSBpZiBzcGVjaWZpZWQuXG4gKlxuICogIC0gSWYgdGhlIGdyaWQgc3RhcnRzIG9mZiBzbWFsbCBidXQgdGhlbiBiZWNvbWVzIGdyZWF0ZXIgdGhhbiB0aGUgc2l6ZSAoICsgLyAtIClcbiAqICAgIHRoZSB3aWR0aCBzaG91bGQgdXNlIHRoZSBvcmlnaW5hbCB3aWR0aDsgbm90IHRoZSBuZXdseSBwcm9wb3J0aW9uZWQgd2lkdGhzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yY2VGaWxsQ29sdW1uV2lkdGhzKFxuICBhbGxDb2x1bW5zOiBhbnlbXSxcbiAgZXhwZWN0ZWRXaWR0aDogbnVtYmVyLFxuICBzdGFydElkeDogbnVtYmVyLFxuICBhbGxvd0JsZWVkOiBib29sZWFuLFxuICBkZWZhdWx0Q29sV2lkdGg6IG51bWJlciA9IDMwMFxuKSB7XG4gIGNvbnN0IGNvbHVtbnNUb1Jlc2l6ZSA9IGFsbENvbHVtbnMuc2xpY2Uoc3RhcnRJZHggKyAxLCBhbGxDb2x1bW5zLmxlbmd0aCkuZmlsdGVyKGMgPT4ge1xuICAgIHJldHVybiBjLmNhbkF1dG9SZXNpemUgIT09IGZhbHNlO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zVG9SZXNpemUpIHtcbiAgICBpZiAoIWNvbHVtbi4kJG9sZFdpZHRoKSB7XG4gICAgICBjb2x1bW4uJCRvbGRXaWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgICB9XG4gIH1cblxuICBsZXQgYWRkaXRpb25XaWR0aFBlckNvbHVtbiA9IDA7XG4gIGxldCBleGNlZWRzV2luZG93ID0gZmFsc2U7XG4gIGxldCBjb250ZW50V2lkdGggPSBnZXRDb250ZW50V2lkdGgoYWxsQ29sdW1ucywgZGVmYXVsdENvbFdpZHRoKTtcbiAgbGV0IHJlbWFpbmluZ1dpZHRoID0gZXhwZWN0ZWRXaWR0aCAtIGNvbnRlbnRXaWR0aDtcbiAgY29uc3QgY29sdW1uc1Byb2Nlc3NlZDogYW55W10gPSBbXTtcbiAgY29uc3QgcmVtYWluaW5nV2lkdGhMaW1pdCA9IDE7IC8vIHdoZW4gdG8gc3RvcFxuXG4gIC8vIFRoaXMgbG9vcCB0YWtlcyBjYXJlIG9mIHRoZVxuICBkbyB7XG4gICAgYWRkaXRpb25XaWR0aFBlckNvbHVtbiA9IHJlbWFpbmluZ1dpZHRoIC8gY29sdW1uc1RvUmVzaXplLmxlbmd0aDtcbiAgICBleGNlZWRzV2luZG93ID0gY29udGVudFdpZHRoID49IGV4cGVjdGVkV2lkdGg7XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zVG9SZXNpemUpIHtcbiAgICAgIGlmIChleGNlZWRzV2luZG93ICYmIGFsbG93QmxlZWQpIHtcbiAgICAgICAgY29sdW1uLndpZHRoID0gY29sdW1uLiQkb2xkV2lkdGggfHwgY29sdW1uLndpZHRoIHx8IGRlZmF1bHRDb2xXaWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld1NpemUgPSAoY29sdW1uLndpZHRoIHx8IGRlZmF1bHRDb2xXaWR0aCkgKyBhZGRpdGlvbldpZHRoUGVyQ29sdW1uO1xuXG4gICAgICAgIGlmIChjb2x1bW4ubWluV2lkdGggJiYgbmV3U2l6ZSA8IGNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi5taW5XaWR0aDtcbiAgICAgICAgICBjb2x1bW5zUHJvY2Vzc2VkLnB1c2goY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubWF4V2lkdGggJiYgbmV3U2l6ZSA+IGNvbHVtbi5tYXhXaWR0aCkge1xuICAgICAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi5tYXhXaWR0aDtcbiAgICAgICAgICBjb2x1bW5zUHJvY2Vzc2VkLnB1c2goY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4ud2lkdGggPSBuZXdTaXplO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbi53aWR0aCA9IE1hdGgubWF4KDAsIGNvbHVtbi53aWR0aCk7XG4gICAgfVxuXG4gICAgY29udGVudFdpZHRoID0gZ2V0Q29udGVudFdpZHRoKGFsbENvbHVtbnMpO1xuICAgIHJlbWFpbmluZ1dpZHRoID0gZXhwZWN0ZWRXaWR0aCAtIGNvbnRlbnRXaWR0aDtcbiAgICByZW1vdmVQcm9jZXNzZWRDb2x1bW5zKGNvbHVtbnNUb1Jlc2l6ZSwgY29sdW1uc1Byb2Nlc3NlZCk7XG4gIH0gd2hpbGUgKHJlbWFpbmluZ1dpZHRoID4gcmVtYWluaW5nV2lkdGhMaW1pdCAmJiBjb2x1bW5zVG9SZXNpemUubGVuZ3RoICE9PSAwKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIHByb2Nlc3NlZCBjb2x1bW5zIGZyb20gdGhlIGN1cnJlbnQgYWN0aXZlIGNvbHVtbnMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZVByb2Nlc3NlZENvbHVtbnMoY29sdW1uc1RvUmVzaXplOiBhbnlbXSwgY29sdW1uc1Byb2Nlc3NlZDogYW55W10pIHtcbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1uc1Byb2Nlc3NlZCkge1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1uc1RvUmVzaXplLmluZGV4T2YoY29sdW1uKTtcbiAgICBjb2x1bW5zVG9SZXNpemUuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRlbnRXaWR0aChhbGxDb2x1bW5zOiBhbnksIGRlZmF1bHRDb2xXaWR0aDogbnVtYmVyID0gMzAwKTogbnVtYmVyIHtcbiAgbGV0IGNvbnRlbnRXaWR0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgYWxsQ29sdW1ucykge1xuICAgIGNvbnRlbnRXaWR0aCArPSBjb2x1bW4ud2lkdGggfHwgZGVmYXVsdENvbFdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRXaWR0aDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { camelCase } from './camel-case';
|
|
2
|
+
const cache = {};
|
|
3
|
+
const testStyle = typeof document !== 'undefined' ? document.createElement('div').style : undefined;
|
|
4
|
+
// Get Prefix
|
|
5
|
+
// http://davidwalsh.name/vendor-prefix
|
|
6
|
+
const prefix = (function () {
|
|
7
|
+
const styles = typeof window !== 'undefined' ? window.getComputedStyle(document.documentElement, '') : undefined;
|
|
8
|
+
const match = typeof styles !== 'undefined'
|
|
9
|
+
? Array.prototype.slice
|
|
10
|
+
.call(styles)
|
|
11
|
+
.join('')
|
|
12
|
+
.match(/-(moz|webkit|ms)-/)
|
|
13
|
+
: null;
|
|
14
|
+
const pre = match !== null ? match[1] : undefined;
|
|
15
|
+
// tslint:disable-next-line: tsr-detect-non-literal-regexp
|
|
16
|
+
const dom = typeof pre !== 'undefined' ? 'WebKit|Moz|MS|O'.match(new RegExp('(' + pre + ')', 'i'))[1] : undefined;
|
|
17
|
+
return dom
|
|
18
|
+
? {
|
|
19
|
+
dom,
|
|
20
|
+
lowercase: pre,
|
|
21
|
+
css: `-${pre}-`,
|
|
22
|
+
js: pre[0].toUpperCase() + pre.substr(1)
|
|
23
|
+
}
|
|
24
|
+
: undefined;
|
|
25
|
+
})();
|
|
26
|
+
export function getVendorPrefixedName(property) {
|
|
27
|
+
const name = camelCase(property);
|
|
28
|
+
if (!cache[name]) {
|
|
29
|
+
if (prefix !== undefined && testStyle[prefix.css + property] !== undefined) {
|
|
30
|
+
cache[name] = prefix.css + property;
|
|
31
|
+
}
|
|
32
|
+
else if (testStyle[property] !== undefined) {
|
|
33
|
+
cache[name] = property;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return cache[name];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZml4ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zd2ltbGFuZS9uZ3gtZGF0YXRhYmxlL3NyYy9saWIvdXRpbHMvcHJlZml4ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDakIsTUFBTSxTQUFTLEdBQUcsT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBRXBHLGFBQWE7QUFDYix1Q0FBdUM7QUFDdkMsTUFBTSxNQUFNLEdBQUcsQ0FBQztJQUNkLE1BQU0sTUFBTSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqSCxNQUFNLEtBQUssR0FDVCxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQzNCLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7YUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNaLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDUixLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLE1BQU0sR0FBRyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xELDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxPQUFPLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFbEgsT0FBTyxHQUFHO1FBQ1IsQ0FBQyxDQUFDO1lBQ0UsR0FBRztZQUNILFNBQVMsRUFBRSxHQUFHO1lBQ2QsR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHO1lBQ2YsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN6QztRQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDaEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNoQixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQzFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztTQUNyQzthQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ3hCO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FtZWxDYXNlIH0gZnJvbSAnLi9jYW1lbC1jYXNlJztcblxuY29uc3QgY2FjaGUgPSB7fTtcbmNvbnN0IHRlc3RTdHlsZSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZSA6IHVuZGVmaW5lZDtcblxuLy8gR2V0IFByZWZpeFxuLy8gaHR0cDovL2Rhdmlkd2Fsc2gubmFtZS92ZW5kb3ItcHJlZml4XG5jb25zdCBwcmVmaXggPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdHlsZXMgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJycpIDogdW5kZWZpbmVkO1xuICBjb25zdCBtYXRjaCA9XG4gICAgdHlwZW9mIHN0eWxlcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgICAgLmNhbGwoc3R5bGVzKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgIC5tYXRjaCgvLShtb3p8d2Via2l0fG1zKS0vKVxuICAgICAgOiBudWxsO1xuICBjb25zdCBwcmUgPSBtYXRjaCAhPT0gbnVsbCA/IG1hdGNoWzFdIDogdW5kZWZpbmVkO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRzci1kZXRlY3Qtbm9uLWxpdGVyYWwtcmVnZXhwXG4gIGNvbnN0IGRvbSA9IHR5cGVvZiBwcmUgIT09ICd1bmRlZmluZWQnID8gJ1dlYktpdHxNb3p8TVN8TycubWF0Y2gobmV3IFJlZ0V4cCgnKCcgKyBwcmUgKyAnKScsICdpJykpWzFdIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBkb21cbiAgICA/IHtcbiAgICAgICAgZG9tLFxuICAgICAgICBsb3dlcmNhc2U6IHByZSxcbiAgICAgICAgY3NzOiBgLSR7cHJlfS1gLFxuICAgICAgICBqczogcHJlWzBdLnRvVXBwZXJDYXNlKCkgKyBwcmUuc3Vic3RyKDEpXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWROYW1lKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgY29uc3QgbmFtZSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSk7XG5cbiAgaWYgKCFjYWNoZVtuYW1lXSkge1xuICAgIGlmIChwcmVmaXggIT09IHVuZGVmaW5lZCAmJiB0ZXN0U3R5bGVbcHJlZml4LmNzcyArIHByb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVtuYW1lXSA9IHByZWZpeC5jc3MgKyBwcm9wZXJ0eTtcbiAgICB9IGVsc2UgaWYgKHRlc3RTdHlsZVtwcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVbbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2FjaGVbbmFtZV07XG59XG4iXX0=
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This object contains the cache of the various row heights that are present inside
|
|
3
|
+
* the data table. Its based on Fenwick tree data structure that helps with
|
|
4
|
+
* querying sums that have time complexity of log n.
|
|
5
|
+
*
|
|
6
|
+
* Fenwick Tree Credits: http://petr-mitrichev.blogspot.com/2013/05/fenwick-tree-range-updates.html
|
|
7
|
+
* https://github.com/mikolalysenko/fenwick-tree
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
export class RowHeightCache {
|
|
11
|
+
constructor() {
|
|
12
|
+
/**
|
|
13
|
+
* Tree Array stores the cumulative information of the row heights to perform efficient
|
|
14
|
+
* range queries and updates. Currently the tree is initialized to the base row
|
|
15
|
+
* height instead of the detail row height.
|
|
16
|
+
*/
|
|
17
|
+
this.treeArray = [];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Clear the Tree array.
|
|
21
|
+
*/
|
|
22
|
+
clearCache() {
|
|
23
|
+
this.treeArray = [];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the Fenwick tree with row Heights.
|
|
27
|
+
*
|
|
28
|
+
* @param rows The array of rows which contain the expanded status.
|
|
29
|
+
* @param rowHeight The row height.
|
|
30
|
+
* @param detailRowHeight The detail row height.
|
|
31
|
+
*/
|
|
32
|
+
initCache(details) {
|
|
33
|
+
const { rows, rowHeight, detailRowHeight, externalVirtual, rowCount, rowIndexes, rowExpansions } = details;
|
|
34
|
+
const isFn = typeof rowHeight === 'function';
|
|
35
|
+
const isDetailFn = typeof detailRowHeight === 'function';
|
|
36
|
+
if (!isFn && isNaN(rowHeight)) {
|
|
37
|
+
throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a
|
|
38
|
+
valid number or function value: (${rowHeight}) when 'scrollbarV' is enabled.`);
|
|
39
|
+
}
|
|
40
|
+
// Add this additional guard in case detailRowHeight is set to 'auto' as it wont work.
|
|
41
|
+
if (!isDetailFn && isNaN(detailRowHeight)) {
|
|
42
|
+
throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a
|
|
43
|
+
valid number or function value: (${detailRowHeight}) when 'scrollbarV' is enabled.`);
|
|
44
|
+
}
|
|
45
|
+
const n = externalVirtual ? rowCount : rows.length;
|
|
46
|
+
this.treeArray = new Array(n);
|
|
47
|
+
for (let i = 0; i < n; ++i) {
|
|
48
|
+
this.treeArray[i] = 0;
|
|
49
|
+
}
|
|
50
|
+
for (let i = 0; i < n; ++i) {
|
|
51
|
+
const row = rows[i];
|
|
52
|
+
let currentRowHeight = rowHeight;
|
|
53
|
+
if (isFn) {
|
|
54
|
+
currentRowHeight = rowHeight(row);
|
|
55
|
+
}
|
|
56
|
+
// Add the detail row height to the already expanded rows.
|
|
57
|
+
// This is useful for the table that goes through a filter or sort.
|
|
58
|
+
const expanded = rowExpansions.has(row);
|
|
59
|
+
if (row && expanded) {
|
|
60
|
+
if (isDetailFn) {
|
|
61
|
+
const index = rowIndexes.get(row);
|
|
62
|
+
currentRowHeight += detailRowHeight(row, index);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
currentRowHeight += detailRowHeight;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
this.update(i, currentRowHeight);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Given the ScrollY position i.e. sum, provide the rowIndex
|
|
73
|
+
* that is present in the current view port. Below handles edge cases.
|
|
74
|
+
*/
|
|
75
|
+
getRowIndex(scrollY) {
|
|
76
|
+
if (scrollY === 0)
|
|
77
|
+
return 0;
|
|
78
|
+
return this.calcRowIndex(scrollY);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* When a row is expanded or rowHeight is changed, update the height. This can
|
|
82
|
+
* be utilized in future when Angular Data table supports dynamic row heights.
|
|
83
|
+
*/
|
|
84
|
+
update(atRowIndex, byRowHeight) {
|
|
85
|
+
if (!this.treeArray.length) {
|
|
86
|
+
throw new Error(`Update at index ${atRowIndex} with value ${byRowHeight} failed:
|
|
87
|
+
Row Height cache not initialized.`);
|
|
88
|
+
}
|
|
89
|
+
const n = this.treeArray.length;
|
|
90
|
+
atRowIndex |= 0;
|
|
91
|
+
while (atRowIndex < n) {
|
|
92
|
+
this.treeArray[atRowIndex] += byRowHeight;
|
|
93
|
+
atRowIndex |= atRowIndex + 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Range Sum query from 1 to the rowIndex
|
|
98
|
+
*/
|
|
99
|
+
query(atIndex) {
|
|
100
|
+
if (!this.treeArray.length) {
|
|
101
|
+
throw new Error(`query at index ${atIndex} failed: Fenwick tree array not initialized.`);
|
|
102
|
+
}
|
|
103
|
+
let sum = 0;
|
|
104
|
+
atIndex |= 0;
|
|
105
|
+
while (atIndex >= 0) {
|
|
106
|
+
sum += this.treeArray[atIndex];
|
|
107
|
+
atIndex = (atIndex & (atIndex + 1)) - 1;
|
|
108
|
+
}
|
|
109
|
+
return sum;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Find the total height between 2 row indexes
|
|
113
|
+
*/
|
|
114
|
+
queryBetween(atIndexA, atIndexB) {
|
|
115
|
+
return this.query(atIndexB) - this.query(atIndexA - 1);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Given the ScrollY position i.e. sum, provide the rowIndex
|
|
119
|
+
* that is present in the current view port.
|
|
120
|
+
*/
|
|
121
|
+
calcRowIndex(sum) {
|
|
122
|
+
if (!this.treeArray.length)
|
|
123
|
+
return 0;
|
|
124
|
+
let pos = -1;
|
|
125
|
+
const dataLength = this.treeArray.length;
|
|
126
|
+
// Get the highest bit for the block size.
|
|
127
|
+
const highestBit = Math.pow(2, dataLength.toString(2).length - 1);
|
|
128
|
+
for (let blockSize = highestBit; blockSize !== 0; blockSize >>= 1) {
|
|
129
|
+
const nextPos = pos + blockSize;
|
|
130
|
+
if (nextPos < dataLength && sum >= this.treeArray[nextPos]) {
|
|
131
|
+
sum -= this.treeArray[nextPos];
|
|
132
|
+
pos = nextPos;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return pos + 1;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWhlaWdodC1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi91dGlscy9yb3ctaGVpZ2h0LWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDRTs7OztXQUlHO1FBQ0ssY0FBUyxHQUFhLEVBQUUsQ0FBQztJQTJJbkMsQ0FBQztJQXpJQzs7T0FFRztJQUNILFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLE9BQVk7UUFDcEIsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMzRyxNQUFNLElBQUksR0FBRyxPQUFPLFNBQVMsS0FBSyxVQUFVLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxlQUFlLEtBQUssVUFBVSxDQUFDO1FBRXpELElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUM7MkNBQ3FCLFNBQVMsaUNBQWlDLENBQUMsQ0FBQztTQUNsRjtRQUVELHNGQUFzRjtRQUN0RixJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDOzJDQUNxQixlQUFlLGlDQUFpQyxDQUFDLENBQUM7U0FDeEY7UUFFRCxNQUFNLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNuRCxJQUFJLENBQUMs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O0lBQ0ssWUFBWSxDQUFDLEdBQVc7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXJDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFFekMsMENBQTBDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxFLEtBQUssSUFBSSxTQUFTLEdBQUcsVUFBVSxFQUFFLFNBQVMsS0FBSyxDQUFDLEVBQUUsU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNqRSxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDO1lBQ2hDLElBQUksT0FBTyxHQUFHLFVBQVUsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUQsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLEdBQUcsR0FBRyxPQUFPLENBQUM7YUFDZjtTQUNGO1FBRUQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBvYmplY3QgY29udGFpbnMgdGhlIGNhY2hlIG9mIHRoZSB2YXJpb3VzIHJvdyBoZWlnaHRzIHRoYXQgYXJlIHByZXNlbnQgaW5zaWRlXG4gKiB0aGUgZGF0YSB0YWJsZS4gICBJdHMgYmFzZWQgb24gRmVud2ljayB0cmVlIGRhdGEgc3RydWN0dXJlIHRoYXQgaGVscHMgd2l0aFxuICogcXVlcnlpbmcgc3VtcyB0aGF0IGhhdmUgdGltZSBjb21wbGV4aXR5IG9mIGxvZyBuLlxuICpcbiAqIEZlbndpY2sgVHJlZSBDcmVkaXRzOiBodHRwOi8vcGV0ci1taXRyaWNoZXYuYmxvZ3Nwb3QuY29tLzIwMTMvMDUvZmVud2ljay10cmVlLXJhbmdlLXVwZGF0ZXMuaHRtbFxuICogaHR0cHM6Ly9naXRodWIuY29tL21pa29sYWx5c2Vua28vZmVud2ljay10cmVlXG4gKlxuICovXG5leHBvcnQgY2xhc3MgUm93SGVpZ2h0Q2FjaGUge1xuICAvKipcbiAgICogVHJlZSBBcnJheSBzdG9yZXMgdGhlIGN1bXVsYXRpdmUgaW5mb3JtYXRpb24gb2YgdGhlIHJvdyBoZWlnaHRzIHRvIHBlcmZvcm0gZWZmaWNpZW50XG4gICAqIHJhbmdlIHF1ZXJpZXMgYW5kIHVwZGF0ZXMuICBDdXJyZW50bHkgdGhlIHRyZWUgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIGJhc2Ugcm93XG4gICAqIGhlaWdodCBpbnN0ZWFkIG9mIHRoZSBkZXRhaWwgcm93IGhlaWdodC5cbiAgICovXG4gIHByaXZhdGUgdHJlZUFycmF5OiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgVHJlZSBhcnJheS5cbiAgICovXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy50cmVlQXJyYXkgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBGZW53aWNrIHRyZWUgd2l0aCByb3cgSGVpZ2h0cy5cbiAgICpcbiAgICogQHBhcmFtIHJvd3MgVGhlIGFycmF5IG9mIHJvd3Mgd2hpY2ggY29udGFpbiB0aGUgZXhwYW5kZWQgc3RhdHVzLlxuICAgKiBAcGFyYW0gcm93SGVpZ2h0IFRoZSByb3cgaGVpZ2h0LlxuICAgKiBAcGFyYW0gZGV0YWlsUm93SGVpZ2h0IFRoZSBkZXRhaWwgcm93IGhlaWdodC5cbiAgICovXG4gIGluaXRDYWNoZShkZXRhaWxzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB7IHJvd3MsIHJvd0hlaWdodCwgZGV0YWlsUm93SGVpZ2h0LCBleHRlcm5hbFZpcnR1YWwsIHJvd0NvdW50LCByb3dJbmRleGVzLCByb3dFeHBhbnNpb25zIH0gPSBkZXRhaWxzO1xuICAgIGNvbnN0IGlzRm4gPSB0eXBlb2Ygcm93SGVpZ2h0ID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGlzRGV0YWlsRm4gPSB0eXBlb2YgZGV0YWlsUm93SGVpZ2h0ID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKCFpc0ZuICYmIGlzTmFOKHJvd0hlaWdodCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IEhlaWdodCBjYWNoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCAncm93SGVpZ2h0JyBpcyBhXG4gICAgICAgIHZhbGlkIG51bWJlciBvciBmdW5jdGlvbiB2YWx1ZTogKCR7cm93SGVpZ2h0fSkgd2hlbiAnc2Nyb2xsYmFyVicgaXMgZW5hYmxlZC5gKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhpcyBhZGRpdGlvbmFsIGd1YXJkIGluIGNhc2UgZGV0YWlsUm93SGVpZ2h0IGlzIHNldCB0byAnYXV0bycgYXMgaXQgd29udCB3b3JrLlxuICAgIGlmICghaXNEZXRhaWxGbiAmJiBpc05hTihkZXRhaWxSb3dIZWlnaHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBIZWlnaHQgY2FjaGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBQbGVhc2UgZW5zdXJlIHRoYXQgJ2RldGFpbFJvd0hlaWdodCcgaXMgYVxuICAgICAgICB2YWxpZCBudW1iZXIgb3IgZnVuY3Rpb24gdmFsdWU6ICgke2RldGFpbFJvd0hlaWdodH0pIHdoZW4gJ3Njcm9sbGJhclYnIGlzIGVuYWJsZWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbiA9IGV4dGVybmFsVmlydHVhbCA/IHJvd0NvdW50IDogcm93cy5sZW5ndGg7XG4gICAgdGhpcy50cmVlQXJyYXkgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdGhpcy50cmVlQXJyYXlbaV0gPSAwO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgbGV0IGN1cnJlbnRSb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICBpZiAoaXNGbikge1xuICAgICAgICBjdXJyZW50Um93SGVpZ2h0ID0gcm93SGVpZ2h0KHJvdyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB0aGUgZGV0YWlsIHJvdyBoZWlnaHQgdG8gdGhlIGFscmVhZHkgZXhwYW5kZWQgcm93cy5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciB0aGUgdGFibGUgdGhhdCBnb2VzIHRocm91Z2ggYSBmaWx0ZXIgb3Igc29ydC5cbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gcm93RXhwYW5zaW9ucy5oYXMocm93KTtcbiAgICAgIGlmIChyb3cgJiYgZXhwYW5kZWQpIHtcbiAgICAgICAgaWYgKGlzRGV0YWlsRm4pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHJvd0luZGV4ZXMuZ2V0KHJvdyk7XG4gICAgICAgICAgY3VycmVudFJvd0hlaWdodCArPSBkZXRhaWxSb3dIZWlnaHQocm93LCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFJvd0hlaWdodCArPSBkZXRhaWxSb3dIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGUoaSwgY3VycmVudFJvd0hlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIHRoZSBTY3JvbGxZIHBvc2l0aW9uIGkuZS4gc3VtLCBwcm92aWRlIHRoZSByb3dJbmRleFxuICAgKiB0aGF0IGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgdmlldyBwb3J0LiAgQmVsb3cgaGFuZGxlcyBlZGdlIGNhc2VzLlxuICAgKi9cbiAgZ2V0Um93SW5kZXgoc2Nyb2xsWTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoc2Nyb2xsWSA9PT0gMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMuY2FsY1Jvd0luZGV4KHNjcm9sbFkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYSByb3cgaXMgZXhwYW5kZWQgb3Igcm93SGVpZ2h0IGlzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgaGVpZ2h0LiAgVGhpcyBjYW5cbiAgICogYmUgdXRpbGl6ZWQgaW4gZnV0dXJlIHdoZW4gQW5ndWxhciBEYXRhIHRhYmxlIHN1cHBvcnRzIGR5bmFtaWMgcm93IGhlaWdodHMuXG4gICAqL1xuICB1cGRhdGUoYXRSb3dJbmRleDogbnVtYmVyLCBieVJvd0hlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRyZWVBcnJheS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXBkYXRlIGF0IGluZGV4ICR7YXRSb3dJbmRleH0gd2l0aCB2YWx1ZSAke2J5Um93SGVpZ2h0fSBmYWlsZWQ6XG4gICAgICAgIFJvdyBIZWlnaHQgY2FjaGUgbm90IGluaXRpYWxpemVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IG4gPSB0aGlzLnRyZWVBcnJheS5sZW5ndGg7XG4gICAgYXRSb3dJbmRleCB8PSAwO1xuXG4gICAgd2hpbGUgKGF0Um93SW5kZXggPCBuKSB7XG4gICAgICB0aGlzLnRyZWVBcnJheVthdFJvd0luZGV4XSArPSBieVJvd0hlaWdodDtcbiAgICAgIGF0Um93SW5kZXggfD0gYXRSb3dJbmRleCArIDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJhbmdlIFN1bSBxdWVyeSBmcm9tIDEgdG8gdGhlIHJvd0luZGV4XG4gICAqL1xuICBxdWVyeShhdEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy50cmVlQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHF1ZXJ5IGF0IGluZGV4ICR7YXRJbmRleH0gZmFpbGVkOiBGZW53aWNrIHRyZWUgYXJyYXkgbm90IGluaXRpYWxpemVkLmApO1xuICAgIH1cblxuICAgIGxldCBzdW0gPSAwO1xuICAgIGF0SW5kZXggfD0gMDtcblxuICAgIHdoaWxlIChhdEluZGV4ID49IDApIHtcbiAgICAgIHN1bSArPSB0aGlzLnRyZWVBcnJheVthdEluZGV4XTtcbiAgICAgIGF0SW5kZXggPSAoYXRJbmRleCAmIChhdEluZGV4ICsgMSkpIC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VtO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIHRvdGFsIGhlaWdodCBiZXR3ZWVuIDIgcm93IGluZGV4ZXNcbiAgICovXG4gIHF1ZXJ5QmV0d2VlbihhdEluZGV4QTogbnVtYmVyLCBhdEluZGV4QjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeShhdEluZGV4QikgLSB0aGlzLnF1ZXJ5KGF0SW5kZXhBIC0gMSk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gdGhlIFNjcm9sbFkgcG9zaXRpb24gaS5lLiBzdW0sIHByb3ZpZGUgdGhlIHJvd0luZGV4XG4gICAqIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCB2aWV3IHBvcnQuXG4gICAqL1xuICBwcml2YXRlIGNhbGNSb3dJbmRleChzdW06IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnRyZWVBcnJheS5sZW5ndGgpIHJldHVybiAwO1xuXG4gICAgbGV0IHBvcyA9IC0xO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLnRyZWVBcnJheS5sZW5ndGg7XG5cbiAgICAvLyBHZXQgdGhlIGhpZ2hlc3QgYml0IGZvciB0aGUgYmxvY2sgc2l6ZS5cbiAgICBjb25zdCBoaWdoZXN0Qml0ID0gTWF0aC5wb3coMiwgZGF0YUxlbmd0aC50b1N0cmluZygyKS5sZW5ndGggLSAxKTtcblxuICAgIGZvciAobGV0IGJsb2NrU2l6ZSA9IGhpZ2hlc3RCaXQ7IGJsb2NrU2l6ZSAhPT0gMDsgYmxvY2tTaXplID4+PSAxKSB7XG4gICAgICBjb25zdCBuZXh0UG9zID0gcG9zICsgYmxvY2tTaXplO1xuICAgICAgaWYgKG5leHRQb3MgPCBkYXRhTGVuZ3RoICYmIHN1bSA+PSB0aGlzLnRyZWVBcnJheVtuZXh0UG9zXSkge1xuICAgICAgICBzdW0gLT0gdGhpcy50cmVlQXJyYXlbbmV4dFBvc107XG4gICAgICAgIHBvcyA9IG5leHRQb3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvcyArIDE7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export function selectRows(selected, row, comparefn) {
|
|
2
|
+
const selectedIndex = comparefn(row, selected);
|
|
3
|
+
if (selectedIndex > -1) {
|
|
4
|
+
selected.splice(selectedIndex, 1);
|
|
5
|
+
}
|
|
6
|
+
else {
|
|
7
|
+
selected.push(row);
|
|
8
|
+
}
|
|
9
|
+
return selected;
|
|
10
|
+
}
|
|
11
|
+
export function selectRowsBetween(selected, rows, index, prevIndex, comparefn) {
|
|
12
|
+
const reverse = index < prevIndex;
|
|
13
|
+
for (let i = 0; i < rows.length; i++) {
|
|
14
|
+
const row = rows[i];
|
|
15
|
+
const greater = i >= prevIndex && i <= index;
|
|
16
|
+
const lesser = i <= prevIndex && i >= index;
|
|
17
|
+
let range = { start: 0, end: 0 };
|
|
18
|
+
if (reverse) {
|
|
19
|
+
range = {
|
|
20
|
+
start: index,
|
|
21
|
+
end: prevIndex
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
range = {
|
|
26
|
+
start: prevIndex,
|
|
27
|
+
end: index + 1
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if ((reverse && lesser) || (!reverse && greater)) {
|
|
31
|
+
// if in the positive range to be added to `selected`, and
|
|
32
|
+
// not already in the selected array, add it
|
|
33
|
+
if (i >= range.start && i <= range.end) {
|
|
34
|
+
selected.push(row);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return selected;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3dpbWxhbmUvbmd4LWRhdGF0YWJsZS9zcmMvbGliL3V0aWxzL3NlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsVUFBVSxDQUFDLFFBQWUsRUFBRSxHQUFRLEVBQUUsU0FBYztJQUNsRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRS9DLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsUUFBZSxFQUNmLElBQVcsRUFDWCxLQUFhLEVBQ2IsU0FBaUIsRUFDakIsU0FBYztJQUVkLE1BQU0sT0FBTyxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUM7SUFFbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUM7UUFFNUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxJQUFJLE9BQU8sRUFBRTtZQUNYLEtBQUssR0FBRztnQkFDTixLQUFLLEVBQUUsS0FBSztnQkFDWixHQUFHLEVBQUUsU0FBUzthQUNmLENBQUM7U0FDSDthQUFNO1lBQ0wsS0FBSyxHQUFHO2dCQUNOLEtBQUssRUFBRSxTQUFTO2dCQUNoQixHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUM7YUFDZixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUU7WUFDaEQsMERBQTBEO1lBQzFELDRDQUE0QztZQUM1QyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUN0QyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7S0FDRjtJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc2VsZWN0Um93cyhzZWxlY3RlZDogYW55W10sIHJvdzogYW55LCBjb21wYXJlZm46IGFueSkge1xuICBjb25zdCBzZWxlY3RlZEluZGV4ID0gY29tcGFyZWZuKHJvdywgc2VsZWN0ZWQpO1xuXG4gIGlmIChzZWxlY3RlZEluZGV4ID4gLTEpIHtcbiAgICBzZWxlY3RlZC5zcGxpY2Uoc2VsZWN0ZWRJbmRleCwgMSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZWN0ZWQucHVzaChyb3cpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0Um93c0JldHdlZW4oXG4gIHNlbGVjdGVkOiBhbnlbXSxcbiAgcm93czogYW55W10sXG4gIGluZGV4OiBudW1iZXIsXG4gIHByZXZJbmRleDogbnVtYmVyLFxuICBjb21wYXJlZm46IGFueVxuKTogYW55W10ge1xuICBjb25zdCByZXZlcnNlID0gaW5kZXggPCBwcmV2SW5kZXg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICBjb25zdCBncmVhdGVyID0gaSA+PSBwcmV2SW5kZXggJiYgaSA8PSBpbmRleDtcbiAgICBjb25zdCBsZXNzZXIgPSBpIDw9IHByZXZJbmRleCAmJiBpID49IGluZGV4O1xuXG4gICAgbGV0IHJhbmdlID0geyBzdGFydDogMCwgZW5kOiAwIH07XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJhbmdlID0ge1xuICAgICAgICBzdGFydDogaW5kZXgsXG4gICAgICAgIGVuZDogcHJldkluZGV4XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZSA9IHtcbiAgICAgICAgc3RhcnQ6IHByZXZJbmRleCxcbiAgICAgICAgZW5kOiBpbmRleCArIDFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKChyZXZlcnNlICYmIGxlc3NlcikgfHwgKCFyZXZlcnNlICYmIGdyZWF0ZXIpKSB7XG4gICAgICAvLyBpZiBpbiB0aGUgcG9zaXRpdmUgcmFuZ2UgdG8gYmUgYWRkZWQgdG8gYHNlbGVjdGVkYCwgYW5kXG4gICAgICAvLyBub3QgYWxyZWFkeSBpbiB0aGUgc2VsZWN0ZWQgYXJyYXksIGFkZCBpdFxuICAgICAgaWYgKGkgPj0gcmFuZ2Uuc3RhcnQgJiYgaSA8PSByYW5nZS5lbmQpIHtcbiAgICAgICAgc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { getterForProp } from './column-prop-getters';
|
|
2
|
+
import { SortType } from '../types/sort.type';
|
|
3
|
+
import { SortDirection } from '../types/sort-direction.type';
|
|
4
|
+
/**
|
|
5
|
+
* Gets the next sort direction
|
|
6
|
+
*/
|
|
7
|
+
export function nextSortDir(sortType, current) {
|
|
8
|
+
if (sortType === SortType.single) {
|
|
9
|
+
if (current === SortDirection.asc) {
|
|
10
|
+
return SortDirection.desc;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return SortDirection.asc;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
if (!current) {
|
|
18
|
+
return SortDirection.asc;
|
|
19
|
+
}
|
|
20
|
+
else if (current === SortDirection.asc) {
|
|
21
|
+
return SortDirection.desc;
|
|
22
|
+
}
|
|
23
|
+
else if (current === SortDirection.desc) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
// avoid TS7030: Not all code paths return a value.
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Adapted from fueld-ui on 6/216
|
|
32
|
+
* https://github.com/FuelInteractive/fuel-ui/tree/master/src/pipes/OrderBy
|
|
33
|
+
*/
|
|
34
|
+
export function orderByComparator(a, b) {
|
|
35
|
+
if (a === null || typeof a === 'undefined')
|
|
36
|
+
a = 0;
|
|
37
|
+
if (b === null || typeof b === 'undefined')
|
|
38
|
+
b = 0;
|
|
39
|
+
if (a instanceof Date && b instanceof Date) {
|
|
40
|
+
if (a < b)
|
|
41
|
+
return -1;
|
|
42
|
+
if (a > b)
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
else if (isNaN(parseFloat(a)) || !isFinite(a) || isNaN(parseFloat(b)) || !isFinite(b)) {
|
|
46
|
+
// Convert to string in case of a=0 or b=0
|
|
47
|
+
a = String(a);
|
|
48
|
+
b = String(b);
|
|
49
|
+
// Isn't a number so lowercase the string to properly compare
|
|
50
|
+
if (a.toLowerCase() < b.toLowerCase())
|
|
51
|
+
return -1;
|
|
52
|
+
if (a.toLowerCase() > b.toLowerCase())
|
|
53
|
+
return 1;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Parse strings as numbers to compare properly
|
|
57
|
+
if (parseFloat(a) < parseFloat(b))
|
|
58
|
+
return -1;
|
|
59
|
+
if (parseFloat(a) > parseFloat(b))
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
// equal each other
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* creates a shallow copy of the `rows` input and returns the sorted copy. this function
|
|
67
|
+
* does not sort the `rows` argument in place
|
|
68
|
+
*/
|
|
69
|
+
export function sortRows(rows, columns, dirs) {
|
|
70
|
+
if (!rows)
|
|
71
|
+
return [];
|
|
72
|
+
if (!dirs || !dirs.length || !columns)
|
|
73
|
+
return [...rows];
|
|
74
|
+
/**
|
|
75
|
+
* record the row ordering of results from prior sort operations (if applicable)
|
|
76
|
+
* this is necessary to guarantee stable sorting behavior
|
|
77
|
+
*/
|
|
78
|
+
const rowToIndexMap = new Map();
|
|
79
|
+
rows.forEach((row, index) => rowToIndexMap.set(row, index));
|
|
80
|
+
const temp = [...rows];
|
|
81
|
+
const cols = columns.reduce((obj, col) => {
|
|
82
|
+
if (col.comparator && typeof col.comparator === 'function') {
|
|
83
|
+
obj[col.prop] = col.comparator;
|
|
84
|
+
}
|
|
85
|
+
return obj;
|
|
86
|
+
}, {});
|
|
87
|
+
// cache valueGetter and compareFn so that they
|
|
88
|
+
// do not need to be looked-up in the sort function body
|
|
89
|
+
const cachedDirs = dirs.map(dir => {
|
|
90
|
+
const prop = dir.prop;
|
|
91
|
+
return {
|
|
92
|
+
prop,
|
|
93
|
+
dir: dir.dir,
|
|
94
|
+
valueGetter: getterForProp(prop),
|
|
95
|
+
compareFn: cols[prop] || orderByComparator
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
return temp.sort(function (rowA, rowB) {
|
|
99
|
+
for (const cachedDir of cachedDirs) {
|
|
100
|
+
// Get property and valuegetters for column to be sorted
|
|
101
|
+
const { prop, valueGetter } = cachedDir;
|
|
102
|
+
// Get A and B cell values from rows based on properties of the columns
|
|
103
|
+
const propA = valueGetter(rowA, prop);
|
|
104
|
+
const propB = valueGetter(rowB, prop);
|
|
105
|
+
// Compare function gets five parameters:
|
|
106
|
+
// Two cell values to be compared as propA and propB
|
|
107
|
+
// Two rows corresponding to the cells as rowA and rowB
|
|
108
|
+
// Direction of the sort for this column as SortDirection
|
|
109
|
+
// Compare can be a standard JS comparison function (a,b) => -1|0|1
|
|
110
|
+
// as additional parameters are silently ignored. The whole row and sort
|
|
111
|
+
// direction enable more complex sort logic.
|
|
112
|
+
const comparison = cachedDir.dir !== SortDirection.desc
|
|
113
|
+
? cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir)
|
|
114
|
+
: -cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir);
|
|
115
|
+
// Don't return 0 yet in case of needing to sort by next property
|
|
116
|
+
if (comparison !== 0)
|
|
117
|
+
return comparison;
|
|
118
|
+
}
|
|
119
|
+
if (!(rowToIndexMap.has(rowA) && rowToIndexMap.has(rowB)))
|
|
120
|
+
return 0;
|
|
121
|
+
/**
|
|
122
|
+
* all else being equal, preserve original order of the rows (stable sort)
|
|
123
|
+
*/
|
|
124
|
+
return rowToIndexMap.get(rowA) < rowToIndexMap.get(rowB) ? -1 : 1;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi91dGlscy9zb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxRQUFrQixFQUFFLE9BQXNCO0lBQ3BFLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDaEMsSUFBSSxPQUFPLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7U0FDM0I7YUFBTTtZQUNMLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQztTQUMxQjtLQUNGO1NBQU07UUFDTCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDO1NBQzFCO2FBQU0sSUFBSSxPQUFPLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7U0FDM0I7YUFBTSxJQUFJLE9BQU8sS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQ3pDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsbURBQW1EO1FBQ25ELE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxDQUFNLEVBQUUsQ0FBTTtJQUM5QyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssV0FBVztRQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFB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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXR0ZXJGb3JQcm9wIH0gZnJvbSAnLi9jb2x1bW4tcHJvcC1nZXR0ZXJzJztcbmltcG9ydCB7IFNvcnRUeXBlIH0gZnJvbSAnLi4vdHlwZXMvc29ydC50eXBlJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi90eXBlcy9zb3J0LWRpcmVjdGlvbi50eXBlJztcbmltcG9ydCB7IFNvcnRQcm9wRGlyIH0gZnJvbSAnLi4vdHlwZXMvc29ydC1wcm9wLWRpci50eXBlJztcbi8qKlxuICogR2V0cyB0aGUgbmV4dCBzb3J0IGRpcmVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dFNvcnREaXIoc29ydFR5cGU6IFNvcnRUeXBlLCBjdXJyZW50OiBTb3J0RGlyZWN0aW9uKTogU29ydERpcmVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChzb3J0VHlwZSA9PT0gU29ydFR5cGUuc2luZ2xlKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IFNvcnREaXJlY3Rpb24uYXNjKSB7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5kZXNjO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5hc2M7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uYXNjO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PT0gU29ydERpcmVjdGlvbi5hc2MpIHtcbiAgICAgIHJldHVybiBTb3J0RGlyZWN0aW9uLmRlc2M7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBTb3J0RGlyZWN0aW9uLmRlc2MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGF2b2lkIFRTNzAzMDogTm90IGFsbCBjb2RlIHBhdGhzIHJldHVybiBhIHZhbHVlLlxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBZGFwdGVkIGZyb20gZnVlbGQtdWkgb24gNi8yMTZcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9GdWVsSW50ZXJhY3RpdmUvZnVlbC11aS90cmVlL21hc3Rlci9zcmMvcGlwZXMvT3JkZXJCeVxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJCeUNvbXBhcmF0b3IoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSA9PT0gJ3VuZGVmaW5lZCcpIGEgPSAwO1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiA9PT0gJ3VuZGVmaW5lZCcpIGIgPSAwO1xuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKGlzTmFOKHBhcnNlRmxvYXQoYSkpIHx8ICFpc0Zpbml0ZShhKSB8fCBpc05hTihwYXJzZUZsb2F0KGIpKSB8fCAhaXNGaW5pdGUoYikpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHN0cmluZyBpbiBjYXNlIG9mIGE9MCBvciBiPTBcbiAgICBhID0gU3RyaW5nKGEpO1xuICAgIGIgPSBTdHJpbmcoYik7XG4gICAgLy8gSXNuJ3QgYSBudW1iZXIgc28gbG93ZXJjYXNlIHRoZSBzdHJpbmcgdG8gcHJvcGVybHkgY29tcGFyZVxuICAgIGlmIChhLnRvTG93ZXJDYXNlKCkgPCBiLnRvTG93ZXJDYXNlKCkpIHJldHVybiAtMTtcbiAgICBpZiAoYS50b0xvd2VyQ2FzZSgpID4gYi50b0xvd2VyQ2FzZSgpKSByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQYXJzZSBzdHJpbmdzIGFzIG51bWJlcnMgdG8gY29tcGFyZSBwcm9wZXJseVxuICAgIGlmIChwYXJzZUZsb2F0KGEpIDwgcGFyc2VGbG9hdChiKSkgcmV0dXJuIC0xO1xuICAgIGlmIChwYXJzZUZsb2F0KGEpID4gcGFyc2VGbG9hdChiKSkgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBlcXVhbCBlYWNoIG90aGVyXG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGByb3dzYCBpbnB1dCBhbmQgcmV0dXJucyB0aGUgc29ydGVkIGNvcHkuIHRoaXMgZnVuY3Rpb25cbiAqIGRvZXMgbm90IHNvcnQgdGhlIGByb3dzYCBhcmd1bWVudCBpbiBwbGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFJvd3Mocm93czogYW55W10sIGNvbHVtbnM6IGFueVtdLCBkaXJzOiBTb3J0UHJvcERpcltdKTogYW55W10ge1xuICBpZiAoIXJvd3MpIHJldHVybiBbXTtcbiAgaWYgKCFkaXJzIHx8ICFkaXJzLmxlbmd0aCB8fCAhY29sdW1ucykgcmV0dXJuIFsuLi5yb3dzXTtcblxuICAvKipcbiAgICogcmVjb3JkIHRoZSByb3cgb3JkZXJpbmcgb2YgcmVzdWx0cyBmcm9tIHByaW9yIHNvcnQgb3BlcmF0aW9ucyAoaWYgYXBwbGljYWJsZSlcbiAgICogdGhpcyBpcyBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIHN0YWJsZSBzb3J0aW5nIGJlaGF2aW9yXG4gICAqL1xuICBjb25zdCByb3dUb0luZGV4TWFwID0gbmV3IE1hcDxhbnksIG51bWJlcj4oKTtcbiAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiByb3dUb0luZGV4TWFwLnNldChyb3csIGluZGV4KSk7XG5cbiAgY29uc3QgdGVtcCA9IFsuLi5yb3dzXTtcbiAgY29uc3QgY29scyA9IGNvbHVtbnMucmVkdWNlKChvYmosIGNvbCkgPT4ge1xuICAgIGlmIChjb2wuY29tcGFyYXRvciAmJiB0eXBlb2YgY29sLmNvbXBhcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9ialtjb2wucHJvcF0gPSBjb2wuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xuXG4gIC8vIGNhY2hlIHZhbHVlR2V0dGVyIGFuZCBjb21wYXJlRm4gc28gdGhhdCB0aGV5XG4gIC8vIGRvIG5vdCBuZWVkIHRvIGJlIGxvb2tlZC11cCBpbiB0aGUgc29ydCBmdW5jdGlvbiBib2R5XG4gIGNvbnN0IGNhY2hlZERpcnMgPSBkaXJzLm1hcChkaXIgPT4ge1xuICAgIGNvbnN0IHByb3AgPSBkaXIucHJvcDtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcCxcbiAgICAgIGRpcjogZGlyLmRpcixcbiAgICAgIHZhbHVlR2V0dGVyOiBnZXR0ZXJGb3JQcm9wKHByb3ApLFxuICAgICAgY29tcGFyZUZuOiBjb2xzW3Byb3BdIHx8IG9yZGVyQnlDb21wYXJhdG9yXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlbXAuc29ydChmdW5jdGlvbiAocm93QTogYW55LCByb3dCOiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IGNhY2hlZERpciBvZiBjYWNoZWREaXJzKSB7XG4gICAgICAvLyBHZXQgcHJvcGVydHkgYW5kIHZhbHVlZ2V0dGVycyBmb3IgY29sdW1uIHRvIGJlIHNvcnRlZFxuICAgICAgY29uc3QgeyBwcm9wLCB2YWx1ZUdldHRlciB9ID0gY2FjaGVkRGlyO1xuICAgICAgLy8gR2V0IEEgYW5kIEIgY2VsbCB2YWx1ZXMgZnJvbSByb3dzIGJhc2VkIG9uIHByb3BlcnRpZXMgb2YgdGhlIGNvbHVtbnNcbiAgICAgIGNvbnN0IHByb3BBID0gdmFsdWVHZXR0ZXIocm93QSwgcHJvcCk7XG4gICAgICBjb25zdCBwcm9wQiA9IHZhbHVlR2V0dGVyKHJvd0IsIHByb3ApO1xuXG4gICAgICAvLyBDb21wYXJlIGZ1bmN0aW9uIGdldHMgZml2ZSBwYXJhbWV0ZXJzOlxuICAgICAgLy8gVHdvIGNlbGwgdmFsdWVzIHRvIGJlIGNvbXBhcmVkIGFzIHByb3BBIGFuZCBwcm9wQlxuICAgICAgLy8gVHdvIHJvd3MgY29ycmVzcG9uZGluZyB0byB0aGUgY2VsbHMgYXMgcm93QSBhbmQgcm93QlxuICAgICAgLy8gRGlyZWN0aW9uIG9mIHRoZSBzb3J0IGZvciB0aGlzIGNvbHVtbiBhcyBTb3J0RGlyZWN0aW9uXG4gICAgICAvLyBDb21wYXJlIGNhbiBiZSBhIHN0YW5kYXJkIEpTIGNvbXBhcmlzb24gZnVuY3Rpb24gKGEsYikgPT4gLTF8MHwxXG4gICAgICAvLyBhcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIHNpbGVudGx5IGlnbm9yZWQuIFRoZSB3aG9sZSByb3cgYW5kIHNvcnRcbiAgICAgIC8vIGRpcmVjdGlvbiBlbmFibGUgbW9yZSBjb21wbGV4IHNvcnQgbG9naWMuXG4gICAgICBjb25zdCBjb21wYXJpc29uID1cbiAgICAgICAgY2FjaGVkRGlyLmRpciAhPT0gU29ydERpcmVjdGlvbi5kZXNjXG4gICAgICAgICAgPyBjYWNoZWREaXIuY29tcGFyZUZuKHByb3BBLCBwcm9wQiwgcm93QSwgcm93QiwgY2FjaGVkRGlyLmRpcilcbiAgICAgICAgICA6IC1jYWNoZWREaXIuY29tcGFyZUZuKHByb3BBLCBwcm9wQiwgcm93QSwgcm93QiwgY2FjaGVkRGlyLmRpcik7XG5cbiAgICAgIC8vIERvbid0IHJldHVybiAwIHlldCBpbiBjYXNlIG9mIG5lZWRpbmcgdG8gc29ydCBieSBuZXh0IHByb3BlcnR5XG4gICAgICBpZiAoY29tcGFyaXNvbiAhPT0gMCkgcmV0dXJuIGNvbXBhcmlzb247XG4gICAgfVxuXG4gICAgaWYgKCEocm93VG9JbmRleE1hcC5oYXMocm93QSkgJiYgcm93VG9JbmRleE1hcC5oYXMocm93QikpKSByZXR1cm4gMDtcblxuICAgIC8qKlxuICAgICAqIGFsbCBlbHNlIGJlaW5nIGVxdWFsLCBwcmVzZXJ2ZSBvcmlnaW5hbCBvcmRlciBvZiB0aGUgcm93cyAoc3RhYmxlIHNvcnQpXG4gICAgICovXG4gICAgcmV0dXJuIHJvd1RvSW5kZXhNYXAuZ2V0KHJvd0EpIDwgcm93VG9JbmRleE1hcC5nZXQocm93QikgPyAtMSA6IDE7XG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Throttle a function
|
|
3
|
+
*/
|
|
4
|
+
export function throttle(func, wait, options) {
|
|
5
|
+
options = options || {};
|
|
6
|
+
let context;
|
|
7
|
+
let args;
|
|
8
|
+
let result;
|
|
9
|
+
let timeout = null;
|
|
10
|
+
let previous = 0;
|
|
11
|
+
function later() {
|
|
12
|
+
previous = options.leading === false ? 0 : +new Date();
|
|
13
|
+
timeout = null;
|
|
14
|
+
result = func.apply(context, args);
|
|
15
|
+
}
|
|
16
|
+
return function () {
|
|
17
|
+
const now = +new Date();
|
|
18
|
+
if (!previous && options.leading === false) {
|
|
19
|
+
previous = now;
|
|
20
|
+
}
|
|
21
|
+
const remaining = wait - (now - previous);
|
|
22
|
+
context = this;
|
|
23
|
+
args = arguments;
|
|
24
|
+
if (remaining <= 0) {
|
|
25
|
+
clearTimeout(timeout);
|
|
26
|
+
timeout = null;
|
|
27
|
+
previous = now;
|
|
28
|
+
result = func.apply(context, args);
|
|
29
|
+
}
|
|
30
|
+
else if (!timeout && options.trailing !== false) {
|
|
31
|
+
timeout = setTimeout(later, remaining);
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Throttle decorator
|
|
38
|
+
*
|
|
39
|
+
* class MyClass {
|
|
40
|
+
* throttleable(10)
|
|
41
|
+
* myFn() { ... }
|
|
42
|
+
* }
|
|
43
|
+
*/
|
|
44
|
+
export function throttleable(duration, options) {
|
|
45
|
+
return function innerDecorator(target, key, descriptor) {
|
|
46
|
+
return {
|
|
47
|
+
configurable: true,
|
|
48
|
+
enumerable: descriptor.enumerable,
|
|
49
|
+
get: function getter() {
|
|
50
|
+
Object.defineProperty(this, key, {
|
|
51
|
+
configurable: true,
|
|
52
|
+
enumerable: descriptor.enumerable,
|
|
53
|
+
value: throttle(descriptor.value, duration, options)
|
|
54
|
+
});
|
|
55
|
+
return this[key];
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3R0bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zd2ltbGFuZS9uZ3gtZGF0YXRhYmxlL3NyYy9saWIvdXRpbHMvdGhyb3R0bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQVMsRUFBRSxJQUFZLEVBQUUsT0FBYTtJQUM3RCxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUN4QixJQUFJLE9BQVksQ0FBQztJQUNqQixJQUFJLElBQVMsQ0FBQztJQUNkLElBQUksTUFBVyxDQUFDO0lBQ2hCLElBQUksT0FBTyxHQUFRLElBQUksQ0FBQztJQUN4QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFakIsU0FBUyxLQUFLO1FBQ1osUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDMUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztTQUNoQjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUVqQixJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtZQUNqRCxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN4QztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQWE7SUFDMUQsT0FBTyxTQUFTLGNBQWMsQ0FBQyxNQUFXLEVBQUUsR0FBZ0IsRUFBRSxVQUE4QjtRQUMxRixPQUFPO1lBQ0wsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO1lBQ2pDLEdBQUcsRUFBRSxTQUFTLE1BQU07Z0JBQ2xCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDL0IsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtvQkFDakMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7aUJBQ3JELENBQUMsQ0FBQztnQkFFSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRocm90dGxlIGEgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlKGZ1bmM6IGFueSwgd2FpdDogbnVtYmVyLCBvcHRpb25zPzogYW55KSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsZXQgY29udGV4dDogYW55O1xuICBsZXQgYXJnczogYW55O1xuICBsZXQgcmVzdWx0OiBhbnk7XG4gIGxldCB0aW1lb3V0OiBhbnkgPSBudWxsO1xuICBsZXQgcHJldmlvdXMgPSAwO1xuXG4gIGZ1bmN0aW9uIGxhdGVyKCkge1xuICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiArbmV3IERhdGUoKTtcbiAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBhbnkpIHtcbiAgICBjb25zdCBub3cgPSArbmV3IERhdGUoKTtcblxuICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkge1xuICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgY29udGV4dCA9IHRoaXM7XG4gICAgYXJncyA9IGFyZ3VtZW50cztcblxuICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqXG4gKiAgY2xhc3MgTXlDbGFzcyB7XG4gKiAgICB0aHJvdHRsZWFibGUoMTApXG4gKiAgICBteUZuKCkgeyAuLi4gfVxuICogIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlYWJsZShkdXJhdGlvbjogbnVtYmVyLCBvcHRpb25zPzogYW55KSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbm5lckRlY29yYXRvcih0YXJnZXQ6IGFueSwga2V5OiBQcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0dGVyKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgICAgICB2YWx1ZTogdGhyb3R0bGUoZGVzY3JpcHRvci52YWx1ZSwgZHVyYXRpb24sIG9wdGlvbnMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
|