UNPKG

@theia/core

Version:

Theia is a cloud & desktop IDE framework implemented in TypeScript.

93 lines 4.33 kB
"use strict"; // ***************************************************************************** // Copyright (C) 2022 Ericsson 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-only WITH Classpath-exception-2.0 // ***************************************************************************** Object.defineProperty(exports, "__esModule", { value: true }); exports.MenuCommandAdapterRegistryImpl = exports.MenuCommandExecutorImpl = exports.MenuCommandAdapterRegistry = exports.MenuCommandAdapter = exports.MenuCommandExecutor = void 0; const tslib_1 = require("tslib"); const inversify_1 = require("inversify"); const command_1 = require("../command"); const disposable_1 = require("../disposable"); exports.MenuCommandExecutor = Symbol('MenuCommandExecutor'); ; exports.MenuCommandAdapter = Symbol('MenuCommandAdapter'); exports.MenuCommandAdapterRegistry = Symbol('MenuCommandAdapterRegistry'); let MenuCommandExecutorImpl = class MenuCommandExecutorImpl { executeCommand(menuPath, command, ...commandArgs) { return this.delegate(menuPath, command, commandArgs, 'executeCommand'); } isVisible(menuPath, command, ...commandArgs) { return this.delegate(menuPath, command, commandArgs, 'isVisible'); } isEnabled(menuPath, command, ...commandArgs) { return this.delegate(menuPath, command, commandArgs, 'isEnabled'); } isToggled(menuPath, command, ...commandArgs) { return this.delegate(menuPath, command, commandArgs, 'isToggled'); } delegate(menuPath, command, commandArgs, method) { const adapter = this.adapterRegistry.getAdapterFor(menuPath, command, commandArgs); return (adapter ? adapter[method](menuPath, command, ...commandArgs) : this.commandRegistry[method](command, ...commandArgs)); } }; exports.MenuCommandExecutorImpl = MenuCommandExecutorImpl; tslib_1.__decorate([ (0, inversify_1.inject)(exports.MenuCommandAdapterRegistry), tslib_1.__metadata("design:type", Object) ], MenuCommandExecutorImpl.prototype, "adapterRegistry", void 0); tslib_1.__decorate([ (0, inversify_1.inject)(command_1.CommandRegistry), tslib_1.__metadata("design:type", command_1.CommandRegistry) ], MenuCommandExecutorImpl.prototype, "commandRegistry", void 0); exports.MenuCommandExecutorImpl = MenuCommandExecutorImpl = tslib_1.__decorate([ (0, inversify_1.injectable)() ], MenuCommandExecutorImpl); let MenuCommandAdapterRegistryImpl = class MenuCommandAdapterRegistryImpl { constructor() { this.adapters = new Array(); } registerAdapter(adapter) { if (!this.adapters.includes(adapter)) { this.adapters.push(adapter); return disposable_1.Disposable.create(() => { const index = this.adapters.indexOf(adapter); if (index !== -1) { this.adapters.splice(index, 1); } }); } return disposable_1.Disposable.NULL; } getAdapterFor(menuPath, command, ...commandArgs) { let bestAdapter = undefined; let bestScore = 0; let currentScore = 0; for (const adapter of this.adapters) { // Greater than or equal: favor later registrations over earlier. if ((currentScore = adapter.canHandle(menuPath, command, ...commandArgs)) >= bestScore) { bestScore = currentScore; bestAdapter = adapter; } } return bestAdapter; } }; exports.MenuCommandAdapterRegistryImpl = MenuCommandAdapterRegistryImpl; exports.MenuCommandAdapterRegistryImpl = MenuCommandAdapterRegistryImpl = tslib_1.__decorate([ (0, inversify_1.injectable)() ], MenuCommandAdapterRegistryImpl); //# sourceMappingURL=menu-adapter.js.map