Public Source Viewer
비나래아카이브 개발자 포털
실제 서비스 구조를 살펴볼 수 있는 공개용 코드 뷰어입니다. 인증, 세션, 외부 연동, 토큰, 관리자 식별 등 보안상 민감한 구현은 파일 단위 또는 줄 단위로 검열됩니다.
view/hinana/partials/pagination.ejs
공개 가능
1
<%
2
var cp = typeof currentPage !== 'undefined' ? currentPage : 1;
3
var tp = typeof totalPages !== 'undefined' ? totalPages : 1;
4
var s = typeof sort !== 'undefined' ? sort : 'newest';
5
var kw = typeof keyword !== 'undefined' ? keyword : '';
6
var bp = typeof basePath !== 'undefined' ? basePath : '/hinana/index';
7
8
// 페이지 범위 계산: 최대 6개 표시
9
var MAX_PAGES = 6;
10
var half = Math.floor(MAX_PAGES / 2);
11
var startPage = Math.max(1, cp - half);
12
var endPage = startPage + MAX_PAGES - 1;
13
14
if (endPage > tp) {
15
endPage = tp;
16
startPage = Math.max(1, endPage - MAX_PAGES + 1);
17
}
18
19
function pageUrl(page) {
20
var url = bp + '?page=' + page + '&sort=' + s;
21
if (kw) url += '&keyword=' + encodeURIComponent(kw);
22
return url;
23
}
24
%>
25
<% if (tp > 1) { %>
26
<div class="pagination-bar">
27
<% if (cp > 1) { %>
28
<a href="<%= pageUrl(1) %>" class="page-btn" title="처음">«</a>
29
<% } %>
30
31
<% if (startPage > 1) { %>
32
<span class="page-ellipsis">…</span>
33
<% } %>
34
35
<% for (var p = startPage; p <= endPage; p++) { %>
36
<a href="<%= pageUrl(p) %>" class="page-btn <%= p === cp ? 'active' : '' %>"><%= p %></a>
37
<% } %>
38
39
<% if (endPage < tp) { %>
40
<span class="page-ellipsis">…</span>
41
<% } %>
42
43
<% if (cp < tp) { %>
44
<a href="<%= pageUrl(tp) %>" class="page-btn" title="마지막">»</a>
45
<% } %>
46
</div>
47
<% } %>
48