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:
Maddy
2019-08-23 11:19:35 -07:00
committed by GitHub
parent 1a39fdae24
commit 9274f223f0
9 changed files with 576 additions and 464 deletions

View File

@@ -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);
}
}

View File

@@ -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
});
}
});
}