diff --git a/src/main/resources/static/js/comment-cards.js b/src/main/resources/static/js/comment-cards.js index 3abca24..66d410a 100644 --- a/src/main/resources/static/js/comment-cards.js +++ b/src/main/resources/static/js/comment-cards.js @@ -61,6 +61,11 @@ const raw = ($('ccExclude') && $('ccExclude').value) || ''; return raw.split(/[,\s]+/).map(s => s.trim().toLowerCase()).filter(Boolean); } + // 검색어: 쉼표로 구분하면 OR 검색(하나라도 포함되면 표시). 공백은 구분자가 아님 → 구절 검색 유지. + function getSearchTerms() { + const raw = ($('ccSearch') && $('ccSearch').value) || ''; + return raw.split(',').map(s => s.trim().toLowerCase()).filter(Boolean); + } function excludeComments(list, terms) { if (!terms || !terms.length) return list; return list.filter(c => { @@ -95,12 +100,14 @@ const sort = $('ccSort').value; const minLikes = parseInt($('ccMinLikes').value, 10) || 0; const repliesOnly = $('ccRepliesOnly').checked; - const q = ($('ccSearch').value || '').trim().toLowerCase(); - let list = cards.filter(c => - (c.likeCount || 0) >= minLikes && - (!repliesOnly || (c.replyCount || 0) > 0) && - (!q || toPlainText(c.text).toLowerCase().includes(q)) // 내용에만 매칭 - ); + const terms = getSearchTerms(); + let list = cards.filter(c => { + if ((c.likeCount || 0) < minLikes) return false; + if (repliesOnly && (c.replyCount || 0) <= 0) return false; + if (!terms.length) return true; + const t = toPlainText(c.text).toLowerCase(); // 내용에만 매칭 + return terms.some(term => t.includes(term)); // 쉼표 구분 = OR + }); if (sort === 'likes') list.sort((a, b) => (b.likeCount || 0) - (a.likeCount || 0)); else if (sort === 'replies') list.sort((a, b) => (b.replyCount || 0) - (a.replyCount || 0)); else if (sort === 'latest') list.sort((a, b) => new Date(b.publishedAt) - new Date(a.publishedAt)); diff --git a/src/main/resources/templates/comment-cards.html b/src/main/resources/templates/comment-cards.html index 51fc13a..c273d16 100644 --- a/src/main/resources/templates/comment-cards.html +++ b/src/main/resources/templates/comment-cards.html @@ -138,7 +138,8 @@