提交 690d49be 编写于 作者: S Sandeep Somavarapu

Fix #44601

上级 61bcfcea
......@@ -1714,6 +1714,45 @@ export class MaliciousStatusLabelAction extends Action {
}
}
export class DisabledStatusLabelAction extends Action {
private static readonly Class = 'disable-status';
private _extension: IExtension;
get extension(): IExtension { return this._extension; }
set extension(extension: IExtension) { this._extension = extension; this.update(); }
private disposables: IDisposable[] = [];
private throttler: Throttler = new Throttler();
constructor(
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
@IExtensionService private extensionService: IExtensionService
) {
super('extensions.install', localize('disabled', "Disabled"), `${DisabledStatusLabelAction.Class} hide`, false);
this.disposables.push(this.extensionsWorkbenchService.onChange(() => this.update()));
this.update();
}
private update(): void {
this.throttler.queue(() => this.extensionService.getExtensions()
.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) {
this.class = `${DisabledStatusLabelAction.Class}`;
this.tooltip = this.extension.enablementState === EnablementState.Disabled ? localize('disabled globally', "Disabled") : localize('disabled workspace', "Disabled for this Workspace");
}
}
}));
}
run(): TPromise<any> {
return TPromise.as(null);
}
}
export class DisableAllAction extends Action {
static readonly ID = 'workbench.extensions.action.disableAll';
......
......@@ -15,7 +15,7 @@ import { IPagedRenderer } from 'vs/base/browser/ui/list/listPaging';
import { once } 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 } from 'vs/workbench/parts/extensions/browser/extensionsActions';
import { InstallAction, UpdateAction, ManageExtensionAction, ReloadAction, extensionButtonProminentBackground, extensionButtonProminentForeground, MaliciousStatusLabelAction, DisabledStatusLabelAction } from 'vs/workbench/parts/extensions/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';
......@@ -97,13 +97,14 @@ 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);
const manageAction = this.instantiationService.createInstance(ManageExtensionAction);
actionbar.push([reloadAction, updateAction, installAction, maliciousStatusAction, manageAction], actionOptions);
const disposables = [versionWidget, installCountWidget, ratingsWidget, maliciousStatusAction, updateAction, reloadAction, manageAction, actionbar, bookmarkStyler];
actionbar.push([updateAction, reloadAction, installAction, disabledStatusAction, maliciousStatusAction, manageAction], actionOptions);
const disposables = [versionWidget, installCountWidget, ratingsWidget, maliciousStatusAction, disabledStatusAction, updateAction, reloadAction, manageAction, actionbar, bookmarkStyler];
return {
root, element, icon, name, installCount, ratings, author, description, disposables,
......@@ -113,6 +114,7 @@ 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;
......
......@@ -30,10 +30,12 @@
.monaco-action-bar .action-item.disabled .action-label.extension-action.enable,
.monaco-action-bar .action-item.disabled .action-label.extension-action.disable,
.monaco-action-bar .action-item.disabled .action-label.extension-action.reload,
.monaco-action-bar .action-item.disabled .action-label.disable-status.hide,
.monaco-action-bar .action-item.disabled .action-label.malicious-status.not-malicious {
display: none;
}
.monaco-action-bar .action-item .action-label.disable-status,
.monaco-action-bar .action-item .action-label.malicious-status {
border-radius: 4px;
color: inherit;
......@@ -44,6 +46,7 @@
line-height: initial;
}
.extension-editor>.header>.details>.actions>.monaco-action-bar .action-item .action-label.disable-status,
.extension-editor>.header>.details>.actions>.monaco-action-bar .action-item .action-label.malicious-status {
font-weight: normal;
}
......
......@@ -32,7 +32,7 @@ import { Renderer, DataSource, Controller } from 'vs/workbench/parts/extensions/
import { RatingsWidget, InstallCountWidget } from 'vs/workbench/parts/extensions/browser/extensionsWidgets';
import { EditorOptions } from 'vs/workbench/common/editor';
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
import { CombinedInstallAction, UpdateAction, EnableAction, DisableAction, ReloadAction, MaliciousStatusLabelAction } from 'vs/workbench/parts/extensions/browser/extensionsActions';
import { CombinedInstallAction, UpdateAction, EnableAction, DisableAction, ReloadAction, MaliciousStatusLabelAction, DisabledStatusLabelAction } from 'vs/workbench/parts/extensions/browser/extensionsActions';
import { Webview } from 'vs/workbench/parts/html/electron-browser/webview';
import { KeybindingIO } from 'vs/workbench/services/keybinding/common/keybindingIO';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
......@@ -354,6 +354,7 @@ export class ExtensionEditor extends BaseEditor {
this.transientDisposables.push(ratings);
const maliciousStatusAction = this.instantiationService.createInstance(MaliciousStatusLabelAction, true);
const disabledStatusAction = this.instantiationService.createInstance(DisabledStatusLabelAction);
const installAction = this.instantiationService.createInstance(CombinedInstallAction);
const updateAction = this.instantiationService.createInstance(UpdateAction);
const enableAction = this.instantiationService.createInstance(EnableAction);
......@@ -362,14 +363,15 @@ export class ExtensionEditor extends BaseEditor {
installAction.extension = extension;
maliciousStatusAction.extension = extension;
disabledStatusAction.extension = extension;
updateAction.extension = extension;
enableAction.extension = extension;
disableAction.extension = extension;
reloadAction.extension = extension;
this.extensionActionBar.clear();
this.extensionActionBar.push([reloadAction, updateAction, enableAction, disableAction, installAction, maliciousStatusAction], { icon: true, label: true });
this.transientDisposables.push(enableAction, updateAction, reloadAction, disableAction, installAction, maliciousStatusAction);
this.extensionActionBar.push([disabledStatusAction, reloadAction, updateAction, enableAction, disableAction, installAction, maliciousStatusAction], { icon: true, label: true });
this.transientDisposables.push(enableAction, updateAction, reloadAction, disableAction, installAction, maliciousStatusAction, disabledStatusAction);
this.content.innerHTML = ''; // Clear content before setting navbar actions.
......
......@@ -191,10 +191,14 @@
opacity: 0.9;
}
.extensions-viewlet > .extensions .extension.disabled > .icon,
.extensions-viewlet > .extensions .extension.disabled > .details > .header-container,
.extensions-viewlet > .extensions .extension.disabled > .details > .description
.extensions-viewlet > .extensions .extension.disabled > .details > .footer > .author {
.vs .extensions-viewlet > .extensions .extension.disabled > .icon,
.vs-dark .extensions-viewlet > .extensions .extension.disabled > .icon,
.vs .extensions-viewlet > .extensions .extension.disabled > .details > .header-container,
.vs-dark .extensions-viewlet > .extensions .extension.disabled > .details > .header-container,
.vs .extensions-viewlet > .extensions .extension.disabled > .details > .description,
.vs-dark .extensions-viewlet > .extensions .extension.disabled > .details > .description,
.vs .extensions-viewlet > .extensions .extension.disabled > .details > .footer > .author,
.vs-dark .extensions-viewlet > .extensions .extension.disabled > .details > .footer > .author {
opacity: 0.5;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册