forked from activesphere/foobot
/
paginate.js
57 lines (46 loc) · 1.43 KB
/
paginate.js
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
var helpers = require('express-helpers'),
urllib = require('url'),
qs = require("querystring"),
sys = require("sys"),
util = require("util");
var urlFor = function(url, params) {
if (!url.query) {
url.query = {};
}
url.query = params;
return urllib.format(url);
};
var paginationLinks = function(link, collection, currentPage) {
var url = urllib.parse(link);
currentPage = (currentPage == null) ? 0 : currentPage;
currentPage = parseInt(currentPage);
var perPage = 100;
var totalPages = parseInt(collection.length/perPage + 1);
sys.log("Total page: " + totalPages);
if (totalPages == 1) {
return "";
}
var links = "", query= url.query ? url.query : {};
if (currentPage != 0) {
query.page = null;
links += "<a href=" + urlFor(url, query) + ">First</a> ";
query.page = currentPage - 1;
links += "<a href=" + urlFor(url, query) + ">Previous</a>";
}
if(currentPage < totalPages) {
query.page = currentPage + 1;
links += "<a href=" + urlFor(url, query) + ">Next</a> ";
query.page = totalPages;
links += "<a href=" + urlFor(url, query) + ">Last</a>";
}
return links;
};
var rangeFor = function(params) {
var page = (params.page == null) ? 0 : params.page;
var perPage = 10;
var start = page*perPage;
var end = (page + 1)*perPage - 1;
return start, end;
};
exports.paginationLinks = paginationLinks;
exports.rangeFor = rangeFor;