@theia/core 1.18.0 → 1.21.0-next.12
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/README.md +3 -2
- package/lib/browser/about-dialog.d.ts.map +1 -1
- package/lib/browser/about-dialog.js +1 -1
- package/lib/browser/about-dialog.js.map +1 -1
- package/lib/browser/authentication-service.d.ts.map +1 -1
- package/lib/browser/authentication-service.js +1 -1
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/color-registry.d.ts +3 -69
- package/lib/browser/color-registry.d.ts.map +1 -1
- package/lib/browser/color-registry.js +13 -27
- package/lib/browser/color-registry.js.map +1 -1
- package/lib/browser/common-frontend-contribution.d.ts +7 -13
- package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/common-frontend-contribution.js +213 -250
- package/lib/browser/common-frontend-contribution.js.map +1 -1
- package/lib/browser/core-preferences.d.ts +1 -0
- package/lib/browser/core-preferences.d.ts.map +1 -1
- package/lib/browser/core-preferences.js +29 -19
- package/lib/browser/core-preferences.js.map +1 -1
- package/lib/browser/dialogs.d.ts +6 -0
- package/lib/browser/dialogs.d.ts.map +1 -1
- package/lib/browser/dialogs.js +10 -3
- package/lib/browser/dialogs.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +9 -5
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/frontend-application.d.ts +6 -0
- package/lib/browser/frontend-application.d.ts.map +1 -1
- package/lib/browser/frontend-application.js +13 -0
- package/lib/browser/frontend-application.js.map +1 -1
- package/lib/browser/index.d.ts +1 -0
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +1 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/keyboard/browser-keyboard-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js +16 -11
- package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js.map +1 -1
- package/lib/browser/keyboard/browser-keyboard-layout-provider.d.ts +1 -1
- package/lib/browser/keyboard/browser-keyboard-layout-provider.d.ts.map +1 -1
- package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js +6 -4
- package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js.map +1 -1
- package/lib/browser/keyboard/keys.d.ts +2 -251
- package/lib/browser/keyboard/keys.d.ts.map +1 -1
- package/lib/browser/keyboard/keys.js +12 -614
- package/lib/browser/keyboard/keys.js.map +1 -1
- package/lib/browser/menu/browser-context-menu-renderer.d.ts +1 -1
- package/lib/browser/menu/browser-context-menu-renderer.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.d.ts +3 -0
- package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.js +24 -4
- package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
- package/lib/browser/messaging/ws-connection-provider.d.ts +3 -3
- package/lib/browser/messaging/ws-connection-provider.d.ts.map +1 -1
- package/lib/browser/messaging/ws-connection-provider.js +14 -4
- package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
- package/lib/browser/{nls.d.ts → nls-loader.d.ts} +1 -6
- package/lib/browser/nls-loader.d.ts.map +1 -0
- package/lib/browser/nls-loader.js +29 -0
- package/lib/browser/nls-loader.js.map +1 -0
- package/lib/browser/preferences/preference-provider.d.ts +0 -2
- package/lib/browser/preferences/preference-provider.d.ts.map +1 -1
- package/lib/browser/preferences/preference-provider.js +1 -5
- package/lib/browser/preferences/preference-provider.js.map +1 -1
- package/lib/browser/preferences/preference-service.spec.js +0 -3
- package/lib/browser/preferences/preference-service.spec.js.map +1 -1
- package/lib/browser/progress-status-bar-item.d.ts +1 -2
- package/lib/browser/progress-status-bar-item.d.ts.map +1 -1
- package/lib/browser/progress-status-bar-item.js.map +1 -1
- package/lib/browser/quick-input/quick-command-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/quick-input/quick-command-frontend-contribution.js +2 -1
- package/lib/browser/quick-input/quick-command-frontend-contribution.js.map +1 -1
- package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
- package/lib/browser/quick-input/quick-command-service.js +2 -2
- package/lib/browser/quick-input/quick-command-service.js.map +1 -1
- package/lib/browser/quick-input/quick-input-service.d.ts +1 -201
- package/lib/browser/quick-input/quick-input-service.d.ts.map +1 -1
- package/lib/browser/quick-input/quick-input-service.js +11 -93
- package/lib/browser/quick-input/quick-input-service.js.map +1 -1
- package/lib/browser/quick-input/quick-view-service.d.ts +1 -2
- package/lib/browser/quick-input/quick-view-service.d.ts.map +1 -1
- package/lib/browser/quick-input/quick-view-service.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +10 -8
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +11 -19
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/current-widget-command-adapter.d.ts +39 -0
- package/lib/browser/shell/current-widget-command-adapter.d.ts.map +1 -0
- package/lib/browser/shell/current-widget-command-adapter.js +42 -0
- package/lib/browser/shell/current-widget-command-adapter.js.map +1 -0
- package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
- package/lib/browser/shell/shell-layout-restorer.js +5 -3
- package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
- package/lib/browser/shell/tab-bar-decorator.d.ts +1 -1
- package/lib/browser/shell/tab-bar-decorator.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-decorator.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar.js +2 -1
- package/lib/browser/shell/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/shell/tab-bars.d.ts +22 -3
- package/lib/browser/shell/tab-bars.d.ts.map +1 -1
- package/lib/browser/shell/tab-bars.js +129 -10
- package/lib/browser/shell/tab-bars.js.map +1 -1
- package/lib/browser/storage-service.spec.js +1 -1
- package/lib/browser/storage-service.spec.js.map +1 -1
- package/lib/browser/theming.d.ts +5 -14
- package/lib/browser/theming.d.ts.map +1 -1
- package/lib/browser/theming.js +14 -0
- package/lib/browser/theming.js.map +1 -1
- package/lib/browser/tooltip-service.d.ts +52 -0
- package/lib/browser/tooltip-service.d.ts.map +1 -0
- package/lib/browser/tooltip-service.js +89 -0
- package/lib/browser/tooltip-service.js.map +1 -0
- package/lib/browser/tree/tree-model.d.ts.map +1 -1
- package/lib/browser/view-container.d.ts +55 -14
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js +284 -66
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/window/default-window-service.js +2 -2
- package/lib/browser/window/default-window-service.js.map +1 -1
- package/lib/browser/window/window-service.d.ts +1 -7
- package/lib/browser/window/window-service.d.ts.map +1 -1
- package/lib/browser/window/window-service.js +1 -5
- package/lib/browser/window/window-service.js.map +1 -1
- package/lib/browser/window-contribution.d.ts.map +1 -1
- package/lib/browser/window-contribution.js +2 -2
- package/lib/browser/window-contribution.js.map +1 -1
- package/lib/common/color.d.ts +84 -0
- package/lib/common/color.d.ts.map +1 -0
- package/lib/common/color.js +44 -0
- package/lib/common/color.js.map +1 -0
- package/lib/common/command.d.ts +1 -0
- package/lib/common/command.d.ts.map +1 -1
- package/lib/common/command.js +5 -2
- package/lib/common/command.js.map +1 -1
- package/lib/common/i18n/localization.d.ts +14 -0
- package/lib/common/i18n/localization.d.ts.map +1 -1
- package/lib/common/i18n/localization.js +54 -1
- package/lib/common/i18n/localization.js.map +1 -1
- package/lib/common/index.d.ts +1 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +1 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/keys.d.ts +269 -0
- package/lib/common/keys.d.ts.map +1 -0
- package/lib/common/keys.js +634 -0
- package/lib/common/keys.js.map +1 -0
- package/lib/common/messaging/abstract-connection-provider.d.ts +1 -1
- package/lib/common/messaging/abstract-connection-provider.d.ts.map +1 -1
- package/lib/common/messaging/abstract-connection-provider.js +3 -1
- package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
- package/lib/common/messaging/proxy-factory.js +1 -1
- package/lib/common/messaging/proxy-factory.js.map +1 -1
- package/lib/common/nls.d.ts +28 -0
- package/lib/common/nls.d.ts.map +1 -0
- package/lib/common/nls.js +91 -0
- package/lib/common/nls.js.map +1 -0
- package/lib/common/path.d.ts +6 -0
- package/lib/common/path.d.ts.map +1 -1
- package/lib/common/path.js +16 -4
- package/lib/common/path.js.map +1 -1
- package/lib/common/path.spec.js +12 -0
- package/lib/common/path.spec.js.map +1 -1
- package/lib/common/promise-util.d.ts +5 -2
- package/lib/common/promise-util.d.ts.map +1 -1
- package/lib/common/promise-util.js +16 -1
- package/lib/common/promise-util.js.map +1 -1
- package/lib/common/promise-util.spec.d.ts +2 -0
- package/lib/common/promise-util.spec.d.ts.map +1 -0
- package/lib/common/promise-util.spec.js +42 -0
- package/lib/common/promise-util.spec.js.map +1 -0
- package/lib/common/quick-pick-service.d.ts +219 -1
- package/lib/common/quick-pick-service.d.ts.map +1 -1
- package/lib/common/quick-pick-service.js +108 -1
- package/lib/common/quick-pick-service.js.map +1 -1
- package/lib/common/theme.d.ts +30 -0
- package/lib/common/theme.d.ts.map +1 -0
- package/lib/common/theme.js +18 -0
- package/lib/common/theme.js.map +1 -0
- package/lib/common/window.d.ts +29 -0
- package/lib/common/window.d.ts.map +1 -0
- package/lib/common/window.js +23 -0
- package/lib/common/window.js.map +1 -0
- package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +9 -5
- package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.js +40 -15
- package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +5 -8
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +10 -17
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.d.ts +15 -7
- package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.js +112 -42
- package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
- package/lib/electron-browser/window/electron-window-preferences.d.ts +1 -0
- package/lib/electron-browser/window/electron-window-preferences.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-preferences.js +12 -1
- package/lib/electron-browser/window/electron-window-preferences.js.map +1 -1
- package/lib/electron-browser/window/electron-window-service.d.ts +1 -1
- package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
- package/lib/electron-common/electron-main-window-service.d.ts +1 -1
- package/lib/electron-common/electron-main-window-service.d.ts.map +1 -1
- package/lib/electron-common/electron-main-window-service.js.map +1 -1
- package/lib/electron-common/messaging/electron-messages.d.ts +20 -0
- package/lib/electron-common/messaging/electron-messages.d.ts.map +1 -0
- package/lib/electron-common/messaging/electron-messages.js +23 -0
- package/lib/electron-common/messaging/electron-messages.js.map +1 -0
- package/lib/electron-main/electron-main-application.d.ts +16 -0
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +91 -25
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/electron-main-window-service-impl.d.ts +1 -1
- package/lib/electron-main/electron-main-window-service-impl.d.ts.map +1 -1
- package/lib/electron-main/electron-main-window-service-impl.js.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-contribution.d.ts +1 -1
- package/lib/electron-main/messaging/electron-messaging-contribution.d.ts.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-contribution.js +1 -2
- package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
- package/package.json +7 -5
- package/shared/@theia/application-package/lib/api.d.ts +1 -0
- package/shared/@theia/application-package/lib/api.js +1 -0
- package/src/browser/about-dialog.tsx +2 -2
- package/src/browser/authentication-service.ts +1 -2
- package/src/browser/color-registry.ts +3 -85
- package/src/browser/common-frontend-contribution.ts +179 -232
- package/src/browser/core-preferences.ts +32 -19
- package/src/browser/dialogs.ts +10 -3
- package/src/browser/frontend-application-module.ts +10 -5
- package/src/browser/frontend-application.ts +13 -0
- package/src/browser/index.ts +1 -0
- package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +16 -11
- package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +10 -4
- package/src/browser/keyboard/keys.ts +2 -675
- package/src/browser/menu/browser-context-menu-renderer.ts +1 -1
- package/src/browser/menu/browser-menu-plugin.ts +25 -5
- package/src/browser/messaging/ws-connection-provider.ts +13 -4
- package/src/browser/nls-loader.ts +26 -0
- package/src/browser/preferences/preference-provider.ts +1 -5
- package/src/browser/preferences/preference-service.spec.ts +0 -3
- package/src/browser/progress-status-bar-item.ts +1 -2
- package/src/browser/quick-input/quick-command-frontend-contribution.ts +2 -2
- package/src/browser/quick-input/quick-command-service.ts +2 -2
- package/src/browser/quick-input/quick-input-service.ts +1 -278
- package/src/browser/quick-input/quick-view-service.ts +1 -2
- package/src/browser/shell/application-shell.ts +21 -25
- package/src/browser/shell/current-widget-command-adapter.ts +57 -0
- package/src/browser/shell/shell-layout-restorer.ts +4 -3
- package/src/browser/shell/tab-bar-decorator.ts +1 -1
- package/src/browser/shell/tab-bar-toolbar.tsx +3 -1
- package/src/browser/shell/tab-bars.ts +133 -13
- package/src/browser/storage-service.spec.ts +1 -1
- package/src/browser/style/index.css +5 -0
- package/src/browser/style/sidepanel.css +8 -2
- package/src/browser/style/tabs.css +30 -0
- package/src/browser/style/tooltip.css +28 -0
- package/src/browser/style/view-container.css +9 -9
- package/src/browser/theming.ts +6 -17
- package/src/browser/tooltip-service.tsx +98 -0
- package/src/browser/tree/tree-model.ts +1 -1
- package/src/browser/view-container.ts +312 -80
- package/src/browser/window/default-window-service.ts +2 -2
- package/src/browser/window/window-service.ts +1 -9
- package/src/browser/window-contribution.ts +2 -2
- package/src/common/color.ts +100 -0
- package/src/common/command.ts +11 -2
- package/src/common/i18n/localization.ts +54 -0
- package/src/common/i18n/nls.metadata.json +20421 -0
- package/src/common/index.ts +1 -0
- package/src/common/keys.ts +693 -0
- package/src/common/messaging/abstract-connection-provider.ts +3 -1
- package/src/common/messaging/proxy-factory.ts +1 -1
- package/src/common/nls.ts +104 -0
- package/src/common/path.spec.ts +15 -0
- package/src/common/path.ts +16 -4
- package/src/common/promise-util.spec.ts +41 -0
- package/src/common/promise-util.ts +23 -4
- package/src/common/quick-pick-service.ts +299 -4
- package/src/common/theme.ts +32 -0
- package/src/common/window.ts +30 -0
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +38 -16
- package/src/electron-browser/menu/electron-main-menu-factory.ts +10 -15
- package/src/electron-browser/menu/electron-menu-contribution.ts +129 -39
- package/src/electron-browser/menu/electron-menu-style.css +84 -0
- package/src/electron-browser/window/electron-window-preferences.ts +13 -1
- package/src/electron-browser/window/electron-window-service.ts +1 -1
- package/src/electron-common/electron-main-window-service.ts +1 -2
- package/src/electron-common/messaging/electron-messages.ts +20 -0
- package/src/electron-main/electron-main-application.ts +107 -24
- package/src/electron-main/electron-main-window-service-impl.ts +1 -2
- package/src/electron-main/messaging/electron-messaging-contribution.ts +1 -2
- package/lib/browser/nls.d.ts.map +0 -1
- package/lib/browser/nls.js +0 -64
- package/lib/browser/nls.js.map +0 -1
- package/src/browser/nls.ts +0 -65
|
@@ -18,7 +18,7 @@ import { injectable, inject } from 'inversify';
|
|
|
18
18
|
import { MenuBar, Menu as MenuWidget, Widget } from '@phosphor/widgets';
|
|
19
19
|
import { CommandRegistry as PhosphorCommandRegistry } from '@phosphor/commands';
|
|
20
20
|
import {
|
|
21
|
-
CommandRegistry, ActionMenuNode, CompositeMenuNode,
|
|
21
|
+
CommandRegistry, ActionMenuNode, CompositeMenuNode, environment,
|
|
22
22
|
MenuModelRegistry, MAIN_MENU_BAR, MenuPath, DisposableCollection, Disposable, MenuNode
|
|
23
23
|
} from '../../common';
|
|
24
24
|
import { KeybindingRegistry } from '../keybinding';
|
|
@@ -28,6 +28,7 @@ import { ContextMenuContext } from './context-menu-context';
|
|
|
28
28
|
import { waitForRevealed } from '../widgets';
|
|
29
29
|
import { ApplicationShell } from '../shell';
|
|
30
30
|
import { CorePreferences } from '../core-preferences';
|
|
31
|
+
import { PreferenceService } from '../preferences/preference-service';
|
|
31
32
|
|
|
32
33
|
export abstract class MenuBarWidget extends MenuBar {
|
|
33
34
|
abstract activateMenu(label: string, ...labels: string[]): Promise<MenuWidget>;
|
|
@@ -371,21 +372,40 @@ export class BrowserMenuBarContribution implements FrontendApplicationContributi
|
|
|
371
372
|
@inject(ApplicationShell)
|
|
372
373
|
protected readonly shell: ApplicationShell;
|
|
373
374
|
|
|
375
|
+
@inject(PreferenceService)
|
|
376
|
+
protected readonly preferenceService: PreferenceService;
|
|
377
|
+
|
|
374
378
|
constructor(
|
|
375
379
|
@inject(BrowserMainMenuFactory) protected readonly factory: BrowserMainMenuFactory
|
|
376
380
|
) { }
|
|
377
381
|
|
|
378
382
|
onStart(app: FrontendApplication): void {
|
|
379
|
-
|
|
380
|
-
app.shell.addWidget(logo, { area: 'top' });
|
|
381
|
-
const menu = this.factory.createMenuBar();
|
|
382
|
-
app.shell.addWidget(menu, { area: 'top' });
|
|
383
|
+
this.appendMenu(app.shell);
|
|
383
384
|
}
|
|
384
385
|
|
|
385
386
|
get menuBar(): MenuBarWidget | undefined {
|
|
386
387
|
return this.shell.topPanel.widgets.find(w => w instanceof MenuBarWidget) as MenuBarWidget | undefined;
|
|
387
388
|
}
|
|
388
389
|
|
|
390
|
+
protected appendMenu(shell: ApplicationShell): void {
|
|
391
|
+
const logo = this.createLogo();
|
|
392
|
+
shell.addWidget(logo, { area: 'top' });
|
|
393
|
+
const menu = this.factory.createMenuBar();
|
|
394
|
+
shell.addWidget(menu, { area: 'top' });
|
|
395
|
+
// Hiding the menu is only necessary in electron
|
|
396
|
+
// In the browser we hide the whole top panel
|
|
397
|
+
if (environment.electron.is()) {
|
|
398
|
+
this.preferenceService.ready.then(() => {
|
|
399
|
+
menu.setHidden(['compact', 'hidden'].includes(this.preferenceService.get('window.menuBarVisibility', '')));
|
|
400
|
+
});
|
|
401
|
+
this.preferenceService.onPreferenceChanged(change => {
|
|
402
|
+
if (change.preferenceName === 'window.menuBarVisibility') {
|
|
403
|
+
menu.setHidden(['compact', 'hidden'].includes(change.newValue));
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
|
|
389
409
|
protected createLogo(): Widget {
|
|
390
410
|
const logo = new Widget();
|
|
391
411
|
logo.id = 'theia:icon';
|
|
@@ -59,13 +59,19 @@ export const DEFAULT_HTTP_FALLBACK_OPTIONS: HttpFallbackOptions = {
|
|
|
59
59
|
export class WebSocketConnectionProvider extends AbstractConnectionProvider<WebSocketOptions> {
|
|
60
60
|
|
|
61
61
|
protected readonly onSocketDidOpenEmitter: Emitter<void> = new Emitter();
|
|
62
|
-
|
|
62
|
+
get onSocketDidOpen(): Event<void> {
|
|
63
|
+
return this.onSocketDidOpenEmitter.event;
|
|
64
|
+
}
|
|
63
65
|
|
|
64
66
|
protected readonly onSocketDidCloseEmitter: Emitter<void> = new Emitter();
|
|
65
|
-
|
|
67
|
+
get onSocketDidClose(): Event<void> {
|
|
68
|
+
return this.onSocketDidCloseEmitter.event;
|
|
69
|
+
}
|
|
66
70
|
|
|
67
71
|
protected readonly onHttpFallbackDidActivateEmitter: Emitter<void> = new Emitter();
|
|
68
|
-
|
|
72
|
+
get onHttpFallbackDidActivate(): Event<void> {
|
|
73
|
+
return this.onHttpFallbackDidActivateEmitter.event;
|
|
74
|
+
}
|
|
69
75
|
|
|
70
76
|
static createProxy<T extends object>(container: interfaces.Container, path: string, arg?: object): JsonRpcProxy<T> {
|
|
71
77
|
return container.get(WebSocketConnectionProvider).createProxy<T>(path, arg);
|
|
@@ -98,7 +104,6 @@ export class WebSocketConnectionProvider extends AbstractConnectionProvider<WebS
|
|
|
98
104
|
this.fireSocketDidClose();
|
|
99
105
|
};
|
|
100
106
|
socket.onmessage = ({ data }) => {
|
|
101
|
-
this.websocketErrorCounter = 0;
|
|
102
107
|
this.handleIncomingRawMessage(data);
|
|
103
108
|
};
|
|
104
109
|
this.socket = socket;
|
|
@@ -218,6 +223,10 @@ export class WebSocketConnectionProvider extends AbstractConnectionProvider<WebS
|
|
|
218
223
|
}
|
|
219
224
|
|
|
220
225
|
protected fireSocketDidOpen(): void {
|
|
226
|
+
// Once a websocket connection has opened, disable the http fallback
|
|
227
|
+
if (this.httpFallbackOptions?.allowed) {
|
|
228
|
+
this.httpFallbackOptions.allowed = false;
|
|
229
|
+
}
|
|
221
230
|
this.onSocketDidOpenEmitter.fire(undefined);
|
|
222
231
|
}
|
|
223
232
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (C) 2021 TypeFox and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
|
|
17
|
+
import { nls } from '../common/nls';
|
|
18
|
+
import { Endpoint } from './endpoint';
|
|
19
|
+
|
|
20
|
+
export async function loadTranslations(): Promise<void> {
|
|
21
|
+
if (nls.locale) {
|
|
22
|
+
const endpoint = new Endpoint({ path: '/i18n/' + nls.locale }).getRestUrl().toString();
|
|
23
|
+
const response = await fetch(endpoint);
|
|
24
|
+
nls.localization = await response.json();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -75,10 +75,6 @@ export abstract class PreferenceProvider implements Disposable {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
protected deferredChanges: PreferenceProviderDataChanges | undefined;
|
|
78
|
-
protected _pendingChanges: Promise<boolean> = Promise.resolve(false);
|
|
79
|
-
get pendingChanges(): Promise<boolean> {
|
|
80
|
-
return this._pendingChanges;
|
|
81
|
-
}
|
|
82
78
|
|
|
83
79
|
/**
|
|
84
80
|
* Informs the listeners that one or more preferences of this provider are changed.
|
|
@@ -94,7 +90,7 @@ export abstract class PreferenceProvider implements Disposable {
|
|
|
94
90
|
this.mergePreferenceProviderDataChange(changes[preferenceName]);
|
|
95
91
|
}
|
|
96
92
|
}
|
|
97
|
-
return this.
|
|
93
|
+
return this.fireDidPreferencesChanged();
|
|
98
94
|
}
|
|
99
95
|
|
|
100
96
|
protected mergePreferenceProviderDataChange(change: PreferenceProviderDataChange): void {
|
|
@@ -193,7 +193,6 @@ describe('Preference Service', () => {
|
|
|
193
193
|
assert.strictEqual(prefService.get('editor.insertSpaces'), undefined, 'get after');
|
|
194
194
|
assert.strictEqual(prefService.get('[go].editor.insertSpaces'), undefined, 'get after overridden');
|
|
195
195
|
|
|
196
|
-
assert.strictEqual(await prefSchema.pendingChanges, false);
|
|
197
196
|
assert.deepStrictEqual([], events.map(e => ({
|
|
198
197
|
preferenceName: e.preferenceName,
|
|
199
198
|
newValue: e.newValue,
|
|
@@ -488,7 +487,6 @@ describe('Preference Service', () => {
|
|
|
488
487
|
|
|
489
488
|
it('onPreferenceChanged #0', async () => {
|
|
490
489
|
const { preferences, schema } = prepareServices();
|
|
491
|
-
await schema.pendingChanges;
|
|
492
490
|
|
|
493
491
|
const events: PreferenceChange[] = [];
|
|
494
492
|
preferences.onPreferenceChanged(event => events.push(event));
|
|
@@ -511,7 +509,6 @@ describe('Preference Service', () => {
|
|
|
511
509
|
|
|
512
510
|
it('onPreferenceChanged #1', async () => {
|
|
513
511
|
const { preferences, schema } = prepareServices();
|
|
514
|
-
await schema.pendingChanges;
|
|
515
512
|
|
|
516
513
|
const events: PreferenceChange[] = [];
|
|
517
514
|
preferences.onPreferenceChanged(event => events.push(event));
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import { injectable, inject } from 'inversify';
|
|
18
18
|
import { CancellationToken } from 'vscode-ws-jsonrpc';
|
|
19
|
-
import { ProgressClient } from '../common';
|
|
20
|
-
import { ProgressMessage, ProgressUpdate } from '../common';
|
|
19
|
+
import { ProgressClient, ProgressMessage, ProgressUpdate } from '../common';
|
|
21
20
|
import { StatusBar, StatusBarAlignment } from './status-bar';
|
|
22
21
|
import { Deferred } from '../common/promise-util';
|
|
23
22
|
import throttle = require('lodash.throttle');
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
import { injectable, inject, optional } from 'inversify';
|
|
17
|
-
import { CommandRegistry, CommandContribution, MenuContribution, MenuModelRegistry } from '../../common';
|
|
17
|
+
import { CommandRegistry, CommandContribution, MenuContribution, MenuModelRegistry, nls } from '../../common';
|
|
18
18
|
import { KeybindingRegistry, KeybindingContribution } from '../keybinding';
|
|
19
19
|
import { CommonMenus } from '../common-frontend-contribution';
|
|
20
20
|
import { CLEAR_COMMAND_HISTORY, quickCommand, QuickCommandService } from './quick-command-service';
|
|
@@ -43,7 +43,7 @@ export class QuickCommandFrontendContribution implements CommandContribution, Ke
|
|
|
43
43
|
registerMenus(menus: MenuModelRegistry): void {
|
|
44
44
|
menus.registerMenuAction(CommonMenus.VIEW_PRIMARY, {
|
|
45
45
|
commandId: quickCommand.id,
|
|
46
|
-
label: '
|
|
46
|
+
label: nls.localizeByDefault('Command Palette...')
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -28,10 +28,10 @@ export const quickCommand: Command = {
|
|
|
28
28
|
id: 'workbench.action.showCommands'
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
export const CLEAR_COMMAND_HISTORY
|
|
31
|
+
export const CLEAR_COMMAND_HISTORY = Command.toDefaultLocalizedCommand({
|
|
32
32
|
id: 'clear.command.history',
|
|
33
33
|
label: 'Clear Command History'
|
|
34
|
-
};
|
|
34
|
+
});
|
|
35
35
|
|
|
36
36
|
@injectable()
|
|
37
37
|
export class QuickCommandService implements QuickAccessContribution, QuickAccessProvider {
|
|
@@ -14,281 +14,4 @@
|
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
import URI from '../../common/uri';
|
|
19
|
-
import { KeySequence } from '../keyboard';
|
|
20
|
-
import * as fuzzy from 'fuzzy';
|
|
21
|
-
|
|
22
|
-
export interface Match {
|
|
23
|
-
start: number;
|
|
24
|
-
end: number;
|
|
25
|
-
}
|
|
26
|
-
export interface QuickPickItemHighlights {
|
|
27
|
-
label?: Match[];
|
|
28
|
-
description?: Match[];
|
|
29
|
-
detail?: Match[];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface QuickPickItem {
|
|
33
|
-
type?: 'item' | 'separator';
|
|
34
|
-
id?: string;
|
|
35
|
-
label: string;
|
|
36
|
-
meta?: string;
|
|
37
|
-
ariaLabel?: string;
|
|
38
|
-
description?: string;
|
|
39
|
-
detail?: string;
|
|
40
|
-
keySequence?: KeySequence;
|
|
41
|
-
iconClasses?: string[];
|
|
42
|
-
alwaysShow?: boolean;
|
|
43
|
-
highlights?: QuickPickItemHighlights;
|
|
44
|
-
buttons?: QuickInputButton[];
|
|
45
|
-
execute?: () => void;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export namespace QuickPickItem {
|
|
49
|
-
export function is(item: QuickPickSeparator | QuickPickItem): item is QuickPickItem {
|
|
50
|
-
// if it's not a separator, it's an item
|
|
51
|
-
return item.type !== 'separator';
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export interface QuickPickSeparator {
|
|
56
|
-
type: 'separator';
|
|
57
|
-
label?: string;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export namespace QuickPickSeparator {
|
|
61
|
-
export function is(item: QuickPickSeparator | QuickPickItem): item is QuickPickSeparator {
|
|
62
|
-
return item.type === 'separator';
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export type QuickPicks = (QuickPickSeparator | QuickPickItem)[];
|
|
67
|
-
|
|
68
|
-
export interface QuickPickValue<V> extends QuickPickItem {
|
|
69
|
-
value: V
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export interface QuickInputButton {
|
|
73
|
-
iconPath?: URI | { light: URI; dark: URI } | { id: string };
|
|
74
|
-
iconClass?: string;
|
|
75
|
-
tooltip?: string;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export interface QuickInputButtonHandle extends QuickInputButton {
|
|
79
|
-
index: number; // index of where they are in buttons array if QuickInputButton or -1 if QuickInputButtons.Back
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface QuickInput {
|
|
83
|
-
readonly onDidHide: Event<void>;
|
|
84
|
-
readonly onDispose: Event<void>;
|
|
85
|
-
title: string | undefined;
|
|
86
|
-
description: string | undefined;
|
|
87
|
-
step: number | undefined;
|
|
88
|
-
totalSteps: number | undefined;
|
|
89
|
-
enabled: boolean;
|
|
90
|
-
contextKey: string | undefined;
|
|
91
|
-
busy: boolean;
|
|
92
|
-
ignoreFocusOut: boolean;
|
|
93
|
-
show(): void;
|
|
94
|
-
hide(): void;
|
|
95
|
-
dispose(): void;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export interface InputBox extends QuickInput {
|
|
99
|
-
value: string | undefined;
|
|
100
|
-
valueSelection: Readonly<[number, number]> | undefined;
|
|
101
|
-
placeholder: string | undefined;
|
|
102
|
-
password: boolean;
|
|
103
|
-
readonly onDidChangeValue: Event<string>;
|
|
104
|
-
readonly onDidAccept: Event<void>;
|
|
105
|
-
buttons: ReadonlyArray<QuickInputButton>;
|
|
106
|
-
readonly onDidTriggerButton: Event<QuickInputButton>;
|
|
107
|
-
prompt: string | undefined;
|
|
108
|
-
validationMessage: string | undefined;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export interface QuickPick<T extends QuickPickItem> extends QuickInput {
|
|
112
|
-
value: string;
|
|
113
|
-
placeholder: string | undefined;
|
|
114
|
-
items: ReadonlyArray<T | QuickPickSeparator>;
|
|
115
|
-
activeItems: ReadonlyArray<T>;
|
|
116
|
-
selectedItems: ReadonlyArray<T>;
|
|
117
|
-
canSelectMany: boolean;
|
|
118
|
-
matchOnDescription: boolean;
|
|
119
|
-
matchOnDetail: boolean;
|
|
120
|
-
readonly onDidAccept: Event<void>;
|
|
121
|
-
readonly onDidChangeValue: Event<string>;
|
|
122
|
-
readonly onDidTriggerButton: Event<QuickInputButton>;
|
|
123
|
-
readonly onDidTriggerItemButton: Event<QuickPickItemButtonEvent<T>>;
|
|
124
|
-
readonly onDidChangeActive: Event<T[]>;
|
|
125
|
-
readonly onDidChangeSelection: Event<T[]>;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export interface PickOptions<T extends QuickPickItem> {
|
|
129
|
-
placeHolder?: string;
|
|
130
|
-
matchOnDescription?: boolean;
|
|
131
|
-
matchOnDetail?: boolean;
|
|
132
|
-
matchOnLabel?: boolean;
|
|
133
|
-
autoFocusOnList?: boolean;
|
|
134
|
-
ignoreFocusLost?: boolean;
|
|
135
|
-
canPickMany?: boolean;
|
|
136
|
-
contextKey?: string;
|
|
137
|
-
activeItem?: Promise<T> | T;
|
|
138
|
-
onDidFocus?: (entry: T) => void;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export interface InputOptions {
|
|
142
|
-
value?: string;
|
|
143
|
-
valueSelection?: [number, number];
|
|
144
|
-
prompt?: string;
|
|
145
|
-
placeHolder?: string;
|
|
146
|
-
password?: boolean;
|
|
147
|
-
ignoreFocusLost?: boolean;
|
|
148
|
-
validateInput?(input: string): Promise<string | null | undefined> | undefined;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
export interface QuickPickItemButtonEvent<T extends QuickPickItem> {
|
|
152
|
-
button: QuickInputButton;
|
|
153
|
-
item: T;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
export interface QuickPickOptions<T extends QuickPickItem> {
|
|
157
|
-
busy?: boolean;
|
|
158
|
-
enabled?: boolean;
|
|
159
|
-
title?: string;
|
|
160
|
-
description?: string;
|
|
161
|
-
value?: string;
|
|
162
|
-
filterValue?: (value: string) => string;
|
|
163
|
-
ariaLabel?: string;
|
|
164
|
-
buttons?: Array<QuickInputButton>;
|
|
165
|
-
placeholder?: string;
|
|
166
|
-
canAcceptInBackground?: boolean;
|
|
167
|
-
customButton?: boolean;
|
|
168
|
-
customLabel?: string;
|
|
169
|
-
customHover?: string;
|
|
170
|
-
canSelectMany?: boolean;
|
|
171
|
-
matchOnDescription?: boolean;
|
|
172
|
-
matchOnDetail?: boolean;
|
|
173
|
-
matchOnLabel?: boolean;
|
|
174
|
-
sortByLabel?: boolean;
|
|
175
|
-
autoFocusOnList?: boolean;
|
|
176
|
-
ignoreFocusOut?: boolean;
|
|
177
|
-
valueSelection?: Readonly<[number, number]>;
|
|
178
|
-
validationMessage?: string;
|
|
179
|
-
hideInput?: boolean;
|
|
180
|
-
hideCheckAll?: boolean;
|
|
181
|
-
runIfSingle?: boolean
|
|
182
|
-
contextKey?: string;
|
|
183
|
-
activeItem?: T,
|
|
184
|
-
step?: number;
|
|
185
|
-
totalSteps?: number;
|
|
186
|
-
|
|
187
|
-
onDidAccept?: () => void,
|
|
188
|
-
onDidChangeActive?: (quickPick: QuickPick<T>, activeItems: Array<T>) => void,
|
|
189
|
-
onDidChangeSelection?: (quickPick: QuickPick<T>, selectedItems: Array<T>) => void,
|
|
190
|
-
onDidChangeValue?: (quickPick: QuickPick<T>, filter: string) => void,
|
|
191
|
-
onDidCustom?: () => void,
|
|
192
|
-
onDidHide?: () => void;
|
|
193
|
-
onDidTriggerButton?: (button: QuickInputButton) => void,
|
|
194
|
-
onDidTriggerItemButton?: (ItemButtonEvent: QuickPickItemButtonEvent<T>) => void
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export const QuickInputService = Symbol('QuickInputService');
|
|
198
|
-
export interface QuickInputService {
|
|
199
|
-
readonly backButton: QuickInputButton;
|
|
200
|
-
readonly onShow: Event<void>;
|
|
201
|
-
readonly onHide: Event<void>;
|
|
202
|
-
open(filter: string): void;
|
|
203
|
-
createInputBox(): InputBox;
|
|
204
|
-
input(options?: InputOptions, token?: CancellationToken): Promise<string | undefined>;
|
|
205
|
-
pick<T extends QuickPickItem, O extends PickOptions<T>>(picks: Promise<T[]> | T[], options?: O, token?: CancellationToken):
|
|
206
|
-
Promise<(O extends { canPickMany: true } ? T[] : T) | undefined>;
|
|
207
|
-
showQuickPick<T extends QuickPickItem>(items: Array<T>, options?: QuickPickOptions<T>): Promise<T>;
|
|
208
|
-
hide(): void;
|
|
209
|
-
/**
|
|
210
|
-
* Provides raw access to the quick pick controller.
|
|
211
|
-
*/
|
|
212
|
-
createQuickPick<T extends QuickPickItem>(): QuickPick<T>;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Filter the list of quick pick items based on the provided filter.
|
|
217
|
-
* Items are filtered based on if:
|
|
218
|
-
* - their `label` satisfies the filter using `fuzzy`.
|
|
219
|
-
* - their `description` satisfies the filter using `fuzzy`.
|
|
220
|
-
* - their `detail` satisfies the filter using `fuzzy`.
|
|
221
|
-
* Filtered items are also updated to display proper highlights based on how they were filtered.
|
|
222
|
-
* @param items the list of quick pick items.
|
|
223
|
-
* @param filter the filter to search for.
|
|
224
|
-
* @returns the list of quick pick items that satisfy the filter.
|
|
225
|
-
*/
|
|
226
|
-
export function filterItems(items: QuickPickItem[], filter: string): QuickPickItem[] {
|
|
227
|
-
filter = filter.trim().toLowerCase();
|
|
228
|
-
|
|
229
|
-
if (filter.length === 0) {
|
|
230
|
-
for (const item of items) {
|
|
231
|
-
item.highlights = undefined; // reset highlights from previous filtering.
|
|
232
|
-
}
|
|
233
|
-
return items;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
const filteredItems: QuickPickItem[] = [];
|
|
237
|
-
for (const item of items) {
|
|
238
|
-
if (
|
|
239
|
-
fuzzy.test(filter, item.label) ||
|
|
240
|
-
(item.description && fuzzy.test(filter, item.description)) ||
|
|
241
|
-
(item.detail && fuzzy.test(filter, item.detail))
|
|
242
|
-
) {
|
|
243
|
-
item.highlights = {
|
|
244
|
-
label: findMatches(item.label, filter),
|
|
245
|
-
description: item.description ? findMatches(item.description, filter) : undefined,
|
|
246
|
-
detail: item.detail ? findMatches(item.detail, filter) : undefined
|
|
247
|
-
};
|
|
248
|
-
filteredItems.push(item);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
return filteredItems;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Find match highlights when testing a word against a pattern.
|
|
256
|
-
* @param word the word to test.
|
|
257
|
-
* @param pattern the word to match against.
|
|
258
|
-
* @returns the list of highlights if present.
|
|
259
|
-
*/
|
|
260
|
-
export function findMatches(word: string, pattern: string): Array<{ start: number, end: number }> | undefined {
|
|
261
|
-
word = word.toLocaleLowerCase();
|
|
262
|
-
pattern = pattern.toLocaleLowerCase();
|
|
263
|
-
|
|
264
|
-
if (pattern.trim().length === 0) {
|
|
265
|
-
return undefined;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
const delimiter = '\u0000'; // null byte that shouldn't appear in the input and is used to denote matches.
|
|
269
|
-
const matchResult = fuzzy.match(pattern.replace(/\u0000/gu, ''), word, { pre: delimiter, post: delimiter });
|
|
270
|
-
if (!matchResult) {
|
|
271
|
-
return undefined;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
const match = matchResult.rendered;
|
|
275
|
-
const highlights: { start: number, end: number }[] = [];
|
|
276
|
-
|
|
277
|
-
let lastIndex = 0;
|
|
278
|
-
/** We need to account for the extra markers by removing them from the range */
|
|
279
|
-
let offset = 0;
|
|
280
|
-
|
|
281
|
-
while (true) {
|
|
282
|
-
const start = match.indexOf(delimiter, lastIndex);
|
|
283
|
-
if (start === -1) { break; }
|
|
284
|
-
const end = match.indexOf(delimiter, start + 1);
|
|
285
|
-
if (end === -1) { break; }
|
|
286
|
-
highlights.push({
|
|
287
|
-
start: start - offset++,
|
|
288
|
-
end: end - offset++
|
|
289
|
-
});
|
|
290
|
-
lastIndex = end + 1;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return highlights.length > 0 ? highlights : undefined;
|
|
294
|
-
}
|
|
17
|
+
export * from '../../common/quick-pick-service';
|
|
@@ -18,8 +18,7 @@ import { inject, injectable } from 'inversify';
|
|
|
18
18
|
import { filterItems, QuickPickItem, QuickPicks } from '..';
|
|
19
19
|
import { CancellationToken, Disposable } from '../../common';
|
|
20
20
|
import { ContextKeyService } from '../context-key-service';
|
|
21
|
-
import { QuickAccessProvider, QuickAccessRegistry } from './quick-access';
|
|
22
|
-
import { QuickAccessContribution } from './quick-access';
|
|
21
|
+
import { QuickAccessContribution, QuickAccessProvider, QuickAccessRegistry } from './quick-access';
|
|
23
22
|
|
|
24
23
|
export interface QuickViewItem {
|
|
25
24
|
readonly label: string;
|
|
@@ -23,21 +23,20 @@ import {
|
|
|
23
23
|
} from '@phosphor/widgets';
|
|
24
24
|
import { Message } from '@phosphor/messaging';
|
|
25
25
|
import { IDragEvent } from '@phosphor/dragdrop';
|
|
26
|
-
import { RecursivePartial, Event as CommonEvent, DisposableCollection, Disposable } from '../../common';
|
|
26
|
+
import { RecursivePartial, Event as CommonEvent, DisposableCollection, Disposable, environment } from '../../common';
|
|
27
27
|
import { animationFrame } from '../browser';
|
|
28
28
|
import { Saveable, SaveableWidget, SaveOptions } from '../saveable';
|
|
29
29
|
import { StatusBarImpl, StatusBarEntry, StatusBarAlignment } from '../status-bar/status-bar';
|
|
30
30
|
import { TheiaDockPanel, BOTTOM_AREA_ID, MAIN_AREA_ID } from './theia-dock-panel';
|
|
31
31
|
import { SidePanelHandler, SidePanel, SidePanelHandlerFactory } from './side-panel-handler';
|
|
32
|
-
import { TabBarRendererFactory,
|
|
32
|
+
import { TabBarRendererFactory, SHELL_TABBAR_CONTEXT_MENU, ScrollableTabBar, ToolbarAwareTabBar } from './tab-bars';
|
|
33
33
|
import { SplitPositionHandler, SplitPositionOptions } from './split-panels';
|
|
34
34
|
import { FrontendApplicationStateService } from '../frontend-application-state';
|
|
35
|
-
import { TabBarToolbarRegistry, TabBarToolbarFactory
|
|
35
|
+
import { TabBarToolbarRegistry, TabBarToolbarFactory } from './tab-bar-toolbar';
|
|
36
36
|
import { ContextKeyService } from '../context-key-service';
|
|
37
37
|
import { Emitter } from '../../common/event';
|
|
38
38
|
import { waitForRevealed, waitForClosed } from '../widgets';
|
|
39
39
|
import { CorePreferences } from '../core-preferences';
|
|
40
|
-
import { environment } from '../../common';
|
|
41
40
|
import { BreadcrumbsRendererFactory } from '../breadcrumbs/breadcrumbs-renderer';
|
|
42
41
|
|
|
43
42
|
/** The class name added to ApplicationShell instances. */
|
|
@@ -59,7 +58,9 @@ export type ApplicationShellLayoutVersion =
|
|
|
59
58
|
/** git history view is replaced by a more generic scm history view, backward compatible to 3.0 */
|
|
60
59
|
4.0 |
|
|
61
60
|
/** Replace custom/font-awesome icons with codicons */
|
|
62
|
-
5.0
|
|
61
|
+
5.0 |
|
|
62
|
+
/** added the ability to drag and drop view parts between view containers */
|
|
63
|
+
6.0;
|
|
63
64
|
|
|
64
65
|
/**
|
|
65
66
|
* When a version is increased, make sure to introduce a migration (ApplicationShellLayoutMigration) to this version.
|
|
@@ -81,9 +82,9 @@ export class DockPanelRenderer implements DockLayout.IRenderer {
|
|
|
81
82
|
readonly tabBarClasses: string[] = [];
|
|
82
83
|
|
|
83
84
|
constructor(
|
|
84
|
-
@inject(TabBarRendererFactory) protected readonly tabBarRendererFactory:
|
|
85
|
+
@inject(TabBarRendererFactory) protected readonly tabBarRendererFactory: TabBarRendererFactory,
|
|
85
86
|
@inject(TabBarToolbarRegistry) protected readonly tabBarToolbarRegistry: TabBarToolbarRegistry,
|
|
86
|
-
@inject(TabBarToolbarFactory) protected readonly tabBarToolbarFactory:
|
|
87
|
+
@inject(TabBarToolbarFactory) protected readonly tabBarToolbarFactory: TabBarToolbarFactory,
|
|
87
88
|
@inject(BreadcrumbsRendererFactory) protected readonly breadcrumbsRendererFactory: BreadcrumbsRendererFactory,
|
|
88
89
|
) { }
|
|
89
90
|
|
|
@@ -846,20 +847,15 @@ export class ApplicationShell extends Widget {
|
|
|
846
847
|
*/
|
|
847
848
|
findTitle(tabBar: TabBar<Widget>, event?: Event): Title<Widget> | undefined {
|
|
848
849
|
if (event?.target instanceof HTMLElement) {
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
return title;
|
|
857
|
-
}
|
|
858
|
-
title = tabBar.titles.find(t => t.label === tabNode!.title);
|
|
859
|
-
if (title) {
|
|
860
|
-
return title;
|
|
861
|
-
}
|
|
850
|
+
const tabNode = event.target;
|
|
851
|
+
|
|
852
|
+
const titleIndex = Array.from(tabBar.contentNode.getElementsByClassName('p-TabBar-tab'))
|
|
853
|
+
.findIndex(node => node.contains(tabNode));
|
|
854
|
+
|
|
855
|
+
if (titleIndex !== -1) {
|
|
856
|
+
return tabBar.titles[titleIndex];
|
|
862
857
|
}
|
|
858
|
+
|
|
863
859
|
}
|
|
864
860
|
return tabBar.currentTitle || undefined;
|
|
865
861
|
}
|
|
@@ -1831,18 +1827,18 @@ export class ApplicationShell extends Widget {
|
|
|
1831
1827
|
return undefined;
|
|
1832
1828
|
}
|
|
1833
1829
|
|
|
1834
|
-
canToggleMaximized(): boolean {
|
|
1835
|
-
const area =
|
|
1830
|
+
canToggleMaximized(widget: Widget | undefined = this.currentWidget): boolean {
|
|
1831
|
+
const area = widget && this.getAreaFor(widget);
|
|
1836
1832
|
return area === 'main' || area === 'bottom';
|
|
1837
1833
|
}
|
|
1838
1834
|
|
|
1839
|
-
toggleMaximized(): void {
|
|
1840
|
-
const area =
|
|
1835
|
+
toggleMaximized(widget: Widget | undefined = this.currentWidget): void {
|
|
1836
|
+
const area = widget && this.getAreaPanelFor(widget);
|
|
1841
1837
|
if (area instanceof TheiaDockPanel && (area === this.mainPanel || area === this.bottomPanel)) {
|
|
1842
1838
|
area.toggleMaximized();
|
|
1839
|
+
this.revealWidget(widget!.id);
|
|
1843
1840
|
}
|
|
1844
1841
|
}
|
|
1845
|
-
|
|
1846
1842
|
}
|
|
1847
1843
|
|
|
1848
1844
|
/**
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (C) 2021 Ericsson and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
|
|
17
|
+
import { CommandHandler } from '../../common';
|
|
18
|
+
import { TabBar, Title, Widget } from '../widgets';
|
|
19
|
+
import { ApplicationShell } from './application-shell';
|
|
20
|
+
|
|
21
|
+
type CurrentWidgetCommandAdapterBooleanCheck = (event: Event) => boolean;
|
|
22
|
+
type CurrentWidgetCommandHandlerBooleanCheck = (title: Title<Widget> | undefined, tabbar: TabBar<Widget> | undefined, event: Event) => boolean;
|
|
23
|
+
|
|
24
|
+
export interface TabBarContextMenuCommandHandler extends CommandHandler {
|
|
25
|
+
execute(title: Title<Widget> | undefined, tabbar: TabBar<Widget> | undefined, event: Event): unknown;
|
|
26
|
+
isEnabled?: CurrentWidgetCommandHandlerBooleanCheck;
|
|
27
|
+
isVisible?: CurrentWidgetCommandHandlerBooleanCheck;
|
|
28
|
+
isToggled?: CurrentWidgetCommandHandlerBooleanCheck;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Creates a command handler that acts on either the widget targeted by a DOM event or the current widget.
|
|
33
|
+
*/
|
|
34
|
+
export class CurrentWidgetCommandAdapter implements CommandHandler {
|
|
35
|
+
execute: (event: Event) => unknown;
|
|
36
|
+
isEnabled?: CurrentWidgetCommandAdapterBooleanCheck;
|
|
37
|
+
isVisible?: CurrentWidgetCommandAdapterBooleanCheck;
|
|
38
|
+
isToggled?: CurrentWidgetCommandAdapterBooleanCheck;
|
|
39
|
+
constructor(shell: ApplicationShell, handler: TabBarContextMenuCommandHandler) {
|
|
40
|
+
this.execute = (event: Event) => handler.execute(...this.transformArguments(shell, event));
|
|
41
|
+
if (handler.isEnabled) {
|
|
42
|
+
this.isEnabled = (event: Event) => !!handler.isEnabled?.(...this.transformArguments(shell, event));
|
|
43
|
+
}
|
|
44
|
+
if (handler.isVisible) {
|
|
45
|
+
this.isVisible = (event: Event) => !!handler.isVisible?.(...this.transformArguments(shell, event));
|
|
46
|
+
}
|
|
47
|
+
if (handler.isToggled) {
|
|
48
|
+
this.isToggled = (event: Event) => !!handler.isToggled?.(...this.transformArguments(shell, event));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
protected transformArguments(shell: ApplicationShell, event: Event): [Title<Widget> | undefined, TabBar<Widget> | undefined, Event] {
|
|
53
|
+
const tabBar = shell.findTabBar(event);
|
|
54
|
+
const title = tabBar && shell.findTitle(tabBar, event);
|
|
55
|
+
return [title, tabBar, event];
|
|
56
|
+
}
|
|
57
|
+
}
|