@ -12,211 +12,212 @@
* @ example
* @ example
* $ ( document ) . ready ( function ( ) {
* $ ( document ) . ready ( function ( ) {
* $ ( '#example' ) . dataTable ( {
* $ ( '#example' ) . dataTable ( {
* " sPagination Type": "input"
* " paging Type": "input"
* } ) ;
* } ) ;
* } ) ;
* } ) ;
* /
* /
$ . fn . dataTableExt . oPagination . input = {
( function ( $ ) {
"fnInit" : function ( oSettings , nPaging , fnCallbackDraw )
function calcDisableClasses ( oSettings ) {
{
var start = oSettings . _iDisplayStart ;
var nFirst = document . createElement ( 'span' ) ;
var length = oSettings . _iDisplayLength ;
var nPrevious = document . createElement ( 'span' ) ;
var visibleRecords = oSettings . fnRecordsDisplay ( ) ;
var nNext = document . createElement ( 'span' ) ;
var all = length === - 1 ;
var nLast = document . createElement ( 'span' ) ;
var nInput = document . createElement ( 'input' ) ;
// Gordey Doronin: Re-used this code from main jQuery.dataTables source code. To be consistent.
var nPage = document . createElement ( 'span' ) ;
var page = all ? 0 : Math . ceil ( start / length ) ;
var nOf = document . createElement ( 'span' ) ;
var pages = all ? 1 : Math . ceil ( visibleRecords / length ) ;
nFirst . innerHTML = oSettings . oLanguage . oPaginate . sFirst ;
var disableFirstPrevClass = ( page > 0 ? '' : oSettings . oClasses . sPageButtonDisabled ) ;
nPrevious . innerHTML = oSettings . oLanguage . oPaginate . sPrevious ;
var disableNextLastClass = ( page < pages - 1 ? '' : oSettings . oClasses . sPageButtonDisabled ) ;
nNext . innerHTML = oSettings . oLanguage . oPaginate . sNext ;
nLast . innerHTML = oSettings . oLanguage . oPaginate . sLast ;
return {
'first' : disableFirstPrevClass ,
nFirst . className = "paginate_button first disabled" ;
'previous' : disableFirstPrevClass ,
nPrevious . className = "paginate_button previous disabled" ;
'next' : disableNextLastClass ,
nNext . className = "paginate_button next" ;
'last' : disableNextLastClass
nLast . className = "paginate_button last" ;
} ;
nOf . className = "paginate_of" ;
}
nPage . className = "paginate_page" ;
nInput . className = "paginate_input" ;
if ( oSettings . sTableId !== '' )
{
nPaging . setAttribute ( 'id' , oSettings . sTableId + '_paginate' ) ;
nPrevious . setAttribute ( 'id' , oSettings . sTableId + '_previous' ) ;
nPrevious . setAttribute ( 'id' , oSettings . sTableId + '_previous' ) ;
nNext . setAttribute ( 'id' , oSettings . sTableId + '_next' ) ;
nLast . setAttribute ( 'id' , oSettings . sTableId + '_last' ) ;
}
nInput . type = "text" ;
function calcCurrentPage ( oSettings ) {
nPage . innerHTML = "Page " ;
return Math . ceil ( oSettings . _iDisplayStart / oSettings . _iDisplayLength ) + 1 ;
}
nPaging . appendChild ( nFirst ) ;
nPaging . appendChild ( nPrevious ) ;
function calcPages ( oSettings ) {
nPaging . appendChild ( nPage ) ;
return Math . ceil ( oSettings . fnRecordsDisplay ( ) / oSettings . _iDisplayLength ) ;
nPaging . appendChild ( nInput ) ;
}
nPaging . appendChild ( nOf ) ;
nPaging . appendChild ( nNext ) ;
var firstClassName = 'first' ;
nPaging . appendChild ( nLast ) ;
var previousClassName = 'previous' ;
var nextClassName = 'next' ;
$ ( nFirst ) . click ( function ( )
var lastClassName = 'last' ;
{
var iCurrentPage = Math . ceil ( oSettings . _iDisplayStart / oSettings . _iDisplayLength ) + 1 ;
var paginateClassName = 'paginate' ;
if ( iCurrentPage != 1 )
var paginateOfClassName = 'paginate_of' ;
{
var paginatePageClassName = 'paginate_page' ;
oSettings . oApi . _fnPageChange ( oSettings , "first" ) ;
var paginateInputClassName = 'paginate_input' ;
fnCallbackDraw ( oSettings ) ;
$ ( nFirst ) . addClass ( 'disabled' ) ;
$ . fn . dataTableExt . oPagination . input = {
$ ( nPrevious ) . addClass ( 'disabled' ) ;
'fnInit' : function ( oSettings , nPaging , fnCallbackDraw ) {
$ ( nNext ) . removeClass ( 'disabled' ) ;
var nFirst = document . createElement ( 'span' ) ;
$ ( nLast ) . removeClass ( 'disabled' ) ;
var nPrevious = document . createElement ( 'span' ) ;
}
var nNext = document . createElement ( 'span' ) ;
} ) ;
var nLast = document . createElement ( 'span' ) ;
var nInput = document . createElement ( 'input' ) ;
$ ( nPrevious ) . click ( function ( )
var nPage = document . createElement ( 'span' ) ;
{
var nOf = document . createElement ( 'span' ) ;
var iCurrentPage = Math . ceil ( oSettings . _iDisplayStart / oSettings . _iDisplayLength ) + 1 ;
if ( iCurrentPage != 1 )
var language = oSettings . oLanguage . oPaginate ;
{
var classes = oSettings . oClasses ;
oSettings . oApi . _fnPageChange ( oSettings , "previous" ) ;
fnCallbackDraw ( oSettings ) ;
nFirst . innerHTML = language . sFirst ;
if ( iCurrentPage == 2 )
nPrevious . innerHTML = language . sPrevious ;
{
nNext . innerHTML = language . sNext ;
$ ( nFirst ) . addClass ( 'disabled' ) ;
nLast . innerHTML = language . sLast ;
$ ( nPrevious ) . addClass ( 'disabled' ) ;
}
nFirst . className = firstClassName + ' ' + classes . sPageButton ;
$ ( nNext ) . removeClass ( 'disabled' ) ;
nPrevious . className = previousClassName + ' ' + classes . sPageButton ;
$ ( nLast ) . removeClass ( 'disabled' ) ;
nNext . className = nextClassName + ' ' + classes . sPageButton ;
nLast . className = lastClassName + ' ' + classes . sPageButton ;
nOf . className = paginateOfClassName ;
nPage . className = paginatePageClassName ;
nInput . className = paginateInputClassName ;
if ( oSettings . sTableId !== '' ) {
nPaging . setAttribute ( 'id' , oSettings . sTableId + '_' + paginateClassName ) ;
nFirst . setAttribute ( 'id' , oSettings . sTableId + '_' + firstClassName ) ;
nPrevious . setAttribute ( 'id' , oSettings . sTableId + '_' + previousClassName ) ;
nNext . setAttribute ( 'id' , oSettings . sTableId + '_' + nextClassName ) ;
nLast . setAttribute ( 'id' , oSettings . sTableId + '_' + lastClassName ) ;
}
}
} ) ;
$ ( nNext ) . click ( function ( )
nInput . type = 'text' ;
{
nPage . innerHTML = 'Page ' ;
var iCurrentPage = Math . ceil ( oSettings . _iDisplayStart / oSettings . _iDisplayLength ) + 1 ;
if ( iCurrentPage != Math . ceil ( ( oSettings . fnRecordsDisplay ( ) / oSettings . _iDisplayLength ) ) )
nPaging . appendChild ( nFirst ) ;
{
nPaging . appendChild ( nPrevious ) ;
oSettings . oApi . _fnPageChange ( oSettings , "next" ) ;
nPaging . appendChild ( nPage ) ;
fnCallbackDraw ( oSettings ) ;
nPaging . appendChild ( nInput ) ;
if ( iCurrentPage == ( Math . ceil ( ( oSettings . fnRecordsDisplay ( ) - 1 ) / oSettings . _iDisplayLength ) - 1 ) )
nPaging . appendChild ( nOf ) ;
{
nPaging . appendChild ( nNext ) ;
$ ( nNext ) . addClass ( 'disabled' ) ;
nPaging . appendChild ( nLast ) ;
$ ( nLast ) . addClass ( 'disabled' ) ;
$ ( nFirst ) . click ( function ( ) {
var iCurrentPage = calcCurrentPage ( oSettings ) ;
if ( iCurrentPage !== 1 ) {
oSettings . oApi . _fnPageChange ( oSettings , 'first' ) ;
fnCallbackDraw ( oSettings ) ;
}
}
$ ( nFirst ) . removeClass ( 'disabled' ) ;
} ) ;
$ ( nPrevious ) . removeClass ( 'disabled' ) ;
}
$ ( nPrevious ) . click ( function ( ) {
} ) ;
var iCurrentPage = calcCurrentPage ( oSettings ) ;
if ( iCurrentPage !== 1 ) {
$ ( nLast ) . click ( function ( )
oSettings . oApi . _fnPageChange ( oSettings , 'previous' ) ;
{
var iCurrentPage = Math . ceil ( oSettings . _iDisplayStart / oSettings . _iDisplayLength ) + 1 ;
if ( iCurrentPage != Math . ceil ( ( oSettings . fnRecordsDisplay ( ) / oSettings . _iDisplayLength ) ) )
{
oSettings . oApi . _fnPageChange ( oSettings , "last" ) ;
fnCallbackDraw ( oSettings ) ;
fnCallbackDraw ( oSettings ) ;
$ ( nFirst ) . removeClass ( 'disabled' ) ;
$ ( nPrevious ) . removeClass ( 'disabled' ) ;
$ ( nNext ) . addClass ( 'disabled' ) ;
$ ( nLast ) . addClass ( 'disabled' ) ;
}
}
} ) ;
} ) ;
$ ( nInput ) . keyup ( function ( e ) {
$ ( nNext ) . click ( function ( ) {
// 38 = up arrow, 39 = right arrow
var iCurrentPage = calcCurrentPage ( oSettings ) ;
if ( e . which == 38 || e . which == 39 )
if ( iCurrentPage !== calcPages ( oSettings ) ) {
{
oSettings . oApi . _fnPageChange ( oSettings , 'next' ) ;
this . value ++ ;
fnCallbackDraw ( oSettings ) ;
}
}
// 37 = left arrow, 40 = down arrow
} ) ;
else if ( ( e . which == 37 || e . which == 40 ) && this . value > 1 )
{
this . value -- ;
}
if ( this . value === "" || this . value . match ( /[^0-9]/ ) )
$ ( nLast ) . click ( function ( ) {
{
var iCurrentPage = calcCurrentPage ( oSettings ) ;
/* Nothing entered or non-numeric character */
if ( iCurrentPage !== calcPages ( oSettings ) ) {
this . value = this . value . replace ( /[^\d]/g , '' ) ; // don't even allow anything but digits
oSettings . oApi . _fnPageChange ( oSettings , 'last' ) ;
return ;
fnCallbackDraw ( oSettings ) ;
}
}
} ) ;
var iNewStart = oSettings . _iDisplayLength * ( this . value - 1 ) ;
$ ( nInput ) . keyup ( function ( e ) {
if ( iNewStart < 0 )
// 38 = up arrow, 39 = right arrow
{
if ( e . which === 38 || e . which === 39 ) {
iNewStart = 0 ;
this . value ++ ;
}
}
if ( iNewStart >= oSettings . fnRecordsDisplay ( ) )
// 37 = left arrow, 40 = down arrow
{
else if ( ( e . which === 37 || e . which === 40 ) && this . value > 1 ) {
iNewStart = ( Math . ceil ( ( oSettings . fnRecordsDisplay ( ) - 1 ) / oSettings . _iDisplayLength ) - 1 ) * oSettings . _iDisplayLength ;
this . value -- ;
}
}
if ( iNewStart === 0 )
if ( this . value === '' || this . value . match ( /[^0-9]/ ) ) {
{
/* Nothing entered or non-numeric character */
$ ( nFirst ) . addClass ( 'disabled' ) ;
this . value = this . value . replace ( /[^\d]/g , '' ) ; // don't even allow anything but digits
$ ( nPrevious ) . addClass ( 'disabled' ) ;
return ;
$ ( nNext ) . removeClass ( 'disabled' ) ;
$ ( nLast ) . removeClass ( 'disabled' ) ;
}
}
else if ( iNewStart == ( ( Math . ceil ( ( oSettings . fnRecordsDisplay ( ) - 1 ) / oSettings . _iDisplayLength ) - 1 ) * oSettings . _iDisplayLength ) )
{
var iNewStart = oSettings . _iDisplayLength * ( this . value - 1 ) ;
$ ( nNext ) . addClass ( 'disabled' ) ;
if ( iNewStart < 0 ) {
$ ( nLast ) . addClass ( 'disabled' ) ;
iNewStart = 0 ;
$ ( nFirst ) . removeClass ( 'disabled' ) ;
$ ( nPrevious ) . removeClass ( 'disabled' ) ;
}
}
else
if ( iNewStart >= oSettings . fnRecordsDisplay ( ) ) {
{
iNewStart = ( Math . ceil ( ( oSettings . fnRecordsDisplay ( ) - 1 ) / oSettings . _iDisplayLength ) - 1 ) * oSettings . _iDisplayLength ;
$ ( nFirst ) . removeClass ( 'disabled' ) ;
$ ( nPrevious ) . removeClass ( 'disabled' ) ;
$ ( nNext ) . removeClass ( 'disabled' ) ;
$ ( nLast ) . removeClass ( 'disabled' ) ;
}
}
oSettings . _iDisplayStart = iNewStart ;
oSettings . _iDisplayStart = iNewStart ;
fnCallbackDraw ( oSettings ) ;
fnCallbackDraw ( oSettings ) ;
} ) ;
} ) ;
/* Take the brutal approach to cancelling text selection */
$ ( 'span' , nPaging ) . bind ( 'mousedown' , function ( ) { return false ; } ) ;
$ ( 'span' , nPaging ) . bind ( 'selectstart' , function ( ) { return false ; } ) ;
// If we can't page anyway, might as well not show it
// Take the brutal approach to cancelling text selection.
var iPages = Math . ceil ( ( oSettings . fnRecordsDisplay ( ) ) / oSettings . _iDisplayLength ) ;
$ ( 'span' , nPaging ) . bind ( 'mousedown' , function ( ) { return false ; } ) ;
if ( iPages <= 1 )
$ ( 'span' , nPaging ) . bind ( 'selectstart' , function ( ) { return false ; } ) ;
{
$ ( nPaging ) . hide ( ) ;
}
} ,
// If we can't page anyway, might as well not show it.
var iPages = calcPages ( oSettings ) ;
if ( iPages <= 1 ) {
$ ( nPaging ) . hide ( ) ;
}
} ,
"fnUpdate" : function ( oSettings , fnCallbackDraw )
'fnUpdate' : function ( oSettings ) {
{
if ( ! oSettings . aanFeatures . p ) {
if ( ! oSettings . aanFeatures . p )
return ;
{
}
return ;
}
var iPages = Math . ceil ( ( oSettings . fnRecordsDisplay ( ) ) / oSettings . _iDisplayLength ) ;
var iCurrentPage = Math . ceil ( oSettings . _iDisplayStart / oSettings . _iDisplayLength ) + 1 ;
var an = oSettings . aanFeatures . p ;
var iPages = calcPages ( oSettings ) ;
if ( iPages <= 1 ) // hide paging when we can't page
var iCurrentPage = calcCurrentPage ( oSettings ) ;
{
$ ( an ) . hide ( ) ;
}
else
{
$ ( an ) . show ( ) ;
/* Loop over each instance of the pager */
var an = oSettings . aanFeatures . p ;
for ( var i = 0 , iLen = an . length ; i < iLen ; i ++ )
if ( iPages <= 1 ) // hide paging when we can't page
{
{
var spans = an [ i ] . getElementsByTagName ( 'span' ) ;
$ ( an ) . hide ( ) ;
var inputs = an [ i ] . getElementsByTagName ( 'input' ) ;
return ;
spans [ 3 ] . innerHTML = " of " + iPages ;
inputs [ 0 ] . value = iCurrentPage ;
}
}
var disableClasses = calcDisableClasses ( oSettings ) ;
$ ( an ) . show ( ) ;
// Enable/Disable `first` button.
$ ( an ) . children ( '.' + firstClassName )
. removeClass ( oSettings . oClasses . sPageButtonDisabled )
. addClass ( disableClasses [ firstClassName ] ) ;
// Enable/Disable `prev` button.
$ ( an ) . children ( '.' + previousClassName )
. removeClass ( oSettings . oClasses . sPageButtonDisabled )
. addClass ( disableClasses [ previousClassName ] ) ;
// Enable/Disable `next` button.
$ ( an ) . children ( '.' + nextClassName )
. removeClass ( oSettings . oClasses . sPageButtonDisabled )
. addClass ( disableClasses [ nextClassName ] ) ;
// Enable/Disable `last` button.
$ ( an ) . children ( '.' + lastClassName )
. removeClass ( oSettings . oClasses . sPageButtonDisabled )
. addClass ( disableClasses [ lastClassName ] ) ;
// Paginate of N pages text
$ ( an ) . children ( '.' + paginateOfClassName ) . html ( ' of ' + iPages ) ;
// Current page numer input value
$ ( an ) . children ( '.' + paginateInputClassName ) . val ( iCurrentPage ) ;
}
}
}
} ;
} ;
} )( jQuery )