UNPKG

sprotty

Version:

A next-gen framework for graphical views

97 lines 4.97 kB
"use strict"; /******************************************************************************** * Copyright (c) 2019 EclipseSource 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 ********************************************************************************/ 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); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DeleteContextMenuItemProvider = exports.ContextMenuProviderRegistry = void 0; const inversify_1 = require("inversify"); const types_1 = require("../../base/types"); const delete_1 = require("../edit/delete"); const model_1 = require("../select/model"); const sprotty_protocol_1 = require("sprotty-protocol"); let ContextMenuProviderRegistry = class ContextMenuProviderRegistry { constructor(menuProviders = []) { this.menuProviders = menuProviders; } getItems(root, lastMousePosition) { const menues = this.menuProviders.map(provider => provider.getItems(root, lastMousePosition)); return Promise.all(menues).then(this.flattenAndRestructure); } flattenAndRestructure(p) { let menuItems = p.reduce((acc, promise) => promise !== undefined ? acc.concat(promise) : acc, []); const menuItemsWithParentId = menuItems.filter(menuItem => menuItem.parentId); for (const menuItem of menuItemsWithParentId) { if (menuItem.parentId) { const fragments = menuItem.parentId.split('.'); let matchingParent = undefined; let nextParents = menuItems; for (const fragment of fragments) { matchingParent = nextParents.find(item => fragment === item.id); if (matchingParent && matchingParent.children) nextParents = matchingParent.children; } if (matchingParent) { if (matchingParent.children) { matchingParent.children.push(menuItem); } else { matchingParent.children = [menuItem]; } menuItems = menuItems.filter(item => item !== menuItem); } } } return menuItems; } }; exports.ContextMenuProviderRegistry = ContextMenuProviderRegistry; exports.ContextMenuProviderRegistry = ContextMenuProviderRegistry = __decorate([ (0, inversify_1.injectable)(), __param(0, (0, inversify_1.multiInject)(types_1.TYPES.IContextMenuItemProvider)), __param(0, (0, inversify_1.optional)()), __metadata("design:paramtypes", [Array]) ], ContextMenuProviderRegistry); let DeleteContextMenuItemProvider = class DeleteContextMenuItemProvider { getItems(root, lastMousePosition) { const selectedElements = Array.from(root.index.all().filter(model_1.isSelected).filter(delete_1.isDeletable)); return Promise.resolve([ { id: 'delete', label: 'Delete', sortString: 'd', group: 'edit', actions: [sprotty_protocol_1.DeleteElementAction.create(selectedElements.map(e => e.id))], isEnabled: () => selectedElements.length > 0 } ]); } }; exports.DeleteContextMenuItemProvider = DeleteContextMenuItemProvider; exports.DeleteContextMenuItemProvider = DeleteContextMenuItemProvider = __decorate([ (0, inversify_1.injectable)() ], DeleteContextMenuItemProvider); //# sourceMappingURL=menu-providers.js.map