From ffe4c776e905d04c4b26b0e6f15ca7b9a5224321 Mon Sep 17 00:00:00 2001 From: hyungi Date: Mon, 15 Jun 2026 15:17:18 +0900 Subject: [PATCH] =?UTF-8?q?Revert=20"feat(viewer):=20md=20=EB=B3=B8?= =?UTF-8?q?=EB=AC=B8=20=EC=99=B8=EB=B6=80=20=EB=A7=81=ED=81=AC=20=EC=83=88?= =?UTF-8?q?=20=ED=83=AD=20+=20rel=20=EB=B3=B4=EC=95=88"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 60f3b25. 병렬 세션이 동일 P0(외부 링크 새 탭+rel)를 feat/memo-to-document 브랜치에 docMarkdown.ts link 렌더러 + ADD_ATTR 방식으로 이미 구현(SSR 적용·memos 번들). 중복 회피 위해 본 $effect 구현(redundant)을 canonical 에서 되돌리고 그쪽에 양보. 분석 산출물/측정 결과는 PKM learning 문서로 기록 보존. Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/src/lib/components/MarkdownDoc.svelte | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/frontend/src/lib/components/MarkdownDoc.svelte b/frontend/src/lib/components/MarkdownDoc.svelte index 47d44a2..be83685 100644 --- a/frontend/src/lib/components/MarkdownDoc.svelte +++ b/frontend/src/lib/components/MarkdownDoc.svelte @@ -160,24 +160,6 @@ ph.dataset.mdImageSwapped = '1'; } }); - - // 외부 http(s) 링크 → 새 탭(target=_blank) + 보안 rel(noopener noreferrer). - // marked 렌더러/DOMPurify 를 건드리지 않고 sanitize 후 라이브 DOM 에 속성을 부여한다 — - // heading anchor 와 동일한 DOM 후처리 패턴(전역 DOMPurify hook 오염·렌더러 API 의존 없이 안전). - // 앵커(#)·상대경로·mailto 등 비-http(s) 링크는 손대지 않는다(SPA 내부 항법 보존). - $effect(() => { - void renderedHtml; - if (!containerRef) return; - const links = containerRef.querySelectorAll('a[href]'); - for (const a of links) { - if (a.dataset.extlinkProcessed === '1') continue; - const href = a.getAttribute('href') ?? ''; - if (!/^https?:\/\//i.test(href)) continue; // 외부 http(s) 만 - a.setAttribute('target', '_blank'); - a.setAttribute('rel', 'noopener noreferrer'); - a.dataset.extlinkProcessed = '1'; - } - });