diff --git a/src/vs/workbench/browser/parts/editor/binaryEditor.ts b/src/vs/workbench/browser/parts/editor/binaryEditor.ts index 07f065602c80edaa2eee012b39b0249744c5efcd..8705f04bb0dcc07e166469ab8d45b94411f4eaf1 100644 --- a/src/vs/workbench/browser/parts/editor/binaryEditor.ts +++ b/src/vs/workbench/browser/parts/editor/binaryEditor.ts @@ -92,9 +92,11 @@ export abstract class BaseBinaryResourceEditor extends BaseEditor { this.textFileService, this.binaryContainer, this.scrollbar, - resource => this.handleOpenInternalCallback(input, options), - resource => this.callbacks.openExternal(resource), - meta => this.handleMetadataChanged(meta) + { + openInternalClb: resource => this.handleOpenInternalCallback(input, options), + openExternalClb: resource => this.callbacks.openExternal(resource), + metadataClb: meta => this.handleMetadataChanged(meta) + } ); return undefined; diff --git a/src/vs/workbench/browser/parts/editor/resourceViewer.ts b/src/vs/workbench/browser/parts/editor/resourceViewer.ts index 27023e025b970e5f797e54d227dce0e032bfda4e..1aef5c5c426fcca6a43e265a9e47d65fd2ab5ac8 100644 --- a/src/vs/workbench/browser/parts/editor/resourceViewer.ts +++ b/src/vs/workbench/browser/parts/editor/resourceViewer.ts @@ -62,6 +62,12 @@ export interface ResourceViewerContext extends IDisposable { layout?(dimension: DOM.Dimension): void; } +interface ResourceViewerDelegate { + openInternalClb(uri: URI): void; + openExternalClb(uri: URI): void; + metadataClb(meta: string): void; +} + /** * Helper to actually render the given resource into the provided container. Will adjust scrollbar (if provided) automatically based on loading * progress of the binary resource. @@ -75,9 +81,7 @@ export class ResourceViewer { textFileService: ITextFileService, container: HTMLElement, scrollbar: DomScrollableElement, - openInternalClb: (uri: URI) => void, - openExternalClb: (uri: URI) => void, - metadataClb: (meta: string) => void + delegate: ResourceViewerDelegate ): ResourceViewerContext { // Ensure CSS class @@ -85,17 +89,17 @@ export class ResourceViewer { // Images if (ResourceViewer.isImageResource(descriptor)) { - return ImageView.create(container, descriptor, textFileService, scrollbar, openExternalClb, metadataClb); + return ImageView.create(container, descriptor, textFileService, scrollbar, delegate); } // Large Files if (descriptor.size > ResourceViewer.MAX_OPEN_INTERNAL_SIZE) { - return FileTooLargeFileView.create(container, descriptor, scrollbar, metadataClb); + return FileTooLargeFileView.create(container, descriptor, scrollbar, delegate); } // Seemingly Binary Files else { - return FileSeemsBinaryFileView.create(container, descriptor, scrollbar, openInternalClb, metadataClb); + return FileSeemsBinaryFileView.create(container, descriptor, scrollbar, delegate); } } @@ -116,14 +120,13 @@ class ImageView { descriptor: IResourceDescriptor, textFileService: ITextFileService, scrollbar: DomScrollableElement, - openExternalClb: (uri: URI) => void, - metadataClb: (meta: string) => void + delegate: ResourceViewerDelegate ): ResourceViewerContext { if (ImageView.shouldShowImageInline(descriptor)) { - return InlineImageView.create(container, descriptor, textFileService, scrollbar, metadataClb); + return InlineImageView.create(container, descriptor, textFileService, scrollbar, delegate); } - return LargeImageView.create(container, descriptor, openExternalClb, metadataClb); + return LargeImageView.create(container, descriptor, delegate); } private static shouldShowImageInline(descriptor: IResourceDescriptor): boolean { @@ -150,11 +153,10 @@ class LargeImageView { static create( container: HTMLElement, descriptor: IResourceDescriptor, - openExternalClb: (uri: URI) => void, - metadataClb: (meta: string) => void + delegate: ResourceViewerDelegate ) { const size = BinarySize.formatSize(descriptor.size); - metadataClb(size); + delegate.metadataClb(size); DOM.clearNode(container); @@ -169,7 +171,7 @@ class LargeImageView { link.setAttribute('role', 'button'); link.textContent = nls.localize('resourceOpenExternalButton', "Open image using external program?"); - disposables.push(DOM.addDisposableListener(link, DOM.EventType.CLICK, () => openExternalClb(descriptor.resource))); + disposables.push(DOM.addDisposableListener(link, DOM.EventType.CLICK, () => delegate.openExternalClb(descriptor.resource))); } return combinedDisposable(disposables); @@ -181,10 +183,10 @@ class FileTooLargeFileView { container: HTMLElement, descriptor: IResourceDescriptor, scrollbar: DomScrollableElement, - metadataClb: (meta: string) => void + delegate: ResourceViewerDelegate ) { const size = BinarySize.formatSize(descriptor.size); - metadataClb(size); + delegate.metadataClb(size); DOM.clearNode(container); @@ -203,10 +205,9 @@ class FileSeemsBinaryFileView { container: HTMLElement, descriptor: IResourceDescriptor, scrollbar: DomScrollableElement, - openInternalClb: (uri: URI) => void, - metadataClb: (meta: string) => void + delegate: ResourceViewerDelegate ) { - metadataClb(typeof descriptor.size === 'number' ? BinarySize.formatSize(descriptor.size) : ''); + delegate.metadataClb(typeof descriptor.size === 'number' ? BinarySize.formatSize(descriptor.size) : ''); DOM.clearNode(container); @@ -221,7 +222,7 @@ class FileSeemsBinaryFileView { link.setAttribute('role', 'button'); link.textContent = nls.localize('openAsText', "Do you want to open it anyway?"); - disposables.push(DOM.addDisposableListener(link, DOM.EventType.CLICK, () => openInternalClb(descriptor.resource))); + disposables.push(DOM.addDisposableListener(link, DOM.EventType.CLICK, () => delegate.openInternalClb(descriptor.resource))); } scrollbar.scanDomNode(); @@ -359,7 +360,7 @@ class InlineImageView { descriptor: IResourceDescriptor, textFileService: ITextFileService, scrollbar: DomScrollableElement, - metadataClb: (meta: string) => void + delegate: ResourceViewerDelegate ) { const disposables: IDisposable[] = []; @@ -543,9 +544,9 @@ class InlineImageView { return; } if (typeof descriptor.size === 'number') { - metadataClb(nls.localize('imgMeta', '{0}x{1} {2}', image.naturalWidth, image.naturalHeight, BinarySize.formatSize(descriptor.size))); + delegate.metadataClb(nls.localize('imgMeta', '{0}x{1} {2}', image.naturalWidth, image.naturalHeight, BinarySize.formatSize(descriptor.size))); } else { - metadataClb(nls.localize('imgMetaNoSize', '{0}x{1}', image.naturalWidth, image.naturalHeight)); + delegate.metadataClb(nls.localize('imgMetaNoSize', '{0}x{1}', image.naturalWidth, image.naturalHeight)); } scrollbar.scanDomNode();