From a053a4d50529a0a66326811bd4f8b3819b7a5cd7 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 12 Oct 2022 17:14:42 -0700 Subject: [PATCH] Allow walkthroughs to specify icons. Useful for specifying icons *other* than those of the contributing extension. --- .../media/nodejsWalkthroughIcon.png | Bin 0 -> 5904 bytes .../typescript-language-features/package.json | 1 + src/vs/platform/extensions/common/extensions.ts | 1 + .../browser/gettingStartedExtensionPoint.ts | 4 ++++ .../browser/gettingStartedService.ts | 5 +++-- 5 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 extensions/typescript-language-features/media/nodejsWalkthroughIcon.png diff --git a/extensions/typescript-language-features/media/nodejsWalkthroughIcon.png b/extensions/typescript-language-features/media/nodejsWalkthroughIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..10a8e5b822b874e72869cac58f921e571d3435a1 GIT binary patch literal 5904 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 literal 0 HcmV?d00001 diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json index 3ce0e33921c..19252089d4e 100644 --- a/extensions/typescript-language-features/package.json +++ b/extensions/typescript-language-features/package.json @@ -1535,6 +1535,7 @@ { "id": "nodejsWelcome", "title": "%walkthroughs.nodejsWelcome.title%", + "icon": "media/nodejsWalkthroughIcon.png", "description": "%walkthroughs.nodejsWelcome.description%", "when": "false", "steps": [ diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts index 1fb311969e8..a88dc3fa296 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts @@ -137,6 +137,7 @@ export interface IWalkthroughStep { export interface IWalkthrough { readonly id: string; readonly title: string; + readonly icon?: string; readonly description: string; readonly steps: IWalkthroughStep[]; readonly featuredFor: string[] | undefined; diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts index 47c767d1249..32846bd33bf 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts @@ -27,6 +27,10 @@ export const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPo type: 'string', description: localize('walkthroughs.title', "Title of walkthrough.") }, + icon: { + type: 'string', + description: localize('walkthroughs.icon', "Relative path to the icon of the walkthrough. The path is relative to the extension location. If not specified, the icon defaults to the extension icon if available."), + }, description: { type: 'string', description: localize('walkthroughs.description', "Description of walkthrough.") diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts index 63ceca1e990..6e58d3390ea 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts @@ -389,6 +389,7 @@ export class WalkthroughsService extends Disposable implements IWalkthroughsServ isFeatured = await this.instantiationService.invokeFunction(a => checkGlobFileExists(a, folders, walkthrough.featuredFor!, token.token)); } + const iconStr = walkthrough.icon ?? extension.icon; const walkthoughDescriptor: IWalkthrough = { description: walkthrough.description, title: walkthrough.title, @@ -399,8 +400,8 @@ export class WalkthroughsService extends Disposable implements IWalkthroughsServ steps, icon: { type: 'image', - path: extension.icon - ? FileAccess.asBrowserUri(joinPath(extension.extensionLocation, extension.icon)).toString(true) + path: iconStr + ? FileAccess.asBrowserUri(joinPath(extension.extensionLocation, iconStr)).toString(true) : DefaultIconPath }, when: ContextKeyExpr.deserialize(override ?? walkthrough.when) ?? ContextKeyExpr.true(),