@codingame/monaco-vscode-walkthrough-service-override 37.2.0 → 37.3.0
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/index.js +2 -2
- package/package.json +6 -2
- package/session.d.ts +1 -0
- package/session.js +3 -0
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.js +25 -25
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.js +70 -63
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedAccessibleView.js +5 -5
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedColors.js +7 -7
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.js +37 -37
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedIcons.js +2 -2
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedList.js +1 -1
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService._contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.js +33 -29
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/startupPage.js +17 -15
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.js +151 -151
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/notebookProfile.js +3 -3
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/theme_picker.js +5 -5
- package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/theme_picker_small.js +4 -4
- package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/editorWalkThrough.js +3 -3
- package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/walkThrough.contribution.js +2 -2
- package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/walkThroughInput.js +1 -1
- package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/walkThroughPart.js +4 -4
- package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/common/walkThroughUtils.js +1 -1
package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedColors.js
CHANGED
|
@@ -12,30 +12,30 @@ import '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colors/quic
|
|
|
12
12
|
import '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colors/searchColors';
|
|
13
13
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
14
14
|
|
|
15
|
-
registerColor("welcomePage.background", null, ( localize(
|
|
15
|
+
registerColor("welcomePage.background", null, ( localize(20974, "Background color for the Welcome page.")));
|
|
16
16
|
registerColor("welcomePage.tileBackground", {
|
|
17
17
|
dark: editorWidgetBackground,
|
|
18
18
|
light: editorWidgetBackground,
|
|
19
19
|
hcDark: "#000",
|
|
20
20
|
hcLight: editorWidgetBackground
|
|
21
|
-
}, ( localize(
|
|
21
|
+
}, ( localize(20975, "Background color for the tiles on the Welcome page.")));
|
|
22
22
|
registerColor("welcomePage.tileHoverBackground", {
|
|
23
23
|
dark: ( lighten(editorWidgetBackground, .2)),
|
|
24
24
|
light: ( darken(editorWidgetBackground, .1)),
|
|
25
25
|
hcDark: null,
|
|
26
26
|
hcLight: null
|
|
27
|
-
}, ( localize(
|
|
27
|
+
}, ( localize(20976, "Hover background color for the tiles on the Welcome.")));
|
|
28
28
|
registerColor("welcomePage.tileBorder", {
|
|
29
29
|
dark: "#ffffff1a",
|
|
30
30
|
light: "#0000001a",
|
|
31
31
|
hcDark: contrastBorder,
|
|
32
32
|
hcLight: contrastBorder
|
|
33
|
-
}, ( localize(
|
|
34
|
-
registerColor("welcomePage.progress.background", inputBackground, ( localize(
|
|
35
|
-
registerColor("welcomePage.progress.foreground", textLinkForeground, ( localize(
|
|
33
|
+
}, ( localize(20977, "Border color for the tiles on the Welcome page.")));
|
|
34
|
+
registerColor("welcomePage.progress.background", inputBackground, ( localize(20978, "Foreground color for the Welcome page progress bars.")));
|
|
35
|
+
registerColor("welcomePage.progress.foreground", textLinkForeground, ( localize(20979, "Background color for the Welcome page progress bars.")));
|
|
36
36
|
registerColor("walkthrough.stepTitle.foreground", {
|
|
37
37
|
light: "#000000",
|
|
38
38
|
dark: "#ffffff",
|
|
39
39
|
hcDark: null,
|
|
40
40
|
hcLight: null
|
|
41
|
-
}, ( localize(
|
|
41
|
+
}, ( localize(20980, "Foreground color of the heading of each walkthrough step")));
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
3
3
|
import { ExtensionsRegistry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionsRegistry';
|
|
4
4
|
|
|
5
|
-
const titleTranslated = ( localize(
|
|
5
|
+
const titleTranslated = ( localize(20981, "Title"));
|
|
6
6
|
const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
7
7
|
extensionPoint: "walkthroughs",
|
|
8
8
|
jsonSchema: {
|
|
9
9
|
description: ( localize(
|
|
10
|
-
|
|
10
|
+
20982,
|
|
11
11
|
"Contribute walkthroughs to help users getting started with your extension."
|
|
12
12
|
)),
|
|
13
13
|
type: "array",
|
|
@@ -25,27 +25,27 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
25
25
|
properties: {
|
|
26
26
|
id: {
|
|
27
27
|
type: "string",
|
|
28
|
-
description: ( localize(
|
|
28
|
+
description: ( localize(20983, "Unique identifier for this walkthrough."))
|
|
29
29
|
},
|
|
30
30
|
title: {
|
|
31
31
|
type: "string",
|
|
32
|
-
description: ( localize(
|
|
32
|
+
description: ( localize(20984, "Title of walkthrough."))
|
|
33
33
|
},
|
|
34
34
|
icon: {
|
|
35
35
|
type: "string",
|
|
36
36
|
description: ( localize(
|
|
37
|
-
|
|
37
|
+
20985,
|
|
38
38
|
"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."
|
|
39
39
|
))
|
|
40
40
|
},
|
|
41
41
|
description: {
|
|
42
42
|
type: "string",
|
|
43
|
-
description: ( localize(
|
|
43
|
+
description: ( localize(20986, "Description of walkthrough."))
|
|
44
44
|
},
|
|
45
45
|
featuredFor: {
|
|
46
46
|
type: "array",
|
|
47
47
|
description: ( localize(
|
|
48
|
-
|
|
48
|
+
20987,
|
|
49
49
|
"Walkthroughs that match one of these glob patterns appear as 'featured' in workspaces with the specified files. For example, a walkthrough for TypeScript projects might specify `tsconfig.json` here."
|
|
50
50
|
)),
|
|
51
51
|
items: {
|
|
@@ -55,13 +55,13 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
55
55
|
when: {
|
|
56
56
|
type: "string",
|
|
57
57
|
description: ( localize(
|
|
58
|
-
|
|
58
|
+
20988,
|
|
59
59
|
"Context key expression to control the visibility of this walkthrough."
|
|
60
60
|
))
|
|
61
61
|
},
|
|
62
62
|
steps: {
|
|
63
63
|
type: "array",
|
|
64
|
-
description: ( localize(
|
|
64
|
+
description: ( localize(20989, "Steps to complete as part of this walkthrough.")),
|
|
65
65
|
items: {
|
|
66
66
|
type: "object",
|
|
67
67
|
required: ["id", "title", "media"],
|
|
@@ -78,18 +78,18 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
78
78
|
id: {
|
|
79
79
|
type: "string",
|
|
80
80
|
description: ( localize(
|
|
81
|
-
|
|
81
|
+
20990,
|
|
82
82
|
"Unique identifier for this step. This is used to keep track of which steps have been completed."
|
|
83
83
|
))
|
|
84
84
|
},
|
|
85
85
|
title: {
|
|
86
86
|
type: "string",
|
|
87
|
-
description: ( localize(
|
|
87
|
+
description: ( localize(20991, "Title of step."))
|
|
88
88
|
},
|
|
89
89
|
description: {
|
|
90
90
|
type: "string",
|
|
91
91
|
description: ( localize(
|
|
92
|
-
|
|
92
|
+
20992,
|
|
93
93
|
"Description of step. Supports ``preformatted``, __italic__, and **bold** text. Use markdown-style links for commands or external links: {0}, {1}, or {2}. Links on their own line will be rendered as buttons.",
|
|
94
94
|
`[${titleTranslated}](command:myext.command)`,
|
|
95
95
|
`[${titleTranslated}](command:toSide:myext.command)`,
|
|
@@ -98,7 +98,7 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
98
98
|
},
|
|
99
99
|
button: {
|
|
100
100
|
deprecationMessage: ( localize(
|
|
101
|
-
|
|
101
|
+
20993,
|
|
102
102
|
"Deprecated. Use markdown links in the description instead, i.e. {0}, {1}, or {2}",
|
|
103
103
|
`[${titleTranslated}](command:myext.command)`,
|
|
104
104
|
`[${titleTranslated}](command:toSide:myext.command)`,
|
|
@@ -108,7 +108,7 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
108
108
|
media: {
|
|
109
109
|
type: "object",
|
|
110
110
|
description: ( localize(
|
|
111
|
-
|
|
111
|
+
20994,
|
|
112
112
|
"Media to show alongside this step, either an image or markdown content."
|
|
113
113
|
)),
|
|
114
114
|
oneOf: [{
|
|
@@ -116,11 +116,11 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
116
116
|
additionalProperties: false,
|
|
117
117
|
properties: {
|
|
118
118
|
path: {
|
|
119
|
-
deprecationMessage: ( localize(
|
|
119
|
+
deprecationMessage: ( localize(20995, "Deprecated. Please use `image` or `markdown` instead"))
|
|
120
120
|
},
|
|
121
121
|
image: {
|
|
122
122
|
description: ( localize(
|
|
123
|
-
|
|
123
|
+
20996,
|
|
124
124
|
"Path to an image - or object consisting of paths to light, dark, and hc images - relative to extension directory. Depending on context, the image will be displayed from 400px to 800px wide, with similar bounds on height. To support HIDPI displays, the image will be rendered at 1.5x scaling, for example a 900 physical pixels wide image will be displayed as 600 logical pixels wide."
|
|
125
125
|
)),
|
|
126
126
|
oneOf: [{
|
|
@@ -131,25 +131,25 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
131
131
|
properties: {
|
|
132
132
|
dark: {
|
|
133
133
|
description: ( localize(
|
|
134
|
-
|
|
134
|
+
20997,
|
|
135
135
|
"Path to the image for dark themes, relative to extension directory."
|
|
136
136
|
)),
|
|
137
137
|
type: "string"
|
|
138
138
|
},
|
|
139
139
|
light: {
|
|
140
140
|
description: ( localize(
|
|
141
|
-
|
|
141
|
+
20998,
|
|
142
142
|
"Path to the image for light themes, relative to extension directory."
|
|
143
143
|
)),
|
|
144
144
|
type: "string"
|
|
145
145
|
},
|
|
146
146
|
hc: {
|
|
147
|
-
description: ( localize(
|
|
147
|
+
description: ( localize(20999, "Path to the image for hc themes, relative to extension directory.")),
|
|
148
148
|
type: "string"
|
|
149
149
|
},
|
|
150
150
|
hcLight: {
|
|
151
151
|
description: ( localize(
|
|
152
|
-
|
|
152
|
+
21000,
|
|
153
153
|
"Path to the image for hc light themes, relative to extension directory."
|
|
154
154
|
)),
|
|
155
155
|
type: "string"
|
|
@@ -160,7 +160,7 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
160
160
|
altText: {
|
|
161
161
|
type: "string",
|
|
162
162
|
description: ( localize(
|
|
163
|
-
|
|
163
|
+
21001,
|
|
164
164
|
"Alternate text to display when the image cannot be loaded or in screen readers."
|
|
165
165
|
))
|
|
166
166
|
}
|
|
@@ -171,7 +171,7 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
171
171
|
properties: {
|
|
172
172
|
svg: {
|
|
173
173
|
description: ( localize(
|
|
174
|
-
|
|
174
|
+
21002,
|
|
175
175
|
"Path to an svg, color tokens are supported in variables to support theming to match the workbench."
|
|
176
176
|
)),
|
|
177
177
|
type: "string"
|
|
@@ -179,7 +179,7 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
179
179
|
altText: {
|
|
180
180
|
type: "string",
|
|
181
181
|
description: ( localize(
|
|
182
|
-
|
|
182
|
+
21001,
|
|
183
183
|
"Alternate text to display when the image cannot be loaded or in screen readers."
|
|
184
184
|
))
|
|
185
185
|
}
|
|
@@ -189,10 +189,10 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
189
189
|
additionalProperties: false,
|
|
190
190
|
properties: {
|
|
191
191
|
path: {
|
|
192
|
-
deprecationMessage: ( localize(
|
|
192
|
+
deprecationMessage: ( localize(20995, "Deprecated. Please use `image` or `markdown` instead"))
|
|
193
193
|
},
|
|
194
194
|
markdown: {
|
|
195
|
-
description: ( localize(
|
|
195
|
+
description: ( localize(21003, "Path to the markdown document, relative to extension directory.")),
|
|
196
196
|
type: "string"
|
|
197
197
|
}
|
|
198
198
|
}
|
|
@@ -200,7 +200,7 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
200
200
|
},
|
|
201
201
|
completionEvents: {
|
|
202
202
|
description: ( localize(
|
|
203
|
-
|
|
203
|
+
21004,
|
|
204
204
|
"Events that should trigger this step to become checked off. If empty or not defined, the step will check off when any of the step's buttons or links are clicked; if the step has no buttons or links it will check on when it is selected."
|
|
205
205
|
)),
|
|
206
206
|
type: "array",
|
|
@@ -209,47 +209,47 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
209
209
|
defaultSnippets: [{
|
|
210
210
|
label: "onCommand",
|
|
211
211
|
description: ( localize(
|
|
212
|
-
|
|
212
|
+
21005,
|
|
213
213
|
"Check off step when a given command is executed anywhere in VS Code."
|
|
214
214
|
)),
|
|
215
215
|
body: "onCommand:${1:commandId}"
|
|
216
216
|
}, {
|
|
217
217
|
label: "onLink",
|
|
218
218
|
description: ( localize(
|
|
219
|
-
|
|
219
|
+
21006,
|
|
220
220
|
"Check off step when a given link is opened via a walkthrough step."
|
|
221
221
|
)),
|
|
222
222
|
body: "onLink:${2:linkId}"
|
|
223
223
|
}, {
|
|
224
224
|
label: "onView",
|
|
225
|
-
description: ( localize(
|
|
225
|
+
description: ( localize(21007, "Check off step when a given view is opened")),
|
|
226
226
|
body: "onView:${2:viewId}"
|
|
227
227
|
}, {
|
|
228
228
|
label: "onSettingChanged",
|
|
229
|
-
description: ( localize(
|
|
229
|
+
description: ( localize(21008, "Check off step when a given setting is changed")),
|
|
230
230
|
body: "onSettingChanged:${2:settingName}"
|
|
231
231
|
}, {
|
|
232
232
|
label: "onContext",
|
|
233
|
-
description: ( localize(
|
|
233
|
+
description: ( localize(21009, "Check off step when a context key expression is true.")),
|
|
234
234
|
body: "onContext:${2:key}"
|
|
235
235
|
}, {
|
|
236
236
|
label: "onExtensionInstalled",
|
|
237
237
|
description: ( localize(
|
|
238
|
-
|
|
238
|
+
21010,
|
|
239
239
|
"Check off step when an extension with the given id is installed. If the extension is already installed, the step will start off checked."
|
|
240
240
|
)),
|
|
241
241
|
body: "onExtensionInstalled:${3:extensionId}"
|
|
242
242
|
}, {
|
|
243
243
|
label: "onStepSelected",
|
|
244
|
-
description: ( localize(
|
|
244
|
+
description: ( localize(21011, "Check off step as soon as it is selected.")),
|
|
245
245
|
body: "onStepSelected"
|
|
246
246
|
}]
|
|
247
247
|
}
|
|
248
248
|
},
|
|
249
249
|
doneOn: {
|
|
250
|
-
description: ( localize(
|
|
250
|
+
description: ( localize(21012, "Signal to mark step as complete.")),
|
|
251
251
|
deprecationMessage: ( localize(
|
|
252
|
-
|
|
252
|
+
21013,
|
|
253
253
|
"doneOn is deprecated. By default steps will be checked off when their buttons are clicked, to configure further use completionEvents"
|
|
254
254
|
)),
|
|
255
255
|
type: "object",
|
|
@@ -261,14 +261,14 @@ const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
261
261
|
}],
|
|
262
262
|
properties: {
|
|
263
263
|
"command": {
|
|
264
|
-
description: ( localize(
|
|
264
|
+
description: ( localize(21014, "Mark step done when the specified command is executed.")),
|
|
265
265
|
type: "string"
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
},
|
|
269
269
|
when: {
|
|
270
270
|
type: "string",
|
|
271
|
-
description: ( localize(
|
|
271
|
+
description: ( localize(21015, "Context key expression to control the visibility of this step."))
|
|
272
272
|
}
|
|
273
273
|
}
|
|
274
274
|
}
|
package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedIcons.js
CHANGED
|
@@ -6,8 +6,8 @@ import { registerIcon } from '@codingame/monaco-vscode-api/vscode/vs/platform/th
|
|
|
6
6
|
const gettingStartedUncheckedCodicon = registerIcon(
|
|
7
7
|
"getting-started-step-unchecked",
|
|
8
8
|
Codicon.circleLargeOutline,
|
|
9
|
-
( localize(
|
|
9
|
+
( localize(21016, "Used to represent walkthrough steps which have not been completed"))
|
|
10
10
|
);
|
|
11
|
-
const gettingStartedCheckedCodicon = registerIcon("getting-started-step-checked", Codicon.passFilled, ( localize(
|
|
11
|
+
const gettingStartedCheckedCodicon = registerIcon("getting-started-step-checked", Codicon.passFilled, ( localize(21017, "Used to represent walkthrough steps which have been completed")));
|
|
12
12
|
|
|
13
13
|
export { gettingStartedCheckedCodicon, gettingStartedUncheckedCodicon };
|
|
@@ -68,7 +68,7 @@ class GettingStartedIndexList extends Disposable {
|
|
|
68
68
|
}
|
|
69
69
|
const activeEntries = entryList.filter(e => !e.when || this.contextService.contextMatchesRules(e.when));
|
|
70
70
|
const limitedEntries = activeEntries.slice(0, this.options.limit);
|
|
71
|
-
const toRender =
|
|
71
|
+
const toRender = limitedEntries.map(e => e.id);
|
|
72
72
|
if (this.entries === entries && equals(toRender, this.lastRendered)) {
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
@@ -11,12 +11,12 @@ registerAction2(class extends Action2 {
|
|
|
11
11
|
constructor() {
|
|
12
12
|
super({
|
|
13
13
|
id: "resetGettingStartedProgress",
|
|
14
|
-
category: ( localize2(
|
|
15
|
-
title: ( localize2(
|
|
14
|
+
category: ( localize2(21020, "Developer")),
|
|
15
|
+
title: ( localize2(21021, "Reset Welcome Page Walkthrough Progress")),
|
|
16
16
|
f1: true,
|
|
17
17
|
metadata: {
|
|
18
18
|
description: ( localize2(
|
|
19
|
-
|
|
19
|
+
21022,
|
|
20
20
|
"Reset the progress of all Walkthrough steps on the Welcome Page to make them appear as if they are being viewed for the first time, providing a fresh start to the getting started experience."
|
|
21
21
|
))
|
|
22
22
|
}
|
package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.js
CHANGED
|
@@ -37,10 +37,10 @@ import { extensionDefaultIcon } from '@codingame/monaco-vscode-api/vscode/vs/wor
|
|
|
37
37
|
import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
38
38
|
import { GettingStartedInput } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedInput';
|
|
39
39
|
|
|
40
|
-
const HasMultipleNewFileEntries =
|
|
40
|
+
const HasMultipleNewFileEntries = new RawContextKey("hasMultipleNewFileEntries", false);
|
|
41
41
|
const hiddenEntriesConfigurationKey = "workbench.welcomePage.hiddenCategories";
|
|
42
42
|
const walkthroughMetadataConfigurationKey = "workbench.welcomePage.walkthroughMetadata";
|
|
43
|
-
const BUILT_IN_SOURCE = ( localize(
|
|
43
|
+
const BUILT_IN_SOURCE = ( localize(21023, "Built-In"));
|
|
44
44
|
const DAYS = 24 * 60 * 60 * 1000;
|
|
45
45
|
const NEW_WALKTHROUGH_TIME = 7 * DAYS;
|
|
46
46
|
let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
@@ -111,7 +111,7 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
111
111
|
order: walkthroughs.length - index,
|
|
112
112
|
source: BUILT_IN_SOURCE,
|
|
113
113
|
when: ContextKeyExpr.deserialize(category.when) ?? ContextKeyExpr.true(),
|
|
114
|
-
steps:
|
|
114
|
+
steps: category.content.steps.map((step, index) => {
|
|
115
115
|
return ({
|
|
116
116
|
...step,
|
|
117
117
|
completionEvents: step.completionEvents ?? [],
|
|
@@ -148,7 +148,7 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
148
148
|
poster: step.media.poster ? convertRelativeMediaPathsToWebviewURIs(( FileAccess.asFileUri("vs/workbench/contrib/welcomeGettingStarted/common/media/")), step.media.poster) : undefined
|
|
149
149
|
}
|
|
150
150
|
});
|
|
151
|
-
})
|
|
151
|
+
})
|
|
152
152
|
});
|
|
153
153
|
});
|
|
154
154
|
walkthroughsExtensionPoint.setHandler((
|
|
@@ -158,6 +158,8 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
158
158
|
removed
|
|
159
159
|
}
|
|
160
160
|
) => {
|
|
161
|
+
added.map(e => this.registerExtensionWalkthroughContributions(e.description));
|
|
162
|
+
removed.map(e => this.unregisterExtensionWalkthroughContributions(e.description));
|
|
161
163
|
});
|
|
162
164
|
}
|
|
163
165
|
initCompletionEventListeners() {
|
|
@@ -213,7 +215,7 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
213
215
|
this.metadata.set(id, {
|
|
214
216
|
...prior,
|
|
215
217
|
manaullyOpened: true,
|
|
216
|
-
stepIDs:
|
|
218
|
+
stepIDs: walkthrough.steps.map(s => s.id)
|
|
217
219
|
});
|
|
218
220
|
}
|
|
219
221
|
this.storageService.store(
|
|
@@ -271,7 +273,7 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
271
273
|
sectionToOpenIndex = index;
|
|
272
274
|
}
|
|
273
275
|
}
|
|
274
|
-
const steps = (
|
|
276
|
+
const steps = (walkthrough.steps ?? []).map((step, index) => {
|
|
275
277
|
const description = parseDescription(step.description || "");
|
|
276
278
|
const fullyQualifiedID = extension.identifier.value + "#" + walkthrough.id + "#" + step.id;
|
|
277
279
|
let media;
|
|
@@ -328,10 +330,10 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
328
330
|
category: categoryID,
|
|
329
331
|
order: index
|
|
330
332
|
});
|
|
331
|
-
})
|
|
333
|
+
});
|
|
332
334
|
let isFeatured = false;
|
|
333
335
|
if (walkthrough.featuredFor) {
|
|
334
|
-
const folders =
|
|
336
|
+
const folders = this.workspaceContextService.getWorkspace().folders.map(f => f.uri);
|
|
335
337
|
const token = ( new CancellationTokenSource());
|
|
336
338
|
setTimeout(() => token.cancel(), 2000);
|
|
337
339
|
isFeatured = await this.instantiationService.invokeFunction(a => checkGlobFileExists(a, folders, walkthrough.featuredFor, token.token));
|
|
@@ -402,7 +404,7 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
402
404
|
}
|
|
403
405
|
getWalkthroughs() {
|
|
404
406
|
const registeredCategories = [...( this.gettingStartedContributions.values())];
|
|
405
|
-
const categoriesWithCompletion =
|
|
407
|
+
const categoriesWithCompletion = registeredCategories.map(category => {
|
|
406
408
|
return {
|
|
407
409
|
...category,
|
|
408
410
|
content: {
|
|
@@ -410,13 +412,13 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
410
412
|
steps: category.steps
|
|
411
413
|
}
|
|
412
414
|
};
|
|
413
|
-
})
|
|
415
|
+
}).filter(
|
|
414
416
|
category => category.content.type !== "steps" || category.content.steps.length
|
|
415
|
-
).filter(category => category.id !== "NewWelcomeExperience").map(category => this.resolveWalkthrough(category))
|
|
417
|
+
).filter(category => category.id !== "NewWelcomeExperience").map(category => this.resolveWalkthrough(category));
|
|
416
418
|
return categoriesWithCompletion;
|
|
417
419
|
}
|
|
418
420
|
resolveWalkthrough(category) {
|
|
419
|
-
const stepsWithProgress =
|
|
421
|
+
const stepsWithProgress = category.steps.map(step => this.getStepProgress(step));
|
|
420
422
|
const hasOpened = this.metadata.get(category.id)?.manaullyOpened;
|
|
421
423
|
const firstSeenDate = this.metadata.get(category.id)?.firstSeen;
|
|
422
424
|
const isNew = firstSeenDate && firstSeenDate > (+( new Date()) - NEW_WALKTHROUGH_TIME);
|
|
@@ -425,7 +427,7 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
425
427
|
if (!rawCategory) {
|
|
426
428
|
throw Error("Could not find walkthrough with id " + category.id);
|
|
427
429
|
}
|
|
428
|
-
const currentStepIds =
|
|
430
|
+
const currentStepIds = rawCategory.steps.map(s => s.id);
|
|
429
431
|
const hasNewSteps = lastStepIDs && (currentStepIds.length !== lastStepIDs.length || ( currentStepIds.some((id, index) => id !== lastStepIDs[index])));
|
|
430
432
|
let recencyBonus = 0;
|
|
431
433
|
if (firstSeenDate) {
|
|
@@ -478,10 +480,10 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
478
480
|
registerWalkthrough(walkthoughDescriptor) {
|
|
479
481
|
this._registerWalkthrough({
|
|
480
482
|
...walkthoughDescriptor,
|
|
481
|
-
steps:
|
|
483
|
+
steps: walkthoughDescriptor.steps.map(step => ({
|
|
482
484
|
...step,
|
|
483
485
|
description: parseDescription(step.description)
|
|
484
|
-
}))
|
|
486
|
+
}))
|
|
485
487
|
});
|
|
486
488
|
}
|
|
487
489
|
_registerWalkthrough(walkthroughDescriptor) {
|
|
@@ -514,19 +516,21 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
514
516
|
}
|
|
515
517
|
if (!step.completionEvents.length) {
|
|
516
518
|
step.completionEvents = coalesce(
|
|
517
|
-
step.description.filter(linkedText => linkedText.nodes.length === 1).flatMap(
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
519
|
+
step.description.filter(linkedText => linkedText.nodes.length === 1).flatMap(
|
|
520
|
+
linkedText => linkedText.nodes.filter((node => typeof node !== "string")).map((
|
|
521
|
+
{
|
|
522
|
+
href
|
|
523
|
+
}
|
|
524
|
+
) => {
|
|
525
|
+
if (href.startsWith("command:")) {
|
|
526
|
+
return "onCommand:" + href.slice("command:".length, href.includes("?") ? href.indexOf("?") : undefined);
|
|
527
|
+
}
|
|
528
|
+
if (href.startsWith("https://") || href.startsWith("http://")) {
|
|
529
|
+
return "onLink:" + href;
|
|
530
|
+
}
|
|
531
|
+
return undefined;
|
|
532
|
+
})
|
|
533
|
+
));
|
|
530
534
|
}
|
|
531
535
|
if (!step.completionEvents.length) {
|
|
532
536
|
step.completionEvents.push("stepSelected");
|
|
@@ -596,7 +600,7 @@ let WalkthroughsService = class WalkthroughsService extends Disposable {
|
|
|
596
600
|
}
|
|
597
601
|
};
|
|
598
602
|
WalkthroughsService = ( __decorate([( __param(0, IStorageService)), ( __param(1, ICommandService)), ( __param(2, IInstantiationService)), ( __param(3, IWorkspaceContextService)), ( __param(4, IContextKeyService)), ( __param(5, IUserDataSyncEnablementService)), ( __param(6, IConfigurationService)), ( __param(7, IExtensionManagementService)), ( __param(8, IHostService)), ( __param(9, IViewsService)), ( __param(10, ITelemetryService)), ( __param(11, IWorkbenchAssignmentService)), ( __param(12, IWorkbenchLayoutService)), ( __param(13, IEditorService))], WalkthroughsService));
|
|
599
|
-
const parseDescription = desc =>
|
|
603
|
+
const parseDescription = desc => desc.split("\n").filter(x => x).map(text => parseLinkedText(text));
|
|
600
604
|
const convertInternalMediaPathToFileURI = path => path.startsWith("https://") ? ( URI.parse(path, true)) : ( FileAccess.asFileUri(`vs/workbench/contrib/welcomeGettingStarted/common/media/${path}`));
|
|
601
605
|
const convertInternalMediaPathToBrowserURI = path => path.startsWith("https://") ? ( URI.parse(path, true)) : ( FileAccess.asBrowserUri(`vs/workbench/contrib/welcomeGettingStarted/common/media/${path}`));
|
|
602
606
|
const convertInternalMediaPathsToBrowserURIs = path => {
|
|
@@ -50,7 +50,7 @@ let StartupPageEditorResolverContribution = class StartupPageEditorResolverContr
|
|
|
50
50
|
this._register(
|
|
51
51
|
editorResolverService.registerEditor(`${GettingStartedInput.RESOURCE.scheme}:/**`, {
|
|
52
52
|
id: GettingStartedInput.ID,
|
|
53
|
-
label: ( localize(
|
|
53
|
+
label: ( localize(21024, "Welcome Page")),
|
|
54
54
|
priority: RegisteredEditorPriority.builtin
|
|
55
55
|
}, {
|
|
56
56
|
singlePerResource: true,
|
|
@@ -168,17 +168,19 @@ let StartupPageRunnerContribution = class StartupPageRunnerContribution extends
|
|
|
168
168
|
return false;
|
|
169
169
|
}
|
|
170
170
|
async openReadme() {
|
|
171
|
-
const readmes = coalesce(
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
171
|
+
const readmes = coalesce(
|
|
172
|
+
await Promise.all(this.contextService.getWorkspace().folders.map(async folder => {
|
|
173
|
+
const folderUri = folder.uri;
|
|
174
|
+
const folderStat = await this.fileService.resolve(folderUri).catch(onUnexpectedError);
|
|
175
|
+
const files = folderStat?.children ? folderStat.children.map(child => child.name).sort() : [];
|
|
176
|
+
const file = files.find(file => file.toLowerCase() === "readme.md") || files.find(file => file.toLowerCase().startsWith("readme"));
|
|
177
|
+
if (file) {
|
|
178
|
+
return joinPath(folderUri, file);
|
|
179
|
+
} else {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
}))
|
|
183
|
+
);
|
|
182
184
|
if (!this.editorService.activeEditor) {
|
|
183
185
|
if (readmes.length) {
|
|
184
186
|
const isMarkDown = readme => readme.path.toLowerCase().endsWith(".md");
|
|
@@ -187,17 +189,17 @@ let StartupPageRunnerContribution = class StartupPageRunnerContribution extends
|
|
|
187
189
|
locked: true
|
|
188
190
|
}).catch(error => {
|
|
189
191
|
this.notificationService.error(( localize(
|
|
190
|
-
|
|
192
|
+
21025,
|
|
191
193
|
"Could not open markdown preview: {0}.\n\nPlease make sure the markdown extension is enabled.",
|
|
192
194
|
error.message
|
|
193
195
|
)));
|
|
194
196
|
}),
|
|
195
|
-
this.editorService.openEditors(
|
|
197
|
+
this.editorService.openEditors(readmes.filter(readme => !isMarkDown(readme)).map(readme => ({
|
|
196
198
|
resource: readme,
|
|
197
199
|
options: {
|
|
198
200
|
preserveFocus: this.shouldPreserveFocus()
|
|
199
201
|
}
|
|
200
|
-
})))
|
|
202
|
+
})))
|
|
201
203
|
]);
|
|
202
204
|
} else {
|
|
203
205
|
await this.openGettingStarted();
|