datatables.net-select 1.7.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- /*! Select for DataTables 1.7.0
1
+ /*! Select for DataTables 2.0.0
2
2
  * © SpryMedia Ltd - datatables.net/license/mit
3
3
  */
4
4
 
@@ -43,7 +43,7 @@
43
43
  // Browser
44
44
  factory( jQuery, window, document );
45
45
  }
46
- }(function( $, window, document, undefined ) {
46
+ }(function( $, window, document ) {
47
47
  'use strict';
48
48
  var DataTable = $.fn.dataTable;
49
49
 
@@ -52,11 +52,15 @@ var DataTable = $.fn.dataTable;
52
52
  // Version information for debugger
53
53
  DataTable.select = {};
54
54
 
55
- DataTable.select.version = '1.7.0';
55
+ DataTable.select.version = '2.0.0';
56
56
 
57
57
  DataTable.select.init = function (dt) {
58
58
  var ctx = dt.settings()[0];
59
59
 
60
+ if (!DataTable.versionCheck('2')) {
61
+ throw 'Warning: Select requires DataTables 2 or newer';
62
+ }
63
+
60
64
  if (ctx._select) {
61
65
  return;
62
66
  }
@@ -121,9 +125,12 @@ DataTable.select.init = function (dt) {
121
125
  var info = true;
122
126
  var selector = 'td, th';
123
127
  var className = 'selected';
128
+ var headerCheckbox = true;
124
129
  var setStyle = false;
125
130
 
126
- ctx._select = {};
131
+ ctx._select = {
132
+ infoEls: []
133
+ };
127
134
 
128
135
  // Initialisation customisations
129
136
  if (opts === true) {
@@ -167,6 +174,10 @@ DataTable.select.init = function (dt) {
167
174
  if (opts.className !== undefined) {
168
175
  className = opts.className;
169
176
  }
177
+
178
+ if (opts.headerCheckbox !== undefined) {
179
+ headerCheckbox = opts.headerCheckbox;
180
+ }
170
181
  }
171
182
 
172
183
  dt.select.selector(selector);
@@ -177,27 +188,21 @@ DataTable.select.init = function (dt) {
177
188
  dt.select.info(info);
178
189
  ctx._select.className = className;
179
190
 
180
- // Sort table based on selected rows. Requires Select Datatables extension
181
- $.fn.dataTable.ext.order['select-checkbox'] = function (settings, col) {
182
- return this.api()
183
- .column(col, { order: 'index' })
184
- .nodes()
185
- .map(function (td) {
186
- if (settings._select.items === 'row') {
187
- return $(td).parent().hasClass(settings._select.className);
188
- }
189
- else if (settings._select.items === 'cell') {
190
- return $(td).hasClass(settings._select.className);
191
- }
192
- return false;
193
- });
194
- };
195
-
196
191
  // If the init options haven't enabled select, but there is a selectable
197
192
  // class name, then enable
198
193
  if (!setStyle && $(dt.table().node()).hasClass('selectable')) {
199
194
  dt.select.style('os');
200
195
  }
196
+
197
+ // Insert a checkbox into the header if needed - might need to wait
198
+ // for init complete, or it might already be done
199
+ if (headerCheckbox) {
200
+ initCheckboxHeader(dt);
201
+
202
+ dt.on('init', function () {
203
+ initCheckboxHeader(dt);
204
+ });
205
+ }
201
206
  };
202
207
 
203
208
  /*
@@ -249,6 +254,7 @@ The `_select` object contains the following properties:
249
254
  on the row
250
255
  info:boolean - If the selection summary should be shown in the table
251
256
  information elements
257
+ infoEls:element[] - List of HTML elements with info elements for a table
252
258
  }
253
259
  ```
254
260
 
@@ -433,10 +439,10 @@ function enableMouseSelection(dt) {
433
439
  }
434
440
 
435
441
  var ctx = dt.settings()[0];
436
- var wrapperClass = dt.settings()[0].oClasses.sWrapper.trim().replace(/ +/g, '.');
442
+ var container = dt.table().container();
437
443
 
438
444
  // Ignore clicks inside a sub-table
439
- if ($(e.target).closest('div.' + wrapperClass)[0] != dt.table().container()) {
445
+ if ($(e.target).closest('div.dt-container')[0] != container) {
440
446
  return;
441
447
  }
442
448
 
@@ -534,14 +540,8 @@ function eventTrigger(api, type, args, any) {
534
540
  * @param {DataTable.Api} api DataTable to update
535
541
  * @private
536
542
  */
537
- function info(api) {
538
- var ctx = api.settings()[0];
539
-
540
- if (!ctx._select.info || !ctx.aanFeatures.i) {
541
- return;
542
- }
543
-
544
- if (api.select.style() === 'api') {
543
+ function info(api, node) {
544
+ if (api.select.style() === 'api' || api.select.info() === false) {
545
545
  return;
546
546
  }
547
547
 
@@ -561,22 +561,81 @@ function info(api) {
561
561
  );
562
562
  };
563
563
 
564
- // Internal knowledge of DataTables to loop over all information elements
565
- $.each(ctx.aanFeatures.i, function (i, el) {
566
- el = $(el);
564
+ var el = $(node);
565
+ var output = $('<span class="select-info"/>');
567
566
 
568
- var output = $('<span class="select-info"/>');
569
- add(output, 'row', rows);
570
- add(output, 'column', columns);
571
- add(output, 'cell', cells);
567
+ add(output, 'row', rows);
568
+ add(output, 'column', columns);
569
+ add(output, 'cell', cells);
572
570
 
573
- var exisiting = el.children('span.select-info');
574
- if (exisiting.length) {
575
- exisiting.remove();
576
- }
571
+ var existing = el.children('span.select-info');
572
+
573
+ if (existing.length) {
574
+ existing.remove();
575
+ }
577
576
 
578
- if (output.text() !== '') {
579
- el.append(output);
577
+ if (output.text() !== '') {
578
+ el.append(output);
579
+ }
580
+ }
581
+
582
+ /**
583
+ * Add a checkbox to the header for checkbox columns, allowing all rows to
584
+ * be selected, deselected or just to show the state.
585
+ *
586
+ * @param {*} dt API
587
+ */
588
+ function initCheckboxHeader( dt ) {
589
+ // Find any checkbox column(s)
590
+ dt.columns('.dt-select').every(function () {
591
+ var header = this.header();
592
+
593
+ if (! $('input', header).length) {
594
+ // If no checkbox yet, insert one
595
+ var input = $('<input>')
596
+ .attr({
597
+ class: 'dt-select-checkbox',
598
+ type: 'checkbox',
599
+ 'aria-label': dt.i18n('select.aria.headerCheckbox') || 'Select all rows'
600
+ })
601
+ .appendTo(header)
602
+ .on('change', function () {
603
+ if (this.checked) {
604
+ dt.rows({search: 'applied'}).select();
605
+ }
606
+ else {
607
+ dt.rows({selected: true}).deselect();
608
+ }
609
+ })
610
+ .on('click', function (e) {
611
+ e.stopPropagation();
612
+ });
613
+
614
+ // Update the header checkbox's state when the selection in the
615
+ // table changes
616
+ dt.on('draw select deselect', function (e, pass, type) {
617
+ if (type === 'row' || ! type) {
618
+ var count = dt.rows({selected: true}).count();
619
+ var search = dt.rows({search: 'applied', selected: true}).count();
620
+ var available = dt.rows({search: 'applied'}).count();
621
+
622
+ if (search && search <= count && search === available) {
623
+ input
624
+ .prop('checked', true)
625
+ .prop('indeterminate', false);
626
+ }
627
+ else if (search === 0 && count === 0) {
628
+ input
629
+ .prop('checked', false)
630
+ .prop('indeterminate', false);
631
+ }
632
+ else {
633
+ input
634
+ .prop('checked', false)
635
+ .prop('indeterminate', true);
636
+ }
637
+ }
638
+ });
580
639
  }
581
640
  });
582
641
  }
@@ -602,8 +661,7 @@ function init(ctx) {
602
661
  // This method of attaching to `aoRowCreatedCallback` is a hack until
603
662
  // DataTables has proper events for row manipulation If you are reviewing
604
663
  // this code to create your own plug-ins, please do not do this!
605
- ctx.aoRowCreatedCallback.push({
606
- fn: function (row, data, index) {
664
+ ctx.aoRowCreatedCallback.push(function (row, data, index) {
607
665
  var i, ien;
608
666
  var d = ctx.aoData[index];
609
667
 
@@ -622,9 +680,8 @@ function init(ctx) {
622
680
  $(d.anCells[i]).addClass(ctx._select.className);
623
681
  }
624
682
  }
625
- },
626
- sName: 'select-deferRender'
627
- });
683
+ }
684
+ );
628
685
 
629
686
  // On Ajax reload we want to reselect all rows which are currently selected,
630
687
  // if there is an rowId (i.e. a unique value to identify each row with)
@@ -668,8 +725,20 @@ function init(ctx) {
668
725
  });
669
726
 
670
727
  // Update the table information element with selected item summary
671
- api.on('draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt', function () {
672
- info(api);
728
+ api.on('info.dt', function (e, ctx, node) {
729
+ // Store the info node for updating on select / deselect
730
+ if (!ctx._select.infoEls.includes(node)) {
731
+ ctx._select.infoEls.push(node);
732
+ }
733
+
734
+ info(api, node);
735
+ });
736
+
737
+ api.on('select.dtSelect.dt deselect.dtSelect.dt', function () {
738
+ ctx._select.infoEls.forEach(function (el) {
739
+ info(api, el);
740
+ });
741
+
673
742
  api.state.save();
674
743
  });
675
744
 
@@ -697,13 +766,13 @@ function init(ctx) {
697
766
  function rowColumnRange(dt, type, idx, last) {
698
767
  // Add a range of rows from the last selected row to this one
699
768
  var indexes = dt[type + 's']({ search: 'applied' }).indexes();
700
- var idx1 = $.inArray(last, indexes);
701
- var idx2 = $.inArray(idx, indexes);
769
+ var idx1 = indexes.indexOf(last);
770
+ var idx2 = indexes.indexOf(idx);
702
771
 
703
772
  if (!dt[type + 's']({ selected: true }).any() && idx1 === -1) {
704
773
  // select from top to here - slightly odd, but both Windows and Mac OS
705
774
  // do this
706
- indexes.splice($.inArray(idx, indexes) + 1, indexes.length);
775
+ indexes.splice(indexes.indexOf(idx) + 1, indexes.length);
707
776
  }
708
777
  else {
709
778
  // reverse so we can shift click 'up' as well as down
@@ -723,7 +792,7 @@ function rowColumnRange(dt, type, idx, last) {
723
792
  }
724
793
  else {
725
794
  // Deselect range - need to keep the clicked on row selected
726
- indexes.splice($.inArray(idx, indexes), 1);
795
+ indexes.splice(indexes.indexOf(idx), 1);
727
796
  dt[type + 's'](indexes).deselect();
728
797
  }
729
798
  }
@@ -850,8 +919,10 @@ $.each(
850
919
  data = settings[o.prop][indexes[i]];
851
920
 
852
921
  if (
853
- (selected === true && data._select_selected === true) ||
854
- (selected === false && !data._select_selected)
922
+ data && (
923
+ (selected === true && data._select_selected === true) ||
924
+ (selected === false && !data._select_selected)
925
+ )
855
926
  ) {
856
927
  out.push(indexes[i]);
857
928
  }
@@ -875,11 +946,13 @@ DataTable.ext.selector.cell.push(function (settings, opts, cells) {
875
946
  rowData = settings.aoData[cells[i].row];
876
947
 
877
948
  if (
878
- (selected === true &&
879
- rowData._selected_cells &&
880
- rowData._selected_cells[cells[i].column] === true) ||
881
- (selected === false &&
882
- (!rowData._selected_cells || !rowData._selected_cells[cells[i].column]))
949
+ rowData && (
950
+ (selected === true &&
951
+ rowData._selected_cells &&
952
+ rowData._selected_cells[cells[i].column] === true) ||
953
+ (selected === false &&
954
+ (!rowData._selected_cells || !rowData._selected_cells[cells[i].column]))
955
+ )
883
956
  ) {
884
957
  out.push(cells[i]);
885
958
  }
@@ -994,6 +1067,17 @@ apiRegister('select.selector()', function (selector) {
994
1067
  });
995
1068
  });
996
1069
 
1070
+ apiRegister('select.last()', function (set) {
1071
+ let ctx = this.context[0];
1072
+
1073
+ if (set) {
1074
+ ctx._select_lastCell = set;
1075
+ return this;
1076
+ }
1077
+
1078
+ return ctx._select_lastCell;
1079
+ });
1080
+
997
1081
  apiRegisterPlural('rows().select()', 'row().select()', function (select) {
998
1082
  var api = this;
999
1083
 
@@ -1004,8 +1088,26 @@ apiRegisterPlural('rows().select()', 'row().select()', function (select) {
1004
1088
  this.iterator('row', function (ctx, idx) {
1005
1089
  clear(ctx);
1006
1090
 
1007
- ctx.aoData[idx]._select_selected = true;
1008
- $(ctx.aoData[idx].nTr).addClass(ctx._select.className);
1091
+ // There is a good amount of knowledge of DataTables internals in
1092
+ // this function. It _could_ be done without that, but it would hurt
1093
+ // performance (or DT would need new APIs for this work)
1094
+ var dtData = ctx.aoData[idx];
1095
+ var dtColumns = ctx.aoColumns;
1096
+
1097
+ $(dtData.nTr).addClass(ctx._select.className);
1098
+ dtData._select_selected = true;
1099
+
1100
+ for (var i=0 ; i<dtColumns.length ; i++) {
1101
+ var col = dtColumns[i];
1102
+
1103
+ if (col.sType === 'select-checkbox') {
1104
+ // Make sure the checkbox shows the right state
1105
+ $('input.dt-select-checkbox', dtData.anCells[i]).prop('checked', true);
1106
+
1107
+ // Invalidate the sort data for this column
1108
+ dtData._aSortData[i] = null;
1109
+ }
1110
+ }
1009
1111
  });
1010
1112
 
1011
1113
  this.iterator('table', function (ctx, i) {
@@ -1110,9 +1212,25 @@ apiRegisterPlural('rows().deselect()', 'row().deselect()', function () {
1110
1212
  var api = this;
1111
1213
 
1112
1214
  this.iterator('row', function (ctx, idx) {
1113
- ctx.aoData[idx]._select_selected = false;
1215
+ // Like the select action, this has a lot of knowledge about DT internally
1216
+ var dtData = ctx.aoData[idx];
1217
+ var dtColumns = ctx.aoColumns;
1218
+
1219
+ $(dtData.nTr).removeClass(ctx._select.className);
1220
+ dtData._select_selected = false;
1114
1221
  ctx._select_lastCell = null;
1115
- $(ctx.aoData[idx].nTr).removeClass(ctx._select.className);
1222
+
1223
+ for (var i=0 ; i<dtColumns.length ; i++) {
1224
+ var col = dtColumns[i];
1225
+
1226
+ if (col.sType === 'select-checkbox') {
1227
+ // Make sure the checkbox shows the right state
1228
+ $('input.dt-select-checkbox', dtData.anCells[i]).prop('checked', false);
1229
+
1230
+ // Invalidate the sort data for this column
1231
+ dtData._aSortData[i] = null;
1232
+ }
1233
+ }
1116
1234
  });
1117
1235
 
1118
1236
  this.iterator('table', function (ctx, i) {
@@ -1198,15 +1316,15 @@ function namespacedEvents(config) {
1198
1316
  }
1199
1317
 
1200
1318
  function enabled(dt, config) {
1201
- if ($.inArray('rows', config.limitTo) !== -1 && dt.rows({ selected: true }).any()) {
1319
+ if (config.limitTo.indexOf('rows') !== -1 && dt.rows({ selected: true }).any()) {
1202
1320
  return true;
1203
1321
  }
1204
1322
 
1205
- if ($.inArray('columns', config.limitTo) !== -1 && dt.columns({ selected: true }).any()) {
1323
+ if (config.limitTo.indexOf('columns') !== -1 && dt.columns({ selected: true }).any()) {
1206
1324
  return true;
1207
1325
  }
1208
1326
 
1209
- if ($.inArray('cells', config.limitTo) !== -1 && dt.cells({ selected: true }).any()) {
1327
+ if (config.limitTo.indexOf('cells') !== -1 && dt.cells({ selected: true }).any()) {
1210
1328
  return true;
1211
1329
  }
1212
1330
 
@@ -1306,34 +1424,23 @@ $.extend(DataTable.ext.buttons, {
1306
1424
  showSelected: {
1307
1425
  text: i18n('showSelected', 'Show only selected'),
1308
1426
  className: 'buttons-show-selected',
1309
- action: function (e, dt, node, conf) {
1310
- // Works by having a filtering function which will reduce to the selected
1311
- // items only. So we can re-reference the function it gets stored in the
1312
- // `conf` object
1313
- if (conf._filter) {
1314
- var idx = DataTable.ext.search.indexOf(conf._filter);
1315
-
1316
- if (idx !== -1) {
1317
- DataTable.ext.search.splice(idx, 1);
1318
- conf._filter = null;
1319
- }
1427
+ action: function (e, dt) {
1428
+ if (dt.search.fixed('dt-select')) {
1429
+ // Remove existing function
1430
+ dt.search.fixed('dt-select', null);
1320
1431
 
1321
1432
  this.active(false);
1322
1433
  }
1323
1434
  else {
1324
- var fn = function (s, data, idx) {
1325
- // Need to be sure we are operating on our table!
1326
- if (s !== dt.settings()[0]) {
1327
- return true;
1328
- }
1329
-
1330
- let row = s.aoData[idx];
1331
-
1332
- return row._select_selected;
1333
- };
1334
-
1335
- conf._filter = fn;
1336
- DataTable.ext.search.push(fn);
1435
+ // Use a fixed filtering function to match on selected rows
1436
+ // This needs to reference the internal aoData since that is
1437
+ // where Select stores its reference for the selected state
1438
+ var dataSrc = dt.settings()[0].aoData;
1439
+
1440
+ dt.search.fixed('dt-select', function (text, data, idx) {
1441
+ // _select_selected is set by Select on the data object for the row
1442
+ return dataSrc[idx]._select_selected;
1443
+ });
1337
1444
 
1338
1445
  this.active(true);
1339
1446
  }
@@ -1362,6 +1469,74 @@ $.each(['Row', 'Column', 'Cell'], function (i, item) {
1362
1469
  };
1363
1470
  });
1364
1471
 
1472
+ DataTable.type('select-checkbox', {
1473
+ className: 'dt-select',
1474
+ detect: function (data) {
1475
+ // Rendering function will tell us if it is a checkbox type
1476
+ return data === 'select-checkbox' ? data : false;
1477
+ },
1478
+ order: {
1479
+ pre: function (d) {
1480
+ return d === 'X' ? -1 : 0;
1481
+ }
1482
+ }
1483
+ });
1484
+
1485
+ $.extend(true, DataTable.defaults.oLanguage, {
1486
+ select: {
1487
+ aria: {
1488
+ rowCheckbox: 'Select row'
1489
+ }
1490
+ }
1491
+ });
1492
+
1493
+ DataTable.render.select = function (valueProp, nameProp) {
1494
+ var valueFn = valueProp ? DataTable.util.get(valueProp) : null;
1495
+ var nameFn = nameProp ? DataTable.util.get(nameProp) : null;
1496
+
1497
+ return function (data, type, row, meta) {
1498
+ var dtRow = meta.settings.aoData[meta.row];
1499
+ var selected = dtRow._select_selected;
1500
+ var ariaLabel = meta.settings.oLanguage.select.aria.rowCheckbox;
1501
+
1502
+ if (type === 'display') {
1503
+ return $('<input>')
1504
+ .attr({
1505
+ 'aria-label': ariaLabel,
1506
+ class: 'dt-select-checkbox',
1507
+ name: nameFn ? nameFn(row) : null,
1508
+ type: 'checkbox',
1509
+ value: valueFn ? valueFn(row) : null,
1510
+ checked: selected
1511
+ })[0];
1512
+ }
1513
+ else if (type === 'type') {
1514
+ return 'select-checkbox';
1515
+ }
1516
+ else if (type === 'filter') {
1517
+ return '';
1518
+ }
1519
+
1520
+ return selected ? 'X' : '';
1521
+ }
1522
+ }
1523
+
1524
+ // Legacy checkbox ordering
1525
+ DataTable.ext.order['select-checkbox'] = function (settings, col) {
1526
+ return this.api()
1527
+ .column(col, { order: 'index' })
1528
+ .nodes()
1529
+ .map(function (td) {
1530
+ if (settings._select.items === 'row') {
1531
+ return $(td).parent().hasClass(settings._select.className);
1532
+ }
1533
+ else if (settings._select.items === 'cell') {
1534
+ return $(td).hasClass(settings._select.className);
1535
+ }
1536
+ return false;
1537
+ });
1538
+ };
1539
+
1365
1540
  $.fn.DataTable.select = DataTable.select;
1366
1541
 
1367
1542
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -1,4 +1,4 @@
1
- /*! Select for DataTables 1.7.0
1
+ /*! Select for DataTables 2.0.0
2
2
  * © SpryMedia Ltd - datatables.net/license/mit
3
3
  */
4
- !function(l){var s,c;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return l(e,window,document)}):"object"==typeof exports?(s=require("jquery"),c=function(e,t){t.fn.dataTable||require("datatables.net")(e,t)},"undefined"==typeof window?module.exports=function(e,t){return e=e||window,t=t||s(e),c(e,t),l(t,e,e.document)}:(c(window,s),module.exports=l(s,window,window.document))):l(jQuery,window,document)}(function(m,i,e,h){"use strict";var _=m.fn.dataTable;function r(n,e,t){function l(t,l){l<t&&(e=l,l=t,t=e);var e,s=!1;return n.columns(":visible").indexes().filter(function(e){return e===t&&(s=!0),e===l?!(s=!1):s})}function s(t,l){var e,s=n.rows({search:"applied"}).indexes(),c=(s.indexOf(t)>s.indexOf(l)&&(e=l,l=t,t=e),!1);return s.filter(function(e){return e===t&&(c=!0),e===l?!(c=!1):c})}var c,t=n.cells({selected:!0}).any()||t?(c=l(t.column,e.column),s(t.row,e.row)):(c=l(0,e.column),s(0,e.row)),t=n.cells(t,c).flatten();n.cells(e,{selected:!0}).any()?n.cells(t).deselect():n.cells(t).select()}function s(e){var t=e.settings()[0]._select.selector;m(e.table().container()).off("mousedown.dtSelect",t).off("mouseup.dtSelect",t).off("click.dtSelect",t),m("body").off("click.dtSelect"+p(e.table().node()))}function c(o){var a,t=m(o.table().container()),l=o.settings()[0],s=l._select.selector;t.on("mousedown.dtSelect",s,function(e){(e.shiftKey||e.metaKey||e.ctrlKey)&&t.css("-moz-user-select","none").one("selectstart.dtSelect",s,function(){return!1}),i.getSelection&&(a=i.getSelection())}).on("mouseup.dtSelect",s,function(){t.css("-moz-user-select","")}).on("click.dtSelect",s,function(e){var t,l=o.select.items();if(a){var s=i.getSelection();if((!s.anchorNode||m(s.anchorNode).closest("table")[0]===o.table().node())&&s!==a)return}var c,s=o.settings()[0],n=o.settings()[0].oClasses.sWrapper.trim().replace(/ +/g,".");m(e.target).closest("div."+n)[0]==o.table().container()&&(n=o.cell(m(e.target).closest("td, th"))).any()&&(c=m.Event("user-select.dt"),u(o,c,[l,n,e]),c.isDefaultPrevented()||(c=n.index(),"row"===l?(t=c.row,w(e,o,s,"row",t)):"column"===l?(t=n.index().column,w(e,o,s,"column",t)):"cell"===l&&(t=n.index(),w(e,o,s,"cell",t)),s._select_lastCell=c))}),m("body").on("click.dtSelect"+p(o.table().node()),function(e){var t;!l._select.blurable||m(e.target).parents().filter(o.table().container()).length||0===m(e.target).parents("html").length||m(e.target).parents("div.DTE").length||(t=m.Event("select-blur.dt"),u(o,t,[e.target,e]),t.isDefaultPrevented()||f(l,!0))})}function u(e,t,l,s){s&&!e.flatten().length||("string"==typeof t&&(t+=".dt"),l.unshift(e),m(e.table().node()).trigger(t,l))}function n(o){var i=new _.Api(o);o._select_init=!0,o.aoRowCreatedCallback.push({fn:function(e,t,l){var s,c,n=o.aoData[l];for(n._select_selected&&m(e).addClass(o._select.className),s=0,c=o.aoColumns.length;s<c;s++)(o.aoColumns[s]._select_selected||n._selected_cells&&n._selected_cells[s])&&m(n.anCells[s]).addClass(o._select.className)},sName:"select-deferRender"}),i.on("preXhr.dt.dtSelect",function(e,t){var l,s;t===i.settings()[0]&&(l=i.rows({selected:!0}).ids(!0).filter(function(e){return e!==h}),s=i.cells({selected:!0}).eq(0).map(function(e){var t=i.row(e.row).id(!0);return t?{row:t,column:e.column}:h}).filter(function(e){return e!==h}),i.one("draw.dt.dtSelect",function(){i.rows(l).select(),s.any()&&s.each(function(e){i.cells(e.row,e.column).select()})}))}),i.on("draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt",function(){var s,c,n,o,a,e;(e=(s=i).settings()[0])._select.info&&e.aanFeatures.i&&"api"!==s.select.style()&&(c=s.rows({selected:!0}).flatten().length,n=s.columns({selected:!0}).flatten().length,o=s.cells({selected:!0}).flatten().length,a=function(e,t,l){e.append(m('<span class="select-item"/>').append(s.i18n("select."+t+"s",{_:"%d "+t+"s selected",0:"",1:"1 "+t+" selected"},l)))},m.each(e.aanFeatures.i,function(e,t){t=m(t);var l=m('<span class="select-info"/>'),s=(a(l,"row",c),a(l,"column",n),a(l,"cell",o),t.children("span.select-info"));s.length&&s.remove(),""!==l.text()&&t.append(l)})),i.state.save()}),i.on("destroy.dtSelect",function(){m(i.rows({selected:!0}).nodes()).removeClass(i.settings()[0]._select.className),s(i),i.off(".dtSelect"),m("body").off(".dtSelect"+p(i.table().node()))})}function d(e,t,l,s){var c,n=e[t+"s"]({search:"applied"}).indexes(),s=m.inArray(s,n),o=m.inArray(l,n);e[t+"s"]({selected:!0}).any()||-1!==s?(o<s&&(c=o,o=s,s=c),n.splice(o+1,n.length),n.splice(0,s)):n.splice(m.inArray(l,n)+1,n.length),e[t](l,{selected:!0}).any()?(n.splice(m.inArray(l,n),1),e[t+"s"](n).deselect()):e[t+"s"](n).select()}function f(e,t){!t&&"single"!==e._select.style||((t=new _.Api(e)).rows({selected:!0}).deselect(),t.columns({selected:!0}).deselect(),t.cells({selected:!0}).deselect())}function w(e,t,l,s,c){var n=t.select.style(),o=t.select.toggleable(),a=t[s](c,{selected:!0}).any();a&&!o||("os"===n?e.ctrlKey||e.metaKey?t[s](c).select(!a):e.shiftKey?"cell"===s?r(t,c,l._select_lastCell||null):d(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):(o=t[s+"s"]({selected:!0}),a&&1===o.flatten().length?t[s](c).deselect():(o.deselect(),t[s](c).select())):"multi+shift"==n&&e.shiftKey?"cell"===s?r(t,c,l._select_lastCell||null):d(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):t[s](c).select(!a))}function p(e){return e.id.replace(/[^a-zA-Z0-9\-\_]/g,"-")}_.select={},_.select.version="1.7.0",_.select.init=function(c){var e,t,l,s,n,o,a,i,r,u,d,f=c.settings()[0];f._select||(e=c.state.loaded(),t=function(e,t,l){if(null!==l&&l.select!==h){if(c.rows({selected:!0}).any()&&c.rows().deselect(),l.select.rows!==h&&c.rows(l.select.rows).select(),c.columns({selected:!0}).any()&&c.columns().deselect(),l.select.columns!==h&&c.columns(l.select.columns).select(),c.cells({selected:!0}).any()&&c.cells().deselect(),l.select.cells!==h)for(var s=0;s<l.select.cells.length;s++)c.cell(l.select.cells[s].row,l.select.cells[s].column).select();c.state.save()}},c.on("stateSaveParams",function(e,t,l){l.select={},l.select.rows=c.rows({selected:!0}).ids(!0).toArray(),l.select.columns=c.columns({selected:!0})[0],l.select.cells=c.cells({selected:!0})[0].map(function(e){return{row:c.row(e.row).id(!0),column:e.column}})}).on("stateLoadParams",t).one("init",function(){t(0,0,e)}),s=f.oInit.select,l=_.defaults.select,l=s===h?l:s,s="row",i=a=!(o=!(n="api")),r="td, th",d=!(u="selected"),f._select={},!0===l?(n="os",d=!0):"string"==typeof l?(n=l,d=!0):m.isPlainObject(l)&&(l.blurable!==h&&(o=l.blurable),l.toggleable!==h&&(a=l.toggleable),l.info!==h&&(i=l.info),l.items!==h&&(s=l.items),d=(n=l.style!==h?l.style:"os",!0),l.selector!==h&&(r=l.selector),l.className!==h&&(u=l.className)),c.select.selector(r),c.select.items(s),c.select.style(n),c.select.blurable(o),c.select.toggleable(a),c.select.info(i),f._select.className=u,m.fn.dataTable.ext.order["select-checkbox"]=function(t,e){return this.api().column(e,{order:"index"}).nodes().map(function(e){return"row"===t._select.items?m(e).parent().hasClass(t._select.className):"cell"===t._select.items&&m(e).hasClass(t._select.className)})},!d&&m(c.table().node()).hasClass("selectable")&&c.select.style("os"))},m.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(e,i){_.ext.selector[i.type].push(function(e,t,l){var s,c=t.selected,n=[];if(!0!==c&&!1!==c)return l;for(var o=0,a=l.length;o<a;o++)s=e[i.prop][l[o]],(!0===c&&!0===s._select_selected||!1===c&&!s._select_selected)&&n.push(l[o]);return n})}),_.ext.selector.cell.push(function(e,t,l){var s,c=t.selected,n=[];if(c===h)return l;for(var o=0,a=l.length;o<a;o++)s=e.aoData[l[o].row],(!0!==c||!s._selected_cells||!0!==s._selected_cells[l[o].column])&&(!1!==c||s._selected_cells&&s._selected_cells[l[o].column])||n.push(l[o]);return n});var t=_.Api.register,l=_.Api.registerPlural;function o(t,l){return function(e){return e.i18n("buttons."+t,l)}}function a(e){e=e._eventNamespace;return"draw.dt.DT"+e+" select.dt.DT"+e+" deselect.dt.DT"+e}t("select()",function(){return this.iterator("table",function(e){_.select.init(new _.Api(e))})}),t("select.blurable()",function(t){return t===h?this.context[0]._select.blurable:this.iterator("table",function(e){e._select.blurable=t})}),t("select.toggleable()",function(t){return t===h?this.context[0]._select.toggleable:this.iterator("table",function(e){e._select.toggleable=t})}),t("select.info()",function(t){return t===h?this.context[0]._select.info:this.iterator("table",function(e){e._select.info=t})}),t("select.items()",function(t){return t===h?this.context[0]._select.items:this.iterator("table",function(e){e._select.items=t,u(new _.Api(e),"selectItems",[t])})}),t("select.style()",function(l){return l===h?this.context[0]._select.style:this.iterator("table",function(e){e._select||_.select.init(new _.Api(e)),e._select_init||n(e),e._select.style=l;var t=new _.Api(e);s(t),"api"!==l&&c(t),u(new _.Api(e),"selectStyle",[l])})}),t("select.selector()",function(t){return t===h?this.context[0]._select.selector:this.iterator("table",function(e){s(new _.Api(e)),e._select.selector=t,"api"!==e._select.style&&c(new _.Api(e))})}),l("rows().select()","row().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("row",function(e,t){f(e),e.aoData[t]._select_selected=!0,m(e.aoData[t].nTr).addClass(e._select.className)}),this.iterator("table",function(e,t){u(l,"select",["row",l[t]],!0)}),this)}),t("row().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoData[this[0]]&&e.aoData[this[0]]._select_selected)}),l("columns().select()","column().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("column",function(e,t){f(e),e.aoColumns[t]._select_selected=!0;t=new _.Api(e).column(t);m(t.header()).addClass(e._select.className),m(t.footer()).addClass(e._select.className),t.nodes().to$().addClass(e._select.className)}),this.iterator("table",function(e,t){u(l,"select",["column",l[t]],!0)}),this)}),t("column().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoColumns[this[0]]&&e.aoColumns[this[0]]._select_selected)}),l("cells().select()","cell().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("cell",function(e,t,l){f(e);t=e.aoData[t];t._selected_cells===h&&(t._selected_cells=[]),t._selected_cells[l]=!0,t.anCells&&m(t.anCells[l]).addClass(e._select.className)}),this.iterator("table",function(e,t){u(l,"select",["cell",l.cells(l[t]).indexes().toArray()],!0)}),this)}),t("cell().selected()",function(){var e=this.context[0];if(e&&this.length){e=e.aoData[this[0][0].row];if(e&&e._selected_cells&&e._selected_cells[this[0][0].column])return!0}return!1}),l("rows().deselect()","row().deselect()",function(){var l=this;return this.iterator("row",function(e,t){e.aoData[t]._select_selected=!1,e._select_lastCell=null,m(e.aoData[t].nTr).removeClass(e._select.className)}),this.iterator("table",function(e,t){u(l,"deselect",["row",l[t]],!0)}),this}),l("columns().deselect()","column().deselect()",function(){var l=this;return this.iterator("column",function(s,e){s.aoColumns[e]._select_selected=!1;var t=new _.Api(s),l=t.column(e);m(l.header()).removeClass(s._select.className),m(l.footer()).removeClass(s._select.className),t.cells(null,e).indexes().each(function(e){var t=s.aoData[e.row],l=t._selected_cells;!t.anCells||l&&l[e.column]||m(t.anCells[e.column]).removeClass(s._select.className)})}),this.iterator("table",function(e,t){u(l,"deselect",["column",l[t]],!0)}),this}),l("cells().deselect()","cell().deselect()",function(){var l=this;return this.iterator("cell",function(e,t,l){t=e.aoData[t];t._selected_cells!==h&&(t._selected_cells[l]=!1),t.anCells&&!e.aoColumns[l]._select_selected&&m(t.anCells[l]).removeClass(e._select.className)}),this.iterator("table",function(e,t){u(l,"deselect",["cell",l[t]],!0)}),this});var v=0;return m.extend(_.ext.buttons,{selected:{text:o("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(l,e,s){var c=this;s._eventNamespace=".select"+v++,l.on(a(s),function(){var e,t;c.enable((e=l,t=s,!(-1===m.inArray("rows",t.limitTo)||!e.rows({selected:!0}).any())||(!(-1===m.inArray("columns",t.limitTo)||!e.columns({selected:!0}).any())||!(-1===m.inArray("cells",t.limitTo)||!e.cells({selected:!0}).any()))))}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectedSingle:{text:o("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(t,e,l){var s=this;l._eventNamespace=".select"+v++,t.on(a(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(1===e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectAll:{text:o("selectAll","Select all"),className:"buttons-select-all",action:function(e,t,l,s){var c=this.select.items(),n=s.selectorModifier;(n?("function"==typeof n&&(n=n.call(t,e,t,l,s)),this[c+"s"](n)):this[c+"s"]()).select()}},selectNone:{text:o("selectNone","Deselect all"),className:"buttons-select-none",action:function(){f(this.settings()[0],!0)},init:function(t,e,l){var s=this;l._eventNamespace=".select"+v++,t.on(a(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(0<e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},showSelected:{text:o("showSelected","Show only selected"),className:"buttons-show-selected",action:function(e,s,t,l){var c;l._filter?(-1!==(c=_.ext.search.indexOf(l._filter))&&(_.ext.search.splice(c,1),l._filter=null),this.active(!1)):(l._filter=c=function(e,t,l){return e!==s.settings()[0]||e.aoData[l]._select_selected},_.ext.search.push(c),this.active(!0)),s.draw()}}}),m.each(["Row","Column","Cell"],function(e,t){var c=t.toLowerCase();_.ext.buttons["select"+t+"s"]={text:o("select"+t+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},init:function(e){var s=this;e.on("selectItems.dt.DT",function(e,t,l){s.active(l===c)})}}}),m.fn.DataTable.select=_.select,m(e).on("preInit.dt.dtSelect",function(e,t){"dt"===e.namespace&&_.select.init(new _.Api(t))}),_});
4
+ !function(l){var s,c;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return l(e,window,document)}):"object"==typeof exports?(s=require("jquery"),c=function(e,t){t.fn.dataTable||require("datatables.net")(e,t)},"undefined"==typeof window?module.exports=function(e,t){return e=e||window,t=t||s(e),c(e,t),l(t,e,e.document)}:(c(window,s),module.exports=l(s,window,window.document))):l(jQuery,window,document)}(function(m,i,e){"use strict";var _=m.fn.dataTable;function r(n,e,t){function l(t,l){l<t&&(e=l,l=t,t=e);var e,s=!1;return n.columns(":visible").indexes().filter(function(e){return e===t&&(s=!0),e===l?!(s=!1):s})}function s(t,l){var e,s=n.rows({search:"applied"}).indexes(),c=(s.indexOf(t)>s.indexOf(l)&&(e=l,l=t,t=e),!1);return s.filter(function(e){return e===t&&(c=!0),e===l?!(c=!1):c})}var c,t=n.cells({selected:!0}).any()||t?(c=l(t.column,e.column),s(t.row,e.row)):(c=l(0,e.column),s(0,e.row)),t=n.cells(t,c).flatten();n.cells(e,{selected:!0}).any()?n.cells(t).deselect():n.cells(t).select()}function s(e){var t=e.settings()[0]._select.selector;m(e.table().container()).off("mousedown.dtSelect",t).off("mouseup.dtSelect",t).off("click.dtSelect",t),m("body").off("click.dtSelect"+v(e.table().node()))}function n(o){var a,t=m(o.table().container()),l=o.settings()[0],s=l._select.selector;t.on("mousedown.dtSelect",s,function(e){(e.shiftKey||e.metaKey||e.ctrlKey)&&t.css("-moz-user-select","none").one("selectstart.dtSelect",s,function(){return!1}),i.getSelection&&(a=i.getSelection())}).on("mouseup.dtSelect",s,function(){t.css("-moz-user-select","")}).on("click.dtSelect",s,function(e){var t,l=o.select.items();if(a){var s=i.getSelection();if((!s.anchorNode||m(s.anchorNode).closest("table")[0]===o.table().node())&&s!==a)return}var c,s=o.settings()[0],n=o.table().container();m(e.target).closest("div.dt-container")[0]==n&&(n=o.cell(m(e.target).closest("td, th"))).any()&&(c=m.Event("user-select.dt"),d(o,c,[l,n,e]),c.isDefaultPrevented()||(c=n.index(),"row"===l?(t=c.row,h(e,o,s,"row",t)):"column"===l?(t=n.index().column,h(e,o,s,"column",t)):"cell"===l&&(t=n.index(),h(e,o,s,"cell",t)),s._select_lastCell=c))}),m("body").on("click.dtSelect"+v(o.table().node()),function(e){var t;!l._select.blurable||m(e.target).parents().filter(o.table().container()).length||0===m(e.target).parents("html").length||m(e.target).parents("div.DTE").length||(t=m.Event("select-blur.dt"),d(o,t,[e.target,e]),t.isDefaultPrevented())||f(l,!0)})}function d(e,t,l,s){s&&!e.flatten().length||("string"==typeof t&&(t+=".dt"),l.unshift(e),m(e.table().node()).trigger(t,l))}function a(s,e){var t,l,c,n,o;"api"!==s.select.style()&&!1!==s.select.info()&&(o=s.rows({selected:!0}).flatten().length,t=s.columns({selected:!0}).flatten().length,l=s.cells({selected:!0}).flatten().length,c=function(e,t,l){e.append(m('<span class="select-item"/>').append(s.i18n("select."+t+"s",{_:"%d "+t+"s selected",0:"",1:"1 "+t+" selected"},l)))},e=m(e),c(n=m('<span class="select-info"/>'),"row",o),c(n,"column",t),c(n,"cell",l),(o=e.children("span.select-info")).length&&o.remove(),""!==n.text())&&e.append(n)}function p(o){o.columns(".dt-select").every(function(){var n,e=this.header();m("input",e).length||(n=m("<input>").attr({class:"dt-select-checkbox",type:"checkbox","aria-label":o.i18n("select.aria.headerCheckbox")||"Select all rows"}).appendTo(e).on("change",function(){this.checked?o.rows({search:"applied"}).select():o.rows({selected:!0}).deselect()}).on("click",function(e){e.stopPropagation()}),o.on("draw select deselect",function(e,t,l){var s,c;"row"!==l&&l||(l=o.rows({selected:!0}).count(),s=o.rows({search:"applied",selected:!0}).count(),c=o.rows({search:"applied"}).count(),s&&s<=l&&s===c?n.prop("checked",!0).prop("indeterminate",!1):0===s&&0===l?n.prop("checked",!1).prop("indeterminate",!1):n.prop("checked",!1).prop("indeterminate",!0))}))})}function u(e,t,l,s){var c,n=e[t+"s"]({search:"applied"}).indexes(),s=n.indexOf(s),o=n.indexOf(l);e[t+"s"]({selected:!0}).any()||-1!==s?(o<s&&(c=o,o=s,s=c),n.splice(o+1,n.length),n.splice(0,s)):n.splice(n.indexOf(l)+1,n.length),e[t](l,{selected:!0}).any()?(n.splice(n.indexOf(l),1),e[t+"s"](n).deselect()):e[t+"s"](n).select()}function f(e,t){!t&&"single"!==e._select.style||((t=new _.Api(e)).rows({selected:!0}).deselect(),t.columns({selected:!0}).deselect(),t.cells({selected:!0}).deselect())}function h(e,t,l,s,c){var n=t.select.style(),o=t.select.toggleable(),a=t[s](c,{selected:!0}).any();a&&!o||("os"===n?e.ctrlKey||e.metaKey?t[s](c).select(!a):e.shiftKey?"cell"===s?r(t,c,l._select_lastCell||null):u(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):(o=t[s+"s"]({selected:!0}),a&&1===o.flatten().length?t[s](c).deselect():(o.deselect(),t[s](c).select())):"multi+shift"==n&&e.shiftKey?"cell"===s?r(t,c,l._select_lastCell||null):u(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):t[s](c).select(!a))}function v(e){return e.id.replace(/[^a-zA-Z0-9\-\_]/g,"-")}_.select={},_.select.version="2.0.0",_.select.init=function(c){var e,t,l,s,n,o,a,i,r,d,u,f,h=c.settings()[0];if(!_.versionCheck("2"))throw"Warning: Select requires DataTables 2 or newer";h._select||(e=c.state.loaded(),t=function(e,t,l){if(null!==l&&void 0!==l.select){if(c.rows({selected:!0}).any()&&c.rows().deselect(),void 0!==l.select.rows&&c.rows(l.select.rows).select(),c.columns({selected:!0}).any()&&c.columns().deselect(),void 0!==l.select.columns&&c.columns(l.select.columns).select(),c.cells({selected:!0}).any()&&c.cells().deselect(),void 0!==l.select.cells)for(var s=0;s<l.select.cells.length;s++)c.cell(l.select.cells[s].row,l.select.cells[s].column).select();c.state.save()}},c.on("stateSaveParams",function(e,t,l){l.select={},l.select.rows=c.rows({selected:!0}).ids(!0).toArray(),l.select.columns=c.columns({selected:!0})[0],l.select.cells=c.cells({selected:!0})[0].map(function(e){return{row:c.row(e.row).id(!0),column:e.column}})}).on("stateLoadParams",t).one("init",function(){t(0,0,e)}),s=h.oInit.select,l=_.defaults.select,l=void 0===s?l:s,s="row",r="td, th",d="selected",f=!(u=i=a=!(o=!(n="api"))),h._select={infoEls:[]},!0===l?(n="os",f=!0):"string"==typeof l?(n=l,f=!0):m.isPlainObject(l)&&(void 0!==l.blurable&&(o=l.blurable),void 0!==l.toggleable&&(a=l.toggleable),void 0!==l.info&&(i=l.info),void 0!==l.items&&(s=l.items),f=(n=void 0!==l.style?l.style:"os",!0),void 0!==l.selector&&(r=l.selector),void 0!==l.className&&(d=l.className),void 0!==l.headerCheckbox)&&(u=l.headerCheckbox),c.select.selector(r),c.select.items(s),c.select.style(n),c.select.blurable(o),c.select.toggleable(a),c.select.info(i),h._select.className=d,!f&&m(c.table().node()).hasClass("selectable")&&c.select.style("os"),u&&(p(c),c.on("init",function(){p(c)})))},m.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(e,i){_.ext.selector[i.type].push(function(e,t,l){var s,c=t.selected,n=[];if(!0!==c&&!1!==c)return l;for(var o=0,a=l.length;o<a;o++)(s=e[i.prop][l[o]])&&(!0===c&&!0===s._select_selected||!1===c&&!s._select_selected)&&n.push(l[o]);return n})}),_.ext.selector.cell.push(function(e,t,l){var s,c=t.selected,n=[];if(void 0===c)return l;for(var o=0,a=l.length;o<a;o++)(s=e.aoData[l[o].row])&&(!0===c&&s._selected_cells&&!0===s._selected_cells[l[o].column]||!1===c&&(!s._selected_cells||!s._selected_cells[l[o].column]))&&n.push(l[o]);return n});var t=_.Api.register,l=_.Api.registerPlural;function o(t,l){return function(e){return e.i18n("buttons."+t,l)}}function w(e){e=e._eventNamespace;return"draw.dt.DT"+e+" select.dt.DT"+e+" deselect.dt.DT"+e}t("select()",function(){return this.iterator("table",function(e){_.select.init(new _.Api(e))})}),t("select.blurable()",function(t){return void 0===t?this.context[0]._select.blurable:this.iterator("table",function(e){e._select.blurable=t})}),t("select.toggleable()",function(t){return void 0===t?this.context[0]._select.toggleable:this.iterator("table",function(e){e._select.toggleable=t})}),t("select.info()",function(t){return void 0===t?this.context[0]._select.info:this.iterator("table",function(e){e._select.info=t})}),t("select.items()",function(t){return void 0===t?this.context[0]._select.items:this.iterator("table",function(e){e._select.items=t,d(new _.Api(e),"selectItems",[t])})}),t("select.style()",function(l){return void 0===l?this.context[0]._select.style:this.iterator("table",function(e){e._select||_.select.init(new _.Api(e)),e._select_init||(o=e,c=new _.Api(o),o._select_init=!0,o.aoRowCreatedCallback.push(function(e,t,l){var s,c,n=o.aoData[l];for(n._select_selected&&m(e).addClass(o._select.className),s=0,c=o.aoColumns.length;s<c;s++)(o.aoColumns[s]._select_selected||n._selected_cells&&n._selected_cells[s])&&m(n.anCells[s]).addClass(o._select.className)}),c.on("preXhr.dt.dtSelect",function(e,t){var l,s;t===c.settings()[0]&&(l=c.rows({selected:!0}).ids(!0).filter(function(e){return void 0!==e}),s=c.cells({selected:!0}).eq(0).map(function(e){var t=c.row(e.row).id(!0);return t?{row:t,column:e.column}:void 0}).filter(function(e){return void 0!==e}),c.one("draw.dt.dtSelect",function(){c.rows(l).select(),s.any()&&s.each(function(e){c.cells(e.row,e.column).select()})}))}),c.on("info.dt",function(e,t,l){t._select.infoEls.includes(l)||t._select.infoEls.push(l),a(c,l)}),c.on("select.dtSelect.dt deselect.dtSelect.dt",function(){o._select.infoEls.forEach(function(e){a(c,e)}),c.state.save()}),c.on("destroy.dtSelect",function(){m(c.rows({selected:!0}).nodes()).removeClass(c.settings()[0]._select.className),s(c),c.off(".dtSelect"),m("body").off(".dtSelect"+v(c.table().node()))})),e._select.style=l;var o,c,t=new _.Api(e);s(t),"api"!==l&&n(t),d(new _.Api(e),"selectStyle",[l])})}),t("select.selector()",function(t){return void 0===t?this.context[0]._select.selector:this.iterator("table",function(e){s(new _.Api(e)),e._select.selector=t,"api"!==e._select.style&&n(new _.Api(e))})}),t("select.last()",function(e){var t=this.context[0];return e?(t._select_lastCell=e,this):t._select_lastCell}),l("rows().select()","row().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("row",function(e,t){f(e);var l=e.aoData[t],s=e.aoColumns;m(l.nTr).addClass(e._select.className),l._select_selected=!0;for(var c=0;c<s.length;c++)"select-checkbox"===s[c].sType&&(m("input.dt-select-checkbox",l.anCells[c]).prop("checked",!0),l._aSortData[c]=null)}),this.iterator("table",function(e,t){d(l,"select",["row",l[t]],!0)}),this)}),t("row().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoData[this[0]]&&e.aoData[this[0]]._select_selected)}),l("columns().select()","column().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("column",function(e,t){f(e),e.aoColumns[t]._select_selected=!0;t=new _.Api(e).column(t);m(t.header()).addClass(e._select.className),m(t.footer()).addClass(e._select.className),t.nodes().to$().addClass(e._select.className)}),this.iterator("table",function(e,t){d(l,"select",["column",l[t]],!0)}),this)}),t("column().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoColumns[this[0]]&&e.aoColumns[this[0]]._select_selected)}),l("cells().select()","cell().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("cell",function(e,t,l){f(e);t=e.aoData[t];void 0===t._selected_cells&&(t._selected_cells=[]),t._selected_cells[l]=!0,t.anCells&&m(t.anCells[l]).addClass(e._select.className)}),this.iterator("table",function(e,t){d(l,"select",["cell",l.cells(l[t]).indexes().toArray()],!0)}),this)}),t("cell().selected()",function(){var e=this.context[0];if(e&&this.length){e=e.aoData[this[0][0].row];if(e&&e._selected_cells&&e._selected_cells[this[0][0].column])return!0}return!1}),l("rows().deselect()","row().deselect()",function(){var l=this;return this.iterator("row",function(e,t){var l=e.aoData[t],s=e.aoColumns;m(l.nTr).removeClass(e._select.className),l._select_selected=!1,e._select_lastCell=null;for(var c=0;c<s.length;c++)"select-checkbox"===s[c].sType&&(m("input.dt-select-checkbox",l.anCells[c]).prop("checked",!1),l._aSortData[c]=null)}),this.iterator("table",function(e,t){d(l,"deselect",["row",l[t]],!0)}),this}),l("columns().deselect()","column().deselect()",function(){var l=this;return this.iterator("column",function(s,e){s.aoColumns[e]._select_selected=!1;var t=new _.Api(s),l=t.column(e);m(l.header()).removeClass(s._select.className),m(l.footer()).removeClass(s._select.className),t.cells(null,e).indexes().each(function(e){var t=s.aoData[e.row],l=t._selected_cells;!t.anCells||l&&l[e.column]||m(t.anCells[e.column]).removeClass(s._select.className)})}),this.iterator("table",function(e,t){d(l,"deselect",["column",l[t]],!0)}),this}),l("cells().deselect()","cell().deselect()",function(){var l=this;return this.iterator("cell",function(e,t,l){t=e.aoData[t];void 0!==t._selected_cells&&(t._selected_cells[l]=!1),t.anCells&&!e.aoColumns[l]._select_selected&&m(t.anCells[l]).removeClass(e._select.className)}),this.iterator("table",function(e,t){d(l,"deselect",["cell",l[t]],!0)}),this});var b=0;return m.extend(_.ext.buttons,{selected:{text:o("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(l,e,s){var c=this;s._eventNamespace=".select"+b++,l.on(w(s),function(){var e,t;c.enable((e=l,!(-1===(t=s).limitTo.indexOf("rows")||!e.rows({selected:!0}).any())||!(-1===t.limitTo.indexOf("columns")||!e.columns({selected:!0}).any())||!(-1===t.limitTo.indexOf("cells")||!e.cells({selected:!0}).any())))}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectedSingle:{text:o("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(t,e,l){var s=this;l._eventNamespace=".select"+b++,t.on(w(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(1===e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectAll:{text:o("selectAll","Select all"),className:"buttons-select-all",action:function(e,t,l,s){var c=this.select.items(),n=s.selectorModifier;(n?("function"==typeof n&&(n=n.call(t,e,t,l,s)),this[c+"s"](n)):this[c+"s"]()).select()}},selectNone:{text:o("selectNone","Deselect all"),className:"buttons-select-none",action:function(){f(this.settings()[0],!0)},init:function(t,e,l){var s=this;l._eventNamespace=".select"+b++,t.on(w(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(0<e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},showSelected:{text:o("showSelected","Show only selected"),className:"buttons-show-selected",action:function(e,t){var s;t.search.fixed("dt-select")?(t.search.fixed("dt-select",null),this.active(!1)):(s=t.settings()[0].aoData,t.search.fixed("dt-select",function(e,t,l){return s[l]._select_selected}),this.active(!0)),t.draw()}}}),m.each(["Row","Column","Cell"],function(e,t){var c=t.toLowerCase();_.ext.buttons["select"+t+"s"]={text:o("select"+t+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},init:function(e){var s=this;e.on("selectItems.dt.DT",function(e,t,l){s.active(l===c)})}}}),_.type("select-checkbox",{className:"dt-select",detect:function(e){return"select-checkbox"===e&&e},order:{pre:function(e){return"X"===e?-1:0}}}),m.extend(!0,_.defaults.oLanguage,{select:{aria:{rowCheckbox:"Select row"}}}),_.render.select=function(e,t){var n=e?_.util.get(e):null,o=t?_.util.get(t):null;return function(e,t,l,s){var c=s.settings.aoData[s.row]._select_selected,s=s.settings.oLanguage.select.aria.rowCheckbox;return"display"===t?m("<input>").attr({"aria-label":s,class:"dt-select-checkbox",name:o?o(l):null,type:"checkbox",value:n?n(l):null,checked:c})[0]:"type"===t?"select-checkbox":"filter"!==t&&c?"X":""}},_.ext.order["select-checkbox"]=function(t,e){return this.api().column(e,{order:"index"}).nodes().map(function(e){return"row"===t._select.items?m(e).parent().hasClass(t._select.className):"cell"===t._select.items&&m(e).hasClass(t._select.className)})},m.fn.DataTable.select=_.select,m(e).on("preInit.dt.dtSelect",function(e,t){"dt"===e.namespace&&_.select.init(new _.Api(t))}),_});
@@ -1,4 +1,4 @@
1
- /*! Select for DataTables 1.7.0
1
+ /*! Select for DataTables 2.0.0
2
2
  * © SpryMedia Ltd - datatables.net/license/mit
3
3
  */
4
- import jQuery from"jquery";import DataTable from"datatables.net";let $=jQuery;function cellRange(n,e,t){function l(t,l){l<t&&(e=l,l=t,t=e);var e,s=!1;return n.columns(":visible").indexes().filter(function(e){return e===t&&(s=!0),e===l?!(s=!1):s})}function s(t,l){var e,s=n.rows({search:"applied"}).indexes(),c=(s.indexOf(t)>s.indexOf(l)&&(e=l,l=t,t=e),!1);return s.filter(function(e){return e===t&&(c=!0),e===l?!(c=!1):c})}var c,t=n.cells({selected:!0}).any()||t?(c=l(t.column,e.column),s(t.row,e.row)):(c=l(0,e.column),s(0,e.row)),t=n.cells(t,c).flatten();n.cells(e,{selected:!0}).any()?n.cells(t).deselect():n.cells(t).select()}function disableMouseSelection(e){var t=e.settings()[0]._select.selector;$(e.table().container()).off("mousedown.dtSelect",t).off("mouseup.dtSelect",t).off("click.dtSelect",t),$("body").off("click.dtSelect"+_safeId(e.table().node()))}function enableMouseSelection(a){var o,t=$(a.table().container()),l=a.settings()[0],s=l._select.selector;t.on("mousedown.dtSelect",s,function(e){(e.shiftKey||e.metaKey||e.ctrlKey)&&t.css("-moz-user-select","none").one("selectstart.dtSelect",s,function(){return!1}),window.getSelection&&(o=window.getSelection())}).on("mouseup.dtSelect",s,function(){t.css("-moz-user-select","")}).on("click.dtSelect",s,function(e){var t,l=a.select.items();if(o){var s=window.getSelection();if((!s.anchorNode||$(s.anchorNode).closest("table")[0]===a.table().node())&&s!==o)return}var c,s=a.settings()[0],n=a.settings()[0].oClasses.sWrapper.trim().replace(/ +/g,".");$(e.target).closest("div."+n)[0]==a.table().container()&&(n=a.cell($(e.target).closest("td, th"))).any()&&(c=$.Event("user-select.dt"),eventTrigger(a,c,[l,n,e]),c.isDefaultPrevented()||(c=n.index(),"row"===l?(t=c.row,typeSelect(e,a,s,"row",t)):"column"===l?(t=n.index().column,typeSelect(e,a,s,"column",t)):"cell"===l&&(t=n.index(),typeSelect(e,a,s,"cell",t)),s._select_lastCell=c))}),$("body").on("click.dtSelect"+_safeId(a.table().node()),function(e){var t;!l._select.blurable||$(e.target).parents().filter(a.table().container()).length||0===$(e.target).parents("html").length||$(e.target).parents("div.DTE").length||(t=$.Event("select-blur.dt"),eventTrigger(a,t,[e.target,e]),t.isDefaultPrevented()||clear(l,!0))})}function eventTrigger(e,t,l,s){s&&!e.flatten().length||("string"==typeof t&&(t+=".dt"),l.unshift(e),$(e.table().node()).trigger(t,l))}function info(s){var c,n,a,o,e=s.settings()[0];e._select.info&&e.aanFeatures.i&&"api"!==s.select.style()&&(c=s.rows({selected:!0}).flatten().length,n=s.columns({selected:!0}).flatten().length,a=s.cells({selected:!0}).flatten().length,o=function(e,t,l){e.append($('<span class="select-item"/>').append(s.i18n("select."+t+"s",{_:"%d "+t+"s selected",0:"",1:"1 "+t+" selected"},l)))},$.each(e.aanFeatures.i,function(e,t){t=$(t);var l=$('<span class="select-info"/>'),s=(o(l,"row",c),o(l,"column",n),o(l,"cell",a),t.children("span.select-info"));s.length&&s.remove(),""!==l.text()&&t.append(l)}))}function init(a){var c=new DataTable.Api(a);a._select_init=!0,a.aoRowCreatedCallback.push({fn:function(e,t,l){var s,c,n=a.aoData[l];for(n._select_selected&&$(e).addClass(a._select.className),s=0,c=a.aoColumns.length;s<c;s++)(a.aoColumns[s]._select_selected||n._selected_cells&&n._selected_cells[s])&&$(n.anCells[s]).addClass(a._select.className)},sName:"select-deferRender"}),c.on("preXhr.dt.dtSelect",function(e,t){var l,s;t===c.settings()[0]&&(l=c.rows({selected:!0}).ids(!0).filter(function(e){return void 0!==e}),s=c.cells({selected:!0}).eq(0).map(function(e){var t=c.row(e.row).id(!0);return t?{row:t,column:e.column}:void 0}).filter(function(e){return void 0!==e}),c.one("draw.dt.dtSelect",function(){c.rows(l).select(),s.any()&&s.each(function(e){c.cells(e.row,e.column).select()})}))}),c.on("draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt",function(){info(c),c.state.save()}),c.on("destroy.dtSelect",function(){$(c.rows({selected:!0}).nodes()).removeClass(c.settings()[0]._select.className),disableMouseSelection(c),c.off(".dtSelect"),$("body").off(".dtSelect"+_safeId(c.table().node()))})}function rowColumnRange(e,t,l,s){var c,n=e[t+"s"]({search:"applied"}).indexes(),s=$.inArray(s,n),a=$.inArray(l,n);e[t+"s"]({selected:!0}).any()||-1!==s?(a<s&&(c=a,a=s,s=c),n.splice(a+1,n.length),n.splice(0,s)):n.splice($.inArray(l,n)+1,n.length),e[t](l,{selected:!0}).any()?(n.splice($.inArray(l,n),1),e[t+"s"](n).deselect()):e[t+"s"](n).select()}function clear(e,t){!t&&"single"!==e._select.style||((t=new DataTable.Api(e)).rows({selected:!0}).deselect(),t.columns({selected:!0}).deselect(),t.cells({selected:!0}).deselect())}function typeSelect(e,t,l,s,c){var n=t.select.style(),a=t.select.toggleable(),o=t[s](c,{selected:!0}).any();o&&!a||("os"===n?e.ctrlKey||e.metaKey?t[s](c).select(!o):e.shiftKey?"cell"===s?cellRange(t,c,l._select_lastCell||null):rowColumnRange(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):(a=t[s+"s"]({selected:!0}),o&&1===a.flatten().length?t[s](c).deselect():(a.deselect(),t[s](c).select())):"multi+shift"==n&&e.shiftKey?"cell"===s?cellRange(t,c,l._select_lastCell||null):rowColumnRange(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):t[s](c).select(!o))}function _safeId(e){return e.id.replace(/[^a-zA-Z0-9\-\_]/g,"-")}DataTable.select={},DataTable.select.version="1.7.0",DataTable.select.init=function(c){var e,t,l,s,n,a,o,i,r,u,d,f=c.settings()[0];f._select||(e=c.state.loaded(),t=function(e,t,l){if(null!==l&&void 0!==l.select){if(c.rows({selected:!0}).any()&&c.rows().deselect(),void 0!==l.select.rows&&c.rows(l.select.rows).select(),c.columns({selected:!0}).any()&&c.columns().deselect(),void 0!==l.select.columns&&c.columns(l.select.columns).select(),c.cells({selected:!0}).any()&&c.cells().deselect(),void 0!==l.select.cells)for(var s=0;s<l.select.cells.length;s++)c.cell(l.select.cells[s].row,l.select.cells[s].column).select();c.state.save()}},c.on("stateSaveParams",function(e,t,l){l.select={},l.select.rows=c.rows({selected:!0}).ids(!0).toArray(),l.select.columns=c.columns({selected:!0})[0],l.select.cells=c.cells({selected:!0})[0].map(function(e){return{row:c.row(e.row).id(!0),column:e.column}})}).on("stateLoadParams",t).one("init",function(){t(0,0,e)}),s=f.oInit.select,l=DataTable.defaults.select,l=void 0===s?l:s,s="row",i=o=!(a=!(n="api")),r="td, th",d=!(u="selected"),f._select={},!0===l?(n="os",d=!0):"string"==typeof l?(n=l,d=!0):$.isPlainObject(l)&&(void 0!==l.blurable&&(a=l.blurable),void 0!==l.toggleable&&(o=l.toggleable),void 0!==l.info&&(i=l.info),void 0!==l.items&&(s=l.items),d=(n=void 0!==l.style?l.style:"os",!0),void 0!==l.selector&&(r=l.selector),void 0!==l.className&&(u=l.className)),c.select.selector(r),c.select.items(s),c.select.style(n),c.select.blurable(a),c.select.toggleable(o),c.select.info(i),f._select.className=u,$.fn.dataTable.ext.order["select-checkbox"]=function(t,e){return this.api().column(e,{order:"index"}).nodes().map(function(e){return"row"===t._select.items?$(e).parent().hasClass(t._select.className):"cell"===t._select.items&&$(e).hasClass(t._select.className)})},!d&&$(c.table().node()).hasClass("selectable")&&c.select.style("os"))},$.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(e,i){DataTable.ext.selector[i.type].push(function(e,t,l){var s,c=t.selected,n=[];if(!0!==c&&!1!==c)return l;for(var a=0,o=l.length;a<o;a++)s=e[i.prop][l[a]],(!0===c&&!0===s._select_selected||!1===c&&!s._select_selected)&&n.push(l[a]);return n})}),DataTable.ext.selector.cell.push(function(e,t,l){var s,c=t.selected,n=[];if(void 0===c)return l;for(var a=0,o=l.length;a<o;a++)s=e.aoData[l[a].row],(!0!==c||!s._selected_cells||!0!==s._selected_cells[l[a].column])&&(!1!==c||s._selected_cells&&s._selected_cells[l[a].column])||n.push(l[a]);return n});var apiRegister=DataTable.Api.register,apiRegisterPlural=DataTable.Api.registerPlural;function i18n(t,l){return function(e){return e.i18n("buttons."+t,l)}}function namespacedEvents(e){e=e._eventNamespace;return"draw.dt.DT"+e+" select.dt.DT"+e+" deselect.dt.DT"+e}function enabled(e,t){return!(-1===$.inArray("rows",t.limitTo)||!e.rows({selected:!0}).any())||(!(-1===$.inArray("columns",t.limitTo)||!e.columns({selected:!0}).any())||!(-1===$.inArray("cells",t.limitTo)||!e.cells({selected:!0}).any()))}apiRegister("select()",function(){return this.iterator("table",function(e){DataTable.select.init(new DataTable.Api(e))})}),apiRegister("select.blurable()",function(t){return void 0===t?this.context[0]._select.blurable:this.iterator("table",function(e){e._select.blurable=t})}),apiRegister("select.toggleable()",function(t){return void 0===t?this.context[0]._select.toggleable:this.iterator("table",function(e){e._select.toggleable=t})}),apiRegister("select.info()",function(t){return void 0===t?this.context[0]._select.info:this.iterator("table",function(e){e._select.info=t})}),apiRegister("select.items()",function(t){return void 0===t?this.context[0]._select.items:this.iterator("table",function(e){e._select.items=t,eventTrigger(new DataTable.Api(e),"selectItems",[t])})}),apiRegister("select.style()",function(l){return void 0===l?this.context[0]._select.style:this.iterator("table",function(e){e._select||DataTable.select.init(new DataTable.Api(e)),e._select_init||init(e),e._select.style=l;var t=new DataTable.Api(e);disableMouseSelection(t),"api"!==l&&enableMouseSelection(t),eventTrigger(new DataTable.Api(e),"selectStyle",[l])})}),apiRegister("select.selector()",function(t){return void 0===t?this.context[0]._select.selector:this.iterator("table",function(e){disableMouseSelection(new DataTable.Api(e)),e._select.selector=t,"api"!==e._select.style&&enableMouseSelection(new DataTable.Api(e))})}),apiRegisterPlural("rows().select()","row().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("row",function(e,t){clear(e),e.aoData[t]._select_selected=!0,$(e.aoData[t].nTr).addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["row",l[t]],!0)}),this)}),apiRegister("row().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoData[this[0]]&&e.aoData[this[0]]._select_selected)}),apiRegisterPlural("columns().select()","column().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("column",function(e,t){clear(e),e.aoColumns[t]._select_selected=!0;t=new DataTable.Api(e).column(t);$(t.header()).addClass(e._select.className),$(t.footer()).addClass(e._select.className),t.nodes().to$().addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["column",l[t]],!0)}),this)}),apiRegister("column().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoColumns[this[0]]&&e.aoColumns[this[0]]._select_selected)}),apiRegisterPlural("cells().select()","cell().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("cell",function(e,t,l){clear(e);t=e.aoData[t];void 0===t._selected_cells&&(t._selected_cells=[]),t._selected_cells[l]=!0,t.anCells&&$(t.anCells[l]).addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["cell",l.cells(l[t]).indexes().toArray()],!0)}),this)}),apiRegister("cell().selected()",function(){var e=this.context[0];if(e&&this.length){e=e.aoData[this[0][0].row];if(e&&e._selected_cells&&e._selected_cells[this[0][0].column])return!0}return!1}),apiRegisterPlural("rows().deselect()","row().deselect()",function(){var l=this;return this.iterator("row",function(e,t){e.aoData[t]._select_selected=!1,e._select_lastCell=null,$(e.aoData[t].nTr).removeClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["row",l[t]],!0)}),this}),apiRegisterPlural("columns().deselect()","column().deselect()",function(){var l=this;return this.iterator("column",function(s,e){s.aoColumns[e]._select_selected=!1;var t=new DataTable.Api(s),l=t.column(e);$(l.header()).removeClass(s._select.className),$(l.footer()).removeClass(s._select.className),t.cells(null,e).indexes().each(function(e){var t=s.aoData[e.row],l=t._selected_cells;!t.anCells||l&&l[e.column]||$(t.anCells[e.column]).removeClass(s._select.className)})}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["column",l[t]],!0)}),this}),apiRegisterPlural("cells().deselect()","cell().deselect()",function(){var l=this;return this.iterator("cell",function(e,t,l){t=e.aoData[t];void 0!==t._selected_cells&&(t._selected_cells[l]=!1),t.anCells&&!e.aoColumns[l]._select_selected&&$(t.anCells[l]).removeClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["cell",l[t]],!0)}),this});var _buttonNamespace=0;$.extend(DataTable.ext.buttons,{selected:{text:i18n("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(e,t,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,e.on(namespacedEvents(l),function(){s.enable(enabled(e,l))}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectedSingle:{text:i18n("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(t,e,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,t.on(namespacedEvents(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(1===e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectAll:{text:i18n("selectAll","Select all"),className:"buttons-select-all",action:function(e,t,l,s){var c=this.select.items(),n=s.selectorModifier;(n?("function"==typeof n&&(n=n.call(t,e,t,l,s)),this[c+"s"](n)):this[c+"s"]()).select()}},selectNone:{text:i18n("selectNone","Deselect all"),className:"buttons-select-none",action:function(){clear(this.settings()[0],!0)},init:function(t,e,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,t.on(namespacedEvents(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(0<e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},showSelected:{text:i18n("showSelected","Show only selected"),className:"buttons-show-selected",action:function(e,s,t,l){var c;l._filter?(-1!==(c=DataTable.ext.search.indexOf(l._filter))&&(DataTable.ext.search.splice(c,1),l._filter=null),this.active(!1)):(l._filter=c=function(e,t,l){return e!==s.settings()[0]||e.aoData[l]._select_selected},DataTable.ext.search.push(c),this.active(!0)),s.draw()}}}),$.each(["Row","Column","Cell"],function(e,t){var c=t.toLowerCase();DataTable.ext.buttons["select"+t+"s"]={text:i18n("select"+t+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},init:function(e){var s=this;e.on("selectItems.dt.DT",function(e,t,l){s.active(l===c)})}}}),$.fn.DataTable.select=DataTable.select,$(document).on("preInit.dt.dtSelect",function(e,t){"dt"===e.namespace&&DataTable.select.init(new DataTable.Api(t))});export default DataTable;
4
+ import jQuery from"jquery";import DataTable from"datatables.net";let $=jQuery;function cellRange(n,e,t){function l(t,l){l<t&&(e=l,l=t,t=e);var e,s=!1;return n.columns(":visible").indexes().filter(function(e){return e===t&&(s=!0),e===l?!(s=!1):s})}function s(t,l){var e,s=n.rows({search:"applied"}).indexes(),c=(s.indexOf(t)>s.indexOf(l)&&(e=l,l=t,t=e),!1);return s.filter(function(e){return e===t&&(c=!0),e===l?!(c=!1):c})}var c,t=n.cells({selected:!0}).any()||t?(c=l(t.column,e.column),s(t.row,e.row)):(c=l(0,e.column),s(0,e.row)),t=n.cells(t,c).flatten();n.cells(e,{selected:!0}).any()?n.cells(t).deselect():n.cells(t).select()}function disableMouseSelection(e){var t=e.settings()[0]._select.selector;$(e.table().container()).off("mousedown.dtSelect",t).off("mouseup.dtSelect",t).off("click.dtSelect",t),$("body").off("click.dtSelect"+_safeId(e.table().node()))}function enableMouseSelection(a){var o,t=$(a.table().container()),l=a.settings()[0],s=l._select.selector;t.on("mousedown.dtSelect",s,function(e){(e.shiftKey||e.metaKey||e.ctrlKey)&&t.css("-moz-user-select","none").one("selectstart.dtSelect",s,function(){return!1}),window.getSelection&&(o=window.getSelection())}).on("mouseup.dtSelect",s,function(){t.css("-moz-user-select","")}).on("click.dtSelect",s,function(e){var t,l=a.select.items();if(o){var s=window.getSelection();if((!s.anchorNode||$(s.anchorNode).closest("table")[0]===a.table().node())&&s!==o)return}var c,s=a.settings()[0],n=a.table().container();$(e.target).closest("div.dt-container")[0]==n&&(n=a.cell($(e.target).closest("td, th"))).any()&&(c=$.Event("user-select.dt"),eventTrigger(a,c,[l,n,e]),c.isDefaultPrevented()||(c=n.index(),"row"===l?(t=c.row,typeSelect(e,a,s,"row",t)):"column"===l?(t=n.index().column,typeSelect(e,a,s,"column",t)):"cell"===l&&(t=n.index(),typeSelect(e,a,s,"cell",t)),s._select_lastCell=c))}),$("body").on("click.dtSelect"+_safeId(a.table().node()),function(e){var t;!l._select.blurable||$(e.target).parents().filter(a.table().container()).length||0===$(e.target).parents("html").length||$(e.target).parents("div.DTE").length||(t=$.Event("select-blur.dt"),eventTrigger(a,t,[e.target,e]),t.isDefaultPrevented())||clear(l,!0)})}function eventTrigger(e,t,l,s){s&&!e.flatten().length||("string"==typeof t&&(t+=".dt"),l.unshift(e),$(e.table().node()).trigger(t,l))}function info(s,e){var t,l,c,n,a;"api"!==s.select.style()&&!1!==s.select.info()&&(a=s.rows({selected:!0}).flatten().length,t=s.columns({selected:!0}).flatten().length,l=s.cells({selected:!0}).flatten().length,c=function(e,t,l){e.append($('<span class="select-item"/>').append(s.i18n("select."+t+"s",{_:"%d "+t+"s selected",0:"",1:"1 "+t+" selected"},l)))},e=$(e),c(n=$('<span class="select-info"/>'),"row",a),c(n,"column",t),c(n,"cell",l),(a=e.children("span.select-info")).length&&a.remove(),""!==n.text())&&e.append(n)}function initCheckboxHeader(a){a.columns(".dt-select").every(function(){var n,e=this.header();$("input",e).length||(n=$("<input>").attr({class:"dt-select-checkbox",type:"checkbox","aria-label":a.i18n("select.aria.headerCheckbox")||"Select all rows"}).appendTo(e).on("change",function(){this.checked?a.rows({search:"applied"}).select():a.rows({selected:!0}).deselect()}).on("click",function(e){e.stopPropagation()}),a.on("draw select deselect",function(e,t,l){var s,c;"row"!==l&&l||(l=a.rows({selected:!0}).count(),s=a.rows({search:"applied",selected:!0}).count(),c=a.rows({search:"applied"}).count(),s&&s<=l&&s===c?n.prop("checked",!0).prop("indeterminate",!1):0===s&&0===l?n.prop("checked",!1).prop("indeterminate",!1):n.prop("checked",!1).prop("indeterminate",!0))}))})}function init(a){var c=new DataTable.Api(a);a._select_init=!0,a.aoRowCreatedCallback.push(function(e,t,l){var s,c,n=a.aoData[l];for(n._select_selected&&$(e).addClass(a._select.className),s=0,c=a.aoColumns.length;s<c;s++)(a.aoColumns[s]._select_selected||n._selected_cells&&n._selected_cells[s])&&$(n.anCells[s]).addClass(a._select.className)}),c.on("preXhr.dt.dtSelect",function(e,t){var l,s;t===c.settings()[0]&&(l=c.rows({selected:!0}).ids(!0).filter(function(e){return void 0!==e}),s=c.cells({selected:!0}).eq(0).map(function(e){var t=c.row(e.row).id(!0);return t?{row:t,column:e.column}:void 0}).filter(function(e){return void 0!==e}),c.one("draw.dt.dtSelect",function(){c.rows(l).select(),s.any()&&s.each(function(e){c.cells(e.row,e.column).select()})}))}),c.on("info.dt",function(e,t,l){t._select.infoEls.includes(l)||t._select.infoEls.push(l),info(c,l)}),c.on("select.dtSelect.dt deselect.dtSelect.dt",function(){a._select.infoEls.forEach(function(e){info(c,e)}),c.state.save()}),c.on("destroy.dtSelect",function(){$(c.rows({selected:!0}).nodes()).removeClass(c.settings()[0]._select.className),disableMouseSelection(c),c.off(".dtSelect"),$("body").off(".dtSelect"+_safeId(c.table().node()))})}function rowColumnRange(e,t,l,s){var c,n=e[t+"s"]({search:"applied"}).indexes(),s=n.indexOf(s),a=n.indexOf(l);e[t+"s"]({selected:!0}).any()||-1!==s?(a<s&&(c=a,a=s,s=c),n.splice(a+1,n.length),n.splice(0,s)):n.splice(n.indexOf(l)+1,n.length),e[t](l,{selected:!0}).any()?(n.splice(n.indexOf(l),1),e[t+"s"](n).deselect()):e[t+"s"](n).select()}function clear(e,t){!t&&"single"!==e._select.style||((t=new DataTable.Api(e)).rows({selected:!0}).deselect(),t.columns({selected:!0}).deselect(),t.cells({selected:!0}).deselect())}function typeSelect(e,t,l,s,c){var n=t.select.style(),a=t.select.toggleable(),o=t[s](c,{selected:!0}).any();o&&!a||("os"===n?e.ctrlKey||e.metaKey?t[s](c).select(!o):e.shiftKey?"cell"===s?cellRange(t,c,l._select_lastCell||null):rowColumnRange(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):(a=t[s+"s"]({selected:!0}),o&&1===a.flatten().length?t[s](c).deselect():(a.deselect(),t[s](c).select())):"multi+shift"==n&&e.shiftKey?"cell"===s?cellRange(t,c,l._select_lastCell||null):rowColumnRange(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):t[s](c).select(!o))}function _safeId(e){return e.id.replace(/[^a-zA-Z0-9\-\_]/g,"-")}DataTable.select={},DataTable.select.version="2.0.0",DataTable.select.init=function(c){var e,t,l,s,n,a,o,i,r,d,u,f,h=c.settings()[0];if(!DataTable.versionCheck("2"))throw"Warning: Select requires DataTables 2 or newer";h._select||(e=c.state.loaded(),t=function(e,t,l){if(null!==l&&void 0!==l.select){if(c.rows({selected:!0}).any()&&c.rows().deselect(),void 0!==l.select.rows&&c.rows(l.select.rows).select(),c.columns({selected:!0}).any()&&c.columns().deselect(),void 0!==l.select.columns&&c.columns(l.select.columns).select(),c.cells({selected:!0}).any()&&c.cells().deselect(),void 0!==l.select.cells)for(var s=0;s<l.select.cells.length;s++)c.cell(l.select.cells[s].row,l.select.cells[s].column).select();c.state.save()}},c.on("stateSaveParams",function(e,t,l){l.select={},l.select.rows=c.rows({selected:!0}).ids(!0).toArray(),l.select.columns=c.columns({selected:!0})[0],l.select.cells=c.cells({selected:!0})[0].map(function(e){return{row:c.row(e.row).id(!0),column:e.column}})}).on("stateLoadParams",t).one("init",function(){t(0,0,e)}),s=h.oInit.select,l=DataTable.defaults.select,l=void 0===s?l:s,s="row",r="td, th",d="selected",f=!(u=i=o=!(a=!(n="api"))),h._select={infoEls:[]},!0===l?(n="os",f=!0):"string"==typeof l?(n=l,f=!0):$.isPlainObject(l)&&(void 0!==l.blurable&&(a=l.blurable),void 0!==l.toggleable&&(o=l.toggleable),void 0!==l.info&&(i=l.info),void 0!==l.items&&(s=l.items),f=(n=void 0!==l.style?l.style:"os",!0),void 0!==l.selector&&(r=l.selector),void 0!==l.className&&(d=l.className),void 0!==l.headerCheckbox)&&(u=l.headerCheckbox),c.select.selector(r),c.select.items(s),c.select.style(n),c.select.blurable(a),c.select.toggleable(o),c.select.info(i),h._select.className=d,!f&&$(c.table().node()).hasClass("selectable")&&c.select.style("os"),u&&(initCheckboxHeader(c),c.on("init",function(){initCheckboxHeader(c)})))},$.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(e,i){DataTable.ext.selector[i.type].push(function(e,t,l){var s,c=t.selected,n=[];if(!0!==c&&!1!==c)return l;for(var a=0,o=l.length;a<o;a++)(s=e[i.prop][l[a]])&&(!0===c&&!0===s._select_selected||!1===c&&!s._select_selected)&&n.push(l[a]);return n})}),DataTable.ext.selector.cell.push(function(e,t,l){var s,c=t.selected,n=[];if(void 0===c)return l;for(var a=0,o=l.length;a<o;a++)(s=e.aoData[l[a].row])&&(!0===c&&s._selected_cells&&!0===s._selected_cells[l[a].column]||!1===c&&(!s._selected_cells||!s._selected_cells[l[a].column]))&&n.push(l[a]);return n});var apiRegister=DataTable.Api.register,apiRegisterPlural=DataTable.Api.registerPlural;function i18n(t,l){return function(e){return e.i18n("buttons."+t,l)}}function namespacedEvents(e){e=e._eventNamespace;return"draw.dt.DT"+e+" select.dt.DT"+e+" deselect.dt.DT"+e}function enabled(e,t){return!(-1===t.limitTo.indexOf("rows")||!e.rows({selected:!0}).any())||!(-1===t.limitTo.indexOf("columns")||!e.columns({selected:!0}).any())||!(-1===t.limitTo.indexOf("cells")||!e.cells({selected:!0}).any())}apiRegister("select()",function(){return this.iterator("table",function(e){DataTable.select.init(new DataTable.Api(e))})}),apiRegister("select.blurable()",function(t){return void 0===t?this.context[0]._select.blurable:this.iterator("table",function(e){e._select.blurable=t})}),apiRegister("select.toggleable()",function(t){return void 0===t?this.context[0]._select.toggleable:this.iterator("table",function(e){e._select.toggleable=t})}),apiRegister("select.info()",function(t){return void 0===t?this.context[0]._select.info:this.iterator("table",function(e){e._select.info=t})}),apiRegister("select.items()",function(t){return void 0===t?this.context[0]._select.items:this.iterator("table",function(e){e._select.items=t,eventTrigger(new DataTable.Api(e),"selectItems",[t])})}),apiRegister("select.style()",function(l){return void 0===l?this.context[0]._select.style:this.iterator("table",function(e){e._select||DataTable.select.init(new DataTable.Api(e)),e._select_init||init(e),e._select.style=l;var t=new DataTable.Api(e);disableMouseSelection(t),"api"!==l&&enableMouseSelection(t),eventTrigger(new DataTable.Api(e),"selectStyle",[l])})}),apiRegister("select.selector()",function(t){return void 0===t?this.context[0]._select.selector:this.iterator("table",function(e){disableMouseSelection(new DataTable.Api(e)),e._select.selector=t,"api"!==e._select.style&&enableMouseSelection(new DataTable.Api(e))})}),apiRegister("select.last()",function(e){var t=this.context[0];return e?(t._select_lastCell=e,this):t._select_lastCell}),apiRegisterPlural("rows().select()","row().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("row",function(e,t){clear(e);var l=e.aoData[t],s=e.aoColumns;$(l.nTr).addClass(e._select.className),l._select_selected=!0;for(var c=0;c<s.length;c++)"select-checkbox"===s[c].sType&&($("input.dt-select-checkbox",l.anCells[c]).prop("checked",!0),l._aSortData[c]=null)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["row",l[t]],!0)}),this)}),apiRegister("row().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoData[this[0]]&&e.aoData[this[0]]._select_selected)}),apiRegisterPlural("columns().select()","column().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("column",function(e,t){clear(e),e.aoColumns[t]._select_selected=!0;t=new DataTable.Api(e).column(t);$(t.header()).addClass(e._select.className),$(t.footer()).addClass(e._select.className),t.nodes().to$().addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["column",l[t]],!0)}),this)}),apiRegister("column().selected()",function(){var e=this.context[0];return!!(e&&this.length&&e.aoColumns[this[0]]&&e.aoColumns[this[0]]._select_selected)}),apiRegisterPlural("cells().select()","cell().select()",function(e){var l=this;return!1===e?this.deselect():(this.iterator("cell",function(e,t,l){clear(e);t=e.aoData[t];void 0===t._selected_cells&&(t._selected_cells=[]),t._selected_cells[l]=!0,t.anCells&&$(t.anCells[l]).addClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"select",["cell",l.cells(l[t]).indexes().toArray()],!0)}),this)}),apiRegister("cell().selected()",function(){var e=this.context[0];if(e&&this.length){e=e.aoData[this[0][0].row];if(e&&e._selected_cells&&e._selected_cells[this[0][0].column])return!0}return!1}),apiRegisterPlural("rows().deselect()","row().deselect()",function(){var l=this;return this.iterator("row",function(e,t){var l=e.aoData[t],s=e.aoColumns;$(l.nTr).removeClass(e._select.className),l._select_selected=!1,e._select_lastCell=null;for(var c=0;c<s.length;c++)"select-checkbox"===s[c].sType&&($("input.dt-select-checkbox",l.anCells[c]).prop("checked",!1),l._aSortData[c]=null)}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["row",l[t]],!0)}),this}),apiRegisterPlural("columns().deselect()","column().deselect()",function(){var l=this;return this.iterator("column",function(s,e){s.aoColumns[e]._select_selected=!1;var t=new DataTable.Api(s),l=t.column(e);$(l.header()).removeClass(s._select.className),$(l.footer()).removeClass(s._select.className),t.cells(null,e).indexes().each(function(e){var t=s.aoData[e.row],l=t._selected_cells;!t.anCells||l&&l[e.column]||$(t.anCells[e.column]).removeClass(s._select.className)})}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["column",l[t]],!0)}),this}),apiRegisterPlural("cells().deselect()","cell().deselect()",function(){var l=this;return this.iterator("cell",function(e,t,l){t=e.aoData[t];void 0!==t._selected_cells&&(t._selected_cells[l]=!1),t.anCells&&!e.aoColumns[l]._select_selected&&$(t.anCells[l]).removeClass(e._select.className)}),this.iterator("table",function(e,t){eventTrigger(l,"deselect",["cell",l[t]],!0)}),this});var _buttonNamespace=0;$.extend(DataTable.ext.buttons,{selected:{text:i18n("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(e,t,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,e.on(namespacedEvents(l),function(){s.enable(enabled(e,l))}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectedSingle:{text:i18n("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(t,e,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,t.on(namespacedEvents(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(1===e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},selectAll:{text:i18n("selectAll","Select all"),className:"buttons-select-all",action:function(e,t,l,s){var c=this.select.items(),n=s.selectorModifier;(n?("function"==typeof n&&(n=n.call(t,e,t,l,s)),this[c+"s"](n)):this[c+"s"]()).select()}},selectNone:{text:i18n("selectNone","Deselect all"),className:"buttons-select-none",action:function(){clear(this.settings()[0],!0)},init:function(t,e,l){var s=this;l._eventNamespace=".select"+_buttonNamespace++,t.on(namespacedEvents(l),function(){var e=t.rows({selected:!0}).flatten().length+t.columns({selected:!0}).flatten().length+t.cells({selected:!0}).flatten().length;s.enable(0<e)}),this.disable()},destroy:function(e,t,l){e.off(l._eventNamespace)}},showSelected:{text:i18n("showSelected","Show only selected"),className:"buttons-show-selected",action:function(e,t){var s;t.search.fixed("dt-select")?(t.search.fixed("dt-select",null),this.active(!1)):(s=t.settings()[0].aoData,t.search.fixed("dt-select",function(e,t,l){return s[l]._select_selected}),this.active(!0)),t.draw()}}}),$.each(["Row","Column","Cell"],function(e,t){var c=t.toLowerCase();DataTable.ext.buttons["select"+t+"s"]={text:i18n("select"+t+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},init:function(e){var s=this;e.on("selectItems.dt.DT",function(e,t,l){s.active(l===c)})}}}),DataTable.type("select-checkbox",{className:"dt-select",detect:function(e){return"select-checkbox"===e&&e},order:{pre:function(e){return"X"===e?-1:0}}}),$.extend(!0,DataTable.defaults.oLanguage,{select:{aria:{rowCheckbox:"Select row"}}}),DataTable.render.select=function(e,t){var n=e?DataTable.util.get(e):null,a=t?DataTable.util.get(t):null;return function(e,t,l,s){var c=s.settings.aoData[s.row]._select_selected,s=s.settings.oLanguage.select.aria.rowCheckbox;return"display"===t?$("<input>").attr({"aria-label":s,class:"dt-select-checkbox",name:a?a(l):null,type:"checkbox",value:n?n(l):null,checked:c})[0]:"type"===t?"select-checkbox":"filter"!==t&&c?"X":""}},DataTable.ext.order["select-checkbox"]=function(t,e){return this.api().column(e,{order:"index"}).nodes().map(function(e){return"row"===t._select.items?$(e).parent().hasClass(t._select.className):"cell"===t._select.items&&$(e).hasClass(t._select.className)})},$.fn.DataTable.select=DataTable.select,$(document).on("preInit.dt.dtSelect",function(e,t){"dt"===e.namespace&&DataTable.select.init(new DataTable.Api(t))});export default DataTable;
@@ -1,4 +1,4 @@
1
- /*! Select for DataTables 1.7.0
1
+ /*! Select for DataTables 2.0.0
2
2
  * © SpryMedia Ltd - datatables.net/license/mit
3
3
  */
4
4
 
@@ -12,11 +12,15 @@ let $ = jQuery;
12
12
  // Version information for debugger
13
13
  DataTable.select = {};
14
14
 
15
- DataTable.select.version = '1.7.0';
15
+ DataTable.select.version = '2.0.0';
16
16
 
17
17
  DataTable.select.init = function (dt) {
18
18
  var ctx = dt.settings()[0];
19
19
 
20
+ if (!DataTable.versionCheck('2')) {
21
+ throw 'Warning: Select requires DataTables 2 or newer';
22
+ }
23
+
20
24
  if (ctx._select) {
21
25
  return;
22
26
  }
@@ -81,9 +85,12 @@ DataTable.select.init = function (dt) {
81
85
  var info = true;
82
86
  var selector = 'td, th';
83
87
  var className = 'selected';
88
+ var headerCheckbox = true;
84
89
  var setStyle = false;
85
90
 
86
- ctx._select = {};
91
+ ctx._select = {
92
+ infoEls: []
93
+ };
87
94
 
88
95
  // Initialisation customisations
89
96
  if (opts === true) {
@@ -127,6 +134,10 @@ DataTable.select.init = function (dt) {
127
134
  if (opts.className !== undefined) {
128
135
  className = opts.className;
129
136
  }
137
+
138
+ if (opts.headerCheckbox !== undefined) {
139
+ headerCheckbox = opts.headerCheckbox;
140
+ }
130
141
  }
131
142
 
132
143
  dt.select.selector(selector);
@@ -137,27 +148,21 @@ DataTable.select.init = function (dt) {
137
148
  dt.select.info(info);
138
149
  ctx._select.className = className;
139
150
 
140
- // Sort table based on selected rows. Requires Select Datatables extension
141
- $.fn.dataTable.ext.order['select-checkbox'] = function (settings, col) {
142
- return this.api()
143
- .column(col, { order: 'index' })
144
- .nodes()
145
- .map(function (td) {
146
- if (settings._select.items === 'row') {
147
- return $(td).parent().hasClass(settings._select.className);
148
- }
149
- else if (settings._select.items === 'cell') {
150
- return $(td).hasClass(settings._select.className);
151
- }
152
- return false;
153
- });
154
- };
155
-
156
151
  // If the init options haven't enabled select, but there is a selectable
157
152
  // class name, then enable
158
153
  if (!setStyle && $(dt.table().node()).hasClass('selectable')) {
159
154
  dt.select.style('os');
160
155
  }
156
+
157
+ // Insert a checkbox into the header if needed - might need to wait
158
+ // for init complete, or it might already be done
159
+ if (headerCheckbox) {
160
+ initCheckboxHeader(dt);
161
+
162
+ dt.on('init', function () {
163
+ initCheckboxHeader(dt);
164
+ });
165
+ }
161
166
  };
162
167
 
163
168
  /*
@@ -209,6 +214,7 @@ The `_select` object contains the following properties:
209
214
  on the row
210
215
  info:boolean - If the selection summary should be shown in the table
211
216
  information elements
217
+ infoEls:element[] - List of HTML elements with info elements for a table
212
218
  }
213
219
  ```
214
220
 
@@ -393,10 +399,10 @@ function enableMouseSelection(dt) {
393
399
  }
394
400
 
395
401
  var ctx = dt.settings()[0];
396
- var wrapperClass = dt.settings()[0].oClasses.sWrapper.trim().replace(/ +/g, '.');
402
+ var container = dt.table().container();
397
403
 
398
404
  // Ignore clicks inside a sub-table
399
- if ($(e.target).closest('div.' + wrapperClass)[0] != dt.table().container()) {
405
+ if ($(e.target).closest('div.dt-container')[0] != container) {
400
406
  return;
401
407
  }
402
408
 
@@ -494,14 +500,8 @@ function eventTrigger(api, type, args, any) {
494
500
  * @param {DataTable.Api} api DataTable to update
495
501
  * @private
496
502
  */
497
- function info(api) {
498
- var ctx = api.settings()[0];
499
-
500
- if (!ctx._select.info || !ctx.aanFeatures.i) {
501
- return;
502
- }
503
-
504
- if (api.select.style() === 'api') {
503
+ function info(api, node) {
504
+ if (api.select.style() === 'api' || api.select.info() === false) {
505
505
  return;
506
506
  }
507
507
 
@@ -521,22 +521,81 @@ function info(api) {
521
521
  );
522
522
  };
523
523
 
524
- // Internal knowledge of DataTables to loop over all information elements
525
- $.each(ctx.aanFeatures.i, function (i, el) {
526
- el = $(el);
524
+ var el = $(node);
525
+ var output = $('<span class="select-info"/>');
527
526
 
528
- var output = $('<span class="select-info"/>');
529
- add(output, 'row', rows);
530
- add(output, 'column', columns);
531
- add(output, 'cell', cells);
527
+ add(output, 'row', rows);
528
+ add(output, 'column', columns);
529
+ add(output, 'cell', cells);
532
530
 
533
- var exisiting = el.children('span.select-info');
534
- if (exisiting.length) {
535
- exisiting.remove();
536
- }
531
+ var existing = el.children('span.select-info');
532
+
533
+ if (existing.length) {
534
+ existing.remove();
535
+ }
537
536
 
538
- if (output.text() !== '') {
539
- el.append(output);
537
+ if (output.text() !== '') {
538
+ el.append(output);
539
+ }
540
+ }
541
+
542
+ /**
543
+ * Add a checkbox to the header for checkbox columns, allowing all rows to
544
+ * be selected, deselected or just to show the state.
545
+ *
546
+ * @param {*} dt API
547
+ */
548
+ function initCheckboxHeader( dt ) {
549
+ // Find any checkbox column(s)
550
+ dt.columns('.dt-select').every(function () {
551
+ var header = this.header();
552
+
553
+ if (! $('input', header).length) {
554
+ // If no checkbox yet, insert one
555
+ var input = $('<input>')
556
+ .attr({
557
+ class: 'dt-select-checkbox',
558
+ type: 'checkbox',
559
+ 'aria-label': dt.i18n('select.aria.headerCheckbox') || 'Select all rows'
560
+ })
561
+ .appendTo(header)
562
+ .on('change', function () {
563
+ if (this.checked) {
564
+ dt.rows({search: 'applied'}).select();
565
+ }
566
+ else {
567
+ dt.rows({selected: true}).deselect();
568
+ }
569
+ })
570
+ .on('click', function (e) {
571
+ e.stopPropagation();
572
+ });
573
+
574
+ // Update the header checkbox's state when the selection in the
575
+ // table changes
576
+ dt.on('draw select deselect', function (e, pass, type) {
577
+ if (type === 'row' || ! type) {
578
+ var count = dt.rows({selected: true}).count();
579
+ var search = dt.rows({search: 'applied', selected: true}).count();
580
+ var available = dt.rows({search: 'applied'}).count();
581
+
582
+ if (search && search <= count && search === available) {
583
+ input
584
+ .prop('checked', true)
585
+ .prop('indeterminate', false);
586
+ }
587
+ else if (search === 0 && count === 0) {
588
+ input
589
+ .prop('checked', false)
590
+ .prop('indeterminate', false);
591
+ }
592
+ else {
593
+ input
594
+ .prop('checked', false)
595
+ .prop('indeterminate', true);
596
+ }
597
+ }
598
+ });
540
599
  }
541
600
  });
542
601
  }
@@ -562,8 +621,7 @@ function init(ctx) {
562
621
  // This method of attaching to `aoRowCreatedCallback` is a hack until
563
622
  // DataTables has proper events for row manipulation If you are reviewing
564
623
  // this code to create your own plug-ins, please do not do this!
565
- ctx.aoRowCreatedCallback.push({
566
- fn: function (row, data, index) {
624
+ ctx.aoRowCreatedCallback.push(function (row, data, index) {
567
625
  var i, ien;
568
626
  var d = ctx.aoData[index];
569
627
 
@@ -582,9 +640,8 @@ function init(ctx) {
582
640
  $(d.anCells[i]).addClass(ctx._select.className);
583
641
  }
584
642
  }
585
- },
586
- sName: 'select-deferRender'
587
- });
643
+ }
644
+ );
588
645
 
589
646
  // On Ajax reload we want to reselect all rows which are currently selected,
590
647
  // if there is an rowId (i.e. a unique value to identify each row with)
@@ -628,8 +685,20 @@ function init(ctx) {
628
685
  });
629
686
 
630
687
  // Update the table information element with selected item summary
631
- api.on('draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt', function () {
632
- info(api);
688
+ api.on('info.dt', function (e, ctx, node) {
689
+ // Store the info node for updating on select / deselect
690
+ if (!ctx._select.infoEls.includes(node)) {
691
+ ctx._select.infoEls.push(node);
692
+ }
693
+
694
+ info(api, node);
695
+ });
696
+
697
+ api.on('select.dtSelect.dt deselect.dtSelect.dt', function () {
698
+ ctx._select.infoEls.forEach(function (el) {
699
+ info(api, el);
700
+ });
701
+
633
702
  api.state.save();
634
703
  });
635
704
 
@@ -657,13 +726,13 @@ function init(ctx) {
657
726
  function rowColumnRange(dt, type, idx, last) {
658
727
  // Add a range of rows from the last selected row to this one
659
728
  var indexes = dt[type + 's']({ search: 'applied' }).indexes();
660
- var idx1 = $.inArray(last, indexes);
661
- var idx2 = $.inArray(idx, indexes);
729
+ var idx1 = indexes.indexOf(last);
730
+ var idx2 = indexes.indexOf(idx);
662
731
 
663
732
  if (!dt[type + 's']({ selected: true }).any() && idx1 === -1) {
664
733
  // select from top to here - slightly odd, but both Windows and Mac OS
665
734
  // do this
666
- indexes.splice($.inArray(idx, indexes) + 1, indexes.length);
735
+ indexes.splice(indexes.indexOf(idx) + 1, indexes.length);
667
736
  }
668
737
  else {
669
738
  // reverse so we can shift click 'up' as well as down
@@ -683,7 +752,7 @@ function rowColumnRange(dt, type, idx, last) {
683
752
  }
684
753
  else {
685
754
  // Deselect range - need to keep the clicked on row selected
686
- indexes.splice($.inArray(idx, indexes), 1);
755
+ indexes.splice(indexes.indexOf(idx), 1);
687
756
  dt[type + 's'](indexes).deselect();
688
757
  }
689
758
  }
@@ -810,8 +879,10 @@ $.each(
810
879
  data = settings[o.prop][indexes[i]];
811
880
 
812
881
  if (
813
- (selected === true && data._select_selected === true) ||
814
- (selected === false && !data._select_selected)
882
+ data && (
883
+ (selected === true && data._select_selected === true) ||
884
+ (selected === false && !data._select_selected)
885
+ )
815
886
  ) {
816
887
  out.push(indexes[i]);
817
888
  }
@@ -835,11 +906,13 @@ DataTable.ext.selector.cell.push(function (settings, opts, cells) {
835
906
  rowData = settings.aoData[cells[i].row];
836
907
 
837
908
  if (
838
- (selected === true &&
839
- rowData._selected_cells &&
840
- rowData._selected_cells[cells[i].column] === true) ||
841
- (selected === false &&
842
- (!rowData._selected_cells || !rowData._selected_cells[cells[i].column]))
909
+ rowData && (
910
+ (selected === true &&
911
+ rowData._selected_cells &&
912
+ rowData._selected_cells[cells[i].column] === true) ||
913
+ (selected === false &&
914
+ (!rowData._selected_cells || !rowData._selected_cells[cells[i].column]))
915
+ )
843
916
  ) {
844
917
  out.push(cells[i]);
845
918
  }
@@ -954,6 +1027,17 @@ apiRegister('select.selector()', function (selector) {
954
1027
  });
955
1028
  });
956
1029
 
1030
+ apiRegister('select.last()', function (set) {
1031
+ let ctx = this.context[0];
1032
+
1033
+ if (set) {
1034
+ ctx._select_lastCell = set;
1035
+ return this;
1036
+ }
1037
+
1038
+ return ctx._select_lastCell;
1039
+ });
1040
+
957
1041
  apiRegisterPlural('rows().select()', 'row().select()', function (select) {
958
1042
  var api = this;
959
1043
 
@@ -964,8 +1048,26 @@ apiRegisterPlural('rows().select()', 'row().select()', function (select) {
964
1048
  this.iterator('row', function (ctx, idx) {
965
1049
  clear(ctx);
966
1050
 
967
- ctx.aoData[idx]._select_selected = true;
968
- $(ctx.aoData[idx].nTr).addClass(ctx._select.className);
1051
+ // There is a good amount of knowledge of DataTables internals in
1052
+ // this function. It _could_ be done without that, but it would hurt
1053
+ // performance (or DT would need new APIs for this work)
1054
+ var dtData = ctx.aoData[idx];
1055
+ var dtColumns = ctx.aoColumns;
1056
+
1057
+ $(dtData.nTr).addClass(ctx._select.className);
1058
+ dtData._select_selected = true;
1059
+
1060
+ for (var i=0 ; i<dtColumns.length ; i++) {
1061
+ var col = dtColumns[i];
1062
+
1063
+ if (col.sType === 'select-checkbox') {
1064
+ // Make sure the checkbox shows the right state
1065
+ $('input.dt-select-checkbox', dtData.anCells[i]).prop('checked', true);
1066
+
1067
+ // Invalidate the sort data for this column
1068
+ dtData._aSortData[i] = null;
1069
+ }
1070
+ }
969
1071
  });
970
1072
 
971
1073
  this.iterator('table', function (ctx, i) {
@@ -1070,9 +1172,25 @@ apiRegisterPlural('rows().deselect()', 'row().deselect()', function () {
1070
1172
  var api = this;
1071
1173
 
1072
1174
  this.iterator('row', function (ctx, idx) {
1073
- ctx.aoData[idx]._select_selected = false;
1175
+ // Like the select action, this has a lot of knowledge about DT internally
1176
+ var dtData = ctx.aoData[idx];
1177
+ var dtColumns = ctx.aoColumns;
1178
+
1179
+ $(dtData.nTr).removeClass(ctx._select.className);
1180
+ dtData._select_selected = false;
1074
1181
  ctx._select_lastCell = null;
1075
- $(ctx.aoData[idx].nTr).removeClass(ctx._select.className);
1182
+
1183
+ for (var i=0 ; i<dtColumns.length ; i++) {
1184
+ var col = dtColumns[i];
1185
+
1186
+ if (col.sType === 'select-checkbox') {
1187
+ // Make sure the checkbox shows the right state
1188
+ $('input.dt-select-checkbox', dtData.anCells[i]).prop('checked', false);
1189
+
1190
+ // Invalidate the sort data for this column
1191
+ dtData._aSortData[i] = null;
1192
+ }
1193
+ }
1076
1194
  });
1077
1195
 
1078
1196
  this.iterator('table', function (ctx, i) {
@@ -1158,15 +1276,15 @@ function namespacedEvents(config) {
1158
1276
  }
1159
1277
 
1160
1278
  function enabled(dt, config) {
1161
- if ($.inArray('rows', config.limitTo) !== -1 && dt.rows({ selected: true }).any()) {
1279
+ if (config.limitTo.indexOf('rows') !== -1 && dt.rows({ selected: true }).any()) {
1162
1280
  return true;
1163
1281
  }
1164
1282
 
1165
- if ($.inArray('columns', config.limitTo) !== -1 && dt.columns({ selected: true }).any()) {
1283
+ if (config.limitTo.indexOf('columns') !== -1 && dt.columns({ selected: true }).any()) {
1166
1284
  return true;
1167
1285
  }
1168
1286
 
1169
- if ($.inArray('cells', config.limitTo) !== -1 && dt.cells({ selected: true }).any()) {
1287
+ if (config.limitTo.indexOf('cells') !== -1 && dt.cells({ selected: true }).any()) {
1170
1288
  return true;
1171
1289
  }
1172
1290
 
@@ -1266,34 +1384,23 @@ $.extend(DataTable.ext.buttons, {
1266
1384
  showSelected: {
1267
1385
  text: i18n('showSelected', 'Show only selected'),
1268
1386
  className: 'buttons-show-selected',
1269
- action: function (e, dt, node, conf) {
1270
- // Works by having a filtering function which will reduce to the selected
1271
- // items only. So we can re-reference the function it gets stored in the
1272
- // `conf` object
1273
- if (conf._filter) {
1274
- var idx = DataTable.ext.search.indexOf(conf._filter);
1275
-
1276
- if (idx !== -1) {
1277
- DataTable.ext.search.splice(idx, 1);
1278
- conf._filter = null;
1279
- }
1387
+ action: function (e, dt) {
1388
+ if (dt.search.fixed('dt-select')) {
1389
+ // Remove existing function
1390
+ dt.search.fixed('dt-select', null);
1280
1391
 
1281
1392
  this.active(false);
1282
1393
  }
1283
1394
  else {
1284
- var fn = function (s, data, idx) {
1285
- // Need to be sure we are operating on our table!
1286
- if (s !== dt.settings()[0]) {
1287
- return true;
1288
- }
1289
-
1290
- let row = s.aoData[idx];
1291
-
1292
- return row._select_selected;
1293
- };
1294
-
1295
- conf._filter = fn;
1296
- DataTable.ext.search.push(fn);
1395
+ // Use a fixed filtering function to match on selected rows
1396
+ // This needs to reference the internal aoData since that is
1397
+ // where Select stores its reference for the selected state
1398
+ var dataSrc = dt.settings()[0].aoData;
1399
+
1400
+ dt.search.fixed('dt-select', function (text, data, idx) {
1401
+ // _select_selected is set by Select on the data object for the row
1402
+ return dataSrc[idx]._select_selected;
1403
+ });
1297
1404
 
1298
1405
  this.active(true);
1299
1406
  }
@@ -1322,6 +1429,74 @@ $.each(['Row', 'Column', 'Cell'], function (i, item) {
1322
1429
  };
1323
1430
  });
1324
1431
 
1432
+ DataTable.type('select-checkbox', {
1433
+ className: 'dt-select',
1434
+ detect: function (data) {
1435
+ // Rendering function will tell us if it is a checkbox type
1436
+ return data === 'select-checkbox' ? data : false;
1437
+ },
1438
+ order: {
1439
+ pre: function (d) {
1440
+ return d === 'X' ? -1 : 0;
1441
+ }
1442
+ }
1443
+ });
1444
+
1445
+ $.extend(true, DataTable.defaults.oLanguage, {
1446
+ select: {
1447
+ aria: {
1448
+ rowCheckbox: 'Select row'
1449
+ }
1450
+ }
1451
+ });
1452
+
1453
+ DataTable.render.select = function (valueProp, nameProp) {
1454
+ var valueFn = valueProp ? DataTable.util.get(valueProp) : null;
1455
+ var nameFn = nameProp ? DataTable.util.get(nameProp) : null;
1456
+
1457
+ return function (data, type, row, meta) {
1458
+ var dtRow = meta.settings.aoData[meta.row];
1459
+ var selected = dtRow._select_selected;
1460
+ var ariaLabel = meta.settings.oLanguage.select.aria.rowCheckbox;
1461
+
1462
+ if (type === 'display') {
1463
+ return $('<input>')
1464
+ .attr({
1465
+ 'aria-label': ariaLabel,
1466
+ class: 'dt-select-checkbox',
1467
+ name: nameFn ? nameFn(row) : null,
1468
+ type: 'checkbox',
1469
+ value: valueFn ? valueFn(row) : null,
1470
+ checked: selected
1471
+ })[0];
1472
+ }
1473
+ else if (type === 'type') {
1474
+ return 'select-checkbox';
1475
+ }
1476
+ else if (type === 'filter') {
1477
+ return '';
1478
+ }
1479
+
1480
+ return selected ? 'X' : '';
1481
+ }
1482
+ }
1483
+
1484
+ // Legacy checkbox ordering
1485
+ DataTable.ext.order['select-checkbox'] = function (settings, col) {
1486
+ return this.api()
1487
+ .column(col, { order: 'index' })
1488
+ .nodes()
1489
+ .map(function (td) {
1490
+ if (settings._select.items === 'row') {
1491
+ return $(td).parent().hasClass(settings._select.className);
1492
+ }
1493
+ else if (settings._select.items === 'cell') {
1494
+ return $(td).hasClass(settings._select.className);
1495
+ }
1496
+ return false;
1497
+ });
1498
+ };
1499
+
1325
1500
  $.fn.DataTable.select = DataTable.select;
1326
1501
 
1327
1502
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "js/dataTables.select.js",
5
5
  "module": "js/dataTables.select.mjs",
6
6
  "types": "./types/types.d.ts",
7
- "version": "1.7.0",
7
+ "version": "2.0.0",
8
8
  "files": [
9
9
  "js/**/*.js",
10
10
  "js/**/*.mjs",
@@ -20,7 +20,7 @@
20
20
  "sort"
21
21
  ],
22
22
  "dependencies": {
23
- "datatables.net": ">=1.13.4",
23
+ "datatables.net": ">=2.0.0",
24
24
  "jquery": ">=1.7"
25
25
  },
26
26
  "moduleType": [
package/types/types.d.ts CHANGED
@@ -80,7 +80,7 @@ declare module 'datatables.net' {
80
80
  deselect(): Api<T>;
81
81
  }
82
82
 
83
- interface ApiStatic {
83
+ interface DataTablesStatic {
84
84
  /**
85
85
  * Select static methods
86
86
  */
@@ -152,7 +152,7 @@ interface ApiSelect<Api> {
152
152
  * @param flag Value to set for the blurable option - true to enable, false to disable.
153
153
  * @returns DataTables Api instance for chaining
154
154
  */
155
- blurable(flag): Api;
155
+ blurable(flag: boolean): Api;
156
156
 
157
157
  /**
158
158
  * Get the summary information display state for the table.
@@ -167,7 +167,7 @@ interface ApiSelect<Api> {
167
167
  * @param flag Value to set for the information summary display state - true to enable, false to disable.
168
168
  * @returns DataTables API instance for chaining.
169
169
  */
170
- info(flag): Api;
170
+ info(flag: boolean): Api;
171
171
 
172
172
  /**
173
173
  * Get the items that will be selected by user interaction (i.e. a click on the table).
@@ -226,6 +226,6 @@ interface ApiSelect<Api> {
226
226
  * @param set true to allow item deselection, false to disallow.
227
227
  * @returns DataTables API instance for chaining.
228
228
  */
229
- toggleable(set): Api;
229
+ toggleable(set: boolean): Api;
230
230
  }
231
231