@codingame/monaco-vscode-dialogs-service-override 29.1.1 → 30.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 +2 -2
- package/vscode/src/vs/workbench/services/dialogs/browser/abstractFileDialogService.js +14 -14
- package/vscode/src/vs/workbench/services/dialogs/browser/fileDialogService.js +8 -8
- package/vscode/src/vs/workbench/services/dialogs/browser/simpleFileDialog.d.ts +18 -0
- package/vscode/src/vs/workbench/services/dialogs/browser/simpleFileDialog.js +45 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-dialogs-service-override",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "30.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - dialogs service-override",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "
|
|
18
|
+
"@codingame/monaco-vscode-api": "30.0.0"
|
|
19
19
|
},
|
|
20
20
|
"main": "index.js",
|
|
21
21
|
"module": "index.js",
|
|
@@ -202,16 +202,16 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
202
202
|
return ConfirmResult.DONT_SAVE;
|
|
203
203
|
}
|
|
204
204
|
let message;
|
|
205
|
-
let detail = ( localize(
|
|
205
|
+
let detail = ( localize(15926, "Your changes will be lost if you don't save them."));
|
|
206
206
|
if (fileNamesOrResources.length === 1) {
|
|
207
207
|
message = ( localize(
|
|
208
|
-
|
|
208
|
+
15927,
|
|
209
209
|
"Do you want to save the changes you made to {0}?",
|
|
210
210
|
typeof fileNamesOrResources[0] === "string" ? fileNamesOrResources[0] : basename(fileNamesOrResources[0])
|
|
211
211
|
));
|
|
212
212
|
} else {
|
|
213
213
|
message = ( localize(
|
|
214
|
-
|
|
214
|
+
15928,
|
|
215
215
|
"Do you want to save the changes to the following {0} files?",
|
|
216
216
|
fileNamesOrResources.length
|
|
217
217
|
));
|
|
@@ -224,10 +224,10 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
224
224
|
message,
|
|
225
225
|
detail,
|
|
226
226
|
buttons: [{
|
|
227
|
-
label: fileNamesOrResources.length > 1 ? ( localize(
|
|
227
|
+
label: fileNamesOrResources.length > 1 ? ( localize(15929, "&&Save All")) : ( localize(15930, "&&Save")),
|
|
228
228
|
run: () => ConfirmResult.SAVE
|
|
229
229
|
}, {
|
|
230
|
-
label: ( localize(
|
|
230
|
+
label: ( localize(15931, "Do&&n't Save")),
|
|
231
231
|
run: () => ConfirmResult.DONT_SAVE
|
|
232
232
|
}],
|
|
233
233
|
cancelButton: {
|
|
@@ -240,7 +240,7 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
240
240
|
return schema === Schemas.untitled ? [Schemas.file] : (schema !== Schemas.file ? [schema, Schemas.file] : [schema]);
|
|
241
241
|
}
|
|
242
242
|
async pickFileFolderAndOpenSimplified(schema, options, preferNewWindow) {
|
|
243
|
-
const title = ( localize(
|
|
243
|
+
const title = ( localize(15932, "Open File or Folder"));
|
|
244
244
|
const availableFileSystems = this.addFileSchemaIfNeeded(schema);
|
|
245
245
|
const uris = await this.pickResource({
|
|
246
246
|
canSelectFiles: true,
|
|
@@ -280,7 +280,7 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
282
|
async pickFileAndOpenSimplified(schema, options, preferNewWindow) {
|
|
283
|
-
const title = ( localize(
|
|
283
|
+
const title = ( localize(15933, "Open File"));
|
|
284
284
|
const availableFileSystems = this.addFileSchemaIfNeeded(schema);
|
|
285
285
|
const uris = await this.pickResource({
|
|
286
286
|
canSelectFiles: true,
|
|
@@ -322,7 +322,7 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
322
322
|
}]);
|
|
323
323
|
}
|
|
324
324
|
async pickFolderAndOpenSimplified(schema, options) {
|
|
325
|
-
const title = ( localize(
|
|
325
|
+
const title = ( localize(15934, "Open Folder"));
|
|
326
326
|
const availableFileSystems = this.addFileSchemaIfNeeded(schema, true);
|
|
327
327
|
const uris = await this.pickResource({
|
|
328
328
|
canSelectFiles: false,
|
|
@@ -343,9 +343,9 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
343
343
|
}
|
|
344
344
|
}
|
|
345
345
|
async pickWorkspaceAndOpenSimplified(schema, options) {
|
|
346
|
-
const title = ( localize(
|
|
346
|
+
const title = ( localize(15935, "Open Workspace from File"));
|
|
347
347
|
const filters = [{
|
|
348
|
-
name: ( localize(
|
|
348
|
+
name: ( localize(15936, "Workspace")),
|
|
349
349
|
extensions: [WORKSPACE_EXTENSION]
|
|
350
350
|
}];
|
|
351
351
|
const availableFileSystems = this.addFileSchemaIfNeeded(schema, true);
|
|
@@ -372,7 +372,7 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
372
372
|
if (!options.availableFileSystems) {
|
|
373
373
|
options.availableFileSystems = this.addFileSchemaIfNeeded(schema);
|
|
374
374
|
}
|
|
375
|
-
options.title = ( localize(
|
|
375
|
+
options.title = ( localize(15937, "Save As"));
|
|
376
376
|
const uri = await this.saveRemoteResource(options);
|
|
377
377
|
if (uri) {
|
|
378
378
|
this.addFileToRecentlyOpened(uri);
|
|
@@ -437,7 +437,7 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
437
437
|
getPickFileToSaveDialogOptions(defaultUri, availableFileSystems) {
|
|
438
438
|
const options = {
|
|
439
439
|
defaultUri,
|
|
440
|
-
title: ( localize(
|
|
440
|
+
title: ( localize(15938, "Save As")),
|
|
441
441
|
availableFileSystems
|
|
442
442
|
};
|
|
443
443
|
const ext = defaultUri ? extname(defaultUri) : undefined;
|
|
@@ -475,10 +475,10 @@ let AbstractFileDialogService = class AbstractFileDialogService {
|
|
|
475
475
|
};
|
|
476
476
|
}
|
|
477
477
|
options.filters = coalesce([{
|
|
478
|
-
name: ( localize(
|
|
478
|
+
name: ( localize(15939, "All Files")),
|
|
479
479
|
extensions: ["*"]
|
|
480
480
|
}, matchingFilter, ...registeredLanguageFilters, {
|
|
481
|
-
name: ( localize(
|
|
481
|
+
name: ( localize(15940, "No Extension")),
|
|
482
482
|
extensions: [""]
|
|
483
483
|
}]);
|
|
484
484
|
return options;
|
|
@@ -28,7 +28,7 @@ class FileDialogService extends AbstractFileDialogService {
|
|
|
28
28
|
if (this.shouldUseSimplified(schema)) {
|
|
29
29
|
return super.pickFileFolderAndOpenSimplified(schema, options, false);
|
|
30
30
|
}
|
|
31
|
-
throw ( new Error(( localize(
|
|
31
|
+
throw ( new Error(( localize(15941, "Can't open folders, try adding a folder to the workspace instead."))));
|
|
32
32
|
}
|
|
33
33
|
addFileSchemaIfNeeded(schema, isFolder) {
|
|
34
34
|
return (schema === Schemas.untitled) ? [Schemas.file] : (((schema !== Schemas.file) && (!isFolder || (schema !== Schemas.vscodeRemote))) ? [schema, Schemas.file] : [schema]);
|
|
@@ -73,7 +73,7 @@ class FileDialogService extends AbstractFileDialogService {
|
|
|
73
73
|
if (this.shouldUseSimplified(schema)) {
|
|
74
74
|
return super.pickFolderAndOpenSimplified(schema, options);
|
|
75
75
|
}
|
|
76
|
-
throw ( new Error(( localize(
|
|
76
|
+
throw ( new Error(( localize(15941, "Can't open folders, try adding a folder to the workspace instead."))));
|
|
77
77
|
}
|
|
78
78
|
async pickWorkspaceAndOpen(options) {
|
|
79
79
|
options.availableFileSystems = this.getWorkspaceAvailableFileSystems(options);
|
|
@@ -85,7 +85,7 @@ class FileDialogService extends AbstractFileDialogService {
|
|
|
85
85
|
return super.pickWorkspaceAndOpenSimplified(schema, options);
|
|
86
86
|
}
|
|
87
87
|
throw ( new Error(( localize(
|
|
88
|
-
|
|
88
|
+
15942,
|
|
89
89
|
"Can't open workspaces, try adding a folder to the workspace instead."
|
|
90
90
|
))));
|
|
91
91
|
}
|
|
@@ -213,19 +213,19 @@ class FileDialogService extends AbstractFileDialogService {
|
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
const buttons = [{
|
|
216
|
-
label: ( localize(
|
|
216
|
+
label: ( localize(15943, "&&Open Remote...")),
|
|
217
217
|
run: async () => {
|
|
218
218
|
await this.commandService.executeCommand("workbench.action.remote.showMenu");
|
|
219
219
|
}
|
|
220
220
|
}, {
|
|
221
|
-
label: ( localize(
|
|
221
|
+
label: ( localize(15944, "&&Learn More")),
|
|
222
222
|
run: async () => {
|
|
223
223
|
await this.openerService.open("https://aka.ms/VSCodeWebLocalFileSystemAccess");
|
|
224
224
|
}
|
|
225
225
|
}];
|
|
226
226
|
if (context === "open") {
|
|
227
227
|
buttons.push({
|
|
228
|
-
label: ( localize(
|
|
228
|
+
label: ( localize(15945, "Open &&Files...")),
|
|
229
229
|
run: async () => {
|
|
230
230
|
const files = await triggerUpload();
|
|
231
231
|
if (files) {
|
|
@@ -247,9 +247,9 @@ class FileDialogService extends AbstractFileDialogService {
|
|
|
247
247
|
}
|
|
248
248
|
await this.dialogService.prompt({
|
|
249
249
|
type: Severity.Warning,
|
|
250
|
-
message: ( localize(
|
|
250
|
+
message: ( localize(15946, "Opening Local Folders is Unsupported")),
|
|
251
251
|
detail: ( localize(
|
|
252
|
-
|
|
252
|
+
15947,
|
|
253
253
|
"Your browser doesn't support opening local folders.\nYou can either open single files or open a remote repository."
|
|
254
254
|
)),
|
|
255
255
|
buttons
|
|
@@ -85,6 +85,15 @@ export declare class SimpleFileDialog extends Disposable implements ISimpleFileD
|
|
|
85
85
|
* {@link remoteAuthority}).
|
|
86
86
|
*/
|
|
87
87
|
private scopedAuthority;
|
|
88
|
+
/**
|
|
89
|
+
* Path prefix that the label formatter strips from URIs in the
|
|
90
|
+
* scoped scheme (e.g. `/file/-` for agent host URIs that encode
|
|
91
|
+
* the original scheme and authority as leading path segments).
|
|
92
|
+
*
|
|
93
|
+
* Stripped by {@link pathFromUri} and re-applied by
|
|
94
|
+
* {@link remoteUriFrom} so the user sees clean paths.
|
|
95
|
+
*/
|
|
96
|
+
private scopedPathPrefix;
|
|
88
97
|
private readonly onBusyChangeEmitter;
|
|
89
98
|
private updatingPromise;
|
|
90
99
|
private _showDotFiles;
|
|
@@ -107,6 +116,15 @@ export declare class SimpleFileDialog extends Disposable implements ISimpleFileD
|
|
|
107
116
|
* already handled by the existing logic.
|
|
108
117
|
*/
|
|
109
118
|
private getScopedAuthority;
|
|
119
|
+
/**
|
|
120
|
+
* Computes the path prefix that the label formatter strips for the
|
|
121
|
+
* scoped scheme, by comparing the raw URI path with the label
|
|
122
|
+
* service's formatted output.
|
|
123
|
+
*
|
|
124
|
+
* For example, an agent host URI with path `/file/-/Users/roblou`
|
|
125
|
+
* formats as `/Users/roblou`, so the prefix is `/file/-`.
|
|
126
|
+
*/
|
|
127
|
+
private computeScopedPathPrefix;
|
|
110
128
|
private getRemoteAgentEnvironment;
|
|
111
129
|
protected getUserHome(trueHome?: boolean): Promise<URI>;
|
|
112
130
|
private normalizeUri;
|
|
@@ -41,7 +41,7 @@ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform
|
|
|
41
41
|
var OpenLocalFileCommand;
|
|
42
42
|
(function(OpenLocalFileCommand) {
|
|
43
43
|
OpenLocalFileCommand.ID = "workbench.action.files.openLocalFile";
|
|
44
|
-
OpenLocalFileCommand.LABEL = ( localize(
|
|
44
|
+
OpenLocalFileCommand.LABEL = ( localize(15948, "Open Local File..."));
|
|
45
45
|
function handler() {
|
|
46
46
|
return accessor => {
|
|
47
47
|
const dialogService = accessor.get(IFileDialogService);
|
|
@@ -56,7 +56,7 @@ var OpenLocalFileCommand;
|
|
|
56
56
|
var SaveLocalFileCommand;
|
|
57
57
|
(function(SaveLocalFileCommand) {
|
|
58
58
|
SaveLocalFileCommand.ID = "workbench.action.files.saveLocalFile";
|
|
59
|
-
SaveLocalFileCommand.LABEL = ( localize(
|
|
59
|
+
SaveLocalFileCommand.LABEL = ( localize(15949, "Save Local File..."));
|
|
60
60
|
function handler() {
|
|
61
61
|
return accessor => {
|
|
62
62
|
const editorService = accessor.get(IEditorService);
|
|
@@ -79,7 +79,7 @@ var SaveLocalFileCommand;
|
|
|
79
79
|
var OpenLocalFolderCommand;
|
|
80
80
|
(function(OpenLocalFolderCommand) {
|
|
81
81
|
OpenLocalFolderCommand.ID = "workbench.action.files.openLocalFolder";
|
|
82
|
-
OpenLocalFolderCommand.LABEL = ( localize(
|
|
82
|
+
OpenLocalFolderCommand.LABEL = ( localize(15950, "Open Local Folder..."));
|
|
83
83
|
function handler() {
|
|
84
84
|
return accessor => {
|
|
85
85
|
const dialogService = accessor.get(IFileDialogService);
|
|
@@ -94,7 +94,7 @@ var OpenLocalFolderCommand;
|
|
|
94
94
|
var OpenLocalFileFolderCommand;
|
|
95
95
|
(function(OpenLocalFileFolderCommand) {
|
|
96
96
|
OpenLocalFileFolderCommand.ID = "workbench.action.files.openLocalFileFolder";
|
|
97
|
-
OpenLocalFileFolderCommand.LABEL = ( localize(
|
|
97
|
+
OpenLocalFileFolderCommand.LABEL = ( localize(15951, "Open Local..."));
|
|
98
98
|
function handler() {
|
|
99
99
|
return accessor => {
|
|
100
100
|
const dialogService = accessor.get(IFileDialogService);
|
|
@@ -156,6 +156,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
156
156
|
this.autoCompletePathSegment = "";
|
|
157
157
|
this.isWindows = false;
|
|
158
158
|
this.separator = "/";
|
|
159
|
+
this.scopedPathPrefix = "";
|
|
159
160
|
this.onBusyChangeEmitter = this._register(( new Emitter()));
|
|
160
161
|
this._showDotFiles = true;
|
|
161
162
|
this.remoteAuthority = this.environmentService.remoteAuthority;
|
|
@@ -198,6 +199,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
198
199
|
async showOpenDialog(options = {}) {
|
|
199
200
|
this.scheme = this.getScheme(options.availableFileSystems, options.defaultUri);
|
|
200
201
|
this.scopedAuthority = this.getScopedAuthority(options.defaultUri);
|
|
202
|
+
this.scopedPathPrefix = options.defaultUri && this.scopedAuthority ? this.computeScopedPathPrefix(options.defaultUri) : "";
|
|
201
203
|
this.userHome = await this.getUserHome();
|
|
202
204
|
this.trueHome = await this.getUserHome(true);
|
|
203
205
|
const newOptions = this.getOptions(options);
|
|
@@ -214,6 +216,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
214
216
|
async showSaveDialog(options) {
|
|
215
217
|
this.scheme = this.getScheme(options.availableFileSystems, options.defaultUri);
|
|
216
218
|
this.scopedAuthority = this.getScopedAuthority(options.defaultUri);
|
|
219
|
+
this.scopedPathPrefix = options.defaultUri && this.scopedAuthority ? this.computeScopedPathPrefix(options.defaultUri) : "";
|
|
217
220
|
this.userHome = await this.getUserHome();
|
|
218
221
|
this.trueHome = await this.getUserHome(true);
|
|
219
222
|
this.requiresTrailing = true;
|
|
@@ -245,7 +248,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
245
248
|
}
|
|
246
249
|
if ((this.scheme !== Schemas.file) && !this.fileService.hasProvider(defaultUri)) {
|
|
247
250
|
this.notificationService.info(( localize(
|
|
248
|
-
|
|
251
|
+
15952,
|
|
249
252
|
"File system provider for {0} is not available.",
|
|
250
253
|
(defaultUri.toString())
|
|
251
254
|
)));
|
|
@@ -263,7 +266,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
263
266
|
return ( URI.from({
|
|
264
267
|
scheme: this.scheme,
|
|
265
268
|
authority: this.scopedAuthority,
|
|
266
|
-
path,
|
|
269
|
+
path: this.scopedPathPrefix + path,
|
|
267
270
|
query: hintUri?.query,
|
|
268
271
|
fragment: hintUri?.fragment
|
|
269
272
|
}));
|
|
@@ -298,6 +301,14 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
298
301
|
}
|
|
299
302
|
return undefined;
|
|
300
303
|
}
|
|
304
|
+
computeScopedPathPrefix(uri) {
|
|
305
|
+
const fullPath = uri.path;
|
|
306
|
+
const displayPath = this.labelService.getUriLabel(uri);
|
|
307
|
+
if (displayPath && fullPath.endsWith(displayPath)) {
|
|
308
|
+
return fullPath.substring(0, fullPath.length - displayPath.length);
|
|
309
|
+
}
|
|
310
|
+
return "";
|
|
311
|
+
}
|
|
301
312
|
async getRemoteAgentEnvironment() {
|
|
302
313
|
if (this.remoteAgentEnvironment === undefined) {
|
|
303
314
|
this.remoteAgentEnvironment = await this.remoteAgentService.getEnvironment();
|
|
@@ -309,7 +320,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
309
320
|
return Promise.resolve(( URI.from({
|
|
310
321
|
scheme: this.scheme,
|
|
311
322
|
authority: this.scopedAuthority,
|
|
312
|
-
path: "/"
|
|
323
|
+
path: this.scopedPathPrefix + "/"
|
|
313
324
|
})));
|
|
314
325
|
}
|
|
315
326
|
return trueHome ? this.pathService.userHome({
|
|
@@ -345,12 +356,12 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
345
356
|
this.filePickBox.matchOnLabel = false;
|
|
346
357
|
this.filePickBox.sortByLabel = false;
|
|
347
358
|
this.filePickBox.ignoreFocusOut = true;
|
|
348
|
-
this.filePickBox.placeholder = ( localize(
|
|
359
|
+
this.filePickBox.placeholder = ( localize(15953, "Folder path"));
|
|
349
360
|
this.filePickBox.ok = true;
|
|
350
361
|
this.filePickBox.okLabel = typeof this.options.openLabel === "string" ? this.options.openLabel : this.options.openLabel?.withoutMnemonic;
|
|
351
362
|
if ((this.scheme !== Schemas.file) && this.options && this.options.availableFileSystems && (this.options.availableFileSystems.length > 1) && (this.options.availableFileSystems.indexOf(Schemas.file) > -1)) {
|
|
352
363
|
this.filePickBox.customButton = true;
|
|
353
|
-
this.filePickBox.customLabel = ( localize(
|
|
364
|
+
this.filePickBox.customLabel = ( localize(15954, "Show Local"));
|
|
354
365
|
this.filePickBox.customButtonSecondary = true;
|
|
355
366
|
let action;
|
|
356
367
|
if (isSave) {
|
|
@@ -501,7 +512,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
501
512
|
setButtons() {
|
|
502
513
|
this.filePickBox.buttons = [{
|
|
503
514
|
iconClass: this._showDotFiles ? ThemeIcon.asClassName(Codicon.eye) : ThemeIcon.asClassName(Codicon.eyeClosed),
|
|
504
|
-
tooltip: this._showDotFiles ? ( localize(
|
|
515
|
+
tooltip: this._showDotFiles ? ( localize(15955, "Hide dot files")) : ( localize(15956, "Show dot files")),
|
|
505
516
|
alwaysVisible: true
|
|
506
517
|
}];
|
|
507
518
|
}
|
|
@@ -656,7 +667,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
656
667
|
valueUri = this.tryAddTrailingSeparatorToDirectory(valueUri, stat);
|
|
657
668
|
return (await this.updateItems(valueUri)) ? UpdateResult.UpdatedWithTrailing : UpdateResult.Updated;
|
|
658
669
|
} else if (this.endsWithSlash(value)) {
|
|
659
|
-
this.filePickBox.validationMessage = ( localize(
|
|
670
|
+
this.filePickBox.validationMessage = ( localize(15957, "The path does not exist. Use ~ to go to your home directory."));
|
|
660
671
|
this.badPath = value;
|
|
661
672
|
return UpdateResult.InvalidPath;
|
|
662
673
|
} else {
|
|
@@ -820,7 +831,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
820
831
|
prompt.ignoreFocusOut = true;
|
|
821
832
|
prompt.ok = true;
|
|
822
833
|
prompt.customButton = true;
|
|
823
|
-
prompt.customLabel = ( localize(
|
|
834
|
+
prompt.customLabel = ( localize(15958, "Cancel"));
|
|
824
835
|
prompt.customButtonSecondary = true;
|
|
825
836
|
prompt.value = this.pathFromUri(uri);
|
|
826
837
|
let isResolving = false;
|
|
@@ -849,7 +860,7 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
849
860
|
}
|
|
850
861
|
async validate(uri) {
|
|
851
862
|
if (uri === undefined) {
|
|
852
|
-
this.filePickBox.validationMessage = ( localize(
|
|
863
|
+
this.filePickBox.validationMessage = ( localize(15959, "Please enter a valid path."));
|
|
853
864
|
return Promise.resolve(false);
|
|
854
865
|
}
|
|
855
866
|
let stat;
|
|
@@ -860,47 +871,47 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
860
871
|
} catch (e) {}
|
|
861
872
|
if (this.requiresTrailing) {
|
|
862
873
|
if (stat?.isDirectory) {
|
|
863
|
-
this.filePickBox.validationMessage = ( localize(
|
|
874
|
+
this.filePickBox.validationMessage = ( localize(15960, "The folder already exists. Please use a new file name."));
|
|
864
875
|
return Promise.resolve(false);
|
|
865
876
|
} else if (stat) {
|
|
866
877
|
const message = ( localize(
|
|
867
|
-
|
|
878
|
+
15961,
|
|
868
879
|
"{0} already exists. Are you sure you want to overwrite it?",
|
|
869
880
|
basename(uri)
|
|
870
881
|
));
|
|
871
882
|
return this.yesNoPrompt(uri, message);
|
|
872
883
|
} else if (!(isValidBasename(basename(uri), this.isWindows))) {
|
|
873
|
-
this.filePickBox.validationMessage = ( localize(
|
|
884
|
+
this.filePickBox.validationMessage = ( localize(15962, "Please enter a valid file name."));
|
|
874
885
|
return Promise.resolve(false);
|
|
875
886
|
} else if (!statDirname) {
|
|
876
887
|
const message = ( localize(
|
|
877
|
-
|
|
888
|
+
15963,
|
|
878
889
|
"The folder {0} does not exist. Would you like to create it?",
|
|
879
890
|
basename(dirname(uri))
|
|
880
891
|
));
|
|
881
892
|
return this.yesNoPrompt(uri, message);
|
|
882
893
|
} else if (!statDirname.isDirectory) {
|
|
883
|
-
this.filePickBox.validationMessage = ( localize(
|
|
894
|
+
this.filePickBox.validationMessage = ( localize(15964, "Please enter a path that exists."));
|
|
884
895
|
return Promise.resolve(false);
|
|
885
896
|
} else if (statDirname.readonly) {
|
|
886
897
|
this.filePickBox.validationMessage = ( localize(
|
|
887
|
-
|
|
898
|
+
15965,
|
|
888
899
|
"This folder cannot be used as a save destination. Please choose another folder"
|
|
889
900
|
));
|
|
890
901
|
return Promise.resolve(false);
|
|
891
902
|
}
|
|
892
903
|
} else {
|
|
893
904
|
if (!stat) {
|
|
894
|
-
this.filePickBox.validationMessage = ( localize(
|
|
905
|
+
this.filePickBox.validationMessage = ( localize(15964, "Please enter a path that exists."));
|
|
895
906
|
return Promise.resolve(false);
|
|
896
907
|
} else if (uri.path === "/" && this.isWindows) {
|
|
897
|
-
this.filePickBox.validationMessage = ( localize(
|
|
908
|
+
this.filePickBox.validationMessage = ( localize(15966, "Please start the path with a drive letter."));
|
|
898
909
|
return Promise.resolve(false);
|
|
899
910
|
} else if (stat.isDirectory && !this.allowFolderSelection) {
|
|
900
|
-
this.filePickBox.validationMessage = ( localize(
|
|
911
|
+
this.filePickBox.validationMessage = ( localize(15967, "Please select a file."));
|
|
901
912
|
return Promise.resolve(false);
|
|
902
913
|
} else if (!stat.isDirectory && !this.allowFileSelection) {
|
|
903
|
-
this.filePickBox.validationMessage = ( localize(
|
|
914
|
+
this.filePickBox.validationMessage = ( localize(15968, "Please select a folder."));
|
|
904
915
|
return Promise.resolve(false);
|
|
905
916
|
}
|
|
906
917
|
}
|
|
@@ -960,7 +971,11 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
960
971
|
pathFromUri(uri, endWithSeparator = false) {
|
|
961
972
|
let result;
|
|
962
973
|
if (this.scopedAuthority) {
|
|
963
|
-
|
|
974
|
+
let path = uri.path;
|
|
975
|
+
if (this.scopedPathPrefix && path.startsWith(this.scopedPathPrefix)) {
|
|
976
|
+
path = path.substring(this.scopedPathPrefix.length);
|
|
977
|
+
}
|
|
978
|
+
result = path.replace(/\n/g, "");
|
|
964
979
|
} else {
|
|
965
980
|
result = normalizeDriveLetter(uri.fsPath, this.isWindows).replace(/\n/g, "");
|
|
966
981
|
}
|
|
@@ -999,6 +1014,12 @@ let SimpleFileDialog = class SimpleFileDialog extends Disposable {
|
|
|
999
1014
|
return child.substring(parent.length);
|
|
1000
1015
|
}
|
|
1001
1016
|
async createBackItem(currFolder) {
|
|
1017
|
+
if (this.scopedPathPrefix) {
|
|
1018
|
+
const pathAfterPrefix = currFolder.path.substring(this.scopedPathPrefix.length);
|
|
1019
|
+
if (pathAfterPrefix === "/" || pathAfterPrefix === "") {
|
|
1020
|
+
return undefined;
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1002
1023
|
const compareScheme = this.scopedAuthority ? this.scheme : Schemas.file;
|
|
1003
1024
|
const compareAuthority = this.scopedAuthority ?? "";
|
|
1004
1025
|
const fileRepresentationCurr = this.currentFolder.with({
|