From c244b0dd51868584e55961a46f615289d7f35b46 Mon Sep 17 00:00:00 2001 From: Jordan Welch Date: Mon, 18 Sep 2023 19:08:01 -0500 Subject: [PATCH] Add ColorSchemeType for file list --- src/__tests__/file-list-renderer-tests.ts | 93 +++++++++++++++++++++ src/file-list-renderer.ts | 15 +++- src/templates/file-summary-wrapper.mustache | 2 +- 3 files changed, 107 insertions(+), 3 deletions(-) diff --git a/src/__tests__/file-list-renderer-tests.ts b/src/__tests__/file-list-renderer-tests.ts index 4d16b62..67e4225 100644 --- a/src/__tests__/file-list-renderer-tests.ts +++ b/src/__tests__/file-list-renderer-tests.ts @@ -1,5 +1,6 @@ import { FileListRenderer } from '../file-list-renderer'; import HoganJsUtils from '../hoganjs-utils'; +import { ColorSchemeType } from '../types'; describe('FileListRenderer', () => { describe('render', () => { @@ -175,5 +176,97 @@ describe('FileListRenderer', () => { " `); }); + + describe('with dark colorScheme', () => { + it('should work for all kinds of files', () => { + const hoganUtils = new HoganJsUtils({}); + const fileListRenderer = new FileListRenderer(hoganUtils, { + colorScheme: ColorSchemeType.DARK, + }); + + const files = [ + { + isCombined: false, + isGitDiff: false, + blocks: [], + addedLines: 12, + deletedLines: 41, + language: 'js', + oldName: 'my/file/name.js', + newName: 'my/file/name.js', + }, + ]; + const fileHtml = fileListRenderer.render(files); + expect(fileHtml).toMatchInlineSnapshot(` + "
+
+ Files changed (1) + hide + show +
+
    +
  1. + + my/file/name.js + + +12 + -41 + + +
  2. +
+
" + `); + }); + }); + + describe('with auto colorScheme', () => { + it('should work for all kinds of files', () => { + const hoganUtils = new HoganJsUtils({}); + const fileListRenderer = new FileListRenderer(hoganUtils, { + colorScheme: ColorSchemeType.AUTO, + }); + + const files = [ + { + isCombined: false, + isGitDiff: false, + blocks: [], + addedLines: 12, + deletedLines: 41, + language: 'js', + oldName: 'my/file/name.js', + newName: 'my/file/name.js', + }, + ]; + const fileHtml = fileListRenderer.render(files); + expect(fileHtml).toMatchInlineSnapshot(` + "
+
+ Files changed (1) + hide + show +
+
    +
  1. + + my/file/name.js + + +12 + -41 + + +
  2. +
+
" + `); + }); + }); }); }); diff --git a/src/file-list-renderer.ts b/src/file-list-renderer.ts index b560b28..b9e7d19 100644 --- a/src/file-list-renderer.ts +++ b/src/file-list-renderer.ts @@ -1,15 +1,25 @@ import * as renderUtils from './render-utils'; import HoganJsUtils from './hoganjs-utils'; -import { DiffFile } from './types'; +import { ColorSchemeType, DiffFile } from './types'; const baseTemplatesPath = 'file-summary'; const iconsBaseTemplatesPath = 'icon'; +export interface FileListRendererConfig { + colorScheme?: ColorSchemeType; +} + +export const defaultFileListRendererConfig = { + colorScheme: ColorSchemeType.LIGHT, +}; + export class FileListRenderer { private readonly hoganUtils: HoganJsUtils; + private readonly config: typeof defaultFileListRendererConfig; - constructor(hoganUtils: HoganJsUtils) { + constructor(hoganUtils: HoganJsUtils, config: FileListRendererConfig = {}) { this.hoganUtils = hoganUtils; + this.config = { ...defaultFileListRendererConfig, ...config }; } render(diffFiles: DiffFile[]): string { @@ -34,6 +44,7 @@ export class FileListRenderer { .join('\n'); return this.hoganUtils.render(baseTemplatesPath, 'wrapper', { + colorScheme: renderUtils.colorSchemeToCss(this.config.colorScheme), filesNumber: diffFiles.length, files: files, }); diff --git a/src/templates/file-summary-wrapper.mustache b/src/templates/file-summary-wrapper.mustache index 126854c..600f4a3 100644 --- a/src/templates/file-summary-wrapper.mustache +++ b/src/templates/file-summary-wrapper.mustache @@ -1,4 +1,4 @@ -
+
Files changed ({{filesNumber}}) hide