Public Source Viewer

비나래아카이브 개발자 포털

실제 서비스 구조를 살펴볼 수 있는 공개용 코드 뷰어입니다. 인증, 세션, 외부 연동, 토큰, 관리자 식별 등 보안상 민감한 구현은 파일 단위 또는 줄 단위로 검열됩니다.

Redacted View
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