@eclipse-scout/core 22.0.0 → 22.0.10
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-e5e8740e3649f5b9f279.min.js +2 -0
- package/dist/eclipse-scout-core-e5e8740e3649f5b9f279.min.js.map +1 -0
- package/dist/eclipse-scout-core-theme-74b63e0d57bed407a729.min.css +1 -0
- package/dist/eclipse-scout-core-theme-dark-b82aea152f416e38ce7f.min.css +1 -0
- package/dist/eclipse-scout-core-theme-dark.css +597 -422
- package/dist/eclipse-scout-core-theme-dark.css.map +1 -1
- package/dist/eclipse-scout-core-theme.css +333 -158
- package/dist/eclipse-scout-core-theme.css.map +1 -1
- package/dist/eclipse-scout-core.js +1196 -811
- 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 +1 -1
- package/src/ErrorHandler.js +66 -28
- package/src/{table/TableHeaderMenuButtonKeyStroke.js → action/ActionExecKeyStroke.js} +4 -5
- package/src/action/Button.less +1 -0
- package/src/box/Box.less +12 -8
- package/src/breadcrumbbar/BreadcrumbBarLayout.js +2 -2
- package/src/breadcrumbbar/BreadcrumbItem.less +3 -6
- package/src/calendar/Calendar.js +40 -58
- package/src/calendar/Calendar.less +10 -10
- package/src/calendar/CalendarLayout.js +3 -1
- package/src/checkbox/CheckBox.less +3 -1
- package/src/datepicker/DatePicker.less +1 -0
- package/src/datepicker/DatePickerTouchPopup.js +8 -0
- package/src/desktop/DisableBrowserF5ReloadKeyStroke.js +1 -0
- package/src/desktop/bench/DesktopTabSelectKeyStroke.js +2 -1
- package/src/desktop/desktoptab/DesktopTab.less +5 -2
- package/src/desktop/desktoptab/DesktopTabArea.less +7 -3
- package/src/desktop/desktoptab/DesktopTabAreaLayout.js +1 -1
- package/src/desktop/desktoptab/DisableBrowserTabSwitchingKeyStroke.js +1 -0
- package/src/desktop/navigation/DesktopNavigation.less +4 -0
- package/src/desktop/navigation/EnlargeNavigationKeyStroke.js +1 -0
- package/src/desktop/navigation/ShrinkNavigationKeyStroke.js +1 -0
- package/src/desktop/notification/DesktopNotification.js +11 -4
- package/src/desktop/notification/DesktopNotification.less +5 -3
- package/src/desktop/outline/Outline.less +4 -4
- package/src/desktop/viewbutton/ViewButton.less +18 -9
- package/src/desktop/viewbutton/ViewMenuPopupEnterKeyStroke.js +2 -1
- package/src/desktop/viewbutton/ViewMenuTab.less +3 -2
- package/src/filechooser/FileChooser.js +1 -1
- package/src/filechooser/FileChooser.less +16 -11
- package/src/focus/FocusContext.js +11 -8
- package/src/focus/FocusManager.js +24 -5
- package/src/form/Form.less +1 -0
- package/src/form/fields/LookupBox.js +5 -2
- package/src/form/fields/LookupBox.less +28 -2
- package/src/form/fields/TextFieldIcon.less +2 -2
- package/src/form/fields/ValueField.js +11 -2
- package/src/form/fields/breadcrumbbarfield/BreadcrumbBarField.less +20 -0
- package/src/form/fields/button/ButtonKeyStroke.js +0 -3
- package/src/form/fields/datefield/DateField.js +31 -47
- package/src/form/fields/filechooserfield/FileChooserFieldBrowseKeyStroke.js +1 -3
- package/src/form/fields/filechooserfield/FileChooserFieldDeleteKeyStroke.js +1 -3
- package/src/form/fields/groupbox/GroupBox.js +14 -9
- package/src/form/fields/groupbox/GroupBox.less +1 -0
- package/src/form/fields/htmlfield/HtmlField.less +0 -1
- package/src/form/fields/listbox/ListBox.js +13 -7
- package/src/form/fields/lookupfield/lookupField.js +6 -5
- package/src/form/fields/smartfield/ProposalField.js +2 -1
- package/src/form/fields/smartfield/ProposalTreeNode.js +4 -8
- package/src/form/fields/smartfield/SmartField.js +4 -20
- package/src/form/fields/smartfield/SmartField.less +24 -11
- package/src/form/fields/splitbox/SplitBoxCollapseKeyStroke.js +1 -0
- package/src/form/fields/splitbox/SplitBoxFirstCollapseKeyStroke.js +1 -0
- package/src/form/fields/splitbox/SplitBoxSecondCollapseKeyStroke.js +1 -0
- package/src/form/fields/tabbox/TabAreaLayout.js +63 -66
- package/src/form/fields/tabbox/TabAreaLeftKeyStroke.js +2 -0
- package/src/form/fields/tabbox/TabAreaRightKeyStroke.js +2 -0
- package/src/form/fields/tabbox/TabBox.js +8 -7
- package/src/form/fields/tabbox/TabBox.less +2 -1
- package/src/form/fields/tabbox/TabBoxHeader.js +4 -0
- package/src/form/fields/tabbox/TabBoxHeaderLayout.js +5 -5
- package/src/form/fields/tabbox/TabItem.js +4 -0
- package/src/form/fields/treebox/TreeBox.js +6 -5
- package/src/glasspane/GlassPane.js +3 -3
- package/src/group/Group.less +1 -1
- package/src/index.js +1 -1
- package/src/index.less +1 -0
- package/src/jquery/jquery-scout.js +17 -4
- package/src/keystroke/CloseKeyStroke.js +1 -0
- package/src/keystroke/ContextMenuKeyStroke.js +1 -0
- package/src/keystroke/FocusFilterFieldKeyStroke.js +1 -0
- package/src/keystroke/KeyStroke.js +11 -3
- package/src/keystroke/TabItemKeyStroke.js +8 -5
- package/src/logging/logging.js +16 -8
- package/src/login/LoginBox.js +3 -2
- package/src/login/LoginBox.less +27 -8
- package/src/menu/ContextMenuPopup.less +9 -2
- package/src/menu/Menu.less +1 -0
- package/src/menu/MenuExecKeyStroke.js +3 -17
- package/src/menu/MenuNavigationKeyStroke.js +1 -0
- package/src/menu/menubar/MenuBarLeftKeyStroke.js +2 -0
- package/src/menu/menubar/MenuBarRightKeyStroke.js +2 -0
- package/src/messagebox/MessageBox.less +20 -20
- package/src/modeselector/Mode.less +15 -37
- package/src/modeselector/ModeSelector.js +1 -1
- package/src/modeselector/ModeSelector.less +2 -1
- package/src/planner/Planner.js +2 -0
- 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 +8 -5
- package/src/style/colors-dark.less +25 -11
- package/src/style/colors.less +17 -3
- package/src/style/fonts.less +10 -1
- package/src/style/mixins.less +21 -14
- package/src/style/sizes-dark.less +4 -1
- package/src/style/sizes.less +17 -9
- package/src/table/Table.js +63 -49
- package/src/table/Table.less +50 -20
- package/src/table/TableAdapter.js +9 -12
- 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/TableHeaderMenuButton.js +2 -2
- package/src/table/TableLayout.js +6 -0
- package/src/table/columns/BooleanColumn.js +2 -2
- package/src/table/columns/Column.js +10 -7
- package/src/table/columns/ColumnOptimalWidthMeasurer.js +1 -1
- package/src/table/editor/CellEditorPopup.js +29 -15
- package/src/table/keystrokes/AbstractTableNavigationKeyStroke.js +1 -0
- package/src/table/keystrokes/TableCopyKeyStroke.js +1 -0
- package/src/table/keystrokes/TableNavigationCollapseKeyStroke.js +2 -2
- package/src/table/keystrokes/TableNavigationEndKeyStroke.js +2 -2
- package/src/table/keystrokes/TableNavigationExpandKeyStroke.js +2 -2
- package/src/table/keystrokes/TableNavigationHomeKeyStroke.js +2 -2
- package/src/table/keystrokes/TableNavigationPageDownKeyStroke.js +2 -2
- package/src/table/keystrokes/TableNavigationPageUpKeyStroke.js +2 -2
- package/src/table/keystrokes/TableNavigationUpKeyStroke.js +2 -2
- package/src/table/keystrokes/TableRefreshKeyStroke.js +2 -2
- package/src/table/keystrokes/TableSelectAllKeyStroke.js +3 -2
- package/src/table/keystrokes/TableStartCellEditKeyStroke.js +2 -2
- package/src/tagbar/TagBarOverflowPopupLayout.js +1 -1
- package/src/testing/index.js +1 -0
- package/src/testing/lookup/AbortableMicrotaskStaticLookupCall.js +50 -0
- package/src/tile/TileGrid.js +10 -12
- 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/tablefield/TileTableField.less +19 -2
- package/src/tile/keystrokes/TileGridSelectKeyStroke.js +3 -2
- package/src/timepicker/TimePickerTouchPopup.js +8 -0
- package/src/tree/CompactTree.less +1 -1
- package/src/tree/LazyNodeFilter.js +4 -2
- package/src/tree/Tree.js +7 -5
- package/src/tree/Tree.less +13 -5
- package/src/tree/keystrokes/AbstractTreeNavigationKeyStroke.js +1 -0
- package/src/tree/keystrokes/TreeCollapseAllKeyStroke.js +2 -2
- package/src/tree/keystrokes/TreeExpandOrDrillDownKeyStroke.js +2 -2
- package/src/tree/keystrokes/TreeNavigationDownKeyStroke.js +2 -2
- package/src/tree/keystrokes/TreeNavigationEndKeyStroke.js +2 -2
- package/src/tree/keystrokes/TreeNavigationUpKeyStroke.js +2 -2
- package/src/util/Device.js +4 -4
- package/src/util/arrays.js +44 -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 +1 -1
- package/src/widget/Widget.js +17 -7
package/src/login/LoginBox.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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
|
|
6
|
-
*
|
|
6
|
+
* https://www.eclipse.org/legal/epl-v10.html
|
|
7
7
|
*
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
@@ -56,6 +56,7 @@ export default class LoginBox extends Box {
|
|
|
56
56
|
if (this.messageKey) {
|
|
57
57
|
this.$message = $('<div>')
|
|
58
58
|
.attr('id', 'message-box')
|
|
59
|
+
.addClass('message-box')
|
|
59
60
|
.html(strings.nl2br(this.texts.get(this.messageKey)))
|
|
60
61
|
.appendTo(this.$form);
|
|
61
62
|
}
|
package/src/login/LoginBox.less
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
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
|
|
6
|
-
*
|
|
6
|
+
* https://www.eclipse.org/legal/epl-v10.html
|
|
7
7
|
*
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
@@ -19,6 +19,11 @@
|
|
|
19
19
|
|
|
20
20
|
& > .button {
|
|
21
21
|
margin-top: 16px;
|
|
22
|
+
margin-bottom: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
& > .message-box {
|
|
26
|
+
margin: 0 20px 12px 20px;
|
|
22
27
|
}
|
|
23
28
|
|
|
24
29
|
& > input.alternative:-webkit-autofill {
|
|
@@ -53,18 +58,20 @@
|
|
|
53
58
|
*/
|
|
54
59
|
.login-button.default {
|
|
55
60
|
|
|
56
|
-
&.login-error {
|
|
57
|
-
border-color:
|
|
58
|
-
background-color: @
|
|
61
|
+
&.login-error:not(.disabled) {
|
|
62
|
+
border-color: transparent;
|
|
63
|
+
background-color: @error-color;
|
|
59
64
|
|
|
60
65
|
&:hover {
|
|
61
|
-
background-color: @
|
|
62
|
-
border-color: @palette-red-4;
|
|
66
|
+
background-color: @error-default-button-background-hover-color;
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
&:active {
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
background-color: @error-default-button-background-active-color;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
&:focus {
|
|
74
|
+
#scout.focus-border(@box-shadow-color: @error-focus-box-shadow-color, @border-color: mix(@error-color, @error-focus-box-shadow-color, 25%));
|
|
68
75
|
}
|
|
69
76
|
}
|
|
70
77
|
|
|
@@ -91,3 +98,15 @@
|
|
|
91
98
|
#scout.animation(nop 0.05s);
|
|
92
99
|
}
|
|
93
100
|
}
|
|
101
|
+
|
|
102
|
+
@media (max-width: @box-responsive-width) {
|
|
103
|
+
.login-box-content > form {
|
|
104
|
+
& > .message-box,
|
|
105
|
+
& > input,
|
|
106
|
+
& > .button {
|
|
107
|
+
width: 100%;
|
|
108
|
+
margin-left: 0;
|
|
109
|
+
margin-right: 0;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -53,14 +53,21 @@
|
|
|
53
53
|
&.selected {
|
|
54
54
|
background-color: @item-selection-background-color;
|
|
55
55
|
|
|
56
|
+
&.has-popup {
|
|
57
|
+
color: @context-menu-item-color;
|
|
58
|
+
|
|
59
|
+
&.disabled {
|
|
60
|
+
color: @menu-item-disabled-color;
|
|
61
|
+
background-color: @item-selection-background-color;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
56
65
|
& > .submenu-icon {
|
|
57
66
|
transform: none;
|
|
58
67
|
}
|
|
59
68
|
}
|
|
60
69
|
|
|
61
70
|
&.expanded {
|
|
62
|
-
color: @active-color;
|
|
63
|
-
|
|
64
71
|
& > .submenu-icon {
|
|
65
72
|
#scout.submenu-icon-open();
|
|
66
73
|
}
|
package/src/menu/Menu.less
CHANGED
|
@@ -8,26 +8,12 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import {ActionExecKeyStroke} from '../index';
|
|
12
12
|
|
|
13
|
-
export default class MenuExecKeyStroke extends
|
|
13
|
+
export default class MenuExecKeyStroke extends ActionExecKeyStroke {
|
|
14
14
|
|
|
15
15
|
constructor(menu) {
|
|
16
|
-
super();
|
|
17
|
-
this.field = menu;
|
|
18
|
-
this.which = [keys.SPACE, keys.ENTER];
|
|
19
|
-
this.stopPropagation = true;
|
|
20
|
-
|
|
16
|
+
super(menu);
|
|
21
17
|
this.renderingHints.offset = 16;
|
|
22
|
-
this.renderingHints.$drawingArea = function($drawingArea, event) {
|
|
23
|
-
return this.field.$container;
|
|
24
|
-
}.bind(this);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @override KeyStroke.js
|
|
29
|
-
*/
|
|
30
|
-
handle(event) {
|
|
31
|
-
this.field.doAction();
|
|
32
18
|
}
|
|
33
19
|
}
|
|
@@ -12,6 +12,7 @@ import {keys, KeyStroke} from '../../index';
|
|
|
12
12
|
|
|
13
13
|
export default class MenuBarLeftKeyStroke extends KeyStroke {
|
|
14
14
|
|
|
15
|
+
// noinspection DuplicatedCode
|
|
15
16
|
constructor(menuBar) {
|
|
16
17
|
super();
|
|
17
18
|
this.field = menuBar;
|
|
@@ -19,6 +20,7 @@ export default class MenuBarLeftKeyStroke extends KeyStroke {
|
|
|
19
20
|
this.renderingHints.render = false;
|
|
20
21
|
this.stopPropagation = true;
|
|
21
22
|
this.keyStrokeMode = KeyStroke.Mode.DOWN;
|
|
23
|
+
this.inheritAccessibility = false;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
handle(event) {
|
|
@@ -12,6 +12,7 @@ import {keys, KeyStroke} from '../../index';
|
|
|
12
12
|
|
|
13
13
|
export default class MenuBarRightKeyStroke extends KeyStroke {
|
|
14
14
|
|
|
15
|
+
// noinspection DuplicatedCode
|
|
15
16
|
constructor(menuBar) {
|
|
16
17
|
super();
|
|
17
18
|
this.field = menuBar;
|
|
@@ -19,6 +20,7 @@ export default class MenuBarRightKeyStroke extends KeyStroke {
|
|
|
19
20
|
this.renderingHints.render = false;
|
|
20
21
|
this.stopPropagation = true;
|
|
21
22
|
this.keyStrokeMode = KeyStroke.Mode.DOWN;
|
|
23
|
+
this.inheritAccessibility = false;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
handle(event) {
|
|
@@ -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
|
|
@@ -22,6 +22,22 @@
|
|
|
22
22
|
border-radius: 0;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
&.full-width {
|
|
26
|
+
& > .messagebox-buttons {
|
|
27
|
+
padding-left: 10px;
|
|
28
|
+
padding-right: 10px;
|
|
29
|
+
|
|
30
|
+
& > .box-button {
|
|
31
|
+
min-width: 70px; /* less min width for buttons on small screens */
|
|
32
|
+
margin-right: 8px;
|
|
33
|
+
|
|
34
|
+
&:last-child {
|
|
35
|
+
margin-right: 0;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
25
41
|
.severity-button(@color, @hover-color: darken(@color, 6%), @active-color: darken(@color, 13%), @focus-color: @focus-box-shadow-color) {
|
|
26
42
|
& > .box-buttons > .box-button {
|
|
27
43
|
border-color: @color;
|
|
@@ -88,7 +104,7 @@
|
|
|
88
104
|
}
|
|
89
105
|
}
|
|
90
106
|
|
|
91
|
-
.severity-button(@error-color, @
|
|
107
|
+
.severity-button(@error-color, @error-default-button-background-hover-color, @error-default-button-background-active-color, @error-focus-box-shadow-color);
|
|
92
108
|
}
|
|
93
109
|
|
|
94
110
|
&.warning {
|
|
@@ -100,7 +116,7 @@
|
|
|
100
116
|
}
|
|
101
117
|
}
|
|
102
118
|
|
|
103
|
-
.severity-button(@warning-color, @
|
|
119
|
+
.severity-button(@warning-color, @warning-default-button-background-hover-color, @warning-default-button-background-active-color, @warning-focus-box-shadow-color);
|
|
104
120
|
}
|
|
105
121
|
|
|
106
122
|
&.ok {
|
|
@@ -112,7 +128,7 @@
|
|
|
112
128
|
}
|
|
113
129
|
}
|
|
114
130
|
|
|
115
|
-
.severity-button(@ok-color, @
|
|
131
|
+
.severity-button(@ok-color, @ok-default-button-background-hover-color, @ok-default-button-background-active-color, @ok-focus-box-shadow-color);
|
|
116
132
|
}
|
|
117
133
|
|
|
118
134
|
&.animate-open {
|
|
@@ -225,23 +241,7 @@
|
|
|
225
241
|
|
|
226
242
|
@media (max-width: @messagebox-max-width) {
|
|
227
243
|
.messagebox {
|
|
228
|
-
/* reduce message box width on small screens */
|
|
229
|
-
max-width: 330px;
|
|
230
244
|
/* no need to have a margin on small screens */
|
|
231
245
|
margin: 0;
|
|
232
|
-
|
|
233
|
-
& > .messagebox-buttons {
|
|
234
|
-
padding-left: 10px;
|
|
235
|
-
padding-right: 10px;
|
|
236
|
-
|
|
237
|
-
& > .box-button {
|
|
238
|
-
min-width: 70px; /* less min width for buttons on small screens */
|
|
239
|
-
margin-right: 8px;
|
|
240
|
-
|
|
241
|
-
&:last-child {
|
|
242
|
-
margin-right: 0;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
246
|
}
|
|
247
247
|
}
|
|
@@ -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
|
|
@@ -9,10 +9,14 @@
|
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
11
|
.mode {
|
|
12
|
-
|
|
12
|
+
--padding-x: @mode-padding-x;
|
|
13
|
+
--padding-y: @mode-padding-y;
|
|
14
|
+
--border-width: @mode-border-width;
|
|
15
|
+
|
|
16
|
+
border: var(--border-width) solid @control-border-color;
|
|
13
17
|
border-radius: 0;
|
|
14
18
|
flex: 1 1 0;
|
|
15
|
-
padding:
|
|
19
|
+
padding: var(--padding-y) var(--padding-x);
|
|
16
20
|
#scout.overflow-ellipsis();
|
|
17
21
|
|
|
18
22
|
&.first {
|
|
@@ -29,12 +33,12 @@
|
|
|
29
33
|
|
|
30
34
|
&:not(.last):not(.selected) {
|
|
31
35
|
border-right: none;
|
|
32
|
-
padding-right:
|
|
36
|
+
padding-right: calc(var(--padding-x) + var(--border-width)); /* account for the missing border, so that text does not jump */
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
&.after-selected {
|
|
36
40
|
border-left: none;
|
|
37
|
-
padding-left:
|
|
41
|
+
padding-left: calc(var(--padding-x) + var(--border-width)); /* account for the missing border, so that text does not jump */
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
// override button (the selected mode cannot be clicked. therefore do not show hover and active colors)
|
|
@@ -68,28 +72,20 @@
|
|
|
68
72
|
}
|
|
69
73
|
|
|
70
74
|
.mode-selector.alternative {
|
|
71
|
-
border: @mode-alternative-border-width solid transparent;
|
|
72
75
|
|
|
73
76
|
& > .mode {
|
|
77
|
+
--border-width: 0px;
|
|
78
|
+
|
|
74
79
|
color: @mode-color;
|
|
75
|
-
border: none;
|
|
76
80
|
background-color: transparent;
|
|
77
81
|
border-radius: @button-border-radius;
|
|
78
82
|
|
|
79
|
-
&:not(.last):not(.selected) {
|
|
80
|
-
padding-right: @mode-padding-x;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
&.after-selected {
|
|
84
|
-
padding-left: @mode-padding-x;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
83
|
&:hover {
|
|
88
|
-
background-color:
|
|
84
|
+
background-color: @mode-alternative-hover-background-color;
|
|
89
85
|
}
|
|
90
86
|
|
|
91
87
|
&:active {
|
|
92
|
-
background-color:
|
|
88
|
+
background-color: @mode-alternative-active-background-color;
|
|
93
89
|
}
|
|
94
90
|
|
|
95
91
|
&.selected {
|
|
@@ -120,26 +116,8 @@
|
|
|
120
116
|
}
|
|
121
117
|
|
|
122
118
|
.dense .mode-selector {
|
|
123
|
-
|
|
124
119
|
& > .mode {
|
|
125
|
-
padding: @mode-padding-dense;
|
|
126
|
-
|
|
127
|
-
&:not(.last):not(.selected) {
|
|
128
|
-
padding-right: @mode-padding-dense-x + @mode-border-width; /* account for the missing border, so that text does not jump */
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
&.after-selected {
|
|
132
|
-
padding-left: @mode-padding-dense-x + @mode-border-width; /* account for the missing border, so that text does not jump */
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
&.alternative > .mode {
|
|
137
|
-
&:not(.last):not(.selected) {
|
|
138
|
-
padding-right: @mode-padding-dense-x;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
&.after-selected {
|
|
142
|
-
padding-left: @mode-padding-dense-x;
|
|
143
|
-
}
|
|
120
|
+
--padding-x: @mode-padding-dense-x;
|
|
121
|
+
--padding-y: @mode-padding-dense-y;
|
|
144
122
|
}
|
|
145
123
|
}
|
|
@@ -133,7 +133,7 @@ export default class ModeSelector extends Widget {
|
|
|
133
133
|
let selectedModePosX = 0, selectedModeWidth = 0;
|
|
134
134
|
if (this.selectedMode && this.selectedMode.$container) {
|
|
135
135
|
selectedModePosX = graphics.position(this.selectedMode.$container).x;
|
|
136
|
-
selectedModeWidth = graphics.size(this.selectedMode.$container).width;
|
|
136
|
+
selectedModeWidth = graphics.size(this.selectedMode.$container, {exact: true}).width;
|
|
137
137
|
}
|
|
138
138
|
this.$slider.cssLeft(selectedModePosX);
|
|
139
139
|
this.$slider.cssWidth(selectedModeWidth);
|
|
@@ -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
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
&.alternative {
|
|
23
23
|
background-color: @mode-alternative-background-color;
|
|
24
24
|
border-radius: @button-border-radius;
|
|
25
|
+
border: @mode-selector-alternative-border-width solid transparent;
|
|
25
26
|
|
|
26
27
|
&:not(.disabled) > .mode-slider {
|
|
27
28
|
display: block;
|
package/src/planner/Planner.js
CHANGED
|
@@ -1533,6 +1533,8 @@ export default class Planner extends Widget {
|
|
|
1533
1533
|
this._renderViewRange();
|
|
1534
1534
|
this._rerenderActivities();
|
|
1535
1535
|
this._renderSelectedActivity();
|
|
1536
|
+
this.validateLayoutTree(); // Layouting is required for adjusting the scroll position
|
|
1537
|
+
this._reconcileScrollPos();
|
|
1536
1538
|
}
|
|
1537
1539
|
}
|
|
1538
1540
|
|
package/src/popup/Popup.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,7 +8,7 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {CloseKeyStroke, DialogLayout, Dimension, Event, FocusRule, GlassPaneRenderer, graphics, HtmlComponent, Insets, KeyStrokeContext, Point, PopupLayout, Rectangle, scout, scrollbars, strings, Widget} from '../index';
|
|
11
|
+
import {CloseKeyStroke, DialogLayout, Dimension, Event, FocusRule, GlassPaneRenderer, graphics, HtmlComponent, Insets, KeyStrokeContext, Point, PopupLayout, Rectangle, scout, scrollbars, strings, Widget, widgets} from '../index';
|
|
12
12
|
import $ from 'jquery';
|
|
13
13
|
|
|
14
14
|
export default class Popup extends Widget {
|
|
@@ -185,18 +185,17 @@ export default class Popup extends Widget {
|
|
|
185
185
|
|
|
186
186
|
_openWithoutParent() {
|
|
187
187
|
// resolve parent for entry-point (don't change the actual property)
|
|
188
|
-
|
|
189
|
-
if (parent.destroyed) {
|
|
188
|
+
if (this.parent.destroyed) {
|
|
190
189
|
return;
|
|
191
190
|
}
|
|
192
|
-
if (parent.rendered || parent.rendering) {
|
|
193
|
-
this.open(
|
|
191
|
+
if (this.parent.rendered || this.parent.rendering) {
|
|
192
|
+
this.open(this._getDefaultOpen$Parent());
|
|
194
193
|
return;
|
|
195
194
|
}
|
|
196
195
|
|
|
197
196
|
// This is important for popups rendered in another (native) browser window. The DOM in the popup window
|
|
198
197
|
// is rendered later, so we must wait until that window is rendered and layouted. See popup-window.html.
|
|
199
|
-
parent.one('render', () => {
|
|
198
|
+
this.parent.one('render', () => {
|
|
200
199
|
this.session.layoutValidator.schedulePostValidateFunction(() => {
|
|
201
200
|
if (this.destroyed || this.rendered) {
|
|
202
201
|
return;
|
|
@@ -206,6 +205,14 @@ export default class Popup extends Widget {
|
|
|
206
205
|
});
|
|
207
206
|
}
|
|
208
207
|
|
|
208
|
+
/**
|
|
209
|
+
* Only called if parent.rendered or parent.rendering
|
|
210
|
+
* @return {$}
|
|
211
|
+
*/
|
|
212
|
+
_getDefaultOpen$Parent() {
|
|
213
|
+
return this.parent.entryPoint();
|
|
214
|
+
}
|
|
215
|
+
|
|
209
216
|
open($parent) {
|
|
210
217
|
if (!$parent) {
|
|
211
218
|
this._openWithoutParent();
|
|
@@ -442,6 +449,15 @@ export default class Popup extends Widget {
|
|
|
442
449
|
return cssClass;
|
|
443
450
|
}
|
|
444
451
|
|
|
452
|
+
_animateRemovalWhileRemovingParent() {
|
|
453
|
+
if (!this.$anchor) {
|
|
454
|
+
// Allow remove animations for popups without an anchor
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
// If parent is the anchor, prevent remove animation to ensure popup will be removed together with the anchor
|
|
458
|
+
return widgets.get(this.$anchor) !== this.parent;
|
|
459
|
+
}
|
|
460
|
+
|
|
445
461
|
_isRemovalPrevented() {
|
|
446
462
|
// If removal of a parent is pending due to an animation then don't return true to make sure popups are closed before the parent animation starts.
|
|
447
463
|
// However, if the popup itself is removed by an animation, removal should be prevented to ensure remove() won't run multiple times.
|
|
@@ -1037,7 +1053,7 @@ export default class Popup extends Widget {
|
|
|
1037
1053
|
|
|
1038
1054
|
_handleGlassPanes() {
|
|
1039
1055
|
let parentCoveredByGlassPane = this.session.focusManager.isElementCovertByGlassPane(this.parent.$container);
|
|
1040
|
-
// if a popup is covered by a glass pane the glass pane's need to be
|
|
1056
|
+
// if a popup is covered by a glass pane the glass pane's need to be re-rendered to ensure a glass pane is also painted over the popup
|
|
1041
1057
|
if (parentCoveredByGlassPane) {
|
|
1042
1058
|
this.session.focusManager.rerenderGlassPanes();
|
|
1043
1059
|
}
|
package/src/popup/PopupLayout.js
CHANGED
|
@@ -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
|
|
@@ -135,9 +135,6 @@ export default class PopupLayout extends AbstractLayout {
|
|
|
135
135
|
* @returns {Dimension}
|
|
136
136
|
*/
|
|
137
137
|
_calcMaxSize() {
|
|
138
|
-
// Position the popup at the desired location before doing any calculations to consider the preferred bounds
|
|
139
|
-
this._position(false);
|
|
140
|
-
|
|
141
138
|
let maxWidth, maxHeight,
|
|
142
139
|
htmlComp = this.popup.htmlComp,
|
|
143
140
|
windowPaddingX = this.popup.windowPaddingX,
|
|
@@ -159,7 +156,7 @@ export default class PopupLayout extends AbstractLayout {
|
|
|
159
156
|
horizontalAlignment = this.popup.horizontalAlignment,
|
|
160
157
|
verticalAlignment = this.popup.verticalAlignment;
|
|
161
158
|
|
|
162
|
-
// Decide whether the prefSize can be used or the popup needs to be
|
|
159
|
+
// Decide whether the prefSize can be used or the popup needs to be shrunken so that it fits into the viewport
|
|
163
160
|
// The decision is based on the preferred opening direction
|
|
164
161
|
// Example: The popup would like to be opened leftedge and bottom
|
|
165
162
|
// If there is enough space on the right and on the bottom -> pref size is used
|
|
@@ -219,9 +216,6 @@ export default class PopupLayout extends AbstractLayout {
|
|
|
219
216
|
* @returns {Insets}
|
|
220
217
|
*/
|
|
221
218
|
_calcMaxSizeAroundAnchor() {
|
|
222
|
-
// Position the popup at the desired location before doing any calculations because positioning adds CSS classes which might change margins
|
|
223
|
-
this._position(false);
|
|
224
|
-
|
|
225
219
|
let maxWidthLeft, maxWidthRight, maxHeightDown, maxHeightUp,
|
|
226
220
|
htmlComp = this.popup.htmlComp,
|
|
227
221
|
windowPaddingX = this.popup.windowPaddingX,
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
transition: box-shadow 250ms;
|
|
134
134
|
position: absolute;
|
|
135
135
|
pointer-events: none;
|
|
136
|
-
z-index: 1; // ensure shadow
|
|
136
|
+
z-index: 1; // ensure shadow lays over elements having a z-index
|
|
137
137
|
|
|
138
138
|
#scout.scroll-shadow();
|
|
139
139
|
|
|
@@ -157,6 +157,13 @@
|
|
|
157
157
|
--scroll-shadow-size: @scroll-shadow-size;
|
|
158
158
|
--scroll-shadow-blur: @scroll-shadow-blur;
|
|
159
159
|
--scroll-shadow-spread: @scroll-shadow-spread;
|
|
160
|
+
|
|
161
|
+
// Allow a widget to adjust the size of the shadow container
|
|
162
|
+
--scroll-shadow-inset-top: 0;
|
|
163
|
+
--scroll-shadow-inset-right: 0;
|
|
164
|
+
--scroll-shadow-inset-bottom: 0;
|
|
165
|
+
--scroll-shadow-inset-left: 0;
|
|
166
|
+
|
|
160
167
|
@scroll-shadow-blur-spread-color: var(--scroll-shadow-blur) calc(-1 * var(--scroll-shadow-spread)) var(--scroll-shadow-color);
|
|
161
168
|
@scroll-shadow-top: inset 0 var(--scroll-shadow-size) @scroll-shadow-blur-spread-color;
|
|
162
169
|
@scroll-shadow-bottom: inset 0 calc(-1 * var(--scroll-shadow-size)) @scroll-shadow-blur-spread-color;
|
|
@@ -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 {arrays, Device, graphics, HtmlComponent, objects, scout} from '../index';
|
|
11
|
+
import {arrays, Device, graphics, HtmlComponent, Insets, objects, scout} from '../index';
|
|
12
12
|
import $ from 'jquery';
|
|
13
13
|
|
|
14
14
|
/**
|
|
@@ -159,6 +159,17 @@ export function installScrollShadow($container, session, options) {
|
|
|
159
159
|
_installMutationObserver(session);
|
|
160
160
|
_installIntersectionObserver();
|
|
161
161
|
intersectionObserver.observe($container[0]);
|
|
162
|
+
|
|
163
|
+
// this is required in addition to the intersection observer because the observer events are handled asynchronously later after all the setTimeout calls.
|
|
164
|
+
// Then the shadow might stay visible too long which has an impact on layout updates.
|
|
165
|
+
let containerElement = $container[0];
|
|
166
|
+
let visibleListener = e => {
|
|
167
|
+
if (e.target === containerElement) {
|
|
168
|
+
_onScrollableVisibleChange(containerElement, e.type === 'show');
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
$container.data('scroll-shadow-visible-listener', visibleListener);
|
|
172
|
+
$container.on('hide show', visibleListener);
|
|
162
173
|
}
|
|
163
174
|
|
|
164
175
|
export function uninstallScrollShadow($container, session) {
|
|
@@ -177,6 +188,10 @@ export function uninstallScrollShadow($container, session) {
|
|
|
177
188
|
if (intersectionObserver) {
|
|
178
189
|
intersectionObserver.unobserve($container[0]);
|
|
179
190
|
}
|
|
191
|
+
let visibleListener = $container.data('scroll-shadow-visible-listener');
|
|
192
|
+
if (visibleListener) {
|
|
193
|
+
$container.off('hide show', visibleListener);
|
|
194
|
+
}
|
|
180
195
|
let $scrollables = _$scrollables[session];
|
|
181
196
|
if (!$scrollables || !$scrollables.some($scrollable => $scrollable.data('scroll-shadow'))) {
|
|
182
197
|
_uninstallMutationObserver();
|
|
@@ -237,7 +252,7 @@ export function updateScrollShadow($container) {
|
|
|
237
252
|
$shadow.toggleClass('bottom', !atBottom && style.indexOf('bottom') > -1);
|
|
238
253
|
$shadow.toggleClass('left', !atLeft && style.indexOf('left') > -1);
|
|
239
254
|
$shadow.toggleClass('right', !atRight && style.indexOf('right') > -1);
|
|
240
|
-
graphics.setBounds($shadow, graphics.bounds($container, {exact: true}));
|
|
255
|
+
graphics.setBounds($shadow, graphics.bounds($container, {exact: true}).subtract(insets($shadow)));
|
|
241
256
|
graphics.setMargins($shadow, graphics.margins($container));
|
|
242
257
|
$shadow.css('border-radius', $container.css('border-radius'));
|
|
243
258
|
|
|
@@ -253,6 +268,13 @@ export function updateScrollShadow($container) {
|
|
|
253
268
|
function atEnd(scrollPos, scrollSize, offsetSize) {
|
|
254
269
|
return scrollPos + 1 >= scrollSize - offsetSize;
|
|
255
270
|
}
|
|
271
|
+
|
|
272
|
+
function insets($shadow) {
|
|
273
|
+
return new Insets($shadow.cssPxValue('--scroll-shadow-inset-top'),
|
|
274
|
+
$shadow.cssPxValue('--scroll-shadow-inset-right'),
|
|
275
|
+
$shadow.cssPxValue('--scroll-shadow-inset-bottom'),
|
|
276
|
+
$shadow.cssPxValue('--scroll-shadow-inset-left'));
|
|
277
|
+
}
|
|
256
278
|
}
|
|
257
279
|
|
|
258
280
|
/**
|
|
@@ -726,7 +748,7 @@ export function scrollToBottom($scrollable, options) {
|
|
|
726
748
|
/**
|
|
727
749
|
* @param location object with x and y properties
|
|
728
750
|
* @param $scrollables one or more scrollables to check against
|
|
729
|
-
* @
|
|
751
|
+
* @returns {boolean} true if the location is visible in the current viewport of all the $scrollables, or if $scrollables is null
|
|
730
752
|
*/
|
|
731
753
|
export function isLocationInView(location, $scrollables) {
|
|
732
754
|
if (!$scrollables || $scrollables.length === 0) {
|
package/src/session/Session.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {AjaxCall, App, arrays, BackgroundJobPollingStatus, BackgroundJobPollingSupport, Device, EventSupport, FileInput, files as fileUtil, FocusManager, fonts, icons, LayoutValidator, Locale, MessageBox, ModelAdapter, NullWidget, ObjectFactory, objects, Reconnector, RemoteEvent, ResponseQueue, scout, Status, strings, TextMap, texts, TypeDescriptor, URL, UserAgent, webstorage} from '../index';
|
|
11
|
+
import {AjaxCall, App, arrays, BackgroundJobPollingStatus, BackgroundJobPollingSupport, Device, EventSupport, FileInput, files as fileUtil, FocusManager, fonts, icons, LayoutValidator, Locale, logging, MessageBox, ModelAdapter, NullWidget, ObjectFactory, objects, Reconnector, RemoteEvent, ResponseQueue, scout, Status, strings, TextMap, texts, TypeDescriptor, URL, UserAgent, webstorage} from '../index';
|
|
12
12
|
import $ from 'jquery';
|
|
13
13
|
|
|
14
14
|
export default class Session {
|
|
@@ -1364,13 +1364,16 @@ export default class Session {
|
|
|
1364
1364
|
}
|
|
1365
1365
|
|
|
1366
1366
|
/**
|
|
1367
|
-
* Sends a request containing the
|
|
1368
|
-
* The request is sent immediately (does not await pending requests)
|
|
1367
|
+
* Sends a request containing the log message for logging purpose.
|
|
1368
|
+
* The request is sent immediately (does not await pending requests).
|
|
1369
|
+
* @param {string} message the log message
|
|
1370
|
+
* @param {logging.Level} [level] the log level used to log the message. Default is {@link logging.Level.ERROR}.
|
|
1369
1371
|
*/
|
|
1370
|
-
sendLogRequest(message) {
|
|
1372
|
+
sendLogRequest(message, level) {
|
|
1371
1373
|
let request = this._newRequest({
|
|
1372
1374
|
log: true,
|
|
1373
|
-
message: message
|
|
1375
|
+
message: message,
|
|
1376
|
+
level: scout.nvl(level, logging.Level.ERROR)
|
|
1374
1377
|
});
|
|
1375
1378
|
if (this.currentEvent) {
|
|
1376
1379
|
request.event = {
|