@theia/core 1.53.0-next.55 → 1.53.0-next.64
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 +6 -6
- package/i18n/nls.cs.json +582 -582
- package/i18n/nls.de.json +582 -582
- package/i18n/nls.es.json +582 -582
- package/i18n/nls.fr.json +582 -582
- package/i18n/nls.hu.json +582 -582
- package/i18n/nls.it.json +582 -582
- package/i18n/nls.ja.json +582 -582
- package/i18n/nls.json +582 -582
- package/i18n/nls.ko.json +582 -582
- package/i18n/nls.pl.json +582 -582
- package/i18n/nls.pt-br.json +582 -582
- package/i18n/nls.ru.json +582 -582
- package/i18n/nls.tr.json +582 -582
- package/i18n/nls.zh-cn.json +582 -582
- package/i18n/nls.zh-tw.json +582 -582
- package/lib/browser/catalog.json +54 -6
- package/lib/browser/common-frontend-contribution.js +3 -3
- package/lib/browser/common-styling-participants.js +166 -166
- package/lib/browser/progress-location-service.spec.js +7 -7
- package/lib/browser/storage-service.js +3 -3
- package/lib/browser/tree/tree.spec.js +75 -75
- package/lib/node/process-utils.spec.js +8 -8
- package/package.json +4 -4
- package/shared/ajv/index.d.ts +2 -2
- package/shared/markdown-it.d.ts +2 -2
- package/shared/markdown-it.js +1 -1
- package/shared/reflect-metadata/index.d.ts +1 -1
- package/shared/reflect-metadata/index.js +1 -1
- package/shared/vscode-languageserver-types/index.d.ts +1 -1
- package/src/browser/about-dialog.tsx +137 -137
- package/src/browser/authentication-service.ts +467 -467
- package/src/browser/breadcrumbs/breadcrumb-popup-container.ts +101 -101
- package/src/browser/breadcrumbs/breadcrumb-renderer.tsx +41 -41
- package/src/browser/breadcrumbs/breadcrumbs-constants.ts +79 -79
- package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +185 -185
- package/src/browser/breadcrumbs/breadcrumbs-service.ts +108 -108
- package/src/browser/breadcrumbs/index.ts +21 -21
- package/src/browser/browser-clipboard-service.ts +122 -122
- package/src/browser/browser.ts +239 -239
- package/src/browser/clipboard-service.ts +23 -23
- package/src/browser/color-application-contribution.ts +110 -110
- package/src/browser/color-registry.ts +60 -60
- package/src/browser/command-open-handler.ts +54 -54
- package/src/browser/common-frontend-contribution.ts +2680 -2680
- package/src/browser/common-styling-participants.ts +361 -361
- package/src/browser/connection-status-service.spec.ts +200 -200
- package/src/browser/connection-status-service.ts +216 -216
- package/src/browser/context-key-service.ts +142 -142
- package/src/browser/context-menu-renderer.ts +124 -124
- package/src/browser/core-preferences.ts +343 -343
- package/src/browser/credentials-service.ts +106 -106
- package/src/browser/decoration-style.ts +65 -65
- package/src/browser/decorations-service.ts +209 -209
- package/src/browser/dialogs/react-dialog.tsx +56 -56
- package/src/browser/dialogs.ts +534 -534
- package/src/browser/diff-uris.ts +117 -117
- package/src/browser/encoding-registry.ts +97 -97
- package/src/browser/endpoint.spec.ts +148 -148
- package/src/browser/endpoint.ts +136 -136
- package/src/browser/external-uri-service.ts +79 -79
- package/src/browser/file-icons-js.d.ts +20 -20
- package/src/browser/frontend-application-bindings.ts +62 -62
- package/src/browser/frontend-application-config-provider.spec.ts +45 -45
- package/src/browser/frontend-application-config-provider.ts +50 -50
- package/src/browser/frontend-application-contribution.ts +110 -110
- package/src/browser/frontend-application-module.ts +474 -474
- package/src/browser/frontend-application-state.ts +74 -74
- package/src/browser/frontend-application.ts +326 -326
- package/src/browser/hover-service.ts +218 -218
- package/src/browser/http-open-handler.ts +49 -49
- package/src/browser/i18n/i18n-frontend-module.ts +27 -27
- package/src/browser/i18n/language-quick-pick-service.ts +130 -130
- package/src/browser/icon-registry.ts +87 -87
- package/src/browser/icon-theme-contribution.ts +64 -64
- package/src/browser/icon-theme-service.ts +217 -217
- package/src/browser/icons/CollapseAll.svg +7 -7
- package/src/browser/icons/CollapseAll_inverse.svg +7 -7
- package/src/browser/icons/Refresh.svg +7 -7
- package/src/browser/icons/Refresh_inverse.svg +7 -7
- package/src/browser/icons/add-inverse.svg +4 -4
- package/src/browser/icons/add.svg +4 -4
- package/src/browser/icons/arrow-down-bright.svg +6 -6
- package/src/browser/icons/arrow-down-dark.svg +6 -6
- package/src/browser/icons/arrow-up-bright.svg +6 -6
- package/src/browser/icons/arrow-up-dark.svg +6 -6
- package/src/browser/icons/case-sensitive-dark.svg +16 -16
- package/src/browser/icons/case-sensitive.svg +16 -16
- package/src/browser/icons/chevron-right-dark.svg +5 -5
- package/src/browser/icons/chevron-right-light.svg +6 -6
- package/src/browser/icons/circle-bright.svg +7 -7
- package/src/browser/icons/circle-dark.svg +7 -7
- package/src/browser/icons/clear-search-results-dark.svg +7 -7
- package/src/browser/icons/clear-search-results.svg +7 -7
- package/src/browser/icons/close-all-bright.svg +7 -7
- package/src/browser/icons/close-all-dark.svg +7 -7
- package/src/browser/icons/close-bright.svg +7 -7
- package/src/browser/icons/close-dark.svg +7 -7
- package/src/browser/icons/collapse.svg +4 -4
- package/src/browser/icons/edit-json-dark.svg +6 -6
- package/src/browser/icons/edit-json.svg +6 -6
- package/src/browser/icons/expand.svg +4 -4
- package/src/browser/icons/loading-dark.svg +6 -6
- package/src/browser/icons/loading-light.svg +6 -6
- package/src/browser/icons/open-change-bright.svg +3 -3
- package/src/browser/icons/open-change-dark.svg +4 -4
- package/src/browser/icons/open-file-bright.svg +4 -4
- package/src/browser/icons/open-file-dark.svg +4 -4
- package/src/browser/icons/preview-bright.svg +3 -3
- package/src/browser/icons/preview-dark.svg +3 -3
- package/src/browser/icons/regex-dark.svg +10 -10
- package/src/browser/icons/regex.svg +10 -10
- package/src/browser/icons/remove-all-inverse.svg +4 -4
- package/src/browser/icons/remove-all.svg +4 -4
- package/src/browser/icons/replace-all-inverse.svg +13 -13
- package/src/browser/icons/replace-all.svg +13 -13
- package/src/browser/icons/replace-inverse.svg +15 -15
- package/src/browser/icons/replace.svg +15 -15
- package/src/browser/icons/whole-word-dark.svg +19 -19
- package/src/browser/icons/whole-word.svg +19 -19
- package/src/browser/index.ts +50 -50
- package/src/browser/json-schema-store.ts +118 -118
- package/src/browser/keybinding.spec.ts +554 -554
- package/src/browser/keybinding.ts +759 -759
- package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +108 -108
- package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +171 -171
- package/src/browser/keyboard/browser-keyboard-layout-provider.ts +469 -469
- package/src/browser/keyboard/browser-keyboard-module.ts +30 -30
- package/src/browser/keyboard/index.ts +20 -20
- package/src/browser/keyboard/keyboard-layout-service.spec.ts +121 -121
- package/src/browser/keyboard/keyboard-layout-service.ts +455 -455
- package/src/browser/keyboard/keys.spec.ts +258 -258
- package/src/browser/keyboard/keys.ts +20 -20
- package/src/browser/keys.ts +21 -21
- package/src/browser/label-parser.spec.ts +165 -165
- package/src/browser/label-parser.ts +108 -108
- package/src/browser/label-provider.spec.ts +62 -62
- package/src/browser/label-provider.ts +385 -385
- package/src/browser/language-icon-provider.ts +55 -55
- package/src/browser/language-service.ts +77 -77
- package/src/browser/logger-frontend-module.ts +65 -65
- package/src/browser/markdown-rendering/markdown-renderer.ts +98 -98
- package/src/browser/menu/browser-context-menu-renderer.ts +48 -48
- package/src/browser/menu/browser-menu-module.ts +28 -28
- package/src/browser/menu/browser-menu-plugin.ts +491 -491
- package/src/browser/menu/context-menu-context.ts +41 -41
- package/src/browser/messaging/connection-source.ts +26 -26
- package/src/browser/messaging/frontend-id-provider.ts +37 -37
- package/src/browser/messaging/index.ts +18 -18
- package/src/browser/messaging/messaging-frontend-module.ts +41 -41
- package/src/browser/messaging/service-connection-provider.ts +140 -140
- package/src/browser/messaging/ws-connection-provider.ts +49 -49
- package/src/browser/messaging/ws-connection-source.ts +230 -230
- package/src/browser/mime-service.ts +30 -30
- package/src/browser/navigatable-types.ts +81 -81
- package/src/browser/navigatable.ts +39 -39
- package/src/browser/open-with-service.ts +140 -140
- package/src/browser/opener-service.spec.ts +49 -49
- package/src/browser/opener-service.ts +169 -169
- package/src/browser/performance/frontend-stopwatch.ts +65 -65
- package/src/browser/performance/index.ts +18 -18
- package/src/browser/performance/measurement-frontend-bindings.ts +31 -31
- package/src/browser/preferences/index.ts +23 -23
- package/src/browser/preferences/injectable-preference-proxy.ts +283 -283
- package/src/browser/preferences/preference-configurations.ts +82 -82
- package/src/browser/preferences/preference-contribution.ts +436 -436
- package/src/browser/preferences/preference-language-override-service.ts +111 -111
- package/src/browser/preferences/preference-provider.spec.ts +36 -36
- package/src/browser/preferences/preference-provider.ts +277 -277
- package/src/browser/preferences/preference-proxy.spec.ts +367 -367
- package/src/browser/preferences/preference-proxy.ts +367 -367
- package/src/browser/preferences/preference-schema-provider.spec.ts +130 -130
- package/src/browser/preferences/preference-scope.ts +18 -18
- package/src/browser/preferences/preference-service.spec.ts +613 -613
- package/src/browser/preferences/preference-service.ts +594 -594
- package/src/browser/preferences/preference-validation-service.spec.ts +334 -334
- package/src/browser/preferences/preference-validation-service.ts +358 -358
- package/src/browser/preferences/test/index.ts +19 -19
- package/src/browser/preferences/test/mock-preference-provider.ts +50 -50
- package/src/browser/preferences/test/mock-preference-proxy.ts +48 -48
- package/src/browser/preferences/test/mock-preference-service.ts +63 -63
- package/src/browser/preload/i18n-preload-contribution.ts +50 -50
- package/src/browser/preload/os-preload-contribution.ts +37 -37
- package/src/browser/preload/preload-module.ts +45 -45
- package/src/browser/preload/preloader.ts +37 -37
- package/src/browser/preload/theme-preload-contribution.ts +31 -31
- package/src/browser/progress-bar-factory.ts +29 -29
- package/src/browser/progress-bar.ts +76 -76
- package/src/browser/progress-client.ts +53 -53
- package/src/browser/progress-location-service.spec.ts +50 -50
- package/src/browser/progress-location-service.ts +96 -96
- package/src/browser/progress-status-bar-item.ts +83 -83
- package/src/browser/quick-input/index.ts +23 -23
- package/src/browser/quick-input/quick-access.ts +75 -75
- package/src/browser/quick-input/quick-command-frontend-contribution.ts +89 -89
- package/src/browser/quick-input/quick-command-service.ts +246 -246
- package/src/browser/quick-input/quick-help-service.ts +87 -87
- package/src/browser/quick-input/quick-input-frontend-contribution.ts +33 -33
- package/src/browser/quick-input/quick-input-service.spec.ts +176 -176
- package/src/browser/quick-input/quick-input-service.ts +17 -17
- package/src/browser/quick-input/quick-pick-service-impl.ts +69 -69
- package/src/browser/quick-input/quick-view-service.ts +83 -83
- package/src/browser/request/browser-request-module.ts +23 -23
- package/src/browser/request/browser-request-service.ts +172 -172
- package/src/browser/resource-context-key.ts +77 -77
- package/src/browser/saveable-service.ts +332 -332
- package/src/browser/saveable.ts +395 -395
- package/src/browser/secondary-window-handler.ts +211 -211
- package/src/browser/shell/additional-views-menu-widget.tsx +71 -71
- package/src/browser/shell/application-shell-mouse-tracker.ts +103 -103
- package/src/browser/shell/application-shell.ts +2271 -2271
- package/src/browser/shell/current-widget-command-adapter.ts +57 -57
- package/src/browser/shell/index.ts +23 -23
- package/src/browser/shell/shell-layout-restorer.ts +399 -399
- package/src/browser/shell/side-panel-handler.ts +794 -794
- package/src/browser/shell/side-panel-toolbar.ts +111 -111
- package/src/browser/shell/sidebar-bottom-menu-widget.tsx +39 -39
- package/src/browser/shell/sidebar-menu-widget.tsx +183 -183
- package/src/browser/shell/sidebar-top-menu-widget.tsx +26 -26
- package/src/browser/shell/split-panels.ts +191 -191
- package/src/browser/shell/tab-bar-decorator.ts +106 -106
- package/src/browser/shell/tab-bar-toolbar/index.ts +19 -19
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +31 -31
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +242 -242
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +149 -149
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +62 -62
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +443 -443
- package/src/browser/shell/tab-bars.spec.ts +63 -63
- package/src/browser/shell/tab-bars.ts +1468 -1468
- package/src/browser/shell/theia-dock-panel.ts +265 -265
- package/src/browser/shell/view-column-service.ts +125 -125
- package/src/browser/shell/view-contribution.ts +178 -178
- package/src/browser/source-tree/index.ts +19 -19
- package/src/browser/source-tree/source-tree-widget.tsx +107 -107
- package/src/browser/source-tree/source-tree.ts +146 -146
- package/src/browser/source-tree/tree-source.ts +73 -73
- package/src/browser/status-bar/index.ts +29 -29
- package/src/browser/status-bar/status-bar-types.ts +97 -97
- package/src/browser/status-bar/status-bar-view-model.ts +209 -209
- package/src/browser/status-bar/status-bar.tsx +189 -189
- package/src/browser/storage-service.spec.ts +76 -76
- package/src/browser/storage-service.ts +129 -129
- package/src/browser/style/about.css +36 -36
- package/src/browser/style/alert-messages.css +62 -62
- package/src/browser/style/ansi.css +88 -88
- package/src/browser/style/breadcrumbs.css +130 -130
- package/src/browser/style/dialog.css +126 -126
- package/src/browser/style/dockpanel.css +76 -76
- package/src/browser/style/hover-service.css +101 -101
- package/src/browser/style/icons.css +61 -61
- package/src/browser/style/index.css +353 -353
- package/src/browser/style/materialcolors.css +278 -278
- package/src/browser/style/menus.css +230 -230
- package/src/browser/style/notification.css +39 -39
- package/src/browser/style/os.css +87 -87
- package/src/browser/style/progress-bar.css +43 -43
- package/src/browser/style/quick-title-bar.css +45 -45
- package/src/browser/style/scrollbars.css +172 -172
- package/src/browser/style/search-box.css +123 -123
- package/src/browser/style/select-component.css +107 -107
- package/src/browser/style/sidepanel.css +367 -367
- package/src/browser/style/split-widget.css +38 -38
- package/src/browser/style/status-bar.css +127 -127
- package/src/browser/style/tabs.css +647 -647
- package/src/browser/style/tooltip.css +28 -28
- package/src/browser/style/tree-decorators.css +81 -81
- package/src/browser/style/tree.css +232 -232
- package/src/browser/style/view-container.css +187 -187
- package/src/browser/style/widget.css +19 -19
- package/src/browser/styling-service.ts +96 -96
- package/src/browser/supported-encodings.ts +262 -262
- package/src/browser/test/jsdom.ts +69 -69
- package/src/browser/test/mock-connection-status-service.ts +33 -33
- package/src/browser/test/mock-env-variables-server.ts +47 -47
- package/src/browser/test/mock-opener-service.ts +34 -34
- package/src/browser/test/mock-storage-service.ts +49 -49
- package/src/browser/theming.ts +206 -206
- package/src/browser/tooltip-service.tsx +96 -96
- package/src/browser/tree/fuzzy-search.spec.ts +99 -99
- package/src/browser/tree/fuzzy-search.ts +136 -136
- package/src/browser/tree/index.ts +29 -29
- package/src/browser/tree/search-box-debounce.ts +96 -96
- package/src/browser/tree/search-box.ts +355 -355
- package/src/browser/tree/test/mock-selectable-tree-model.ts +109 -109
- package/src/browser/tree/test/mock-tree-model.ts +136 -136
- package/src/browser/tree/test/tree-test-container.ts +50 -50
- package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -46
- package/src/browser/tree/tree-compression/compressed-tree-model.ts +88 -88
- package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +203 -203
- package/src/browser/tree/tree-compression/index.ts +20 -20
- package/src/browser/tree/tree-compression/tree-compression-service.ts +125 -125
- package/src/browser/tree/tree-compression/tree-compression.css +28 -28
- package/src/browser/tree/tree-consistency.spec.ts +105 -105
- package/src/browser/tree/tree-container.spec.ts +45 -45
- package/src/browser/tree/tree-container.ts +155 -155
- package/src/browser/tree/tree-decorator.spec.ts +162 -162
- package/src/browser/tree/tree-decorator.ts +238 -238
- package/src/browser/tree/tree-expansion.spec.ts +173 -173
- package/src/browser/tree/tree-expansion.ts +165 -165
- package/src/browser/tree/tree-focus-service.ts +55 -55
- package/src/browser/tree/tree-iterator.spec.ts +170 -170
- package/src/browser/tree/tree-iterator.ts +256 -256
- package/src/browser/tree/tree-label-provider.ts +40 -40
- package/src/browser/tree/tree-model.ts +562 -562
- package/src/browser/tree/tree-navigation.ts +58 -58
- package/src/browser/tree/tree-preference.ts +50 -50
- package/src/browser/tree/tree-search.ts +128 -128
- package/src/browser/tree/tree-selectable.spec.ts +152 -152
- package/src/browser/tree/tree-selection-impl.ts +176 -176
- package/src/browser/tree/tree-selection-state.spec.ts +462 -462
- package/src/browser/tree/tree-selection-state.ts +245 -245
- package/src/browser/tree/tree-selection.ts +159 -159
- package/src/browser/tree/tree-view-welcome-widget.tsx +263 -263
- package/src/browser/tree/tree-widget-selection.ts +45 -45
- package/src/browser/tree/tree-widget.tsx +1591 -1591
- package/src/browser/tree/tree.spec.ts +241 -241
- package/src/browser/tree/tree.ts +425 -425
- package/src/browser/undo-redo-handler.ts +85 -85
- package/src/browser/user-working-directory-provider.ts +77 -77
- package/src/browser/view-container.ts +1640 -1640
- package/src/browser/widget-decoration.ts +358 -358
- package/src/browser/widget-manager.spec.ts +102 -102
- package/src/browser/widget-manager.ts +318 -318
- package/src/browser/widget-open-handler.ts +168 -168
- package/src/browser/widgets/alert-message.tsx +56 -56
- package/src/browser/widgets/enhanced-preview-widget.ts +27 -27
- package/src/browser/widgets/extractable-widget.ts +33 -33
- package/src/browser/widgets/index.ts +21 -21
- package/src/browser/widgets/previewable-widget.ts +31 -31
- package/src/browser/widgets/react-renderer.tsx +53 -53
- package/src/browser/widgets/react-widget.tsx +51 -51
- package/src/browser/widgets/select-component.tsx +367 -367
- package/src/browser/widgets/split-widget.ts +163 -163
- package/src/browser/widgets/widget.ts +406 -406
- package/src/browser/window/browser-window-module.ts +32 -32
- package/src/browser/window/default-secondary-window-service.ts +189 -189
- package/src/browser/window/default-window-service.spec.ts +78 -78
- package/src/browser/window/default-window-service.ts +171 -171
- package/src/browser/window/secondary-window-service.ts +39 -39
- package/src/browser/window/test/mock-window-service.ts +29 -29
- package/src/browser/window/window-service.ts +78 -78
- package/src/browser/window/window-title-service.ts +107 -107
- package/src/browser/window/window-title-updater.ts +95 -95
- package/src/browser/window-contribution.ts +64 -64
- package/src/browser-only/frontend-only-application-module.ts +116 -116
- package/src/browser-only/i18n/i18n-frontend-only-module.ts +37 -37
- package/src/browser-only/logger-frontend-only-module.ts +63 -63
- package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +39 -39
- package/src/browser-only/messaging/messaging-frontend-only-module.ts +42 -42
- package/src/browser-only/preload/frontend-only-preload-module.ts +49 -49
- package/src/common/accessibility.ts +33 -33
- package/src/common/application-error.spec.ts +27 -27
- package/src/common/application-error.ts +76 -76
- package/src/common/application-protocol.ts +42 -42
- package/src/common/array-utils.ts +129 -129
- package/src/common/buffer.ts +228 -228
- package/src/common/cancellation.ts +163 -163
- package/src/common/char-code.ts +438 -438
- package/src/common/collections.ts +125 -125
- package/src/common/color.ts +103 -103
- package/src/common/command.spec.ts +208 -208
- package/src/common/command.ts +489 -489
- package/src/common/contribution-filter/contribution-filter-registry.ts +79 -79
- package/src/common/contribution-filter/contribution-filter.ts +64 -64
- package/src/common/contribution-filter/filter.ts +23 -23
- package/src/common/contribution-filter/index.ts +19 -19
- package/src/common/contribution-provider.ts +96 -96
- package/src/common/disposable.spec.ts +94 -94
- package/src/common/disposable.ts +188 -188
- package/src/common/encoding-service.ts +380 -380
- package/src/common/encodings.ts +24 -24
- package/src/common/env-variables/env-variables-protocol.ts +38 -38
- package/src/common/env-variables/index.ts +17 -17
- package/src/common/event.spec.ts +32 -32
- package/src/common/event.ts +493 -493
- package/src/common/file-uri.ts +61 -61
- package/src/common/frontend-application-state.ts +38 -38
- package/src/common/glob.ts +741 -741
- package/src/common/hash.ts +85 -85
- package/src/common/i18n/localization-server.ts +25 -25
- package/src/common/i18n/localization.ts +80 -80
- package/src/common/i18n/nls.metadata.json +34112 -34112
- package/src/common/index.ts +51 -51
- package/src/common/json-schema.ts +108 -108
- package/src/common/key-store.ts +26 -26
- package/src/common/keybinding.ts +152 -152
- package/src/common/keyboard/keyboard-layout-provider.ts +51 -51
- package/src/common/keys.ts +694 -694
- package/src/common/label-protocol.ts +35 -35
- package/src/common/logger-protocol.ts +119 -119
- package/src/common/logger-watcher.ts +48 -48
- package/src/common/logger.spec.ts +46 -46
- package/src/common/logger.ts +389 -389
- package/src/common/lsp-types.ts +34 -34
- package/src/common/markdown-rendering/icon-utilities.ts +30 -30
- package/src/common/markdown-rendering/index.ts +18 -18
- package/src/common/markdown-rendering/markdown-string.ts +152 -152
- package/src/common/menu/action-menu-node.ts +65 -65
- package/src/common/menu/composite-menu-node.spec.ts +67 -67
- package/src/common/menu/composite-menu-node.ts +114 -114
- package/src/common/menu/index.ts +21 -21
- package/src/common/menu/menu-adapter.ts +103 -103
- package/src/common/menu/menu-model-registry.ts +374 -374
- package/src/common/menu/menu-types.ts +220 -220
- package/src/common/menu/menu.spec.ts +101 -101
- package/src/common/message-rpc/channel.spec.ts +88 -88
- package/src/common/message-rpc/channel.ts +300 -300
- package/src/common/message-rpc/index.ts +22 -22
- package/src/common/message-rpc/message-buffer.ts +105 -105
- package/src/common/message-rpc/msg-pack-extension-manager.ts +70 -70
- package/src/common/message-rpc/rpc-message-encoder.spec.ts +65 -65
- package/src/common/message-rpc/rpc-message-encoder.ts +190 -190
- package/src/common/message-rpc/rpc-protocol.ts +255 -255
- package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -41
- package/src/common/message-rpc/uint8-array-message-buffer.ts +213 -213
- package/src/common/message-service-protocol.ts +148 -148
- package/src/common/message-service.ts +226 -226
- package/src/common/messaging/connection-error-handler.ts +73 -73
- package/src/common/messaging/connection-management.ts +43 -43
- package/src/common/messaging/handler.ts +26 -26
- package/src/common/messaging/index.ts +19 -19
- package/src/common/messaging/proxy-factory.spec.ts +108 -108
- package/src/common/messaging/proxy-factory.ts +336 -336
- package/src/common/messaging/socket-write-buffer.ts +52 -52
- package/src/common/messaging/web-socket-channel.ts +76 -76
- package/src/common/nls.ts +151 -151
- package/src/common/numbers.ts +21 -21
- package/src/common/objects.spec.ts +112 -112
- package/src/common/objects.ts +123 -123
- package/src/common/os.ts +82 -82
- package/src/common/path.spec.ts +415 -415
- package/src/common/path.ts +334 -334
- package/src/common/paths.ts +250 -250
- package/src/common/performance/index.ts +19 -19
- package/src/common/performance/measurement-protocol.ts +104 -104
- package/src/common/performance/measurement.ts +130 -130
- package/src/common/performance/stopwatch.ts +183 -183
- package/src/common/preferences/preference-schema.ts +101 -101
- package/src/common/preferences/preference-scope.spec.ts +48 -48
- package/src/common/preferences/preference-scope.ts +68 -68
- package/src/common/prioritizeable.ts +58 -58
- package/src/common/progress-service-protocol.ts +35 -35
- package/src/common/progress-service.ts +82 -82
- package/src/common/promise-util.spec.ts +102 -102
- package/src/common/promise-util.ts +143 -143
- package/src/common/quick-pick-service.ts +353 -353
- package/src/common/reference.spec.ts +145 -145
- package/src/common/reference.ts +230 -230
- package/src/common/resource.ts +430 -430
- package/src/common/selection-command-handler.ts +101 -101
- package/src/common/selection-service.spec.ts +43 -43
- package/src/common/selection-service.ts +49 -49
- package/src/common/selection.ts +50 -50
- package/src/common/severity.ts +111 -111
- package/src/common/stream.ts +718 -718
- package/src/common/strings.ts +231 -231
- package/src/common/telemetry.ts +45 -45
- package/src/common/ternary-search-tree.ts +417 -417
- package/src/common/test/expect.ts +34 -34
- package/src/common/test/mock-logger.ts +118 -118
- package/src/common/test/mock-menu.ts +35 -35
- package/src/common/test/mock-resource-provider.ts +33 -33
- package/src/common/theme.ts +68 -68
- package/src/common/types.spec.ts +86 -86
- package/src/common/types.ts +140 -140
- package/src/common/uri-command-handler.spec.ts +90 -90
- package/src/common/uri-command-handler.ts +148 -148
- package/src/common/uri.spec.ts +278 -278
- package/src/common/uri.ts +279 -279
- package/src/common/uuid.ts +45 -45
- package/src/common/version.ts +17 -17
- package/src/common/view-column.ts +33 -33
- package/src/common/window.ts +34 -34
- package/src/electron-browser/electron-clipboard-service.ts +32 -32
- package/src/electron-browser/electron-uri-handler.ts +42 -42
- package/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +39 -39
- package/src/electron-browser/keyboard/electron-keyboard-module.ts +28 -28
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +122 -122
- package/src/electron-browser/menu/electron-main-menu-factory.ts +339 -339
- package/src/electron-browser/menu/electron-menu-contribution.ts +506 -506
- package/src/electron-browser/menu/electron-menu-module.ts +40 -40
- package/src/electron-browser/menu/electron-menu-style.css +110 -110
- package/src/electron-browser/messaging/electron-frontend-id-provider.ts +25 -25
- package/src/electron-browser/messaging/electron-ipc-connection-source.ts +65 -65
- package/src/electron-browser/messaging/electron-local-ws-connection-source.ts +45 -45
- package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +78 -78
- package/src/electron-browser/messaging/electron-ws-connection-source.ts +38 -38
- package/src/electron-browser/preload.ts +264 -264
- package/src/electron-browser/request/electron-browser-request-module.ts +26 -26
- package/src/electron-browser/token/electron-token-frontend-module.ts +22 -22
- package/src/electron-browser/window/electron-frontend-application-state.ts +26 -26
- package/src/electron-browser/window/electron-secondary-window-service.ts +35 -35
- package/src/electron-browser/window/electron-window-module.ts +48 -48
- package/src/electron-browser/window/electron-window-preferences.ts +76 -76
- package/src/electron-browser/window/electron-window-service.ts +109 -109
- package/src/electron-browser/window/external-app-open-handler.ts +42 -42
- package/src/electron-common/electron-api.ts +157 -157
- package/src/electron-common/electron-main-window-service.ts +24 -24
- package/src/electron-common/electron-token.ts +27 -27
- package/src/electron-main/electron-api-main.ts +373 -373
- package/src/electron-main/electron-main-application-module.ts +65 -65
- package/src/electron-main/electron-main-application.ts +860 -860
- package/src/electron-main/electron-main-constants.ts +23 -23
- package/src/electron-main/electron-main-window-service-impl.ts +44 -44
- package/src/electron-main/electron-security-token-service.ts +36 -36
- package/src/electron-main/event-utils.ts +36 -36
- package/src/electron-main/messaging/electron-connection-handler.ts +21 -21
- package/src/electron-main/messaging/electron-messaging-contribution.ts +143 -143
- package/src/electron-main/messaging/electron-messaging-service.ts +35 -35
- package/src/electron-main/theia-electron-window.ts +219 -219
- package/src/electron-node/cli/electron-backend-cli-module.ts +24 -24
- package/src/electron-node/cli/electron-cli-contribution.ts +35 -35
- package/src/electron-node/hosting/electron-backend-hosting-module.ts +24 -24
- package/src/electron-node/hosting/electron-ws-origin-validator.ts +37 -37
- package/src/electron-node/keyboard/electron-backend-keyboard-module.ts +30 -30
- package/src/electron-node/keyboard/electron-keyboard-layout-provider.ts +35 -35
- package/src/electron-node/request/electron-backend-request-module.ts +23 -23
- package/src/electron-node/request/electron-backend-request-service.ts +78 -78
- package/src/electron-node/token/electron-token-backend-contribution.ts +48 -48
- package/src/electron-node/token/electron-token-backend-module.ts +28 -28
- package/src/electron-node/token/electron-token-validator.ts +93 -93
- package/src/node/application-server.ts +59 -59
- package/src/node/backend-application-config-provider.spec.ts +29 -29
- package/src/node/backend-application-config-provider.ts +48 -48
- package/src/node/backend-application-module.ts +139 -139
- package/src/node/backend-application.ts +374 -374
- package/src/node/cli.spec.ts +94 -94
- package/src/node/cli.ts +63 -63
- package/src/node/console-logger-server.spec.ts +59 -59
- package/src/node/console-logger-server.ts +76 -76
- package/src/node/debug.ts +30 -30
- package/src/node/dynamic-require.ts +56 -56
- package/src/node/env-variables/env-variables-server.ts +123 -123
- package/src/node/env-variables/index.ts +17 -17
- package/src/node/environment-utils.spec.ts +92 -92
- package/src/node/environment-utils.ts +66 -66
- package/src/node/file-uri.spec.ts +76 -76
- package/src/node/filesystem-locking.ts +77 -77
- package/src/node/hosting/backend-application-hosts.ts +60 -60
- package/src/node/hosting/backend-hosting-module.ts +26 -26
- package/src/node/hosting/ws-origin-validator.ts +36 -36
- package/src/node/i18n/i18n-backend-module.ts +42 -42
- package/src/node/i18n/localization-contribution.ts +112 -112
- package/src/node/i18n/localization-provider.ts +125 -125
- package/src/node/i18n/localization-server.ts +52 -52
- package/src/node/i18n/theia-localization-contribution.ts +40 -40
- package/src/node/index.ts +22 -22
- package/src/node/key-store-server.ts +162 -162
- package/src/node/logger-backend-module.ts +88 -88
- package/src/node/logger-cli-contribution.spec.ts +245 -245
- package/src/node/logger-cli-contribution.ts +168 -168
- package/src/node/main.ts +33 -33
- package/src/node/messaging/binary-message-pipe.ts +168 -168
- package/src/node/messaging/connection-container-module.ts +96 -96
- package/src/node/messaging/default-messaging-service.ts +129 -129
- package/src/node/messaging/frontend-connection-service.ts +24 -24
- package/src/node/messaging/index.ts +19 -19
- package/src/node/messaging/ipc-bootstrap.ts +27 -27
- package/src/node/messaging/ipc-channel.ts +77 -77
- package/src/node/messaging/ipc-connection-provider.ts +107 -107
- package/src/node/messaging/ipc-protocol.ts +76 -76
- package/src/node/messaging/messaging-backend-module.ts +52 -52
- package/src/node/messaging/messaging-listeners.ts +52 -52
- package/src/node/messaging/messaging-service.ts +46 -46
- package/src/node/messaging/test/test-web-socket-channel.ts +61 -61
- package/src/node/messaging/websocket-endpoint.ts +79 -79
- package/src/node/messaging/websocket-frontend-connection-service.ts +186 -186
- package/src/node/os-backend-provider.ts +25 -25
- package/src/node/performance/index.ts +18 -18
- package/src/node/performance/measurement-backend-bindings.ts +35 -35
- package/src/node/performance/node-stopwatch.ts +40 -40
- package/src/node/process-utils.spec.ts +48 -48
- package/src/node/process-utils.ts +102 -102
- package/src/node/remote/backend-remote-service.ts +25 -25
- package/src/node/remote/remote-cli-contribution.ts +34 -34
- package/src/node/remote/remote-copy-contribution.ts +45 -45
- package/src/node/request/backend-request-facade.ts +39 -39
- package/src/node/request/backend-request-module.ts +25 -25
- package/src/node/request/proxy-cli-contribution.ts +65 -65
- package/src/node/ws-request-validators.ts +56 -56
- package/src/typings/native-keymap.d.ts +108 -108
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2022 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-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { inject, injectable } from 'inversify';
|
|
18
|
-
import { Disposable, DisposableCollection, disposableTimeout, isOSX } from '../common';
|
|
19
|
-
import { MarkdownString } from '../common/markdown-rendering/markdown-string';
|
|
20
|
-
import { animationFrame } from './browser';
|
|
21
|
-
import { MarkdownRenderer, MarkdownRendererFactory } from './markdown-rendering/markdown-renderer';
|
|
22
|
-
import { PreferenceService } from './preferences';
|
|
23
|
-
|
|
24
|
-
import '../../src/browser/style/hover-service.css';
|
|
25
|
-
|
|
26
|
-
export type HoverPosition = 'left' | 'right' | 'top' | 'bottom';
|
|
27
|
-
|
|
28
|
-
export namespace HoverPosition {
|
|
29
|
-
export function invertIfNecessary(position: HoverPosition, target: DOMRect, host: DOMRect, totalWidth: number, totalHeight: number): HoverPosition {
|
|
30
|
-
if (position === 'left') {
|
|
31
|
-
if (target.left - host.width - 5 < 0) {
|
|
32
|
-
return 'right';
|
|
33
|
-
}
|
|
34
|
-
} else if (position === 'right') {
|
|
35
|
-
if (target.right + host.width + 5 > totalWidth) {
|
|
36
|
-
return 'left';
|
|
37
|
-
}
|
|
38
|
-
} else if (position === 'top') {
|
|
39
|
-
if (target.top - host.height - 5 < 0) {
|
|
40
|
-
return 'bottom';
|
|
41
|
-
}
|
|
42
|
-
} else if (position === 'bottom') {
|
|
43
|
-
if (target.bottom + host.height + 5 > totalHeight) {
|
|
44
|
-
return 'top';
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return position;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export interface HoverRequest {
|
|
52
|
-
content: string | MarkdownString | HTMLElement
|
|
53
|
-
target: HTMLElement
|
|
54
|
-
/**
|
|
55
|
-
* The position where the hover should appear.
|
|
56
|
-
* Note that the hover service will try to invert the position (i.e. right -> left)
|
|
57
|
-
* if the specified content does not fit in the window next to the target element
|
|
58
|
-
*/
|
|
59
|
-
position: HoverPosition
|
|
60
|
-
/**
|
|
61
|
-
* Additional css classes that should be added to the hover box.
|
|
62
|
-
* Used to style certain boxes different e.g. for the extended tab preview.
|
|
63
|
-
*/
|
|
64
|
-
cssClasses?: string[]
|
|
65
|
-
/**
|
|
66
|
-
* A function to render a visual preview on the hover.
|
|
67
|
-
* Function that takes the desired width and returns a HTMLElement to be rendered.
|
|
68
|
-
*/
|
|
69
|
-
visualPreview?: (width: number) => HTMLElement | undefined;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
@injectable()
|
|
73
|
-
export class HoverService {
|
|
74
|
-
protected static hostClassName = 'theia-hover';
|
|
75
|
-
protected static styleSheetId = 'theia-hover-style';
|
|
76
|
-
@inject(PreferenceService) protected readonly preferences: PreferenceService;
|
|
77
|
-
@inject(MarkdownRendererFactory) protected readonly markdownRendererFactory: MarkdownRendererFactory;
|
|
78
|
-
|
|
79
|
-
protected _markdownRenderer: MarkdownRenderer | undefined;
|
|
80
|
-
protected get markdownRenderer(): MarkdownRenderer {
|
|
81
|
-
this._markdownRenderer ||= this.markdownRendererFactory();
|
|
82
|
-
return this._markdownRenderer;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
protected _hoverHost: HTMLElement | undefined;
|
|
86
|
-
protected get hoverHost(): HTMLElement {
|
|
87
|
-
if (!this._hoverHost) {
|
|
88
|
-
this._hoverHost = document.createElement('div');
|
|
89
|
-
this._hoverHost.classList.add(HoverService.hostClassName);
|
|
90
|
-
this._hoverHost.style.position = 'absolute';
|
|
91
|
-
}
|
|
92
|
-
return this._hoverHost;
|
|
93
|
-
}
|
|
94
|
-
protected pendingTimeout: Disposable | undefined;
|
|
95
|
-
protected hoverTarget: HTMLElement | undefined;
|
|
96
|
-
protected lastHidHover = Date.now();
|
|
97
|
-
protected readonly disposeOnHide = new DisposableCollection();
|
|
98
|
-
|
|
99
|
-
requestHover(request: HoverRequest): void {
|
|
100
|
-
if (request.target !== this.hoverTarget) {
|
|
101
|
-
this.cancelHover();
|
|
102
|
-
this.pendingTimeout = disposableTimeout(() => this.renderHover(request), this.getHoverDelay());
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
protected getHoverDelay(): number {
|
|
107
|
-
return Date.now() - this.lastHidHover < 200
|
|
108
|
-
? 0
|
|
109
|
-
: this.preferences.get('workbench.hover.delay', isOSX ? 1500 : 500);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
protected async renderHover(request: HoverRequest): Promise<void> {
|
|
113
|
-
const host = this.hoverHost;
|
|
114
|
-
let firstChild: HTMLElement | undefined;
|
|
115
|
-
const { target, content, position, cssClasses } = request;
|
|
116
|
-
if (cssClasses) {
|
|
117
|
-
host.classList.add(...cssClasses);
|
|
118
|
-
}
|
|
119
|
-
this.hoverTarget = target;
|
|
120
|
-
if (content instanceof HTMLElement) {
|
|
121
|
-
host.appendChild(content);
|
|
122
|
-
firstChild = content;
|
|
123
|
-
} else if (typeof content === 'string') {
|
|
124
|
-
host.textContent = content;
|
|
125
|
-
} else {
|
|
126
|
-
const renderedContent = this.markdownRenderer.render(content);
|
|
127
|
-
this.disposeOnHide.push(renderedContent);
|
|
128
|
-
host.appendChild(renderedContent.element);
|
|
129
|
-
firstChild = renderedContent.element;
|
|
130
|
-
}
|
|
131
|
-
// browsers might insert linebreaks when the hover appears at the edge of the window
|
|
132
|
-
// resetting the position prevents that
|
|
133
|
-
host.style.left = '0px';
|
|
134
|
-
host.style.top = '0px';
|
|
135
|
-
document.body.append(host);
|
|
136
|
-
|
|
137
|
-
if (request.visualPreview) {
|
|
138
|
-
// If just a string is being rendered use the size of the outer box
|
|
139
|
-
const width = firstChild ? firstChild.offsetWidth : this.hoverHost.offsetWidth;
|
|
140
|
-
const visualPreview = request.visualPreview(width);
|
|
141
|
-
if (visualPreview) {
|
|
142
|
-
host.appendChild(visualPreview);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
await animationFrame(); // Allow the browser to size the host
|
|
147
|
-
const updatedPosition = this.setHostPosition(target, host, position);
|
|
148
|
-
|
|
149
|
-
this.disposeOnHide.push({
|
|
150
|
-
dispose: () => {
|
|
151
|
-
this.lastHidHover = Date.now();
|
|
152
|
-
host.classList.remove(updatedPosition);
|
|
153
|
-
if (cssClasses) {
|
|
154
|
-
host.classList.remove(...cssClasses);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
this.listenForMouseOut();
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
protected setHostPosition(target: HTMLElement, host: HTMLElement, position: HoverPosition): HoverPosition {
|
|
163
|
-
const targetDimensions = target.getBoundingClientRect();
|
|
164
|
-
const hostDimensions = host.getBoundingClientRect();
|
|
165
|
-
const documentWidth = document.body.getBoundingClientRect().width;
|
|
166
|
-
// document.body.getBoundingClientRect().height doesn't work as expected
|
|
167
|
-
// scrollHeight will always be accurate here: https://stackoverflow.com/a/44077777
|
|
168
|
-
const documentHeight = document.documentElement.scrollHeight;
|
|
169
|
-
position = HoverPosition.invertIfNecessary(position, targetDimensions, hostDimensions, documentWidth, documentHeight);
|
|
170
|
-
if (position === 'top' || position === 'bottom') {
|
|
171
|
-
const targetMiddleWidth = targetDimensions.left + (targetDimensions.width / 2);
|
|
172
|
-
const middleAlignment = targetMiddleWidth - (hostDimensions.width / 2);
|
|
173
|
-
const furthestRight = Math.min(documentWidth - hostDimensions.width, middleAlignment);
|
|
174
|
-
const left = Math.max(0, furthestRight);
|
|
175
|
-
const top = position === 'top'
|
|
176
|
-
? targetDimensions.top - hostDimensions.height - 5
|
|
177
|
-
: targetDimensions.bottom + 5;
|
|
178
|
-
host.style.setProperty('--theia-hover-before-position', `${targetMiddleWidth - left - 5}px`);
|
|
179
|
-
host.style.top = `${top}px`;
|
|
180
|
-
host.style.left = `${left}px`;
|
|
181
|
-
} else {
|
|
182
|
-
const targetMiddleHeight = targetDimensions.top + (targetDimensions.height / 2);
|
|
183
|
-
const middleAlignment = targetMiddleHeight - (hostDimensions.height / 2);
|
|
184
|
-
const furthestTop = Math.min(documentHeight - hostDimensions.height, middleAlignment);
|
|
185
|
-
const top = Math.max(0, furthestTop);
|
|
186
|
-
const left = position === 'left'
|
|
187
|
-
? targetDimensions.left - hostDimensions.width - 5
|
|
188
|
-
: targetDimensions.right + 5;
|
|
189
|
-
host.style.setProperty('--theia-hover-before-position', `${targetMiddleHeight - top - 5}px`);
|
|
190
|
-
host.style.left = `${left}px`;
|
|
191
|
-
host.style.top = `${top}px`;
|
|
192
|
-
}
|
|
193
|
-
host.classList.add(position);
|
|
194
|
-
return position;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
protected listenForMouseOut(): void {
|
|
198
|
-
const handleMouseMove = (e: MouseEvent) => {
|
|
199
|
-
if (e.target instanceof Node && !this.hoverHost.contains(e.target) && !this.hoverTarget?.contains(e.target)) {
|
|
200
|
-
this.cancelHover();
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
document.addEventListener('mousemove', handleMouseMove);
|
|
204
|
-
this.disposeOnHide.push({ dispose: () => document.removeEventListener('mousemove', handleMouseMove) });
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
cancelHover(): void {
|
|
208
|
-
this.pendingTimeout?.dispose();
|
|
209
|
-
this.unRenderHover();
|
|
210
|
-
this.disposeOnHide.dispose();
|
|
211
|
-
this.hoverTarget = undefined;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
protected unRenderHover(): void {
|
|
215
|
-
this.hoverHost.remove();
|
|
216
|
-
this.hoverHost.replaceChildren();
|
|
217
|
-
}
|
|
218
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2022 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-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { inject, injectable } from 'inversify';
|
|
18
|
+
import { Disposable, DisposableCollection, disposableTimeout, isOSX } from '../common';
|
|
19
|
+
import { MarkdownString } from '../common/markdown-rendering/markdown-string';
|
|
20
|
+
import { animationFrame } from './browser';
|
|
21
|
+
import { MarkdownRenderer, MarkdownRendererFactory } from './markdown-rendering/markdown-renderer';
|
|
22
|
+
import { PreferenceService } from './preferences';
|
|
23
|
+
|
|
24
|
+
import '../../src/browser/style/hover-service.css';
|
|
25
|
+
|
|
26
|
+
export type HoverPosition = 'left' | 'right' | 'top' | 'bottom';
|
|
27
|
+
|
|
28
|
+
export namespace HoverPosition {
|
|
29
|
+
export function invertIfNecessary(position: HoverPosition, target: DOMRect, host: DOMRect, totalWidth: number, totalHeight: number): HoverPosition {
|
|
30
|
+
if (position === 'left') {
|
|
31
|
+
if (target.left - host.width - 5 < 0) {
|
|
32
|
+
return 'right';
|
|
33
|
+
}
|
|
34
|
+
} else if (position === 'right') {
|
|
35
|
+
if (target.right + host.width + 5 > totalWidth) {
|
|
36
|
+
return 'left';
|
|
37
|
+
}
|
|
38
|
+
} else if (position === 'top') {
|
|
39
|
+
if (target.top - host.height - 5 < 0) {
|
|
40
|
+
return 'bottom';
|
|
41
|
+
}
|
|
42
|
+
} else if (position === 'bottom') {
|
|
43
|
+
if (target.bottom + host.height + 5 > totalHeight) {
|
|
44
|
+
return 'top';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return position;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface HoverRequest {
|
|
52
|
+
content: string | MarkdownString | HTMLElement
|
|
53
|
+
target: HTMLElement
|
|
54
|
+
/**
|
|
55
|
+
* The position where the hover should appear.
|
|
56
|
+
* Note that the hover service will try to invert the position (i.e. right -> left)
|
|
57
|
+
* if the specified content does not fit in the window next to the target element
|
|
58
|
+
*/
|
|
59
|
+
position: HoverPosition
|
|
60
|
+
/**
|
|
61
|
+
* Additional css classes that should be added to the hover box.
|
|
62
|
+
* Used to style certain boxes different e.g. for the extended tab preview.
|
|
63
|
+
*/
|
|
64
|
+
cssClasses?: string[]
|
|
65
|
+
/**
|
|
66
|
+
* A function to render a visual preview on the hover.
|
|
67
|
+
* Function that takes the desired width and returns a HTMLElement to be rendered.
|
|
68
|
+
*/
|
|
69
|
+
visualPreview?: (width: number) => HTMLElement | undefined;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@injectable()
|
|
73
|
+
export class HoverService {
|
|
74
|
+
protected static hostClassName = 'theia-hover';
|
|
75
|
+
protected static styleSheetId = 'theia-hover-style';
|
|
76
|
+
@inject(PreferenceService) protected readonly preferences: PreferenceService;
|
|
77
|
+
@inject(MarkdownRendererFactory) protected readonly markdownRendererFactory: MarkdownRendererFactory;
|
|
78
|
+
|
|
79
|
+
protected _markdownRenderer: MarkdownRenderer | undefined;
|
|
80
|
+
protected get markdownRenderer(): MarkdownRenderer {
|
|
81
|
+
this._markdownRenderer ||= this.markdownRendererFactory();
|
|
82
|
+
return this._markdownRenderer;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
protected _hoverHost: HTMLElement | undefined;
|
|
86
|
+
protected get hoverHost(): HTMLElement {
|
|
87
|
+
if (!this._hoverHost) {
|
|
88
|
+
this._hoverHost = document.createElement('div');
|
|
89
|
+
this._hoverHost.classList.add(HoverService.hostClassName);
|
|
90
|
+
this._hoverHost.style.position = 'absolute';
|
|
91
|
+
}
|
|
92
|
+
return this._hoverHost;
|
|
93
|
+
}
|
|
94
|
+
protected pendingTimeout: Disposable | undefined;
|
|
95
|
+
protected hoverTarget: HTMLElement | undefined;
|
|
96
|
+
protected lastHidHover = Date.now();
|
|
97
|
+
protected readonly disposeOnHide = new DisposableCollection();
|
|
98
|
+
|
|
99
|
+
requestHover(request: HoverRequest): void {
|
|
100
|
+
if (request.target !== this.hoverTarget) {
|
|
101
|
+
this.cancelHover();
|
|
102
|
+
this.pendingTimeout = disposableTimeout(() => this.renderHover(request), this.getHoverDelay());
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
protected getHoverDelay(): number {
|
|
107
|
+
return Date.now() - this.lastHidHover < 200
|
|
108
|
+
? 0
|
|
109
|
+
: this.preferences.get('workbench.hover.delay', isOSX ? 1500 : 500);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
protected async renderHover(request: HoverRequest): Promise<void> {
|
|
113
|
+
const host = this.hoverHost;
|
|
114
|
+
let firstChild: HTMLElement | undefined;
|
|
115
|
+
const { target, content, position, cssClasses } = request;
|
|
116
|
+
if (cssClasses) {
|
|
117
|
+
host.classList.add(...cssClasses);
|
|
118
|
+
}
|
|
119
|
+
this.hoverTarget = target;
|
|
120
|
+
if (content instanceof HTMLElement) {
|
|
121
|
+
host.appendChild(content);
|
|
122
|
+
firstChild = content;
|
|
123
|
+
} else if (typeof content === 'string') {
|
|
124
|
+
host.textContent = content;
|
|
125
|
+
} else {
|
|
126
|
+
const renderedContent = this.markdownRenderer.render(content);
|
|
127
|
+
this.disposeOnHide.push(renderedContent);
|
|
128
|
+
host.appendChild(renderedContent.element);
|
|
129
|
+
firstChild = renderedContent.element;
|
|
130
|
+
}
|
|
131
|
+
// browsers might insert linebreaks when the hover appears at the edge of the window
|
|
132
|
+
// resetting the position prevents that
|
|
133
|
+
host.style.left = '0px';
|
|
134
|
+
host.style.top = '0px';
|
|
135
|
+
document.body.append(host);
|
|
136
|
+
|
|
137
|
+
if (request.visualPreview) {
|
|
138
|
+
// If just a string is being rendered use the size of the outer box
|
|
139
|
+
const width = firstChild ? firstChild.offsetWidth : this.hoverHost.offsetWidth;
|
|
140
|
+
const visualPreview = request.visualPreview(width);
|
|
141
|
+
if (visualPreview) {
|
|
142
|
+
host.appendChild(visualPreview);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
await animationFrame(); // Allow the browser to size the host
|
|
147
|
+
const updatedPosition = this.setHostPosition(target, host, position);
|
|
148
|
+
|
|
149
|
+
this.disposeOnHide.push({
|
|
150
|
+
dispose: () => {
|
|
151
|
+
this.lastHidHover = Date.now();
|
|
152
|
+
host.classList.remove(updatedPosition);
|
|
153
|
+
if (cssClasses) {
|
|
154
|
+
host.classList.remove(...cssClasses);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
this.listenForMouseOut();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
protected setHostPosition(target: HTMLElement, host: HTMLElement, position: HoverPosition): HoverPosition {
|
|
163
|
+
const targetDimensions = target.getBoundingClientRect();
|
|
164
|
+
const hostDimensions = host.getBoundingClientRect();
|
|
165
|
+
const documentWidth = document.body.getBoundingClientRect().width;
|
|
166
|
+
// document.body.getBoundingClientRect().height doesn't work as expected
|
|
167
|
+
// scrollHeight will always be accurate here: https://stackoverflow.com/a/44077777
|
|
168
|
+
const documentHeight = document.documentElement.scrollHeight;
|
|
169
|
+
position = HoverPosition.invertIfNecessary(position, targetDimensions, hostDimensions, documentWidth, documentHeight);
|
|
170
|
+
if (position === 'top' || position === 'bottom') {
|
|
171
|
+
const targetMiddleWidth = targetDimensions.left + (targetDimensions.width / 2);
|
|
172
|
+
const middleAlignment = targetMiddleWidth - (hostDimensions.width / 2);
|
|
173
|
+
const furthestRight = Math.min(documentWidth - hostDimensions.width, middleAlignment);
|
|
174
|
+
const left = Math.max(0, furthestRight);
|
|
175
|
+
const top = position === 'top'
|
|
176
|
+
? targetDimensions.top - hostDimensions.height - 5
|
|
177
|
+
: targetDimensions.bottom + 5;
|
|
178
|
+
host.style.setProperty('--theia-hover-before-position', `${targetMiddleWidth - left - 5}px`);
|
|
179
|
+
host.style.top = `${top}px`;
|
|
180
|
+
host.style.left = `${left}px`;
|
|
181
|
+
} else {
|
|
182
|
+
const targetMiddleHeight = targetDimensions.top + (targetDimensions.height / 2);
|
|
183
|
+
const middleAlignment = targetMiddleHeight - (hostDimensions.height / 2);
|
|
184
|
+
const furthestTop = Math.min(documentHeight - hostDimensions.height, middleAlignment);
|
|
185
|
+
const top = Math.max(0, furthestTop);
|
|
186
|
+
const left = position === 'left'
|
|
187
|
+
? targetDimensions.left - hostDimensions.width - 5
|
|
188
|
+
: targetDimensions.right + 5;
|
|
189
|
+
host.style.setProperty('--theia-hover-before-position', `${targetMiddleHeight - top - 5}px`);
|
|
190
|
+
host.style.left = `${left}px`;
|
|
191
|
+
host.style.top = `${top}px`;
|
|
192
|
+
}
|
|
193
|
+
host.classList.add(position);
|
|
194
|
+
return position;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
protected listenForMouseOut(): void {
|
|
198
|
+
const handleMouseMove = (e: MouseEvent) => {
|
|
199
|
+
if (e.target instanceof Node && !this.hoverHost.contains(e.target) && !this.hoverTarget?.contains(e.target)) {
|
|
200
|
+
this.cancelHover();
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
document.addEventListener('mousemove', handleMouseMove);
|
|
204
|
+
this.disposeOnHide.push({ dispose: () => document.removeEventListener('mousemove', handleMouseMove) });
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
cancelHover(): void {
|
|
208
|
+
this.pendingTimeout?.dispose();
|
|
209
|
+
this.unRenderHover();
|
|
210
|
+
this.disposeOnHide.dispose();
|
|
211
|
+
this.hoverTarget = undefined;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
protected unRenderHover(): void {
|
|
215
|
+
this.hoverHost.remove();
|
|
216
|
+
this.hoverHost.replaceChildren();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2018 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-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { injectable, inject } from 'inversify';
|
|
18
|
-
import URI from '../common/uri';
|
|
19
|
-
import { OpenHandler } from './opener-service';
|
|
20
|
-
import { WindowService } from './window/window-service';
|
|
21
|
-
import { ExternalUriService } from './external-uri-service';
|
|
22
|
-
|
|
23
|
-
export interface HttpOpenHandlerOptions {
|
|
24
|
-
openExternal?: boolean
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@injectable()
|
|
28
|
-
export class HttpOpenHandler implements OpenHandler {
|
|
29
|
-
|
|
30
|
-
static readonly PRIORITY: number = 500;
|
|
31
|
-
|
|
32
|
-
readonly id = 'http';
|
|
33
|
-
|
|
34
|
-
@inject(WindowService)
|
|
35
|
-
protected readonly windowService: WindowService;
|
|
36
|
-
|
|
37
|
-
@inject(ExternalUriService)
|
|
38
|
-
protected readonly externalUriService: ExternalUriService;
|
|
39
|
-
|
|
40
|
-
canHandle(uri: URI, options?: HttpOpenHandlerOptions): number {
|
|
41
|
-
return ((options && options.openExternal) || uri.scheme.startsWith('http') || uri.scheme.startsWith('mailto')) ? HttpOpenHandler.PRIORITY : 0;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async open(uri: URI): Promise<undefined> {
|
|
45
|
-
const resolvedUri = await this.externalUriService.resolve(uri);
|
|
46
|
-
return this.windowService.openNewWindow(resolvedUri.toString(true), { external: true });
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2018 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-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { injectable, inject } from 'inversify';
|
|
18
|
+
import URI from '../common/uri';
|
|
19
|
+
import { OpenHandler } from './opener-service';
|
|
20
|
+
import { WindowService } from './window/window-service';
|
|
21
|
+
import { ExternalUriService } from './external-uri-service';
|
|
22
|
+
|
|
23
|
+
export interface HttpOpenHandlerOptions {
|
|
24
|
+
openExternal?: boolean
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@injectable()
|
|
28
|
+
export class HttpOpenHandler implements OpenHandler {
|
|
29
|
+
|
|
30
|
+
static readonly PRIORITY: number = 500;
|
|
31
|
+
|
|
32
|
+
readonly id = 'http';
|
|
33
|
+
|
|
34
|
+
@inject(WindowService)
|
|
35
|
+
protected readonly windowService: WindowService;
|
|
36
|
+
|
|
37
|
+
@inject(ExternalUriService)
|
|
38
|
+
protected readonly externalUriService: ExternalUriService;
|
|
39
|
+
|
|
40
|
+
canHandle(uri: URI, options?: HttpOpenHandlerOptions): number {
|
|
41
|
+
return ((options && options.openExternal) || uri.scheme.startsWith('http') || uri.scheme.startsWith('mailto')) ? HttpOpenHandler.PRIORITY : 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async open(uri: URI): Promise<undefined> {
|
|
45
|
+
const resolvedUri = await this.externalUriService.resolve(uri);
|
|
46
|
+
return this.windowService.openNewWindow(resolvedUri.toString(true), { external: true });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
}
|
|
@@ -1,27 +1,27 @@
|
|
|
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-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { ContainerModule } from 'inversify';
|
|
18
|
-
import { AsyncLocalizationProvider, localizationPath } from '../../common/i18n/localization';
|
|
19
|
-
import { WebSocketConnectionProvider } from '../messaging/ws-connection-provider';
|
|
20
|
-
import { LanguageQuickPickService } from './language-quick-pick-service';
|
|
21
|
-
|
|
22
|
-
export default new ContainerModule(bind => {
|
|
23
|
-
bind(AsyncLocalizationProvider).toDynamicValue(
|
|
24
|
-
ctx => ctx.container.get(WebSocketConnectionProvider).createProxy(localizationPath)
|
|
25
|
-
).inSingletonScope();
|
|
26
|
-
bind(LanguageQuickPickService).toSelf().inSingletonScope();
|
|
27
|
-
});
|
|
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-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { ContainerModule } from 'inversify';
|
|
18
|
+
import { AsyncLocalizationProvider, localizationPath } from '../../common/i18n/localization';
|
|
19
|
+
import { WebSocketConnectionProvider } from '../messaging/ws-connection-provider';
|
|
20
|
+
import { LanguageQuickPickService } from './language-quick-pick-service';
|
|
21
|
+
|
|
22
|
+
export default new ContainerModule(bind => {
|
|
23
|
+
bind(AsyncLocalizationProvider).toDynamicValue(
|
|
24
|
+
ctx => ctx.container.get(WebSocketConnectionProvider).createProxy(localizationPath)
|
|
25
|
+
).inSingletonScope();
|
|
26
|
+
bind(LanguageQuickPickService).toSelf().inSingletonScope();
|
|
27
|
+
});
|