@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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-scout/core",
|
|
3
|
-
"version": "22.0.
|
|
3
|
+
"version": "22.0.10",
|
|
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.10",
|
|
30
30
|
"@eclipse-scout/releng": "^22.0.0",
|
|
31
31
|
"jasmine-core": "3.10.1",
|
|
32
32
|
"jasmine-ajax": "4.0.0",
|
package/src/App.js
CHANGED
|
@@ -291,7 +291,7 @@ export default class App {
|
|
|
291
291
|
$loadingRoot.css('opacity', $loadingRoot.css('opacity'));
|
|
292
292
|
// Add animation listener before adding the classes to ensure the listener will always be triggered even while debugging
|
|
293
293
|
$loadingRoot.oneAnimationEnd(() => $loadingRoot.remove());
|
|
294
|
-
if ($loadingRoot.css('opacity')
|
|
294
|
+
if ($loadingRoot.css('opacity') === '1') {
|
|
295
295
|
$loadingRoot.addClass('fadeout and-more');
|
|
296
296
|
} else {
|
|
297
297
|
$loadingRoot.addClass('fadeout');
|
package/src/ErrorHandler.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {AjaxError, App, arrays, icons, NullLogger, scout, strings} from './index';
|
|
11
|
+
import {AjaxError, App, arrays, icons, logging, NullLogger, scout, strings} from './index';
|
|
12
12
|
import $ from 'jquery';
|
|
13
13
|
import sourcemappedStacktrace from 'sourcemapped-stacktrace';
|
|
14
14
|
|
|
@@ -37,25 +37,41 @@ export default class ErrorHandler {
|
|
|
37
37
|
// https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror
|
|
38
38
|
_onWindowError(errorMessage, fileName, lineNumber, columnNumber, error) {
|
|
39
39
|
try {
|
|
40
|
+
if (this._isIgnorableScriptError(errorMessage, fileName, lineNumber, columnNumber, error)) {
|
|
41
|
+
this.handleErrorInfo({
|
|
42
|
+
log: `Ignoring error. Message: ${errorMessage}`,
|
|
43
|
+
level: logging.Level.INFO
|
|
44
|
+
});
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
40
47
|
if (error instanceof Error) {
|
|
41
48
|
this.handle(error)
|
|
42
49
|
.catch(error => {
|
|
43
50
|
console.error('Error in global JavaScript error handler', error);
|
|
44
51
|
});
|
|
45
|
-
|
|
46
|
-
let code = 'J00';
|
|
47
|
-
let log = errorMessage + ' at ' + fileName + ':' + lineNumber + '\n(' + 'Code ' + code + ')';
|
|
48
|
-
this.handleErrorInfo({
|
|
49
|
-
code: code,
|
|
50
|
-
message: errorMessage,
|
|
51
|
-
log: log
|
|
52
|
-
});
|
|
52
|
+
return;
|
|
53
53
|
}
|
|
54
|
+
let code = 'J00';
|
|
55
|
+
let log = errorMessage + ' at ' + fileName + ':' + lineNumber + '\n(' + 'Code ' + code + ')';
|
|
56
|
+
this.handleErrorInfo({
|
|
57
|
+
code: code,
|
|
58
|
+
message: errorMessage,
|
|
59
|
+
log: log
|
|
60
|
+
});
|
|
54
61
|
} catch (err) {
|
|
55
62
|
throw new Error('Error in global JavaScript error handler: ' + err.message + ' (original error: ' + errorMessage + ' at ' + fileName + ':' + lineNumber + ')');
|
|
56
63
|
}
|
|
57
64
|
}
|
|
58
65
|
|
|
66
|
+
_isIgnorableScriptError(message, fileName, lineNumber, columnNumber, error) {
|
|
67
|
+
// Ignore errors caused by scripts from a different origin.
|
|
68
|
+
// Example: Firefox on iOS throws an error, probably caused by an internal Firefox script.
|
|
69
|
+
// The error does not affect the application and cannot be prevented by the app either since we don't know what script it is and what it does.
|
|
70
|
+
// In that case the error must no be shown to the user, instead just log it silently.
|
|
71
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror
|
|
72
|
+
return message && message.toLowerCase().indexOf('script error') > -1 && !fileName && !lineNumber && !columnNumber && !error;
|
|
73
|
+
}
|
|
74
|
+
|
|
59
75
|
/**
|
|
60
76
|
* Handles unexpected JavaScript errors. The arguments are first analyzed and then handled.
|
|
61
77
|
*
|
|
@@ -240,22 +256,9 @@ export default class ErrorHandler {
|
|
|
240
256
|
* - If there is a scout session and the flag "sendError" is set, the error is sent to the UI server.
|
|
241
257
|
*/
|
|
242
258
|
handleErrorInfo(errorInfo) {
|
|
259
|
+
errorInfo.level = scout.nvl(errorInfo.level, logging.Level.ERROR);
|
|
243
260
|
if (this.logError && errorInfo.log) {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
// Note: when the null-logger is active it has already written the error to the console
|
|
247
|
-
// when the $.log.error function has been called above, so we don't have to log again here.
|
|
248
|
-
let writeToConsole = ErrorHandler.CONSOLE_OUTPUT;
|
|
249
|
-
if ($.log instanceof NullLogger) {
|
|
250
|
-
writeToConsole = false;
|
|
251
|
-
}
|
|
252
|
-
if (writeToConsole && window && window.console) {
|
|
253
|
-
if (window.console.error) {
|
|
254
|
-
window.console.error(errorInfo.log);
|
|
255
|
-
} else if (window.console.log) {
|
|
256
|
-
window.console.log(errorInfo.log);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
261
|
+
this._logErrorInfo(errorInfo);
|
|
259
262
|
}
|
|
260
263
|
|
|
261
264
|
// Note: The error handler is installed globally and we cannot tell in which scout session the error happened.
|
|
@@ -263,16 +266,51 @@ export default class ErrorHandler {
|
|
|
263
266
|
// multi-session-case (portlet), but currently there is no other way. Besides, this feature is not in use yet.
|
|
264
267
|
if (App.get().sessions.length > 0) {
|
|
265
268
|
let session = App.get().sessions[0];
|
|
266
|
-
if (this.displayError) {
|
|
269
|
+
if (this.displayError && errorInfo.level === logging.Level.ERROR) {
|
|
267
270
|
this._showMessageBox(session, errorInfo.message, errorInfo.code, errorInfo.log);
|
|
268
271
|
}
|
|
269
272
|
if (this.sendError) {
|
|
270
|
-
this._sendErrorMessage(session, errorInfo.log);
|
|
273
|
+
this._sendErrorMessage(session, errorInfo.log, errorInfo.level);
|
|
271
274
|
}
|
|
272
275
|
}
|
|
273
276
|
return errorInfo;
|
|
274
277
|
}
|
|
275
278
|
|
|
279
|
+
_logErrorInfo(errorInfo) {
|
|
280
|
+
switch (errorInfo.level) {
|
|
281
|
+
case logging.Level.TRACE:
|
|
282
|
+
$.log.trace(errorInfo.log);
|
|
283
|
+
break;
|
|
284
|
+
case logging.Level.DEBUG:
|
|
285
|
+
$.log.debug(errorInfo.log);
|
|
286
|
+
break;
|
|
287
|
+
case logging.Level.INFO:
|
|
288
|
+
$.log.info(errorInfo.log);
|
|
289
|
+
break;
|
|
290
|
+
case logging.Level.WARN:
|
|
291
|
+
$.log.warn(errorInfo.log);
|
|
292
|
+
break;
|
|
293
|
+
default:
|
|
294
|
+
$.log.error(errorInfo.log);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Note: when the null-logger is active it has already written the error to the console
|
|
298
|
+
// when the $.log.error function has been called above, so we don't have to log again here.
|
|
299
|
+
let writeToConsole = ErrorHandler.CONSOLE_OUTPUT;
|
|
300
|
+
if ($.log instanceof NullLogger) {
|
|
301
|
+
writeToConsole = false;
|
|
302
|
+
}
|
|
303
|
+
if (writeToConsole && window && window.console) {
|
|
304
|
+
if (errorInfo.level === logging.Level.ERROR && window.console.error) {
|
|
305
|
+
window.console.error(errorInfo.log);
|
|
306
|
+
} else if (errorInfo.level === logging.Level.WARN && window.console.warn) {
|
|
307
|
+
window.console.warn(errorInfo.log);
|
|
308
|
+
} else if (window.console.log) {
|
|
309
|
+
window.console.log(errorInfo.log);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
276
314
|
/**
|
|
277
315
|
* Generate a "cool looking" error code from the JS error object, that
|
|
278
316
|
* does not reveal too much technical information, but at least indicates
|
|
@@ -325,7 +363,7 @@ export default class ErrorHandler {
|
|
|
325
363
|
session.showFatalMessage(options, errorCode);
|
|
326
364
|
}
|
|
327
365
|
|
|
328
|
-
_sendErrorMessage(session, logMessage) {
|
|
329
|
-
session.sendLogRequest(logMessage);
|
|
366
|
+
_sendErrorMessage(session, logMessage, logLevel) {
|
|
367
|
+
session.sendLogRequest(logMessage, logLevel);
|
|
330
368
|
}
|
|
331
369
|
}
|
|
@@ -10,13 +10,12 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import {keys, KeyStroke} from '../index';
|
|
12
12
|
|
|
13
|
-
export default class
|
|
13
|
+
export default class ActionExecKeyStroke extends KeyStroke {
|
|
14
14
|
|
|
15
|
-
constructor(
|
|
15
|
+
constructor(menu) {
|
|
16
16
|
super();
|
|
17
|
-
this.field =
|
|
18
|
-
this.which = [keys.
|
|
19
|
-
this.renderingHints.render = true;
|
|
17
|
+
this.field = menu;
|
|
18
|
+
this.which = [keys.SPACE, keys.ENTER];
|
|
20
19
|
this.stopPropagation = true;
|
|
21
20
|
}
|
|
22
21
|
|
package/src/action/Button.less
CHANGED
package/src/box/Box.less
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* Used for static pages like login, logout, unsupported-browser and noscript section.
|
|
13
13
|
* Note: This box must not depend on javascript because it is used for the noscript section as well.
|
|
14
14
|
*/
|
|
15
|
+
@box-responsive-width: @box-width + 40px;
|
|
16
|
+
|
|
15
17
|
.box {
|
|
16
18
|
display: table;
|
|
17
19
|
position: absolute;
|
|
@@ -26,9 +28,9 @@
|
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
.box-content {
|
|
29
|
-
border:
|
|
31
|
+
border: @popup-border-width solid @popup-border-color;
|
|
30
32
|
border-radius: @border-radius-large;
|
|
31
|
-
background-color: @background-color;
|
|
33
|
+
background-color: @popup-background-color;
|
|
32
34
|
max-width: @box-width;
|
|
33
35
|
margin: 0 auto;
|
|
34
36
|
padding: 45px 95px 50px 95px;
|
|
@@ -39,7 +41,7 @@
|
|
|
39
41
|
text-align: center;
|
|
40
42
|
|
|
41
43
|
& > .logo {
|
|
42
|
-
margin-top:
|
|
44
|
+
margin-top: 4px;
|
|
43
45
|
margin-bottom: 40px;
|
|
44
46
|
max-height: 30px;
|
|
45
47
|
}
|
|
@@ -64,13 +66,14 @@
|
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
|
|
67
|
-
@media (max-width:
|
|
69
|
+
@media (max-width: @box-responsive-width) {
|
|
68
70
|
.box-content {
|
|
69
71
|
& > .header > .logo {
|
|
70
|
-
margin-bottom:
|
|
72
|
+
margin-bottom: 30px;
|
|
73
|
+
margin-top: 0;
|
|
71
74
|
}
|
|
72
75
|
|
|
73
|
-
padding:
|
|
76
|
+
padding: 40px;
|
|
74
77
|
margin-left: 10px;
|
|
75
78
|
margin-right: 10px;
|
|
76
79
|
}
|
|
@@ -80,10 +83,11 @@
|
|
|
80
83
|
.box-content {
|
|
81
84
|
& > .header > .logo {
|
|
82
85
|
margin-bottom: 20px;
|
|
86
|
+
margin-top: 0;
|
|
83
87
|
}
|
|
84
88
|
|
|
85
|
-
padding-top:
|
|
86
|
-
padding-bottom:
|
|
89
|
+
padding-top: 25px;
|
|
90
|
+
padding-bottom: 25px;
|
|
87
91
|
}
|
|
88
92
|
}
|
|
89
93
|
|
|
@@ -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 => {
|
|
@@ -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
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
height: 100%;
|
|
16
16
|
color: @link-color;
|
|
17
17
|
font-size: @font-size-plus;
|
|
18
|
+
vertical-align: top;
|
|
18
19
|
|
|
19
20
|
&.last {
|
|
20
21
|
font-weight: bold;
|
|
@@ -24,10 +25,6 @@
|
|
|
24
25
|
color: @link-hover-color;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
&.first {
|
|
28
|
-
vertical-align: top;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
28
|
&:not(.first)::before {
|
|
32
29
|
#scout.font-icon();
|
|
33
30
|
content: @icon-angle-right-bold;
|
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
|
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
#scout {
|
|
40
40
|
|
|
41
41
|
.checkbox() {
|
|
42
|
+
cursor: pointer;
|
|
42
43
|
position: relative;
|
|
43
44
|
display: inline-block;
|
|
44
45
|
text-align: center;
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
.checkbox-disabled() {
|
|
70
|
+
cursor: default;
|
|
69
71
|
border-color: @check-box-disabled-border-color;
|
|
70
72
|
}
|
|
71
73
|
|
|
@@ -94,4 +96,4 @@
|
|
|
94
96
|
background-color: @check-box-checked-disabled-background-color;
|
|
95
97
|
border-color: @check-box-checked-disabled-background-color;
|
|
96
98
|
}
|
|
97
|
-
}
|
|
99
|
+
}
|
|
@@ -33,6 +33,7 @@ export default class DisableBrowserF5ReloadKeyStroke extends KeyStroke {
|
|
|
33
33
|
this.preventDefault = true;
|
|
34
34
|
this.keyStrokeFirePolicy = Action.KeyStrokeFirePolicy.ALWAYS; // ignore glass panes
|
|
35
35
|
this.renderingHints.render = false;
|
|
36
|
+
this.inheritAccessibility = false;
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
/**
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import {keys, RangeKeyStroke} from '../../index';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Composite keystroke to provide a numeric keystroke to select view tabs.
|
|
@@ -35,6 +35,7 @@ export default class DesktopTabSelectKeyStroke extends RangeKeyStroke {
|
|
|
35
35
|
let viewIndex = event.which - keys['1'];
|
|
36
36
|
return this._viewTabs()[viewIndex].$container;
|
|
37
37
|
};
|
|
38
|
+
this.inheritAccessibility = false;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
/**
|
|
@@ -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,6 +80,7 @@
|
|
|
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;
|
|
@@ -109,6 +111,7 @@
|
|
|
109
111
|
|
|
110
112
|
&.selected {
|
|
111
113
|
background-color: @simple-tab-selected-background-color;
|
|
114
|
+
border-color: transparent;
|
|
112
115
|
|
|
113
116
|
& > .title-line {
|
|
114
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
|
}
|