[issue #279] Added datatables pagination extension
This commit is contained in:
parent
c2dc8d9e38
commit
952c9e46ea
|
@ -0,0 +1,139 @@
|
|||
(function($, window, document, undefined) {
|
||||
$.extend( $.fn.DataTable.ext.oPagination, {
|
||||
"will_paginate_like": {
|
||||
/*
|
||||
* Function: oPagination.full_numbers.fnInit
|
||||
* Purpose: Initialise dom elements required for pagination with a list of the pages
|
||||
* Returns: -
|
||||
* Inputs: object:oSettings - dataTables settings object
|
||||
* node:nPaging - the DIV which contains this pagination control
|
||||
* function:fnCallbackDraw - draw function which must be called on update
|
||||
*/
|
||||
"fnInit": function ( oSettings, nPaging, fnCallbackDraw ) {
|
||||
var oLang = oSettings.oLanguage.oPaginate;
|
||||
var oClasses = oSettings.oClasses;
|
||||
var fnClickHandler = function ( e ) {
|
||||
if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
|
||||
{
|
||||
fnCallbackDraw( oSettings );
|
||||
}
|
||||
};
|
||||
|
||||
$(nPaging).append(
|
||||
'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a>'+
|
||||
'<span></span>'+
|
||||
'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a>'
|
||||
);
|
||||
var els = $('a', nPaging);
|
||||
var nPrev = els[0],
|
||||
nNext = els[1]
|
||||
|
||||
oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
|
||||
oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
|
||||
|
||||
/* ID the first elements only */
|
||||
if ( !oSettings.aanFeatures.p )
|
||||
{
|
||||
nPaging.id = oSettings.sTableId+'_paginate';
|
||||
nPrev.id =oSettings.sTableId+'_previous';
|
||||
nNext.id =oSettings.sTableId+'_next';
|
||||
}
|
||||
},
|
||||
|
||||
/*
|
||||
* Function: oPagination.full_numbers.fnUpdate
|
||||
* Purpose: Update the list of page buttons shows
|
||||
* Returns: -
|
||||
* Inputs: object:oSettings - dataTables settings object
|
||||
* function:fnCallbackDraw - draw function to call on page change
|
||||
*/
|
||||
"fnUpdate": function ( oSettings, fnCallbackDraw ) {
|
||||
if ( !oSettings.aanFeatures.p )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var iPageCount = $.fn.DataTable.ext.oPagination.iFullNumbersShowPages;
|
||||
var iPageCountHalf = Math.floor(iPageCount / 2);
|
||||
var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
|
||||
var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
|
||||
var sList = "";
|
||||
var iStartButton, iEndButton, i, iLen;
|
||||
var oClasses = oSettings.oClasses;
|
||||
var anButtons, anStatic, nPaginateList;
|
||||
var an = oSettings.aanFeatures.p;
|
||||
var fnBind = function (j) {
|
||||
oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
|
||||
/* Use the information in the element to jump to the required page */
|
||||
oSettings.oApi._fnPageChange( oSettings, e.data.page );
|
||||
fnCallbackDraw( oSettings );
|
||||
e.preventDefault();
|
||||
} );
|
||||
};
|
||||
|
||||
/* Pages calculation */
|
||||
if (iPages < iPageCount)
|
||||
{
|
||||
iStartButton = 1;
|
||||
iEndButton = iPages;
|
||||
}
|
||||
else if (iCurrentPage <= iPageCountHalf)
|
||||
{
|
||||
iStartButton = 1;
|
||||
iEndButton = iPageCount;
|
||||
}
|
||||
else if (iCurrentPage >= (iPages - iPageCountHalf))
|
||||
{
|
||||
iStartButton = iPages - iPageCount + 1;
|
||||
iEndButton = iPages;
|
||||
}
|
||||
else
|
||||
{
|
||||
iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
|
||||
iEndButton = iStartButton + iPageCount - 1;
|
||||
}
|
||||
|
||||
/* Build the dynamic list */
|
||||
for ( i=iStartButton ; i<=iEndButton ; i++ )
|
||||
{
|
||||
sList += (iCurrentPage !== i) ?
|
||||
'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+'">'+oSettings.fnFormatNumber(i)+'</a>' :
|
||||
'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButtonActive+'">'+oSettings.fnFormatNumber(i)+'</a>';
|
||||
}
|
||||
|
||||
/* Loop over each instance of the pager */
|
||||
for ( i=0, iLen=an.length ; i<iLen ; i++ )
|
||||
{
|
||||
if ( an[i].childNodes.length === 0 )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Build up the dynamic list forst - html and listeners */
|
||||
$('span:eq(0)', an[i])
|
||||
.html( sList )
|
||||
.children('a').each( fnBind );
|
||||
|
||||
/* Update the premanent botton's classes */
|
||||
anButtons = an[i].getElementsByTagName('a');
|
||||
anStatic = [
|
||||
anButtons[0], anButtons[anButtons.length-1]
|
||||
];
|
||||
|
||||
$(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled );
|
||||
$([anStatic[0]]).addClass(
|
||||
(iCurrentPage==1) ?
|
||||
oClasses.sPageButtonStaticDisabled :
|
||||
oClasses.sPageButton
|
||||
);
|
||||
$([anStatic[1]]).addClass(
|
||||
(iPages===0 || iCurrentPage===iPages || oSettings._iDisplayLength===-1) ?
|
||||
oClasses.sPageButtonStaticDisabled :
|
||||
oClasses.sPageButton
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} );
|
||||
}(jQuery, window, document, undefined));
|
Loading…
Reference in New Issue