117 lines
3.9 KiB
HTML
117 lines
3.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ko">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Photo Renamer</title>
|
|
<link rel="stylesheet" href="style.css" />
|
|
</head>
|
|
<body>
|
|
|
|
<header>
|
|
<h1>Photo Renamer</h1>
|
|
</header>
|
|
|
|
<div class="app-layout">
|
|
|
|
<aside>
|
|
<nav class="sidebar-nav">
|
|
<button class="btn btn-warning" id="btn-open">폴더 열기 (O)</button>
|
|
<button class="btn btn-success" id="btn-rename" disabled>이름 변경 실행 (S)</button>
|
|
</nav>
|
|
<section class="file-explorer">
|
|
<!-- 추후 구현 -->
|
|
</section>
|
|
</aside>
|
|
|
|
<main>
|
|
<nav class="content-nav">
|
|
<div class="sort-group">
|
|
<button class="sort-btn" id="btn-sort-name">이름순</button>
|
|
<button class="sort-btn" id="btn-sort-date">날짜순</button>
|
|
</div>
|
|
<div class="separator"></div>
|
|
<button class="btn btn-info" id="btn-preview-toggle">미리보기</button>
|
|
<div class="separator"></div>
|
|
<button class="btn btn-ghost" id="btn-undo" disabled>↩ 되돌리기</button>
|
|
<button class="btn btn-ghost" id="btn-redo" disabled>↪ 다시하기</button>
|
|
</nav>
|
|
|
|
<form id="format-bar">
|
|
<label for="input-prefix">파일명 포맷</label>
|
|
<input type="text" id="input-prefix" value="photo" placeholder="접두사" />
|
|
<span class="format-sep">_</span>
|
|
<input type="number" id="input-digits" value="4" min="1" max="6" />
|
|
<span class="format-sep">자리 순번</span>
|
|
<span style="color:var(--muted);font-size:12px;">→</span>
|
|
<span id="preview-name">photo_001.jpg</span>
|
|
<span id="sel-count"></span>
|
|
<span id="file-count">0개 파일</span>
|
|
</form>
|
|
|
|
<section id="grid-container">
|
|
<div id="empty-state">
|
|
<div class="icon">🗂️</div>
|
|
<p>폴더를 열어 이미지를 불러오세요<br>
|
|
<span style="font-size:12px;opacity:.6;">JPG · PNG · GIF · BMP · TIFF · WEBP · HEIC</span></p>
|
|
</div>
|
|
<div id="grid" style="display:none;"></div>
|
|
</section>
|
|
</main>
|
|
|
|
</div>
|
|
|
|
<footer>
|
|
<div class="status-dot" id="status-dot"></div>
|
|
<span id="status-text">준비</span>
|
|
<span class="dir-path" id="dir-path" style="margin-left:auto;">폴더를 선택하세요</span>
|
|
</footer>
|
|
|
|
<div id="rubber-band"></div>
|
|
<div id="drag-ghost"></div>
|
|
<div id="thumb-size-hint"></div>
|
|
|
|
<div id="loading">
|
|
<div class="spinner"></div>
|
|
<p id="loading-text">이미지 로딩 중...</p>
|
|
</div>
|
|
|
|
<div id="toast"></div>
|
|
|
|
<div id="move-modal" class="modal-overlay" style="display:none;">
|
|
<div class="modal-box">
|
|
<p class="modal-msg">대상 폴더에 이미 같은 이름의 파일이 존재합니다.<br>새로운 이름으로 파일들을 이동하시겠습니까?</p>
|
|
<div class="modal-fields">
|
|
<label>파일명 포맷<input type="text" id="move-prefix" value="photo" placeholder="접두사" /></label>
|
|
<label>자리 순번 숫자<input type="number" id="move-digits" value="4" min="1" max="6" /></label>
|
|
</div>
|
|
<div class="modal-actions">
|
|
<button id="move-cancel" class="btn btn-ghost">취소</button>
|
|
<button id="move-confirm" class="btn btn-success">실행</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="rename-conflict-modal" class="modal-overlay" style="display:none;">
|
|
<div class="modal-box">
|
|
<p class="modal-msg">변경할 이름의 파일이 이미 존재합니다.</p>
|
|
<ul id="rename-conflict-list" class="modal-conflict-list"></ul>
|
|
<div class="modal-actions">
|
|
<button id="rename-conflict-close" class="btn btn-ghost">닫기</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="move-error-modal" class="modal-overlay" style="display:none;">
|
|
<div class="modal-box">
|
|
<p class="modal-msg">새로운 이름의 파일도 존재합니다.</p>
|
|
<div class="modal-actions">
|
|
<button id="move-error-close" class="btn btn-ghost">닫기</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="module" src="renderer.js"></script>
|
|
</body>
|
|
</html>
|