提交 5fa4aad3 编写于 作者: M Matt Bierner

Add ResourceViewerDelegate interface

上级 3a12b7ac
......@@ -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;
......
......@@ -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();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册