datatables-paging-0.1.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* API method to get paging information */
  2. $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
  3. {
  4. return {
  5. "iStart": oSettings._iDisplayStart,
  6. "iEnd": oSettings.fnDisplayEnd(),
  7. "iLength": oSettings._iDisplayLength,
  8. "iTotal": oSettings.fnRecordsTotal(),
  9. "iFilteredTotal": oSettings.fnRecordsDisplay(),
  10. "iPage": Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
  11. "iTotalPages": Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
  12. };
  13. }
  14. /* Bootstrap style pagination control */
  15. $.extend( $.fn.dataTableExt.oPagination, {
  16. "bootstrap": {
  17. "fnInit": function( oSettings, nPaging, fnDraw ) {
  18. var oLang = oSettings.oLanguage.oPaginate;
  19. var fnClickHandler = function ( e ) {
  20. e.preventDefault();
  21. if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
  22. fnDraw( oSettings );
  23. }
  24. };
  25. $(nPaging).addClass('pagination').append(
  26. '<ul>'+
  27. '<li class="prev disabled"><a href="#">&larr; '+oLang.sPrevious+'</a></li>'+
  28. '<li class="next disabled"><a href="#">'+oLang.sNext+' &rarr; </a></li>'+
  29. '</ul>'
  30. );
  31. var els = $('a', nPaging);
  32. $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
  33. $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
  34. },
  35. "fnUpdate": function ( oSettings, fnDraw ) {
  36. var iListLength = 5;
  37. var oPaging = oSettings.oInstance.fnPagingInfo();
  38. var an = oSettings.aanFeatures.p;
  39. var i, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
  40. if ( oPaging.iTotalPages < iListLength) {
  41. iStart = 1;
  42. iEnd = oPaging.iTotalPages;
  43. }
  44. else if ( oPaging.iPage <= iHalf ) {
  45. iStart = 1;
  46. iEnd = iListLength;
  47. } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
  48. iStart = oPaging.iTotalPages - iListLength + 1;
  49. iEnd = oPaging.iTotalPages;
  50. } else {
  51. iStart = oPaging.iPage - iHalf + 1;
  52. iEnd = iStart + iListLength - 1;
  53. }
  54. for ( i=0, iLen=an.length ; i<iLen ; i++ ) {
  55. // Remove the middle elements
  56. $('li:gt(0)', an[i]).filter(':not(:last)').remove();
  57. // Add the new list items and their event handlers
  58. for ( j=iStart ; j<=iEnd ; j++ ) {
  59. sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
  60. $('<li '+sClass+'><a href="#">'+j+'</a></li>')
  61. .insertBefore( $('li:last', an[i])[0] )
  62. .bind('click', function (e) {
  63. e.preventDefault();
  64. oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
  65. fnDraw( oSettings );
  66. } );
  67. }
  68. // Add / remove disabled classes from the static elements
  69. if ( oPaging.iPage === 0 ) {
  70. $('li:first', an[i]).addClass('disabled');
  71. } else {
  72. $('li:first', an[i]).removeClass('disabled');
  73. }
  74. if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
  75. $('li:last', an[i]).addClass('disabled');
  76. } else {
  77. $('li:last', an[i]).removeClass('disabled');
  78. }
  79. }
  80. }
  81. }
  82. } );