import ui.bootstrap.pagination
[angular-drzb] / app / js / pagination.js
1 angular.module('ui.bootstrap.pagination', [])
2
3 .directive('pagination', function() {
4   return {
5     restrict: 'E',
6     scope: {
7       numPages: '=',
8       currentPage: '=',
9       maxSize: '=',
10       onSelectPage: '&'
11     },
12     templateUrl: 'template/pagination/pagination.html',
13     replace: true,
14     link: function(scope) {
15       scope.$watch('numPages + currentPage + maxSize', function() {
16         scope.pages = [];
17         
18         //set the default maxSize to numPages
19         var maxSize = ( scope.maxSize && scope.maxSize < scope.numPages ) ? scope.maxSize : scope.numPages;
20         var startPage = scope.currentPage - Math.floor(maxSize/2);
21         
22         //adjust the startPage within boundary
23         if(startPage < 1) {
24             startPage = 1;
25         }
26         if ((startPage + maxSize - 1) > scope.numPages) {
27             startPage = startPage - ((startPage + maxSize - 1) - scope.numPages );
28         }
29
30         for(var i=0; i < maxSize && i < scope.numPages ;i++) {
31           scope.pages.push(startPage + i);
32         }
33         if ( scope.currentPage > scope.numPages ) {
34           scope.selectPage(scope.numPages);
35         }
36       });
37       scope.noPrevious = function() {
38         return scope.currentPage === 1;
39       };
40       scope.noNext = function() {
41         return scope.currentPage === scope.numPages;
42       };
43       scope.isActive = function(page) {
44         return scope.currentPage === page;
45       };
46
47       scope.selectPage = function(page) {
48         if ( ! scope.isActive(page) ) {
49           scope.currentPage = page;
50           scope.onSelectPage({ page: page });
51         }
52       };
53
54       scope.selectPrevious = function() {
55         if ( !scope.noPrevious() ) {
56           scope.selectPage(scope.currentPage-1);
57         }
58       };
59       scope.selectNext = function() {
60         if ( !scope.noNext() ) {
61           scope.selectPage(scope.currentPage+1);
62         }
63       };
64     }
65   };
66 });