extensionsWidgets.ts 1.9 KB
Newer Older
1 2 3 4 5 6 7
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import nls = require('vs/nls');
import Severity from 'vs/base/common/severity';
8
import errors = require('vs/base/common/errors');
9 10 11
import dom = require('vs/base/browser/dom');
import lifecycle = require('vs/base/common/lifecycle');
import statusbar = require('vs/workbench/browser/parts/statusbar/statusbar');
I
isidor 已提交
12
import { IPluginService } from 'vs/platform/plugins/common/plugins';
13
import { IQuickOpenService } from 'vs/workbench/services/quickopen/browser/quickOpenService';
14 15 16 17 18 19 20 21 22

var $ = dom.emmet;

export class ExtensionsStatusbarItem implements statusbar.IStatusbarItem {

	private toDispose: lifecycle.IDisposable[];
	private domNode: HTMLElement;

	constructor(
I
isidor 已提交
23
		@IPluginService pluginService: IPluginService,
24
		@IQuickOpenService private quickOpenService: IQuickOpenService
25 26 27
	) {
		this.toDispose = [];

I
isidor 已提交
28 29
		pluginService.onReady().then(() => {
			const pluginsStatus = pluginService.getPluginsStatus();
30 31 32
			Object.keys(pluginsStatus).forEach(key => {
				const severity = pluginsStatus[key].messages.reduce((maxSeverity, message) => Math.max(maxSeverity, message.type), Severity.Ignore);
				this.domNode.classList.add(Severity[severity].toLowerCase());
33 34 35 36 37
			});
		});
	}

	public render(container: HTMLElement): lifecycle.IDisposable {
38
		this.domNode = dom.append(container, $('a.extensions-statusbar octicon octicon-package'));
39
		this.domNode.title = nls.localize('extensions', "Extensions"),
40
		this.toDispose.push(dom.addDisposableListener(this.domNode, 'click', () => {
41
			this.quickOpenService.show('>extensions: ').done(null, errors.onUnexpectedError);
42 43 44 45 46 47 48
		}));

		return {
			dispose: () => lifecycle.disposeAll(this.toDispose)
		};
	}
}