1 ng.module('smart-table')
2 .directive('stPagination', ['stConfig', function (stConfig) {
8 stDisplayedPages: '=?',
11 templateUrl: function (element, attrs) {
12 if (attrs.stTemplate) {
13 return attrs.stTemplate;
15 return stConfig.pagination.template;
17 link: function (scope, element, attrs, ctrl) {
19 scope.stItemsByPage = scope.stItemsByPage ? +(scope.stItemsByPage) : stConfig.pagination.itemsByPage;
20 scope.stDisplayedPages = scope.stDisplayedPages ? +(scope.stDisplayedPages) : stConfig.pagination.displayedPages;
22 scope.currentPage = 1;
26 var paginationState = ctrl.tableState().pagination;
30 var prevPage = scope.currentPage;
31 scope.totalItemCount = paginationState.totalItemCount;
32 scope.currentPage = Math.floor(paginationState.start / paginationState.number) + 1;
34 start = Math.max(start, scope.currentPage - Math.abs(Math.floor(scope.stDisplayedPages / 2)));
35 end = start + scope.stDisplayedPages;
37 if (end > paginationState.numberOfPages) {
38 end = paginationState.numberOfPages + 1;
39 start = Math.max(1, end - scope.stDisplayedPages);
43 scope.numPages = paginationState.numberOfPages;
45 for (i = start; i < end; i++) {
49 if (prevPage !== scope.currentPage) {
50 scope.stPageChange({newPage: scope.currentPage});
54 //table state --> view
55 scope.$watch(function () {
56 return ctrl.tableState().pagination;
59 //scope --> table state (--> view)
60 scope.$watch('stItemsByPage', function (newValue, oldValue) {
61 if (newValue !== oldValue) {
66 scope.$watch('stDisplayedPages', redraw);
69 scope.selectPage = function (page) {
70 if (page > 0 && page <= scope.numPages) {
71 ctrl.slice((page - 1) * scope.stItemsByPage, scope.stItemsByPage);
75 if (!ctrl.tableState().pagination.number) {
76 ctrl.slice(0, scope.stItemsByPage);