extensionsList.ts 3.4 KB
Newer Older
J
Joao Moreno 已提交
1 2 3 4 5 6 7 8 9 10 11
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

'use strict';

import { append, emmet as $, addClass, removeClass } from 'vs/base/browser/dom';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IDelegate } from 'vs/base/browser/ui/list/list';
import { IPagedRenderer } from 'vs/base/browser/ui/list/listPaging';
J
Joao Moreno 已提交
12
import { IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
J
Joao Moreno 已提交
13 14

export interface ITemplateData {
J
Joao Moreno 已提交
15
	extension: IGalleryExtension;
J
Joao Moreno 已提交
16 17 18 19 20 21 22 23
	element: HTMLElement;
	icon: HTMLImageElement;
	name: HTMLElement;
	version: HTMLElement;
	author: HTMLElement;
	description: HTMLElement;
}

J
Joao Moreno 已提交
24
export class Delegate implements IDelegate<IGalleryExtension> {
J
Joao Moreno 已提交
25
	getHeight() { return 62; }
J
Joao Moreno 已提交
26 27 28
	getTemplateId() { return 'extension'; }
}

J
Joao Moreno 已提交
29
export class Renderer implements IPagedRenderer<IGalleryExtension, ITemplateData> {
J
Joao Moreno 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42

	private _templates: ITemplateData[];
	get templates(): ITemplateData[] { return this._templates; }

	constructor(
		@IInstantiationService private instantiationService: IInstantiationService
	) {
		this._templates = [];
	}

	get templateId() { return 'extension'; }

	renderTemplate(root: HTMLElement): ITemplateData {
J
Joao Moreno 已提交
43 44 45 46 47 48 49 50 51
		const element = append(root, $('.extension'));
		const icon = append(element, $<HTMLImageElement>('img.icon'));
		const details = append(element, $('.details'));
		const header = append(details, $('.header'));
		const name = append(header, $('span.name.ellipsis'));
		const version = append(header, $('span.version.ellipsis'));
		const author = append(header, $('span.author.ellipsis'));
		const description = append(details, $('.description.ellipsis'));
		const result = { extension: null, element, icon, name, version, author, description };
J
Joao Moreno 已提交
52 53 54 55 56 57 58 59

		this._templates.push(result);
		return result;
	}

	renderPlaceholder(index: number, data: ITemplateData): void {
		addClass(data.element, 'loading');
		data.extension = null;
J
Joao Moreno 已提交
60
		data.icon.src = '';
J
Joao Moreno 已提交
61 62 63 64 65 66
		data.name.textContent = '';
		data.version.textContent = '';
		data.author.textContent = '';
		data.description.textContent = '';
	}

J
Joao Moreno 已提交
67 68
	renderElement(extension: IGalleryExtension, index: number, data: ITemplateData): void {
		// const local = extension as IExtension;
J
Joao Moreno 已提交
69
		let iconUrl: string;
J
Joao Moreno 已提交
70
		let publisher: string = extension.publisher;
J
Joao Moreno 已提交
71

J
Joao Moreno 已提交
72 73 74 75 76
		// if (extension.path) {
		// 	if (local.icon) {
		// 		iconUrl = `file://${ local.path }/${ local.icon }`;
		// 	}
		// }
J
Joao Moreno 已提交
77

J
Joao Moreno 已提交
78 79 80
		// if (extension.metadata) {
			const version = extension.versions[0];
			publisher = extension.publisherDisplayName || extension.publisher || publisher;
J
Joao Moreno 已提交
81
			iconUrl = iconUrl || version.iconUrl;
J
Joao Moreno 已提交
82
		// }
J
Joao Moreno 已提交
83 84 85

		data.extension = extension;
		removeClass(data.element, 'loading');
J
Joao Moreno 已提交
86
		data.icon.src = iconUrl || require.toUrl('./media/defaultIcon.png');
J
Joao Moreno 已提交
87 88
		data.name.textContent = extension.displayName || extension.name;
		data.version.textContent = ` ${ version.version }`;
J
Joao Moreno 已提交
89
		data.author.textContent = ` ${ publisher }`;
J
Joao Moreno 已提交
90
		data.description.textContent = extension.description;
J
Joao Moreno 已提交
91 92 93 94 95 96 97 98 99 100
	}

	disposeTemplate(data: ITemplateData): void {
		const index = this._templates.indexOf(data);

		if (index > -1) {
			this._templates.splice(index, 1);
		}
	}
}