helpQuickAccess.js 4.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  6. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  7. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  8. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  9. return c > 3 && r && Object.defineProperty(target, key, r), r;
  10. };
  11. var __param = (this && this.__param) || function (paramIndex, decorator) {
  12. return function (target, key) { decorator(target, key, paramIndex); }
  13. };
  14. import { DisposableStore } from '../../../base/common/lifecycle.js';
  15. import { localize } from '../../../nls.js';
  16. import { Extensions } from '../common/quickAccess.js';
  17. import { IQuickInputService } from '../common/quickInput.js';
  18. import { Registry } from '../../registry/common/platform.js';
  19. let HelpQuickAccessProvider = class HelpQuickAccessProvider {
  20. constructor(quickInputService) {
  21. this.quickInputService = quickInputService;
  22. this.registry = Registry.as(Extensions.Quickaccess);
  23. }
  24. provide(picker) {
  25. const disposables = new DisposableStore();
  26. // Open a picker with the selected value if picked
  27. disposables.add(picker.onDidAccept(() => {
  28. const [item] = picker.selectedItems;
  29. if (item) {
  30. this.quickInputService.quickAccess.show(item.prefix, { preserveValue: true });
  31. }
  32. }));
  33. // Also open a picker when we detect the user typed the exact
  34. // name of a provider (e.g. `?term` for terminals)
  35. disposables.add(picker.onDidChangeValue(value => {
  36. const providerDescriptor = this.registry.getQuickAccessProvider(value.substr(HelpQuickAccessProvider.PREFIX.length));
  37. if (providerDescriptor && providerDescriptor.prefix && providerDescriptor.prefix !== HelpQuickAccessProvider.PREFIX) {
  38. this.quickInputService.quickAccess.show(providerDescriptor.prefix, { preserveValue: true });
  39. }
  40. }));
  41. // Fill in all providers separated by editor/global scope
  42. const { editorProviders, globalProviders } = this.getQuickAccessProviders();
  43. picker.items = editorProviders.length === 0 || globalProviders.length === 0 ?
  44. // Without groups
  45. [
  46. ...(editorProviders.length === 0 ? globalProviders : editorProviders)
  47. ] :
  48. // With groups
  49. [
  50. { label: localize('globalCommands', "global commands"), type: 'separator' },
  51. ...globalProviders,
  52. { label: localize('editorCommands', "editor commands"), type: 'separator' },
  53. ...editorProviders
  54. ];
  55. return disposables;
  56. }
  57. getQuickAccessProviders() {
  58. const globalProviders = [];
  59. const editorProviders = [];
  60. for (const provider of this.registry.getQuickAccessProviders().sort((providerA, providerB) => providerA.prefix.localeCompare(providerB.prefix))) {
  61. if (provider.prefix === HelpQuickAccessProvider.PREFIX) {
  62. continue; // exclude help which is already active
  63. }
  64. for (const helpEntry of provider.helpEntries) {
  65. const prefix = helpEntry.prefix || provider.prefix;
  66. const label = prefix || '\u2026' /* ... */;
  67. (helpEntry.needsEditor ? editorProviders : globalProviders).push({
  68. prefix,
  69. label,
  70. ariaLabel: localize('helpPickAriaLabel', "{0}, {1}", label, helpEntry.description),
  71. description: helpEntry.description
  72. });
  73. }
  74. }
  75. return { editorProviders, globalProviders };
  76. }
  77. };
  78. HelpQuickAccessProvider.PREFIX = '?';
  79. HelpQuickAccessProvider = __decorate([
  80. __param(0, IQuickInputService)
  81. ], HelpQuickAccessProvider);
  82. export { HelpQuickAccessProvider };