@eclipse-scout/core 22.0.0-beta.5 → 22.0.2
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-c98fb5230e71dcec75ce.min.js +2 -0
- package/dist/eclipse-scout-core-c98fb5230e71dcec75ce.min.js.map +1 -0
- package/dist/eclipse-scout-core-theme-6b2fef56e9e49231a49c.min.css +1 -0
- package/dist/eclipse-scout-core-theme-dark-d2bb274dd42f132bfca0.min.css +1 -0
- package/dist/eclipse-scout-core-theme-dark.css +511 -399
- package/dist/eclipse-scout-core-theme-dark.css.map +1 -1
- package/dist/eclipse-scout-core-theme.css +247 -135
- package/dist/eclipse-scout-core-theme.css.map +1 -1
- package/dist/eclipse-scout-core.js +865 -646
- package/dist/eclipse-scout-core.js.map +1 -1
- package/dist/file-list +7 -0
- package/dist/locales.json +47126 -0
- package/dist/texts.json +1153 -0
- package/package.json +2 -2
- package/src/App.js +17 -10
- package/src/action/Button.less +1 -0
- package/src/box/Box.less +2 -2
- package/src/breadcrumbbar/BreadcrumbBarLayout.js +2 -2
- package/src/calendar/Calendar.js +40 -58
- package/src/calendar/Calendar.less +10 -10
- package/src/calendar/CalendarLayout.js +3 -1
- package/src/datepicker/DatePicker.less +1 -0
- package/src/desktop/desktoptab/DesktopTab.less +19 -2
- package/src/desktop/desktoptab/DesktopTabArea.less +7 -3
- package/src/desktop/desktoptab/DesktopTabAreaLayout.js +1 -1
- package/src/desktop/navigation/DesktopNavigation.less +4 -0
- package/src/desktop/notification/DesktopNotification.js +11 -4
- package/src/desktop/notification/DesktopNotification.less +5 -3
- package/src/desktop/outline/Outline.js +0 -30
- package/src/desktop/outline/Outline.less +4 -4
- package/src/desktop/viewbutton/ViewButton.less +18 -9
- package/src/desktop/viewbutton/ViewButtonBox.js +2 -2
- package/src/desktop/viewbutton/ViewMenuTab.less +3 -2
- package/src/filechooser/FileChooser.less +1 -1
- package/src/form/Form.less +1 -0
- package/src/form/fields/LookupBox.js +2 -1
- package/src/form/fields/breadcrumbbarfield/BreadcrumbBarField.less +14 -0
- package/src/form/fields/groupbox/GroupBox.js +13 -9
- package/src/form/fields/groupbox/GroupBox.less +4 -1
- package/src/form/fields/htmlfield/HtmlField.less +0 -1
- package/src/form/fields/listbox/ListBox.js +8 -3
- package/src/form/fields/tabbox/TabAreaLayout.js +63 -66
- package/src/form/fields/tabbox/TabBox.js +4 -7
- package/src/form/fields/tabbox/TabBox.less +2 -1
- package/src/form/fields/tabbox/TabBoxHeaderLayout.js +5 -5
- package/src/glasspane/GlassPane.js +3 -3
- package/src/group/Group.less +1 -1
- package/src/index.js +2 -1
- package/src/index.less +1 -0
- package/src/jquery/jquery-scout.js +5 -4
- package/src/login/LoginBox.less +9 -7
- package/src/menu/ContextMenuPopup.less +9 -2
- package/src/menu/Menu.less +1 -0
- package/src/messagebox/MessageBox.less +3 -3
- package/src/modeselector/Mode.less +15 -37
- package/src/modeselector/ModeSelector.js +1 -1
- package/src/modeselector/ModeSelector.less +2 -1
- package/src/planner/PlannerHeader.less +2 -1
- package/src/popup/Popup.js +24 -8
- package/src/popup/PopupLayout.js +2 -8
- package/src/scrollbar/Scrollbar.less +8 -1
- package/src/scrollbar/scrollbars.js +26 -4
- package/src/session/Session.js +4 -1
- package/src/style/colors-dark.less +25 -11
- package/src/style/colors.less +17 -3
- package/src/style/fonts.less +5 -0
- package/src/style/mixins.less +21 -14
- package/src/style/sizes-dark.less +4 -1
- package/src/style/sizes.less +7 -7
- package/src/table/Table.js +45 -33
- package/src/table/Table.less +49 -16
- package/src/table/TableHeader.js +10 -8
- package/src/table/TableHeader.less +1 -0
- package/src/table/TableHeaderMenu.js +3 -1
- package/src/table/TableHeaderMenu.less +7 -2
- package/src/table/columns/BooleanColumn.js +2 -2
- package/src/table/columns/Column.js +3 -3
- package/src/table/columns/ColumnOptimalWidthMeasurer.js +1 -1
- package/src/table/editor/CellEditorPopup.js +8 -1
- package/src/tagbar/TagBarOverflowPopupLayout.js +1 -1
- package/src/tile/TileGrid.js +1 -1
- package/src/tile/TileGridLayout.js +2 -2
- package/src/tile/accordion/TileAccordion.js +16 -1
- package/src/tile/fields/FormFieldTile.less +18 -11
- package/src/tile/fields/button/ButtonTile.js +1 -1
- package/src/tile/fields/htmlfield/TileHtmlField.js +28 -0
- package/src/tooltip/Tooltip.less +7 -5
- package/src/tree/CompactTree.less +1 -1
- package/src/tree/LazyNodeFilter.js +26 -15
- package/src/tree/Tree.js +114 -143
- package/src/tree/Tree.less +3 -5
- package/src/tree/TreeLayout.js +1 -1
- package/src/tree/TreeNode.js +2 -2
- package/src/util/Device.js +6 -2
- package/src/util/arrays.js +24 -2
- package/src/util/dragAndDrop.js +5 -4
- package/src/util/events.js +1 -1
- package/src/util/objects.js +4 -1
- package/src/widget/FilterSupport.js +7 -5
- package/src/widget/FilterSupport.less +38 -9
- package/src/widget/Widget.js +24 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-scout/core",
|
|
3
|
-
"version": "22.0.
|
|
3
|
+
"version": "22.0.2",
|
|
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.2",
|
|
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
|
|
@@ -196,7 +196,7 @@ export default class App {
|
|
|
196
196
|
*/
|
|
197
197
|
_init(options) {
|
|
198
198
|
options = options || {};
|
|
199
|
-
this.setLoading(true)
|
|
199
|
+
this.setLoading(true);
|
|
200
200
|
let compatibilityPromise = this._checkBrowserCompatibility(options);
|
|
201
201
|
if (compatibilityPromise) {
|
|
202
202
|
this.setLoading(false);
|
|
@@ -224,7 +224,6 @@ export default class App {
|
|
|
224
224
|
|
|
225
225
|
_checkBrowserCompatibility(options) {
|
|
226
226
|
let device = Device.get();
|
|
227
|
-
let app = this;
|
|
228
227
|
$.log.isInfoEnabled() && $.log.info('Detected browser ' + device.browser + ' version ' + device.browserVersion);
|
|
229
228
|
if (!scout.nvl(options.checkBrowserCompatibility, true) || device.isSupportedBrowser()) {
|
|
230
229
|
// No check requested or browser is supported
|
|
@@ -292,7 +291,7 @@ export default class App {
|
|
|
292
291
|
$loadingRoot.css('opacity', $loadingRoot.css('opacity'));
|
|
293
292
|
// Add animation listener before adding the classes to ensure the listener will always be triggered even while debugging
|
|
294
293
|
$loadingRoot.oneAnimationEnd(() => $loadingRoot.remove());
|
|
295
|
-
if ($loadingRoot.css('opacity')
|
|
294
|
+
if ($loadingRoot.css('opacity') === '1') {
|
|
296
295
|
$loadingRoot.addClass('fadeout and-more');
|
|
297
296
|
} else {
|
|
298
297
|
$loadingRoot.addClass('fadeout');
|
|
@@ -400,9 +399,7 @@ export default class App {
|
|
|
400
399
|
|
|
401
400
|
// TODO [7.0] cgu improve this, start must not be executed because it currently does a server request
|
|
402
401
|
let desktop = this._createDesktop(session.root);
|
|
403
|
-
this.
|
|
404
|
-
desktop: desktop
|
|
405
|
-
});
|
|
402
|
+
this._triggerDesktopReady(desktop);
|
|
406
403
|
session.render(() => {
|
|
407
404
|
session._renderDesktop();
|
|
408
405
|
|
|
@@ -411,14 +408,24 @@ export default class App {
|
|
|
411
408
|
session.focusManager.validateFocus();
|
|
412
409
|
|
|
413
410
|
session.ready = true;
|
|
414
|
-
this.
|
|
415
|
-
session: session
|
|
416
|
-
});
|
|
411
|
+
this._triggerSessionReady(session);
|
|
417
412
|
$.log.isInfoEnabled() && $.log.info('Session initialized. Detected ' + Device.get());
|
|
418
413
|
});
|
|
419
414
|
return $.resolvedPromise();
|
|
420
415
|
}
|
|
421
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
|
+
|
|
422
429
|
_createSession(options) {
|
|
423
430
|
return scout.create('Session', options, {
|
|
424
431
|
ensureUniqueId: false
|
package/src/action/Button.less
CHANGED
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 => {
|
package/src/calendar/Calendar.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
|
|
@@ -8,27 +8,7 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
12
|
-
CalendarComponent,
|
|
13
|
-
CalendarLayout,
|
|
14
|
-
CalendarListComponent,
|
|
15
|
-
DateRange,
|
|
16
|
-
dates,
|
|
17
|
-
Device,
|
|
18
|
-
events,
|
|
19
|
-
GroupBox,
|
|
20
|
-
HtmlComponent,
|
|
21
|
-
KeyStrokeContext,
|
|
22
|
-
menus,
|
|
23
|
-
numbers,
|
|
24
|
-
objects,
|
|
25
|
-
Point,
|
|
26
|
-
Range,
|
|
27
|
-
scout,
|
|
28
|
-
scrollbars,
|
|
29
|
-
strings,
|
|
30
|
-
Widget
|
|
31
|
-
} from '../index';
|
|
11
|
+
import {CalendarComponent, CalendarLayout, CalendarListComponent, DateRange, dates, Device, events, GroupBox, HtmlComponent, KeyStrokeContext, menus, numbers, objects, Point, Range, scout, scrollbars, strings, Widget} from '../index';
|
|
32
12
|
import $ from 'jquery';
|
|
33
13
|
|
|
34
14
|
export default class Calendar extends Widget {
|
|
@@ -759,11 +739,9 @@ export default class Calendar extends Widget {
|
|
|
759
739
|
this.$topGrid.find('.calendar-day-name').data('new-width', 0);
|
|
760
740
|
this.$grids.find('.calendar-day').data('new-width', 0);
|
|
761
741
|
let newWidthWorkWeek = Math.round(contentW / this.workDayIndices.length);
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
$('.calendar-day:nth-child(-n+6)', this.$grid)
|
|
766
|
-
.data('new-width', newWidthWorkWeek);
|
|
742
|
+
this.$topGrid.find('.calendar-day-name').slice(0, 5).data('new-width', newWidthWorkWeek);
|
|
743
|
+
this.$topGrid.find('.calendar-day').slice(0, 5).data('new-width', newWidthWorkWeek);
|
|
744
|
+
$('.calendar-day:nth-child(-n+6)', this.$grid).data('new-width', newWidthWorkWeek);
|
|
767
745
|
this.widthPerDivision = newWidthWorkWeek;
|
|
768
746
|
} else if (this._isMonth() || this._isWeek()) {
|
|
769
747
|
let newWidthMonthOrWeek = Math.round(contentW / 7);
|
|
@@ -781,21 +759,26 @@ export default class Calendar extends Widget {
|
|
|
781
759
|
});
|
|
782
760
|
}
|
|
783
761
|
|
|
784
|
-
let afterLayoutCallback = this._afterLayout.bind(this);
|
|
785
|
-
|
|
786
762
|
// animate old to new sizes
|
|
787
|
-
$('div', this.$container).each(
|
|
788
|
-
let $e = $(
|
|
789
|
-
|
|
790
|
-
|
|
763
|
+
$('div', this.$container).each((i, elem) => {
|
|
764
|
+
let $e = $(elem);
|
|
765
|
+
let w = $e.data('new-width');
|
|
766
|
+
let h = $e.data('new-height');
|
|
791
767
|
$e.stop(false, true);
|
|
792
768
|
|
|
793
769
|
if (w !== undefined && w !== $e.outerWidth()) {
|
|
794
770
|
if (animate) {
|
|
795
|
-
|
|
771
|
+
let opts = {
|
|
772
|
+
complete: () => this._afterLayout($e, animate)
|
|
773
|
+
};
|
|
774
|
+
if ($e[0] === this.$grids[0]) {
|
|
775
|
+
// Grid contains scroll shadows that should be updated during animation (don't due it always for performance reasons)
|
|
776
|
+
opts.progress = () => this._afterLayout($e, animate);
|
|
777
|
+
}
|
|
778
|
+
$e.animate({width: w}, opts);
|
|
796
779
|
} else {
|
|
797
780
|
$e.css('width', w);
|
|
798
|
-
|
|
781
|
+
this._afterLayout($e, animate);
|
|
799
782
|
}
|
|
800
783
|
}
|
|
801
784
|
if (h !== undefined && h !== $e.outerHeight()) {
|
|
@@ -807,14 +790,14 @@ export default class Calendar extends Widget {
|
|
|
807
790
|
if (h === 0) {
|
|
808
791
|
$e.addClass('hidden');
|
|
809
792
|
}
|
|
810
|
-
|
|
793
|
+
this._afterLayout($e, animate);
|
|
811
794
|
});
|
|
812
795
|
} else {
|
|
813
796
|
$e.css('height', h);
|
|
814
797
|
if (h === 0) {
|
|
815
798
|
$e.addClass('hidden');
|
|
816
799
|
}
|
|
817
|
-
|
|
800
|
+
this._afterLayout($e, animate);
|
|
818
801
|
}
|
|
819
802
|
}
|
|
820
803
|
});
|
|
@@ -853,13 +836,18 @@ export default class Calendar extends Widget {
|
|
|
853
836
|
|
|
854
837
|
_updateScrollbars($parent, animate) {
|
|
855
838
|
let $scrollables = $('.calendar-scrollable-components', $parent);
|
|
856
|
-
$scrollables.each(
|
|
857
|
-
|
|
858
|
-
scrollbars.update($scrollable, true);
|
|
839
|
+
$scrollables.each((i, elem) => {
|
|
840
|
+
scrollbars.update($(elem), true);
|
|
859
841
|
});
|
|
860
842
|
this.updateScrollPosition(animate);
|
|
861
843
|
}
|
|
862
844
|
|
|
845
|
+
_uninstallComponentScrollbars($parent) {
|
|
846
|
+
$parent.find('.calendar-scrollable-components').each((i, elem) => {
|
|
847
|
+
scrollbars.uninstall($(elem), this.session);
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
|
|
863
851
|
_updateTopGrid() {
|
|
864
852
|
$('.calendar-component', this.$topGrid).each((index, part) => {
|
|
865
853
|
let component = $(part).data('component');
|
|
@@ -1037,18 +1025,8 @@ export default class Calendar extends Widget {
|
|
|
1037
1025
|
}
|
|
1038
1026
|
|
|
1039
1027
|
_remove() {
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
// Ensure that scrollbars are unregistered
|
|
1043
|
-
for (let k = 0; k < $days.length; k++) {
|
|
1044
|
-
let $day = $days.eq(k);
|
|
1045
|
-
let $scrollableContainer = $day.children('.calendar-scrollable-components');
|
|
1046
|
-
|
|
1047
|
-
if ($scrollableContainer.length > 0) {
|
|
1048
|
-
scrollbars.uninstall($scrollableContainer, this.session);
|
|
1049
|
-
$scrollableContainer.remove();
|
|
1050
|
-
}
|
|
1051
|
-
}
|
|
1028
|
+
this._uninstallComponentScrollbars(this.$grid);
|
|
1029
|
+
this._uninstallComponentScrollbars(this.$topGrid);
|
|
1052
1030
|
|
|
1053
1031
|
this.$window
|
|
1054
1032
|
.off('mousemove touchmove', this._mouseMoveHandler)
|
|
@@ -1179,6 +1157,7 @@ export default class Calendar extends Widget {
|
|
|
1179
1157
|
|
|
1180
1158
|
if (this._isMonth()) {
|
|
1181
1159
|
this._uninstallScrollbars();
|
|
1160
|
+
this._uninstallComponentScrollbars(this.$topGrid);
|
|
1182
1161
|
this.$grid.removeClass('calendar-scrollable-components');
|
|
1183
1162
|
} else {
|
|
1184
1163
|
this.$grid.addClass('calendar-scrollable-components');
|
|
@@ -1188,16 +1167,19 @@ export default class Calendar extends Widget {
|
|
|
1188
1167
|
session: this.session,
|
|
1189
1168
|
axis: 'y'
|
|
1190
1169
|
});
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1170
|
+
this.$topGrid.find('.calendar-scrollable-components').each((i, elem) => {
|
|
1171
|
+
let $topDay = $(elem);
|
|
1172
|
+
if ($topDay.data('scrollable')) {
|
|
1173
|
+
scrollbars.update($topDay);
|
|
1174
|
+
return;
|
|
1175
|
+
}
|
|
1195
1176
|
scrollbars.install($topDay, {
|
|
1196
1177
|
parent: this,
|
|
1197
1178
|
session: this.session,
|
|
1198
|
-
axis: 'y'
|
|
1179
|
+
axis: 'y',
|
|
1180
|
+
scrollShadow: 'none'
|
|
1199
1181
|
});
|
|
1200
|
-
}
|
|
1182
|
+
});
|
|
1201
1183
|
}
|
|
1202
1184
|
}
|
|
1203
1185
|
|
|
@@ -28,15 +28,6 @@
|
|
|
28
28
|
height: 100%;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
.calendar-week-scrollable {
|
|
32
|
-
overflow: visible;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.calendar-scrollable-components-week {
|
|
36
|
-
top: calc(@calendar-day-selected-circle-size ~'+ 5px');
|
|
37
|
-
height: calc(~'15% - (' @calendar-day-selected-circle-size ~' + 5px)');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
31
|
.calendar-header {
|
|
41
32
|
position: relative;
|
|
42
33
|
display: block;
|
|
@@ -147,7 +138,8 @@
|
|
|
147
138
|
}
|
|
148
139
|
|
|
149
140
|
.calendar-mode {
|
|
150
|
-
|
|
141
|
+
padding: 0 8px;
|
|
142
|
+
min-width: 65px;
|
|
151
143
|
|
|
152
144
|
border-top: 1px solid @control-border-color;
|
|
153
145
|
border-bottom: 1px solid @control-border-color;
|
|
@@ -362,8 +354,16 @@
|
|
|
362
354
|
height: calc(~'100% - 25px');
|
|
363
355
|
padding-right: @root-group-box-padding-right;
|
|
364
356
|
|
|
357
|
+
& + .scroll-shadow {
|
|
358
|
+
--scroll-shadow-inset-right: @root-group-box-padding-right;
|
|
359
|
+
}
|
|
360
|
+
|
|
365
361
|
&.mobile {
|
|
366
362
|
padding-right: @calendar-padding-right-mobile;
|
|
363
|
+
|
|
364
|
+
& + .scroll-shadow {
|
|
365
|
+
--scroll-shadow-inset-right: @calendar-padding-right-mobile;
|
|
366
|
+
}
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
369
|
|
|
@@ -17,6 +17,7 @@ export default class CalendarLayout extends AbstractLayout {
|
|
|
17
17
|
this.calendar = calendar;
|
|
18
18
|
this.stacked = false;
|
|
19
19
|
this.compacted = false;
|
|
20
|
+
this.compactWidth = 550;
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
layout($container) {
|
|
@@ -34,7 +35,8 @@ export default class CalendarLayout extends AbstractLayout {
|
|
|
34
35
|
if ($header[0].scrollWidth > $container.width()) {
|
|
35
36
|
this.stack();
|
|
36
37
|
}
|
|
37
|
-
if ($header[0].scrollWidth > $container.width()) {
|
|
38
|
+
if ($container.width() < this.compactWidth || $header[0].scrollWidth > $container.width()) {
|
|
39
|
+
// Title may take a lot of space, make it always compact for small devices so it won't toggle when changing display mode or view range
|
|
38
40
|
this.compact();
|
|
39
41
|
}
|
|
40
42
|
|
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
*/
|
|
11
11
|
.desktop-tab.simple-tab {
|
|
12
12
|
width: @desktop-tab-width;
|
|
13
|
-
min-width: @desktop-tab-min-width
|
|
13
|
+
min-width: @desktop-tab-min-width;
|
|
14
14
|
margin: @desktop-tab-margin-top @desktop-tab-margin-right 0 0;
|
|
15
15
|
padding: @desktop-tab-padding @desktop-tab-padding 0 @desktop-tab-padding-left;
|
|
16
16
|
border-radius: @desktop-tab-border-radius @desktop-tab-border-radius 0 0;
|
|
17
|
-
border-
|
|
17
|
+
border: @desktop-tab-border-width solid @desktop-tab-border-color;
|
|
18
|
+
border-bottom-width: 0;
|
|
18
19
|
background-color: @desktop-tab-background-color;
|
|
19
20
|
|
|
20
21
|
& > .title-line {
|
|
@@ -79,12 +80,27 @@
|
|
|
79
80
|
&:hover,
|
|
80
81
|
&:active {
|
|
81
82
|
background-color: @desktop-tab-hover-background-color;
|
|
83
|
+
border-color: transparent;
|
|
82
84
|
|
|
83
85
|
& > .title-line > .title {
|
|
84
86
|
color: inherit;
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
|
|
90
|
+
&.glasspane-parent {
|
|
91
|
+
// Modality highlight does not work with pointer-events: none because mouse down is ignored on the glass pane completely by the browser
|
|
92
|
+
// -> we need to disable the hover effect manually
|
|
93
|
+
pointer-events: unset;
|
|
94
|
+
|
|
95
|
+
&:not(.disabled):not(.selected):hover {
|
|
96
|
+
background-color: @desktop-tab-background-color;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
&:not(.selected):hover > .closer {
|
|
100
|
+
display: none;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
88
104
|
&.disabled {
|
|
89
105
|
background-color: transparent;
|
|
90
106
|
|
|
@@ -95,6 +111,7 @@
|
|
|
95
111
|
|
|
96
112
|
&.selected {
|
|
97
113
|
background-color: @simple-tab-selected-background-color;
|
|
114
|
+
border-color: transparent;
|
|
98
115
|
|
|
99
116
|
& > .title-line {
|
|
100
117
|
& > .icon-container {
|
|
@@ -11,17 +11,21 @@
|
|
|
11
11
|
.desktop-tab-area {
|
|
12
12
|
|
|
13
13
|
& > .simple-overflow-tab-item {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
@desktop-overflow-tab-margin-bottom: @desktop-tab-margin-right * 2;
|
|
15
|
+
|
|
16
|
+
border-radius: @view-tab-border-radius; // Use smaller border radius, so it fits nicely into the inverted border radius of the last tab if it is selected
|
|
17
|
+
margin: @desktop-tab-margin-top + @desktop-overflow-tab-margin-bottom @desktop-tab-margin-right @desktop-overflow-tab-margin-bottom;
|
|
16
18
|
background-color: @desktop-tab-background-color;
|
|
17
|
-
border:
|
|
19
|
+
border: @desktop-tab-border-width solid @desktop-tab-border-color;
|
|
18
20
|
|
|
19
21
|
&:hover {
|
|
20
22
|
background-color: @desktop-tab-hover-background-color;
|
|
23
|
+
border-color: transparent;
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
&.selected {
|
|
24
27
|
background-color: @desktop-tab-hover-background-color;
|
|
28
|
+
border-color: transparent;
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
31
|
}
|
|
@@ -160,18 +160,17 @@ export default class DesktopNotification extends ScoutNotification {
|
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
162
162
|
if (this.nativeNotificationVisibility === DesktopNotification.NativeNotificationVisibility.NONE) {
|
|
163
|
+
this._hideLaterIfNativeOnly();
|
|
163
164
|
return;
|
|
164
165
|
}
|
|
165
166
|
|
|
166
167
|
if (this.nativeNotificationVisibility === DesktopNotification.NativeNotificationVisibility.BACKGROUND && !this._isDocumentHidden()) {
|
|
168
|
+
this._hideLaterIfNativeOnly();
|
|
167
169
|
return;
|
|
168
170
|
}
|
|
169
171
|
|
|
170
172
|
if (window.Notification && Notification.permission === 'denied') {
|
|
171
|
-
|
|
172
|
-
// If native notifications are not allowed, there is no need to keep the (invisible) desktop notification open
|
|
173
|
-
this.hide();
|
|
174
|
-
}
|
|
173
|
+
this._hideLaterIfNativeOnly();
|
|
175
174
|
return;
|
|
176
175
|
}
|
|
177
176
|
if (this._checkNotificationPromise()) {
|
|
@@ -182,6 +181,14 @@ export default class DesktopNotification extends ScoutNotification {
|
|
|
182
181
|
}
|
|
183
182
|
}
|
|
184
183
|
|
|
184
|
+
_hideLaterIfNativeOnly() {
|
|
185
|
+
if (!this.nativeOnly) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// If native notifications are not shown, there is no need to keep the (invisible) desktop notification open (prevent dom-leak)
|
|
189
|
+
setTimeout(() => this.hide()); // async because this method is called in render and removing the notification within render throws exception
|
|
190
|
+
}
|
|
191
|
+
|
|
185
192
|
/**
|
|
186
193
|
* Checks if browser supports the promise-based version of the method requestPermission. Safari only supports the older callback version.
|
|
187
194
|
*/
|
|
@@ -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
|
|
@@ -12,12 +12,14 @@
|
|
|
12
12
|
@desktop-notification-margin-bottom: 10px;
|
|
13
13
|
|
|
14
14
|
.desktop-notifications {
|
|
15
|
+
@desktop-notifications-margin-top: @desktop-header-height + 8px;
|
|
16
|
+
|
|
15
17
|
position: fixed;
|
|
16
18
|
right: 10px;
|
|
17
19
|
top: 0;
|
|
18
|
-
height: 100
|
|
20
|
+
height: calc(~'100% - ' @desktop-notifications-margin-top);
|
|
19
21
|
width: @desktop-notification-width;
|
|
20
|
-
margin-top: @desktop-
|
|
22
|
+
margin-top: @desktop-notifications-margin-top;
|
|
21
23
|
pointer-events: none; /* Don't block access to the elements in the background */
|
|
22
24
|
}
|
|
23
25
|
|
|
@@ -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) {
|
|
@@ -58,10 +58,6 @@
|
|
|
58
58
|
line-height: @outline-node-control-line-height;
|
|
59
59
|
color: @outline-node-control-color;
|
|
60
60
|
|
|
61
|
-
&::before {
|
|
62
|
-
font-size: @outline-node-control-size;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
61
|
&:hover {
|
|
66
62
|
color: @highlight-color;
|
|
67
63
|
}
|
|
@@ -77,6 +73,10 @@
|
|
|
77
73
|
|
|
78
74
|
& > .tree-node-control {
|
|
79
75
|
color: @outline-node-selected-control-color;
|
|
76
|
+
|
|
77
|
+
&:hover {
|
|
78
|
+
color: @highlight-color;
|
|
79
|
+
}
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
& > .font-icon {
|
|
@@ -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
|
|
@@ -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;
|
|
@@ -65,14 +70,12 @@
|
|
|
65
70
|
|
|
66
71
|
&.left {
|
|
67
72
|
visibility: hidden;
|
|
68
|
-
|
|
69
|
-
animation: show-view-tab-left-edge @view-tab-transition-duration ease-out 0s forwards;
|
|
73
|
+
animation: show-view-tab-left-edge 40ms ease-out 160ms forwards;
|
|
70
74
|
}
|
|
71
75
|
|
|
72
76
|
&.right {
|
|
73
77
|
visibility: hidden;
|
|
74
|
-
|
|
75
|
-
animation: show-view-tab-right-edge @view-tab-transition-duration ease-out 0s forwards;
|
|
78
|
+
animation: show-view-tab-right-edge 40ms ease-out 160ms forwards;
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
}
|
|
@@ -127,15 +130,21 @@
|
|
|
127
130
|
}
|
|
128
131
|
|
|
129
132
|
@keyframes show-view-tab-left-edge {
|
|
130
|
-
|
|
133
|
+
0% {
|
|
131
134
|
visibility: visible;
|
|
132
|
-
|
|
135
|
+
left: -5px;
|
|
136
|
+
}
|
|
137
|
+
100% {
|
|
138
|
+
left: -12px;
|
|
133
139
|
}
|
|
134
140
|
}
|
|
135
141
|
|
|
136
142
|
@keyframes show-view-tab-right-edge {
|
|
137
|
-
|
|
143
|
+
0% {
|
|
138
144
|
visibility: visible;
|
|
139
|
-
|
|
145
|
+
right: -5px;
|
|
146
|
+
}
|
|
147
|
+
100% {
|
|
148
|
+
right: -12px;
|
|
140
149
|
}
|
|
141
150
|
}
|
|
@@ -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
|
|