提交 daefb813 编写于 作者: S Sandeep Somavarapu

Remote disable action from viewlet and show it verbose in editor

上级 1abad0e0
......@@ -379,7 +379,7 @@ export class ExtensionEditor extends BaseEditor {
reloadAction.extension = extension;
this.extensionActionBar.clear();
this.extensionActionBar.push([disabledStatusAction, reloadAction, updateAction, enableAction, disableAction, installAction, maliciousStatusAction], { icon: true, label: true });
this.extensionActionBar.push([reloadAction, updateAction, enableAction, disableAction, installAction, maliciousStatusAction, disabledStatusAction], { icon: true, label: true });
this.transientDisposables.push(enableAction, updateAction, reloadAction, disableAction, installAction, maliciousStatusAction, disabledStatusAction);
const ignoreAction = this.instantiationService.createInstance(IgnoreExtensionRecommendationAction);
......
......@@ -572,7 +572,7 @@ export class EnableForWorkspaceAction extends Action implements IExtensionAction
private update(): void {
this.enabled = false;
if (this.extension) {
this.enabled = (this.extension.enablementState === EnablementState.Disabled || this.extension.enablementState === EnablementState.WorkspaceDisabled) && this.extension.local && this.extensionEnablementService.canChangeEnablement(this.extension.local);
this.enabled = this.extension.state === ExtensionState.Installed && (this.extension.enablementState === EnablementState.Disabled || this.extension.enablementState === EnablementState.WorkspaceDisabled) && this.extension.local && this.extensionEnablementService.canChangeEnablement(this.extension.local);
}
}
......@@ -609,7 +609,7 @@ export class EnableGloballyAction extends Action implements IExtensionAction {
private update(): void {
this.enabled = false;
if (this.extension) {
this.enabled = (this.extension.enablementState === EnablementState.Disabled || this.extension.enablementState === EnablementState.WorkspaceDisabled) && this.extension.local && this.extensionEnablementService.canChangeEnablement(this.extension.local);
this.enabled = this.extension.state === ExtensionState.Installed && this.extension.enablementState === EnablementState.Disabled && this.extension.local && this.extensionEnablementService.canChangeEnablement(this.extension.local);
}
}
......@@ -626,13 +626,11 @@ export class EnableGloballyAction extends Action implements IExtensionAction {
export class EnableAction extends Action {
static readonly ID = 'extensions.enable';
private static readonly EnabledClass = 'extension-action prominent enable';
private static readonly EnabledClass = 'extension-action enable';
private static readonly EnabledDropDownClass = 'extension-action dropdown enable';
private static readonly DisabledClass = `${EnableAction.EnabledClass} disabled`;
private disposables: IDisposable[] = [];
private _enableActions: IExtensionAction[];
private _actionItem: DropDownMenuActionItem;
get actionItem(): IActionItem { return this._actionItem; }
......@@ -640,18 +638,16 @@ export class EnableAction extends Action {
get extension(): IExtension { return this._extension; }
set extension(extension: IExtension) { this._extension = extension; this.update(); }
constructor(
@IInstantiationService private instantiationService: IInstantiationService,
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService
) {
super(EnableAction.ID, localize('enableAction', "Enable"), EnableAction.DisabledClass, false);
this._enableActions = [
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [[
instantiationService.createInstance(EnableGloballyAction, EnableGloballyAction.LABEL),
instantiationService.createInstance(EnableForWorkspaceAction, EnableForWorkspaceAction.LABEL)
];
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [this._enableActions], false);
]], false);
this.disposables.push(this._actionItem);
this.disposables.push(this.extensionsWorkbenchService.onChange(extension => {
......@@ -673,18 +669,27 @@ export class EnableAction extends Action {
}
}
if (!this.extension) {
this.enabled = false;
const enabledActions = this._actionItem.getActions().filter(a => a.enabled);
this.enabled = enabledActions.length > 0;
if (this.enabled) {
if (enabledActions.length === 1) {
this.label = enabledActions[0].label;
this.class = EnableAction.EnabledClass;
} else {
this.class = EnableAction.EnabledDropDownClass;
}
} else {
this.class = EnableAction.DisabledClass;
return;
}
this.enabled = this.extension.state === ExtensionState.Installed && this._enableActions.some(e => e.enabled);
this.class = this.enabled ? EnableAction.EnabledClass : EnableAction.DisabledClass;
}
public run(): Promise<any> {
this._actionItem.showMenu();
const enabledActions = this._actionItem.getActions().filter(a => a.enabled);
if (enabledActions.length === 1) {
enabledActions[0].run();
} else {
this._actionItem.showMenu();
}
return Promise.resolve(null);
}
......@@ -776,10 +781,10 @@ export class DisableAction extends Action {
static readonly ID = 'extensions.disable';
private static readonly EnabledClass = 'extension-action disable';
private static readonly EnabledDropDownClass = 'extension-action dropdown enable';
private static readonly DisabledClass = `${DisableAction.EnabledClass} disabled`;
private disposables: IDisposable[] = [];
private _disableActions: IExtensionAction[];
private _actionItem: DropDownMenuActionItem;
get actionItem(): IActionItem { return this._actionItem; }
......@@ -787,17 +792,16 @@ export class DisableAction extends Action {
get extension(): IExtension { return this._extension; }
set extension(extension: IExtension) { this._extension = extension; this.update(); }
constructor(
@IInstantiationService private instantiationService: IInstantiationService,
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
) {
super(DisableAction.ID, localize('disableAction', "Disable"), DisableAction.DisabledClass, false);
this._disableActions = [
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [[
instantiationService.createInstance(DisableGloballyAction, DisableGloballyAction.LABEL),
instantiationService.createInstance(DisableForWorkspaceAction, DisableForWorkspaceAction.LABEL)
];
this._actionItem = this.instantiationService.createInstance(DropDownMenuActionItem, this, [this._disableActions], false);
]], false);
this.disposables.push(this._actionItem);
this.disposables.push(this.extensionsWorkbenchService.onChange(extension => {
......@@ -819,18 +823,27 @@ export class DisableAction extends Action {
}
}
if (!this.extension) {
this.enabled = false;
const enabledActions = this._actionItem.getActions().filter(a => a.enabled);
this.enabled = enabledActions.length > 0;
if (this.enabled) {
if (enabledActions.length === 1) {
this.label = enabledActions[0].label;
this.class = DisableAction.EnabledClass;
} else {
this.class = DisableAction.EnabledDropDownClass;
}
} else {
this.class = DisableAction.DisabledClass;
return;
}
this.enabled = this.extension.state === ExtensionState.Installed && this._disableActions.some(a => a.enabled);
this.class = this.enabled ? DisableAction.EnabledClass : DisableAction.DisabledClass;
}
public run(): Promise<any> {
this._actionItem.showMenu();
const enabledActions = this._actionItem.getActions().filter(a => a.enabled);
if (enabledActions.length === 1) {
enabledActions[0].run();
} else {
this._actionItem.showMenu();
}
return Promise.resolve(null);
}
......@@ -2179,10 +2192,13 @@ export class DisabledStatusLabelAction extends Action {
.then(runningExtensions => {
this.class = `${DisabledStatusLabelAction.Class} hide`;
this.tooltip = '';
if (this.extension && !this.extension.isMalicious && !runningExtensions.some(e => e.id === this.extension.id)) {
if (this.extension.enablementState === EnablementState.Disabled || this.extension.enablementState === EnablementState.WorkspaceDisabled) {
if (this.extension && this.extension.local && !this.extension.isMalicious && !runningExtensions.some(e => e.id === this.extension.id)) {
if (this.extension.enablementState === EnablementState.Disabled) {
this.class = `${DisabledStatusLabelAction.Class}`;
this.label = localize('disabled globally', "Disabled for all Windows.");
} else if (this.extension.enablementState === EnablementState.WorkspaceDisabled) {
this.class = `${DisabledStatusLabelAction.Class}`;
this.tooltip = this.extension.enablementState === EnablementState.Disabled ? localize('disabled globally', "Disabled") : localize('disabled workspace', "Disabled for this Workspace");
this.label = localize('disabled workspace', "Disabled for this Workspace.");
}
}
}));
......
......@@ -14,7 +14,7 @@ import { IPagedRenderer } from 'vs/base/browser/ui/list/listPaging';
import { once, Emitter, Event } from 'vs/base/common/event';
import { domEvent } from 'vs/base/browser/event';
import { IExtension, IExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/common/extensions';
import { InstallAction, UpdateAction, ManageExtensionAction, ReloadAction, extensionButtonProminentBackground, extensionButtonProminentForeground, MaliciousStatusLabelAction, DisabledStatusLabelAction, ExtensionActionItem } from 'vs/workbench/parts/extensions/electron-browser/extensionsActions';
import { InstallAction, UpdateAction, ManageExtensionAction, ReloadAction, extensionButtonProminentBackground, extensionButtonProminentForeground, MaliciousStatusLabelAction, ExtensionActionItem } from 'vs/workbench/parts/extensions/electron-browser/extensionsActions';
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { Label, RatingsWidget, InstallCountWidget } from 'vs/workbench/parts/extensions/browser/extensionsWidgets';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
......@@ -103,14 +103,13 @@ export class Renderer implements IPagedRenderer<IExtension, ITemplateData> {
const ratingsWidget = this.instantiationService.createInstance(RatingsWidget, ratings, { small: true });
const maliciousStatusAction = this.instantiationService.createInstance(MaliciousStatusLabelAction, false);
const disabledStatusAction = this.instantiationService.createInstance(DisabledStatusLabelAction);
const installAction = this.instantiationService.createInstance(InstallAction);
const updateAction = this.instantiationService.createInstance(UpdateAction);
const reloadAction = this.instantiationService.createInstance(ReloadAction, false);
const manageAction = this.instantiationService.createInstance(ManageExtensionAction);
actionbar.push([updateAction, reloadAction, installAction, disabledStatusAction, maliciousStatusAction, manageAction], actionOptions);
const disposables = [versionWidget, installCountWidget, ratingsWidget, maliciousStatusAction, disabledStatusAction, updateAction, installAction, reloadAction, manageAction, actionbar, bookmarkStyler];
actionbar.push([updateAction, reloadAction, installAction, maliciousStatusAction, manageAction], actionOptions);
const disposables = [versionWidget, installCountWidget, ratingsWidget, maliciousStatusAction, updateAction, installAction, reloadAction, manageAction, actionbar, bookmarkStyler];
return {
root, element, icon, name, installCount, ratings, author, description, disposables, actionbar,
......@@ -120,7 +119,6 @@ export class Renderer implements IPagedRenderer<IExtension, ITemplateData> {
installCountWidget.extension = extension;
ratingsWidget.extension = extension;
maliciousStatusAction.extension = extension;
disabledStatusAction.extension = extension;
installAction.extension = extension;
updateAction.extension = extension;
reloadAction.extension = extension;
......
......@@ -9,7 +9,7 @@ import { assign } from 'vs/base/common/objects';
import { chain, Emitter } from 'vs/base/common/event';
import { isPromiseCanceledError } from 'vs/base/common/errors';
import { PagedModel, IPagedModel, IPager, DelayedPagedModel } from 'vs/base/common/paging';
import { SortBy, SortOrder, IQueryOptions, LocalExtensionType, IExtensionTipsService, EnablementState, IExtensionRecommendation } from 'vs/platform/extensionManagement/common/extensionManagement';
import { SortBy, SortOrder, IQueryOptions, LocalExtensionType, IExtensionTipsService, IExtensionRecommendation } from 'vs/platform/extensionManagement/common/extensionManagement';
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
......@@ -286,15 +286,14 @@ export class ExtensionsListView extends ViewletPanel {
if (/@enabled/i.test(value)) {
value = value ? value.replace(/@enabled/g, '').replace(/@sort:(\w+)(-\w*)?/g, '').trim().toLowerCase() : '';
const local = await this.extensionsWorkbenchService.queryLocal();
const local = (await this.extensionsWorkbenchService.queryLocal()).filter(e => e.type === LocalExtensionType.User);
const runningExtensions = await this.extensionService.getExtensions();
let result = local
const result = local
.sort((e1, e2) => e1.displayName.localeCompare(e2.displayName))
.filter(e => e.type === LocalExtensionType.User &&
(e.enablementState === EnablementState.Enabled || e.enablementState === EnablementState.WorkspaceEnabled) &&
(e.name.toLowerCase().indexOf(value) > -1 || e.displayName.toLowerCase().indexOf(value) > -1) &&
(!categories.length || categories.some(category => (e.local.manifest.categories || []).some(c => c.toLowerCase() === category)))
);
.filter(e => runningExtensions.some(r => areSameExtensions(r, e))
&& (e.name.toLowerCase().indexOf(value) > -1 || e.displayName.toLowerCase().indexOf(value) > -1)
&& (!categories.length || categories.some(category => (e.local.manifest.categories || []).some(c => c.toLowerCase() === category))));
return this.getPagedModel(this.sortExtensions(result, options));
}
......
......@@ -20,8 +20,8 @@
.monaco-action-bar .action-item .action-label.extension-action.multiserver.install:after,
.monaco-action-bar .action-item .action-label.extension-action.multiserver.update:after,
.monaco-action-bar .action-item .action-label.extension-action.enable:after,
.monaco-action-bar .action-item .action-label.extension-action.disable:after {
.monaco-action-bar .action-item .action-label.extension-action.enable.dropdown:after,
.monaco-action-bar .action-item .action-label.extension-action.disable.dropdown:after {
content: '▼';
padding-left: 2px;
font-size: 80%;
......@@ -54,6 +54,11 @@
font-weight: normal;
}
.extension-editor>.header>.details>.actions>.monaco-action-bar .action-item .action-label.disable-status:hover,
.extension-editor>.header>.details>.actions>.monaco-action-bar .action-item .action-label.malicious-status:hover {
opacity: 0.9;
}
.extensions-viewlet>.extensions .extension>.details>.footer>.monaco-action-bar .action-item .action-label.extension-action.manage.hide {
display: none;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册