提交 746753fc 编写于 作者: J Joao Moreno

render local extensions

上级 d3c8f765
......@@ -7,14 +7,14 @@
import { TPromise } from 'vs/base/common/winjs.base';
import { EditorInput } from 'vs/workbench/common/editor';
import { IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IExtension, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
export class ExtensionsInput extends EditorInput {
static get ID() { return 'workbench.extensions.input2'; }
get extension(): IGalleryExtension { return this._extension; }
get extension(): IExtension | IGalleryExtension { return this._extension; }
constructor(private _extension: IGalleryExtension) {
constructor(private _extension: IExtension | IGalleryExtension) {
super();
}
......@@ -23,7 +23,14 @@ export class ExtensionsInput extends EditorInput {
}
getName(): string {
return this.extension.displayName;
const local = this.extension as IExtension;
const gallery = this.extension as IGalleryExtension;
if (local.path) {
return local.manifest.displayName || local.manifest.name;
} else {
return gallery.displayName || gallery.name;
}
}
matches(other: any): boolean {
......
......@@ -15,7 +15,7 @@ import { append, emmet as $, addClass, removeClass } from 'vs/base/browser/dom';
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IExtension, IGalleryExtension, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { ExtensionsInput } from '../common/extensionsInput';
import { text as downloadText, IRequestOptions } from 'vs/base/node/request';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
......@@ -59,21 +59,32 @@ export class ExtensionEditor extends BaseEditor {
setInput(input: ExtensionsInput, options: EditorOptions): TPromise<void> {
this.transientDisposables = dispose(this.transientDisposables);
addClass(this.body, 'loading');
this.body.innerHTML = '';
const [version] = input.extension.versions;
const headers = version.downloadHeaders;
const promise = super.setInput(input, options)
.then(() => this.request(version.readmeUrl))
.then(opts => assign(opts, { headers }))
.then(opts => downloadText(opts))
.then(marked.parse)
.then(html => {
removeClass(this.body, 'loading');
this.body.innerHTML = html;
});
let promise = TPromise.as<void>(null);
const extension = input.extension;
const local = extension as IExtension;
const gallery = extension as IGalleryExtension;
if (local.path) {
} else {
const [version] = gallery.versions;
const headers = version.downloadHeaders;
addClass(this.body, 'loading');
promise = super.setInput(input, options)
.then(() => this.request(version.readmeUrl))
.then(opts => assign(opts, { headers }))
.then(opts => downloadText(opts))
.then(marked.parse)
.then(html => {
removeClass(this.body, 'loading');
this.body.innerHTML = html;
});
}
this.transientDisposables.push(toDisposable(() => promise.cancel()));
......
......@@ -9,10 +9,10 @@ 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';
import { IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IExtension, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
export interface ITemplateData {
extension: IGalleryExtension;
extension: IExtension | IGalleryExtension;
element: HTMLElement;
icon: HTMLImageElement;
name: HTMLElement;
......@@ -21,12 +21,12 @@ export interface ITemplateData {
description: HTMLElement;
}
export class Delegate implements IDelegate<IGalleryExtension> {
export class Delegate implements IDelegate<IExtension | IGalleryExtension> {
getHeight() { return 62; }
getTemplateId() { return 'extension'; }
}
export class Renderer implements IPagedRenderer<IGalleryExtension, ITemplateData> {
export class Renderer implements IPagedRenderer<IExtension | IGalleryExtension, ITemplateData> {
private _templates: ITemplateData[];
get templates(): ITemplateData[] { return this._templates; }
......@@ -64,22 +64,42 @@ export class Renderer implements IPagedRenderer<IGalleryExtension, ITemplateData
data.description.textContent = '';
}
renderElement(extension: IGalleryExtension, index: number, data: ITemplateData): void {
// const local = extension as IExtension;
renderElement(extension: IExtension | IGalleryExtension, index: number, data: ITemplateData): void {
const local = extension as IExtension;
const galleryExtension = extension as IGalleryExtension;
if (local.path) {
return this.renderExtension(local, data);
} else {
return this.renderGalleryExtension(galleryExtension, data);
}
}
private renderExtension(extension: IExtension, data: ITemplateData): void {
let iconUrl: string;
let publisher: string = extension.publisher;
// if (extension.path) {
// if (local.icon) {
// iconUrl = `file://${ local.path }/${ local.icon }`;
// }
// }
// if (extension.metadata) {
const version = extension.versions[0];
publisher = extension.publisherDisplayName || extension.publisher || publisher;
iconUrl = iconUrl || version.iconUrl;
// }
let publisher = extension.manifest.publisher;
if (extension.manifest.icon) {
iconUrl = `file://${ extension.path }/${ extension.manifest.icon }`;
}
if (extension.metadata) {
publisher = extension.metadata.publisherDisplayName || publisher;
}
data.extension = extension;
removeClass(data.element, 'loading');
data.icon.src = iconUrl || require.toUrl('./media/defaultIcon.png');
data.name.textContent = extension.manifest.displayName || extension.manifest.name;
data.version.textContent = ` ${ extension.manifest.version }`;
data.author.textContent = ` ${ publisher }`;
data.description.textContent = extension.manifest.description;
}
private renderGalleryExtension(extension: IGalleryExtension, data: ITemplateData): void {
const version = extension.versions[0];
const publisher = extension.publisherDisplayName || extension.publisher;
const iconUrl = version.iconUrl;
data.extension = extension;
removeClass(data.element, 'loading');
......
......@@ -18,7 +18,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { PagedList } from 'vs/base/browser/ui/list/listPaging';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { Delegate, Renderer } from './extensionsList';
import { IExtensionManagementService, IExtensionGalleryService, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IExtensionManagementService, IExtensionGalleryService, IExtension, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { ExtensionsInput } from '../common/extensionsInput';
import { IProgressService } from 'vs/platform/progress/common/progress';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
......@@ -41,7 +41,7 @@ export class ExtensionsViewlet extends Viewlet {
private root: HTMLElement;
private searchBox: HTMLInputElement;
private extensionsBox: HTMLElement;
private list: PagedList<IGalleryExtension>;
private list: PagedList<IExtension | IGalleryExtension>;
constructor(
@ITelemetryService telemetryService: ITelemetryService,
......@@ -112,10 +112,10 @@ export class ExtensionsViewlet extends Viewlet {
}
private doSearch(text: string = ''): TPromise<any> {
// return this.extensionService.getInstalled()
// .then(result => singlePageModel(result))
return this.galleryService.query({ text })
.then(result => new PagedModel(result))
return this.extensionService.getInstalled()
.then(result => singlePageModel(result))
// return this.galleryService.query({ text })
// .then(result => new PagedModel(result))
.then(model => this.list.model = model);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册