|
2 | 2 | * jQuery DataTables Checkboxes (https://www.gyrocode.com/projects/jquery-datatables-checkboxes/)
|
3 | 3 | * Checkboxes extension for jQuery DataTables
|
4 | 4 | *
|
5 |
| - * @version 1.2.14 |
| 5 | + * @version 1.3.0 |
6 | 6 | * @author Gyrocode LLC (https://www.gyrocode.com)
|
7 | 7 | * @copyright (c) Gyrocode LLC
|
8 | 8 | * @license MIT
|
|
69 | 69 | columns: [],
|
70 | 70 | data: {},
|
71 | 71 | dataDisabled: {},
|
72 |
| - ignoreSelect: false |
| 72 | + ignoreSelect: false, |
| 73 | + infoEls: [] |
73 | 74 | };
|
74 | 75 |
|
| 76 | + // Determine whether DataTables v2 is being used |
| 77 | + this.s.isDataTablesV2 = DataTable.versionCheck('2'); |
| 78 | + |
| 79 | + // Determine whether DataTables v1 is being used |
| 80 | + this.s.isDataTablesV1 = DataTable.versionCheck('1') && !this.s.isDataTablesV2; |
| 81 | + |
75 | 82 | // Get settings object
|
76 | 83 | this.s.ctx = this.s.dt.settings()[0];
|
77 | 84 |
|
|
126 | 133 | // OPTIONS
|
127 | 134 | //
|
128 | 135 |
|
129 |
| - var colOptions = { |
130 |
| - 'searchable': false, |
131 |
| - 'orderable': false |
132 |
| - }; |
| 136 | + ctx.aoColumns[i].bSortable = ctx.aoColumns[i].orderable = false; |
| 137 | + ctx.aoColumns[i].bSearchable = ctx.aoColumns[i].searchable = false; |
133 | 138 |
|
134 | 139 | if(ctx.aoColumns[i].sClass === ''){
|
135 |
| - colOptions['className'] = 'dt-checkboxes-cell'; |
| 140 | + ctx.aoColumns[i].sClass = 'dt-checkboxes-cell'; |
136 | 141 | } else {
|
137 |
| - colOptions['className'] = ctx.aoColumns[i].sClass + ' dt-checkboxes-cell'; |
| 142 | + ctx.aoColumns[i].sClass = ctx.aoColumns[i].sClass + ' dt-checkboxes-cell'; |
138 | 143 | }
|
139 | 144 |
|
140 | 145 | if(ctx.aoColumns[i].sWidthOrig === null){
|
141 |
| - colOptions['width'] = '1%'; |
| 146 | + ctx.aoColumns[i].width = '1%'; |
| 147 | + ctx.aoColumns[i].sWidthOrig = ctx.aoColumns[i].width; |
142 | 148 | }
|
143 | 149 |
|
144 | 150 | if(ctx.aoColumns[i].mRender === null){
|
145 |
| - colOptions['render'] = function(){ |
146 |
| - return '<input type="checkbox" class="dt-checkboxes" autocomplete="off">'; |
147 |
| - }; |
| 151 | + self._fnColumnOptionsRender(ctx, i); |
148 | 152 | }
|
149 | 153 |
|
150 |
| - DataTable.ext.internal._fnColumnOptions(ctx, i, colOptions); |
151 |
| - |
152 | 154 |
|
153 | 155 | // WORKAROUND: Remove "sorting" class
|
154 | 156 | $colHeader.removeClass('sorting');
|
|
157 | 159 | $colHeader.off('.dt');
|
158 | 160 |
|
159 | 161 | // If table has data source other than Ajax
|
160 |
| - if(ctx.sAjaxSource === null){ |
| 162 | + if( |
| 163 | + (self.s.isDataTablesV1 && ctx.sAjaxSource === null) |
| 164 | + || ctx.ajax === null |
| 165 | + |
| 166 | + ){ |
161 | 167 | // WORKAROUND: Invalidate column data
|
162 | 168 | var cells = dt.cells('tr', i);
|
163 | 169 | cells.invalidate('data');
|
164 | 170 |
|
165 | 171 | // WORKAROUND: Add required class to existing cells
|
166 |
| - $(cells.nodes()).addClass(colOptions['className']); |
| 172 | + $(cells.nodes()).addClass(ctx.aoColumns[i].sClass); |
167 | 173 | }
|
168 | 174 |
|
169 | 175 |
|
|
264 | 270 | $table.on('draw.dt.dtCheckboxes select.dt.dtCheckboxes deselect.dt.dtCheckboxes', function(){
|
265 | 271 | self.showInfoSelected();
|
266 | 272 | });
|
| 273 | + |
| 274 | + if (self.s.isDataTablesV2) { |
| 275 | + // Update the table information element with selected item summary |
| 276 | + $table.on('info.dt.dtCheckboxes', function (e, ctx, node) { |
| 277 | + // Store the info node for updating on select / deselect |
| 278 | + if (!ctx.checkboxes.s.infoEls.includes(node)) { |
| 279 | + ctx.checkboxes.s.infoEls.push(node); |
| 280 | + } |
| 281 | + |
| 282 | + self.showInfoSelected(); |
| 283 | + }); |
| 284 | + } |
267 | 285 | }
|
268 | 286 | }
|
269 | 287 |
|
|
346 | 364 | }
|
347 | 365 | },
|
348 | 366 |
|
| 367 | + // Apply render options for a column |
| 368 | + _fnColumnOptionsRender: function (ctx, i){ |
| 369 | + var self = this; |
| 370 | + |
| 371 | + var _fnGetObjectDataFn = self.s.isDataTablesV1 |
| 372 | + ? DataTable.ext.internal._fnGetObjectDataFn |
| 373 | + : DataTable.util.get; |
| 374 | + |
| 375 | + ctx.aoColumns[i].mRender = ctx.aoColumns[i].render = function(){ |
| 376 | + return '<input type="checkbox" class="dt-checkboxes" autocomplete="off">'; |
| 377 | + }; |
| 378 | + |
| 379 | + ctx.aoColumns[i]._render = _fnGetObjectDataFn(ctx.aoColumns[i].mRender); |
| 380 | + |
| 381 | + var mDataSrc = ctx.aoColumns[i].mData; |
| 382 | + var mData = _fnGetObjectDataFn(mDataSrc); |
| 383 | + |
| 384 | + ctx.aoColumns[i].fnGetData = function (rowData, type, meta) { |
| 385 | + var innerData = mData(rowData, type, undefined, meta); |
| 386 | + |
| 387 | + return ctx.aoColumns[i]._render && type |
| 388 | + ? ctx.aoColumns[i]._render(innerData, type, rowData, meta) |
| 389 | + : innerData; |
| 390 | + }; |
| 391 | + }, |
| 392 | + |
349 | 393 | // Handles DataTables initialization event
|
350 | 394 | onDataTablesInit: function(){
|
351 | 395 | var self = this;
|
|
563 | 607 | var self = this;
|
564 | 608 | var ctx = self.s.ctx;
|
565 | 609 |
|
566 |
| - var cellNodes = cells.nodes(); |
| 610 | + var cellNodes = cells.nodes ? cells.nodes() : [ cells.node() ]; |
567 | 611 | if(cellNodes.length){
|
568 | 612 | $('input.dt-checkboxes', cellNodes).not(':disabled').prop('checked', isSelected);
|
569 | 613 |
|
|
582 | 626 |
|
583 | 627 | self.updateStateCheckboxes({ page: 'all', search: 'none' });
|
584 | 628 |
|
585 |
| - // If FixedColumns extension is enabled |
| 629 | + // If FixedColumns v3 extension is enabled |
586 | 630 | if(ctx._oFixedColumns){
|
587 | 631 | // Use delay to let FixedColumns construct the header
|
588 | 632 | // before we update the "Select all" checkbox
|
|
641 | 685 | // Get cell
|
642 | 686 | var $cell = $(ctrl).closest('td');
|
643 | 687 |
|
644 |
| - // If cell is in a fixed column using FixedColumns extension |
| 688 | + // If cell is in a fixed column using FixedColumns v3 extension |
645 | 689 | if($cell.parents('.DTFC_Cloned').length){
|
646 | 690 | cellSelector = dt.fixedColumns().cellIndex($cell);
|
647 | 691 |
|
|
721 | 765 | var colIdx = null;
|
722 | 766 | var $th = $(ctrl).closest('th');
|
723 | 767 |
|
724 |
| - // If column is fixed using FixedColumns extension |
| 768 | + // If column is fixed using FixedColumns v3 extension |
725 | 769 | if($th.parents('.DTFC_Cloned').length){
|
726 | 770 | var cellIdx = dt.fixedColumns().cellIndex($th);
|
727 | 771 | colIdx = cellIdx.column;
|
|
868 | 912 | var dt = self.s.dt;
|
869 | 913 | var ctx = self.s.ctx;
|
870 | 914 |
|
871 |
| - if ( ! ctx.aanFeatures.i ) { |
| 915 | + if (!ctx.oFeatures.bInfo) { |
872 | 916 | return;
|
873 | 917 | }
|
874 | 918 |
|
|
896 | 940 | ) ) );
|
897 | 941 | };
|
898 | 942 |
|
| 943 | + var infoEls = (ctx.checkboxes.s.isDataTablesV1) |
| 944 | + ? ctx.aanFeatures.i |
| 945 | + : ctx.checkboxes.s.infoEls; |
| 946 | + |
899 | 947 | // Internal knowledge of DataTables to loop over all information elements
|
900 |
| - $.each( ctx.aanFeatures.i, function ( i, el ) { |
| 948 | + $.each(infoEls, function ( i, el ) { |
901 | 949 | var $el = $(el);
|
902 | 950 |
|
903 | 951 | var $output = $('<span class="select-info"/>');
|
|
939 | 987 | var dt = self.s.dt;
|
940 | 988 | var ctx = self.s.ctx;
|
941 | 989 |
|
942 |
| - // If FixedColumns extension is available |
| 990 | + // If FixedColumns v3 extension is available |
943 | 991 | if(ctx._oFixedColumns){
|
944 | 992 | return dt.fixedColumns().cellIndex(cell);
|
945 | 993 |
|
|
967 | 1015 | return colIdx;
|
968 | 1016 | },
|
969 | 1017 |
|
970 |
| - // Updates fixed column if FixedColumns extension is enabled |
| 1018 | + // Updates fixed column if FixedColumns v3 extension is enabled |
971 | 1019 | // and given column is inside a fixed column
|
972 | 1020 | updateFixedColumn: function(colIdx){
|
973 | 1021 | var self = this;
|
974 | 1022 | var dt = self.s.dt;
|
975 | 1023 | var ctx = self.s.ctx;
|
976 | 1024 |
|
977 |
| - // If FixedColumns extension is enabled |
| 1025 | + // If FixedColumns v3 extension is enabled |
978 | 1026 | if(ctx._oFixedColumns){
|
979 | 1027 | var leftCols = ctx._oFixedColumns.s.iLeftColumns;
|
980 | 1028 | var rightCols = ctx.aoColumns.length - ctx._oFixedColumns.s.iRightColumns - 1;
|
|
1274 | 1322 | * @name Checkboxes.version
|
1275 | 1323 | * @static
|
1276 | 1324 | */
|
1277 |
| - Checkboxes.version = '1.2.14'; |
1278 |
| - |
| 1325 | + Checkboxes.version = '1.3.0'; |
1279 | 1326 |
|
1280 | 1327 |
|
1281 | 1328 | $.fn.DataTable.Checkboxes = Checkboxes;
|
|
0 commit comments