@codingame/monaco-vscode-issue-service-override 14.0.5 → 15.0.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/package.json +7 -7
- package/vscode/src/vs/workbench/contrib/issue/browser/baseIssueReporterService.d.ts +7 -3
- package/vscode/src/vs/workbench/contrib/issue/browser/baseIssueReporterService.js +70 -36
- package/vscode/src/vs/workbench/contrib/issue/browser/issue.contribution.js +1 -1
- package/vscode/src/vs/workbench/contrib/issue/browser/issueFormService.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/issue/browser/issueFormService.js +12 -10
- package/vscode/src/vs/workbench/contrib/issue/browser/issueReporterPage.js +31 -30
- package/vscode/src/vs/workbench/contrib/issue/browser/issueReporterService.d.ts +4 -2
- package/vscode/src/vs/workbench/contrib/issue/browser/issueReporterService.js +9 -5
- package/vscode/src/vs/workbench/contrib/issue/browser/issueTroubleshoot.js +23 -23
- package/vscode/src/vs/workbench/contrib/issue/common/issue.contribution.js +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-issue-service-override",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "15.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - issue service-override",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-89a82baf-8ded-5b2f-b8af-e5fbd72dc5ad-common": "
|
|
19
|
-
"@codingame/monaco-vscode-api": "
|
|
18
|
+
"@codingame/monaco-vscode-89a82baf-8ded-5b2f-b8af-e5fbd72dc5ad-common": "15.0.0",
|
|
19
|
+
"@codingame/monaco-vscode-api": "15.0.0"
|
|
20
20
|
},
|
|
21
21
|
"main": "index.js",
|
|
22
22
|
"module": "index.js",
|
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
"default": "./index.js"
|
|
27
27
|
},
|
|
28
28
|
"./vscode/*": {
|
|
29
|
-
"
|
|
30
|
-
"
|
|
29
|
+
"types": "./vscode/src/*.d.ts",
|
|
30
|
+
"default": "./vscode/src/*.js"
|
|
31
31
|
},
|
|
32
32
|
"./*": {
|
|
33
|
-
"
|
|
34
|
-
"
|
|
33
|
+
"types": "./*.d.ts",
|
|
34
|
+
"default": "./*.js"
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"typesVersions": {
|
|
@@ -2,10 +2,12 @@ import { Button } from "@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/b
|
|
|
2
2
|
import { Delayer } from "@codingame/monaco-vscode-api/vscode/vs/base/common/async";
|
|
3
3
|
import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
4
4
|
import { IProductConfiguration } from "@codingame/monaco-vscode-api/vscode/vs/base/common/product";
|
|
5
|
+
import { IFileDialogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service";
|
|
6
|
+
import { IFileService } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service";
|
|
5
7
|
import { IThemeService } from "@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service";
|
|
6
|
-
import { IssueReporterModel } from "./issueReporterModel.js";
|
|
7
8
|
import { IssueReporterData, IssueReporterExtensionData } from "../common/issue.js";
|
|
8
9
|
import { IIssueFormService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/issue/common/issue.service";
|
|
10
|
+
import { IssueReporterModel } from "./issueReporterModel.js";
|
|
9
11
|
export declare class BaseIssueReporterService extends Disposable {
|
|
10
12
|
disableExtensions: boolean;
|
|
11
13
|
data: IssueReporterData;
|
|
@@ -19,6 +21,8 @@ export declare class BaseIssueReporterService extends Disposable {
|
|
|
19
21
|
readonly isWeb: boolean;
|
|
20
22
|
readonly issueFormService: IIssueFormService;
|
|
21
23
|
readonly themeService: IThemeService;
|
|
24
|
+
readonly fileService: IFileService;
|
|
25
|
+
readonly fileDialogService: IFileDialogService;
|
|
22
26
|
issueReporterModel: IssueReporterModel;
|
|
23
27
|
receivedSystemInfo: boolean;
|
|
24
28
|
numberOfSearchResultsDisplayed: number;
|
|
@@ -35,7 +39,7 @@ export declare class BaseIssueReporterService extends Disposable {
|
|
|
35
39
|
type: string;
|
|
36
40
|
arch: string;
|
|
37
41
|
release: string;
|
|
38
|
-
}, product: IProductConfiguration, window: Window, isWeb: boolean, issueFormService: IIssueFormService, themeService: IThemeService);
|
|
42
|
+
}, product: IProductConfiguration, window: Window, isWeb: boolean, issueFormService: IIssueFormService, themeService: IThemeService, fileService: IFileService, fileDialogService: IFileDialogService);
|
|
39
43
|
render(): void;
|
|
40
44
|
setInitialFocus(): void;
|
|
41
45
|
private applyStyles;
|
|
@@ -61,7 +65,7 @@ export declare class BaseIssueReporterService extends Disposable {
|
|
|
61
65
|
private setUpTypes;
|
|
62
66
|
makeOption(value: string, description: string, disabled: boolean): HTMLOptionElement;
|
|
63
67
|
setSourceOptions(): void;
|
|
64
|
-
renderBlocks(): void
|
|
68
|
+
renderBlocks(): Promise<void>;
|
|
65
69
|
validateInput(inputId: string): boolean;
|
|
66
70
|
validateInputs(): boolean;
|
|
67
71
|
submitToGitHub(issueTitle: string, issueBody: string, gitHubDetails: {
|
|
@@ -6,24 +6,30 @@ import { Button, unthemedButtonStyles } from '@codingame/monaco-vscode-api/vscod
|
|
|
6
6
|
import { renderIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/iconLabel/iconLabels';
|
|
7
7
|
import { mainWindow } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/window';
|
|
8
8
|
import { Delayer, RunOnceScheduler } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
9
|
+
import { VSBuffer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/buffer';
|
|
9
10
|
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
10
11
|
import { groupBy } from '@codingame/monaco-vscode-api/vscode/vs/base/common/collections';
|
|
11
12
|
import { debounce } from '@codingame/monaco-vscode-api/vscode/vs/base/common/decorators';
|
|
12
13
|
import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
13
14
|
import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
15
|
+
import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
|
|
14
16
|
import { isLinuxSnap, isMacintosh } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
|
|
17
|
+
import { joinPath } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
15
18
|
import { escape } from '@codingame/monaco-vscode-api/vscode/vs/base/common/strings';
|
|
16
19
|
import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
|
|
17
20
|
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
18
21
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
22
|
+
import { IFileDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
|
|
23
|
+
import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
|
|
19
24
|
import { getIconsStyleSheet } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/browser/iconsStyleSheet';
|
|
20
25
|
import { IThemeService } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service';
|
|
21
|
-
import { IssueReporterModel } from './issueReporterModel.js';
|
|
22
26
|
import { IssueType } from '../common/issue.js';
|
|
23
27
|
import { IIssueFormService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/issue/common/issue.service';
|
|
24
28
|
import { normalizeGitHubUrl } from '../common/issueReporterUtil.js';
|
|
29
|
+
import { IssueReporterModel } from './issueReporterModel.js';
|
|
25
30
|
|
|
26
31
|
const MAX_URL_LENGTH = 7500;
|
|
32
|
+
const MAX_EXTENSION_DATA_LENGTH = 60000;
|
|
27
33
|
var IssueSource;
|
|
28
34
|
(function (IssueSource) {
|
|
29
35
|
IssueSource["VSCode"] = "vscode";
|
|
@@ -32,7 +38,7 @@ var IssueSource;
|
|
|
32
38
|
IssueSource["Unknown"] = "unknown";
|
|
33
39
|
})(IssueSource || (IssueSource = {}));
|
|
34
40
|
let BaseIssueReporterService = class BaseIssueReporterService extends Disposable {
|
|
35
|
-
constructor(disableExtensions, data, os, product, window, isWeb, issueFormService, themeService) {
|
|
41
|
+
constructor(disableExtensions, data, os, product, window, isWeb, issueFormService, themeService, fileService, fileDialogService) {
|
|
36
42
|
super();
|
|
37
43
|
this.disableExtensions = disableExtensions;
|
|
38
44
|
this.data = data;
|
|
@@ -42,6 +48,8 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
42
48
|
this.isWeb = isWeb;
|
|
43
49
|
this.issueFormService = issueFormService;
|
|
44
50
|
this.themeService = themeService;
|
|
51
|
+
this.fileService = fileService;
|
|
52
|
+
this.fileDialogService = fileDialogService;
|
|
45
53
|
this.receivedSystemInfo = false;
|
|
46
54
|
this.numberOfSearchResultsDisplayed = 0;
|
|
47
55
|
this.receivedPerformanceInfo = false;
|
|
@@ -237,7 +245,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
237
245
|
const extensionsSelector = this.getElementById('extension-selector');
|
|
238
246
|
if (extensionsSelector) {
|
|
239
247
|
const { selectedExtension } = this.issueReporterModel.getData();
|
|
240
|
-
reset(extensionsSelector, this.makeOption('', ( localize(
|
|
248
|
+
reset(extensionsSelector, this.makeOption('', ( localize(7088, "Select extension")), true), ...( extensionOptions.map(extension => makeOption(extension, selectedExtension))));
|
|
241
249
|
if (!selectedExtension) {
|
|
242
250
|
extensionsSelector.selectedIndex = 0;
|
|
243
251
|
}
|
|
@@ -318,11 +326,11 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
318
326
|
const info = containingElement && containingElement.lastElementChild;
|
|
319
327
|
if (info && info.classList.contains('hidden')) {
|
|
320
328
|
show(info);
|
|
321
|
-
label.textContent = ( localize(
|
|
329
|
+
label.textContent = ( localize(7089, "hide"));
|
|
322
330
|
}
|
|
323
331
|
else {
|
|
324
332
|
hide(info);
|
|
325
|
-
label.textContent = ( localize(
|
|
333
|
+
label.textContent = ( localize(7090, "show"));
|
|
326
334
|
}
|
|
327
335
|
}
|
|
328
336
|
});
|
|
@@ -342,16 +350,16 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
342
350
|
}
|
|
343
351
|
const descriptionTextArea = this.getElementById('issue-title');
|
|
344
352
|
if (value === IssueSource.VSCode) {
|
|
345
|
-
descriptionTextArea.placeholder = ( localize(
|
|
353
|
+
descriptionTextArea.placeholder = ( localize(7091, "E.g Workbench is missing problems panel"));
|
|
346
354
|
}
|
|
347
355
|
else if (value === IssueSource.Extension) {
|
|
348
|
-
descriptionTextArea.placeholder = ( localize(
|
|
356
|
+
descriptionTextArea.placeholder = ( localize(7092, "E.g. Missing alt text on extension readme image"));
|
|
349
357
|
}
|
|
350
358
|
else if (value === IssueSource.Marketplace) {
|
|
351
|
-
descriptionTextArea.placeholder = ( localize(
|
|
359
|
+
descriptionTextArea.placeholder = ( localize(7093, "E.g Cannot disable installed extension"));
|
|
352
360
|
}
|
|
353
361
|
else {
|
|
354
|
-
descriptionTextArea.placeholder = ( localize(
|
|
362
|
+
descriptionTextArea.placeholder = ( localize(7094, "Please enter a title"));
|
|
355
363
|
}
|
|
356
364
|
let fileOnExtension, fileOnMarketplace = false;
|
|
357
365
|
if (value === IssueSource.Extension) {
|
|
@@ -456,16 +464,16 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
456
464
|
updatePreviewButtonState() {
|
|
457
465
|
if (this.isPreviewEnabled()) {
|
|
458
466
|
if (this.data.githubAccessToken) {
|
|
459
|
-
this.previewButton.label = ( localize(
|
|
467
|
+
this.previewButton.label = ( localize(7095, "Create on GitHub"));
|
|
460
468
|
}
|
|
461
469
|
else {
|
|
462
|
-
this.previewButton.label = ( localize(
|
|
470
|
+
this.previewButton.label = ( localize(7096, "Preview on GitHub"));
|
|
463
471
|
}
|
|
464
472
|
this.previewButton.enabled = true;
|
|
465
473
|
}
|
|
466
474
|
else {
|
|
467
475
|
this.previewButton.enabled = false;
|
|
468
|
-
this.previewButton.label = ( localize(
|
|
476
|
+
this.previewButton.label = ( localize(7097, "Loading data..."));
|
|
469
477
|
}
|
|
470
478
|
const issueRepoName = this.getElementById('show-repo-name');
|
|
471
479
|
const selectedExtension = this.issueReporterModel.getData().selectedExtension;
|
|
@@ -584,7 +592,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
584
592
|
}
|
|
585
593
|
else {
|
|
586
594
|
const message = $('div.list-title');
|
|
587
|
-
message.textContent = ( localize(
|
|
595
|
+
message.textContent = ( localize(7098, "GitHub query limit exceeded. Please wait."));
|
|
588
596
|
similarIssues.appendChild(message);
|
|
589
597
|
const resetTime = response.headers.get('X-RateLimit-Reset');
|
|
590
598
|
const timeToWait = resetTime ? parseInt(resetTime) - Math.floor(Date.now() / 1000) : 1;
|
|
@@ -634,7 +642,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
634
642
|
if (results.length) {
|
|
635
643
|
const issues = $('div.issues-container');
|
|
636
644
|
const issuesText = $('div.list-title');
|
|
637
|
-
issuesText.textContent = ( localize(
|
|
645
|
+
issuesText.textContent = ( localize(7099, "Similar issues"));
|
|
638
646
|
this.numberOfSearchResultsDisplayed = results.length < 5 ? results.length : 5;
|
|
639
647
|
for (let i = 0; i < this.numberOfSearchResultsDisplayed; i++) {
|
|
640
648
|
const issue = results[i];
|
|
@@ -650,8 +658,8 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
650
658
|
const issueIcon = $('span.issue-icon');
|
|
651
659
|
issueIcon.appendChild(renderIcon(issue.state === 'open' ? Codicon.issueOpened : Codicon.issueClosed));
|
|
652
660
|
const issueStateLabel = $('span.issue-state.label');
|
|
653
|
-
issueStateLabel.textContent = issue.state === 'open' ? ( localize(
|
|
654
|
-
issueState.title = issue.state === 'open' ? ( localize(
|
|
661
|
+
issueStateLabel.textContent = issue.state === 'open' ? ( localize(7100, "Open")) : ( localize(7101, "Closed"));
|
|
662
|
+
issueState.title = issue.state === 'open' ? ( localize(7100, "Open")) : ( localize(7101, "Closed"));
|
|
655
663
|
issueState.appendChild(issueIcon);
|
|
656
664
|
issueState.appendChild(issueStateLabel);
|
|
657
665
|
item = $('div.issue', undefined, issueState, link);
|
|
@@ -666,7 +674,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
666
674
|
}
|
|
667
675
|
else {
|
|
668
676
|
const message = $('div.list-title');
|
|
669
|
-
message.textContent = ( localize(
|
|
677
|
+
message.textContent = ( localize(7102, "No similar issues found"));
|
|
670
678
|
similarIssues.appendChild(message);
|
|
671
679
|
}
|
|
672
680
|
}
|
|
@@ -674,7 +682,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
674
682
|
const makeOption = (issueType, description) => $('option', { 'value': issueType.valueOf() }, escape(description));
|
|
675
683
|
const typeSelect = this.getElementById('issue-type');
|
|
676
684
|
const { issueType } = this.issueReporterModel.getData();
|
|
677
|
-
reset(typeSelect, makeOption(IssueType.Bug, ( localize(
|
|
685
|
+
reset(typeSelect, makeOption(IssueType.Bug, ( localize(7103, "Bug Report"))), makeOption(IssueType.FeatureRequest, ( localize(7104, "Feature Request"))), makeOption(IssueType.PerformanceIssue, ( localize(7105, "Performance Issue (freeze, slow, crash)"))));
|
|
678
686
|
typeSelect.value = ( issueType.toString());
|
|
679
687
|
this.setSourceOptions();
|
|
680
688
|
}
|
|
@@ -704,14 +712,14 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
704
712
|
}
|
|
705
713
|
}
|
|
706
714
|
sourceSelect.innerText = '';
|
|
707
|
-
sourceSelect.append(this.makeOption('', ( localize(
|
|
708
|
-
sourceSelect.append(this.makeOption(IssueSource.VSCode, ( localize(
|
|
709
|
-
sourceSelect.append(this.makeOption(IssueSource.Extension, ( localize(
|
|
715
|
+
sourceSelect.append(this.makeOption('', ( localize(7106, "Select source")), true));
|
|
716
|
+
sourceSelect.append(this.makeOption(IssueSource.VSCode, ( localize(7107, "Visual Studio Code")), false));
|
|
717
|
+
sourceSelect.append(this.makeOption(IssueSource.Extension, ( localize(7108, "A VS Code extension")), false));
|
|
710
718
|
if (this.product.reportMarketplaceIssueUrl) {
|
|
711
|
-
sourceSelect.append(this.makeOption(IssueSource.Marketplace, ( localize(
|
|
719
|
+
sourceSelect.append(this.makeOption(IssueSource.Marketplace, ( localize(7109, "Extensions Marketplace")), false));
|
|
712
720
|
}
|
|
713
721
|
if (issueType !== IssueType.FeatureRequest) {
|
|
714
|
-
sourceSelect.append(this.makeOption(IssueSource.Unknown, ( localize(
|
|
722
|
+
sourceSelect.append(this.makeOption(IssueSource.Unknown, ( localize(7110, "Don't know")), false));
|
|
715
723
|
}
|
|
716
724
|
if (selected !== -1 && selected < sourceSelect.options.length) {
|
|
717
725
|
sourceSelect.selectedIndex = selected;
|
|
@@ -721,7 +729,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
721
729
|
hide(this.getElementById('problem-source-help-text'));
|
|
722
730
|
}
|
|
723
731
|
}
|
|
724
|
-
renderBlocks() {
|
|
732
|
+
async renderBlocks() {
|
|
725
733
|
const { issueType, fileOnExtension, fileOnMarketplace, selectedExtension } = this.issueReporterModel.getData();
|
|
726
734
|
const blockContainer = this.getElementById('block-container');
|
|
727
735
|
const systemBlock = this.window.document.querySelector('.block-system');
|
|
@@ -734,6 +742,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
734
742
|
const descriptionTitle = this.getElementById('issue-description-label');
|
|
735
743
|
const descriptionSubtitle = this.getElementById('issue-description-subtitle');
|
|
736
744
|
const extensionSelector = this.getElementById('extension-selection');
|
|
745
|
+
const downloadExtensionDataLink = this.getElementById('extension-data-download');
|
|
737
746
|
const titleTextArea = this.getElementById('issue-title-container');
|
|
738
747
|
const descriptionTextArea = this.getElementById('description');
|
|
739
748
|
const extensionDataTextArea = this.getElementById('extension-data');
|
|
@@ -746,22 +755,45 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
746
755
|
hide(extensionSelector);
|
|
747
756
|
hide(extensionDataTextArea);
|
|
748
757
|
hide(extensionDataBlock);
|
|
758
|
+
hide(downloadExtensionDataLink);
|
|
749
759
|
show(problemSource);
|
|
750
760
|
show(titleTextArea);
|
|
751
761
|
show(descriptionTextArea);
|
|
752
762
|
if (fileOnExtension) {
|
|
753
763
|
show(extensionSelector);
|
|
754
764
|
}
|
|
765
|
+
const extensionData = this.issueReporterModel.getData().extensionData;
|
|
766
|
+
if (extensionData && extensionData.length > MAX_EXTENSION_DATA_LENGTH) {
|
|
767
|
+
show(downloadExtensionDataLink);
|
|
768
|
+
const date = ( new Date());
|
|
769
|
+
const formattedDate = date.toISOString().split('T')[0];
|
|
770
|
+
const formattedTime = date.toTimeString().split(' ')[0].replace(/:/g, '-');
|
|
771
|
+
const fileName = `extensionData_${formattedDate}_${formattedTime}.md`;
|
|
772
|
+
const handleLinkClick = async () => {
|
|
773
|
+
const downloadPath = await this.fileDialogService.showSaveDialog({
|
|
774
|
+
title: ( localize(7111, "Save Extension Data")),
|
|
775
|
+
availableFileSystems: [Schemas.file],
|
|
776
|
+
defaultUri: joinPath(await this.fileDialogService.defaultFilePath(Schemas.file), fileName),
|
|
777
|
+
});
|
|
778
|
+
if (downloadPath) {
|
|
779
|
+
await this.fileService.writeFile(downloadPath, VSBuffer.fromString(extensionData));
|
|
780
|
+
}
|
|
781
|
+
};
|
|
782
|
+
downloadExtensionDataLink.addEventListener('click', handleLinkClick);
|
|
783
|
+
this._register({
|
|
784
|
+
dispose: () => downloadExtensionDataLink.removeEventListener('click', handleLinkClick)
|
|
785
|
+
});
|
|
786
|
+
}
|
|
755
787
|
if (selectedExtension && this.nonGitHubIssueUrl) {
|
|
756
788
|
hide(titleTextArea);
|
|
757
789
|
hide(descriptionTextArea);
|
|
758
|
-
reset(descriptionTitle, ( localize(
|
|
790
|
+
reset(descriptionTitle, ( localize(7112, "This extension handles issues outside of VS Code")));
|
|
759
791
|
reset(descriptionSubtitle, ( localize(
|
|
760
|
-
|
|
792
|
+
7113,
|
|
761
793
|
"The '{0}' extension prefers to use an external issue reporter. To be taken to that issue reporting experience, click the button below.",
|
|
762
794
|
selectedExtension.displayName
|
|
763
795
|
)));
|
|
764
|
-
this.previewButton.label = ( localize(
|
|
796
|
+
this.previewButton.label = ( localize(7114, "Open External Issue Reporter"));
|
|
765
797
|
return;
|
|
766
798
|
}
|
|
767
799
|
if (fileOnExtension && selectedExtension?.data) {
|
|
@@ -788,9 +820,9 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
788
820
|
show(extensionsBlock);
|
|
789
821
|
}
|
|
790
822
|
}
|
|
791
|
-
reset(descriptionTitle, ( localize(
|
|
823
|
+
reset(descriptionTitle, ( localize(7115, "Steps to Reproduce")) + ' ', $('span.required-input', undefined, '*'));
|
|
792
824
|
reset(descriptionSubtitle, ( localize(
|
|
793
|
-
|
|
825
|
+
7116,
|
|
794
826
|
"Share the steps needed to reliably reproduce the problem. Please include actual and expected results. We support GitHub-flavored Markdown. You will be able to edit your issue and add screenshots when we preview it on GitHub."
|
|
795
827
|
)));
|
|
796
828
|
}
|
|
@@ -808,16 +840,16 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
808
840
|
else if (!fileOnMarketplace) {
|
|
809
841
|
show(extensionsBlock);
|
|
810
842
|
}
|
|
811
|
-
reset(descriptionTitle, ( localize(
|
|
843
|
+
reset(descriptionTitle, ( localize(7115, "Steps to Reproduce")) + ' ', $('span.required-input', undefined, '*'));
|
|
812
844
|
reset(descriptionSubtitle, ( localize(
|
|
813
|
-
|
|
845
|
+
7117,
|
|
814
846
|
"When did this performance issue happen? Does it occur on startup or after a specific series of actions? We support GitHub-flavored Markdown. You will be able to edit your issue and add screenshots when we preview it on GitHub."
|
|
815
847
|
)));
|
|
816
848
|
}
|
|
817
849
|
else if (issueType === IssueType.FeatureRequest) {
|
|
818
|
-
reset(descriptionTitle, ( localize(
|
|
850
|
+
reset(descriptionTitle, ( localize(7118, "Description")) + ' ', $('span.required-input', undefined, '*'));
|
|
819
851
|
reset(descriptionSubtitle, ( localize(
|
|
820
|
-
|
|
852
|
+
7119,
|
|
821
853
|
"Please describe the feature you would like to see. We support GitHub-flavored Markdown. You will be able to edit your issue and add screenshots when we preview it on GitHub."
|
|
822
854
|
)));
|
|
823
855
|
}
|
|
@@ -951,7 +983,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
951
983
|
throw ( new CancellationError());
|
|
952
984
|
}
|
|
953
985
|
return baseUrl + `&body=${encodeURIComponent(( localize(
|
|
954
|
-
|
|
986
|
+
7120,
|
|
955
987
|
"We have written the needed data into your clipboard because it was too large to send. Please paste."
|
|
956
988
|
)))}`;
|
|
957
989
|
}
|
|
@@ -1121,7 +1153,7 @@ let BaseIssueReporterService = class BaseIssueReporterService extends Disposable
|
|
|
1121
1153
|
const target = this.window.document.querySelector('.block-extensions .block-info');
|
|
1122
1154
|
if (target) {
|
|
1123
1155
|
if (this.disableExtensions) {
|
|
1124
|
-
reset(target, ( localize(
|
|
1156
|
+
reset(target, ( localize(7121, "Extensions are disabled")));
|
|
1125
1157
|
return;
|
|
1126
1158
|
}
|
|
1127
1159
|
const themeExclusionStr = numThemeExtensions ? `\n(${numThemeExtensions} theme extensions excluded)` : '';
|
|
@@ -1167,7 +1199,9 @@ BaseIssueReporterService.__decorator = ( __decorate([
|
|
|
1167
1199
|
], BaseIssueReporterService.prototype, "searchDuplicates", null));
|
|
1168
1200
|
BaseIssueReporterService = ( __decorate([
|
|
1169
1201
|
( __param(6, IIssueFormService)),
|
|
1170
|
-
( __param(7, IThemeService))
|
|
1202
|
+
( __param(7, IThemeService)),
|
|
1203
|
+
( __param(8, IFileService)),
|
|
1204
|
+
( __param(9, IFileDialogService))
|
|
1171
1205
|
], BaseIssueReporterService));
|
|
1172
1206
|
function hide(el) {
|
|
1173
1207
|
el?.classList.add('hidden');
|
|
@@ -35,5 +35,5 @@ WebIssueContribution = ( __decorate([
|
|
|
35
35
|
], WebIssueContribution));
|
|
36
36
|
( Registry.as(Extensions$1.Workbench)).registerWorkbenchContribution(WebIssueContribution, LifecyclePhase.Restored);
|
|
37
37
|
CommandsRegistry.registerCommand('_issues.getSystemStatus', (accessor) => {
|
|
38
|
-
return localize(
|
|
38
|
+
return localize(7122, "The --status argument is not yet supported in browsers.");
|
|
39
39
|
});
|
|
@@ -5,10 +5,10 @@ import { ExtensionIdentifierSet } from "@codingame/monaco-vscode-api/vscode/vs/p
|
|
|
5
5
|
import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
|
|
6
6
|
import { ILogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service";
|
|
7
7
|
import { IRectangle } from "@codingame/monaco-vscode-api/vscode/vs/platform/window/common/window";
|
|
8
|
-
import { IssueReporterData } from "../common/issue.js";
|
|
9
|
-
import { IIssueFormService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/issue/common/issue.service";
|
|
10
8
|
import { IAuxiliaryWindowService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.service";
|
|
11
9
|
import { IHostService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/host/browser/host.service";
|
|
10
|
+
import { IssueReporterData } from "../common/issue.js";
|
|
11
|
+
import { IIssueFormService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/issue/common/issue.service";
|
|
12
12
|
export interface IssuePassData {
|
|
13
13
|
issueTitle: string;
|
|
14
14
|
issueBody: string;
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
3
|
import { safeInnerHtml } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
|
|
4
4
|
import { DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
5
|
+
import { isWindows, isLinux } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
|
|
5
6
|
import Severity from '@codingame/monaco-vscode-api/vscode/vs/base/common/severity';
|
|
6
|
-
import './media/issueReporter.css.js';
|
|
7
7
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
8
8
|
import { MenuId } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions';
|
|
9
9
|
import { IMenuService } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions.service';
|
|
@@ -13,11 +13,12 @@ import { ExtensionIdentifierSet, ExtensionIdentifier } from '@codingame/monaco-v
|
|
|
13
13
|
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
14
14
|
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
|
|
15
15
|
import product from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/product';
|
|
16
|
-
import BaseHtml from './issueReporterPage.js';
|
|
17
|
-
import { IssueWebReporter } from './issueReporterService.js';
|
|
18
16
|
import { AuxiliaryWindowMode } from '@codingame/monaco-vscode-89a82baf-8ded-5b2f-b8af-e5fbd72dc5ad-common/vscode/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService';
|
|
19
17
|
import { IAuxiliaryWindowService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.service';
|
|
20
18
|
import { IHostService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/host/browser/host.service';
|
|
19
|
+
import BaseHtml from './issueReporterPage.js';
|
|
20
|
+
import { IssueWebReporter } from './issueReporterService.js';
|
|
21
|
+
import './media/issueReporter.css.js';
|
|
21
22
|
|
|
22
23
|
let IssueFormService = class IssueFormService {
|
|
23
24
|
constructor(instantiationService, auxiliaryWindowService, menuService, contextKeyService, logService, dialogService, hostService) {
|
|
@@ -53,10 +54,11 @@ let IssueFormService = class IssueFormService {
|
|
|
53
54
|
}
|
|
54
55
|
const disposables = ( new DisposableStore());
|
|
55
56
|
const auxiliaryWindow = disposables.add(await this.auxiliaryWindowService.open({ mode: AuxiliaryWindowMode.Normal, bounds: issueReporterBounds, nativeTitlebar: true, disableFullscreen: true }));
|
|
57
|
+
const platformClass = isWindows ? 'windows' : isLinux ? 'linux' : 'mac';
|
|
56
58
|
if (auxiliaryWindow) {
|
|
57
59
|
await auxiliaryWindow.whenStylesHaveLoaded;
|
|
58
60
|
auxiliaryWindow.window.document.title = 'Issue Reporter';
|
|
59
|
-
auxiliaryWindow.window.document.body.classList.add('issue-reporter-body');
|
|
61
|
+
auxiliaryWindow.window.document.body.classList.add('issue-reporter-body', 'monaco-workbench', platformClass);
|
|
60
62
|
const div = document.createElement('div');
|
|
61
63
|
div.classList.add('monaco-workbench');
|
|
62
64
|
auxiliaryWindow.container.remove();
|
|
@@ -112,19 +114,19 @@ let IssueFormService = class IssueFormService {
|
|
|
112
114
|
await this.dialogService.prompt({
|
|
113
115
|
type: Severity.Warning,
|
|
114
116
|
message: ( localize(
|
|
115
|
-
|
|
117
|
+
7123,
|
|
116
118
|
"Your input will not be saved. Are you sure you want to close this window?"
|
|
117
119
|
)),
|
|
118
120
|
buttons: [
|
|
119
121
|
{
|
|
120
|
-
label: ( localize(
|
|
122
|
+
label: ( localize(7124, "&&Yes")),
|
|
121
123
|
run: () => {
|
|
122
124
|
this.closeReporter();
|
|
123
125
|
this.issueReporterWindow = null;
|
|
124
126
|
}
|
|
125
127
|
},
|
|
126
128
|
{
|
|
127
|
-
label: ( localize(
|
|
129
|
+
label: ( localize(7125, "Cancel")),
|
|
128
130
|
run: () => { }
|
|
129
131
|
}
|
|
130
132
|
]
|
|
@@ -135,16 +137,16 @@ let IssueFormService = class IssueFormService {
|
|
|
135
137
|
await this.dialogService.prompt({
|
|
136
138
|
type: Severity.Warning,
|
|
137
139
|
message: ( localize(
|
|
138
|
-
|
|
140
|
+
7126,
|
|
139
141
|
"There is too much data to send to GitHub directly. The data will be copied to the clipboard, please paste it into the GitHub issue page that is opened."
|
|
140
142
|
)),
|
|
141
143
|
buttons: [
|
|
142
144
|
{
|
|
143
|
-
label: ( localize(
|
|
145
|
+
label: ( localize(7127, "&&OK")),
|
|
144
146
|
run: () => { result = true; }
|
|
145
147
|
},
|
|
146
148
|
{
|
|
147
|
-
label: ( localize(
|
|
149
|
+
label: ( localize(7125, "Cancel")),
|
|
148
150
|
run: () => { result = false; }
|
|
149
151
|
}
|
|
150
152
|
]
|
|
@@ -2,56 +2,56 @@
|
|
|
2
2
|
import { escape } from '@codingame/monaco-vscode-api/vscode/vs/base/common/strings';
|
|
3
3
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
4
4
|
|
|
5
|
-
const sendSystemInfoLabel = escape(( localize(
|
|
6
|
-
const sendProcessInfoLabel = escape(( localize(
|
|
7
|
-
const sendWorkspaceInfoLabel = escape(( localize(
|
|
8
|
-
const sendExtensionsLabel = escape(( localize(
|
|
9
|
-
const sendExperimentsLabel = escape(( localize(
|
|
10
|
-
const sendExtensionData = escape(( localize(
|
|
5
|
+
const sendSystemInfoLabel = escape(( localize(7128, "Include my system information")));
|
|
6
|
+
const sendProcessInfoLabel = escape(( localize(7129, "Include my currently running processes")));
|
|
7
|
+
const sendWorkspaceInfoLabel = escape(( localize(7130, "Include my workspace metadata")));
|
|
8
|
+
const sendExtensionsLabel = escape(( localize(7131, "Include my enabled extensions")));
|
|
9
|
+
const sendExperimentsLabel = escape(( localize(7132, "Include A/B experiment info")));
|
|
10
|
+
const sendExtensionData = escape(( localize(7133, "Include additional extension info")));
|
|
11
11
|
const reviewGuidanceLabel = ( localize(
|
|
12
|
-
|
|
12
|
+
7134,
|
|
13
13
|
'Before you report an issue here please <a href="https://github.com/microsoft/vscode/wiki/Submitting-Bugs-and-Suggestions" target="_blank">review the guidance we provide</a>.'
|
|
14
14
|
));
|
|
15
15
|
var BaseHtml = () => `
|
|
16
16
|
<div class="issue-reporter" id="issue-reporter">
|
|
17
|
-
<div id="english" class="input-group hidden">${escape(( localize(
|
|
17
|
+
<div id="english" class="input-group hidden">${escape(( localize(7135, "Please complete the form in English.")))}</div>
|
|
18
18
|
|
|
19
19
|
<div id="review-guidance-help-text" class="input-group">${reviewGuidanceLabel}</div>
|
|
20
20
|
|
|
21
21
|
<div class="section">
|
|
22
22
|
<div class="input-group">
|
|
23
|
-
<label class="inline-label" for="issue-type">${escape(( localize(
|
|
23
|
+
<label class="inline-label" for="issue-type">${escape(( localize(7136, "This is a")))}</label>
|
|
24
24
|
<select id="issue-type" class="inline-form-control">
|
|
25
25
|
<!-- To be dynamically filled -->
|
|
26
26
|
</select>
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<div class="input-group" id="problem-source">
|
|
30
|
-
<label class="inline-label" for="issue-source">${escape(( localize(
|
|
30
|
+
<label class="inline-label" for="issue-source">${escape(( localize(7137, "For")))} <span class="required-input">*</span></label>
|
|
31
31
|
<select id="issue-source" class="inline-form-control" required>
|
|
32
32
|
<!-- To be dynamically filled -->
|
|
33
33
|
</select>
|
|
34
|
-
<div id="issue-source-empty-error" class="validation-error hidden" role="alert">${escape(( localize(
|
|
34
|
+
<div id="issue-source-empty-error" class="validation-error hidden" role="alert">${escape(( localize(7138, "An issue source is required.")))}</div>
|
|
35
35
|
<div id="problem-source-help-text" class="instructions hidden">${escape(( localize(
|
|
36
|
-
|
|
36
|
+
7139,
|
|
37
37
|
"Try to reproduce the problem after {0}. If the problem only reproduces when extensions are active, it is likely an issue with an extension."
|
|
38
38
|
)))
|
|
39
|
-
.replace('{0}', () => `<span tabIndex=0 role="button" id="disableExtensions" class="workbenchCommand">${escape(( localize(
|
|
39
|
+
.replace('{0}', () => `<span tabIndex=0 role="button" id="disableExtensions" class="workbenchCommand">${escape(( localize(7140, "disabling all extensions and reloading the window")))}</span>`)}
|
|
40
40
|
</div>
|
|
41
41
|
|
|
42
42
|
<div id="extension-selection">
|
|
43
|
-
<label class="inline-label" for="extension-selector">${escape(( localize(
|
|
43
|
+
<label class="inline-label" for="extension-selector">${escape(( localize(7141, "Extension")))} <span class="required-input">*</span></label>
|
|
44
44
|
<select id="extension-selector" class="inline-form-control">
|
|
45
45
|
<!-- To be dynamically filled -->
|
|
46
46
|
</select>
|
|
47
47
|
<div id="extension-selection-validation-error" class="validation-error hidden" role="alert">${escape(( localize(
|
|
48
|
-
|
|
48
|
+
7142,
|
|
49
49
|
"The issue reporter is unable to create issues for this extension. Please visit {0} to report an issue."
|
|
50
50
|
)))
|
|
51
51
|
.replace('{0}', () => `<span tabIndex=0 role="button" id="extensionBugsLink" class="workbenchCommand"><!-- To be dynamically filled --></span>`)}</div>
|
|
52
52
|
<div id="extension-selection-validation-error-no-url" class="validation-error hidden" role="alert">
|
|
53
53
|
${escape(( localize(
|
|
54
|
-
|
|
54
|
+
7143,
|
|
55
55
|
"The issue reporter is unable to create issues for this extension, as it does not specify a URL for reporting issues. Please check the marketplace page of this extension to see if other instructions are available."
|
|
56
56
|
)))}
|
|
57
57
|
</div>
|
|
@@ -59,10 +59,10 @@ var BaseHtml = () => `
|
|
|
59
59
|
</div>
|
|
60
60
|
|
|
61
61
|
<div id="issue-title-container" class="input-group">
|
|
62
|
-
<label class="inline-label" for="issue-title">${escape(( localize(
|
|
63
|
-
<input id="issue-title" type="text" class="inline-form-control" placeholder="${escape(( localize(
|
|
64
|
-
<div id="issue-title-empty-error" class="validation-error hidden" role="alert">${escape(( localize(
|
|
65
|
-
<div id="issue-title-length-validation-error" class="validation-error hidden" role="alert">${escape(( localize(
|
|
62
|
+
<label class="inline-label" for="issue-title">${escape(( localize(7144, "Title")))} <span class="required-input">*</span></label>
|
|
63
|
+
<input id="issue-title" type="text" class="inline-form-control" placeholder="${escape(( localize(7145, "Please enter a title.")))}" required>
|
|
64
|
+
<div id="issue-title-empty-error" class="validation-error hidden" role="alert">${escape(( localize(7146, "A title is required.")))}</div>
|
|
65
|
+
<div id="issue-title-length-validation-error" class="validation-error hidden" role="alert">${escape(( localize(7147, "The title is too long.")))}</div>
|
|
66
66
|
<small id="similar-issues">
|
|
67
67
|
<!-- To be dynamically filled -->
|
|
68
68
|
</small>
|
|
@@ -78,10 +78,10 @@ var BaseHtml = () => `
|
|
|
78
78
|
<!-- To be dynamically filled -->
|
|
79
79
|
</div>
|
|
80
80
|
<div class="block-info-text">
|
|
81
|
-
<textarea name="description" id="description" placeholder="${escape(( localize(
|
|
81
|
+
<textarea name="description" id="description" placeholder="${escape(( localize(7148, "Please enter details.")))}" required></textarea>
|
|
82
82
|
</div>
|
|
83
|
-
<div id="description-empty-error" class="validation-error hidden" role="alert">${escape(( localize(
|
|
84
|
-
<div id="description-short-error" class="validation-error hidden" role="alert">${escape(( localize(
|
|
83
|
+
<div id="description-empty-error" class="validation-error hidden" role="alert">${escape(( localize(7149, "A description is required.")))}</div>
|
|
84
|
+
<div id="description-short-error" class="validation-error hidden" role="alert">${escape(( localize(7150, "Please provide a longer description.")))}</div>
|
|
85
85
|
</div>
|
|
86
86
|
|
|
87
87
|
<div class="system-info" id="block-container">
|
|
@@ -90,9 +90,10 @@ var BaseHtml = () => `
|
|
|
90
90
|
<label class="extension-caption" id="extension-caption" for="includeExtensionData">
|
|
91
91
|
${sendExtensionData}
|
|
92
92
|
<span id="ext-loading" hidden></span>
|
|
93
|
-
<span class="ext-parens" hidden>(</span><a href="#" class="showInfo" id="extension-id">${escape(( localize(
|
|
93
|
+
<span class="ext-parens" hidden>(</span><a href="#" class="showInfo" id="extension-id">${escape(( localize(7151, "show")))}</a><span class="ext-parens" hidden>)</span>
|
|
94
|
+
<a id="extension-data-download">${escape(( localize(7152, "Download Extension Data")))}</a>
|
|
94
95
|
</label>
|
|
95
|
-
<pre class="block-info" id="extension-data" placeholder="${escape(( localize(
|
|
96
|
+
<pre class="block-info" id="extension-data" placeholder="${escape(( localize(7153, "Extension does not have additional data to include.")))}" style="white-space: pre-wrap; user-select: text;">
|
|
96
97
|
<!-- To be dynamically filled -->
|
|
97
98
|
</pre>
|
|
98
99
|
</div>
|
|
@@ -101,7 +102,7 @@ var BaseHtml = () => `
|
|
|
101
102
|
<input class="sendData" aria-label="${sendSystemInfoLabel}" type="checkbox" id="includeSystemInfo" checked/>
|
|
102
103
|
<label class="caption" for="includeSystemInfo">
|
|
103
104
|
${sendSystemInfoLabel}
|
|
104
|
-
(<a href="#" class="showInfo">${escape(( localize(
|
|
105
|
+
(<a href="#" class="showInfo">${escape(( localize(7151, "show")))}</a>)
|
|
105
106
|
</label>
|
|
106
107
|
<div class="block-info hidden" style="user-select: text;">
|
|
107
108
|
<!-- To be dynamically filled -->
|
|
@@ -111,7 +112,7 @@ var BaseHtml = () => `
|
|
|
111
112
|
<input class="sendData" aria-label="${sendProcessInfoLabel}" type="checkbox" id="includeProcessInfo" checked/>
|
|
112
113
|
<label class="caption" for="includeProcessInfo">
|
|
113
114
|
${sendProcessInfoLabel}
|
|
114
|
-
(<a href="#" class="showInfo">${escape(( localize(
|
|
115
|
+
(<a href="#" class="showInfo">${escape(( localize(7151, "show")))}</a>)
|
|
115
116
|
</label>
|
|
116
117
|
<pre class="block-info hidden" style="user-select: text;">
|
|
117
118
|
<code>
|
|
@@ -123,7 +124,7 @@ var BaseHtml = () => `
|
|
|
123
124
|
<input class="sendData" aria-label="${sendWorkspaceInfoLabel}" type="checkbox" id="includeWorkspaceInfo" checked/>
|
|
124
125
|
<label class="caption" for="includeWorkspaceInfo">
|
|
125
126
|
${sendWorkspaceInfoLabel}
|
|
126
|
-
(<a href="#" class="showInfo">${escape(( localize(
|
|
127
|
+
(<a href="#" class="showInfo">${escape(( localize(7151, "show")))}</a>)
|
|
127
128
|
</label>
|
|
128
129
|
<pre id="systemInfo" class="block-info hidden" style="user-select: text;">
|
|
129
130
|
<code>
|
|
@@ -135,7 +136,7 @@ var BaseHtml = () => `
|
|
|
135
136
|
<input class="sendData" aria-label="${sendExtensionsLabel}" type="checkbox" id="includeExtensions" checked/>
|
|
136
137
|
<label class="caption" for="includeExtensions">
|
|
137
138
|
${sendExtensionsLabel}
|
|
138
|
-
(<a href="#" class="showInfo">${escape(( localize(
|
|
139
|
+
(<a href="#" class="showInfo">${escape(( localize(7151, "show")))}</a>)
|
|
139
140
|
</label>
|
|
140
141
|
<div id="systemInfo" class="block-info hidden" style="user-select: text;">
|
|
141
142
|
<!-- To be dynamically filled -->
|
|
@@ -145,7 +146,7 @@ var BaseHtml = () => `
|
|
|
145
146
|
<input class="sendData" aria-label="${sendExperimentsLabel}" type="checkbox" id="includeExperiments" checked/>
|
|
146
147
|
<label class="caption" for="includeExperiments">
|
|
147
148
|
${sendExperimentsLabel}
|
|
148
|
-
(<a href="#" class="showInfo">${escape(( localize(
|
|
149
|
+
(<a href="#" class="showInfo">${escape(( localize(7151, "show")))}</a>)
|
|
149
150
|
</label>
|
|
150
151
|
<pre class="block-info hidden" style="user-select: text;">
|
|
151
152
|
<!-- To be dynamically filled -->
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { IProductConfiguration } from "@codingame/monaco-vscode-api/vscode/vs/base/common/product";
|
|
2
|
+
import { IFileDialogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service";
|
|
3
|
+
import { IFileService } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service";
|
|
2
4
|
import { IThemeService } from "@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service";
|
|
3
|
-
import { BaseIssueReporterService } from "./baseIssueReporterService.js";
|
|
4
5
|
import { IssueReporterData } from "../common/issue.js";
|
|
5
6
|
import { IIssueFormService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/issue/common/issue.service";
|
|
7
|
+
import { BaseIssueReporterService } from "./baseIssueReporterService.js";
|
|
6
8
|
export declare class IssueWebReporter extends BaseIssueReporterService {
|
|
7
9
|
constructor(disableExtensions: boolean, data: IssueReporterData, os: {
|
|
8
10
|
type: string;
|
|
9
11
|
arch: string;
|
|
10
12
|
release: string;
|
|
11
|
-
}, product: IProductConfiguration, window: Window, issueFormService: IIssueFormService, themeService: IThemeService);
|
|
13
|
+
}, product: IProductConfiguration, window: Window, issueFormService: IIssueFormService, themeService: IThemeService, fileService: IFileService, fileDialogService: IFileDialogService);
|
|
12
14
|
setEventHandlers(): void;
|
|
13
15
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
|
|
2
2
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
3
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
4
|
+
import { IFileDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
|
|
5
|
+
import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
|
|
4
6
|
import { IThemeService } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service';
|
|
5
|
-
import { BaseIssueReporterService } from './baseIssueReporterService.js';
|
|
6
7
|
import { IIssueFormService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/issue/common/issue.service';
|
|
8
|
+
import { BaseIssueReporterService } from './baseIssueReporterService.js';
|
|
7
9
|
|
|
8
10
|
let IssueWebReporter = class IssueWebReporter extends BaseIssueReporterService {
|
|
9
|
-
constructor(disableExtensions, data, os, product, window, issueFormService, themeService) {
|
|
10
|
-
super(disableExtensions, data, os, product, window, true, issueFormService, themeService);
|
|
11
|
+
constructor(disableExtensions, data, os, product, window, issueFormService, themeService, fileService, fileDialogService) {
|
|
12
|
+
super(disableExtensions, data, os, product, window, true, issueFormService, themeService, fileService, fileDialogService);
|
|
11
13
|
const target = this.window.document.querySelector('.block-system .block-info');
|
|
12
14
|
const webInfo = this.window.navigator.userAgent;
|
|
13
15
|
if (webInfo) {
|
|
@@ -24,7 +26,7 @@ let IssueWebReporter = class IssueWebReporter extends BaseIssueReporterService {
|
|
|
24
26
|
this.issueReporterModel.update({ issueType: issueType });
|
|
25
27
|
const descriptionTextArea = this.getElementById('issue-title');
|
|
26
28
|
if (descriptionTextArea) {
|
|
27
|
-
descriptionTextArea.placeholder = ( localize(
|
|
29
|
+
descriptionTextArea.placeholder = ( localize(7154, "Please enter a title"));
|
|
28
30
|
}
|
|
29
31
|
this.updatePreviewButtonState();
|
|
30
32
|
this.setSourceOptions();
|
|
@@ -34,7 +36,9 @@ let IssueWebReporter = class IssueWebReporter extends BaseIssueReporterService {
|
|
|
34
36
|
};
|
|
35
37
|
IssueWebReporter = ( __decorate([
|
|
36
38
|
( __param(5, IIssueFormService)),
|
|
37
|
-
( __param(6, IThemeService))
|
|
39
|
+
( __param(6, IThemeService)),
|
|
40
|
+
( __param(7, IFileService)),
|
|
41
|
+
( __param(8, IFileDialogService))
|
|
38
42
|
], IssueWebReporter));
|
|
39
43
|
|
|
40
44
|
export { IssueWebReporter };
|
|
@@ -85,13 +85,13 @@ let TroubleshootIssueService = class TroubleshootIssueService extends Disposable
|
|
|
85
85
|
throw ( new Error('invalid state'));
|
|
86
86
|
}
|
|
87
87
|
const res = await this.dialogService.confirm({
|
|
88
|
-
message: ( localize(
|
|
88
|
+
message: ( localize(7155, "Troubleshoot Issue")),
|
|
89
89
|
detail: ( localize(
|
|
90
|
-
|
|
90
|
+
7156,
|
|
91
91
|
"Issue troubleshooting is a process to help you identify the cause for an issue. The cause for an issue can be a misconfiguration, due to an extension, or be {0} itself.\n\nDuring the process the window reloads repeatedly. Each time you must confirm if you are still seeing the issue.",
|
|
92
92
|
this.productService.nameLong
|
|
93
93
|
)),
|
|
94
|
-
primaryButton: ( localize(
|
|
94
|
+
primaryButton: ( localize(7157, "&&Troubleshoot Issue")),
|
|
95
95
|
custom: true
|
|
96
96
|
});
|
|
97
97
|
if (!res.confirmed) {
|
|
@@ -135,7 +135,7 @@ let TroubleshootIssueService = class TroubleshootIssueService extends Disposable
|
|
|
135
135
|
return;
|
|
136
136
|
}
|
|
137
137
|
const result = await this.askToReproduceIssue(( localize(
|
|
138
|
-
|
|
138
|
+
7158,
|
|
139
139
|
"Issue troubleshooting is active and has temporarily disabled all installed extensions. Check if you can still reproduce the problem and proceed by selecting from these options."
|
|
140
140
|
)));
|
|
141
141
|
if (result === 'good') {
|
|
@@ -153,7 +153,7 @@ let TroubleshootIssueService = class TroubleshootIssueService extends Disposable
|
|
|
153
153
|
await this.userDataProfileManagementService.createAndEnterTransientProfile();
|
|
154
154
|
this.updateState(this.state);
|
|
155
155
|
const result = await this.askToReproduceIssue(( localize(
|
|
156
|
-
|
|
156
|
+
7159,
|
|
157
157
|
"Issue troubleshooting is active and has temporarily reset your configurations to defaults. Check if you can still reproduce the problem and proceed by selecting from these options."
|
|
158
158
|
)));
|
|
159
159
|
if (result === 'stop') {
|
|
@@ -161,13 +161,13 @@ let TroubleshootIssueService = class TroubleshootIssueService extends Disposable
|
|
|
161
161
|
}
|
|
162
162
|
if (result === 'good') {
|
|
163
163
|
await this.askToReportIssue(( localize(
|
|
164
|
-
|
|
164
|
+
7160,
|
|
165
165
|
"Issue troubleshooting has identified that the issue is caused by your configurations. Please report the issue by exporting your configurations using \"Export Profile\" command and share the file in the issue report."
|
|
166
166
|
)));
|
|
167
167
|
}
|
|
168
168
|
if (result === 'bad') {
|
|
169
169
|
await this.askToReportIssue(( localize(
|
|
170
|
-
|
|
170
|
+
7161,
|
|
171
171
|
"Issue troubleshooting has identified that the issue is with {0}.",
|
|
172
172
|
this.productService.nameLong
|
|
173
173
|
)));
|
|
@@ -182,15 +182,15 @@ let TroubleshootIssueService = class TroubleshootIssueService extends Disposable
|
|
|
182
182
|
askToReproduceIssue(message) {
|
|
183
183
|
return (new Promise((c, e) => {
|
|
184
184
|
const goodPrompt = {
|
|
185
|
-
label: ( localize(
|
|
185
|
+
label: ( localize(7162, "I Can't Reproduce")),
|
|
186
186
|
run: () => c('good')
|
|
187
187
|
};
|
|
188
188
|
const badPrompt = {
|
|
189
|
-
label: ( localize(
|
|
189
|
+
label: ( localize(7163, "I Can Reproduce")),
|
|
190
190
|
run: () => c('bad')
|
|
191
191
|
};
|
|
192
192
|
const stop = {
|
|
193
|
-
label: ( localize(
|
|
193
|
+
label: ( localize(7164, "Stop")),
|
|
194
194
|
run: () => c('stop')
|
|
195
195
|
};
|
|
196
196
|
this.notificationHandle = this.notificationService.prompt(Severity.Info, message, [goodPrompt, badPrompt, stop], { sticky: true, priority: NotificationPriority.URGENT });
|
|
@@ -203,9 +203,9 @@ let TroubleshootIssueService = class TroubleshootIssueService extends Disposable
|
|
|
203
203
|
if (res === 'good') {
|
|
204
204
|
await this.dialogService.prompt({
|
|
205
205
|
type: Severity.Info,
|
|
206
|
-
message: ( localize(
|
|
206
|
+
message: ( localize(7155, "Troubleshoot Issue")),
|
|
207
207
|
detail: ( localize(
|
|
208
|
-
|
|
208
|
+
7165,
|
|
209
209
|
"This likely means that the issue has been addressed already and will be available in an upcoming release. You can safely use {0} insiders until the new stable version is available.",
|
|
210
210
|
this.productService.nameLong
|
|
211
211
|
)),
|
|
@@ -228,11 +228,11 @@ let TroubleshootIssueService = class TroubleshootIssueService extends Disposable
|
|
|
228
228
|
async askToReproduceIssueWithInsiders() {
|
|
229
229
|
const confirmRes = await this.dialogService.confirm({
|
|
230
230
|
type: 'info',
|
|
231
|
-
message: ( localize(
|
|
232
|
-
primaryButton: ( localize(
|
|
233
|
-
cancelButton: ( localize(
|
|
231
|
+
message: ( localize(7155, "Troubleshoot Issue")),
|
|
232
|
+
primaryButton: ( localize(7166, "Download {0} Insiders", this.productService.nameLong)),
|
|
233
|
+
cancelButton: ( localize(7167, "Report Issue Anyway")),
|
|
234
234
|
detail: ( localize(
|
|
235
|
-
|
|
235
|
+
7168,
|
|
236
236
|
"Please try to download and reproduce the issue in {0} insiders.",
|
|
237
237
|
this.productService.nameLong
|
|
238
238
|
)),
|
|
@@ -249,20 +249,20 @@ let TroubleshootIssueService = class TroubleshootIssueService extends Disposable
|
|
|
249
249
|
}
|
|
250
250
|
const res = await this.dialogService.prompt({
|
|
251
251
|
type: 'info',
|
|
252
|
-
message: ( localize(
|
|
252
|
+
message: ( localize(7155, "Troubleshoot Issue")),
|
|
253
253
|
buttons: [{
|
|
254
|
-
label: ( localize(
|
|
254
|
+
label: ( localize(7169, "I can't reproduce")),
|
|
255
255
|
run: () => 'good'
|
|
256
256
|
}, {
|
|
257
|
-
label: ( localize(
|
|
257
|
+
label: ( localize(7170, "I can reproduce")),
|
|
258
258
|
run: () => 'bad'
|
|
259
259
|
}],
|
|
260
260
|
cancelButton: {
|
|
261
|
-
label: ( localize(
|
|
261
|
+
label: ( localize(7171, "Stop")),
|
|
262
262
|
run: () => 'stop'
|
|
263
263
|
},
|
|
264
264
|
detail: ( localize(
|
|
265
|
-
|
|
265
|
+
7172,
|
|
266
266
|
"Please try to reproduce the issue in {0} insiders and confirm if the issue exists there.",
|
|
267
267
|
this.productService.nameLong
|
|
268
268
|
)),
|
|
@@ -337,7 +337,7 @@ registerAction2(class TroubleshootIssueAction extends Action2 {
|
|
|
337
337
|
constructor() {
|
|
338
338
|
super({
|
|
339
339
|
id: 'workbench.action.troubleshootIssue.start',
|
|
340
|
-
title: ( localize2(
|
|
340
|
+
title: ( localize2(7173, 'Troubleshoot Issue...')),
|
|
341
341
|
category: Categories.Help,
|
|
342
342
|
f1: true,
|
|
343
343
|
precondition: ( ContextKeyExpr.and(( IssueTroubleshootUi.ctxIsTroubleshootActive.negate()), ( RemoteNameContext.isEqualTo('')), ( IsWebContext.negate()))),
|
|
@@ -351,7 +351,7 @@ registerAction2(class extends Action2 {
|
|
|
351
351
|
constructor() {
|
|
352
352
|
super({
|
|
353
353
|
id: 'workbench.action.troubleshootIssue.stop',
|
|
354
|
-
title: ( localize2(
|
|
354
|
+
title: ( localize2(7174, 'Stop Troubleshoot Issue')),
|
|
355
355
|
category: Categories.Help,
|
|
356
356
|
f1: true,
|
|
357
357
|
precondition: IssueTroubleshootUi.ctxIsTroubleshootActive
|
|
@@ -75,7 +75,7 @@ let BaseIssueContribution = class BaseIssueContribution extends Disposable {
|
|
|
75
75
|
}));
|
|
76
76
|
const reportIssue = {
|
|
77
77
|
id: OpenIssueReporterActionId,
|
|
78
|
-
title: ( localize2(
|
|
78
|
+
title: ( localize2(7175, "Report Issue...")),
|
|
79
79
|
category: Categories.Help
|
|
80
80
|
};
|
|
81
81
|
this._register(MenuRegistry.appendMenuItem(MenuId.CommandPalette, { command: reportIssue }));
|
|
@@ -83,7 +83,7 @@ let BaseIssueContribution = class BaseIssueContribution extends Disposable {
|
|
|
83
83
|
group: '3_feedback',
|
|
84
84
|
command: {
|
|
85
85
|
id: OpenIssueReporterActionId,
|
|
86
|
-
title: ( localize(
|
|
86
|
+
title: ( localize(7176, "Report &&Issue"))
|
|
87
87
|
},
|
|
88
88
|
order: 3
|
|
89
89
|
}));
|