Skip to content

Commit 09c85dd

Browse files
committed
add data provider and pager
1 parent 7067cd8 commit 09c85dd

File tree

6 files changed

+1398
-96
lines changed

6 files changed

+1398
-96
lines changed

ajax-data-provider.js

Lines changed: 59 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,20 @@
66
*/
77
function AjaxDataProvider() {
88
// private
9-
var perPage = 10;
9+
var pageSize = 10;
10+
var page = 0;
11+
var totalCount = 0;
12+
1013
var data = [];
1114
var url = "http://192.168.60.167:3002/api.php";
12-
var timer = null;
13-
var req = null; // ajax timer
15+
var timeout = null;
16+
var req = null;
17+
var refreshHints = {};
1418

1519
// events
1620
var onDataLoading = new Slick.Event();
1721
var onDataLoaded = new Slick.Event();
22+
var onPagingInfoChanged = new Slick.Event();
1823

1924
function init() {}
2025

@@ -28,59 +33,89 @@
2833
return true;
2934
}
3035

36+
function setPagingOptions(args) {
37+
if (args.pageSize !== undefined) {
38+
pageSize = args.pageSize;
39+
page = pageSize ? Math.min(page, Math.max(0, Math.ceil(totalCount / pageSize) - 1)) : 0;
40+
}
41+
42+
if (args.pageNum !== undefined) {
43+
page = Math.min(args.pageNum, Math.max(0, Math.ceil(totalCount / pageSize) - 1));
44+
}
45+
46+
onPagingInfoChanged.notify(getPagingInfo(), null, self);
47+
48+
refresh();
49+
}
50+
51+
function getPagingInfo() {
52+
var totalPages = pageSize ? Math.max(1, Math.ceil(totalCount / pageSize)) : 1;
53+
return {
54+
pageSize: pageSize,
55+
pageNum: page,
56+
totalRows: totalCount,
57+
totalPages: totalPages,
58+
dataProvider: this
59+
};
60+
}
61+
62+
function setRefreshHints(hints) {
63+
refreshHints = hints;
64+
}
65+
3166
function clear() {
3267
for (var key in data) {
3368
delete data[key];
3469
}
3570
}
3671

3772
function getData() {
73+
prepareData();
3874
return data;
3975
}
4076

41-
function prepareData(from, to) {
77+
function prepareData() {
4278
if (req) {
4379
req.abort();
4480
for (var i = req.fromPage; i <= req.toPage; i++) {
45-
delete data[i * perPage];
81+
delete data[i * pageSize];
4682
}
4783
}
4884

49-
if (from < 0) {
50-
from = 0;
51-
}
85+
var from = page;
86+
var to = page * pageSize;
5287

5388
if (data.length > 0) {
5489
to = Math.min(to, data.length - 1);
5590
}
5691

57-
var fromPage = Math.floor(from / perPage);
58-
var toPage = Math.floor(to / perPage);
92+
var fromPage = Math.floor(from / pageSize);
93+
var toPage = Math.floor(to / pageSize);
5994

60-
while (data[fromPage * perPage] !== undefined && fromPage < toPage)
95+
while (data[fromPage * pageSize] !== undefined && fromPage < toPage)
6196
fromPage++;
6297

63-
while (data[toPage * perPage] !== undefined && fromPage < toPage)
98+
while (data[toPage * pageSize] !== undefined && fromPage < toPage)
6499
toPage--;
65100

66-
if (fromPage > toPage || ((fromPage == toPage) && data[fromPage * perPage] !== undefined)) {
101+
if (fromPage > toPage || ((fromPage == toPage) && data[fromPage * pageSize] !== undefined)) {
67102
// TODO: look-ahead
68103
onDataLoaded.notify({from: from, to: to});
69104
return;
70105
}
71106

72-
var recStart = (fromPage * perPage);
73-
var recCount = (((toPage - fromPage) * perPage) + perPage);
107+
var recStart = (fromPage * pageSize);
108+
var recCount = (((toPage - fromPage) * pageSize) + pageSize);
74109

75110
url += "?page=" + recStart + "&count=" + recCount;
76111

77-
if (timer !== null) {
78-
clearTimeout(timer);
112+
if (timeout !== null) {
113+
clearTimeout(timeout);
79114
}
80115

81-
timer = setTimeout(function () {
116+
timeout = setTimeout(function () {
82117
for (var i = fromPage; i <= toPage; i++) {
83-
data[i * perPage] = null; // null indicates a 'timered but not available yet'
118+
data[i * pageSize] = null; // null indicates a 'timered but not available yet'
84119
}
85120

86121
onDataLoading.notify({from: from, to: to});
@@ -143,13 +178,15 @@
143178
"isDataLoaded": isDataLoaded,
144179
"prepareData": prepareData,
145180
"refresh": refresh,
181+
"getPagingInfo": getPagingInfo,
182+
"setRefreshHints": setRefreshHints,
146183

147184
// events
148185
"onDataLoading": onDataLoading,
149-
"onDataLoaded": onDataLoaded
186+
"onDataLoaded": onDataLoaded,
187+
"onPagingInfoChanged": onPagingInfoChanged
150188
};
151189
}
152190

153-
// Slick.RemoteDataProvider
154-
$.extend(true, window, { Flow: { AjaxDataProvider: AjaxDataProvider }});
191+
$.extend(true, window, { Slick: { AjaxDataProvider: AjaxDataProvider }});
155192
})(jQuery);

0 commit comments

Comments
 (0)