feat(projects): 등록 폼·카드 미리보기·README 가져오기 개선
- 등록 모달: 저장소 URL 필드를 제목 아래(설명 위)로 이동 — README 가져오기 흐름 자연화 - URL 미입력 상태로 README 가져오기 시 입력란에 빨간 인라인 안내 표시(토스트 대신) - 피드 카드: 설명 미리보기 2줄 클램프 + flex:1 로 태그·푸터를 카드 하단에 정렬 - fetchReadme: CRLF→LF·줄끝공백·연속빈줄 정리로 불필요한 개행 유입 방지 - mdPlain: 개행을 살려(빈 줄만 제거) 카드 미리보기가 README 줄 구조로 보이게 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -59,19 +59,23 @@ export function renderMarkdown(src) {
|
||||
return md.render(String(src || ""));
|
||||
}
|
||||
|
||||
// 카드 미리보기용 — 마크다운 기호를 걷어낸 순수 텍스트 한 덩어리.
|
||||
// (제목 #, 목록 -, 강조 *_`, 링크 [텍스트](url) → 텍스트, 코드펜스 ``` 제거)
|
||||
// 카드 미리보기용 — 마크다운 기호를 걷어낸 순수 텍스트. 줄바꿈은 살린다.
|
||||
// (제목 #, 목록 -, 강조 *_`, 링크 [텍스트](url) → 텍스트, 코드펜스/이미지/배지 제거)
|
||||
// 개행을 공백으로 뭉개지 않고 유지해, 2줄 클램프 미리보기가 README 앞부분의
|
||||
// 줄 구조 그대로 보이도록 한다(제목 줄 + 첫 설명 줄 등). 빈 줄은 없애 줄 낭비를 막는다.
|
||||
export function mdPlain(src) {
|
||||
return String(src || "")
|
||||
.replace(/```[\s\S]*?```/g, " ") // 코드펜스 블록 제거
|
||||
.replace(/`([^`]*)`/g, "$1") // 인라인 코드
|
||||
.replace(/!\[[^\]]*\]\([^)]*\)/g, " ") // 이미지
|
||||
.replace(/\[([^\]]*)\]\([^)]*\)/g, "$1") // 링크 → 텍스트
|
||||
.replace(/\[([^\]]*)\]\([^)]*\)/g, "$1") // 링크(배지 포함) → 텍스트
|
||||
.replace(/^\s{0,3}#{1,6}\s+/gm, "") // 제목 마커
|
||||
.replace(/^\s{0,3}>\s?/gm, "") // 인용 마커
|
||||
.replace(/^\s*[-*+]\s+/gm, "") // 목록 마커
|
||||
.replace(/[*_~]{1,3}/g, "") // 강조 기호
|
||||
.replace(/\s+/g, " ")
|
||||
.replace(/[ \t]+/g, " ") // 줄 안의 연속 공백만 축소(개행은 유지)
|
||||
.replace(/ *\n */g, "\n") // 줄 앞뒤 공백 제거
|
||||
.replace(/\n{2,}/g, "\n") // 빈 줄 제거 → 내용 줄만 남김
|
||||
.trim();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user