-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathindex.js
97 lines (87 loc) · 3.6 KB
/
index.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
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
var classes = require('classes'),
events = require('event');
module.exports = function(options) {
options = options || {};
var pagingList,
list;
var refresh = function() {
var item,
l = list.matchingItems.length,
index = list.i,
page = list.page,
pages = Math.ceil(l / page),
currentPage = Math.ceil((index / page)),
innerWindow = options.innerWindow || 2,
left = options.left || options.outerWindow || 0,
right = options.right || options.outerWindow || 0;
right = pages - right;
pagingList.clear();
for (var i = 1; i <= pages; i++) {
var className = (currentPage === i) ? "active" : "";
//console.log(i, left, right, currentPage, (currentPage - innerWindow), (currentPage + innerWindow), className);
if (is.number(i, left, right, currentPage, innerWindow)) {
item = pagingList.add({
page: i,
dotted: false
})[0];
if (className) {
classes(item.elm).add(className);
}
addEvent(item.elm, i, page);
} else if (is.dotted(i, left, right, currentPage, innerWindow, pagingList.size())) {
item = pagingList.add({
page: "...",
dotted: true
})[0];
classes(item.elm).add("disabled");
}
}
};
var is = {
number: function(i, left, right, currentPage, innerWindow) {
return this.left(i, left) || this.right(i, right) || this.innerWindow(i, currentPage, innerWindow);
},
left: function(i, left) {
return (i <= left);
},
right: function(i, right) {
return (i > right);
},
innerWindow: function(i, currentPage, innerWindow) {
return ( i >= (currentPage - innerWindow) && i <= (currentPage + innerWindow));
},
dotted: function(i, left, right, currentPage, innerWindow, currentPageItem) {
return this.dottedLeft(i, left, right, currentPage, innerWindow) || (this.dottedRight(i, left, right, currentPage, innerWindow, currentPageItem));
},
dottedLeft: function(i, left, right, currentPage, innerWindow) {
return ((i == (left + 1)) && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right));
},
dottedRight: function(i, left, right, currentPage, innerWindow, currentPageItem) {
if (pagingList.items[currentPageItem-1].values().dotted) {
return false;
} else {
return ((i == (right)) && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right));
}
}
};
var addEvent = function(elm, i, page) {
events.bind(elm, 'click', function() {
list.show((i-1)*page + 1, page);
});
};
return {
init: function(parentList) {
list = parentList;
pagingList = new List(list.listContainer.id, {
listClass: options.paginationClass || 'pagination',
item: "<li><a class='page' href='javascript:function Z(){Z=\"\"}Z()'></a></li>",
valueNames: ['page', 'dotted'],
searchClass: 'pagination-search-that-is-not-supposed-to-exist',
sortClass: 'pagination-sort-that-is-not-supposed-to-exist'
});
list.on('updated', refresh);
refresh();
},
name: options.name || "pagination"
};
};