@eclipse-scout/core 22.0.0-beta.10 → 22.0.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/dist/eclipse-scout-core-theme-dark.css +81 -62
- package/dist/eclipse-scout-core-theme-dark.css.map +1 -1
- package/dist/eclipse-scout-core-theme.css +33 -14
- package/dist/eclipse-scout-core-theme.css.map +1 -1
- package/dist/eclipse-scout-core.js +109 -116
- package/dist/eclipse-scout-core.js.map +1 -1
- package/package.json +2 -2
- package/src/App.js +1 -1
- package/src/box/Box.less +2 -2
- package/src/breadcrumbbar/BreadcrumbBarLayout.js +2 -2
- package/src/desktop/desktoptab/DesktopTabAreaLayout.js +1 -1
- package/src/desktop/viewbutton/ViewButton.less +5 -0
- package/src/login/LoginBox.less +9 -7
- package/src/messagebox/MessageBox.less +3 -3
- package/src/style/colors-dark.less +8 -1
- package/src/style/colors.less +6 -0
- package/src/style/mixins.less +5 -2
- package/src/table/Table.js +1 -1
- package/src/table/columns/ColumnOptimalWidthMeasurer.js +1 -1
- package/src/tagbar/TagBarOverflowPopupLayout.js +1 -1
- package/src/tile/fields/button/ButtonTile.js +1 -1
- package/src/tree/LazyNodeFilter.js +5 -4
- package/src/tree/Tree.js +53 -62
- package/src/util/dragAndDrop.js +5 -4
- package/src/util/events.js +1 -1
- package/src/widget/FilterSupport.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-scout/core",
|
|
3
|
-
"version": "22.0.
|
|
3
|
+
"version": "22.0.1",
|
|
4
4
|
"description": "Eclipse Scout runtime",
|
|
5
5
|
"author": "BSI Business Systems Integration AG",
|
|
6
6
|
"homepage": "https://www.eclipse.org/scout",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"src"
|
|
27
27
|
],
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@eclipse-scout/cli": "22.0.
|
|
29
|
+
"@eclipse-scout/cli": "22.0.1",
|
|
30
30
|
"@eclipse-scout/releng": "^22.0.0",
|
|
31
31
|
"jasmine-core": "3.10.1",
|
|
32
32
|
"jasmine-ajax": "4.0.0",
|
package/src/App.js
CHANGED
|
@@ -291,7 +291,7 @@ export default class App {
|
|
|
291
291
|
$loadingRoot.css('opacity', $loadingRoot.css('opacity'));
|
|
292
292
|
// Add animation listener before adding the classes to ensure the listener will always be triggered even while debugging
|
|
293
293
|
$loadingRoot.oneAnimationEnd(() => $loadingRoot.remove());
|
|
294
|
-
if ($loadingRoot.css('opacity')
|
|
294
|
+
if ($loadingRoot.css('opacity') === '1') {
|
|
295
295
|
$loadingRoot.addClass('fadeout and-more');
|
|
296
296
|
} else {
|
|
297
297
|
$loadingRoot.addClass('fadeout');
|
package/src/box/Box.less
CHANGED
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
.box-content {
|
|
29
|
-
border:
|
|
29
|
+
border: @popup-border-width solid @popup-border-color;
|
|
30
30
|
border-radius: @border-radius-large;
|
|
31
|
-
background-color: @background-color;
|
|
31
|
+
background-color: @popup-background-color;
|
|
32
32
|
max-width: @box-width;
|
|
33
33
|
margin: 0 auto;
|
|
34
34
|
padding: 45px 95px 50px 95px;
|
|
@@ -44,7 +44,7 @@ export default class BreadcrumbBarLayout extends AbstractLayout {
|
|
|
44
44
|
this._collapse(breadcrumbItems, containerSize);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
_collapse
|
|
47
|
+
_collapse($container, containerSize) {
|
|
48
48
|
let currentIndex = 1;
|
|
49
49
|
const visibleBreadcrumbItems = this._visibleBreadcrumbItems();
|
|
50
50
|
let prefSize = this._actualPrefSize(visibleBreadcrumbItems, true);
|
|
@@ -116,7 +116,7 @@ export default class BreadcrumbBarLayout extends AbstractLayout {
|
|
|
116
116
|
/**
|
|
117
117
|
* @return {number} the preferred width of all breadcrumbItems (plus ellipsis breadcrumb)
|
|
118
118
|
*/
|
|
119
|
-
_breadcrumbItemsWidth
|
|
119
|
+
_breadcrumbItemsWidth(breadcrumbItems, considerEllipsis) {
|
|
120
120
|
let breadcrumbsWidth = 0;
|
|
121
121
|
breadcrumbItems = breadcrumbItems || this._visibleBreadcrumbItems();
|
|
122
122
|
breadcrumbItems.forEach(breadcrumbItem => {
|
|
@@ -35,6 +35,11 @@
|
|
|
35
35
|
border-radius: @view-tab-selected-border-radius;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
& > .edge {
|
|
39
|
+
// Ensure GlassPane.js does not set position: relative if glass pane is added before view tab is selected
|
|
40
|
+
position: absolute;
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
&.selected:not(.in-background) {
|
|
39
44
|
margin: @view-tab-selected-margin-top 0 0;
|
|
40
45
|
border-radius: @view-tab-selected-border-radius @view-tab-selected-border-radius 0 0;
|
package/src/login/LoginBox.less
CHANGED
|
@@ -53,18 +53,20 @@
|
|
|
53
53
|
*/
|
|
54
54
|
.login-button.default {
|
|
55
55
|
|
|
56
|
-
&.login-error {
|
|
57
|
-
border-color:
|
|
58
|
-
background-color: @
|
|
56
|
+
&.login-error:not(.disabled) {
|
|
57
|
+
border-color: transparent;
|
|
58
|
+
background-color: @error-color;
|
|
59
59
|
|
|
60
60
|
&:hover {
|
|
61
|
-
background-color: @
|
|
62
|
-
border-color: @palette-red-4;
|
|
61
|
+
background-color: @error-default-button-background-hover-color;
|
|
63
62
|
}
|
|
64
63
|
|
|
65
64
|
&:active {
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
background-color: @error-default-button-background-active-color;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
&:focus {
|
|
69
|
+
#scout.focus-border(@box-shadow-color: @error-focus-box-shadow-color, @border-color: mix(@error-color, @error-focus-box-shadow-color, 25%));
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
72
|
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
.severity-button(@error-color, @
|
|
91
|
+
.severity-button(@error-color, @error-default-button-background-hover-color, @error-default-button-background-active-color, @error-focus-box-shadow-color);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
&.warning {
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
.severity-button(@warning-color, @
|
|
103
|
+
.severity-button(@warning-color, @warning-default-button-background-hover-color, @warning-default-button-background-active-color, @warning-focus-box-shadow-color);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
&.ok {
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
.severity-button(@ok-color, @
|
|
115
|
+
.severity-button(@ok-color, @ok-default-button-background-hover-color, @ok-default-button-background-active-color, @ok-focus-box-shadow-color);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
&.animate-open {
|
|
@@ -75,8 +75,14 @@
|
|
|
75
75
|
@warning-color: @palette-orange-2;
|
|
76
76
|
@ok-color: @palette-green-2;
|
|
77
77
|
@error-background-color: @background-color;
|
|
78
|
+
@error-default-button-background-hover-color: lighten(@error-color, 6%);
|
|
79
|
+
@error-default-button-background-active-color: lighten(@error-color, 10%);
|
|
78
80
|
@error-focus-box-shadow-color: mix(@error-color, @palette-black, 50%);
|
|
81
|
+
@warning-default-button-background-hover-color: lighten(@warning-color, 8%);
|
|
82
|
+
@warning-default-button-background-active-color: lighten(@warning-color, 12%);
|
|
79
83
|
@warning-focus-box-shadow-color: mix(@warning-color, @palette-black, 50%);
|
|
84
|
+
@ok-default-button-background-hover-color: lighten(@ok-color, 8%);
|
|
85
|
+
@ok-default-button-background-active-color: lighten(@ok-color, 14%);
|
|
80
86
|
@ok-focus-box-shadow-color: mix(@ok-color, @palette-black, 50%);
|
|
81
87
|
@focus-border-color: @focus-color;
|
|
82
88
|
@focus-box-shadow-color: darken(@focus-color, 30%);
|
|
@@ -102,7 +108,8 @@
|
|
|
102
108
|
@popup-2-background-color: @palette-gray-6;
|
|
103
109
|
@popup-2-backdrop-background-color: fade(@popup-2-background-color, 80%);
|
|
104
110
|
@popup-2-backdrop-filter: blur(15px);
|
|
105
|
-
@selected-hover-background-color:
|
|
111
|
+
@selected-hover-background-color: lighten(@selected-background-color, 8%);
|
|
112
|
+
@selected-active-background-color: lighten(@selected-background-color, 12%);
|
|
106
113
|
@selected-disabled-background-color: @palette-gray-5;
|
|
107
114
|
@text-color: @palette-gray-2;
|
|
108
115
|
@text-color-1: @palette-gray-3;
|
package/src/style/colors.less
CHANGED
|
@@ -101,8 +101,14 @@
|
|
|
101
101
|
@ok-color: @palette-green-5;
|
|
102
102
|
@error-background-color: @palette-red-0;
|
|
103
103
|
@error-border-color: @error-color;
|
|
104
|
+
@error-default-button-background-hover-color: darken(@error-color, 6%);
|
|
105
|
+
@error-default-button-background-active-color: darken(@error-color, 13%);
|
|
104
106
|
@error-focus-box-shadow-color: fade(@error-color, 40%);
|
|
107
|
+
@warning-default-button-background-hover-color: darken(@warning-color, 6%);
|
|
108
|
+
@warning-default-button-background-active-color: darken(@warning-color, 13%);
|
|
105
109
|
@warning-focus-box-shadow-color: fade(@warning-color, 40%);
|
|
110
|
+
@ok-default-button-background-hover-color: darken(@ok-color, 6%);
|
|
111
|
+
@ok-default-button-background-active-color: darken(@ok-color, 13%);
|
|
106
112
|
@ok-focus-box-shadow-color: fade(@ok-color, 40%);
|
|
107
113
|
@focus-border-color: @accent-color-3;
|
|
108
114
|
@focus-box-shadow-color: darken(@accent-color-1, 10%);
|
package/src/style/mixins.less
CHANGED
|
@@ -213,8 +213,7 @@
|
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
.tooltip-status
|
|
217
|
-
.info-status {
|
|
216
|
+
.tooltip-status {
|
|
218
217
|
visibility: visible;
|
|
219
218
|
cursor: pointer;
|
|
220
219
|
|
|
@@ -236,6 +235,10 @@
|
|
|
236
235
|
}
|
|
237
236
|
}
|
|
238
237
|
|
|
238
|
+
.info-status {
|
|
239
|
+
#scout.tooltip-status();
|
|
240
|
+
}
|
|
241
|
+
|
|
239
242
|
.ok-status {
|
|
240
243
|
visibility: visible;
|
|
241
244
|
cursor: pointer;
|
package/src/table/Table.js
CHANGED
|
@@ -848,7 +848,7 @@ export default class Table extends Widget {
|
|
|
848
848
|
_isAggregatedTooltip($cell) {
|
|
849
849
|
let $row = $cell.parent();
|
|
850
850
|
return $row.data('aggregateRow') /* row in the table */
|
|
851
|
-
|| $row.hasClass('table-aggregate') /* aggregate table control
|
|
851
|
+
|| $row.hasClass('table-aggregate'); /* aggregate table control */
|
|
852
852
|
}
|
|
853
853
|
|
|
854
854
|
reload(reloadReason) {
|
|
@@ -178,7 +178,7 @@ export default class ColumnOptimalWidthMeasurer {
|
|
|
178
178
|
return 0;
|
|
179
179
|
}
|
|
180
180
|
let $neighbour = cellRange[cellRange.length - 1];
|
|
181
|
-
if ($neighbour.hasClass('empty') || $cell.hasClass('halign-right')
|
|
181
|
+
if ($neighbour.hasClass('empty') || $cell.hasClass('halign-right') === $neighbour.hasClass('halign-right')) {
|
|
182
182
|
return 0;
|
|
183
183
|
}
|
|
184
184
|
let $neighbourText = $neighbour.children('.text');
|
|
@@ -18,10 +18,11 @@ export default class LazyNodeFilter {
|
|
|
18
18
|
accept(node) {
|
|
19
19
|
if (node.expanded) {
|
|
20
20
|
return true;
|
|
21
|
-
} else {
|
|
22
|
-
// not expanded: remove lazy expand marker (forget lazy expanded children)
|
|
23
|
-
node.childNodes.forEach(child => delete child._lazyNodeFilterAccepted);
|
|
24
21
|
}
|
|
22
|
+
// not expanded: remove lazy expand marker (forget lazy expanded children)
|
|
23
|
+
node.childNodes.forEach(child => {
|
|
24
|
+
child._lazyNodeFilterAccepted = false;
|
|
25
|
+
});
|
|
25
26
|
|
|
26
27
|
if (!node.parentNode || !node.parentNode.expandedLazy || !node.parentNode.lazyExpandingEnabled || !this.tree.lazyExpandingEnabled) {
|
|
27
28
|
// no lazy expanding supported
|
|
@@ -34,7 +35,7 @@ export default class LazyNodeFilter {
|
|
|
34
35
|
if (typeof selectedNode === 'string') {
|
|
35
36
|
break;
|
|
36
37
|
}
|
|
37
|
-
if (selectedNode
|
|
38
|
+
if (selectedNode === node) {
|
|
38
39
|
node._lazyNodeFilterAccepted = true;
|
|
39
40
|
return true;
|
|
40
41
|
}
|
package/src/tree/Tree.js
CHANGED
|
@@ -128,10 +128,8 @@ export default class Tree extends Widget {
|
|
|
128
128
|
this.initialTraversing = true;
|
|
129
129
|
this._setCheckable(this.checkable);
|
|
130
130
|
this._ensureTreeNodes(this.nodes);
|
|
131
|
-
this.
|
|
132
|
-
this.visitNodes(this._updateFlatListAndSelectionPath.bind(this));
|
|
131
|
+
this._initNodes(this.nodes);
|
|
133
132
|
this.initialTraversing = false;
|
|
134
|
-
this.selectedNodes = this._nodesByIds(this.selectedNodes);
|
|
135
133
|
this.menuBar = scout.create('MenuBar', {
|
|
136
134
|
parent: this,
|
|
137
135
|
position: MenuBar.Position.BOTTOM,
|
|
@@ -145,6 +143,22 @@ export default class Tree extends Widget {
|
|
|
145
143
|
this._setMenus(this.menus);
|
|
146
144
|
}
|
|
147
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Initialize nodes, applies filters and updates flat list
|
|
148
|
+
*/
|
|
149
|
+
_initNodes(nodes, parentNode) {
|
|
150
|
+
if (!nodes) {
|
|
151
|
+
nodes = this.nodes;
|
|
152
|
+
}
|
|
153
|
+
Tree.visitNodes(this._initTreeNode.bind(this), nodes, parentNode);
|
|
154
|
+
if (typeof this.selectedNodes[0] === 'string') {
|
|
155
|
+
this.selectedNodes = this._nodesByIds(this.selectedNodes);
|
|
156
|
+
}
|
|
157
|
+
this._updateSelectionPath();
|
|
158
|
+
nodes.forEach(node => this.applyFiltersForNode(node));
|
|
159
|
+
Tree.visitNodes((node, parentNode) => this._addToVisibleFlatList(node, false), nodes, parentNode);
|
|
160
|
+
}
|
|
161
|
+
|
|
148
162
|
/**
|
|
149
163
|
* Iterates through the given array and converts node-models to instances of TreeNode (or a subclass).
|
|
150
164
|
* If the array element is already a TreeNode the function leaves the element untouched. This function also
|
|
@@ -226,44 +240,25 @@ export default class Tree extends Widget {
|
|
|
226
240
|
}
|
|
227
241
|
|
|
228
242
|
isSelectedNode(node) {
|
|
229
|
-
if (this.initialTraversing) {
|
|
230
|
-
return this.selectedNodes.indexOf(node.id) > -1;
|
|
231
|
-
}
|
|
232
243
|
return this.selectedNodes.indexOf(node) > -1;
|
|
233
244
|
}
|
|
234
245
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
if (
|
|
238
|
-
|
|
239
|
-
while (p) {
|
|
240
|
-
this._inSelectionPathList[p.id] = true;
|
|
241
|
-
p.filterDirty = true;
|
|
242
|
-
|
|
243
|
-
if (p !== node) {
|
|
244
|
-
// ensure node is expanded
|
|
245
|
-
node.expanded = true;
|
|
246
|
-
// if parent was filtered before, try refilter after adding to selection path.
|
|
247
|
-
if (p.level === 0) {
|
|
248
|
-
this.applyFiltersForNode(p);
|
|
249
|
-
|
|
250
|
-
// add visible nodes to visible nodes array when they are initialized
|
|
251
|
-
this._addToVisibleFlatList(p, false);
|
|
252
|
-
|
|
253
|
-
// process children
|
|
254
|
-
this._addChildrenToFlatList(p, this.visibleNodesFlat.length - 1, false, null, true);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
p = p.parentNode;
|
|
258
|
-
}
|
|
259
|
-
} else if (node.parentNode && this.isSelectedNode(node.parentNode)) {
|
|
260
|
-
this._inSelectionPathList[node.id] = true;
|
|
246
|
+
_updateSelectionPath() {
|
|
247
|
+
let selectedNode = this.selectedNodes[0];
|
|
248
|
+
if (!selectedNode) {
|
|
249
|
+
return;
|
|
261
250
|
}
|
|
251
|
+
this._inSelectionPathList[selectedNode.id] = true;
|
|
262
252
|
|
|
263
|
-
|
|
253
|
+
selectedNode.childNodes.forEach(child => {
|
|
254
|
+
this._inSelectionPathList[child.id] = true;
|
|
255
|
+
});
|
|
264
256
|
|
|
265
|
-
|
|
266
|
-
|
|
257
|
+
let parentNode = selectedNode.parentNode;
|
|
258
|
+
while (parentNode) {
|
|
259
|
+
this._inSelectionPathList[parentNode.id] = true;
|
|
260
|
+
parentNode = parentNode.parentNode;
|
|
261
|
+
}
|
|
267
262
|
}
|
|
268
263
|
|
|
269
264
|
_initTreeNode(node, parentNode) {
|
|
@@ -1432,9 +1427,7 @@ export default class Tree extends Widget {
|
|
|
1432
1427
|
this._removeFromFlatList(node, false);
|
|
1433
1428
|
}
|
|
1434
1429
|
} else if (renderExpansionOpts.expandLazyChanged) {
|
|
1435
|
-
|
|
1436
|
-
this.applyFiltersForNode(child, true, renderAnimated);
|
|
1437
|
-
});
|
|
1430
|
+
this.applyFiltersForNode(node, false, renderAnimated);
|
|
1438
1431
|
}
|
|
1439
1432
|
|
|
1440
1433
|
if (this.groupedNodes[node.id]) {
|
|
@@ -1648,7 +1641,8 @@ export default class Tree extends Widget {
|
|
|
1648
1641
|
let insertIndex, isAlreadyAdded = this.visibleNodesMap[node.id];
|
|
1649
1642
|
if (isAlreadyAdded) {
|
|
1650
1643
|
this.insertBatchInVisibleNodes(insertBatch, this._showNodes(insertBatch), animatedRendering);
|
|
1651
|
-
|
|
1644
|
+
// Animate rendering is always false because it would generate a bunch of animation wrappers which stay forever without really starting an animation...
|
|
1645
|
+
this.checkAndHandleBatchAnimationWrapper(parentNode, false, insertBatch);
|
|
1652
1646
|
insertBatch = this.newInsertBatch(insertBatch.nextBatchInsertIndex());
|
|
1653
1647
|
insertBatch = this._addChildrenToFlatListIfExpanded(1, node, insertIndex, animatedRendering, insertBatch, forceFilter);
|
|
1654
1648
|
} else {
|
|
@@ -2194,9 +2188,7 @@ export default class Tree extends Widget {
|
|
|
2194
2188
|
parentNode.childNodes.push(entry);
|
|
2195
2189
|
});
|
|
2196
2190
|
}
|
|
2197
|
-
|
|
2198
|
-
Tree.visitNodes(this._initTreeNode.bind(this), nodes, parentNode);
|
|
2199
|
-
Tree.visitNodes(this._updateFlatListAndSelectionPath.bind(this), nodes, parentNode);
|
|
2191
|
+
this._initNodes(nodes, parentNode);
|
|
2200
2192
|
if (this.groupedNodes[parentNode.id]) {
|
|
2201
2193
|
this._updateItemPath(false, parentNode);
|
|
2202
2194
|
}
|
|
@@ -2219,9 +2211,7 @@ export default class Tree extends Widget {
|
|
|
2219
2211
|
} else {
|
|
2220
2212
|
arrays.pushAll(this.nodes, nodes);
|
|
2221
2213
|
}
|
|
2222
|
-
|
|
2223
|
-
Tree.visitNodes(this._initTreeNode.bind(this), nodes, parentNode);
|
|
2224
|
-
Tree.visitNodes(this._updateFlatListAndSelectionPath.bind(this), nodes, parentNode);
|
|
2214
|
+
this._initNodes(nodes, parentNode);
|
|
2225
2215
|
}
|
|
2226
2216
|
if (this.rendered) {
|
|
2227
2217
|
this.viewRangeDirty = true;
|
|
@@ -2345,9 +2335,7 @@ export default class Tree extends Widget {
|
|
|
2345
2335
|
}, this);
|
|
2346
2336
|
|
|
2347
2337
|
// update child node indices
|
|
2348
|
-
parentNodesToReindex.forEach(
|
|
2349
|
-
this._updateChildNodeIndex(p.childNodes);
|
|
2350
|
-
}, this);
|
|
2338
|
+
parentNodesToReindex.forEach(p => this._updateChildNodeIndex(p.childNodes));
|
|
2351
2339
|
this._updateChildNodeIndex(topLevelNodesToReindex);
|
|
2352
2340
|
|
|
2353
2341
|
this.deselectNodes(deletedNodes, {collectChildren: true});
|
|
@@ -2761,7 +2749,6 @@ export default class Tree extends Widget {
|
|
|
2761
2749
|
}
|
|
2762
2750
|
result.newlyShown.forEach(node => this._addToVisibleFlatList(node, this.filterAnimated));
|
|
2763
2751
|
result.newlyHidden.forEach(node => this._removeFromFlatList(node, this.filterAnimated));
|
|
2764
|
-
this._nodesFiltered(result.newlyHidden);
|
|
2765
2752
|
this.filteredElementsDirty = false;
|
|
2766
2753
|
}
|
|
2767
2754
|
|
|
@@ -2771,7 +2758,7 @@ export default class Tree extends Widget {
|
|
|
2771
2758
|
// iterate from end to beginning (child nodes first) so that the state of the children has already been updated
|
|
2772
2759
|
for (let i = this.visibleNodesFlat.length - 1; i >= 0; i--) {
|
|
2773
2760
|
let node = this.visibleNodesFlat[i];
|
|
2774
|
-
let result = this._applyFiltersForNodeRec(node,
|
|
2761
|
+
let result = this._applyFiltersForNodeRec(node, true, animated);
|
|
2775
2762
|
if (result.newlyHidden.length) {
|
|
2776
2763
|
if (!node.isFilterAccepted()) {
|
|
2777
2764
|
newlyHidden.push(...result.newlyHidden);
|
|
@@ -2800,11 +2787,11 @@ export default class Tree extends Widget {
|
|
|
2800
2787
|
result.newlyShown.unshift(...parentResult.newlyShown);
|
|
2801
2788
|
parent = parent.parentNode;
|
|
2802
2789
|
}
|
|
2790
|
+
this._nodesFiltered(result.newlyHidden);
|
|
2803
2791
|
|
|
2804
2792
|
if (applyNewHiddenShownNodes) {
|
|
2805
2793
|
result.newlyShown.forEach(node => this._addToVisibleFlatList(node, animated));
|
|
2806
2794
|
result.newlyHidden.forEach(node => this._removeFromFlatList(node, animated));
|
|
2807
|
-
this._nodesFiltered(result.newlyHidden);
|
|
2808
2795
|
}
|
|
2809
2796
|
return result;
|
|
2810
2797
|
}
|
|
@@ -2816,14 +2803,18 @@ export default class Tree extends Widget {
|
|
|
2816
2803
|
let changed = this._applyFiltersForNode(node);
|
|
2817
2804
|
let hasChildrenWithFilterAccepted = false;
|
|
2818
2805
|
if (node.level < 32 /* see org.eclipse.scout.rt.client.ui.basic.tree.AbstractTree.expandAllRec */) {
|
|
2819
|
-
|
|
2820
|
-
|
|
2806
|
+
if (recursive) {
|
|
2807
|
+
node.childNodes.forEach(childNode => {
|
|
2821
2808
|
let result = this._applyFiltersForNodeRec(childNode, true, animated);
|
|
2822
2809
|
newlyHidden.push(...result.newlyHidden);
|
|
2823
2810
|
newlyShown.push(...result.newlyShown);
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
})
|
|
2811
|
+
hasChildrenWithFilterAccepted = hasChildrenWithFilterAccepted || childNode.filterAccepted;
|
|
2812
|
+
});
|
|
2813
|
+
} else if (!node.filterAccepted) {
|
|
2814
|
+
// Check children only if filterAccepted is false because only then hasChildrenWithFilterAccepted is used (see below).
|
|
2815
|
+
// This has great impact on performance when there are many nodes
|
|
2816
|
+
hasChildrenWithFilterAccepted = node.childNodes.some(childNode => childNode.filterAccepted);
|
|
2817
|
+
}
|
|
2827
2818
|
}
|
|
2828
2819
|
|
|
2829
2820
|
// set filter accepted on this node if it has children with filter accepted (so that the children are visible)
|
|
@@ -3053,6 +3044,10 @@ export default class Tree extends Widget {
|
|
|
3053
3044
|
that.runningAnimationsFinishFunc();
|
|
3054
3045
|
$node.removeClass('hiding');
|
|
3055
3046
|
if (!$node.hasClass('showing')) {
|
|
3047
|
+
// JQuery sets display to none which we don't need because node will be detached.
|
|
3048
|
+
// If node is added using another method than slideDown (used by show node), it would be invisible.
|
|
3049
|
+
// Example: parent is collapsed while nodes are hiding -> remove filter, expand parent -> invisible nodes
|
|
3050
|
+
$node.css('display', '');
|
|
3056
3051
|
$node.detach();
|
|
3057
3052
|
node.attached = false;
|
|
3058
3053
|
}
|
|
@@ -3066,15 +3061,11 @@ export default class Tree extends Widget {
|
|
|
3066
3061
|
}
|
|
3067
3062
|
|
|
3068
3063
|
_nodesToIds(nodes) {
|
|
3069
|
-
return nodes.map(node =>
|
|
3070
|
-
return node.id;
|
|
3071
|
-
});
|
|
3064
|
+
return nodes.map(node => node.id);
|
|
3072
3065
|
}
|
|
3073
3066
|
|
|
3074
3067
|
_nodesByIds(ids) {
|
|
3075
|
-
return ids.map(id =>
|
|
3076
|
-
return this.nodesMap[id];
|
|
3077
|
-
});
|
|
3068
|
+
return ids.map(id => this.nodesMap[id]);
|
|
3078
3069
|
}
|
|
3079
3070
|
|
|
3080
3071
|
_nodeById(id) {
|
package/src/util/dragAndDrop.js
CHANGED
|
@@ -175,13 +175,13 @@ export function _createDragAndDropHandlerOptions(target) {
|
|
|
175
175
|
target: target,
|
|
176
176
|
supportedScoutTypes: dragAndDrop.SCOUT_TYPES.FILE_TRANSFER,
|
|
177
177
|
validateFiles: (files, defaultValidator) => defaultValidator(files),
|
|
178
|
-
onDrop:
|
|
178
|
+
onDrop: files => {
|
|
179
179
|
},
|
|
180
180
|
dropType: () => dragAndDrop.SCOUT_TYPES.FILE_TRANSFER,
|
|
181
181
|
dropMaximumSize: () => target.dropMaximumSize,
|
|
182
182
|
doInstall: () => target.enabledComputed,
|
|
183
183
|
container: () => target.$container,
|
|
184
|
-
additionalDropProperties:
|
|
184
|
+
additionalDropProperties: event => {
|
|
185
185
|
}
|
|
186
186
|
};
|
|
187
187
|
}
|
|
@@ -269,6 +269,7 @@ export default {
|
|
|
269
269
|
* @property {String} [selector] CSS selector which will be added to the event source.
|
|
270
270
|
* @property {dropType} [dropType] Returns the allowed drop type during a drop event. Default is {@link dragAndDrop.SCOUT_TYPES.FILE_TRANSFER}
|
|
271
271
|
* @property {dropMaximumSize} [dropMaximumSize] Returns the maximum allowed size of a dropped object. Default is {@link DragAndDropTarget.dropMaximumSize}
|
|
272
|
-
* @property {validateFiles} [validateFiles] An optional function to add a custom file validation logic. Throw a {@link dropValidationErrorMessage} to indicate a failed validation.
|
|
272
|
+
* @property {validateFiles} [validateFiles] An optional function to add a custom file validation logic. Throw a {@link dropValidationErrorMessage} to indicate a failed validation.
|
|
273
|
+
* If no custom validator is installed, the default maximum file size validator is invoked.
|
|
273
274
|
* @property {additionalDropProperties} [additionalDropProperties] Returns additional drop properties to be used in {@link DragAndDropHandler.uploadFiles} as uploadProperties
|
|
274
|
-
*/
|
|
275
|
+
*/
|
package/src/util/events.js
CHANGED
|
@@ -220,7 +220,7 @@ export function onSwipe($element, id, onDown, onMove, onUp) {
|
|
|
220
220
|
let pageX = events.pageX(event);
|
|
221
221
|
let deltaX = pageX - origPageX;
|
|
222
222
|
let newLeft = origPosLeft + deltaX;
|
|
223
|
-
if (newLeft
|
|
223
|
+
if (newLeft !== curPosLeft) {
|
|
224
224
|
// only update swipe direction if it actually changed
|
|
225
225
|
direction = Math.sign(newLeft - curPosLeft);
|
|
226
226
|
}
|
|
@@ -51,7 +51,7 @@ export default class FilterSupport extends WidgetSupport {
|
|
|
51
51
|
scout.assertParameter('getElementsForFiltering', options.getElementsForFiltering);
|
|
52
52
|
this._getElementsForFiltering = options.getElementsForFiltering;
|
|
53
53
|
}
|
|
54
|
-
this._getElementText = options.getElementText || (
|
|
54
|
+
this._getElementText = options.getElementText || (element => $(element).text());
|
|
55
55
|
|
|
56
56
|
if (options.createTextFilter) {
|
|
57
57
|
scout.assertParameter('updateTextFilterText', options.updateTextFilterText);
|