| 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 | 17x
17x
17x
17x
91x
91x
26x
2x
2x
2x
24x
2x
24x
24x
24x
24x
24x
24x
24x
24x
24x
24x
24x
234x
234x
95x
95x
24x
95x
95x
139x
30x
30x
91x
234x
234x
249x
239x
139x
139x
124x
39x
85x
91x
4x
4x
4x
22x
4x
| var classes = require('./utils/classes'),
events = require('./utils/events'),
List = require('./index')
module.exports = function (list) {
var isHidden = false
var refresh = function (pagingList, options) {
if (list.page < 1) {
list.listContainer.style.display = 'none'
isHidden = true
return
} else if (isHidden) {
list.listContainer.style.display = 'block'
}
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)
}
item.elm.firstChild.setAttribute('data-i', i)
item.elm.firstChild.setAttribute('data-page', page)
} else if (is.dotted(pagingList, 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 (pagingList, i, left, right, currentPage, innerWindow, currentPageItem) {
return (
this.dottedLeft(pagingList, i, left, right, currentPage, innerWindow) ||
this.dottedRight(pagingList, i, left, right, currentPage, innerWindow, currentPageItem)
)
},
dottedLeft: function (pagingList, i, left, right, currentPage, innerWindow) {
return i == left + 1 && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right)
},
dottedRight: function (pagingList, 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)
}
},
}
return function (options) {
var pagingList = new List(list.listContainer.id, {
listClass: options.paginationClass || 'pagination',
item: options.item || "<li><a class='page' href='#'></a></li>",
valueNames: ['page', 'dotted'],
searchClass: 'pagination-search-that-is-not-supposed-to-exist',
sortClass: 'pagination-sort-that-is-not-supposed-to-exist',
})
events.bind(pagingList.listContainer, 'click', function (e) {
var target = e.target || e.srcElement,
page = list.utils.getAttribute(target, 'data-page'),
i = list.utils.getAttribute(target, 'data-i')
if (i) {
list.show((i - 1) * page + 1, page)
}
})
list.on('updated', function () {
refresh(pagingList, options)
})
refresh(pagingList, options)
}
}
|