@eclipse-scout/core 22.0.0-beta.1 → 22.0.0
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 +135 -46
- package/dist/eclipse-scout-core-theme-dark.css.map +1 -1
- package/dist/eclipse-scout-core-theme.css +134 -45
- package/dist/eclipse-scout-core-theme.css.map +1 -1
- package/dist/eclipse-scout-core.js +744 -640
- package/dist/eclipse-scout-core.js.map +1 -1
- package/package.json +2 -2
- package/src/App.js +86 -17
- package/src/RemoteApp.js +1 -0
- package/src/desktop/Desktop.js +3 -3
- package/src/desktop/desktoptab/DesktopTab.less +14 -0
- package/src/desktop/notification/DesktopNotification.js +33 -8
- package/src/desktop/outline/Outline.js +2 -32
- package/src/desktop/outline/Outline.less +14 -6
- package/src/desktop/outline/OutlineViewButton.js +1 -0
- package/src/desktop/viewbutton/ViewButtonBox.js +2 -2
- package/src/filechooser/FileChooser.js +2 -1
- package/src/form/Form.js +11 -3
- package/src/form/fields/groupbox/GroupBox.less +3 -1
- package/src/glasspane/DeferredGlassPaneTarget.js +2 -2
- package/src/index.js +2 -1
- package/src/login/LoginBox.less +8 -1
- package/src/main.less +1 -1
- package/src/menu/ComboMenu.js +22 -17
- package/src/menu/ComboMenu.less +71 -26
- package/src/menu/ContextMenuPopup.js +3 -2
- package/src/menu/ContextMenuPopup.less +1 -1
- package/src/menu/EllipsisMenu.js +4 -0
- package/src/menu/Menu.js +24 -11
- package/src/menu/menubar/MenuBar.js +2 -19
- package/src/menu/menubar/MenuBarBox.js +3 -34
- package/src/menu/menubar/MenuBarLayout.js +6 -19
- package/src/menu/menubox/MenuBoxLayout.js +1 -1
- package/src/menu/menus.js +4 -10
- package/src/messagebox/MessageBox.js +3 -22
- package/src/modeselector/ModeSelectorLayout.js +11 -6
- package/src/notification/Notification.js +15 -14
- package/src/popup/Popup.js +3 -20
- package/src/session/BusyIndicator.js +2 -1
- package/src/session/Session.js +4 -63
- package/src/status/Status.js +2 -1
- package/src/style/colors-dark.less +3 -1
- package/src/style/colors.less +2 -0
- package/src/style/sizes.less +5 -3
- package/src/table/Table.js +7 -3
- package/src/table/Table.less +13 -3
- package/src/table/columns/Column.js +4 -0
- package/src/tile/fields/htmlfield/TileHtmlField.js +28 -0
- package/src/tooltip/Tooltip.less +7 -5
- package/src/tree/LazyNodeFilter.js +24 -15
- package/src/tree/Tree.js +112 -143
- package/src/tree/Tree.less +2 -2
- package/src/tree/TreeLayout.js +1 -1
- package/src/tree/TreeNode.js +2 -2
- package/src/util/Device.js +6 -2
- package/src/widget/FilterSupport.js +6 -4
- package/src/widget/FilterSupport.less +38 -9
- package/src/widget/LoadingSupport.js +1 -1
- package/src/widget/Widget.js +41 -36
- package/src/widget/WidgetSupport.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-scout/core",
|
|
3
|
-
"version": "22.0.0
|
|
3
|
+
"version": "22.0.0",
|
|
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.0
|
|
29
|
+
"@eclipse-scout/cli": "22.0.0",
|
|
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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
3
|
* All rights reserved. This program and the accompanying materials
|
|
4
4
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
5
|
* which accompanies this distribution, and is available at
|
|
@@ -38,6 +38,7 @@ export default class App {
|
|
|
38
38
|
this.events = this._createEventSupport();
|
|
39
39
|
this.initialized = false;
|
|
40
40
|
this.sessions = [];
|
|
41
|
+
this._loadingTimeoutId = null;
|
|
41
42
|
|
|
42
43
|
// register the listeners which were added to scout before the app is created
|
|
43
44
|
listeners.forEach(function(listener) {
|
|
@@ -195,8 +196,11 @@ export default class App {
|
|
|
195
196
|
*/
|
|
196
197
|
_init(options) {
|
|
197
198
|
options = options || {};
|
|
198
|
-
|
|
199
|
-
|
|
199
|
+
this.setLoading(true);
|
|
200
|
+
let compatibilityPromise = this._checkBrowserCompatibility(options);
|
|
201
|
+
if (compatibilityPromise) {
|
|
202
|
+
this.setLoading(false);
|
|
203
|
+
return compatibilityPromise.then(newOptions => this._init(newOptions));
|
|
200
204
|
}
|
|
201
205
|
|
|
202
206
|
this._initVersion(options);
|
|
@@ -220,27 +224,82 @@ export default class App {
|
|
|
220
224
|
|
|
221
225
|
_checkBrowserCompatibility(options) {
|
|
222
226
|
let device = Device.get();
|
|
223
|
-
let app = this;
|
|
224
227
|
$.log.isInfoEnabled() && $.log.info('Detected browser ' + device.browser + ' version ' + device.browserVersion);
|
|
225
228
|
if (!scout.nvl(options.checkBrowserCompatibility, true) || device.isSupportedBrowser()) {
|
|
226
229
|
// No check requested or browser is supported
|
|
227
|
-
return
|
|
230
|
+
return;
|
|
228
231
|
}
|
|
229
232
|
|
|
233
|
+
let deferred = $.Deferred();
|
|
234
|
+
let newOptions = objects.valueCopy(options);
|
|
235
|
+
newOptions.checkBrowserCompatibility = false;
|
|
230
236
|
$('.scout').each(function() {
|
|
231
|
-
let $entryPoint = $(this)
|
|
232
|
-
|
|
233
|
-
newOptions = objects.valueCopy(options);
|
|
237
|
+
let $entryPoint = $(this);
|
|
238
|
+
let $box = $entryPoint.appendDiv();
|
|
234
239
|
|
|
235
|
-
newOptions.checkBrowserCompatibility = false;
|
|
236
240
|
$box.load('unsupported-browser.html', () => {
|
|
237
241
|
$box.find('button').on('click', () => {
|
|
238
242
|
$box.remove();
|
|
239
|
-
|
|
243
|
+
deferred.resolve(newOptions);
|
|
240
244
|
});
|
|
241
245
|
});
|
|
242
246
|
});
|
|
243
|
-
return
|
|
247
|
+
return deferred.promise();
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
setLoading(loading) {
|
|
251
|
+
if (loading) {
|
|
252
|
+
this._loadingTimeoutId = setTimeout(() => {
|
|
253
|
+
// Don't start loading if a desktop is already rendered to prevent flickering when the loading will be set to false after app initialization finishes
|
|
254
|
+
if (!this.sessions.some(session => session.desktop && session.desktop.rendered)) {
|
|
255
|
+
this._renderLoading();
|
|
256
|
+
}
|
|
257
|
+
}, 200);
|
|
258
|
+
} else {
|
|
259
|
+
clearTimeout(this._loadingTimeoutId);
|
|
260
|
+
this._loadingTimeoutId = null;
|
|
261
|
+
this._removeLoading();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
_renderLoading() {
|
|
266
|
+
let $body = $('body'),
|
|
267
|
+
$loadingRoot = $body.children('.application-loading-root');
|
|
268
|
+
if (!$loadingRoot.length) {
|
|
269
|
+
$loadingRoot = $body.appendDiv('application-loading-root')
|
|
270
|
+
.addClass('application-loading-root')
|
|
271
|
+
.fadeIn();
|
|
272
|
+
}
|
|
273
|
+
this._renderLoadingElement($loadingRoot, 'application-loading01');
|
|
274
|
+
this._renderLoadingElement($loadingRoot, 'application-loading02');
|
|
275
|
+
this._renderLoadingElement($loadingRoot, 'application-loading03');
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
_renderLoadingElement($loadingRoot, cssClass) {
|
|
279
|
+
if ($loadingRoot.children('.' + cssClass).length) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
// noinspection JSValidateTypes
|
|
283
|
+
$loadingRoot.appendDiv(cssClass).hide()
|
|
284
|
+
.fadeIn();
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
_removeLoading() {
|
|
288
|
+
let $loadingRoot = $('body').children('.application-loading-root');
|
|
289
|
+
// the fadeout animation only contains a to-value and no from-value
|
|
290
|
+
// therefore set the current value to the elements style
|
|
291
|
+
$loadingRoot.css('opacity', $loadingRoot.css('opacity'));
|
|
292
|
+
// Add animation listener before adding the classes to ensure the listener will always be triggered even while debugging
|
|
293
|
+
$loadingRoot.oneAnimationEnd(() => $loadingRoot.remove());
|
|
294
|
+
if ($loadingRoot.css('opacity') == 1) {
|
|
295
|
+
$loadingRoot.addClass('fadeout and-more');
|
|
296
|
+
} else {
|
|
297
|
+
$loadingRoot.addClass('fadeout');
|
|
298
|
+
}
|
|
299
|
+
if (!Device.get().supportsCssAnimation()) {
|
|
300
|
+
// fallback for old browsers that do not support the animation-end event
|
|
301
|
+
$loadingRoot.remove();
|
|
302
|
+
}
|
|
244
303
|
}
|
|
245
304
|
|
|
246
305
|
_initVersion(options) {
|
|
@@ -340,9 +399,7 @@ export default class App {
|
|
|
340
399
|
|
|
341
400
|
// TODO [7.0] cgu improve this, start must not be executed because it currently does a server request
|
|
342
401
|
let desktop = this._createDesktop(session.root);
|
|
343
|
-
this.
|
|
344
|
-
desktop: desktop
|
|
345
|
-
});
|
|
402
|
+
this._triggerDesktopReady(desktop);
|
|
346
403
|
session.render(() => {
|
|
347
404
|
session._renderDesktop();
|
|
348
405
|
|
|
@@ -351,14 +408,24 @@ export default class App {
|
|
|
351
408
|
session.focusManager.validateFocus();
|
|
352
409
|
|
|
353
410
|
session.ready = true;
|
|
354
|
-
this.
|
|
355
|
-
session: session
|
|
356
|
-
});
|
|
411
|
+
this._triggerSessionReady(session);
|
|
357
412
|
$.log.isInfoEnabled() && $.log.info('Session initialized. Detected ' + Device.get());
|
|
358
413
|
});
|
|
359
414
|
return $.resolvedPromise();
|
|
360
415
|
}
|
|
361
416
|
|
|
417
|
+
_triggerDesktopReady(desktop) {
|
|
418
|
+
this.trigger('desktopReady', {
|
|
419
|
+
desktop: desktop
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
_triggerSessionReady(session) {
|
|
424
|
+
this.trigger('sessionReady', {
|
|
425
|
+
session: session
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
|
|
362
429
|
_createSession(options) {
|
|
363
430
|
return scout.create('Session', options, {
|
|
364
431
|
ensureUniqueId: false
|
|
@@ -380,6 +447,7 @@ export default class App {
|
|
|
380
447
|
|
|
381
448
|
_initDone(options) {
|
|
382
449
|
this.initialized = true;
|
|
450
|
+
this.setLoading(false);
|
|
383
451
|
this.trigger('init', {
|
|
384
452
|
options: options
|
|
385
453
|
});
|
|
@@ -388,6 +456,7 @@ export default class App {
|
|
|
388
456
|
|
|
389
457
|
_fail(options, error, ...args) {
|
|
390
458
|
$.log.error('App initialization failed.');
|
|
459
|
+
this.setLoading(false);
|
|
391
460
|
|
|
392
461
|
return this.errorHandler.handle(error, ...args)
|
|
393
462
|
.then(errorInfo => {
|
package/src/RemoteApp.js
CHANGED
|
@@ -50,6 +50,7 @@ export default class RemoteApp extends App {
|
|
|
50
50
|
|
|
51
51
|
_fail(options, error, ...args) {
|
|
52
52
|
$.log.error('App initialization failed', error);
|
|
53
|
+
this.setLoading(false);
|
|
53
54
|
// Session.js already handled the error -> don't show a message here
|
|
54
55
|
// Reject with original rejection arguments
|
|
55
56
|
return $.rejectedPromise(error, ...args);
|
package/src/desktop/Desktop.js
CHANGED
|
@@ -895,11 +895,11 @@ export default class Desktop extends Widget {
|
|
|
895
895
|
}
|
|
896
896
|
|
|
897
897
|
/**
|
|
898
|
-
*
|
|
898
|
+
* Removes every popup which is a descendant of the given widget.
|
|
899
899
|
*/
|
|
900
|
-
|
|
900
|
+
removePopupsFor(widget) {
|
|
901
901
|
this.getPopupsFor(widget).forEach(popup => {
|
|
902
|
-
popup.
|
|
902
|
+
popup.remove();
|
|
903
903
|
});
|
|
904
904
|
}
|
|
905
905
|
|
|
@@ -85,6 +85,20 @@
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
&.glasspane-parent {
|
|
89
|
+
// Modality highlight does not work with pointer-events: none because mouse down is ignored on the glass pane completely by the browser
|
|
90
|
+
// -> we need to disable the hover effect manually
|
|
91
|
+
pointer-events: unset;
|
|
92
|
+
|
|
93
|
+
&:not(.disabled):not(.selected):hover {
|
|
94
|
+
background-color: @desktop-tab-background-color;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
&:not(.selected):hover > .closer {
|
|
98
|
+
display: none;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
88
102
|
&.disabled {
|
|
89
103
|
background-color: transparent;
|
|
90
104
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
3
|
* All rights reserved. This program and the accompanying materials
|
|
4
4
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
5
|
* which accompanies this distribution, and is available at
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {Device, Notification as ScoutNotification, strings} from '../../index';
|
|
11
|
+
import {Device, Notification as ScoutNotification, scout, Status, strings} from '../../index';
|
|
12
12
|
|
|
13
13
|
export default class DesktopNotification extends ScoutNotification {
|
|
14
14
|
|
|
@@ -20,7 +20,7 @@ export default class DesktopNotification extends ScoutNotification {
|
|
|
20
20
|
this._removing = false;
|
|
21
21
|
this.nativeOnly = false;
|
|
22
22
|
this.nativeNotificationTitle = null;
|
|
23
|
-
this.
|
|
23
|
+
this.nativeNotificationStatus = null; // holds native message & native icon
|
|
24
24
|
this.nativeNotificationVisibility = DesktopNotification.NativeNotificationVisibility.NONE;
|
|
25
25
|
this.nativeNotification = null;
|
|
26
26
|
this.nativeNotificationShown = false;
|
|
@@ -58,7 +58,13 @@ export default class DesktopNotification extends ScoutNotification {
|
|
|
58
58
|
let defaults = this.session.desktop.nativeNotificationDefaults;
|
|
59
59
|
if (defaults) {
|
|
60
60
|
this.nativeNotificationTitle = model.nativeNotificationTitle !== undefined ? model.nativeNotificationTitle : defaults.title;
|
|
61
|
-
this.
|
|
61
|
+
if (this.nativeNotificationStatus) {
|
|
62
|
+
this.nativeNotificationStatus.iconId = this.nativeNotificationStatus.iconId !== undefined ? this.nativeNotificationStatus.iconId : defaults.iconId;
|
|
63
|
+
} else {
|
|
64
|
+
this.nativeNotificationStatus = new Status({
|
|
65
|
+
iconId: defaults.iconId
|
|
66
|
+
});
|
|
67
|
+
}
|
|
62
68
|
this.nativeNotificationVisibility = scout.nvl(model.nativeNotificationVisibility !== undefined ? model.nativeNotificationVisibility : defaults.visibility, DesktopNotification.NativeNotificationVisibility.NONE);
|
|
63
69
|
}
|
|
64
70
|
this.resolveTextKeys(['nativeNotificationTitle']);
|
|
@@ -108,10 +114,24 @@ export default class DesktopNotification extends ScoutNotification {
|
|
|
108
114
|
return;
|
|
109
115
|
}
|
|
110
116
|
let title = scout.nvl(this.nativeNotificationTitle, '');
|
|
111
|
-
let body =
|
|
117
|
+
let body = (this.nativeNotificationStatus || {}).message;
|
|
118
|
+
if (strings.empty(body)) {
|
|
119
|
+
body = (this.status || {}).message;
|
|
120
|
+
}
|
|
121
|
+
if (!body) {
|
|
122
|
+
body = '';
|
|
123
|
+
}
|
|
124
|
+
if (this.htmlEnabled) {
|
|
125
|
+
body = strings.plainText(body, {removeFontIcons: true});
|
|
126
|
+
}
|
|
127
|
+
let iconId = (this.nativeNotificationStatus || {}).iconId;
|
|
128
|
+
if (strings.empty(iconId)) {
|
|
129
|
+
// icon must not be null or empty. If no icon it must be undefined
|
|
130
|
+
iconId = undefined;
|
|
131
|
+
}
|
|
112
132
|
this.nativeNotification = new Notification(title, {
|
|
113
133
|
body: body,
|
|
114
|
-
icon:
|
|
134
|
+
icon: iconId
|
|
115
135
|
});
|
|
116
136
|
|
|
117
137
|
this.nativeNotification.addEventListener('show', event => {
|
|
@@ -240,8 +260,13 @@ export default class DesktopNotification extends ScoutNotification {
|
|
|
240
260
|
this.setProperty('nativeNotificationTitle', title);
|
|
241
261
|
}
|
|
242
262
|
|
|
243
|
-
|
|
244
|
-
this.setProperty('
|
|
263
|
+
setNativeNotificationStatus(status) {
|
|
264
|
+
this.setProperty('nativeNotificationStatus', status);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
_setNativeNotificationStatus(status) {
|
|
268
|
+
status = Status.ensure(status);
|
|
269
|
+
this._setProperty('nativeNotificationStatus', status);
|
|
245
270
|
}
|
|
246
271
|
|
|
247
272
|
setNativeNotificationVisibility(visibility) {
|
|
@@ -1064,10 +1064,10 @@ export default class Outline extends Tree {
|
|
|
1064
1064
|
this.setProperty('nodeMenuBarVisible', visible);
|
|
1065
1065
|
}
|
|
1066
1066
|
|
|
1067
|
-
glassPaneTargets() {
|
|
1067
|
+
glassPaneTargets(element) {
|
|
1068
1068
|
// MessageBoxes are often created with Outlines as displayParent. The default implementation of this function
|
|
1069
1069
|
// would not render any glass panes when the outline is collapsed, thus we need to override this behavior.
|
|
1070
|
-
return this._glassPaneTargets();
|
|
1070
|
+
return this._glassPaneTargets(element);
|
|
1071
1071
|
}
|
|
1072
1072
|
|
|
1073
1073
|
_glassPaneTargets(element) {
|
|
@@ -1076,42 +1076,12 @@ export default class Outline extends Tree {
|
|
|
1076
1076
|
if (desktop.navigation) {
|
|
1077
1077
|
$elements.push(desktop.navigation.$body);
|
|
1078
1078
|
}
|
|
1079
|
-
if (desktop.bench && element instanceof Form && element.displayHint === Form.DisplayHint.VIEW) {
|
|
1080
|
-
arrays.pushAll($elements, this._getBenchGlassPaneTargetsForView(element));
|
|
1081
|
-
}
|
|
1082
1079
|
if (desktop.bench && desktop.bench.outlineContent) {
|
|
1083
1080
|
arrays.pushAll($elements, desktop.bench.outlineContent.glassPaneTargets(element));
|
|
1084
1081
|
}
|
|
1085
1082
|
return $elements;
|
|
1086
1083
|
}
|
|
1087
1084
|
|
|
1088
|
-
_getBenchGlassPaneTargetsForView(view) {
|
|
1089
|
-
let $glassPanes = [];
|
|
1090
|
-
$glassPanes = $glassPanes.concat(this._getTabGlassPaneTargetsForView(view, this.session.desktop.header));
|
|
1091
|
-
this.session.desktop.bench.visibleTabBoxes().forEach(function(tabBox) {
|
|
1092
|
-
if (tabBox.hasView(view)) {
|
|
1093
|
-
arrays.pushAll($glassPanes, this._getTabGlassPaneTargetsForView(view, tabBox));
|
|
1094
|
-
} else if (tabBox.$container) {
|
|
1095
|
-
$glassPanes.push(tabBox.$container);
|
|
1096
|
-
}
|
|
1097
|
-
}, this);
|
|
1098
|
-
return $glassPanes;
|
|
1099
|
-
}
|
|
1100
|
-
|
|
1101
|
-
_getTabGlassPaneTargetsForView(view, tabBox) {
|
|
1102
|
-
let $glassPanes = [];
|
|
1103
|
-
tabBox.tabArea.tabs.forEach(tab => {
|
|
1104
|
-
if (tab.view !== view && tab.view.displayParent === this) {
|
|
1105
|
-
$glassPanes.push(tab.$container);
|
|
1106
|
-
// Workaround for javascript not being able to prevent hover event propagation:
|
|
1107
|
-
// In case of tabs, the hover selector is defined on the element that is the direct parent
|
|
1108
|
-
// of the glass pane. Under these circumstances, the hover style isn't be prevented by the glass pane.
|
|
1109
|
-
tab.$container.addClass('glasspane-parent');
|
|
1110
|
-
}
|
|
1111
|
-
});
|
|
1112
|
-
return $glassPanes;
|
|
1113
|
-
}
|
|
1114
|
-
|
|
1115
1085
|
_onGlassPaneMouseDown(glassPaneOwner, $glassPane) {
|
|
1116
1086
|
let desktop = this.session.desktop;
|
|
1117
1087
|
if (desktop.navigation) {
|
|
@@ -9,12 +9,6 @@
|
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
11
|
.outline.tree {
|
|
12
|
-
|
|
13
|
-
&.in-background > .tree-data > .tree-node.selected {
|
|
14
|
-
background-color: @outline-in-background-selection-background-color;
|
|
15
|
-
color: @outline-in-background-selection-color;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
12
|
& > .tree-data {
|
|
19
13
|
padding-top: @outline-data-padding-top;
|
|
20
14
|
|
|
@@ -91,6 +85,20 @@
|
|
|
91
85
|
}
|
|
92
86
|
}
|
|
93
87
|
}
|
|
88
|
+
|
|
89
|
+
&.in-background > .tree-data {
|
|
90
|
+
& > .tree-node,
|
|
91
|
+
& > .animation-wrapper > .tree-node {
|
|
92
|
+
&.group {
|
|
93
|
+
background-color: @outline-in-background-group-background-color;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
&.selected {
|
|
97
|
+
background-color: @outline-in-background-selection-background-color;
|
|
98
|
+
color: @outline-in-background-selection-color;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
94
102
|
}
|
|
95
103
|
|
|
96
104
|
.outline-title {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
3
|
* All rights reserved. This program and the accompanying materials
|
|
4
4
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
5
|
* which accompanies this distribution, and is available at
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import {HtmlComponent, OutlineViewButton, scout, Widget, widgets} from '../../index';
|
|
12
12
|
|
|
13
13
|
export default class ViewButtonBox extends Widget {
|
|
14
14
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
3
|
* All rights reserved. This program and the accompanying materials
|
|
4
4
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
5
|
* which accompanies this distribution, and is available at
|
|
@@ -21,6 +21,7 @@ export default class FileChooser extends Widget {
|
|
|
21
21
|
this.boxButtons = null;
|
|
22
22
|
this.uploadButton = null;
|
|
23
23
|
this.cancelButton = null;
|
|
24
|
+
this.inheritAccessibility = false; // inherit not necessary. if the FileChooser can be opened, it must be editable. Opening a disabled chooser makes no sense.
|
|
24
25
|
this._addWidgetProperties(['boxButtons', 'uploadButton', 'cancelButton']);
|
|
25
26
|
}
|
|
26
27
|
|
package/src/form/Form.js
CHANGED
|
@@ -294,7 +294,9 @@ export default class Form extends Widget {
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
/**
|
|
297
|
-
* Method may be implemented to load the data.
|
|
297
|
+
* Method may be implemented to load the data. <br>
|
|
298
|
+
* By default, a resolved promise containing the provided this.data is returned.
|
|
299
|
+
* @returns {Promise}
|
|
298
300
|
*/
|
|
299
301
|
_load() {
|
|
300
302
|
return $.resolvedPromise().then(() => {
|
|
@@ -319,6 +321,9 @@ export default class Form extends Widget {
|
|
|
319
321
|
return $.resolvedPromise();
|
|
320
322
|
}
|
|
321
323
|
|
|
324
|
+
/**
|
|
325
|
+
* @param {any} data
|
|
326
|
+
*/
|
|
322
327
|
setData(data) {
|
|
323
328
|
this.setProperty('data', data);
|
|
324
329
|
}
|
|
@@ -327,8 +332,11 @@ export default class Form extends Widget {
|
|
|
327
332
|
// NOP
|
|
328
333
|
}
|
|
329
334
|
|
|
335
|
+
/**
|
|
336
|
+
* @returns {any}
|
|
337
|
+
*/
|
|
330
338
|
exportData() {
|
|
331
|
-
|
|
339
|
+
return null;
|
|
332
340
|
}
|
|
333
341
|
|
|
334
342
|
/**
|
|
@@ -382,7 +390,7 @@ export default class Form extends Widget {
|
|
|
382
390
|
|
|
383
391
|
/**
|
|
384
392
|
* This function is called by the lifecycle, when the 'save' function is called.<p>
|
|
385
|
-
* The data given to this function is the result of
|
|
393
|
+
* The data given to this function is the result of {@link exportData} which was called in advance.
|
|
386
394
|
*
|
|
387
395
|
* @returns {Promise} promise which may contain a Status specifying if the save operation was successful. The promise may be empty which means the save operation was successful.
|
|
388
396
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
3
|
* All rights reserved. This program and the accompanying materials
|
|
4
4
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
5
|
* which accompanies this distribution, and is available at
|
|
@@ -119,6 +119,7 @@
|
|
|
119
119
|
display: inline-block;
|
|
120
120
|
vertical-align: middle;
|
|
121
121
|
padding: @group-box-title-padding-top 0 @group-box-title-padding-bottom 0;
|
|
122
|
+
max-width: 100%;
|
|
122
123
|
|
|
123
124
|
.group-box.has-sub-label > & {
|
|
124
125
|
padding-bottom: @group-box-title-with-sub-label-padding-bottom;
|
|
@@ -135,6 +136,7 @@
|
|
|
135
136
|
font-size: @sub-title-font-size;
|
|
136
137
|
letter-spacing: @sub-title-letter-spacing;
|
|
137
138
|
color: @sub-title-color;
|
|
139
|
+
#scout.overflow-ellipsis();
|
|
138
140
|
}
|
|
139
141
|
}
|
|
140
142
|
|
package/src/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
3
|
* All rights reserved. This program and the accompanying materials
|
|
4
4
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
5
|
* which accompanies this distribution, and is available at
|
|
@@ -605,6 +605,7 @@ export {default as FormFieldTile} from './tile/fields/FormFieldTile';
|
|
|
605
605
|
export {default as FormFieldTileAdapter} from './tile/fields/FormFieldTileAdapter';
|
|
606
606
|
export {default as ButtonTile} from './tile/fields/button/ButtonTile';
|
|
607
607
|
export {default as TileButton} from './tile/fields/button/TileButton';
|
|
608
|
+
export {default as TileHtmlField} from './tile/fields/htmlfield/TileHtmlField';
|
|
608
609
|
export {default as TileTableField} from './tile/fields/tablefield/TileTableField';
|
|
609
610
|
export {default as SimpleTab} from './tabbox/SimpleTab';
|
|
610
611
|
export {default as SimpleTabArea} from './tabbox/SimpleTabArea';
|
package/src/login/LoginBox.less
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
3
|
* All rights reserved. This program and the accompanying materials
|
|
4
4
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
5
|
* which accompanies this distribution, and is available at
|
|
@@ -84,3 +84,10 @@
|
|
|
84
84
|
height: 18px;
|
|
85
85
|
vertical-align: middle;
|
|
86
86
|
}
|
|
87
|
+
|
|
88
|
+
.login-body,
|
|
89
|
+
.logout-body {
|
|
90
|
+
& > .box-background-elements.box-background-elements-fadeout {
|
|
91
|
+
#scout.animation(nop 0.05s);
|
|
92
|
+
}
|
|
93
|
+
}
|
package/src/main.less
CHANGED
|
@@ -408,7 +408,7 @@ button::-moz-focus-inner {
|
|
|
408
408
|
pointer-events: none;
|
|
409
409
|
|
|
410
410
|
&.fadeout {
|
|
411
|
-
#scout.animation(application-loading-fade-out @loading-fade-duration linear 1);
|
|
411
|
+
#scout.animation(application-loading-fade-out @loading-fade-duration linear 1 forwards);
|
|
412
412
|
}
|
|
413
413
|
}
|
|
414
414
|
|
package/src/menu/ComboMenu.js
CHANGED
|
@@ -8,21 +8,13 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {HtmlComponent, Menu} from '../index';
|
|
11
|
+
import {HtmlComponent, Menu, widgets} from '../index';
|
|
12
12
|
|
|
13
13
|
export default class ComboMenu extends Menu {
|
|
14
14
|
|
|
15
15
|
constructor() {
|
|
16
16
|
super();
|
|
17
|
-
this.
|
|
18
|
-
this._childSelectedHandler = this._onChildSelected.bind(this);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
_setChildActions(childActions) {
|
|
22
|
-
this.childActions.forEach(child => child.off('propertyChange:selected', this._childSelectedHandler));
|
|
23
|
-
super._setChildActions(childActions);
|
|
24
|
-
this.childActions.forEach(child => child.on('propertyChange:selected', this._childSelectedHandler));
|
|
25
|
-
this._updateChildSelected();
|
|
17
|
+
this._childVisibleChangeHandler = this._onChildVisibleChange.bind(this);
|
|
26
18
|
}
|
|
27
19
|
|
|
28
20
|
_render() {
|
|
@@ -36,10 +28,15 @@ export default class ComboMenu extends Menu {
|
|
|
36
28
|
|
|
37
29
|
_renderProperties() {
|
|
38
30
|
super._renderProperties();
|
|
39
|
-
this._renderChildSelected();
|
|
40
31
|
this._renderChildActions();
|
|
41
32
|
}
|
|
42
33
|
|
|
34
|
+
_setChildActions(childActions) {
|
|
35
|
+
this.childActions.forEach(child => child.off('propertyChange:visible', this._childVisibleChangeHandler));
|
|
36
|
+
super._setChildActions(childActions);
|
|
37
|
+
this.childActions.forEach(child => child.on('propertyChange:visible', this._childVisibleChangeHandler));
|
|
38
|
+
}
|
|
39
|
+
|
|
43
40
|
_renderChildActions() {
|
|
44
41
|
super._renderChildActions();
|
|
45
42
|
|
|
@@ -47,6 +44,7 @@ export default class ComboMenu extends Menu {
|
|
|
47
44
|
childAction.addCssClass('combo-menu-child');
|
|
48
45
|
childAction.render();
|
|
49
46
|
});
|
|
47
|
+
widgets.updateFirstLastMarker(this.childActions);
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
// @override
|
|
@@ -54,15 +52,22 @@ export default class ComboMenu extends Menu {
|
|
|
54
52
|
return false;
|
|
55
53
|
}
|
|
56
54
|
|
|
57
|
-
|
|
58
|
-
this.
|
|
55
|
+
_onChildVisibleChange(event) {
|
|
56
|
+
if (this.rendered) {
|
|
57
|
+
widgets.updateFirstLastMarker(this.childActions);
|
|
58
|
+
}
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
_doActionTogglesPopup() {
|
|
62
|
+
return false;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
isToggleAction() {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
isTabTarget() {
|
|
70
|
+
// To make children tabbable, combo menu must never be a tab target, even if its a default menu
|
|
71
|
+
return false;
|
|
67
72
|
}
|
|
68
73
|
}
|