datatables.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* Set the defaults for DataTables initialisation */
  2. $.extend( true, $.fn.dataTable.defaults, {
  3. "sDom": "<'row'<'col-sm-12'<'pull-right'f><'pull-left'l>r<'clearfix'>>>t<'row'<'col-sm-12'<'pull-left'i><'pull-right'p><'clearfix'>>>",
  4. "sPaginationType": "bootstrap",
  5. "oLanguage": {
  6. "sLengthMenu": "_MENU_ records per page",
  7. "sSearch": "Search "
  8. }
  9. } );
  10. /* Default class modification */
  11. $.extend( $.fn.dataTableExt.oStdClasses, {
  12. "sWrapper": "dataTables_wrapper form-inline",
  13. "sFilterInput": "form-control input-sm",
  14. "sLengthSelect": "form-control input-sm"
  15. } );
  16. /* API method to get paging information */
  17. $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
  18. {
  19. return {
  20. "iStart": oSettings._iDisplayStart,
  21. "iEnd": oSettings.fnDisplayEnd(),
  22. "iLength": oSettings._iDisplayLength,
  23. "iTotal": oSettings.fnRecordsTotal(),
  24. "iFilteredTotal": oSettings.fnRecordsDisplay(),
  25. "iPage": oSettings._iDisplayLength === -1 ?
  26. 0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
  27. "iTotalPages": oSettings._iDisplayLength === -1 ?
  28. 0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
  29. };
  30. };
  31. /* Bootstrap style pagination control */
  32. $.extend( $.fn.dataTableExt.oPagination, {
  33. "bootstrap": {
  34. "fnInit": function( oSettings, nPaging, fnDraw ) {
  35. var oLang = oSettings.oLanguage.oPaginate;
  36. var fnClickHandler = function ( e ) {
  37. e.preventDefault();
  38. if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
  39. fnDraw( oSettings );
  40. }
  41. };
  42. $(nPaging).append(
  43. '<ul class="pagination">'+
  44. '<li class="prev disabled"><a href="#"><i class="fal fa-angle-double-left icon-only"></i></a></li>'+
  45. '<li class="next disabled"><a href="#"><i class="fal fa-angle-double-right icon-only"></i></a></li>'+
  46. '</ul>'
  47. );
  48. var els = $('a', nPaging);
  49. $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
  50. $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
  51. },
  52. "fnUpdate": function ( oSettings, fnDraw ) {
  53. var iListLength = 5;
  54. var oPaging = oSettings.oInstance.fnPagingInfo();
  55. var an = oSettings.aanFeatures.p;
  56. var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
  57. if ( oPaging.iTotalPages < iListLength) {
  58. iStart = 1;
  59. iEnd = oPaging.iTotalPages;
  60. }
  61. else if ( oPaging.iPage <= iHalf ) {
  62. iStart = 1;
  63. iEnd = iListLength;
  64. } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
  65. iStart = oPaging.iTotalPages - iListLength + 1;
  66. iEnd = oPaging.iTotalPages;
  67. } else {
  68. iStart = oPaging.iPage - iHalf + 1;
  69. iEnd = iStart + iListLength - 1;
  70. }
  71. for ( i=0, ien=an.length ; i<ien ; i++ ) {
  72. $('li:gt(0)', an[i]).filter(':not(:last)').remove();
  73. for ( j=iStart ; j<=iEnd ; j++ ) {
  74. sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
  75. $('<li '+sClass+'><a href="#">'+j+'</a></li>')
  76. .insertBefore( $('li:last', an[i])[0] )
  77. .bind('click', function (e) {
  78. e.preventDefault();
  79. if ( oSettings.oApi._fnPageChange(oSettings, parseInt($('a', this).text(),10)-1) ) {
  80. fnDraw( oSettings );
  81. }
  82. } );
  83. }
  84. if ( oPaging.iPage === 0 ) {
  85. $('li:first', an[i]).addClass('disabled');
  86. } else {
  87. $('li:first', an[i]).removeClass('disabled');
  88. }
  89. if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
  90. $('li:last', an[i]).addClass('disabled');
  91. } else {
  92. $('li:last', an[i]).removeClass('disabled');
  93. }
  94. }
  95. }
  96. }
  97. });
  98. /*
  99. * TableTools Bootstrap compatibility
  100. * Required TableTools 2.1+
  101. */
  102. if ( $.fn.DataTable.TableTools ) {
  103. // Set the classes that TableTools uses to something suitable for Bootstrap
  104. $.extend( true, $.fn.DataTable.TableTools.classes, {
  105. "container": "DTTT btn-group",
  106. "buttons": {
  107. "normal": "btn",
  108. "disabled": "disabled"
  109. },
  110. "collection": {
  111. "container": "DTTT_dropdown dropdown-menu",
  112. "buttons": {
  113. "normal": "",
  114. "disabled": "disabled"
  115. }
  116. },
  117. "print": {
  118. "info": "DTTT_print_info modal"
  119. },
  120. "select": {
  121. "row": "active"
  122. }
  123. } );
  124. // Have the collection use a bootstrap compatible dropdown
  125. $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
  126. "collection": {
  127. "container": "ul",
  128. "button": "li",
  129. "liner": "a"
  130. }
  131. } );
  132. }