|
|
@@ -67,16 +67,23 @@ class ProcessTags
|
|
|
|
|
|
async loadPosts(tag, page)
|
|
|
{
|
|
|
+ // 빈/미지정 태그를 '' 로 정규화 (undefined/null 이 "undefined" 문자열로 전송되는 것 방지)
|
|
|
+ const t = (tag || '').trim();
|
|
|
+ page = parseInt(page, 10) || 1;
|
|
|
+
|
|
|
const params = new URLSearchParams({
|
|
|
- name: tag,
|
|
|
+ name: t,
|
|
|
page: page
|
|
|
});
|
|
|
|
|
|
- this.updateQueryString(tag, page);
|
|
|
+ this.updateQueryString(t, page);
|
|
|
|
|
|
- const nav = this.findLinkByTag(tag);
|
|
|
+ const nav = this.findLinkByTag(t);
|
|
|
if (nav) {
|
|
|
this.setActiveTag(nav);
|
|
|
+ } else {
|
|
|
+ // 전체 모드: 활성 태그 표시 해제
|
|
|
+ this.tags.querySelectorAll('.tag-nav-link.active').forEach(link => link.classList.remove('active'));
|
|
|
}
|
|
|
|
|
|
this.posts.innerHTML = ' \
|
|
|
@@ -131,11 +138,9 @@ class ProcessTags
|
|
|
}
|
|
|
|
|
|
if (target.classList.contains('active') && target.classList.contains('tag-nav-link')) {
|
|
|
- this.posts.innerHTML = '<div class="text-center my-4">태그를 선택하면 게시글이 조회됩니다.</div>';
|
|
|
- this.pagination.innerHTML = '';
|
|
|
+ // 활성 태그 재클릭 = 선택 해제 → 태그가 걸린 전체 게시글 조회
|
|
|
target.classList.remove('active');
|
|
|
- this.updateQueryString('', 0);
|
|
|
- return;
|
|
|
+ return this.loadPosts('', 1);
|
|
|
}
|
|
|
|
|
|
let tag = (target.dataset.name || target.textContent || '').trim();
|
|
|
@@ -211,9 +216,10 @@ class ProcessTags
|
|
|
|
|
|
renderPagination(res)
|
|
|
{
|
|
|
- const total = parseInt(res.total || '0', 0) || 0;
|
|
|
+ const total = parseInt(res.total || '0', 10) || 0;
|
|
|
const page = parseInt(res.page || '1', 10) || 1;
|
|
|
- const last = Math.ceil(total / 10);
|
|
|
+ const perPage = parseInt(res.perPage || '10', 10) || 10;
|
|
|
+ const last = Math.ceil(total / perPage);
|
|
|
|
|
|
if (last <= 1) {
|
|
|
return;
|
|
|
@@ -245,23 +251,14 @@ class ProcessTags
|
|
|
this.pagination.innerHTML = html;
|
|
|
}
|
|
|
|
|
|
- initFromUrl()
|
|
|
+ initFromUrl()
|
|
|
{
|
|
|
const tag = this.getTagFromQuery();
|
|
|
- if (!tag) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ const page = this.getPageFromQuery();
|
|
|
|
|
|
+ // 태그가 목록에 존재하면 해당 태그로, 아니면(미선택/없는 태그) 태그 걸린 전체 게시글 조회
|
|
|
const link = this.findLinkByTag(tag);
|
|
|
- if (!link) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 새로고침 시 active 유지
|
|
|
- this.setActiveTag(link);
|
|
|
-
|
|
|
- // 새로고침 시 자동 조회
|
|
|
- this.fetchPosts({ target: link });
|
|
|
+ this.loadPosts(link ? tag : '', page);
|
|
|
}
|
|
|
}
|
|
|
|