UNPKG

5.9 kBJavaScriptView Raw
1(function ($) {
2 function SlickGridPager(dataView, grid, $container, options) {
3 var $status;
4 var _options;
5 var _defaults = {
6 showAllText: "Showing all {rowCount} rows",
7 showPageText: "Showing page {pageNum} of {pageCount}",
8 showCountText: "From {countBegin} to {countEnd} of {rowCount} rows",
9 showCount: false
10 };
11
12 function init() {
13 _options = $.extend(true, {}, _defaults, options);
14
15 dataView.onPagingInfoChanged.subscribe(function (e, pagingInfo) {
16 updatePager(pagingInfo);
17 });
18
19 constructPagerUI();
20 updatePager(dataView.getPagingInfo());
21 }
22
23 function getNavState() {
24 var cannotLeaveEditMode = !Slick.GlobalEditorLock.commitCurrentEdit();
25 var pagingInfo = dataView.getPagingInfo();
26 var lastPage = pagingInfo.totalPages - 1;
27
28 return {
29 canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,
30 canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum !== lastPage,
31 canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,
32 canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum < lastPage,
33 pagingInfo: pagingInfo
34 };
35 }
36
37 function setPageSize(n) {
38 dataView.setRefreshHints({
39 isFilterUnchanged: true
40 });
41 dataView.setPagingOptions({pageSize: n});
42 }
43
44 function gotoFirst() {
45 if (getNavState().canGotoFirst) {
46 dataView.setPagingOptions({pageNum: 0});
47 }
48 }
49
50 function gotoLast() {
51 var state = getNavState();
52 if (state.canGotoLast) {
53 dataView.setPagingOptions({pageNum: state.pagingInfo.totalPages - 1});
54 }
55 }
56
57 function gotoPrev() {
58 var state = getNavState();
59 if (state.canGotoPrev) {
60 dataView.setPagingOptions({pageNum: state.pagingInfo.pageNum - 1});
61 }
62 }
63
64 function gotoNext() {
65 var state = getNavState();
66 if (state.canGotoNext) {
67 dataView.setPagingOptions({pageNum: state.pagingInfo.pageNum + 1});
68 }
69 }
70
71 function constructPagerUI() {
72 $container.empty();
73
74 var $nav = $("<span class='slick-pager-nav' />").appendTo($container);
75 var $settings = $("<span class='slick-pager-settings' />").appendTo($container);
76 $status = $("<span class='slick-pager-status' />").appendTo($container);
77
78 $settings
79 .append("<span class='slick-pager-settings-expanded' style='display:none'>Show: <a data=0>All</a><a data='-1'>Auto</a><a data=25>25</a><a data=50>50</a><a data=100>100</a></span>");
80
81 $settings.find("a[data]").click(function (e) {
82 var pagesize = $(e.target).attr("data");
83 if (pagesize !== undefined) {
84 if (pagesize == -1) {
85 var vp = grid.getViewport();
86 setPageSize(vp.bottom - vp.top);
87 } else {
88 setPageSize(parseInt(pagesize));
89 }
90 }
91 });
92
93 var icon_prefix = "<span class='ui-state-default ui-corner-all ui-icon-container'><span class='ui-icon ";
94 var icon_suffix = "' /></span>";
95
96 $(icon_prefix + "ui-icon-lightbulb" + icon_suffix)
97 .click(function () {
98 $(".slick-pager-settings-expanded").toggle();
99 })
100 .appendTo($settings);
101
102 $(icon_prefix + "ui-icon-seek-first" + icon_suffix)
103 .click(gotoFirst)
104 .appendTo($nav);
105
106 $(icon_prefix + "ui-icon-seek-prev" + icon_suffix)
107 .click(gotoPrev)
108 .appendTo($nav);
109
110 $(icon_prefix + "ui-icon-seek-next" + icon_suffix)
111 .click(gotoNext)
112 .appendTo($nav);
113
114 $(icon_prefix + "ui-icon-seek-end" + icon_suffix)
115 .click(gotoLast)
116 .appendTo($nav);
117
118 $container.find(".ui-icon-container")
119 .hover(function () {
120 $(this).toggleClass("ui-state-hover");
121 });
122
123 $container.children().wrapAll("<div class='slick-pager' />");
124 }
125
126
127 function updatePager(pagingInfo) {
128 var state = getNavState();
129
130 $container.find(".slick-pager-nav span").removeClass("ui-state-disabled");
131 if (!state.canGotoFirst) {
132 $container.find(".ui-icon-seek-first").addClass("ui-state-disabled");
133 }
134 if (!state.canGotoLast) {
135 $container.find(".ui-icon-seek-end").addClass("ui-state-disabled");
136 }
137 if (!state.canGotoNext) {
138 $container.find(".ui-icon-seek-next").addClass("ui-state-disabled");
139 }
140 if (!state.canGotoPrev) {
141 $container.find(".ui-icon-seek-prev").addClass("ui-state-disabled");
142 }
143
144 if (pagingInfo.pageSize === 0) {
145 $status.text(_options.showAllText.replace('{rowCount}', pagingInfo.totalRows + "").replace('{pageCount}', pagingInfo.totalPages + ""));
146 } else {
147 $status.text(_options.showPageText.replace('{pageNum}', pagingInfo.pageNum + 1 + "").replace('{pageCount}', pagingInfo.totalPages + ""));
148 }
149
150 if (_options.showCount && pagingInfo.pageSize!==0)
151 {
152 var pageBegin = pagingInfo.pageNum * pagingInfo.pageSize;
153 var currentText = $status.text();
154
155 if (currentText)
156 {
157 currentText += " - ";
158 }
159
160 $status.text(
161 currentText +
162 _options.showCountText
163 .replace('{rowCount}', pagingInfo.totalRows + "")
164 .replace("{countBegin}", pageBegin + 1)
165 .replace("{countEnd}", Math.min(pageBegin + pagingInfo.pageSize, pagingInfo.totalRows))
166 );
167 }
168 }
169
170 init();
171 }
172
173 // Slick.Controls.Pager
174 $.extend(true, window, { Slick:{ Controls:{ Pager:SlickGridPager }}});
175})(jQuery);