dataTables.foundation.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /*! DataTables Foundation integration
  2. * ©2011-2015 SpryMedia Ltd - datatables.net/license
  3. */
  4. /**
  5. * DataTables integration for Foundation. This requires Foundation 5 and
  6. * DataTables 1.10 or newer.
  7. *
  8. * This file sets the defaults and adds options to DataTables to style its
  9. * controls using Foundation. See http://datatables.net/manual/styling/foundation
  10. * for further information.
  11. */
  12. (function( factory ){
  13. if ( typeof define === 'function' && define.amd ) {
  14. // AMD
  15. define( ['jquery', 'datatables.net'], function ( $ ) {
  16. return factory( $, window, document );
  17. } );
  18. }
  19. else if ( typeof exports === 'object' ) {
  20. // CommonJS
  21. module.exports = function (root, $) {
  22. if ( ! root ) {
  23. root = window;
  24. }
  25. if ( ! $ || ! $.fn.dataTable ) {
  26. $ = require('datatables.net')(root, $).$;
  27. }
  28. return factory( $, root, root.document );
  29. };
  30. }
  31. else {
  32. // Browser
  33. factory( jQuery, window, document );
  34. }
  35. }(function( $, window, document, undefined ) {
  36. 'use strict';
  37. var DataTable = $.fn.dataTable;
  38. // Detect Foundation 5 / 6 as they have different element and class requirements
  39. var meta = $('<meta class="foundation-mq"/>').appendTo('head');
  40. DataTable.ext.foundationVersion = meta.css('font-family').match(/small|medium|large/) ? 6 : 5;
  41. meta.remove();
  42. $.extend( DataTable.ext.classes, {
  43. sWrapper: "dataTables_wrapper dt-foundation",
  44. sProcessing: "dataTables_processing panel"
  45. } );
  46. /* Set the defaults for DataTables initialisation */
  47. $.extend( true, DataTable.defaults, {
  48. dom:
  49. "<'row'<'small-6 columns'l><'small-6 columns'f>r>"+
  50. "t"+
  51. "<'row'<'small-6 columns'i><'small-6 columns'p>>",
  52. renderer: 'foundation'
  53. } );
  54. /* Page button renderer */
  55. DataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, buttons, page, pages ) {
  56. var api = new DataTable.Api( settings );
  57. var classes = settings.oClasses;
  58. var lang = settings.oLanguage.oPaginate;
  59. var aria = settings.oLanguage.oAria.paginate || {};
  60. var btnDisplay, btnClass;
  61. var tag;
  62. var v5 = DataTable.ext.foundationVersion === 5;
  63. var attach = function( container, buttons ) {
  64. var i, ien, node, button;
  65. var clickHandler = function ( e ) {
  66. e.preventDefault();
  67. if ( !$(e.currentTarget).hasClass('unavailable') && api.page() != e.data.action ) {
  68. api.page( e.data.action ).draw( 'page' );
  69. }
  70. };
  71. for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
  72. button = buttons[i];
  73. if ( $.isArray( button ) ) {
  74. attach( container, button );
  75. }
  76. else {
  77. btnDisplay = '';
  78. btnClass = '';
  79. tag = null;
  80. switch ( button ) {
  81. case 'ellipsis':
  82. btnDisplay = '&#x2026;';
  83. btnClass = 'unavailable disabled';
  84. tag = null;
  85. break;
  86. case 'first':
  87. btnDisplay = lang.sFirst;
  88. btnClass = button + (page > 0 ?
  89. '' : ' unavailable disabled');
  90. tag = page > 0 ? 'a' : null;
  91. break;
  92. case 'previous':
  93. btnDisplay = lang.sPrevious;
  94. btnClass = button + (page > 0 ?
  95. '' : ' unavailable disabled');
  96. tag = page > 0 ? 'a' : null;
  97. break;
  98. case 'next':
  99. btnDisplay = lang.sNext;
  100. btnClass = button + (page < pages-1 ?
  101. '' : ' unavailable disabled');
  102. tag = page < pages-1 ? 'a' : null;
  103. break;
  104. case 'last':
  105. btnDisplay = lang.sLast;
  106. btnClass = button + (page < pages-1 ?
  107. '' : ' unavailable disabled');
  108. tag = page < pages-1 ? 'a' : null;
  109. break;
  110. default:
  111. btnDisplay = button + 1;
  112. btnClass = page === button ?
  113. 'current' : '';
  114. tag = page === button ?
  115. null : 'a';
  116. break;
  117. }
  118. if ( v5 ) {
  119. tag = 'a';
  120. }
  121. if ( btnDisplay ) {
  122. node = $('<li>', {
  123. 'class': classes.sPageButton+' '+btnClass,
  124. 'aria-controls': settings.sTableId,
  125. 'aria-label': aria[ button ],
  126. 'tabindex': settings.iTabIndex,
  127. 'id': idx === 0 && typeof button === 'string' ?
  128. settings.sTableId +'_'+ button :
  129. null
  130. } )
  131. .append( tag ?
  132. $('<'+tag+'/>', {'href': '#'} ).html( btnDisplay ) :
  133. btnDisplay
  134. )
  135. .appendTo( container );
  136. settings.oApi._fnBindAction(
  137. node, {action: button}, clickHandler
  138. );
  139. }
  140. }
  141. }
  142. };
  143. attach(
  144. $(host).empty().html('<ul class="pagination"/>').children('ul'),
  145. buttons
  146. );
  147. };
  148. return DataTable;
  149. }));