comparison hg-web/src/components/directory-browser.tsx @ 225:70de0c80d093 hg-web

[hg-web] Add side-by-side changeset diffs
author MrJuneJune <me@mrjunejune.com>
date Sun, 02 Aug 2026 14:41:09 -0700
parents 3007ef5fc0ed
children
comparison
equal deleted inserted replaced
224:3007ef5fc0ed 225:70de0c80d093
17 'cs', 'go', 'rs', 'swift', 'kt', 'scala', 'php', 'pl', 'sh', 'bash', 17 'cs', 'go', 'rs', 'swift', 'kt', 'scala', 'php', 'pl', 'sh', 'bash',
18 'zsh', 'fish', 'ps1', 'bat', 'cmd', 'html', 'htm', 'css', 'scss', 18 'zsh', 'fish', 'ps1', 'bat', 'cmd', 'html', 'htm', 'css', 'scss',
19 'sass', 'less', 'json', 'xml', 'yaml', 'yml', 'toml', 'ini', 'cfg', 19 'sass', 'less', 'json', 'xml', 'yaml', 'yml', 'toml', 'ini', 'cfg',
20 'conf', 'md', 'markdown', 'txt', 'log', 'sql', 'graphql', 'vue', 20 'conf', 'md', 'markdown', 'txt', 'log', 'sql', 'graphql', 'vue',
21 'svelte', 'astro', 'prisma', 'dockerfile', 'makefile', 'cmake', 21 'svelte', 'astro', 'prisma', 'dockerfile', 'makefile', 'cmake',
22 'gradle', 'pom', 'lock', 'gitignore', 'env', 'example', 'sample' 22 'gradle', 'pom', 'lock', 'gitignore', 'env', 'example', 'sample',
23 'bzl', 'bazel'
24 ]);
25
26 const BAZEL_FILENAMES = new Set([
27 'build', 'build.bazel', 'module.bazel', 'workspace', 'workspace.bazel'
23 ]); 28 ]);
24 29
25 type StaticPreviewKind = 'image' | 'video' | 'audio' | 'pdf'; 30 type StaticPreviewKind = 'image' | 'video' | 'audio' | 'pdf';
26 31
27 const IMAGE_EXTENSIONS = new Set([ 32 const IMAGE_EXTENSIONS = new Set([
36 function isCodeFile(filename: string): boolean { 41 function isCodeFile(filename: string): boolean {
37 const ext = filename.split('.').pop()?.toLowerCase() || ''; 42 const ext = filename.split('.').pop()?.toLowerCase() || '';
38 const basename = filename.toLowerCase(); 43 const basename = filename.toLowerCase();
39 return CODE_EXTENSIONS.has(ext) || 44 return CODE_EXTENSIONS.has(ext) ||
40 CODE_EXTENSIONS.has(basename) || 45 CODE_EXTENSIONS.has(basename) ||
46 BAZEL_FILENAMES.has(basename) ||
41 basename === 'dockerfile' || 47 basename === 'dockerfile' ||
42 basename === 'makefile' || 48 basename === 'makefile' ||
43 basename.startsWith('.'); 49 basename.startsWith('.');
44 } 50 }
45 51
170 return () => window.removeEventListener('keydown', handleKeyDown); 176 return () => window.removeEventListener('keydown', handleKeyDown);
171 }, [onClose]); 177 }, [onClose]);
172 178
173 const getLanguage = () => { 179 const getLanguage = () => {
174 const ext = filename.split('.').pop()?.toLowerCase() || ''; 180 const ext = filename.split('.').pop()?.toLowerCase() || '';
181 const basename = filename.toLowerCase();
182 if (BAZEL_FILENAMES.has(basename) || ext === 'bzl' || ext === 'bazel') {
183 return 'python';
184 }
175 const langMap: Record<string, string> = { 185 const langMap: Record<string, string> = {
176 js: 'javascript', jsx: 'javascript', ts: 'typescript', tsx: 'typescript', 186 js: 'javascript', jsx: 'javascript', ts: 'typescript', tsx: 'typescript',
177 py: 'python', rb: 'ruby', rs: 'rust', go: 'go', java: 'java', 187 py: 'python', rb: 'ruby', rs: 'rust', go: 'go', java: 'java',
178 c: 'c', cpp: 'cpp', h: 'c', hpp: 'cpp', cs: 'csharp', 188 c: 'c', cpp: 'cpp', h: 'c', hpp: 'cpp', cs: 'csharp',
179 sh: 'bash', bash: 'bash', zsh: 'bash', fish: 'bash', 189 sh: 'bash', bash: 'bash', zsh: 'bash', fish: 'bash',