From 4e6bb497880a35ade6454fae100011f53673ce53 Mon Sep 17 00:00:00 2001 From: Jordan Welch Date: Mon, 18 Sep 2023 18:41:51 -0500 Subject: [PATCH] Update FileListRenderer to class --- src/__tests__/file-list-renderer-tests.ts | 9 ++-- src/diff2html.ts | 4 +- src/file-list-renderer.ts | 56 +++++++++++++---------- 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/__tests__/file-list-renderer-tests.ts b/src/__tests__/file-list-renderer-tests.ts index 114b069..4d16b62 100644 --- a/src/__tests__/file-list-renderer-tests.ts +++ b/src/__tests__/file-list-renderer-tests.ts @@ -1,4 +1,4 @@ -import { render } from '../file-list-renderer'; +import { FileListRenderer } from '../file-list-renderer'; import HoganJsUtils from '../hoganjs-utils'; describe('FileListRenderer', () => { @@ -10,6 +10,7 @@ describe('FileListRenderer', () => { 'file-summary-line': '{{oldName}}, {{newName}}, {{fileName}}', }, }); + const fileListRenderer = new FileListRenderer(hoganUtils); const files = [ { isCombined: false, @@ -55,7 +56,7 @@ describe('FileListRenderer', () => { }, ]; - const fileHtml = render(files, hoganUtils); + const fileHtml = fileListRenderer.render(files); expect(fileHtml).toMatchInlineSnapshot(` "my/file/name.js, my/file/name.js, my/file/name.js @@ -67,6 +68,8 @@ describe('FileListRenderer', () => { it('should work for all kinds of files', () => { const hoganUtils = new HoganJsUtils({}); + const fileListRenderer = new FileListRenderer(hoganUtils); + const files = [ { isCombined: false, @@ -111,7 +114,7 @@ describe('FileListRenderer', () => { isDeleted: true, }, ]; - const fileHtml = render(files, hoganUtils); + const fileHtml = fileListRenderer.render(files); expect(fileHtml).toMatchInlineSnapshot(` "
diff --git a/src/diff2html.ts b/src/diff2html.ts index 5daed0e..8da24c7 100644 --- a/src/diff2html.ts +++ b/src/diff2html.ts @@ -1,5 +1,5 @@ import * as DiffParser from './diff-parser'; -import * as fileListPrinter from './file-list-renderer'; +import { FileListRenderer } from './file-list-renderer'; import LineByLineRenderer, { LineByLineRendererConfig, defaultLineByLineRendererConfig } from './line-by-line-renderer'; import SideBySideRenderer, { SideBySideRendererConfig, defaultSideBySideRendererConfig } from './side-by-side-renderer'; import { DiffFile, OutputFormatType } from './types'; @@ -32,7 +32,7 @@ export function html(diffInput: string | DiffFile[], configuration: Diff2HtmlCon const hoganUtils = new HoganJsUtils(config); - const fileList = config.drawFileList ? fileListPrinter.render(diffJson, hoganUtils) : ''; + const fileList = config.drawFileList ? new FileListRenderer(hoganUtils).render(diffJson) : ''; const diffOutput = config.outputFormat === 'side-by-side' diff --git a/src/file-list-renderer.ts b/src/file-list-renderer.ts index 90836c4..b560b28 100644 --- a/src/file-list-renderer.ts +++ b/src/file-list-renderer.ts @@ -5,29 +5,37 @@ import { DiffFile } from './types'; const baseTemplatesPath = 'file-summary'; const iconsBaseTemplatesPath = 'icon'; -export function render(diffFiles: DiffFile[], hoganUtils: HoganJsUtils): string { - const files = diffFiles - .map(file => - hoganUtils.render( - baseTemplatesPath, - 'line', - { - fileHtmlId: renderUtils.getHtmlId(file), - oldName: file.oldName, - newName: file.newName, - fileName: renderUtils.filenameDiff(file), - deletedLines: '-' + file.deletedLines, - addedLines: '+' + file.addedLines, - }, - { - fileIcon: hoganUtils.template(iconsBaseTemplatesPath, renderUtils.getFileIcon(file)), - }, - ), - ) - .join('\n'); +export class FileListRenderer { + private readonly hoganUtils: HoganJsUtils; - return hoganUtils.render(baseTemplatesPath, 'wrapper', { - filesNumber: diffFiles.length, - files: files, - }); + constructor(hoganUtils: HoganJsUtils) { + this.hoganUtils = hoganUtils; + } + + render(diffFiles: DiffFile[]): string { + const files = diffFiles + .map(file => + this.hoganUtils.render( + baseTemplatesPath, + 'line', + { + fileHtmlId: renderUtils.getHtmlId(file), + oldName: file.oldName, + newName: file.newName, + fileName: renderUtils.filenameDiff(file), + deletedLines: '-' + file.deletedLines, + addedLines: '+' + file.addedLines, + }, + { + fileIcon: this.hoganUtils.template(iconsBaseTemplatesPath, renderUtils.getFileIcon(file)), + }, + ), + ) + .join('\n'); + + return this.hoganUtils.render(baseTemplatesPath, 'wrapper', { + filesNumber: diffFiles.length, + files: files, + }); + } }