(function ($) { function SlickGridPager(dataView, grid, $container) { var $status; function init() { dataView.onPagingInfoChanged.subscribe(function (e, pagingInfo) { updatePager(pagingInfo); }); constructPagerUI(); updatePager(dataView.getPagingInfo()); } function getNavState() { var cannotLeaveEditMode = !Slick.GlobalEditorLock.commitCurrentEdit(); var pagingInfo = dataView.getPagingInfo(); var lastPage = pagingInfo.totalPages - 1; return { canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize != 0 && pagingInfo.pageNum > 0, canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize != 0 && pagingInfo.pageNum != lastPage, canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize != 0 && pagingInfo.pageNum > 0, canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize != 0 && pagingInfo.pageNum < lastPage, pagingInfo: pagingInfo } } function setPageSize(n) { dataView.setRefreshHints({ isFilterUnchanged: true }); dataView.setPagingOptions({pageSize: n}); } function gotoFirst() { if (getNavState().canGotoFirst) { dataView.setPagingOptions({pageNum: 0}); } } function gotoLast() { var state = getNavState(); if (state.canGotoLast) { dataView.setPagingOptions({pageNum: state.pagingInfo.totalPages - 1}); } } function gotoPrev() { var state = getNavState(); if (state.canGotoPrev) { dataView.setPagingOptions({pageNum: state.pagingInfo.pageNum - 1}); } } function gotoNext() { var state = getNavState(); if (state.canGotoNext) { dataView.setPagingOptions({pageNum: state.pagingInfo.pageNum + 1}); } } function constructPagerUI() { $container.empty(); var $nav = $("").appendTo($container); var $settings = $("").appendTo($container); $status = $("").appendTo($container); $settings .append(""); $settings.find("a[data]").click(function (e) { var pagesize = $(e.target).attr("data"); if (pagesize != undefined) { if (pagesize == -1) { var vp = grid.getViewport(); setPageSize(vp.bottom - vp.top); } else { setPageSize(parseInt(pagesize)); } } }); var icon_prefix = ""; $(icon_prefix + "ui-icon-lightbulb" + icon_suffix) .click(function () { $(".slick-pager-settings-expanded").toggle() }) .appendTo($settings); $(icon_prefix + "ui-icon-seek-first" + icon_suffix) .click(gotoFirst) .appendTo($nav); $(icon_prefix + "ui-icon-seek-prev" + icon_suffix) .click(gotoPrev) .appendTo($nav); $(icon_prefix + "ui-icon-seek-next" + icon_suffix) .click(gotoNext) .appendTo($nav); $(icon_prefix + "ui-icon-seek-end" + icon_suffix) .click(gotoLast) .appendTo($nav); $container.find(".ui-icon-container") .hover(function () { $(this).toggleClass("ui-state-hover"); }); $container.children().wrapAll("
"); } function updatePager(pagingInfo) { var state = getNavState(); $container.find(".slick-pager-nav span").removeClass("ui-state-disabled"); if (!state.canGotoFirst) { $container.find(".ui-icon-seek-first").addClass("ui-state-disabled"); } if (!state.canGotoLast) { $container.find(".ui-icon-seek-end").addClass("ui-state-disabled"); } if (!state.canGotoNext) { $container.find(".ui-icon-seek-next").addClass("ui-state-disabled"); } if (!state.canGotoPrev) { $container.find(".ui-icon-seek-prev").addClass("ui-state-disabled"); } if (pagingInfo.pageSize == 0) { var totalRowsCount = dataView.getItems().length; var visibleRowsCount = pagingInfo.totalRows; if (visibleRowsCount < totalRowsCount) { $status.text("Showing " + visibleRowsCount + " of " + totalRowsCount + " rows"); } else { $status.text("Showing all " + totalRowsCount + " rows"); } $status.text("Showing all " + pagingInfo.totalRows + " rows"); } else { $status.text("Showing page " + (pagingInfo.pageNum + 1) + " of " + pagingInfo.totalPages); } } init(); } // Slick.Controls.Pager $.extend(true, window, { Slick:{ Controls:{ Pager:SlickGridPager }}}); })(jQuery);