@@ -234,15 +234,82 @@ angular.module('ui.bootstrap.pagination', [])
234
234
235
235
angular . module ( 'ui.bootstrap.pagination' )
236
236
. value ( '$paginationSuppressWarning' , false )
237
- . controller ( 'PaginationController' , [ '$scope' , '$attrs' , '$parse' , '$controller' , '$element' , '$ log', '$paginationSuppressWarning' , function ( $scope , $attrs , $parse , $controller , $element , $log , $paginationSuppressWarning ) {
237
+ . controller ( 'PaginationController' , [ '$scope' , '$attrs' , '$parse' , '$log' , '$paginationSuppressWarning' , function ( $scope , $attrs , $parse , $log , $paginationSuppressWarning ) {
238
238
if ( ! $paginationSuppressWarning ) {
239
239
$log . warn ( 'PaginationController is now deprecated. Use UibPaginationController instead.' ) ;
240
240
}
241
- return $controller ( 'UibPaginationController' , {
242
- $scope : $scope ,
243
- $element : $element ,
244
- $attrs : $attrs
245
- } ) ;
241
+
242
+ var self = this ,
243
+ ngModelCtrl = { $setViewValue : angular . noop } , // nullModelCtrl
244
+ setNumPages = $attrs . numPages ? $parse ( $attrs . numPages ) . assign : angular . noop ;
245
+
246
+ this . init = function ( ngModelCtrl_ , config ) {
247
+ ngModelCtrl = ngModelCtrl_ ;
248
+ this . config = config ;
249
+
250
+ ngModelCtrl . $render = function ( ) {
251
+ self . render ( ) ;
252
+ } ;
253
+
254
+ if ( $attrs . itemsPerPage ) {
255
+ $scope . $parent . $watch ( $parse ( $attrs . itemsPerPage ) , function ( value ) {
256
+ self . itemsPerPage = parseInt ( value , 10 ) ;
257
+ $scope . totalPages = self . calculateTotalPages ( ) ;
258
+ } ) ;
259
+ } else {
260
+ this . itemsPerPage = config . itemsPerPage ;
261
+ }
262
+
263
+ $scope . $watch ( 'totalItems' , function ( ) {
264
+ $scope . totalPages = self . calculateTotalPages ( ) ;
265
+ } ) ;
266
+
267
+ $scope . $watch ( 'totalPages' , function ( value ) {
268
+ setNumPages ( $scope . $parent , value ) ; // Readonly variable
269
+
270
+ if ( $scope . page > value ) {
271
+ $scope . selectPage ( value ) ;
272
+ } else {
273
+ ngModelCtrl . $render ( ) ;
274
+ }
275
+ } ) ;
276
+ } ;
277
+
278
+ this . calculateTotalPages = function ( ) {
279
+ var totalPages = this . itemsPerPage < 1 ? 1 : Math . ceil ( $scope . totalItems / this . itemsPerPage ) ;
280
+ return Math . max ( totalPages || 0 , 1 ) ;
281
+ } ;
282
+
283
+ this . render = function ( ) {
284
+ $scope . page = parseInt ( ngModelCtrl . $viewValue , 10 ) || 1 ;
285
+ } ;
286
+
287
+ $scope . selectPage = function ( page , evt ) {
288
+ if ( evt ) {
289
+ evt . preventDefault ( ) ;
290
+ }
291
+
292
+ var clickAllowed = ! $scope . ngDisabled || ! evt ;
293
+ if ( clickAllowed && $scope . page !== page && page > 0 && page <= $scope . totalPages ) {
294
+ if ( evt && evt . target ) {
295
+ evt . target . blur ( ) ;
296
+ }
297
+ ngModelCtrl . $setViewValue ( page ) ;
298
+ ngModelCtrl . $render ( ) ;
299
+ }
300
+ } ;
301
+
302
+ $scope . getText = function ( key ) {
303
+ return $scope [ key + 'Text' ] || self . config [ key + 'Text' ] ;
304
+ } ;
305
+
306
+ $scope . noPrevious = function ( ) {
307
+ return $scope . page === 1 ;
308
+ } ;
309
+
310
+ $scope . noNext = function ( ) {
311
+ return $scope . page === $scope . totalPages ;
312
+ } ;
246
313
} ] )
247
314
. directive ( 'pagination' , [ '$parse' , 'uibPaginationConfig' , '$log' , '$paginationSuppressWarning' , function ( $parse , paginationConfig , $log , $paginationSuppressWarning ) {
248
315
return {
@@ -262,7 +329,7 @@ angular.module('ui.bootstrap.pagination')
262
329
return attrs . templateUrl || 'template/pagination/pagination.html' ;
263
330
} ,
264
331
replace : true ,
265
- link : function ( scope , element , attrs , ctrls ) {
332
+ link : function ( scope , element , attrs , ctrls ) {
266
333
if ( ! $paginationSuppressWarning ) {
267
334
$log . warn ( 'pagination is now deprecated. Use uib-pagination instead.' ) ;
268
335
}
0 commit comments