From 6b9432ca4de2f08d52fa7f68bc4b14e0bf1e2562 Mon Sep 17 00:00:00 2001 From: projectdx Date: Mon, 29 Dec 2025 20:18:44 +0900 Subject: [PATCH] feat: redesign download queue UI with modern styling and responsive layout --- templates/anime_downloader_ohli24_queue.html | 732 ++++++++++++++----- 1 file changed, 535 insertions(+), 197 deletions(-) diff --git a/templates/anime_downloader_ohli24_queue.html b/templates/anime_downloader_ohli24_queue.html index 768abdf..d2a5799 100644 --- a/templates/anime_downloader_ohli24_queue.html +++ b/templates/anime_downloader_ohli24_queue.html @@ -1,203 +1,541 @@ {% extends "base.html" %} {% block content %} -
- {{ macros.m_button_group([['reset_btn', '초기화'], ['delete_completed_btn', '완료 목록 삭제'], ['go_ffmpeg_btn', 'Go FFMPEG']]) }} - {{ macros.m_row_start('0') }} - {{ macros.m_row_end() }} - {{ macros.m_hr_head_top() }} - {{ macros.m_row_start('0') }} - {{ macros.m_col(1, macros.m_strong('Idx')) }} - {{ macros.m_col(2, macros.m_strong('CreatedTime')) }} - {{ macros.m_col(4, macros.m_strong('Filename')) }} - {{ macros.m_col(3, macros.m_strong('Status')) }} - {{ macros.m_col(2, macros.m_strong('Action')) }} - {{ macros.m_row_end() }} - {{ macros.m_hr_head_bottom() }} -
-
+
+ +
+
+ + 다운로드 큐 + 0 +
+
+ + + +
+
+ + +
+ + + +
- - - - + + /* 헤더 */ + .queue-header { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: 15px; + margin-bottom: 20px; + padding: 15px 20px; + background: linear-gradient(135deg, rgba(30, 41, 59, 0.9) 0%, rgba(15, 23, 42, 0.95) 100%); + border-radius: 12px; + border: 1px solid rgba(148, 163, 184, 0.15); + } + + .header-title { + display: flex; + align-items: center; + gap: 10px; + color: #e2e8f0; + font-size: 18px; + font-weight: 600; + } + + .header-title i { + color: #60a5fa; + } + + .queue-count { + background: linear-gradient(135deg, #3b82f6, #2563eb); + color: white; + padding: 2px 10px; + border-radius: 12px; + font-size: 13px; + font-weight: 600; + } + + .header-buttons { + display: flex; + gap: 8px; + flex-wrap: wrap; + } + + .queue-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 8px 14px; + border: none; + border-radius: 8px; + font-size: 13px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + } + + .queue-btn-danger { + background: linear-gradient(135deg, #ef4444, #dc2626); + color: white; + } + + .queue-btn-danger:hover { + background: linear-gradient(135deg, #dc2626, #b91c1c); + transform: translateY(-1px); + } + + .queue-btn-warning { + background: linear-gradient(135deg, #f59e0b, #d97706); + color: white; + } + + .queue-btn-warning:hover { + background: linear-gradient(135deg, #d97706, #b45309); + transform: translateY(-1px); + } + + .queue-btn-info { + background: linear-gradient(135deg, #0ea5e9, #0284c7); + color: white; + } + + .queue-btn-info:hover { + background: linear-gradient(135deg, #0284c7, #0369a1); + transform: translateY(-1px); + } + + /* 다운로드 목록 */ + .queue-list { + display: flex; + flex-direction: column; + gap: 10px; + } + + /* 다운로드 아이템 카드 */ + .queue-item { + display: flex; + align-items: center; + gap: 15px; + padding: 15px; + background: linear-gradient(135deg, rgba(30, 41, 59, 0.85) 0%, rgba(15, 23, 42, 0.85) 100%); + border-radius: 10px; + border: 1px solid rgba(148, 163, 184, 0.12); + transition: all 0.2s ease; + } + + .queue-item:hover { + border-color: rgba(96, 165, 250, 0.4); + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); + } + + /* 아이템 번호 */ + .item-number { + display: flex; + align-items: center; + justify-content: center; + width: 36px; + min-width: 36px; + height: 36px; + background: linear-gradient(135deg, #4f46e5, #6366f1); + color: white; + font-weight: 600; + font-size: 12px; + border-radius: 8px; + } + + /* 아이템 정보 */ + .item-info { + flex: 1; + min-width: 0; + } + + .item-filename { + color: #fbbf24; + font-weight: 600; + font-size: 15px; + margin-bottom: 4px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + } + + .item-meta { + display: flex; + align-items: center; + gap: 12px; + font-size: 12px; + color: #94a3b8; + } + + .item-time { + display: flex; + align-items: center; + gap: 4px; + } + + /* 진행률 바 */ + .progress-container { + flex: 0 0 350px; + min-width: 200px; + } + + .progress-wrapper { + position: relative; + height: 32px; + background: rgba(0, 0, 0, 0.3); + border-radius: 16px; + overflow: hidden; + } + + .progress-bar { + height: 100%; + border-radius: 12px; + transition: width 0.3s ease; + } + + .progress-bar.status-waiting { + background: linear-gradient(90deg, #94a3b8, #64748b); + } + + .progress-bar.status-downloading { + background: linear-gradient(90deg, #3b82f6, #60a5fa); + } + + .progress-bar.status-completed { + background: linear-gradient(90deg, #22c55e, #4ade80); + } + + .progress-bar.status-failed { + background: linear-gradient(90deg, #ef4444, #f87171); + } + + .progress-label { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + font-size: 13px; + font-weight: 600; + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + } + + /* 액션 버튼 */ + .item-actions { + display: flex; + gap: 6px; + } + + .cancel-btn { + padding: 6px 12px; + background: rgba(239, 68, 68, 0.2); + border: 1px solid rgba(239, 68, 68, 0.4); + color: #f87171; + border-radius: 6px; + font-size: 12px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + } + + .cancel-btn:hover { + background: rgba(239, 68, 68, 0.3); + border-color: #ef4444; + } + + /* 빈 상태 */ + .empty-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 60px 20px; + color: #64748b; + } + + .empty-state i { + font-size: 48px; + margin-bottom: 15px; + opacity: 0.5; + } + + .empty-state p { + font-size: 15px; + margin: 0; + } + + /* 모바일 반응형 */ + @media (max-width: 768px) { + .queue-container { + padding: 10px; + } + + .queue-header { + flex-direction: column; + align-items: stretch; + gap: 12px; + padding: 12px 15px; + } + + .header-title { + justify-content: center; + } + + .header-buttons { + justify-content: center; + } + + .queue-btn { + padding: 6px 10px; + font-size: 12px; + } + + .queue-item { + flex-wrap: wrap; + gap: 10px; + padding: 12px; + } + + .item-number { + width: 30px; + min-width: 30px; + height: 30px; + font-size: 11px; + } + + .item-info { + flex: 1 1 calc(100% - 50px); + order: 1; + } + + .item-filename { + font-size: 13px; + } + + .progress-container { + flex: 1 1 100%; + order: 3; + } + + .item-actions { + order: 2; + } + } + + @media (max-width: 400px) { + .queue-btn span { + display: none; + } + + .queue-btn i { + margin: 0; + } + + .header-title span:not(.queue-count) { + font-size: 15px; + } + } + + + + {% endblock %} \ No newline at end of file