/
Pagination.java
156 lines (152 loc) · 5.02 KB
/
Pagination.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package dk.netarkivet.harvester.webinterface.servlet;
/**
* Builds a pagination HTML text block using twitter-bootstrap styles.
*
* <div class="pagination pull-right">
* <ul>
* <li class="disabled"><span>Forrige</span></li>
* <li class="active"><span>1</span></li>
* <li><a href="#">2</a></li>
* <li><a href="#">3</a></li>
* <li class="disabled"><span>...</span></li>
* <li><a href="#">8</a></li>
* <li><a href="#">9</a></li>
* <li><a href="#">10</a></li>
* <li><a href="#">Næste</a></li>
* </ul>
* </div>
*/
public class Pagination {
/**
* Calculate the total number of pages.
* @param items total number of items
* @param itemsPerPage items displayed per page
* @return the total number of pages
*/
public static long getPages(long items, long itemsPerPage) {
long pages = (items + itemsPerPage - 1) / itemsPerPage;
if (pages == 0) {
pages = 1;
}
return pages;
}
/**
* Builds a pagination HTML text block.
*
* @param page current page
* @param itemsPerPage items displayed per page
* @param pages total number of pages
* @return HTML text block
*/
public static String getPagination(long page, long itemsPerPage, long pages, boolean bShowAll) {
if (page < 1) {
page = 1;
}
if (pages == 0) {
pages = 1;
}
if (page > pages) {
page = pages;
}
StringBuilder sb = new StringBuilder();
sb.append("<div class=\"pagination pull-right\">\n");
sb.append("<ul>\n");
// Previous
if (page > 1) {
sb.append("<li><a href=\"?page=" + (page - 1) + "&itemsperpage="
+ itemsPerPage + "\">Forrige</a></li>");
} else {
sb.append("<li class=\"disabled\"><span>Forrige</span></li>");
}
// First.
if (page == 1) {
sb.append("<li class=\"active\"><span>" + 1 + "</span></li>");
} else {
sb.append("<li><a href=\"?page=" + 1 + "&itemsperpage="
+ itemsPerPage + "\">" + 1 + "</a></li>");
}
// List.
long tmpPage = page - 3;
if (tmpPage > pages - 7) {
tmpPage = pages - 7;
}
if (tmpPage > 2) {
sb.append("<li class=\"disabled\"><span>...</span></li>");
} else {
tmpPage = 2;
}
int show = 8;
while (show > 1 && tmpPage <= pages) {
if (tmpPage == page) {
sb.append("<li class=\"active\"><span>" + tmpPage
+ "</span></li>");
} else {
sb.append("<li><a href=\"?page=" + tmpPage + "&itemsperpage="
+ itemsPerPage + "\">" + tmpPage + "</a></li>");
}
--show;
tmpPage++;
}
// Last
if (tmpPage <= pages) {
if (tmpPage < pages) {
sb.append("<li class=\"disabled\"><span>...</span></li>");
}
if (tmpPage == page) {
sb.append("<li class=\"active\"><span>" + pages
+ "</span></li>");
} else {
sb.append("<li><a href=\"?page=" + pages + "&itemsperpage="
+ itemsPerPage + "\">" + pages + "</a></li>");
}
}
// Next.
if (page < pages) {
sb.append("<li><a href=\"?page=" + (page + 1) + "&itemsperpage="
+ itemsPerPage + "\">Næste</a></li>");
} else {
sb.append("<li class=\"disabled\"><span>Næste</span></li>");
}
// Items per page.
sb.append("<li>");
String[][] options = new String[][] {{"10", "10"}, {"25", "25"}, {"50", "50"}, {"100", "100"}, {"all", "Vis alle"}};
int selected;
if (bShowAll) {
selected = options.length - 1;
} else {
switch ((int)itemsPerPage) {
case 10:
selected = 0;
break;
default:
case 25:
selected = 1;
break;
case 50:
selected = 2;
break;
case 100:
selected = 3;
break;
}
}
//sb.append("<select name=\"organization\" class=\"input-mini\" onchange=\"submitForm('myform');\">");
sb.append("<select name=\"itemsperpage\" class=\"input-mini\" onchange=\"this.form.submit();\">");
for (int i=0; i<options.length; ++i) {
sb.append("<option value=\"");
sb.append(options[i][0]);
sb.append("\"");
if (i == selected) {
sb.append(" selected=\"1\"");
}
sb.append(">");
sb.append(options[i][1]);
sb.append("</option>");
}
sb.append("</select>");
sb.append("</li>");
sb.append("</ul>\n");
sb.append("</div>\n");
return sb.toString();
}
}