sprotty-vscode-webview
Version:
Integration of Sprotty in a VS Code extensions (WebView part)
154 lines • 7.51 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CodeActionContextMenuProvider = exports.PaletteMouseListener = exports.PaletteButton = exports.CodeActionPopupPaletteProvider = void 0;
/********************************************************************************
* Copyright (c) 2020 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
********************************************************************************/
const inversify_1 = require("inversify");
const sprotty_1 = require("sprotty");
const sprotty_protocol_1 = require("sprotty-protocol");
const editing_1 = require("sprotty-vscode-protocol/lib/lsp/editing");
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
const code_action_provider_1 = require("./code-action-provider");
const edit_diagram_locker_1 = require("./edit-diagram-locker");
const traceable_1 = require("./traceable");
/**
* A popup-palette based on code actions.
*/
let CodeActionPopupPaletteProvider = class CodeActionPopupPaletteProvider {
async getPopupModel(action, rootElement) {
const range = (0, traceable_1.getRange)(rootElement);
if (this.editDiagramLocker.allowEdit && range !== undefined) {
const codeActions = await this.codeActionProvider.getCodeActions(range, 'sprotty.create');
if (codeActions) {
const buttons = [];
codeActions.forEach(codeAction => {
if (vscode_languageserver_protocol_1.CodeAction.is(codeAction)) {
buttons.push({
id: codeAction.title,
type: 'button:create',
codeActionKind: codeAction.kind,
range
});
}
});
return {
id: "palette",
type: "palette",
classes: ['sprotty-palette'],
children: buttons,
canvasBounds: action.bounds
};
}
}
return undefined;
}
};
exports.CodeActionPopupPaletteProvider = CodeActionPopupPaletteProvider;
__decorate([
(0, inversify_1.inject)(code_action_provider_1.CodeActionProvider),
__metadata("design:type", code_action_provider_1.CodeActionProvider)
], CodeActionPopupPaletteProvider.prototype, "codeActionProvider", void 0);
__decorate([
(0, inversify_1.inject)(edit_diagram_locker_1.EditDiagramLocker),
__metadata("design:type", edit_diagram_locker_1.EditDiagramLocker)
], CodeActionPopupPaletteProvider.prototype, "editDiagramLocker", void 0);
exports.CodeActionPopupPaletteProvider = CodeActionPopupPaletteProvider = __decorate([
(0, inversify_1.injectable)()
], CodeActionPopupPaletteProvider);
class PaletteButton extends sprotty_1.SButtonImpl {
}
exports.PaletteButton = PaletteButton;
let PaletteMouseListener = class PaletteMouseListener extends sprotty_1.PopupHoverMouseListener {
mouseDown(target, event) {
if (target instanceof PaletteButton) {
return [this.getWorkspaceEditAction(target)];
}
return [];
}
async getWorkspaceEditAction(target) {
const codeActions = await this.codeActionProvider.getCodeActions(target.range, target.codeActionKind);
if (codeActions) {
for (const codeAction of codeActions) {
if (vscode_languageserver_protocol_1.CodeAction.is(codeAction) && codeAction.edit)
return {
kind: editing_1.WorkspaceEditAction.KIND,
workspaceEdit: codeAction.edit
};
}
}
return sprotty_protocol_1.SetPopupModelAction.create(sprotty_1.EMPTY_ROOT);
}
};
exports.PaletteMouseListener = PaletteMouseListener;
__decorate([
(0, inversify_1.inject)(code_action_provider_1.CodeActionProvider),
__metadata("design:type", code_action_provider_1.CodeActionProvider)
], PaletteMouseListener.prototype, "codeActionProvider", void 0);
exports.PaletteMouseListener = PaletteMouseListener = __decorate([
(0, inversify_1.injectable)()
], PaletteMouseListener);
/**
* A command-palette based on code actions.
*/
let CodeActionContextMenuProvider = class CodeActionContextMenuProvider {
async getItems(root, lastMousePosition) {
const items = [];
const range = (0, traceable_1.getRange)(root);
if (this.editDiagramLocker.allowEdit && range !== undefined) {
const codeActions = await this.codeActionProvider.getCodeActions(range, 'sprotty.create');
if (codeActions) {
codeActions.forEach(codeAction => {
if (vscode_languageserver_protocol_1.CodeAction.is(codeAction) && codeAction.edit) {
items.push({
id: codeAction.title,
label: codeAction.title,
group: 'edit',
actions: [
{
kind: editing_1.WorkspaceEditAction.KIND,
workspaceEdit: codeAction.edit
}
]
});
}
});
}
}
return items;
}
};
exports.CodeActionContextMenuProvider = CodeActionContextMenuProvider;
__decorate([
(0, inversify_1.inject)(code_action_provider_1.CodeActionProvider),
__metadata("design:type", code_action_provider_1.CodeActionProvider)
], CodeActionContextMenuProvider.prototype, "codeActionProvider", void 0);
__decorate([
(0, inversify_1.inject)(edit_diagram_locker_1.EditDiagramLocker),
__metadata("design:type", edit_diagram_locker_1.EditDiagramLocker)
], CodeActionContextMenuProvider.prototype, "editDiagramLocker", void 0);
exports.CodeActionContextMenuProvider = CodeActionContextMenuProvider = __decorate([
(0, inversify_1.injectable)()
], CodeActionContextMenuProvider);
//# sourceMappingURL=code-action-popup-palette.js.map