dataTables.tailwindcss.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /*! DataTables Tailwind CSS integration
  2. */
  3. (function( factory ){
  4. if ( typeof define === 'function' && define.amd ) {
  5. // AMD
  6. define( ['jquery', 'datatables.net'], function ( $ ) {
  7. return factory( $, window, document );
  8. } );
  9. }
  10. else if ( typeof exports === 'object' ) {
  11. // CommonJS
  12. var jq = require('jquery');
  13. var cjsRequires = function (root, $) {
  14. if ( ! $.fn.dataTable ) {
  15. require('datatables.net')(root, $);
  16. }
  17. };
  18. if (typeof window === 'undefined') {
  19. module.exports = function (root, $) {
  20. if ( ! root ) {
  21. // CommonJS environments without a window global must pass a
  22. // root. This will give an error otherwise
  23. root = window;
  24. }
  25. if ( ! $ ) {
  26. $ = jq( root );
  27. }
  28. cjsRequires( root, $ );
  29. return factory( $, root, root.document );
  30. };
  31. }
  32. else {
  33. cjsRequires( window, jq );
  34. module.exports = factory( jq, window, window.document );
  35. }
  36. }
  37. else {
  38. // Browser
  39. factory( jQuery, window, document );
  40. }
  41. }(function( $, window, document ) {
  42. 'use strict';
  43. var DataTable = $.fn.dataTable;
  44. /*
  45. * This is a tech preview of Tailwind CSS integration with DataTables.
  46. */
  47. // Set the defaults for DataTables initialisation
  48. $.extend( true, DataTable.defaults, {
  49. renderer: 'tailwindcss'
  50. } );
  51. // Default class modification
  52. $.extend( true, DataTable.ext.classes, {
  53. container: "dt-container dt-tailwindcss",
  54. search: {
  55. input: "border placeholder-gray-500 ml-2 px-3 py-2 rounded-lg border-gray-200 focus:border-blue-500 focus:ring focus:ring-blue-500 focus:ring-opacity-50 dark:bg-gray-800 dark:border-gray-600 dark:focus:border-blue-500 dark:placeholder-gray-400"
  56. },
  57. length: {
  58. select: "border px-3 py-2 rounded-lg border-gray-200 focus:border-blue-500 focus:ring focus:ring-blue-500 focus:ring-opacity-50 dark:bg-gray-800 dark:border-gray-600 dark:focus:border-blue-500"
  59. },
  60. processing: {
  61. container: "dt-processing"
  62. },
  63. paging: {
  64. active: 'font-semibold bg-gray-100 dark:bg-gray-700/75',
  65. notActive: 'bg-white dark:bg-gray-800',
  66. button: 'relative inline-flex justify-center items-center space-x-2 border px-4 py-2 -mr-px leading-6 hover:z-10 focus:z-10 active:z-10 border-gray-200 active:border-gray-200 active:shadow-none dark:border-gray-700 dark:active:border-gray-700',
  67. first: 'rounded-l-lg',
  68. last: 'rounded-r-lg',
  69. enabled: 'text-gray-800 hover:text-gray-900 hover:border-gray-300 hover:shadow-sm focus:ring focus:ring-gray-300 focus:ring-opacity-25 dark:text-gray-300 dark:hover:border-gray-600 dark:hover:text-gray-200 dark:focus:ring-gray-600 dark:focus:ring-opacity-40',
  70. notEnabled: 'text-gray-300 dark:text-gray-600'
  71. },
  72. table: 'dataTable min-w-full text-sm align-middle whitespace-nowrap',
  73. thead: {
  74. row: 'border-b border-gray-100 dark:border-gray-700/50',
  75. cell: 'px-3 py-4 text-gray-900 bg-gray-100/75 font-semibold text-left dark:text-gray-50 dark:bg-gray-700/25'
  76. },
  77. tbody: {
  78. row: 'even:bg-gray-50 dark:even:bg-gray-900/50',
  79. cell: 'p-3'
  80. },
  81. tfoot: {
  82. row: 'even:bg-gray-50 dark:even:bg-gray-900/50',
  83. cell: 'p-3 text-left'
  84. },
  85. } );
  86. DataTable.ext.renderer.pagingButton.tailwindcss = function (settings, buttonType, content, active, disabled) {
  87. var classes = settings.oClasses.paging;
  88. var btnClasses = [classes.button];
  89. btnClasses.push(active ? classes.active : classes.notActive);
  90. btnClasses.push(disabled ? classes.notEnabled : classes.enabled);
  91. var a = $('<a>', {
  92. 'href': disabled ? null : '#',
  93. 'class': btnClasses.join(' ')
  94. })
  95. .html(content);
  96. return {
  97. display: a,
  98. clicker: a
  99. };
  100. };
  101. DataTable.ext.renderer.pagingContainer.tailwindcss = function (settings, buttonEls) {
  102. var classes = settings.oClasses.paging;
  103. buttonEls[0].addClass(classes.first);
  104. buttonEls[buttonEls.length -1].addClass(classes.last);
  105. return $('<ul/>').addClass('pagination').append(buttonEls);
  106. };
  107. DataTable.ext.renderer.layout.tailwindcss = function ( settings, container, items ) {
  108. var row = $( '<div/>', {
  109. "class": items.full ?
  110. 'grid grid-cols-1 gap-4 mb-4' :
  111. 'grid grid-cols-2 gap-4 mb-4'
  112. } )
  113. .appendTo( container );
  114. DataTable.ext.renderer.layout._forLayoutRow(items, function (key, val) {
  115. var klass;
  116. // Apply start / end (left / right when ltr) margins
  117. if (val.table) {
  118. klass = 'col-span-2';
  119. }
  120. else if (key === 'start') {
  121. klass = 'justify-self-start';
  122. }
  123. else if (key === 'end') {
  124. klass = 'col-start-2 justify-self-end';
  125. }
  126. else {
  127. klass = 'col-span-2 justify-self-center';
  128. }
  129. $( '<div/>', {
  130. id: val.id || null,
  131. "class": klass + ' ' + (val.className || '')
  132. } )
  133. .append( val.contents )
  134. .appendTo( row );
  135. } );
  136. };
  137. return DataTable;
  138. }));