mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Nb/open book without reload (#6635)
* initial commit * fix: added initialize method to fix the previous/next links rendering * added checks * open first markdown/ipynb in the book ans expand the view * added launch book from command pallete, removed the pick folder and save option added launching the first notebook/markdown * moved the open book command pallet action from mssql to notebooks * open as untitled to true * opening markdown files issue fix * removed opening as untitled files * open ipynb files as untitled and changes for previous&next links to work * add books as seperate viewlet * localize double quote issues and renamed treeCollapsibleState * renames and added logic to conditionally show Preview command * moved registerCommands from widget to extension contribution * isEditorUntitled check * async comment updates * formatting issues. * promisfying the async calls * moved existsAsync to top
This commit is contained in:
@@ -100,6 +100,8 @@ class AzdataExtensionBookContributionProvider extends Disposable implements Book
|
||||
this._onContributionsChanged.fire(this);
|
||||
}
|
||||
}, undefined, this._disposables);
|
||||
|
||||
this.registerCommands();
|
||||
}
|
||||
|
||||
private readonly _onContributionsChanged = this._register(new vscode.EventEmitter<this>());
|
||||
@@ -117,8 +119,18 @@ class AzdataExtensionBookContributionProvider extends Disposable implements Book
|
||||
.map(BookContributions.fromExtension)
|
||||
.reduce(BookContributions.merge, []);
|
||||
}
|
||||
|
||||
private registerCommands(): void {
|
||||
this.contributions.map(book => {
|
||||
let bookName: string = path.basename(book.path);
|
||||
vscode.commands.executeCommand('setContext', bookName, true);
|
||||
vscode.commands.registerCommand('books.' + bookName, async (context) => {
|
||||
vscode.commands.executeCommand('bookTreeView.openBook', book.path, true);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export function getBookExtensionContributions(context: vscode.ExtensionContext): BookContributionProvider {
|
||||
return new AzdataExtensionBookContributionProvider(context.extensionPath);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,15 +5,10 @@
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import * as azdata from 'azdata';
|
||||
import * as nls from 'vscode-nls';
|
||||
import * as fs from 'fs-extra';
|
||||
import * as path from 'path';
|
||||
import {
|
||||
BookContributionProvider, BookContribution
|
||||
BookContributionProvider
|
||||
} from './bookExtensions';
|
||||
import * as Utils from '../utils';
|
||||
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
export function registerBooksWidget(bookContributionProvider: BookContributionProvider): void {
|
||||
azdata.ui.registerModelViewProvider('books-widget', async (view) => {
|
||||
@@ -40,7 +35,8 @@ export function registerBooksWidget(bookContributionProvider: BookContributionPr
|
||||
title: contribution.name
|
||||
}).component();
|
||||
tsgbooklink.onDidClick(() => {
|
||||
promptForFolder(contribution);
|
||||
let uri: vscode.Uri = vscode.Uri.file(contribution.path);
|
||||
openBookViewlet(uri);
|
||||
});
|
||||
bookRow.addItem(tsgbooklink, {
|
||||
CSSStyles: {
|
||||
@@ -73,56 +69,6 @@ export function registerBooksWidget(bookContributionProvider: BookContributionPr
|
||||
});
|
||||
}
|
||||
|
||||
async function promptForFolder(bookContribution: BookContribution): Promise<void> {
|
||||
try {
|
||||
const allFilesFilter = localize('allFiles', "All Files");
|
||||
let filter = {};
|
||||
filter[allFilesFilter] = '*';
|
||||
let uris = await vscode.window.showOpenDialog({
|
||||
filters: filter,
|
||||
canSelectFiles: false,
|
||||
canSelectMany: false,
|
||||
canSelectFolders: true,
|
||||
openLabel: localize('labelPickFolder', "Pick Folder")
|
||||
});
|
||||
if (uris && uris.length > 0) {
|
||||
let pickedFolder = uris[0];
|
||||
let destinationUri: vscode.Uri = vscode.Uri.file(path.join(pickedFolder.fsPath, bookContribution.name));
|
||||
await saveBooksToFolder(destinationUri, bookContribution);
|
||||
await promptToReloadWindow(destinationUri);
|
||||
}
|
||||
return;
|
||||
} catch (error) {
|
||||
vscode.window.showErrorMessage(localize('FailedDuringSaveAndPrompt', 'Failed : {0}', Utils.getErrorMessage(error)));
|
||||
}
|
||||
function openBookViewlet(folderUri: vscode.Uri): void {
|
||||
vscode.commands.executeCommand('bookTreeView.openBook', folderUri.fsPath, true);
|
||||
}
|
||||
|
||||
async function saveBooksToFolder(folderUri: vscode.Uri, bookContribution: BookContribution): Promise<void> {
|
||||
// Get book contributions
|
||||
if (bookContribution && folderUri) {
|
||||
//remove folder if exists
|
||||
await fs.removeSync(folderUri.fsPath);
|
||||
//make directory for each contribution book.
|
||||
await fs.mkdirSync(folderUri.fsPath);
|
||||
await fs.copy(bookContribution.path, folderUri.fsPath);
|
||||
}
|
||||
}
|
||||
function promptToReloadWindow(folderUri: vscode.Uri): void {
|
||||
const actionReload = localize('prompt.reloadInstance', "Reload");
|
||||
const actionOpenNew = localize('prompt.openNewInstance', "Open new instance");
|
||||
vscode.window.showInformationMessage(localize('prompt.reloadDescription', "Reload and view the Jupyter Books in the Files view."), actionReload, actionOpenNew)
|
||||
.then(selectedAction => {
|
||||
if (selectedAction === actionReload) {
|
||||
vscode.commands.executeCommand('workbench.action.setWorkspaceAndOpen', {
|
||||
forceNewWindow: false,
|
||||
folderPath: folderUri
|
||||
});
|
||||
}
|
||||
if (selectedAction === actionOpenNew) {
|
||||
vscode.commands.executeCommand('workbench.action.setWorkspaceAndOpen', {
|
||||
forceNewWindow: true,
|
||||
folderPath: folderUri
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user