- 등록 모달: 저장소 URL 필드를 제목 아래(설명 위)로 이동 — README 가져오기 흐름 자연화 - URL 미입력 상태로 README 가져오기 시 입력란에 빨간 인라인 안내 표시(토스트 대신) - 피드 카드: 설명 미리보기 2줄 클램프 + flex:1 로 태그·푸터를 카드 하단에 정렬 - fetchReadme: CRLF→LF·줄끝공백·연속빈줄 정리로 불필요한 개행 유입 방지 - mdPlain: 개행을 살려(빈 줄만 제거) 카드 미리보기가 README 줄 구조로 보이게 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
68 lines
3.8 KiB
Plaintext
68 lines
3.8 KiB
Plaintext
<%
|
|
// 프로젝트 등록/수정 공용 모달. 기본은 '등록'(action=/projects)이고,
|
|
// 상세의 '수정' 버튼을 누르면 modals.js 가 필드/제목/버튼/action 을 수정 모드로 바꿔 연다.
|
|
%>
|
|
<div class="modal-overlay" id="shareModal" hidden>
|
|
<div class="share-modal">
|
|
<div class="share-head">
|
|
<h3 id="shareTitle">새 프로젝트 등록</h3>
|
|
<button type="button" class="modal-close" data-close-share title="닫기"><%- icon("x", { size: 16 }) %></button>
|
|
</div>
|
|
<form method="post" action="/projects">
|
|
<input type="hidden" name="return_to" value="" />
|
|
<div class="share-body">
|
|
<label>
|
|
<span class="share-label">제목 <span class="req">*</span></span>
|
|
<input class="share-input" name="title" required placeholder="예) 방화벽 정책 DSL 변환기" />
|
|
</label>
|
|
<label>
|
|
<span class="share-label">저장소 URL <span class="hint">선택 · 먼저 넣으면 README·언어를 자동으로 가져와요</span></span>
|
|
<input class="share-input mono" name="repo_url" placeholder="https://gitea.bokdev.in/사번/repo" />
|
|
<small class="share-err" id="repoErr" hidden>git URL 을 입력하면 README 를 가져옵니다</small>
|
|
</label>
|
|
<label>
|
|
<span class="share-label share-label-row">
|
|
<span>설명 <span class="hint">Markdown 지원 · 제목·목록·코드·링크</span></span>
|
|
<button type="button" class="readme-btn" id="readmeImport"><%- icon("repo", { size: 12 }) %>저장소 README 가져오기</button>
|
|
</span>
|
|
<textarea class="share-input share-textarea" name="description" rows="5" placeholder="무엇을 하는 프로젝트인가요? ## 예시 - Markdown 문법을 그대로 쓸 수 있어요 - 위 저장소 URL 을 넣고 'README 가져오기' 를 누르면 채워져요"></textarea>
|
|
</label>
|
|
<label>
|
|
<span class="share-label">태그 <span class="hint">쉼표로 구분 · 최대 5개</span></span>
|
|
<input class="share-input" name="tags" placeholder="infra, react, poc" />
|
|
</label>
|
|
<label>
|
|
<span class="share-label">메인 언어 <span class="hint">선택 · 기본은 저장소에서 자동 감지</span></span>
|
|
<select class="share-input" name="lang">
|
|
<option value="">자동 감지</option>
|
|
<option value="Python">Python</option>
|
|
<option value="JavaScript">JavaScript</option>
|
|
<option value="TypeScript">TypeScript</option>
|
|
<option value="Go">Go</option>
|
|
<option value="Java">Java</option>
|
|
<option value="Rust">Rust</option>
|
|
<option value="Shell">Shell</option>
|
|
</select>
|
|
</label>
|
|
<label>
|
|
<span class="share-label">배포 URL <span class="hint">선택 · 없으면 바로가기 숨김</span></span>
|
|
<input class="share-input mono" name="app_url" placeholder="https://myapp.apps.bokdev.in" />
|
|
</label>
|
|
<div>
|
|
<span class="share-label">공개 범위</span>
|
|
<div class="vis-toggle">
|
|
<button type="button" class="vis-opt on-public" data-vis="public"><%- icon("globe", { size: 12 }) %>공개</button>
|
|
<button type="button" class="vis-opt" data-vis="private"><%- icon("lock", { size: 12 }) %>비공개</button>
|
|
</div>
|
|
<input type="hidden" name="is_public" value="1" />
|
|
<div class="share-vishint">피드에 공개되어 동료가 볼 수 있어요</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-foot-actions">
|
|
<button type="button" class="btn" data-close-share>취소</button>
|
|
<button type="submit" class="btn btn-success" id="shareSubmit">등록</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|