Mercurial
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', |