diff --git a/src/vs/workbench/parts/extensions/common/extensionsInput.ts b/src/vs/workbench/parts/extensions/common/extensionsInput.ts index 2d1bac714c0251cec2c31abe5ad0d43ad3636314..41b7907d2ea872875a96e528b44d71ee3ff5f3f0 100644 --- a/src/vs/workbench/parts/extensions/common/extensionsInput.ts +++ b/src/vs/workbench/parts/extensions/common/extensionsInput.ts @@ -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 { diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts index 7f58a2d3c320a023b31db5e0e7759b98efc4bf15..82199653bc077579585c6978c1ae9ca373ad6f7e 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts @@ -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 { 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(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())); diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsList.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsList.ts index 6f9f7494fb0ba9003a39ded1685e82fdec967818..c039549cd09fe398fbb874892a37e5220dd101b7 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsList.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsList.ts @@ -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 { +export class Delegate implements IDelegate { getHeight() { return 62; } getTemplateId() { return 'extension'; } } -export class Renderer implements IPagedRenderer { +export class Renderer implements IPagedRenderer { private _templates: ITemplateData[]; get templates(): ITemplateData[] { return this._templates; } @@ -64,22 +64,42 @@ export class Renderer implements IPagedRenderer; + private list: PagedList; constructor( @ITelemetryService telemetryService: ITelemetryService, @@ -112,10 +112,10 @@ export class ExtensionsViewlet extends Viewlet { } private doSearch(text: string = ''): TPromise { - // 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); }