Skip to content

Commit 75a45db

Browse files
committed
Merge remote-tracking branch 'remotes/origin/develop'
2 parents af373b4 + 7ee2622 commit 75a45db

File tree

4 files changed

+78
-31
lines changed

4 files changed

+78
-31
lines changed

js/dataTables.checkboxes.js

Lines changed: 74 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* jQuery DataTables Checkboxes (https://www.gyrocode.com/projects/jquery-datatables-checkboxes/)
33
* Checkboxes extension for jQuery DataTables
44
*
5-
* @version 1.2.14
5+
* @version 1.3.0
66
* @author Gyrocode LLC (https://www.gyrocode.com)
77
* @copyright (c) Gyrocode LLC
88
* @license MIT
@@ -69,9 +69,16 @@
6969
columns: [],
7070
data: {},
7171
dataDisabled: {},
72-
ignoreSelect: false
72+
ignoreSelect: false,
73+
infoEls: []
7374
};
7475

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+
7582
// Get settings object
7683
this.s.ctx = this.s.dt.settings()[0];
7784

@@ -126,29 +133,24 @@
126133
// OPTIONS
127134
//
128135

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;
133138

134139
if(ctx.aoColumns[i].sClass === ''){
135-
colOptions['className'] = 'dt-checkboxes-cell';
140+
ctx.aoColumns[i].sClass = 'dt-checkboxes-cell';
136141
} else {
137-
colOptions['className'] = ctx.aoColumns[i].sClass + ' dt-checkboxes-cell';
142+
ctx.aoColumns[i].sClass = ctx.aoColumns[i].sClass + ' dt-checkboxes-cell';
138143
}
139144

140145
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;
142148
}
143149

144150
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);
148152
}
149153

150-
DataTable.ext.internal._fnColumnOptions(ctx, i, colOptions);
151-
152154

153155
// WORKAROUND: Remove "sorting" class
154156
$colHeader.removeClass('sorting');
@@ -157,13 +159,17 @@
157159
$colHeader.off('.dt');
158160

159161
// 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+
){
161167
// WORKAROUND: Invalidate column data
162168
var cells = dt.cells('tr', i);
163169
cells.invalidate('data');
164170

165171
// WORKAROUND: Add required class to existing cells
166-
$(cells.nodes()).addClass(colOptions['className']);
172+
$(cells.nodes()).addClass(ctx.aoColumns[i].sClass);
167173
}
168174

169175

@@ -264,6 +270,18 @@
264270
$table.on('draw.dt.dtCheckboxes select.dt.dtCheckboxes deselect.dt.dtCheckboxes', function(){
265271
self.showInfoSelected();
266272
});
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+
}
267285
}
268286
}
269287

@@ -346,6 +364,32 @@
346364
}
347365
},
348366

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+
349393
// Handles DataTables initialization event
350394
onDataTablesInit: function(){
351395
var self = this;
@@ -563,7 +607,7 @@
563607
var self = this;
564608
var ctx = self.s.ctx;
565609

566-
var cellNodes = cells.nodes();
610+
var cellNodes = cells.nodes ? cells.nodes() : [ cells.node() ];
567611
if(cellNodes.length){
568612
$('input.dt-checkboxes', cellNodes).not(':disabled').prop('checked', isSelected);
569613

@@ -582,7 +626,7 @@
582626

583627
self.updateStateCheckboxes({ page: 'all', search: 'none' });
584628

585-
// If FixedColumns extension is enabled
629+
// If FixedColumns v3 extension is enabled
586630
if(ctx._oFixedColumns){
587631
// Use delay to let FixedColumns construct the header
588632
// before we update the "Select all" checkbox
@@ -641,7 +685,7 @@
641685
// Get cell
642686
var $cell = $(ctrl).closest('td');
643687

644-
// If cell is in a fixed column using FixedColumns extension
688+
// If cell is in a fixed column using FixedColumns v3 extension
645689
if($cell.parents('.DTFC_Cloned').length){
646690
cellSelector = dt.fixedColumns().cellIndex($cell);
647691

@@ -721,7 +765,7 @@
721765
var colIdx = null;
722766
var $th = $(ctrl).closest('th');
723767

724-
// If column is fixed using FixedColumns extension
768+
// If column is fixed using FixedColumns v3 extension
725769
if($th.parents('.DTFC_Cloned').length){
726770
var cellIdx = dt.fixedColumns().cellIndex($th);
727771
colIdx = cellIdx.column;
@@ -868,7 +912,7 @@
868912
var dt = self.s.dt;
869913
var ctx = self.s.ctx;
870914

871-
if ( ! ctx.aanFeatures.i ) {
915+
if (!ctx.oFeatures.bInfo) {
872916
return;
873917
}
874918

@@ -896,8 +940,12 @@
896940
) ) );
897941
};
898942

943+
var infoEls = (ctx.checkboxes.s.isDataTablesV1)
944+
? ctx.aanFeatures.i
945+
: ctx.checkboxes.s.infoEls;
946+
899947
// Internal knowledge of DataTables to loop over all information elements
900-
$.each( ctx.aanFeatures.i, function ( i, el ) {
948+
$.each(infoEls, function ( i, el ) {
901949
var $el = $(el);
902950

903951
var $output = $('<span class="select-info"/>');
@@ -939,7 +987,7 @@
939987
var dt = self.s.dt;
940988
var ctx = self.s.ctx;
941989

942-
// If FixedColumns extension is available
990+
// If FixedColumns v3 extension is available
943991
if(ctx._oFixedColumns){
944992
return dt.fixedColumns().cellIndex(cell);
945993

@@ -967,14 +1015,14 @@
9671015
return colIdx;
9681016
},
9691017

970-
// Updates fixed column if FixedColumns extension is enabled
1018+
// Updates fixed column if FixedColumns v3 extension is enabled
9711019
// and given column is inside a fixed column
9721020
updateFixedColumn: function(colIdx){
9731021
var self = this;
9741022
var dt = self.s.dt;
9751023
var ctx = self.s.ctx;
9761024

977-
// If FixedColumns extension is enabled
1025+
// If FixedColumns v3 extension is enabled
9781026
if(ctx._oFixedColumns){
9791027
var leftCols = ctx._oFixedColumns.s.iLeftColumns;
9801028
var rightCols = ctx.aoColumns.length - ctx._oFixedColumns.s.iRightColumns - 1;
@@ -1274,8 +1322,7 @@
12741322
* @name Checkboxes.version
12751323
* @static
12761324
*/
1277-
Checkboxes.version = '1.2.14';
1278-
1325+
Checkboxes.version = '1.3.0';
12791326

12801327

12811328
$.fn.DataTable.Checkboxes = Checkboxes;

0 commit comments

Comments
 (0)