angular-ui-grid
Version:
A data grid for Angular
7 lines (5 loc) • 8.53 kB
JavaScript
/*!
* ui-grid - v4.9.1 - 2020-10-26
* Copyright (c) 2020 ; License: MIT
*/
!function(){"use strict";var i=angular.module("ui.grid.pagination",["ng","ui.grid"]);i.service("uiGridPaginationService",["gridUtil",function(a){var i={initializeGrid:function(o){i.defaultGridOptions(o.options);var g={events:{pagination:{paginationChanged:function(i,a){}}},methods:{pagination:{getPage:function(){return o.options.enablePagination?o.options.paginationCurrentPage:null},getFirstRowIndex:function(){return o.options.useCustomPagination?o.options.paginationPageSizes.reduce(function(i,a,n){return n<o.options.paginationCurrentPage-1?i+a:i},0):(o.options.paginationCurrentPage-1)*o.options.paginationPageSize},getLastRowIndex:function(){return o.options.useCustomPagination?g.methods.pagination.getFirstRowIndex()+o.options.paginationPageSizes[o.options.paginationCurrentPage-1]-1:Math.min(o.options.paginationCurrentPage*o.options.paginationPageSize,o.options.totalItems)-1},getTotalPages:function(){return o.options.enablePagination?o.options.useCustomPagination?o.options.paginationPageSizes.length:0===o.options.totalItems?1:Math.ceil(o.options.totalItems/o.options.paginationPageSize):null},nextPage:function(){o.options.enablePagination&&(0<o.options.totalItems?o.options.paginationCurrentPage=Math.min(o.options.paginationCurrentPage+1,g.methods.pagination.getTotalPages()):o.options.paginationCurrentPage++)},previousPage:function(){o.options.enablePagination&&(o.options.paginationCurrentPage=Math.max(o.options.paginationCurrentPage-1,1))},seek:function(i){if(o.options.enablePagination){if(!angular.isNumber(i)||i<1)throw"Invalid page number: "+i;o.options.paginationCurrentPage=Math.min(i,g.methods.pagination.getTotalPages())}}}}};o.api.registerEventsFromObject(g.events),o.api.registerMethodsFromObject(g.methods);o.registerRowsProcessor(function(i){if(o.options.useExternalPagination||!o.options.enablePagination)return i;var a=parseInt(o.options.paginationPageSize,10),n=(parseInt(o.options.paginationCurrentPage,10),i.filter(function(i){return i.visible}));o.options.totalItems=n.length;var t=g.methods.pagination.getFirstRowIndex(),e=g.methods.pagination.getLastRowIndex();return t>n.length&&(t=((o.options.paginationCurrentPage=1)-1)*a),n.slice(t,e+1)},900)},defaultGridOptions:function(i){i.enablePagination=!1!==i.enablePagination,i.enablePaginationControls=!1!==i.enablePaginationControls,i.useExternalPagination=!0===i.useExternalPagination,i.useCustomPagination=!0===i.useCustomPagination,a.isNullOrUndefined(i.totalItems)&&(i.totalItems=0),a.isNullOrUndefined(i.paginationPageSizes)&&(i.paginationPageSizes=[250,500,1e3]),a.isNullOrUndefined(i.paginationPageSize)&&(0<i.paginationPageSizes.length?i.paginationPageSize=i.paginationPageSizes[0]:i.paginationPageSize=0),a.isNullOrUndefined(i.paginationCurrentPage)&&(i.paginationCurrentPage=1),a.isNullOrUndefined(i.paginationTemplate)&&(i.paginationTemplate="ui-grid/pagination")},onPaginationChanged:function(i,a,n){i.api.pagination.raise.paginationChanged(a,n),i.options.useExternalPagination||i.queueGridRefresh()}};return i}]),i.directive("uiGridPagination",["gridUtil","uiGridPaginationService",function(e,o){return{priority:-200,scope:!1,require:"uiGrid",link:{pre:function(i,n,a,t){o.initializeGrid(t.grid),e.getTemplate(t.grid.options.paginationTemplate).then(function(i){var a=angular.element(i);n.append(a),t.innerCompile(a)})}}}}]),i.directive("uiGridPager",["uiGridPaginationService","uiGridConstants","gridUtil","i18nService","i18nConstants",function(p,l,u,d,c){return{priority:-200,scope:!0,require:"^uiGrid",link:function(n,a,i,t){n.aria=d.getSafeText("pagination.aria");var e=function(){n.paginationApi=t.grid.api.pagination,n.sizesLabel=d.getSafeText("pagination.sizes"),n.totalItemsLabel=d.getSafeText("pagination.totalItems"),n.paginationOf=d.getSafeText("pagination.of"),n.paginationThrough=d.getSafeText("pagination.through")};e(),n.$on(c.UPDATE_EVENT,e);var o=t.grid.options;t.grid.renderContainers.body.registerViewportAdjuster(function(i){return o.enablePaginationControls&&(i.height=i.height-u.elementHeight(a,"padding")),i});var g=t.grid.registerDataChangeCallback(function(i){i.options.useExternalPagination||(i.options.totalItems=i.rows.length)},[l.dataChange.ROW]);n.$on("$destroy",g);var r=n.$watch("grid.options.paginationCurrentPage + grid.options.paginationPageSize",function(i,a){i!==a&&void 0!==a&&(!angular.isNumber(o.paginationCurrentPage)||o.paginationCurrentPage<1?o.paginationCurrentPage=1:0<o.totalItems&&o.paginationCurrentPage>n.paginationApi.getTotalPages()?o.paginationCurrentPage=n.paginationApi.getTotalPages():p.onPaginationChanged(n.grid,o.paginationCurrentPage,o.paginationPageSize))});n.$on("$destroy",function(){r()}),n.cantPageForward=function(){return n.paginationApi.getTotalPages()?n.cantPageToLast():o.data.length<1},n.cantPageToLast=function(){var i=n.paginationApi.getTotalPages();return!i||o.paginationCurrentPage>=i},n.cantPageBackward=function(){return o.paginationCurrentPage<=1};var s=function(i){i&&u.focus.bySelector(a,".ui-grid-pager-control-input")};n.pageFirstPageClick=function(){n.paginationApi.seek(1),s(n.cantPageBackward())},n.pagePreviousPageClick=function(){n.paginationApi.previousPage(),s(n.cantPageBackward())},n.pageNextPageClick=function(){n.paginationApi.nextPage(),s(n.cantPageForward())},n.pageLastPageClick=function(){n.paginationApi.seek(n.paginationApi.getTotalPages()),s(n.cantPageToLast())}}}}])}(),angular.module("ui.grid.pagination").run(["$templateCache",function(i){"use strict";i.put("ui-grid/pagination",'<div class="ui-grid-pager-panel" ui-grid-pager ng-show="grid.options.enablePaginationControls"><div role="navigation" class="ui-grid-pager-container"><div class="ui-grid-pager-control"><button type="button" class="ui-grid-pager-first" ui-grid-one-bind-title="aria.pageToFirst" ui-grid-one-bind-aria-label="aria.pageToFirst" ng-click="pageFirstPageClick()" ng-disabled="cantPageBackward()"><div ng-class="grid.isRTL() ? \'last-triangle\' : \'first-triangle\'"><div ng-class="grid.isRTL() ? \'last-bar-rtl\' : \'first-bar\'"></div></div></button> <button type="button" class="ui-grid-pager-previous" ui-grid-one-bind-title="aria.pageBack" ui-grid-one-bind-aria-label="aria.pageBack" ng-click="pagePreviousPageClick()" ng-disabled="cantPageBackward()"><div ng-class="grid.isRTL() ? \'last-triangle prev-triangle\' : \'first-triangle prev-triangle\'"></div></button> <input type="number" ui-grid-one-bind-title="aria.pageSelected" ui-grid-one-bind-aria-label="aria.pageSelected" class="ui-grid-pager-control-input" ng-model="grid.options.paginationCurrentPage" min="1" max="{{ paginationApi.getTotalPages() }}" step="1" required> <span class="ui-grid-pager-max-pages-number" ng-show="paginationApi.getTotalPages() > 0"><abbr ui-grid-one-bind-title="paginationOf">/ </abbr>{{ paginationApi.getTotalPages() }} </span><button type="button" class="ui-grid-pager-next" ui-grid-one-bind-title="aria.pageForward" ui-grid-one-bind-aria-label="aria.pageForward" ng-click="pageNextPageClick()" ng-disabled="cantPageForward()"><div ng-class="grid.isRTL() ? \'first-triangle next-triangle\' : \'last-triangle next-triangle\'"></div></button> <button type="button" class="ui-grid-pager-last" ui-grid-one-bind-title="aria.pageToLast" ui-grid-one-bind-aria-label="aria.pageToLast" ng-click="pageLastPageClick()" ng-disabled="cantPageToLast()"><div ng-class="grid.isRTL() ? \'first-triangle\' : \'last-triangle\'"><div ng-class="grid.isRTL() ? \'first-bar-rtl\' : \'last-bar\'"></div></div></button></div><div class="ui-grid-pager-row-count-picker" ng-if="grid.options.paginationPageSizes.length > 1 && !grid.options.useCustomPagination"><select ui-grid-one-bind-aria-labelledby-grid="\'items-per-page-label\'" ng-model="grid.options.paginationPageSize" ng-options="o as o for o in grid.options.paginationPageSizes"></select> <span ui-grid-one-bind-id-grid="\'items-per-page-label\'" class="ui-grid-pager-row-count-label"> {{sizesLabel}}</span></div><span ng-if="grid.options.paginationPageSizes.length <= 1" class="ui-grid-pager-row-count-label">{{grid.options.paginationPageSize}} {{sizesLabel}}</span></div><div class="ui-grid-pager-count-container"><div class="ui-grid-pager-count"><span ng-show="grid.options.totalItems > 0">{{ 1 + paginationApi.getFirstRowIndex() }} <abbr ui-grid-one-bind-title="paginationThrough">- </abbr>{{ 1 + paginationApi.getLastRowIndex() }} {{paginationOf}} {{grid.options.totalItems}} {{totalItemsLabel}}</span></div></div></div>')}]);