forked from RubyLouvre/avalon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
avalon.pagination.js
123 lines (116 loc) · 5.45 KB
/
avalon.pagination.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
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
(function(avalon) {
//判定是否触摸界面
var defaults = {
perPages: 10, //每页显示多少条目
showPages: 10, //一共显示多页
currentIndex: 8,
total: 200,
pages: [],
nextText: "下一页>",
prevText: "<上一页",
firstPage: 0,
lastPage: 0,
maxPage: 0
};
var domParser = document.createElement("div");
avalon.ui.pagination = function(element, id, opts, model) {
var $element = avalon(element);
var options = avalon.mix({}, defaults);
if (typeof opts === "object") {
for (var i in opts) {
if (i === "$id")
continue;
options[i] = opts[i];
}
}
avalon.mix(options, $element.data());
$element.addClass("ui-widget-header ui-corner-all ui-buttonset ");
element.style.cssText += "padding:6px 4px"
model = avalon.define(id, function(vm) {
avalon.mix(vm, options);
function getShowPages() {
var c = vm.currentIndex, p = vm.total / vm.perPages, pages = [c], s = vm.showPages, max = p,
left = c, right = c;
if (p <= s) {
for (var i = 0; i < p; i++) {
pages.push(i);
}
} else {
while (true) {
if (pages.length >= s) {
break;
}
if (left >= 1) {//在日常生活是以1开始的
pages.unshift(--left);
}
if (pages.length >= s) {
break;
}
if (right + 1 < max) {
pages.push(++right);
}
}
}
vm.firstPage = pages[0];
vm.maxPage = max - 1;
vm.lastPage = pages[pages.length - 1];
return pages//[0,1,2,3,4,5,6]
}
vm.jumpPage = function(event) {
event.preventDefault();
if (this.$scope.page !== vm.currentIndex) {
vm.currentIndex = this.$scope.page;
vm.pages = getShowPages();
}
};
vm.prevPage = function(event) {
event.preventDefault();
vm.currentIndex--;
vm.pages = getShowPages();
};
vm.jumpFirstPage = function(event) {
event.preventDefault();
vm.currentIndex = 0;
vm.pages = getShowPages();
};
vm.jumpLastPage = function(event) {
event.preventDefault();
vm.currentIndex = vm.maxPage;
vm.pages = getShowPages();
};
vm.nextPage = function(event) {
event.preventDefault();
vm.currentIndex++;
vm.pages = getShowPages();
};
vm.pages = getShowPages();
});
var cssText = "margin:4px 4px; padding: 2px 8px;text-decoration: none;text-align:center;";
avalon.nextTick(function() {
element.setAttribute("ms-each-page", "pages");
element.innerHTML = '<a ms-href="?page={{page}}" ms-class-ui-corner-left="page == 0" ms-class-ui-corner-right="page == maxPage" ms-hover="ui-state-hover" ms-click="jumpPage" class="ui-state-default" style="' + cssText + '" ms-class-ui-state-active="currentIndex == page"' +
' >{{page+1}}</a>';
avalon.scan(element, model);
domParser.innerHTML = '<span ms-visible="firstPage" style="' + 'padding: 2px 4px;text-decoration: none;text-align:center;' + '" >…</span>' +
'<a href="" ms-visible="firstPage" ms-hover="ui-state-hover" class="ui-state-default" style="' + cssText + '" ms-click="jumpFirstPage" >1</a>' +
'<a href="" ms-visible="firstPage" ms-hover="ui-state-hover" class="ui-state-default ui-corner-left" style="' + cssText + '" ms-click="prevPage" ms-html="prevText"></a>' +
'<a href="" ms-visible="lastPage != maxPage" ms-hover="ui-state-hover" class="ui-state-default ui-corner-right" style="' + cssText + '" ms-click="nextPage" ms-html="nextText"></a>' +
'<a href="" ms-visible="lastPage != maxPage" ms-hover="ui-state-hover" class="ui-state-default" style="' + cssText + '" ms-click="jumpLastPage" >{{maxPage+1}}</a>' +
'<span ms-visible="lastPage != maxPage" style="' + 'padding: 2px 4px;text-decoration: none;text-align:center;' + '" >…</span>';
var a = domParser.removeChild(domParser.firstChild);
element.insertBefore(a, element.firstChild);
a = domParser.removeChild(domParser.firstChild);
element.insertBefore(a, element.firstChild);
a = domParser.removeChild(domParser.firstChild);
element.insertBefore(a, element.firstChild);
a = domParser.removeChild(domParser.lastChild);
element.appendChild(a);
a = domParser.removeChild(domParser.lastChild);
element.appendChild(a);
a = domParser.removeChild(domParser.lastChild);
element.appendChild(a);
avalon.scan(element, model);
});
return model;
};
})(this.avalon);