공유 덱 카드 복원 기준을 imgSrc로 전환

동일 번호 카드가 많은 시리즈에서도 선택한 카드가 정확히 복원되도록 저장·검증·복원 흐름을 imgSrc 중심으로 정리하고, 이미지 누락 시 공통 뒷면 폴백을 적용한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-25 17:59:46 +09:00
parent 2c4f622408
commit c193975c86
10 changed files with 100 additions and 24 deletions

View File

@@ -247,6 +247,21 @@
let selectedColors = new Set(['All']);
let currentShareCode = null;
let currentDeckName = '';
const CARD_IMAGE_FALLBACK_SRC = '/images/uapr/comingsoon.png';
/**
* 카드 데이터의 실제 렌더링 이미지 URL 생성
* @param {string} currentSeriesKey
* @param {string} cardImgSrc
* @returns {string}
*/
function resolveCardImageSrc(currentSeriesKey, cardImgSrc) {
const fileName = (cardImgSrc || '').split('/').pop();
if (!currentSeriesKey || !fileName) {
return CARD_IMAGE_FALLBACK_SRC;
}
return `/images/${currentSeriesKey}/${fileName}`;
}
const getEl = () => ({
searchQuery: document.getElementById('searchQuery'),
@@ -408,13 +423,12 @@
cardContainer.className = 'cardContainer group flex flex-col p-2 bg-white rounded-lg border border-slate-200 shadow-sm hover:border-blue-300 transition-colors';
cardContainer.setAttribute('data-imgsrc', card.imgSrc);
const fileName = card.imgSrc.split('/').pop();
const imgSrc = `images/${seriesKey}/${fileName}`;
const imgSrc = resolveCardImageSrc(seriesKey, card.imgSrc);
cardContainer.innerHTML = `
<div class="card_image cursor-pointer relative w-full mb-2 rounded overflow-hidden bg-slate-50" style="aspect-ratio: 2/3;">
<img src="${imgSrc}" class="absolute inset-0 w-full h-full object-contain transition-transform"
onerror="console.error('이미지 로드 실패:', '${card.Number}', '${imgSrc}'); this.src='/images/uapr/comingsoon.png'; this.onerror=null;">
onerror="this.src='${CARD_IMAGE_FALLBACK_SRC}'; this.onerror=null;">
</div>
<div class="flex justify-between items-center mb-1.5 px-0.5">
@@ -737,7 +751,11 @@
function showOverlay(card, index, list) {
const overlay = document.getElementById('imageOverlay');
const img = overlay.querySelector('img');
img.src = `images/${seriesKey}/${card.imgSrc.split('/').pop()}`;
img.src = resolveCardImageSrc(seriesKey, card.imgSrc);
img.onerror = () => {
img.onerror = null;
img.src = CARD_IMAGE_FALLBACK_SRC;
};
overlay.style.display = 'flex';
overlay.onclick = (e) => {
if (e.target === overlay) overlay.style.display = 'none';