(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( ''+oLang.sPrevious+''+ ''+ ''+oLang.sNext+'' ); 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) ? ''+oSettings.fnFormatNumber(i)+'' : ''+oSettings.fnFormatNumber(i)+''; } /* Loop over each instance of the pager */ for ( i=0, iLen=an.length ; i