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

render local extensions

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