From b6bfa5046dc8bb0b31e62ba184175f72d52cc2f3 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Wed, 29 Jul 2026 14:24:47 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=8C=93=EA=B8=80=20=EC=B9=B4=EB=93=9C?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=EC=96=B4=20=EC=89=BC=ED=91=9C=20OR=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EC=A7=80=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 검색 입력을 쉼표로 구분하면 각 단어 중 하나라도 포함된 댓글을 표시한다. 공백은 구분자가 아니므로 여러 단어를 이어 쓴 구절 검색은 그대로 동작한다. Co-Authored-By: Claude Opus 5 (1M context) --- src/main/resources/static/js/comment-cards.js | 19 +++++++++++++------ .../resources/templates/comment-cards.html | 3 ++- 2 files changed, 15 insertions(+), 7 deletions(-) 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 @@