@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,152 +1,152 @@
|
|
|
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 { TreeNode } from './tree';
|
|
18
|
-
import { TreeModel } from './tree-model';
|
|
19
|
-
import { notEmpty } from '../../common/objects';
|
|
20
|
-
import { expect } from 'chai';
|
|
21
|
-
import { createTreeTestContainer } from './test/tree-test-container';
|
|
22
|
-
import { SelectableTreeNode } from './tree-selection';
|
|
23
|
-
import { MockSelectableTreeModel } from './test/mock-selectable-tree-model';
|
|
24
|
-
import { ExpandableTreeNode } from './tree-expansion';
|
|
25
|
-
|
|
26
|
-
describe('Selectable Tree', () => {
|
|
27
|
-
let model: TreeModel;
|
|
28
|
-
function assertNodeRetrieval(method: () => TreeNode | undefined, sequence: string[]): void {
|
|
29
|
-
for (const expectedNodeId of sequence) {
|
|
30
|
-
const actualNode = method();
|
|
31
|
-
const expectedNode = retrieveNode<SelectableTreeNode>(expectedNodeId);
|
|
32
|
-
expect(actualNode?.id).to.be.equal(expectedNode.id);
|
|
33
|
-
model.addSelection(expectedNode);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
function assertNodeSelection(method: () => void, sequence: string[]): void {
|
|
37
|
-
for (const expectedNodeId of sequence) {
|
|
38
|
-
method();
|
|
39
|
-
const node = retrieveNode<SelectableTreeNode>(expectedNodeId);
|
|
40
|
-
expect(node.selected).to.be.true;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
describe('Get and Set Next Nodes Methods', () => {
|
|
44
|
-
const uncollapsedSelectionOrder = ['1.1', '1.1.1', '1.1.2', '1.2', '1.2.1', '1.2.1.1', '1.2.1.2', '1.2.2', '1.2.3', '1.3'];
|
|
45
|
-
const collapsedSelectionOrder = ['1.1', '1.2', '1.2.1', '1.2.2', '1.2.3', '1.3'];
|
|
46
|
-
beforeEach(() => {
|
|
47
|
-
model = createTreeModel();
|
|
48
|
-
model.root = MockSelectableTreeModel.HIERARCHICAL_MOCK_ROOT();
|
|
49
|
-
model.addSelection(retrieveNode<SelectableTreeNode>('1'));
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
it('`getNextNode()` should select each node in sequence (uncollapsed)', done => {
|
|
53
|
-
assertNodeRetrieval(model.getNextNode.bind(model), uncollapsedSelectionOrder);
|
|
54
|
-
done();
|
|
55
|
-
});
|
|
56
|
-
it('`getNextNode()` should select each node in sequence (collapsed)', done => {
|
|
57
|
-
collapseNode('1.1', '1.2.1');
|
|
58
|
-
assertNodeRetrieval(model.getNextNode.bind(model), uncollapsedSelectionOrder);
|
|
59
|
-
done();
|
|
60
|
-
});
|
|
61
|
-
it('`getNextSelectableNode()` should select each node in sequence (uncollapsed)', done => {
|
|
62
|
-
assertNodeRetrieval(model.getNextSelectableNode.bind(model), uncollapsedSelectionOrder);
|
|
63
|
-
done();
|
|
64
|
-
});
|
|
65
|
-
it('`getNextSelectableNode()` should select each node in sequence (collapsed)', done => {
|
|
66
|
-
collapseNode('1.1', '1.2.1');
|
|
67
|
-
assertNodeRetrieval(model.getNextSelectableNode.bind(model), collapsedSelectionOrder);
|
|
68
|
-
done();
|
|
69
|
-
});
|
|
70
|
-
it('`selectNext()` should select each node in sequence (uncollapsed)', done => {
|
|
71
|
-
assertNodeSelection(model.selectNext.bind(model), uncollapsedSelectionOrder);
|
|
72
|
-
done();
|
|
73
|
-
});
|
|
74
|
-
it('`selectNext()` should select each node in sequence (collapsed)', done => {
|
|
75
|
-
collapseNode('1.1', '1.2.1');
|
|
76
|
-
assertNodeSelection(model.selectNext.bind(model), uncollapsedSelectionOrder);
|
|
77
|
-
done();
|
|
78
|
-
});
|
|
79
|
-
it('`selectNextNode()` should select each node in sequence (uncollapsed)', done => {
|
|
80
|
-
assertNodeSelection(model.selectNextNode.bind(model), uncollapsedSelectionOrder);
|
|
81
|
-
done();
|
|
82
|
-
});
|
|
83
|
-
it('`selectNextNode()` should select each node in sequence (collapsed)', done => {
|
|
84
|
-
collapseNode('1.1', '1.2.1');
|
|
85
|
-
assertNodeSelection(model.selectNextNode.bind(model), collapsedSelectionOrder);
|
|
86
|
-
done();
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
describe('Get and Set Previous Nodes Methods', () => {
|
|
91
|
-
const uncollapsedSelectionOrder = ['1.2.3', '1.2.2', '1.2.1.2', '1.2.1.1', '1.2.1', '1.2', '1.1.2', '1.1.1', '1.1'];
|
|
92
|
-
const collapsedSelectionOrder = ['1.2.3', '1.2.2', '1.2.1', '1.2', '1.1'];
|
|
93
|
-
beforeEach(() => {
|
|
94
|
-
model = createTreeModel();
|
|
95
|
-
model.root = MockSelectableTreeModel.HIERARCHICAL_MOCK_ROOT();
|
|
96
|
-
model.addSelection(retrieveNode<SelectableTreeNode>('1.3'));
|
|
97
|
-
});
|
|
98
|
-
it('`getPrevNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
99
|
-
assertNodeRetrieval(model.getPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
100
|
-
done();
|
|
101
|
-
});
|
|
102
|
-
it('`getPrevNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
103
|
-
collapseNode('1.1', '1.2.1');
|
|
104
|
-
assertNodeRetrieval(model.getPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
105
|
-
done();
|
|
106
|
-
});
|
|
107
|
-
it('`getPrevSelectableNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
108
|
-
assertNodeRetrieval(model.getPrevSelectableNode.bind(model), uncollapsedSelectionOrder);
|
|
109
|
-
done();
|
|
110
|
-
});
|
|
111
|
-
it('`getPrevSelectableNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
112
|
-
collapseNode('1.1', '1.2.1');
|
|
113
|
-
assertNodeRetrieval(model.getPrevSelectableNode.bind(model), collapsedSelectionOrder);
|
|
114
|
-
done();
|
|
115
|
-
});
|
|
116
|
-
it('`selectPrev()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
117
|
-
assertNodeSelection(model.selectPrev.bind(model), uncollapsedSelectionOrder);
|
|
118
|
-
done();
|
|
119
|
-
});
|
|
120
|
-
it('`selectPrev()` should select each node in reverse sequence (collapsed)', done => {
|
|
121
|
-
collapseNode('1.1', '1.2.1');
|
|
122
|
-
assertNodeSelection(model.selectPrev.bind(model), uncollapsedSelectionOrder);
|
|
123
|
-
done();
|
|
124
|
-
});
|
|
125
|
-
it('`selectPrevNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
126
|
-
assertNodeSelection(model.selectPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
127
|
-
done();
|
|
128
|
-
});
|
|
129
|
-
it('`selectPrevNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
130
|
-
collapseNode('1.1', '1.2.1');
|
|
131
|
-
assertNodeSelection(model.selectPrevNode.bind(model), collapsedSelectionOrder);
|
|
132
|
-
done();
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
const findNode = (id: string) => model.getNode(id);
|
|
137
|
-
function createTreeModel(): TreeModel {
|
|
138
|
-
const container = createTreeTestContainer();
|
|
139
|
-
return container.get(TreeModel);
|
|
140
|
-
}
|
|
141
|
-
function retrieveNode<T extends TreeNode>(id: string): Readonly<T> {
|
|
142
|
-
const readonlyNode: Readonly<T> = model.getNode(id) as T;
|
|
143
|
-
return readonlyNode;
|
|
144
|
-
}
|
|
145
|
-
function collapseNode(...ids: string[]): void {
|
|
146
|
-
ids.map(findNode).filter(notEmpty).filter(ExpandableTreeNode.is).forEach(node => {
|
|
147
|
-
model.collapseNode(node);
|
|
148
|
-
expect(node).to.have.property('expanded', false);
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
});
|
|
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 { TreeNode } from './tree';
|
|
18
|
+
import { TreeModel } from './tree-model';
|
|
19
|
+
import { notEmpty } from '../../common/objects';
|
|
20
|
+
import { expect } from 'chai';
|
|
21
|
+
import { createTreeTestContainer } from './test/tree-test-container';
|
|
22
|
+
import { SelectableTreeNode } from './tree-selection';
|
|
23
|
+
import { MockSelectableTreeModel } from './test/mock-selectable-tree-model';
|
|
24
|
+
import { ExpandableTreeNode } from './tree-expansion';
|
|
25
|
+
|
|
26
|
+
describe('Selectable Tree', () => {
|
|
27
|
+
let model: TreeModel;
|
|
28
|
+
function assertNodeRetrieval(method: () => TreeNode | undefined, sequence: string[]): void {
|
|
29
|
+
for (const expectedNodeId of sequence) {
|
|
30
|
+
const actualNode = method();
|
|
31
|
+
const expectedNode = retrieveNode<SelectableTreeNode>(expectedNodeId);
|
|
32
|
+
expect(actualNode?.id).to.be.equal(expectedNode.id);
|
|
33
|
+
model.addSelection(expectedNode);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function assertNodeSelection(method: () => void, sequence: string[]): void {
|
|
37
|
+
for (const expectedNodeId of sequence) {
|
|
38
|
+
method();
|
|
39
|
+
const node = retrieveNode<SelectableTreeNode>(expectedNodeId);
|
|
40
|
+
expect(node.selected).to.be.true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
describe('Get and Set Next Nodes Methods', () => {
|
|
44
|
+
const uncollapsedSelectionOrder = ['1.1', '1.1.1', '1.1.2', '1.2', '1.2.1', '1.2.1.1', '1.2.1.2', '1.2.2', '1.2.3', '1.3'];
|
|
45
|
+
const collapsedSelectionOrder = ['1.1', '1.2', '1.2.1', '1.2.2', '1.2.3', '1.3'];
|
|
46
|
+
beforeEach(() => {
|
|
47
|
+
model = createTreeModel();
|
|
48
|
+
model.root = MockSelectableTreeModel.HIERARCHICAL_MOCK_ROOT();
|
|
49
|
+
model.addSelection(retrieveNode<SelectableTreeNode>('1'));
|
|
50
|
+
|
|
51
|
+
});
|
|
52
|
+
it('`getNextNode()` should select each node in sequence (uncollapsed)', done => {
|
|
53
|
+
assertNodeRetrieval(model.getNextNode.bind(model), uncollapsedSelectionOrder);
|
|
54
|
+
done();
|
|
55
|
+
});
|
|
56
|
+
it('`getNextNode()` should select each node in sequence (collapsed)', done => {
|
|
57
|
+
collapseNode('1.1', '1.2.1');
|
|
58
|
+
assertNodeRetrieval(model.getNextNode.bind(model), uncollapsedSelectionOrder);
|
|
59
|
+
done();
|
|
60
|
+
});
|
|
61
|
+
it('`getNextSelectableNode()` should select each node in sequence (uncollapsed)', done => {
|
|
62
|
+
assertNodeRetrieval(model.getNextSelectableNode.bind(model), uncollapsedSelectionOrder);
|
|
63
|
+
done();
|
|
64
|
+
});
|
|
65
|
+
it('`getNextSelectableNode()` should select each node in sequence (collapsed)', done => {
|
|
66
|
+
collapseNode('1.1', '1.2.1');
|
|
67
|
+
assertNodeRetrieval(model.getNextSelectableNode.bind(model), collapsedSelectionOrder);
|
|
68
|
+
done();
|
|
69
|
+
});
|
|
70
|
+
it('`selectNext()` should select each node in sequence (uncollapsed)', done => {
|
|
71
|
+
assertNodeSelection(model.selectNext.bind(model), uncollapsedSelectionOrder);
|
|
72
|
+
done();
|
|
73
|
+
});
|
|
74
|
+
it('`selectNext()` should select each node in sequence (collapsed)', done => {
|
|
75
|
+
collapseNode('1.1', '1.2.1');
|
|
76
|
+
assertNodeSelection(model.selectNext.bind(model), uncollapsedSelectionOrder);
|
|
77
|
+
done();
|
|
78
|
+
});
|
|
79
|
+
it('`selectNextNode()` should select each node in sequence (uncollapsed)', done => {
|
|
80
|
+
assertNodeSelection(model.selectNextNode.bind(model), uncollapsedSelectionOrder);
|
|
81
|
+
done();
|
|
82
|
+
});
|
|
83
|
+
it('`selectNextNode()` should select each node in sequence (collapsed)', done => {
|
|
84
|
+
collapseNode('1.1', '1.2.1');
|
|
85
|
+
assertNodeSelection(model.selectNextNode.bind(model), collapsedSelectionOrder);
|
|
86
|
+
done();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe('Get and Set Previous Nodes Methods', () => {
|
|
91
|
+
const uncollapsedSelectionOrder = ['1.2.3', '1.2.2', '1.2.1.2', '1.2.1.1', '1.2.1', '1.2', '1.1.2', '1.1.1', '1.1'];
|
|
92
|
+
const collapsedSelectionOrder = ['1.2.3', '1.2.2', '1.2.1', '1.2', '1.1'];
|
|
93
|
+
beforeEach(() => {
|
|
94
|
+
model = createTreeModel();
|
|
95
|
+
model.root = MockSelectableTreeModel.HIERARCHICAL_MOCK_ROOT();
|
|
96
|
+
model.addSelection(retrieveNode<SelectableTreeNode>('1.3'));
|
|
97
|
+
});
|
|
98
|
+
it('`getPrevNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
99
|
+
assertNodeRetrieval(model.getPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
100
|
+
done();
|
|
101
|
+
});
|
|
102
|
+
it('`getPrevNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
103
|
+
collapseNode('1.1', '1.2.1');
|
|
104
|
+
assertNodeRetrieval(model.getPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
105
|
+
done();
|
|
106
|
+
});
|
|
107
|
+
it('`getPrevSelectableNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
108
|
+
assertNodeRetrieval(model.getPrevSelectableNode.bind(model), uncollapsedSelectionOrder);
|
|
109
|
+
done();
|
|
110
|
+
});
|
|
111
|
+
it('`getPrevSelectableNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
112
|
+
collapseNode('1.1', '1.2.1');
|
|
113
|
+
assertNodeRetrieval(model.getPrevSelectableNode.bind(model), collapsedSelectionOrder);
|
|
114
|
+
done();
|
|
115
|
+
});
|
|
116
|
+
it('`selectPrev()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
117
|
+
assertNodeSelection(model.selectPrev.bind(model), uncollapsedSelectionOrder);
|
|
118
|
+
done();
|
|
119
|
+
});
|
|
120
|
+
it('`selectPrev()` should select each node in reverse sequence (collapsed)', done => {
|
|
121
|
+
collapseNode('1.1', '1.2.1');
|
|
122
|
+
assertNodeSelection(model.selectPrev.bind(model), uncollapsedSelectionOrder);
|
|
123
|
+
done();
|
|
124
|
+
});
|
|
125
|
+
it('`selectPrevNode()` should select each node in reverse sequence (uncollapsed)', done => {
|
|
126
|
+
assertNodeSelection(model.selectPrevNode.bind(model), uncollapsedSelectionOrder);
|
|
127
|
+
done();
|
|
128
|
+
});
|
|
129
|
+
it('`selectPrevNode()` should select each node in reverse sequence (collapsed)', done => {
|
|
130
|
+
collapseNode('1.1', '1.2.1');
|
|
131
|
+
assertNodeSelection(model.selectPrevNode.bind(model), collapsedSelectionOrder);
|
|
132
|
+
done();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
const findNode = (id: string) => model.getNode(id);
|
|
137
|
+
function createTreeModel(): TreeModel {
|
|
138
|
+
const container = createTreeTestContainer();
|
|
139
|
+
return container.get(TreeModel);
|
|
140
|
+
}
|
|
141
|
+
function retrieveNode<T extends TreeNode>(id: string): Readonly<T> {
|
|
142
|
+
const readonlyNode: Readonly<T> = model.getNode(id) as T;
|
|
143
|
+
return readonlyNode;
|
|
144
|
+
}
|
|
145
|
+
function collapseNode(...ids: string[]): void {
|
|
146
|
+
ids.map(findNode).filter(notEmpty).filter(ExpandableTreeNode.is).forEach(node => {
|
|
147
|
+
model.collapseNode(node);
|
|
148
|
+
expect(node).to.have.property('expanded', false);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
});
|
|
@@ -1,176 +1,176 @@
|
|
|
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, postConstruct } from 'inversify';
|
|
18
|
-
import { Tree, TreeNode } from './tree';
|
|
19
|
-
import { Event, Emitter } from '../../common';
|
|
20
|
-
import { TreeSelectionState, FocusableTreeSelection } from './tree-selection-state';
|
|
21
|
-
import { TreeSelectionService, SelectableTreeNode, TreeSelection } from './tree-selection';
|
|
22
|
-
import { TreeFocusService } from './tree-focus-service';
|
|
23
|
-
|
|
24
|
-
@injectable()
|
|
25
|
-
export class TreeSelectionServiceImpl implements TreeSelectionService {
|
|
26
|
-
|
|
27
|
-
@inject(Tree) protected readonly tree: Tree;
|
|
28
|
-
@inject(TreeFocusService) protected readonly focusService: TreeFocusService;
|
|
29
|
-
|
|
30
|
-
protected readonly onSelectionChangedEmitter = new Emitter<ReadonlyArray<Readonly<SelectableTreeNode>>>();
|
|
31
|
-
|
|
32
|
-
protected state: TreeSelectionState;
|
|
33
|
-
|
|
34
|
-
@postConstruct()
|
|
35
|
-
protected init(): void {
|
|
36
|
-
this.state = new TreeSelectionState(this.tree);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
dispose(): void {
|
|
40
|
-
this.onSelectionChangedEmitter.dispose();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
get selectedNodes(): ReadonlyArray<Readonly<SelectableTreeNode>> {
|
|
44
|
-
return this.state.selection();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
get onSelectionChanged(): Event<ReadonlyArray<Readonly<SelectableTreeNode>>> {
|
|
48
|
-
return this.onSelectionChangedEmitter.event;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
protected fireSelectionChanged(): void {
|
|
52
|
-
this.onSelectionChangedEmitter.fire(this.state.selection());
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
addSelection(selectionOrTreeNode: TreeSelection | Readonly<SelectableTreeNode>): void {
|
|
56
|
-
const selection = ((arg: TreeSelection | Readonly<SelectableTreeNode>): TreeSelection => {
|
|
57
|
-
const type = TreeSelection.SelectionType.DEFAULT;
|
|
58
|
-
if (TreeSelection.is(arg)) {
|
|
59
|
-
return {
|
|
60
|
-
type,
|
|
61
|
-
...arg
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
type,
|
|
66
|
-
node: arg
|
|
67
|
-
};
|
|
68
|
-
})(selectionOrTreeNode);
|
|
69
|
-
|
|
70
|
-
const node = this.validateNode(selection.node);
|
|
71
|
-
if (node === undefined) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
Object.assign(selection, { node });
|
|
75
|
-
|
|
76
|
-
const newState = this.state.nextState(selection);
|
|
77
|
-
this.transiteTo(newState);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
clearSelection(): void {
|
|
81
|
-
this.transiteTo(new TreeSelectionState(this.tree), false);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
protected transiteTo(newState: TreeSelectionState, setFocus = true): void {
|
|
85
|
-
const oldNodes = this.state.selection();
|
|
86
|
-
const newNodes = newState.selection();
|
|
87
|
-
|
|
88
|
-
const toUnselect = this.difference(oldNodes, newNodes);
|
|
89
|
-
const toSelect = this.difference(newNodes, oldNodes);
|
|
90
|
-
|
|
91
|
-
this.unselect(toUnselect);
|
|
92
|
-
this.select(toSelect);
|
|
93
|
-
this.removeFocus(oldNodes, newNodes);
|
|
94
|
-
if (setFocus) {
|
|
95
|
-
this.addFocus(newState.node);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
this.state = newState;
|
|
99
|
-
this.fireSelectionChanged();
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
protected unselect(nodes: ReadonlyArray<SelectableTreeNode>): void {
|
|
103
|
-
nodes.forEach(node => node.selected = false);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
protected select(nodes: ReadonlyArray<SelectableTreeNode>): void {
|
|
107
|
-
nodes.forEach(node => node.selected = true);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
protected removeFocus(...nodes: ReadonlyArray<SelectableTreeNode>[]): void {
|
|
111
|
-
nodes.forEach(node => node.forEach(n => n.focus = false));
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
protected addFocus(node: SelectableTreeNode | undefined): void {
|
|
115
|
-
if (node) {
|
|
116
|
-
node.focus = true;
|
|
117
|
-
}
|
|
118
|
-
this.focusService.setFocus(node);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Returns an array of the difference of two arrays. The returned array contains all elements that are contained by
|
|
123
|
-
* `left` and not contained by `right`. `right` may also contain elements not present in `left`: these are simply ignored.
|
|
124
|
-
*/
|
|
125
|
-
protected difference<T>(left: ReadonlyArray<T>, right: ReadonlyArray<T>): ReadonlyArray<T> {
|
|
126
|
-
return left.filter(item => right.indexOf(item) === -1);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Returns a reference to the argument if the node exists in the tree. Otherwise, `undefined`.
|
|
131
|
-
*/
|
|
132
|
-
protected validateNode(node: Readonly<TreeNode>): Readonly<TreeNode> | undefined {
|
|
133
|
-
const result = this.tree.validateNode(node);
|
|
134
|
-
return SelectableTreeNode.is(result) ? result : undefined;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
storeState(): TreeSelectionServiceImpl.State {
|
|
138
|
-
return {
|
|
139
|
-
selectionStack: this.state.selectionStack.map(s => ({
|
|
140
|
-
focus: s.focus && s.focus.id || undefined,
|
|
141
|
-
node: s.node && s.node.id || undefined,
|
|
142
|
-
type: s.type
|
|
143
|
-
}))
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
restoreState(state: TreeSelectionServiceImpl.State): void {
|
|
148
|
-
const selectionStack: FocusableTreeSelection[] = [];
|
|
149
|
-
for (const selection of state.selectionStack) {
|
|
150
|
-
const node = selection.node && this.tree.getNode(selection.node) || undefined;
|
|
151
|
-
if (!SelectableTreeNode.is(node)) {
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
const focus = selection.focus && this.tree.getNode(selection.focus) || undefined;
|
|
155
|
-
selectionStack.push({
|
|
156
|
-
node,
|
|
157
|
-
focus: SelectableTreeNode.is(focus) && focus || undefined,
|
|
158
|
-
type: selection.type
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
if (selectionStack.length) {
|
|
162
|
-
this.transiteTo(new TreeSelectionState(this.tree, selectionStack));
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
export namespace TreeSelectionServiceImpl {
|
|
168
|
-
export interface State {
|
|
169
|
-
selectionStack: ReadonlyArray<FocusableTreeSelectionState>
|
|
170
|
-
}
|
|
171
|
-
export interface FocusableTreeSelectionState {
|
|
172
|
-
focus?: string
|
|
173
|
-
node?: string
|
|
174
|
-
type?: TreeSelection.SelectionType
|
|
175
|
-
}
|
|
176
|
-
}
|
|
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, postConstruct } from 'inversify';
|
|
18
|
+
import { Tree, TreeNode } from './tree';
|
|
19
|
+
import { Event, Emitter } from '../../common';
|
|
20
|
+
import { TreeSelectionState, FocusableTreeSelection } from './tree-selection-state';
|
|
21
|
+
import { TreeSelectionService, SelectableTreeNode, TreeSelection } from './tree-selection';
|
|
22
|
+
import { TreeFocusService } from './tree-focus-service';
|
|
23
|
+
|
|
24
|
+
@injectable()
|
|
25
|
+
export class TreeSelectionServiceImpl implements TreeSelectionService {
|
|
26
|
+
|
|
27
|
+
@inject(Tree) protected readonly tree: Tree;
|
|
28
|
+
@inject(TreeFocusService) protected readonly focusService: TreeFocusService;
|
|
29
|
+
|
|
30
|
+
protected readonly onSelectionChangedEmitter = new Emitter<ReadonlyArray<Readonly<SelectableTreeNode>>>();
|
|
31
|
+
|
|
32
|
+
protected state: TreeSelectionState;
|
|
33
|
+
|
|
34
|
+
@postConstruct()
|
|
35
|
+
protected init(): void {
|
|
36
|
+
this.state = new TreeSelectionState(this.tree);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
dispose(): void {
|
|
40
|
+
this.onSelectionChangedEmitter.dispose();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
get selectedNodes(): ReadonlyArray<Readonly<SelectableTreeNode>> {
|
|
44
|
+
return this.state.selection();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
get onSelectionChanged(): Event<ReadonlyArray<Readonly<SelectableTreeNode>>> {
|
|
48
|
+
return this.onSelectionChangedEmitter.event;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
protected fireSelectionChanged(): void {
|
|
52
|
+
this.onSelectionChangedEmitter.fire(this.state.selection());
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
addSelection(selectionOrTreeNode: TreeSelection | Readonly<SelectableTreeNode>): void {
|
|
56
|
+
const selection = ((arg: TreeSelection | Readonly<SelectableTreeNode>): TreeSelection => {
|
|
57
|
+
const type = TreeSelection.SelectionType.DEFAULT;
|
|
58
|
+
if (TreeSelection.is(arg)) {
|
|
59
|
+
return {
|
|
60
|
+
type,
|
|
61
|
+
...arg
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
type,
|
|
66
|
+
node: arg
|
|
67
|
+
};
|
|
68
|
+
})(selectionOrTreeNode);
|
|
69
|
+
|
|
70
|
+
const node = this.validateNode(selection.node);
|
|
71
|
+
if (node === undefined) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
Object.assign(selection, { node });
|
|
75
|
+
|
|
76
|
+
const newState = this.state.nextState(selection);
|
|
77
|
+
this.transiteTo(newState);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
clearSelection(): void {
|
|
81
|
+
this.transiteTo(new TreeSelectionState(this.tree), false);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
protected transiteTo(newState: TreeSelectionState, setFocus = true): void {
|
|
85
|
+
const oldNodes = this.state.selection();
|
|
86
|
+
const newNodes = newState.selection();
|
|
87
|
+
|
|
88
|
+
const toUnselect = this.difference(oldNodes, newNodes);
|
|
89
|
+
const toSelect = this.difference(newNodes, oldNodes);
|
|
90
|
+
|
|
91
|
+
this.unselect(toUnselect);
|
|
92
|
+
this.select(toSelect);
|
|
93
|
+
this.removeFocus(oldNodes, newNodes);
|
|
94
|
+
if (setFocus) {
|
|
95
|
+
this.addFocus(newState.node);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
this.state = newState;
|
|
99
|
+
this.fireSelectionChanged();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
protected unselect(nodes: ReadonlyArray<SelectableTreeNode>): void {
|
|
103
|
+
nodes.forEach(node => node.selected = false);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
protected select(nodes: ReadonlyArray<SelectableTreeNode>): void {
|
|
107
|
+
nodes.forEach(node => node.selected = true);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
protected removeFocus(...nodes: ReadonlyArray<SelectableTreeNode>[]): void {
|
|
111
|
+
nodes.forEach(node => node.forEach(n => n.focus = false));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
protected addFocus(node: SelectableTreeNode | undefined): void {
|
|
115
|
+
if (node) {
|
|
116
|
+
node.focus = true;
|
|
117
|
+
}
|
|
118
|
+
this.focusService.setFocus(node);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Returns an array of the difference of two arrays. The returned array contains all elements that are contained by
|
|
123
|
+
* `left` and not contained by `right`. `right` may also contain elements not present in `left`: these are simply ignored.
|
|
124
|
+
*/
|
|
125
|
+
protected difference<T>(left: ReadonlyArray<T>, right: ReadonlyArray<T>): ReadonlyArray<T> {
|
|
126
|
+
return left.filter(item => right.indexOf(item) === -1);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Returns a reference to the argument if the node exists in the tree. Otherwise, `undefined`.
|
|
131
|
+
*/
|
|
132
|
+
protected validateNode(node: Readonly<TreeNode>): Readonly<TreeNode> | undefined {
|
|
133
|
+
const result = this.tree.validateNode(node);
|
|
134
|
+
return SelectableTreeNode.is(result) ? result : undefined;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
storeState(): TreeSelectionServiceImpl.State {
|
|
138
|
+
return {
|
|
139
|
+
selectionStack: this.state.selectionStack.map(s => ({
|
|
140
|
+
focus: s.focus && s.focus.id || undefined,
|
|
141
|
+
node: s.node && s.node.id || undefined,
|
|
142
|
+
type: s.type
|
|
143
|
+
}))
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
restoreState(state: TreeSelectionServiceImpl.State): void {
|
|
148
|
+
const selectionStack: FocusableTreeSelection[] = [];
|
|
149
|
+
for (const selection of state.selectionStack) {
|
|
150
|
+
const node = selection.node && this.tree.getNode(selection.node) || undefined;
|
|
151
|
+
if (!SelectableTreeNode.is(node)) {
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
const focus = selection.focus && this.tree.getNode(selection.focus) || undefined;
|
|
155
|
+
selectionStack.push({
|
|
156
|
+
node,
|
|
157
|
+
focus: SelectableTreeNode.is(focus) && focus || undefined,
|
|
158
|
+
type: selection.type
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (selectionStack.length) {
|
|
162
|
+
this.transiteTo(new TreeSelectionState(this.tree, selectionStack));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
}
|
|
167
|
+
export namespace TreeSelectionServiceImpl {
|
|
168
|
+
export interface State {
|
|
169
|
+
selectionStack: ReadonlyArray<FocusableTreeSelectionState>
|
|
170
|
+
}
|
|
171
|
+
export interface FocusableTreeSelectionState {
|
|
172
|
+
focus?: string
|
|
173
|
+
node?: string
|
|
174
|
+
type?: TreeSelection.SelectionType
|
|
175
|
+
}
|
|
176
|
+
}
|