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 |
|
174 | $.extend(true, window, { Slick:{ Controls:{ Pager:SlickGridPager }}});
|
175 | })(jQuery);
|