From 03a462d72eae3f85ec1a806ad576692adccfe78c Mon Sep 17 00:00:00 2001 From: kim Date: Fri, 25 Sep 2026 20:36:47 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9E=91=EC=97=85=EC=8B=A4=20=EC=B1=84?= =?UTF-8?q?=ED=8C=85=EC=9D=98=20=EB=A7=81=ED=81=AC=EA=B0=80=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EB=B6=88=EA=B0=80=20=ED=8F=89=EB=AC=B8=EC=9D=B4?= =?UTF-8?q?=EB=8D=98=20=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 작업실 채팅 renderMd에 링크 지원이 아예 없었다(굵게·표·리스트만 구현) — 모델이 표에 넣어준 출처 링크([바로가기](https://www.printables.com/model/145094))를 클릭해도 아무 일 없었음(2026-09-25 사용자 실측). - [라벨](URL) → 변환 추가 + 벗겨진 벌주 URL도 자동 링크. 이스케이프 이후 처리라 URL의 &가 &로 href에 들어가는 것까지 확인. Co-Authored-By: Claude Code --- web-ui/js/app/workshop-chat.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/web-ui/js/app/workshop-chat.js b/web-ui/js/app/workshop-chat.js index 941a7f8..6a4af4f 100644 --- a/web-ui/js/app/workshop-chat.js +++ b/web-ui/js/app/workshop-chat.js @@ -52,6 +52,15 @@ function renderMd(text){ s=s.replace(/`([^`]+)`/g,'$1') .replace(/\*\*(.+?)\*\*/g,'$1') .replace(/^#{1,3}\s+(.+)$/gm,'

$1

'); + // 링크 — [라벨](URL) →
. 작업실 채팅엔 링크 지원이 아예 없어 모델이 표에 넣어준 + // 출처 링크(Printables 바로가기 등)가 클릭 불가 평문이었다(2026-09-25 사용자 실측). + // 이스케이프(47행) 이후에 돌리므로 URL 속 & 는 & — href 속성값으로 그대로 맞다. + s=s.replace(/\[([^\]\n]+)\]\((https?:[^)\s]+)\)/g, + '$1'); + // 남는 벌주 URL도 자동 링크. 이미 만든 안은 앞 글자가 "라 안 걸리고, + // 표/리스트 처리 전이라 셀 안에서도 살아난다. + s=s.replace(/(^|[\s>])(https?:\/\/[^\s<)"'\u0000]+)/g,(m,pre,url)=> + pre+''+url+''); // 인라인 수식 $...$ — KaTeX가 실려 있으면 삽입 직후 renderKatexIn이 진짜 수식으로 // 그려주므로 그냥 둔다(09-24: 다른 앱들은 전부 KaTeX 실려 있었는데 작업실만 빠져 있었다). // KaTeX가 없는 환경의 폴백으로만 이 유니코드 치환을 돌린다. 자주 나오는 LaTeX 기호를