sprotty-vscode
Version:
Glue code to integrate Sprotty diagrams in VSCode extensions (extension part)
101 lines • 4.3 kB
JavaScript
;
/********************************************************************************
* Copyright (c) 2022 TypeFox and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerLspEditCommands = exports.registerTextEditorSync = exports.registerDefaultCommands = void 0;
const editing_1 = require("sprotty-vscode-protocol/lib/lsp/editing");
const vscode = require("vscode");
/**
* Register default commands for a webview panel manager, editor provider or view provider:
* - Open in Diagram (can be shown in context menu of file explorer and text editor)
* - Fit to screen (active when diagram is open)
* - Center diagram (active when diagram is open)
* - Export as SVG (active when diagram is open)
*/
function registerDefaultCommands(manager, context, options) {
function getURI(commandArgs) {
if (commandArgs.length > 0 && commandArgs[0] instanceof vscode.Uri) {
return commandArgs[0];
}
if (vscode.window.activeTextEditor) {
return vscode.window.activeTextEditor.document.uri;
}
return undefined;
}
context.subscriptions.push(vscode.commands.registerCommand(options.extensionPrefix + '.diagram.open', async (...commandArgs) => {
const uri = getURI(commandArgs);
if (uri) {
manager.openDiagram(uri, { reveal: true });
}
}));
context.subscriptions.push(vscode.commands.registerCommand(options.extensionPrefix + '.diagram.fit', () => {
const activeWebview = manager.findActiveWebview();
if (activeWebview) {
activeWebview.sendAction({
kind: 'fit',
elementIds: [],
animate: true
});
}
}));
context.subscriptions.push(vscode.commands.registerCommand(options.extensionPrefix + '.diagram.center', () => {
const activeWebview = manager.findActiveWebview();
if (activeWebview) {
activeWebview.sendAction({
kind: 'center',
elementIds: [],
animate: true
});
}
}));
context.subscriptions.push(vscode.commands.registerCommand(options.extensionPrefix + '.diagram.export', () => {
const activeWebview = manager.findActiveWebview();
if (activeWebview) {
activeWebview.sendAction({
kind: 'requestExportSvg'
});
}
}));
}
exports.registerDefaultCommands = registerDefaultCommands;
/**
* Register a listener to active text editor switching. After every switch, the diagram view attempts to
* open the text editor's document.
*/
function registerTextEditorSync(manager, context) {
context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(async (editor) => {
if (editor) {
manager.openDiagram(editor.document.uri);
}
}));
}
exports.registerTextEditorSync = registerTextEditorSync;
/**
* Register commands for editing based on the Language Server Protocol:
* - Delete element (using a workspace edit)
*/
function registerLspEditCommands(manager, context, options) {
context.subscriptions.push(vscode.commands.registerCommand(options.extensionPrefix + '.diagram.delete', () => {
const activeWebview = manager.findActiveWebview();
if (activeWebview) {
activeWebview.sendAction({
kind: editing_1.DeleteWithWorkspaceEditAction.KIND
});
}
}));
}
exports.registerLspEditCommands = registerLspEditCommands;
//# sourceMappingURL=default-contributions.js.map