'use strict' ;
define (
[
'backgrid.paginator'
] , function ( Paginator ) {
return Paginator . extend ( {
template : 'Shared/Grid/PagerTemplate' ,
events : {
'click .pager-btn' : 'changePage'
} ,
windowSize : 1 ,
fastForwardHandleLabels : {
first : 'icon-fast-backward' ,
prev : 'icon-backward' ,
next : 'icon-forward' ,
last : 'icon-fast-forward'
} ,
changePage : function ( e ) {
e . preventDefault ( ) ;
var target = $ ( e . target ) ;
if ( target . closest ( 'li' ) . hasClass ( 'disabled' ) ) {
return ;
}
target . closest ( 'li i' ) . addClass ( 'icon-spinner icon-spin' ) ;
var label = target . attr ( 'data-action' ) ;
var ffLabels = this . fastForwardHandleLabels ;
var collection = this . collection ;
if ( ffLabels ) {
switch ( label ) {
case 'first' :
collection . getFirstPage ( ) ;
return ;
case 'prev' :
if ( collection . hasPrevious ( ) ) {
collection . getPreviousPage ( ) ;
}
return ;
case 'next' :
if ( collection . hasNext ( ) ) {
collection . getNextPage ( ) ;
}
return ;
case 'last' :
collection . getLastPage ( ) ;
return ;
}
}
var state = collection . state ;
var pageIndex = $ ( e . target ) . text ( ) * 1 ;
collection . getPage ( state . firstPage === 0 ? pageIndex - 1 : pageIndex ) ;
} ,
makeHandles : function ( ) {
var handles =
[
] ;
var collection = this . collection ;
var state = collection . state ;
// convert all indices to 0-based here
var firstPage = state . firstPage ;
var lastPage = + state . lastPage ;
lastPage = Math . max ( 0 , firstPage ? lastPage - 1 : lastPage ) ;
var currentPage = Math . max ( state . currentPage , state . firstPage ) ;
currentPage = firstPage ? currentPage - 1 : currentPage ;
var windowStart = Math . floor ( currentPage / this . windowSize ) * this . windowSize ;
var windowEnd = Math . min ( lastPage + 1 , windowStart + this . windowSize ) ;
if ( collection . mode !== 'infinite' ) {
for ( var i = windowStart ; i < windowEnd ; i ++ ) {
handles . push ( {
label : i + 1 ,
title : 'No. ' + ( i + 1 ) ,
className : currentPage === i ? 'active' : undefined ,
pageNumber : i + 1 ,
lastPage : lastPage + 1
} ) ;
}
}
var ffLabels = this . fastForwardHandleLabels ;
if ( ffLabels ) {
if ( ffLabels . prev ) {
handles . unshift ( {
label : ffLabels . prev ,
className : collection . hasPrevious ( ) ? void 0 : 'disabled' ,
action : 'prev'
} ) ;
}
if ( ffLabels . first ) {
handles . unshift ( {
label : ffLabels . first ,
className : collection . hasPrevious ( ) ? void 0 : 'disabled' ,
action : 'first'
} ) ;
}
if ( ffLabels . next ) {
handles . push ( {
label : ffLabels . next ,
className : collection . hasNext ( ) ? void 0 : 'disabled' ,
action : 'next'
} ) ;
}
if ( ffLabels . last ) {
handles . push ( {
label : ffLabels . last ,
className : collection . hasNext ( ) ? void 0 : 'disabled' ,
action : 'last'
} ) ;
}
}
return handles ;
} ,
render : function ( ) {
this . $el . empty ( ) ;
var templateFunction = Marionette . TemplateCache . get ( this . template ) ;
this . $el . html ( templateFunction ( {
handles : this . makeHandles ( ) ,
state : this . collection . state
} ) ) ;
this . delegateEvents ( ) ;
return this ;
}
} ) ;
} ) ;