140 lines
4.6 KiB
JavaScript
140 lines
4.6 KiB
JavaScript
|
(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));
|