-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[글] 같은 카테고리 글 목록 추가 방안 #18
Comments
[해결 방안] [1안에 대하여] [2안에 대하여] [시나리오]
[티스토리 기본 제공 구조] <div class="another_category another_category_color_gray">
<h4 id="'컴퓨터공학 > 안드로이드 프로그래밍' 카테고리의 다른 글(300)" class="">'<a
href="/category/컴퓨터공학">컴퓨터공학</a> > <a href="/category/컴퓨터공학/안드로이드%20프로그래밍">안드로이드 프로그래밍</a>'
카테고리의 다른 글</h4>
<table>
<tbody>
<tr>
<th>
<a href="/39?category=996542" class="current">[안드로이드][TabLayout] 탭의 클릭, 활성, 눌림 상태마다 배경
바꾸기</a> <span>(0)</span>
</th>
<td>
2021.05.11</td>
</tr>
<tr>
<th>
<a href="/38?category=996542">[안드로이드][Volley] 쿠키가 있는 HTTP 요청 작성하기</a> <span>(0)</span>
</th>
<td>
2021.05.07</td>
</tr>
</tbody>
</table>
</div>
|
[인터페이스 정의 (슈도)]
var decorator = new CategoryPostDecorator('div.another_category');
decorator.firstHeader(width=1, (posts)=>{}};
decorator.secondHeader([widths=1, 1, 1], (posts, i)=>{});
decorator.body((posts, i, j)=>{});
decorator.topView((posts)=>{});
decorator.bottomView((posts)=>{});
var decorator = new CategoryPostDecorator();
decorator.firstHeader(2, (posts)=> {
const categoryString = posts['category'];
const num = posts['data'].length;
const h3 = document.createElement("h3");
h3.textContent = `${categoryString} 관련글 ${num}개`;
return h3;
});
decorator.secondHeader([1, 1], (posts, i)=> {
const titles = ["제목", "작성일"];
const h3 = document.createElement("h3");
h3.textContent = titles[i];
return h3;
});
decorator.body((posts, i, j)=> {
const post = posts.data[i];
if (j == 0) {
const a = document.createElement('a');
a.href = post.link;
a.textContent = post.title;
return a;
}
if (j == 1) {
const h5 = document.createElement('h5');
h5.textContent = post.date;
return h5;
}
});
decorator.topView((posts)=> {
const div = document.createElement('div');
const prev = document.createElement('button');
const next = document.createElement('button');
const currentIndex = posts.currentIndex;
prev.textContent = '최신 글';
if (currentIndex == 0) {
prev.disabled = true;
} else {
prev.onclick = ()=>{ location.href = posts.data[currentIndex - 1].link; }
}
next.textContent = '이전 글';
if (currentIndex == posts.data.length - 1) {
next.disabled = true;
} else {
next.onclick = ()=>{ location.href = posts.data[currentIndex + 1].link; }
}
div.appendChild(prev);
div.appendChild(next);
return div;
});
{
category: String,
category_links: Array<String>,
data: Array<Post>,
currentIndex: Int
}
{
title: String,
link: String,
date: String
} |
[테스트로 AnocatDecorator가 생성한 뷰 형태] <div class="another_category another_category_color_gray">
<div class="top-view">
<div><button disabled="">최신 글</button><button>이전 글</button></div>
</div>
<table>
<thead>
<tr class="first-header">
<th colspan="2">
<h3>컴퓨터공학 > 개인 프로젝트 관련글 2개</h3>
</th>
</tr>
<tr class="second-header">
<th colspan="1">
<h3>제목</h3>
</th>
<th colspan="1">
<h3>작성일</h3>
</th>
</tr>
</thead>
<tbody class="table-body">
<tr>
<th><a href="https://binchoo.tistory.com/41?category=998658">[Github] 깃허브 매일 커밋 잔디밭 제조기 (Grass
Hoppers)</a></th>
<th>
<h5>
2021.05.16</h5>
</th>
</tr>
<tr>
<th><a href="https://binchoo.tistory.com/40?category=998658">[티스토리 스킨] 개발자와 잘 어울리는 티스토리 스킨: Plore</a>
</th>
<th>
<h5>
2021.05.15</h5>
</th>
</tr>
</tbody>
</table>
</div> |
[CSS 셀렉터 정의]
[파일명 변경] |
[레이아웃 개념 추가]
var decorator = AnocatDecorator.useLayout('card-vertical');
// var decorator = AnocatDecorator.useLayout('default');
// var decorator = AnocatDecorator.useLayout('card-horizontal');
decorator.firstHeader(...)
// error; 'card-vertical' 레이아웃을 사용한다고 했으므로 사용자 주입할 수 없도록 막는다.
decorator.secondHeader(...)
// error;
decorator.tableBody(...)
// good!
decorator.bottomView(...)
// good! |
[클라이언트 시나리오 고찰]
var decorator = AnocatDecorator();
decorator.topView(...)
.firstHeader(...)
.secondHeader(...)
.tableBody(...)
.bottomView(...)
.commit();
var decorator = MyAnocatDecorator();
class MyAnocatDecorator {
constructor() {
this.realDecorator = AnocatDecorator().topView(...)
.firstHeader(...)
.secondHeader(...)
.tableBody(...)
.bottomView(...)
.commit();
}
get() = { return this.realDecorator; }
}
var decorator = AnocatDecorator.useLayout('card-vertical');
decorator.tableBody(...).commit(); 배포에 용이하며, 클라이언트 코드가 깔끔하고, 적당히 의존성 주입이 가능한 것은? |
useLayout까지 구현 완료하였다. |
연관: #8
[개선사항]
보통 블로그 글 하단엔 같은 카테고리 내 글 목록들이 전시되곤 한다.
하지만 티스토리가 기본제공하는 카테고리 글 목록 위젯은 너무 레가시하다.
해당 위젯이 어떤 패킷을 주고 받는지 분석하고,
plore
테마에 맞게 뷰를 제공하도록 하자.유저가 이탈하지 않으려면 끊임없는 글 소비를 유도해야 한다. 이 이슈는 그런 측면에서 치명적 이슈이므로 반드시 해결 바란다.
The text was updated successfully, but these errors were encountered: