(
format: ExportFormat,
source: Uri | undefined,
defaultFileName?: string
)
| 19 | */ |
| 20 | export class ExportDialog { |
| 21 | public async showDialog( |
| 22 | format: ExportFormat, |
| 23 | source: Uri | undefined, |
| 24 | defaultFileName?: string |
| 25 | ): Promise<Uri | undefined> { |
| 26 | // map each export method to a set of file extensions |
| 27 | let fileExtensions: { [name: string]: string[] } = {}; |
| 28 | let extension: string | undefined; |
| 29 | switch (format) { |
| 30 | case ExportFormat.python: |
| 31 | fileExtensions = PythonExtensions; |
| 32 | extension = '.py'; |
| 33 | break; |
| 34 | |
| 35 | case ExportFormat.pdf: |
| 36 | extension = '.pdf'; |
| 37 | fileExtensions = PDFExtensions; |
| 38 | break; |
| 39 | |
| 40 | case ExportFormat.html: |
| 41 | extension = '.html'; |
| 42 | fileExtensions = HTMLExtensions; |
| 43 | break; |
| 44 | |
| 45 | case ExportFormat.ipynb: |
| 46 | extension = '.ipynb'; |
| 47 | const filtersKey = localize.DataScience.exportDialogFilter; |
| 48 | fileExtensions[filtersKey] = ['ipynb']; |
| 49 | break; |
| 50 | |
| 51 | default: |
| 52 | return; |
| 53 | } |
| 54 | |
| 55 | const targetFileName = |
| 56 | defaultFileName || !source |
| 57 | ? defaultFileName || '' |
| 58 | : `${path.basename(source.path, path.extname(source.path))}${extension}`; |
| 59 | |
| 60 | const options: SaveDialogOptions = { |
| 61 | defaultUri: await this.getDefaultUri(source, targetFileName), |
| 62 | saveLabel: localize.DataScience.exportButtonTitle, |
| 63 | filters: fileExtensions |
| 64 | }; |
| 65 | |
| 66 | return window.showSaveDialog(options); |
| 67 | } |
| 68 | |
| 69 | private async getDefaultUri(source: Uri | undefined, targetFileName: string): Promise<Uri | undefined> { |
| 70 | if (source && source.scheme === 'untitled' && isWebExtension()) { |
no test coverage detected