From db8452d1eac3d98108e3c3229597fb53fcb558e1 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Fri, 26 Jun 2026 15:45:09 +0900 Subject: [PATCH] =?UTF-8?q?feat(channels):=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=EC=9D=84=20=ED=98=84=EC=9E=AC=20=ED=99=9C?= =?UTF-8?q?=EC=84=B1=20=EA=B5=AD=EA=B0=80=20=ED=83=AD=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=ED=95=9C=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 전체 선택/카운트/선택 영상 보기를 보이는 카드 기준으로 동작, 탭 전환 시 숨겨진 카드는 자동 선택 해제. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/main/resources/templates/channels.html | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/resources/templates/channels.html b/src/main/resources/templates/channels.html index c2536b4..48440af 100644 --- a/src/main/resources/templates/channels.html +++ b/src/main/resources/templates/channels.html @@ -198,20 +198,27 @@ } } + // 현재 탭에서 보이는(숨겨지지 않은) 카드의 체크박스만 반환 + function visibleCheckboxes() { + return Array.from(document.querySelectorAll('.channel-checkbox')) + .filter(cb => { const c = cb.closest('.card'); return c && c.style.display !== 'none'; }); + } + function updateSelectedCount() { const checkboxes = document.querySelectorAll('.channel-checkbox'); - const checked = document.querySelectorAll('.channel-checkbox:checked'); - const count = checked.length; - + const visibleBoxes = visibleCheckboxes(); + const checkedVisible = visibleBoxes.filter(cb => cb.checked); + const count = checkedVisible.length; + document.getElementById('selectedCount').innerText = count; document.getElementById('viewSelectedBtn').style.display = count > 0 ? 'flex' : 'none'; - - // Update select all checkbox state + + // 전체 선택 상태는 '보이는 탭' 기준 const selectAll = document.getElementById('selectAllCheckbox'); if (count === 0) { selectAll.checked = false; selectAll.indeterminate = false; - } else if (count === checkboxes.length) { + } else if (count === visibleBoxes.length) { selectAll.checked = true; selectAll.indeterminate = false; } else { @@ -245,8 +252,8 @@ function toggleSelectAll() { const isChecked = document.getElementById('selectAllCheckbox').checked; - const checkboxes = document.querySelectorAll('.channel-checkbox'); - checkboxes.forEach(cb => cb.checked = isChecked); + // 현재 활성 탭에서 보이는 카드만 선택/해제 + visibleCheckboxes().forEach(cb => cb.checked = isChecked); updateSelectedCount(); } @@ -285,9 +292,14 @@ const visible = (code === 'ALL') || (g === code); card.style.display = visible ? '' : 'none'; if (visible) shown++; + else { // 숨겨진 카드는 선택 해제(전체 선택/선택 영상 보기를 현재 탭으로 한정) + const cb = card.querySelector('.channel-checkbox'); + if (cb) cb.checked = false; + } }); const empty = document.getElementById('emptyCountry'); if (empty) empty.style.display = shown === 0 ? 'block' : 'none'; + updateSelectedCount(); } function updateCountryTabCounts() { const counts = { ALL: 0, KR: 0, JP: 0, US: 0, ETC: 0 };