001package dk.netarkivet.harvester.webinterface.servlet; 002 003/** 004 * Builds a pagination HTML text block using twitter-bootstrap styles. 005 * 006 * <div class="pagination pull-right"> 007 * <ul> 008 * <li class="disabled"><span>Forrige</span></li> 009 * <li class="active"><span>1</span></li> 010 * <li><a href="#">2</a></li> 011 * <li><a href="#">3</a></li> 012 * <li class="disabled"><span>...</span></li> 013 * <li><a href="#">8</a></li> 014 * <li><a href="#">9</a></li> 015 * <li><a href="#">10</a></li> 016 * <li><a href="#">Næste</a></li> 017 * </ul> 018 * </div> 019 */ 020public class Pagination { 021 022 /** 023 * Calculate the total number of pages. 024 * @param items total number of items 025 * @param itemsPerPage items displayed per page 026 * @return the total number of pages 027 */ 028 public static long getPages(long items, long itemsPerPage) { 029 long pages = (items + itemsPerPage - 1) / itemsPerPage; 030 if (pages == 0) { 031 pages = 1; 032 } 033 return pages; 034 } 035 036 /** 037 * Builds a pagination HTML text block. 038 * 039 * @param page current page 040 * @param itemsPerPage items displayed per page 041 * @param pages total number of pages 042 * @return HTML text block 043 */ 044 public static String getPagination(long page, long itemsPerPage, long pages, boolean bShowAll) { 045 if (page < 1) { 046 page = 1; 047 } 048 if (pages == 0) { 049 pages = 1; 050 } 051 if (page > pages) { 052 page = pages; 053 } 054 StringBuilder sb = new StringBuilder(); 055 sb.append("<div class=\"pagination pull-right\">\n"); 056 sb.append("<ul>\n"); 057 // Previous 058 if (page > 1) { 059 sb.append("<li><a href=\"?page=" + (page - 1) + "&itemsperpage=" 060 + itemsPerPage + "\">Forrige</a></li>"); 061 } else { 062 sb.append("<li class=\"disabled\"><span>Forrige</span></li>"); 063 } 064 // First. 065 if (page == 1) { 066 sb.append("<li class=\"active\"><span>" + 1 + "</span></li>"); 067 } else { 068 sb.append("<li><a href=\"?page=" + 1 + "&itemsperpage=" 069 + itemsPerPage + "\">" + 1 + "</a></li>"); 070 } 071 // List. 072 long tmpPage = page - 3; 073 if (tmpPage > pages - 7) { 074 tmpPage = pages - 7; 075 } 076 if (tmpPage > 2) { 077 sb.append("<li class=\"disabled\"><span>...</span></li>"); 078 } else { 079 tmpPage = 2; 080 } 081 int show = 8; 082 while (show > 1 && tmpPage <= pages) { 083 if (tmpPage == page) { 084 sb.append("<li class=\"active\"><span>" + tmpPage 085 + "</span></li>"); 086 } else { 087 sb.append("<li><a href=\"?page=" + tmpPage + "&itemsperpage=" 088 + itemsPerPage + "\">" + tmpPage + "</a></li>"); 089 } 090 --show; 091 tmpPage++; 092 } 093 // Last 094 if (tmpPage <= pages) { 095 if (tmpPage < pages) { 096 sb.append("<li class=\"disabled\"><span>...</span></li>"); 097 } 098 if (tmpPage == page) { 099 sb.append("<li class=\"active\"><span>" + pages 100 + "</span></li>"); 101 } else { 102 sb.append("<li><a href=\"?page=" + pages + "&itemsperpage=" 103 + itemsPerPage + "\">" + pages + "</a></li>"); 104 } 105 } 106 // Next. 107 if (page < pages) { 108 sb.append("<li><a href=\"?page=" + (page + 1) + "&itemsperpage=" 109 + itemsPerPage + "\">Næste</a></li>"); 110 } else { 111 sb.append("<li class=\"disabled\"><span>Næste</span></li>"); 112 } 113 // Items per page. 114 sb.append("<li>"); 115 String[][] options = new String[][] {{"10", "10"}, {"25", "25"}, {"50", "50"}, {"100", "100"}, {"all", "Vis alle"}}; 116 int selected; 117 if (bShowAll) { 118 selected = options.length - 1; 119 } else { 120 switch ((int)itemsPerPage) { 121 case 10: 122 selected = 0; 123 break; 124 default: 125 case 25: 126 selected = 1; 127 break; 128 case 50: 129 selected = 2; 130 break; 131 case 100: 132 selected = 3; 133 break; 134 } 135 } 136 //sb.append("<select name=\"organization\" class=\"input-mini\" onchange=\"submitForm('myform');\">"); 137 sb.append("<select name=\"itemsperpage\" class=\"input-mini\" onchange=\"this.form.submit();\">"); 138 for (int i=0; i<options.length; ++i) { 139 sb.append("<option value=\""); 140 sb.append(options[i][0]); 141 sb.append("\""); 142 if (i == selected) { 143 sb.append(" selected=\"1\""); 144 } 145 sb.append(">"); 146 sb.append(options[i][1]); 147 sb.append("</option>"); 148 } 149 sb.append("</select>"); 150 sb.append("</li>"); 151 sb.append("</ul>\n"); 152 sb.append("</div>\n"); 153 return sb.toString(); 154 } 155 156}