diff --git a/js/components/chat-area.js b/js/components/chat-area.js index b9f5421..a23ecc6 100644 --- a/js/components/chat-area.js +++ b/js/components/chat-area.js @@ -11,24 +11,32 @@ let chatAreaEl, messagesContainerEl, emptyStateEl; /** 根据文件名返回合适的图标 */ function getFileIcon(filename) { + const name = filename.toLowerCase(); + if (name === 'dockerfile') return '🐳'; + if (name === 'makefile' || name === 'gnumakefile') return '🔨'; const ext = filename.split('.').pop().toLowerCase(); - const iconMap = { + const map = { py: '🐍', pyw: '🐍', pyi: '🐍', js: '💛', mjs: '💛', cjs: '💛', ts: '🔷', tsx: '⚛️', jsx: '⚛️', java: '☕', go: '🐹', rs: '🦀', rb: '💎', - php: '🐘', sh: '🐚', bash: '🐚', zsh: '🐚', + php: '🐘', swift: '🍎', kt: '🤖', scala: '🔴', + lua: '🌙', pl: '🐪', r: '📐', m: '📐', + cs: '🟪', fs: '🔵', vb: '🔷', + ex: '💧', exs: '💧', erl: '📞', hs: '🟣', + clj: '🟢', lisp: '🟢', + cpp: '⚙️', cc: '⚙️', cxx: '⚙️', hpp: '⚙️', + c: '⚙️', h: '⚙️', + sh: '🐚', bash: '🐚', zsh: '🐚', fish: '🐚', html: '🌐', htm: '🌐', css: '🎨', svg: '🎨', json: '📋', yaml: '📋', yml: '📋', toml: '📋', - xml: '📰', sql: '🗃️', md: '📝', markdown: '📝', - txt: '📄', log: '📜', csv: '📊', tsv: '📊', - cpp: '⚙️', c: '⚙️', h: '⚙️', hpp: '⚙️', - swift: '🍎', kt: '🤖', lua: '🌙', - dockerfile: '🐳', makefile: '🔨', + ini: '📋', cfg: '📋', conf: '📋', + xml: '📰', sql: '🗃️', + md: '📝', markdown: '📝', rst: '📝', txt: '📄', + log: '📜', csv: '📊', tsv: '📊', + diff: '🔀', patch: '🔀', }; - if (filename.toLowerCase() === 'dockerfile') return '🐳'; - if (filename.toLowerCase() === 'makefile') return '🔨'; - return iconMap[ext] || '📄'; + return map[ext] || '📄'; } export function initChatArea() { diff --git a/js/components/input-area.js b/js/components/input-area.js index abbcefd..d462c54 100644 --- a/js/components/input-area.js +++ b/js/components/input-area.js @@ -32,6 +32,36 @@ const TEXT_EXTENSIONS = new Set([ /** 最大文件大小 500KB */ const MAX_FILE_SIZE = 500 * 1024; +/** 根据文件名返回图标 */ +function getFileIcon(filename) { + const name = filename.toLowerCase(); + if (name === 'dockerfile') return '🐳'; + if (name === 'makefile' || name === 'gnumakefile') return '🔨'; + const ext = filename.split('.').pop().toLowerCase(); + const map = { + py: '🐍', pyw: '🐍', pyi: '🐍', + js: '💛', mjs: '💛', cjs: '💛', + ts: '🔷', tsx: '⚛️', jsx: '⚛️', + java: '☕', go: '🐹', rs: '🦀', rb: '💎', + php: '🐘', swift: '🍎', kt: '🤖', scala: '🔴', + lua: '🌙', pl: '🐪', r: '📐', m: '📐', + cs: '🟪', fs: '🔵', vb: '🔷', + ex: '💧', exs: '💧', erl: '📞', hs: '🟣', + clj: '🟢', lisp: '🟢', + cpp: '⚙️', cc: '⚙️', cxx: '⚙️', hpp: '⚙️', + c: '⚙️', h: '⚙️', + sh: '🐚', bash: '🐚', zsh: '🐚', fish: '🐚', + html: '🌐', htm: '🌐', css: '🎨', svg: '🎨', + json: '📋', yaml: '📋', yml: '📋', toml: '📋', + ini: '📋', cfg: '📋', conf: '📋', + xml: '📰', sql: '🗃️', + md: '📝', markdown: '📝', rst: '📝', txt: '📄', + log: '📜', csv: '📊', tsv: '📊', + diff: '🔀', patch: '🔀', + }; + return map[ext] || '📄'; +} + /** 判断是否为文本/代码文件 */ function isTextFile(file) { // 无扩展名的特殊文件名 @@ -182,7 +212,7 @@ function renderFilePreviews() { filePreviewEl.style.display = ''; filePreviewEl.innerHTML = pendingFiles.map((f, i) => `