datatables.net-select 2.0.5 → 2.1.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.
- package/js/dataTables.select.js +208 -71
- package/js/dataTables.select.min.js +2 -2
- package/js/dataTables.select.min.mjs +2 -2
- package/js/dataTables.select.mjs +208 -71
- package/package.json +1 -1
- package/types/types.d.ts +21 -1
package/js/dataTables.select.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Select for DataTables 2.0
|
|
1
|
+
/*! Select for DataTables 2.1.0
|
|
2
2
|
* © SpryMedia Ltd - datatables.net/license/mit
|
|
3
3
|
*/
|
|
4
4
|
|
|
@@ -56,7 +56,7 @@ DataTable.select.classes = {
|
|
|
56
56
|
checkbox: 'dt-select-checkbox'
|
|
57
57
|
};
|
|
58
58
|
|
|
59
|
-
DataTable.select.version = '2.0
|
|
59
|
+
DataTable.select.version = '2.1.0';
|
|
60
60
|
|
|
61
61
|
DataTable.select.init = function (dt) {
|
|
62
62
|
var ctx = dt.settings()[0];
|
|
@@ -126,6 +126,7 @@ DataTable.select.init = function (dt) {
|
|
|
126
126
|
var style = 'api';
|
|
127
127
|
var blurable = false;
|
|
128
128
|
var toggleable = true;
|
|
129
|
+
var selectable = null;
|
|
129
130
|
var info = true;
|
|
130
131
|
var selector = 'td, th';
|
|
131
132
|
var className = 'selected';
|
|
@@ -182,6 +183,10 @@ DataTable.select.init = function (dt) {
|
|
|
182
183
|
if (opts.headerCheckbox !== undefined) {
|
|
183
184
|
headerCheckbox = opts.headerCheckbox;
|
|
184
185
|
}
|
|
186
|
+
|
|
187
|
+
if (opts.selectable !== undefined) {
|
|
188
|
+
selectable = opts.selectable;
|
|
189
|
+
}
|
|
185
190
|
}
|
|
186
191
|
|
|
187
192
|
dt.select.selector(selector);
|
|
@@ -190,6 +195,7 @@ DataTable.select.init = function (dt) {
|
|
|
190
195
|
dt.select.blurable(blurable);
|
|
191
196
|
dt.select.toggleable(toggleable);
|
|
192
197
|
dt.select.info(info);
|
|
198
|
+
dt.select.selectable(selectable);
|
|
193
199
|
ctx._select.className = className;
|
|
194
200
|
|
|
195
201
|
// If the init options haven't enabled select, but there is a selectable
|
|
@@ -199,11 +205,9 @@ DataTable.select.init = function (dt) {
|
|
|
199
205
|
}
|
|
200
206
|
|
|
201
207
|
// Insert a checkbox into the header if needed - might need to wait
|
|
202
|
-
// for init complete
|
|
208
|
+
// for init complete
|
|
203
209
|
if (headerCheckbox || headerCheckbox === 'select-page' || headerCheckbox === 'select-all') {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
dt.on('init', function () {
|
|
210
|
+
dt.ready(function () {
|
|
207
211
|
initCheckboxHeader(dt, headerCheckbox);
|
|
208
212
|
});
|
|
209
213
|
}
|
|
@@ -570,9 +574,13 @@ function info(api, node) {
|
|
|
570
574
|
return;
|
|
571
575
|
}
|
|
572
576
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
577
|
+
// If _select_set has any length, then ids are available and should be used
|
|
578
|
+
// as the counter. Otherwise use the API to workout how many rows are
|
|
579
|
+
// selected.
|
|
580
|
+
var rowSetLength = api.settings()[0]._select_set.length;
|
|
581
|
+
var rows = rowSetLength ? rowSetLength : api.rows({ selected: true }).count();
|
|
582
|
+
var columns = api.columns({ selected: true }).count();
|
|
583
|
+
var cells = api.cells({ selected: true }).count();
|
|
576
584
|
|
|
577
585
|
var add = function (el, name, num) {
|
|
578
586
|
el.append(
|
|
@@ -612,7 +620,8 @@ function info(api, node) {
|
|
|
612
620
|
* @param {*} headerCheckbox the header checkbox option
|
|
613
621
|
*/
|
|
614
622
|
function initCheckboxHeader( dt, headerCheckbox ) {
|
|
615
|
-
var
|
|
623
|
+
var dtSettings = dt.settings()[0];
|
|
624
|
+
var dtInternalColumns = dtSettings.aoColumns;
|
|
616
625
|
|
|
617
626
|
// Find any checkbox column(s)
|
|
618
627
|
dt.columns().iterator('column', function (s, idx) {
|
|
@@ -636,33 +645,36 @@ function initCheckboxHeader( dt, headerCheckbox ) {
|
|
|
636
645
|
.on('change', function () {
|
|
637
646
|
if (this.checked) {
|
|
638
647
|
if (headerCheckbox == 'select-page') {
|
|
639
|
-
dt.rows({page: 'current'}).select()
|
|
648
|
+
dt.rows({page: 'current'}).select();
|
|
640
649
|
} else {
|
|
641
650
|
dt.rows({search: 'applied'}).select();
|
|
642
651
|
}
|
|
643
652
|
}
|
|
644
653
|
else {
|
|
645
|
-
|
|
654
|
+
if (headerCheckbox == 'select-page') {
|
|
655
|
+
dt.rows({page: 'current', selected: true}).deselect();
|
|
656
|
+
}
|
|
657
|
+
else {
|
|
658
|
+
dt.rows({selected: true}).deselect();
|
|
659
|
+
}
|
|
646
660
|
}
|
|
647
661
|
})
|
|
648
662
|
.on('click', function (e) {
|
|
649
663
|
e.stopPropagation();
|
|
650
664
|
});
|
|
651
|
-
|
|
665
|
+
|
|
652
666
|
// Update the header checkbox's state when the selection in the
|
|
653
667
|
// table changes
|
|
654
668
|
dt.on('draw select deselect', function (e, pass, type) {
|
|
655
669
|
if (type === 'row' || ! type) {
|
|
656
|
-
var
|
|
657
|
-
var search = dt.rows({search: 'applied', selected: true}).count();
|
|
658
|
-
var available = headerCheckbox == 'select-page' ? dt.rows({page: 'current'}).count() : dt.rows({search: 'applied'}).count();
|
|
670
|
+
var nums = headerCheckboxState(dt, headerCheckbox);
|
|
659
671
|
|
|
660
|
-
if (search && search <= count && search === available) {
|
|
672
|
+
if (nums.search && nums.search <= nums.count && nums.search === nums.available) {
|
|
661
673
|
input
|
|
662
674
|
.prop('checked', true)
|
|
663
675
|
.prop('indeterminate', false);
|
|
664
676
|
}
|
|
665
|
-
else if (search === 0 && count === 0) {
|
|
677
|
+
else if (nums.search === 0 && nums.count === 0) {
|
|
666
678
|
input
|
|
667
679
|
.prop('checked', false)
|
|
668
680
|
.prop('indeterminate', false);
|
|
@@ -678,6 +690,54 @@ function initCheckboxHeader( dt, headerCheckbox ) {
|
|
|
678
690
|
});
|
|
679
691
|
}
|
|
680
692
|
|
|
693
|
+
/**
|
|
694
|
+
* Determine the counts used to define the header checkbox's state
|
|
695
|
+
*
|
|
696
|
+
* @param {*} dt DT API
|
|
697
|
+
* @param {*} headerCheckbox Configuration for what the header checkbox does
|
|
698
|
+
* @returns Counts object
|
|
699
|
+
*/
|
|
700
|
+
function headerCheckboxState(dt, headerCheckbox) {
|
|
701
|
+
var ctx = dt.settings()[0];
|
|
702
|
+
var selectable = ctx._select.selectable;
|
|
703
|
+
var available = 0;
|
|
704
|
+
var count = headerCheckbox == 'select-page'
|
|
705
|
+
? dt.rows({page: 'current', selected: true}).count()
|
|
706
|
+
: dt.rows({selected: true}).count();
|
|
707
|
+
var search = headerCheckbox == 'select-page'
|
|
708
|
+
? dt.rows({page: 'current', selected: true}).count()
|
|
709
|
+
: dt.rows({search: 'applied', selected: true}).count();
|
|
710
|
+
|
|
711
|
+
if (! selectable) {
|
|
712
|
+
available = headerCheckbox == 'select-page'
|
|
713
|
+
? dt.rows({page: 'current'}).count()
|
|
714
|
+
: dt.rows({search: 'applied'}).count();
|
|
715
|
+
}
|
|
716
|
+
else {
|
|
717
|
+
// Need to count how many rows are actually selectable to know if all selectable
|
|
718
|
+
// rows are selected or not
|
|
719
|
+
var indexes = headerCheckbox == 'select-page'
|
|
720
|
+
? dt.rows({page: 'current'}).indexes()
|
|
721
|
+
: dt.rows({search: 'applied'}).indexes();
|
|
722
|
+
|
|
723
|
+
for (var i=0 ; i<indexes.length ; i++) {
|
|
724
|
+
// For speed I use the internal DataTables object.
|
|
725
|
+
var rowInternal = ctx.aoData[indexes[i]];
|
|
726
|
+
var result = selectable(rowInternal._aData, rowInternal.nTr, indexes[i]);
|
|
727
|
+
|
|
728
|
+
if (result) {
|
|
729
|
+
available++;
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
return {
|
|
735
|
+
available: available,
|
|
736
|
+
count: count,
|
|
737
|
+
search: search
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
|
|
681
741
|
/**
|
|
682
742
|
* Initialisation of a new table. Attach event handlers and callbacks to allow
|
|
683
743
|
* Select to operate correctly.
|
|
@@ -692,6 +752,9 @@ function init(ctx) {
|
|
|
692
752
|
var api = new DataTable.Api(ctx);
|
|
693
753
|
ctx._select_init = true;
|
|
694
754
|
|
|
755
|
+
// _select_set contains a list of the ids of all rows that are selected
|
|
756
|
+
ctx._select_set = [];
|
|
757
|
+
|
|
695
758
|
// Row callback so that classes can be added to rows and cells if the item
|
|
696
759
|
// was selected before the element was created. This will happen with the
|
|
697
760
|
// `deferRender` option enabled.
|
|
@@ -702,9 +765,15 @@ function init(ctx) {
|
|
|
702
765
|
ctx.aoRowCreatedCallback.push(function (row, data, index) {
|
|
703
766
|
var i, ien;
|
|
704
767
|
var d = ctx.aoData[index];
|
|
768
|
+
var id = api.row(index).id();
|
|
705
769
|
|
|
706
770
|
// Row
|
|
707
|
-
if (
|
|
771
|
+
if (
|
|
772
|
+
d._select_selected ||
|
|
773
|
+
(id !== 'undefined' && ctx._select_set.includes(id))
|
|
774
|
+
) {
|
|
775
|
+
d._select_selected = true;
|
|
776
|
+
|
|
708
777
|
$(row)
|
|
709
778
|
.addClass(ctx._select.className)
|
|
710
779
|
.find('input.' + checkboxClass(true)).prop('checked', true);
|
|
@@ -723,46 +792,7 @@ function init(ctx) {
|
|
|
723
792
|
}
|
|
724
793
|
);
|
|
725
794
|
|
|
726
|
-
|
|
727
|
-
// if there is an rowId (i.e. a unique value to identify each row with)
|
|
728
|
-
api.on('preXhr.dt.dtSelect', function (e, settings) {
|
|
729
|
-
if (settings !== api.settings()[0]) {
|
|
730
|
-
// Not triggered by our DataTable!
|
|
731
|
-
return;
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
// note that column selection doesn't need to be cached and then
|
|
735
|
-
// reselected, as they are already selected
|
|
736
|
-
var rows = api
|
|
737
|
-
.rows({ selected: true })
|
|
738
|
-
.ids(true)
|
|
739
|
-
.filter(function (d) {
|
|
740
|
-
return d !== undefined;
|
|
741
|
-
});
|
|
742
|
-
|
|
743
|
-
var cells = api
|
|
744
|
-
.cells({ selected: true })
|
|
745
|
-
.eq(0)
|
|
746
|
-
.map(function (cellIdx) {
|
|
747
|
-
var id = api.row(cellIdx.row).id(true);
|
|
748
|
-
return id ? { row: id, column: cellIdx.column } : undefined;
|
|
749
|
-
})
|
|
750
|
-
.filter(function (d) {
|
|
751
|
-
return d !== undefined;
|
|
752
|
-
});
|
|
753
|
-
|
|
754
|
-
// On the next draw, reselect the currently selected items
|
|
755
|
-
api.one('draw.dt.dtSelect', function () {
|
|
756
|
-
api.rows(rows).select();
|
|
757
|
-
|
|
758
|
-
// `cells` is not a cell index selector, so it needs a loop
|
|
759
|
-
if (cells.any()) {
|
|
760
|
-
cells.each(function (id) {
|
|
761
|
-
api.cells(id.row, id.column).select();
|
|
762
|
-
});
|
|
763
|
-
}
|
|
764
|
-
});
|
|
765
|
-
});
|
|
795
|
+
_cumulativeEvents(api);
|
|
766
796
|
|
|
767
797
|
// Update the table information element with selected item summary
|
|
768
798
|
api.on('info.dt', function (e, ctx, node) {
|
|
@@ -935,6 +965,57 @@ function _safeId(node) {
|
|
|
935
965
|
return node.id.replace(/[^a-zA-Z0-9\-\_]/g, '-');
|
|
936
966
|
}
|
|
937
967
|
|
|
968
|
+
/**
|
|
969
|
+
* Set up event handlers for cumulative selection
|
|
970
|
+
*
|
|
971
|
+
* @param {*} api DT API instance
|
|
972
|
+
*/
|
|
973
|
+
function _cumulativeEvents(api) {
|
|
974
|
+
// Add event listeners to add / remove from the _select_set
|
|
975
|
+
api.on('select', function (e, dt, type, indexes) {
|
|
976
|
+
// Only support for rows at the moment
|
|
977
|
+
if (type !== 'row') {
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
var ctx = api.settings()[0];
|
|
982
|
+
|
|
983
|
+
_add(api, ctx._select_set, indexes);
|
|
984
|
+
});
|
|
985
|
+
|
|
986
|
+
api.on('deselect', function (e, dt, type, indexes) {
|
|
987
|
+
// Only support for rows at the moment
|
|
988
|
+
if (type !== 'row') {
|
|
989
|
+
return;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
var ctx = api.settings()[0];
|
|
993
|
+
|
|
994
|
+
_remove(api, ctx._select_set, indexes);
|
|
995
|
+
});
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
function _add(api, arr, indexes) {
|
|
999
|
+
for (var i=0 ; i<indexes.length ; i++) {
|
|
1000
|
+
var id = api.row(indexes[i]).id();
|
|
1001
|
+
|
|
1002
|
+
if (id && id !== 'undefined' && ! arr.includes(id)) {
|
|
1003
|
+
arr.push(id);
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
function _remove(api, arr, indexes) {
|
|
1009
|
+
for (var i=0 ; i<indexes.length ; i++) {
|
|
1010
|
+
var id = api.row(indexes[i]).id();
|
|
1011
|
+
var idx = arr.indexOf(id);
|
|
1012
|
+
|
|
1013
|
+
if (idx !== -1) {
|
|
1014
|
+
arr.splice(idx, 1);
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
|
|
938
1019
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
939
1020
|
* DataTables selectors
|
|
940
1021
|
*/
|
|
@@ -1083,10 +1164,15 @@ apiRegister('select.style()', function (style) {
|
|
|
1083
1164
|
// Add / remove mouse event handlers. They aren't required when only
|
|
1084
1165
|
// API selection is available
|
|
1085
1166
|
var dt = new DataTable.Api(ctx);
|
|
1086
|
-
disableMouseSelection(dt);
|
|
1087
1167
|
|
|
1088
1168
|
if (style !== 'api') {
|
|
1089
|
-
|
|
1169
|
+
dt.ready(function () {
|
|
1170
|
+
disableMouseSelection(dt);
|
|
1171
|
+
enableMouseSelection(dt);
|
|
1172
|
+
});
|
|
1173
|
+
}
|
|
1174
|
+
else {
|
|
1175
|
+
disableMouseSelection(dt);
|
|
1090
1176
|
}
|
|
1091
1177
|
|
|
1092
1178
|
eventTrigger(new DataTable.Api(ctx), 'selectStyle', [style]);
|
|
@@ -1099,16 +1185,36 @@ apiRegister('select.selector()', function (selector) {
|
|
|
1099
1185
|
}
|
|
1100
1186
|
|
|
1101
1187
|
return this.iterator('table', function (ctx) {
|
|
1102
|
-
|
|
1188
|
+
var dt = new DataTable.Api(ctx);
|
|
1189
|
+
var style = ctx._select.style;
|
|
1190
|
+
|
|
1191
|
+
disableMouseSelection(dt);
|
|
1103
1192
|
|
|
1104
1193
|
ctx._select.selector = selector;
|
|
1105
1194
|
|
|
1106
|
-
if (
|
|
1107
|
-
|
|
1195
|
+
if (style && style !== 'api') {
|
|
1196
|
+
dt.ready(function () {
|
|
1197
|
+
disableMouseSelection(dt);
|
|
1198
|
+
enableMouseSelection(dt);
|
|
1199
|
+
});
|
|
1200
|
+
}
|
|
1201
|
+
else {
|
|
1202
|
+
disableMouseSelection(dt);
|
|
1108
1203
|
}
|
|
1109
1204
|
});
|
|
1110
1205
|
});
|
|
1111
1206
|
|
|
1207
|
+
apiRegister('select.selectable()', function (set) {
|
|
1208
|
+
let ctx = this.context[0];
|
|
1209
|
+
|
|
1210
|
+
if (set) {
|
|
1211
|
+
ctx._select.selectable = set;
|
|
1212
|
+
return this;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
return ctx._select.selectable;
|
|
1216
|
+
});
|
|
1217
|
+
|
|
1112
1218
|
apiRegister('select.last()', function (set) {
|
|
1113
1219
|
let ctx = this.context[0];
|
|
1114
1220
|
|
|
@@ -1120,8 +1226,17 @@ apiRegister('select.last()', function (set) {
|
|
|
1120
1226
|
return ctx._select_lastCell;
|
|
1121
1227
|
});
|
|
1122
1228
|
|
|
1229
|
+
apiRegister('select.cumulative()', function () {
|
|
1230
|
+
let ctx = this.context[0];
|
|
1231
|
+
|
|
1232
|
+
return ctx && ctx._select_set
|
|
1233
|
+
? ctx._select_set
|
|
1234
|
+
: [];
|
|
1235
|
+
});
|
|
1236
|
+
|
|
1123
1237
|
apiRegisterPlural('rows().select()', 'row().select()', function (select) {
|
|
1124
1238
|
var api = this;
|
|
1239
|
+
var selectedIndexes = [];
|
|
1125
1240
|
|
|
1126
1241
|
if (select === false) {
|
|
1127
1242
|
return this.deselect();
|
|
@@ -1136,9 +1251,20 @@ apiRegisterPlural('rows().select()', 'row().select()', function (select) {
|
|
|
1136
1251
|
var dtData = ctx.aoData[idx];
|
|
1137
1252
|
var dtColumns = ctx.aoColumns;
|
|
1138
1253
|
|
|
1254
|
+
if (ctx._select.selectable) {
|
|
1255
|
+
var result = ctx._select.selectable(dtData._aData, dtData.nTr, idx);
|
|
1256
|
+
|
|
1257
|
+
if (result === false) {
|
|
1258
|
+
// Not selectable - do nothing
|
|
1259
|
+
return;
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1139
1263
|
$(dtData.nTr).addClass(ctx._select.className);
|
|
1140
1264
|
dtData._select_selected = true;
|
|
1141
1265
|
|
|
1266
|
+
selectedIndexes.push(idx);
|
|
1267
|
+
|
|
1142
1268
|
for (var i=0 ; i<dtColumns.length ; i++) {
|
|
1143
1269
|
var col = dtColumns[i];
|
|
1144
1270
|
|
|
@@ -1163,8 +1289,8 @@ apiRegisterPlural('rows().select()', 'row().select()', function (select) {
|
|
|
1163
1289
|
}
|
|
1164
1290
|
});
|
|
1165
1291
|
|
|
1166
|
-
this.iterator('table', function (
|
|
1167
|
-
eventTrigger(api, 'select', ['row',
|
|
1292
|
+
this.iterator('table', function (ct) {
|
|
1293
|
+
eventTrigger(api, 'select', ['row', selectedIndexes], true);
|
|
1168
1294
|
});
|
|
1169
1295
|
|
|
1170
1296
|
return this;
|
|
@@ -1526,6 +1652,8 @@ $.each(['Row', 'Column', 'Cell'], function (i, item) {
|
|
|
1526
1652
|
init: function (dt) {
|
|
1527
1653
|
var that = this;
|
|
1528
1654
|
|
|
1655
|
+
this.active(dt.select.items() === lc);
|
|
1656
|
+
|
|
1529
1657
|
dt.on('selectItems.dt.DT', function (e, ctx, items) {
|
|
1530
1658
|
that.active(items === lc);
|
|
1531
1659
|
});
|
|
@@ -1576,8 +1704,18 @@ DataTable.render.select = function (valueProp, nameProp) {
|
|
|
1576
1704
|
var dtRow = meta.settings.aoData[meta.row];
|
|
1577
1705
|
var selected = dtRow._select_selected;
|
|
1578
1706
|
var ariaLabel = meta.settings.oLanguage.select.aria.rowCheckbox;
|
|
1707
|
+
var selectable = meta.settings._select.selectable;
|
|
1579
1708
|
|
|
1580
1709
|
if (type === 'display') {
|
|
1710
|
+
// Check if the row is selectable before showing the checkbox
|
|
1711
|
+
if (selectable) {
|
|
1712
|
+
var result = selectable(row, dtRow.nTr, meta.row);
|
|
1713
|
+
|
|
1714
|
+
if (result === false) {
|
|
1715
|
+
return '';
|
|
1716
|
+
}
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1581
1719
|
return $('<input>')
|
|
1582
1720
|
.attr({
|
|
1583
1721
|
'aria-label': ariaLabel,
|
|
@@ -1636,11 +1774,10 @@ $.fn.DataTable.select = DataTable.select;
|
|
|
1636
1774
|
* Initialisation
|
|
1637
1775
|
*/
|
|
1638
1776
|
|
|
1639
|
-
// DataTables creation -
|
|
1640
|
-
//
|
|
1641
|
-
//
|
|
1642
|
-
|
|
1643
|
-
$(document).on('preInit.dt.dtSelect', function (e, ctx) {
|
|
1777
|
+
// DataTables creation - we need this to run _before_ data is read in, but
|
|
1778
|
+
// for backwards compat. we also run again on preInit. If it happens twice
|
|
1779
|
+
// it will simply do nothing the second time around.
|
|
1780
|
+
$(document).on('i18n.dt.dtSelect preInit.dt.dtSelect', function (e, ctx) {
|
|
1644
1781
|
if (e.namespace !== 'dt') {
|
|
1645
1782
|
return;
|
|
1646
1783
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Select for DataTables 2.0
|
|
1
|
+
/*! Select for DataTables 2.1.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){"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 u(e){var t=_.select.classes.checkbox;return e?t.replace(/ /g,"."):t}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"+b(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,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"+b(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())||v(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 f(e){return e.mRender&&"selectCheckbox"===e.mRender._name}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,a){var l=o.settings()[0].aoColumns;o.columns().iterator("column",function(e,t){var n;f(l[t])&&(t=o.column(t).header(),m("input",t).length||(n=m("<input>").attr({class:u(!0),type:"checkbox","aria-label":o.i18n("select.aria.headerCheckbox")||"Select all rows"}).appendTo(t).on("change",function(){this.checked?("select-page"==a?o.rows({page:"current"}):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=("select-page"==a?o.rows({page:"current"}):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 h(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 v(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):h(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):h(t,s,c,l._select_lastCell?l._select_lastCell[s]:null):t[s](c).select(!a))}function b(e){return e.id.replace(/[^a-zA-Z0-9\-\_]/g,"-")}_.select={},_.select.classes={checkbox:"dt-select-checkbox"},_.select.version="2.0.5",_.select.init=function(c){var e,t,l,s,n,o,a,i,r,u,d,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",u="selected",f=!(d=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&&(u=l.className),void 0!==l.headerCheckbox)&&(d=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=u,!f&&m(c.table().node()).hasClass("selectable")&&c.select.style("os"),d||"select-page"===d||"select-all"===d)&&(p(c,d),c.on("init",function(){p(c,d)}))},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 g(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).find("input."+u(!0)).prop("checked",!0),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),m("input."+u(!0),c.table().header()).remove(),s(c),c.off(".dtSelect"),m("body").off(".dtSelect"+b(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 o=this;return!1===e?this.deselect():(this.iterator("row",function(e,t){v(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++){var n=s[c];null===n.sType&&o.columns().types(),f(n)&&((n=l.anCells)&&n[c]&&m("input."+u(!0),n[c]).prop("checked",!0),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e,t){d(o,"select",["row",o[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){v(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){v(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 o=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++){var n=s[c];null===n.sType&&o.columns().types(),f(n)&&((n=l.anCells)&&n[c]&&m("input."+u(!0),l.anCells[c]).prop("checked",!1),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e,t){d(o,"deselect",["row",o[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 x=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"+x++,l.on(g(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"+x++,t.on(g(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(){v(this.settings()[0],!0)},init:function(t,e,l){var s=this;l._eventNamespace=".select"+x++,t.on(g(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:_.versionCheck("2.1")?{oneOf:function(){return!1},allOf:function(){return!1},init:function(e,t,l){return f(t)}}: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){function l(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:u(),name:o?o(l):null,type:"checkbox",value:n?n(l):null,checked:c}).on("input",function(e){e.preventDefault(),this.checked=m(this).closest("tr").hasClass("selected")})[0]:"type"===t?"select-checkbox":"filter"!==t&&c?"X":""}var n=e?_.util.get(e):null,o=t?_.util.get(t):null;return l._name="selectCheckbox",l},_.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).toString():"cell"===t._select.items&&m(e).hasClass(t._select.className).toString()})},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 p=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 v(e){var t=p.select.classes.checkbox;return e?t.replace(/ /g,"."):t}function c(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"+_(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"),u(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"+_(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 b(e){return e.mRender&&"selectCheckbox"===e.mRender._name}function s(s,e){var t,l,c,n,o;"api"!==s.select.style()&&!1!==s.select.info()&&(o=s.settings()[0]._select_set.length||s.rows({selected:!0}).count(),t=s.columns({selected:!0}).count(),l=s.cells({selected:!0}).count(),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 o(o){var r,a=new p.Api(o);o._select_init=!0,o._select_set=[],o.aoRowCreatedCallback.push(function(e,t,l){var s,c,n=o.aoData[l],l=a.row(l).id();for((n._select_selected||"undefined"!==l&&o._select_set.includes(l))&&(n._select_selected=!0,m(e).addClass(o._select.className).find("input."+v(!0)).prop("checked",!0)),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)}),(r=a).on("select",function(e,t,l,s){if("row"===l)for(var l=r.settings()[0],c=r,n=l._select_set,o=s,a=0;a<o.length;a++){var i=c.row(o[a]).id();i&&"undefined"!==i&&!n.includes(i)&&n.push(i)}}),r.on("deselect",function(e,t,l,s){if("row"===l)for(var l=r.settings()[0],c=r,n=l._select_set,o=s,a=0;a<o.length;a++){var i=c.row(o[a]).id(),i=n.indexOf(i);-1!==i&&n.splice(i,1)}}),a.on("info.dt",function(e,t,l){t._select.infoEls.includes(l)||t._select.infoEls.push(l),s(a,l)}),a.on("select.dtSelect.dt deselect.dtSelect.dt",function(){o._select.infoEls.forEach(function(e){s(a,e)}),a.state.save()}),a.on("destroy.dtSelect",function(){m(a.rows({selected:!0}).nodes()).removeClass(a.settings()[0]._select.className),m("input."+v(!0),a.table().header()).remove(),c(a),a.off(".dtSelect"),m("body").off(".dtSelect"+_(a.table().node()))})}function d(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 p.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):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 _(e){return e.id.replace(/[^a-zA-Z0-9\-\_]/g,"-")}p.select={},p.select.classes={checkbox:"dt-select-checkbox"},p.select.version="2.1.0",p.select.init=function(o){var e,t,l,s,c,n,a,i,r,u,d,f,h,_=o.settings()[0];if(!p.versionCheck("2"))throw"Warning: Select requires DataTables 2 or newer";!_._select&&(e=o.state.loaded(),t=function(e,t,l){if(null!==l&&void 0!==l.select){if(o.rows({selected:!0}).any()&&o.rows().deselect(),void 0!==l.select.rows&&o.rows(l.select.rows).select(),o.columns({selected:!0}).any()&&o.columns().deselect(),void 0!==l.select.columns&&o.columns(l.select.columns).select(),o.cells({selected:!0}).any()&&o.cells().deselect(),void 0!==l.select.cells)for(var s=0;s<l.select.cells.length;s++)o.cell(l.select.cells[s].row,l.select.cells[s].column).select();o.state.save()}},o.on("stateSaveParams",function(e,t,l){l.select={},l.select.rows=o.rows({selected:!0}).ids(!0).toArray(),l.select.columns=o.columns({selected:!0})[0],l.select.cells=o.cells({selected:!0})[0].map(function(e){return{row:o.row(e.row).id(!0),column:e.column}})}).on("stateLoadParams",t).one("init",function(){t(0,0,e)}),s=_.oInit.select,l=p.defaults.select,l=void 0===s?l:s,s="row",a=!(n=!(c="api")),u="td, th",d="selected",h=!(f=r=!(i=null)),_._select={infoEls:[]},!0===l?(c="os",h=!0):"string"==typeof l?(c=l,h=!0):m.isPlainObject(l)&&(void 0!==l.blurable&&(n=l.blurable),void 0!==l.toggleable&&(a=l.toggleable),void 0!==l.info&&(r=l.info),void 0!==l.items&&(s=l.items),h=(c=void 0!==l.style?l.style:"os",!0),void 0!==l.selector&&(u=l.selector),void 0!==l.className&&(d=l.className),void 0!==l.headerCheckbox&&(f=l.headerCheckbox),void 0!==l.selectable)&&(i=l.selectable),o.select.selector(u),o.select.items(s),o.select.style(c),o.select.blurable(n),o.select.toggleable(a),o.select.info(r),o.select.selectable(i),_._select.className=d,!h&&m(o.table().node()).hasClass("selectable")&&o.select.style("os"),f||"select-page"===f||"select-all"===f)&&o.ready(function(){var c,n,l;n=f,l=(c=o).settings()[0].aoColumns,c.columns().iterator("column",function(e,t){var s;b(l[t])&&(t=c.column(t).header(),m("input",t).length||(s=m("<input>").attr({class:v(!0),type:"checkbox","aria-label":c.i18n("select.aria.headerCheckbox")||"Select all rows"}).appendTo(t).on("change",function(){this.checked?("select-page"==n?c.rows({page:"current"}):c.rows({search:"applied"})).select():("select-page"==n?c.rows({page:"current",selected:!0}):c.rows({selected:!0})).deselect()}).on("click",function(e){e.stopPropagation()}),c.on("draw select deselect",function(e,t,l){"row"!==l&&l||((l=function(e,t){var l=e.settings()[0],s=l._select.selectable,c=0,n=("select-page"==t?e.rows({page:"current",selected:!0}):e.rows({selected:!0})).count(),o=("select-page"==t?e.rows({page:"current",selected:!0}):e.rows({search:"applied",selected:!0})).count();if(s)for(var a=("select-page"==t?e.rows({page:"current"}):e.rows({search:"applied"})).indexes(),i=0;i<a.length;i++){var r=l.aoData[a[i]];s(r._aData,r.nTr,a[i])&&c++}else c=("select-page"==t?e.rows({page:"current"}):e.rows({search:"applied"})).count();return{available:c,count:n,search:o}}(c,n)).search&&l.search<=l.count&&l.search===l.available?s.prop("checked",!0).prop("indeterminate",!1):0===l.search&&0===l.count?s.prop("checked",!1).prop("indeterminate",!1):s.prop("checked",!1).prop("indeterminate",!0))})))})})},m.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(e,i){p.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})}),p.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=p.Api.register,l=p.Api.registerPlural;function a(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){p.select.init(new p.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,u(new p.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||p.select.init(new p.Api(e)),e._select_init||o(e),e._select.style=l;var t=new p.Api(e);"api"!==l?t.ready(function(){c(t),n(t)}):c(t),u(new p.Api(e),"selectStyle",[l])})}),t("select.selector()",function(s){return void 0===s?this.context[0]._select.selector:this.iterator("table",function(e){var t=new p.Api(e),l=e._select.style;c(t),e._select.selector=s,l&&"api"!==l?t.ready(function(){c(t),n(t)}):c(t)})}),t("select.selectable()",function(e){var t=this.context[0];return e?(t._select.selectable=e,this):t._select.selectable}),t("select.last()",function(e){var t=this.context[0];return e?(t._select_lastCell=e,this):t._select_lastCell}),t("select.cumulative()",function(){var e=this.context[0];return e&&e._select_set?e._select_set:[]}),l("rows().select()","row().select()",function(e){var o=this,a=[];return!1===e?this.deselect():(this.iterator("row",function(e,t){f(e);var l=e.aoData[t],s=e.aoColumns;if(e._select.selectable&&!1===e._select.selectable(l._aData,l.nTr,t))return;m(l.nTr).addClass(e._select.className),l._select_selected=!0,a.push(t);for(var c=0;c<s.length;c++){var n=s[c];null===n.sType&&o.columns().types(),b(n)&&((n=l.anCells)&&n[c]&&m("input."+v(!0),n[c]).prop("checked",!0),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e){u(o,"select",["row",a],!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 p.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];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){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 o=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++){var n=s[c];null===n.sType&&o.columns().types(),b(n)&&((n=l.anCells)&&n[c]&&m("input."+v(!0),l.anCells[c]).prop("checked",!1),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e,t){u(o,"deselect",["row",o[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 p.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];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){u(l,"deselect",["cell",l[t]],!0)}),this});var g=0;return m.extend(p.ext.buttons,{selected:{text:a("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(l,e,s){var c=this;s._eventNamespace=".select"+g++,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:a("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(t,e,l){var s=this;l._eventNamespace=".select"+g++,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:a("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:a("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"+g++,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:a("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();p.ext.buttons["select"+t+"s"]={text:a("select"+t+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},init:function(e){var s=this;this.active(e.select.items()===c),e.on("selectItems.dt.DT",function(e,t,l){s.active(l===c)})}}}),p.type("select-checkbox",{className:"dt-select",detect:p.versionCheck("2.1")?{oneOf:function(){return!1},allOf:function(){return!1},init:function(e,t,l){return b(t)}}:function(e){return"select-checkbox"===e&&e},order:{pre:function(e){return"X"===e?-1:0}}}),m.extend(!0,p.defaults.oLanguage,{select:{aria:{rowCheckbox:"Select row"}}}),p.render.select=function(e,t){function l(e,t,l,s){var c=s.settings.aoData[s.row],n=c._select_selected,o=s.settings.oLanguage.select.aria.rowCheckbox,a=s.settings._select.selectable;return"display"!==t?"type"===t?"select-checkbox":"filter"!==t&&n?"X":"":a&&!1===a(l,c.nTr,s.row)?"":m("<input>").attr({"aria-label":o,class:v(),name:r?r(l):null,type:"checkbox",value:i?i(l):null,checked:n}).on("input",function(e){e.preventDefault(),this.checked=m(this).closest("tr").hasClass("selected")})[0]}var i=e?p.util.get(e):null,r=t?p.util.get(t):null;return l._name="selectCheckbox",l},p.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).toString():"cell"===t._select.items&&m(e).hasClass(t._select.className).toString()})},m.fn.DataTable.select=p.select,m(e).on("i18n.dt.dtSelect preInit.dt.dtSelect",function(e,t){"dt"===e.namespace&&p.select.init(new p.Api(t))}),p});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Select for DataTables 2.0
|
|
1
|
+
/*! Select for DataTables 2.1.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 checkboxClass(e){var t=DataTable.select.classes.checkbox;return e?t.replace(/ /g,"."):t}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 isCheckboxColumn(e){return e.mRender&&"selectCheckbox"===e.mRender._name}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,o){var l=a.settings()[0].aoColumns;a.columns().iterator("column",function(e,t){var n;isCheckboxColumn(l[t])&&(t=a.column(t).header(),$("input",t).length||(n=$("<input>").attr({class:checkboxClass(!0),type:"checkbox","aria-label":a.i18n("select.aria.headerCheckbox")||"Select all rows"}).appendTo(t).on("change",function(){this.checked?("select-page"==o?a.rows({page:"current"}):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=("select-page"==o?a.rows({page:"current"}):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).find("input."+checkboxClass(!0)).prop("checked",!0),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),$("input."+checkboxClass(!0),c.table().header()).remove(),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.classes={checkbox:"dt-select-checkbox"},DataTable.select.version="2.0.5",DataTable.select.init=function(c){var e,t,l,s,n,a,o,i,r,u,d,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",u="selected",f=!(d=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&&(u=l.className),void 0!==l.headerCheckbox)&&(d=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=u,!f&&$(c.table().node()).hasClass("selectable")&&c.select.style("os"),d||"select-page"===d||"select-all"===d)&&(initCheckboxHeader(c,d),c.on("init",function(){initCheckboxHeader(c,d)}))},$.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 a=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++){var n=s[c];null===n.sType&&a.columns().types(),isCheckboxColumn(n)&&((n=l.anCells)&&n[c]&&$("input."+checkboxClass(!0),n[c]).prop("checked",!0),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e,t){eventTrigger(a,"select",["row",a[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 a=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++){var n=s[c];null===n.sType&&a.columns().types(),isCheckboxColumn(n)&&((n=l.anCells)&&n[c]&&$("input."+checkboxClass(!0),l.anCells[c]).prop("checked",!1),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e,t){eventTrigger(a,"deselect",["row",a[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:DataTable.versionCheck("2.1")?{oneOf:function(){return!1},allOf:function(){return!1},init:function(e,t,l){return isCheckboxColumn(t)}}: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){function l(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:checkboxClass(),name:a?a(l):null,type:"checkbox",value:n?n(l):null,checked:c}).on("input",function(e){e.preventDefault(),this.checked=$(this).closest("tr").hasClass("selected")})[0]:"type"===t?"select-checkbox":"filter"!==t&&c?"X":""}var n=e?DataTable.util.get(e):null,a=t?DataTable.util.get(t):null;return l._name="selectCheckbox",l},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).toString():"cell"===t._select.items&&$(e).hasClass(t._select.className).toString()})},$.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 checkboxClass(e){var t=DataTable.select.classes.checkbox;return e?t.replace(/ /g,"."):t}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 isCheckboxColumn(e){return e.mRender&&"selectCheckbox"===e.mRender._name}function info(s,e){var t,l,c,n,a;"api"!==s.select.style()&&!1!==s.select.info()&&(a=s.settings()[0]._select_set.length||s.rows({selected:!0}).count(),t=s.columns({selected:!0}).count(),l=s.cells({selected:!0}).count(),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(c,n){var l=c.settings()[0].aoColumns;c.columns().iterator("column",function(e,t){var s;isCheckboxColumn(l[t])&&(t=c.column(t).header(),$("input",t).length||(s=$("<input>").attr({class:checkboxClass(!0),type:"checkbox","aria-label":c.i18n("select.aria.headerCheckbox")||"Select all rows"}).appendTo(t).on("change",function(){this.checked?("select-page"==n?c.rows({page:"current"}):c.rows({search:"applied"})).select():("select-page"==n?c.rows({page:"current",selected:!0}):c.rows({selected:!0})).deselect()}).on("click",function(e){e.stopPropagation()}),c.on("draw select deselect",function(e,t,l){"row"!==l&&l||((l=headerCheckboxState(c,n)).search&&l.search<=l.count&&l.search===l.available?s.prop("checked",!0).prop("indeterminate",!1):0===l.search&&0===l.count?s.prop("checked",!1).prop("indeterminate",!1):s.prop("checked",!1).prop("indeterminate",!0))})))})}function headerCheckboxState(e,t){var l=e.settings()[0],s=l._select.selectable,c=0,n=("select-page"==t?e.rows({page:"current",selected:!0}):e.rows({selected:!0})).count(),a=("select-page"==t?e.rows({page:"current",selected:!0}):e.rows({search:"applied",selected:!0})).count();if(s)for(var o=("select-page"==t?e.rows({page:"current"}):e.rows({search:"applied"})).indexes(),i=0;i<o.length;i++){var r=l.aoData[o[i]];s(r._aData,r.nTr,o[i])&&c++}else c=("select-page"==t?e.rows({page:"current"}):e.rows({search:"applied"})).count();return{available:c,count:n,search:a}}function init(a){var o=new DataTable.Api(a);a._select_init=!0,a._select_set=[],a.aoRowCreatedCallback.push(function(e,t,l){var s,c,n=a.aoData[l],l=o.row(l).id();for((n._select_selected||"undefined"!==l&&a._select_set.includes(l))&&(n._select_selected=!0,$(e).addClass(a._select.className).find("input."+checkboxClass(!0)).prop("checked",!0)),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)}),_cumulativeEvents(o),o.on("info.dt",function(e,t,l){t._select.infoEls.includes(l)||t._select.infoEls.push(l),info(o,l)}),o.on("select.dtSelect.dt deselect.dtSelect.dt",function(){a._select.infoEls.forEach(function(e){info(o,e)}),o.state.save()}),o.on("destroy.dtSelect",function(){$(o.rows({selected:!0}).nodes()).removeClass(o.settings()[0]._select.className),$("input."+checkboxClass(!0),o.table().header()).remove(),disableMouseSelection(o),o.off(".dtSelect"),$("body").off(".dtSelect"+_safeId(o.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,"-")}function _cumulativeEvents(c){c.on("select",function(e,t,l,s){"row"===l&&(l=c.settings()[0],_add(c,l._select_set,s))}),c.on("deselect",function(e,t,l,s){"row"===l&&(l=c.settings()[0],_remove(c,l._select_set,s))})}function _add(e,t,l){for(var s=0;s<l.length;s++){var c=e.row(l[s]).id();c&&"undefined"!==c&&!t.includes(c)&&t.push(c)}}function _remove(e,t,l){for(var s=0;s<l.length;s++){var c=e.row(l[s]).id(),c=t.indexOf(c);-1!==c&&t.splice(c,1)}}DataTable.select={},DataTable.select.classes={checkbox:"dt-select-checkbox"},DataTable.select.version="2.1.0",DataTable.select.init=function(c){var e,t,l,s,n,a,o,i,r,u,d,f,h,p=c.settings()[0];if(!DataTable.versionCheck("2"))throw"Warning: Select requires DataTables 2 or newer";!p._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=p.oInit.select,l=DataTable.defaults.select,l=void 0===s?l:s,s="row",o=!(a=!(n="api")),u="td, th",d="selected",h=!(f=r=!(i=null)),p._select={infoEls:[]},!0===l?(n="os",h=!0):"string"==typeof l?(n=l,h=!0):$.isPlainObject(l)&&(void 0!==l.blurable&&(a=l.blurable),void 0!==l.toggleable&&(o=l.toggleable),void 0!==l.info&&(r=l.info),void 0!==l.items&&(s=l.items),h=(n=void 0!==l.style?l.style:"os",!0),void 0!==l.selector&&(u=l.selector),void 0!==l.className&&(d=l.className),void 0!==l.headerCheckbox&&(f=l.headerCheckbox),void 0!==l.selectable)&&(i=l.selectable),c.select.selector(u),c.select.items(s),c.select.style(n),c.select.blurable(a),c.select.toggleable(o),c.select.info(r),c.select.selectable(i),p._select.className=d,!h&&$(c.table().node()).hasClass("selectable")&&c.select.style("os"),f||"select-page"===f||"select-all"===f)&&c.ready(function(){initCheckboxHeader(c,f)})},$.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);"api"!==l?t.ready(function(){disableMouseSelection(t),enableMouseSelection(t)}):disableMouseSelection(t),eventTrigger(new DataTable.Api(e),"selectStyle",[l])})}),apiRegister("select.selector()",function(s){return void 0===s?this.context[0]._select.selector:this.iterator("table",function(e){var t=new DataTable.Api(e),l=e._select.style;disableMouseSelection(t),e._select.selector=s,l&&"api"!==l?t.ready(function(){disableMouseSelection(t),enableMouseSelection(t)}):disableMouseSelection(t)})}),apiRegister("select.selectable()",function(e){var t=this.context[0];return e?(t._select.selectable=e,this):t._select.selectable}),apiRegister("select.last()",function(e){var t=this.context[0];return e?(t._select_lastCell=e,this):t._select_lastCell}),apiRegister("select.cumulative()",function(){var e=this.context[0];return e&&e._select_set?e._select_set:[]}),apiRegisterPlural("rows().select()","row().select()",function(e){var a=this,o=[];return!1===e?this.deselect():(this.iterator("row",function(e,t){clear(e);var l=e.aoData[t],s=e.aoColumns;if(e._select.selectable&&!1===e._select.selectable(l._aData,l.nTr,t))return;$(l.nTr).addClass(e._select.className),l._select_selected=!0,o.push(t);for(var c=0;c<s.length;c++){var n=s[c];null===n.sType&&a.columns().types(),isCheckboxColumn(n)&&((n=l.anCells)&&n[c]&&$("input."+checkboxClass(!0),n[c]).prop("checked",!0),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e){eventTrigger(a,"select",["row",o],!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 a=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++){var n=s[c];null===n.sType&&a.columns().types(),isCheckboxColumn(n)&&((n=l.anCells)&&n[c]&&$("input."+checkboxClass(!0),l.anCells[c]).prop("checked",!1),null!==l._aSortData)&&(l._aSortData[c]=null)}}),this.iterator("table",function(e,t){eventTrigger(a,"deselect",["row",a[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;this.active(e.select.items()===c),e.on("selectItems.dt.DT",function(e,t,l){s.active(l===c)})}}}),DataTable.type("select-checkbox",{className:"dt-select",detect:DataTable.versionCheck("2.1")?{oneOf:function(){return!1},allOf:function(){return!1},init:function(e,t,l){return isCheckboxColumn(t)}}: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){function l(e,t,l,s){var c=s.settings.aoData[s.row],n=c._select_selected,a=s.settings.oLanguage.select.aria.rowCheckbox,o=s.settings._select.selectable;return"display"!==t?"type"===t?"select-checkbox":"filter"!==t&&n?"X":"":o&&!1===o(l,c.nTr,s.row)?"":$("<input>").attr({"aria-label":a,class:checkboxClass(),name:r?r(l):null,type:"checkbox",value:i?i(l):null,checked:n}).on("input",function(e){e.preventDefault(),this.checked=$(this).closest("tr").hasClass("selected")})[0]}var i=e?DataTable.util.get(e):null,r=t?DataTable.util.get(t):null;return l._name="selectCheckbox",l},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).toString():"cell"===t._select.items&&$(e).hasClass(t._select.className).toString()})},$.fn.DataTable.select=DataTable.select,$(document).on("i18n.dt.dtSelect preInit.dt.dtSelect",function(e,t){"dt"===e.namespace&&DataTable.select.init(new DataTable.Api(t))});export default DataTable;
|
package/js/dataTables.select.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Select for DataTables 2.0
|
|
1
|
+
/*! Select for DataTables 2.1.0
|
|
2
2
|
* © SpryMedia Ltd - datatables.net/license/mit
|
|
3
3
|
*/
|
|
4
4
|
|
|
@@ -16,7 +16,7 @@ DataTable.select.classes = {
|
|
|
16
16
|
checkbox: 'dt-select-checkbox'
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
DataTable.select.version = '2.0
|
|
19
|
+
DataTable.select.version = '2.1.0';
|
|
20
20
|
|
|
21
21
|
DataTable.select.init = function (dt) {
|
|
22
22
|
var ctx = dt.settings()[0];
|
|
@@ -86,6 +86,7 @@ DataTable.select.init = function (dt) {
|
|
|
86
86
|
var style = 'api';
|
|
87
87
|
var blurable = false;
|
|
88
88
|
var toggleable = true;
|
|
89
|
+
var selectable = null;
|
|
89
90
|
var info = true;
|
|
90
91
|
var selector = 'td, th';
|
|
91
92
|
var className = 'selected';
|
|
@@ -142,6 +143,10 @@ DataTable.select.init = function (dt) {
|
|
|
142
143
|
if (opts.headerCheckbox !== undefined) {
|
|
143
144
|
headerCheckbox = opts.headerCheckbox;
|
|
144
145
|
}
|
|
146
|
+
|
|
147
|
+
if (opts.selectable !== undefined) {
|
|
148
|
+
selectable = opts.selectable;
|
|
149
|
+
}
|
|
145
150
|
}
|
|
146
151
|
|
|
147
152
|
dt.select.selector(selector);
|
|
@@ -150,6 +155,7 @@ DataTable.select.init = function (dt) {
|
|
|
150
155
|
dt.select.blurable(blurable);
|
|
151
156
|
dt.select.toggleable(toggleable);
|
|
152
157
|
dt.select.info(info);
|
|
158
|
+
dt.select.selectable(selectable);
|
|
153
159
|
ctx._select.className = className;
|
|
154
160
|
|
|
155
161
|
// If the init options haven't enabled select, but there is a selectable
|
|
@@ -159,11 +165,9 @@ DataTable.select.init = function (dt) {
|
|
|
159
165
|
}
|
|
160
166
|
|
|
161
167
|
// Insert a checkbox into the header if needed - might need to wait
|
|
162
|
-
// for init complete
|
|
168
|
+
// for init complete
|
|
163
169
|
if (headerCheckbox || headerCheckbox === 'select-page' || headerCheckbox === 'select-all') {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
dt.on('init', function () {
|
|
170
|
+
dt.ready(function () {
|
|
167
171
|
initCheckboxHeader(dt, headerCheckbox);
|
|
168
172
|
});
|
|
169
173
|
}
|
|
@@ -530,9 +534,13 @@ function info(api, node) {
|
|
|
530
534
|
return;
|
|
531
535
|
}
|
|
532
536
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
537
|
+
// If _select_set has any length, then ids are available and should be used
|
|
538
|
+
// as the counter. Otherwise use the API to workout how many rows are
|
|
539
|
+
// selected.
|
|
540
|
+
var rowSetLength = api.settings()[0]._select_set.length;
|
|
541
|
+
var rows = rowSetLength ? rowSetLength : api.rows({ selected: true }).count();
|
|
542
|
+
var columns = api.columns({ selected: true }).count();
|
|
543
|
+
var cells = api.cells({ selected: true }).count();
|
|
536
544
|
|
|
537
545
|
var add = function (el, name, num) {
|
|
538
546
|
el.append(
|
|
@@ -572,7 +580,8 @@ function info(api, node) {
|
|
|
572
580
|
* @param {*} headerCheckbox the header checkbox option
|
|
573
581
|
*/
|
|
574
582
|
function initCheckboxHeader( dt, headerCheckbox ) {
|
|
575
|
-
var
|
|
583
|
+
var dtSettings = dt.settings()[0];
|
|
584
|
+
var dtInternalColumns = dtSettings.aoColumns;
|
|
576
585
|
|
|
577
586
|
// Find any checkbox column(s)
|
|
578
587
|
dt.columns().iterator('column', function (s, idx) {
|
|
@@ -596,33 +605,36 @@ function initCheckboxHeader( dt, headerCheckbox ) {
|
|
|
596
605
|
.on('change', function () {
|
|
597
606
|
if (this.checked) {
|
|
598
607
|
if (headerCheckbox == 'select-page') {
|
|
599
|
-
dt.rows({page: 'current'}).select()
|
|
608
|
+
dt.rows({page: 'current'}).select();
|
|
600
609
|
} else {
|
|
601
610
|
dt.rows({search: 'applied'}).select();
|
|
602
611
|
}
|
|
603
612
|
}
|
|
604
613
|
else {
|
|
605
|
-
|
|
614
|
+
if (headerCheckbox == 'select-page') {
|
|
615
|
+
dt.rows({page: 'current', selected: true}).deselect();
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
dt.rows({selected: true}).deselect();
|
|
619
|
+
}
|
|
606
620
|
}
|
|
607
621
|
})
|
|
608
622
|
.on('click', function (e) {
|
|
609
623
|
e.stopPropagation();
|
|
610
624
|
});
|
|
611
|
-
|
|
625
|
+
|
|
612
626
|
// Update the header checkbox's state when the selection in the
|
|
613
627
|
// table changes
|
|
614
628
|
dt.on('draw select deselect', function (e, pass, type) {
|
|
615
629
|
if (type === 'row' || ! type) {
|
|
616
|
-
var
|
|
617
|
-
var search = dt.rows({search: 'applied', selected: true}).count();
|
|
618
|
-
var available = headerCheckbox == 'select-page' ? dt.rows({page: 'current'}).count() : dt.rows({search: 'applied'}).count();
|
|
630
|
+
var nums = headerCheckboxState(dt, headerCheckbox);
|
|
619
631
|
|
|
620
|
-
if (search && search <= count && search === available) {
|
|
632
|
+
if (nums.search && nums.search <= nums.count && nums.search === nums.available) {
|
|
621
633
|
input
|
|
622
634
|
.prop('checked', true)
|
|
623
635
|
.prop('indeterminate', false);
|
|
624
636
|
}
|
|
625
|
-
else if (search === 0 && count === 0) {
|
|
637
|
+
else if (nums.search === 0 && nums.count === 0) {
|
|
626
638
|
input
|
|
627
639
|
.prop('checked', false)
|
|
628
640
|
.prop('indeterminate', false);
|
|
@@ -638,6 +650,54 @@ function initCheckboxHeader( dt, headerCheckbox ) {
|
|
|
638
650
|
});
|
|
639
651
|
}
|
|
640
652
|
|
|
653
|
+
/**
|
|
654
|
+
* Determine the counts used to define the header checkbox's state
|
|
655
|
+
*
|
|
656
|
+
* @param {*} dt DT API
|
|
657
|
+
* @param {*} headerCheckbox Configuration for what the header checkbox does
|
|
658
|
+
* @returns Counts object
|
|
659
|
+
*/
|
|
660
|
+
function headerCheckboxState(dt, headerCheckbox) {
|
|
661
|
+
var ctx = dt.settings()[0];
|
|
662
|
+
var selectable = ctx._select.selectable;
|
|
663
|
+
var available = 0;
|
|
664
|
+
var count = headerCheckbox == 'select-page'
|
|
665
|
+
? dt.rows({page: 'current', selected: true}).count()
|
|
666
|
+
: dt.rows({selected: true}).count();
|
|
667
|
+
var search = headerCheckbox == 'select-page'
|
|
668
|
+
? dt.rows({page: 'current', selected: true}).count()
|
|
669
|
+
: dt.rows({search: 'applied', selected: true}).count();
|
|
670
|
+
|
|
671
|
+
if (! selectable) {
|
|
672
|
+
available = headerCheckbox == 'select-page'
|
|
673
|
+
? dt.rows({page: 'current'}).count()
|
|
674
|
+
: dt.rows({search: 'applied'}).count();
|
|
675
|
+
}
|
|
676
|
+
else {
|
|
677
|
+
// Need to count how many rows are actually selectable to know if all selectable
|
|
678
|
+
// rows are selected or not
|
|
679
|
+
var indexes = headerCheckbox == 'select-page'
|
|
680
|
+
? dt.rows({page: 'current'}).indexes()
|
|
681
|
+
: dt.rows({search: 'applied'}).indexes();
|
|
682
|
+
|
|
683
|
+
for (var i=0 ; i<indexes.length ; i++) {
|
|
684
|
+
// For speed I use the internal DataTables object.
|
|
685
|
+
var rowInternal = ctx.aoData[indexes[i]];
|
|
686
|
+
var result = selectable(rowInternal._aData, rowInternal.nTr, indexes[i]);
|
|
687
|
+
|
|
688
|
+
if (result) {
|
|
689
|
+
available++;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
return {
|
|
695
|
+
available: available,
|
|
696
|
+
count: count,
|
|
697
|
+
search: search
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
|
|
641
701
|
/**
|
|
642
702
|
* Initialisation of a new table. Attach event handlers and callbacks to allow
|
|
643
703
|
* Select to operate correctly.
|
|
@@ -652,6 +712,9 @@ function init(ctx) {
|
|
|
652
712
|
var api = new DataTable.Api(ctx);
|
|
653
713
|
ctx._select_init = true;
|
|
654
714
|
|
|
715
|
+
// _select_set contains a list of the ids of all rows that are selected
|
|
716
|
+
ctx._select_set = [];
|
|
717
|
+
|
|
655
718
|
// Row callback so that classes can be added to rows and cells if the item
|
|
656
719
|
// was selected before the element was created. This will happen with the
|
|
657
720
|
// `deferRender` option enabled.
|
|
@@ -662,9 +725,15 @@ function init(ctx) {
|
|
|
662
725
|
ctx.aoRowCreatedCallback.push(function (row, data, index) {
|
|
663
726
|
var i, ien;
|
|
664
727
|
var d = ctx.aoData[index];
|
|
728
|
+
var id = api.row(index).id();
|
|
665
729
|
|
|
666
730
|
// Row
|
|
667
|
-
if (
|
|
731
|
+
if (
|
|
732
|
+
d._select_selected ||
|
|
733
|
+
(id !== 'undefined' && ctx._select_set.includes(id))
|
|
734
|
+
) {
|
|
735
|
+
d._select_selected = true;
|
|
736
|
+
|
|
668
737
|
$(row)
|
|
669
738
|
.addClass(ctx._select.className)
|
|
670
739
|
.find('input.' + checkboxClass(true)).prop('checked', true);
|
|
@@ -683,46 +752,7 @@ function init(ctx) {
|
|
|
683
752
|
}
|
|
684
753
|
);
|
|
685
754
|
|
|
686
|
-
|
|
687
|
-
// if there is an rowId (i.e. a unique value to identify each row with)
|
|
688
|
-
api.on('preXhr.dt.dtSelect', function (e, settings) {
|
|
689
|
-
if (settings !== api.settings()[0]) {
|
|
690
|
-
// Not triggered by our DataTable!
|
|
691
|
-
return;
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
// note that column selection doesn't need to be cached and then
|
|
695
|
-
// reselected, as they are already selected
|
|
696
|
-
var rows = api
|
|
697
|
-
.rows({ selected: true })
|
|
698
|
-
.ids(true)
|
|
699
|
-
.filter(function (d) {
|
|
700
|
-
return d !== undefined;
|
|
701
|
-
});
|
|
702
|
-
|
|
703
|
-
var cells = api
|
|
704
|
-
.cells({ selected: true })
|
|
705
|
-
.eq(0)
|
|
706
|
-
.map(function (cellIdx) {
|
|
707
|
-
var id = api.row(cellIdx.row).id(true);
|
|
708
|
-
return id ? { row: id, column: cellIdx.column } : undefined;
|
|
709
|
-
})
|
|
710
|
-
.filter(function (d) {
|
|
711
|
-
return d !== undefined;
|
|
712
|
-
});
|
|
713
|
-
|
|
714
|
-
// On the next draw, reselect the currently selected items
|
|
715
|
-
api.one('draw.dt.dtSelect', function () {
|
|
716
|
-
api.rows(rows).select();
|
|
717
|
-
|
|
718
|
-
// `cells` is not a cell index selector, so it needs a loop
|
|
719
|
-
if (cells.any()) {
|
|
720
|
-
cells.each(function (id) {
|
|
721
|
-
api.cells(id.row, id.column).select();
|
|
722
|
-
});
|
|
723
|
-
}
|
|
724
|
-
});
|
|
725
|
-
});
|
|
755
|
+
_cumulativeEvents(api);
|
|
726
756
|
|
|
727
757
|
// Update the table information element with selected item summary
|
|
728
758
|
api.on('info.dt', function (e, ctx, node) {
|
|
@@ -895,6 +925,57 @@ function _safeId(node) {
|
|
|
895
925
|
return node.id.replace(/[^a-zA-Z0-9\-\_]/g, '-');
|
|
896
926
|
}
|
|
897
927
|
|
|
928
|
+
/**
|
|
929
|
+
* Set up event handlers for cumulative selection
|
|
930
|
+
*
|
|
931
|
+
* @param {*} api DT API instance
|
|
932
|
+
*/
|
|
933
|
+
function _cumulativeEvents(api) {
|
|
934
|
+
// Add event listeners to add / remove from the _select_set
|
|
935
|
+
api.on('select', function (e, dt, type, indexes) {
|
|
936
|
+
// Only support for rows at the moment
|
|
937
|
+
if (type !== 'row') {
|
|
938
|
+
return;
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
var ctx = api.settings()[0];
|
|
942
|
+
|
|
943
|
+
_add(api, ctx._select_set, indexes);
|
|
944
|
+
});
|
|
945
|
+
|
|
946
|
+
api.on('deselect', function (e, dt, type, indexes) {
|
|
947
|
+
// Only support for rows at the moment
|
|
948
|
+
if (type !== 'row') {
|
|
949
|
+
return;
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
var ctx = api.settings()[0];
|
|
953
|
+
|
|
954
|
+
_remove(api, ctx._select_set, indexes);
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
function _add(api, arr, indexes) {
|
|
959
|
+
for (var i=0 ; i<indexes.length ; i++) {
|
|
960
|
+
var id = api.row(indexes[i]).id();
|
|
961
|
+
|
|
962
|
+
if (id && id !== 'undefined' && ! arr.includes(id)) {
|
|
963
|
+
arr.push(id);
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
function _remove(api, arr, indexes) {
|
|
969
|
+
for (var i=0 ; i<indexes.length ; i++) {
|
|
970
|
+
var id = api.row(indexes[i]).id();
|
|
971
|
+
var idx = arr.indexOf(id);
|
|
972
|
+
|
|
973
|
+
if (idx !== -1) {
|
|
974
|
+
arr.splice(idx, 1);
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
|
|
898
979
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
899
980
|
* DataTables selectors
|
|
900
981
|
*/
|
|
@@ -1043,10 +1124,15 @@ apiRegister('select.style()', function (style) {
|
|
|
1043
1124
|
// Add / remove mouse event handlers. They aren't required when only
|
|
1044
1125
|
// API selection is available
|
|
1045
1126
|
var dt = new DataTable.Api(ctx);
|
|
1046
|
-
disableMouseSelection(dt);
|
|
1047
1127
|
|
|
1048
1128
|
if (style !== 'api') {
|
|
1049
|
-
|
|
1129
|
+
dt.ready(function () {
|
|
1130
|
+
disableMouseSelection(dt);
|
|
1131
|
+
enableMouseSelection(dt);
|
|
1132
|
+
});
|
|
1133
|
+
}
|
|
1134
|
+
else {
|
|
1135
|
+
disableMouseSelection(dt);
|
|
1050
1136
|
}
|
|
1051
1137
|
|
|
1052
1138
|
eventTrigger(new DataTable.Api(ctx), 'selectStyle', [style]);
|
|
@@ -1059,16 +1145,36 @@ apiRegister('select.selector()', function (selector) {
|
|
|
1059
1145
|
}
|
|
1060
1146
|
|
|
1061
1147
|
return this.iterator('table', function (ctx) {
|
|
1062
|
-
|
|
1148
|
+
var dt = new DataTable.Api(ctx);
|
|
1149
|
+
var style = ctx._select.style;
|
|
1150
|
+
|
|
1151
|
+
disableMouseSelection(dt);
|
|
1063
1152
|
|
|
1064
1153
|
ctx._select.selector = selector;
|
|
1065
1154
|
|
|
1066
|
-
if (
|
|
1067
|
-
|
|
1155
|
+
if (style && style !== 'api') {
|
|
1156
|
+
dt.ready(function () {
|
|
1157
|
+
disableMouseSelection(dt);
|
|
1158
|
+
enableMouseSelection(dt);
|
|
1159
|
+
});
|
|
1160
|
+
}
|
|
1161
|
+
else {
|
|
1162
|
+
disableMouseSelection(dt);
|
|
1068
1163
|
}
|
|
1069
1164
|
});
|
|
1070
1165
|
});
|
|
1071
1166
|
|
|
1167
|
+
apiRegister('select.selectable()', function (set) {
|
|
1168
|
+
let ctx = this.context[0];
|
|
1169
|
+
|
|
1170
|
+
if (set) {
|
|
1171
|
+
ctx._select.selectable = set;
|
|
1172
|
+
return this;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
return ctx._select.selectable;
|
|
1176
|
+
});
|
|
1177
|
+
|
|
1072
1178
|
apiRegister('select.last()', function (set) {
|
|
1073
1179
|
let ctx = this.context[0];
|
|
1074
1180
|
|
|
@@ -1080,8 +1186,17 @@ apiRegister('select.last()', function (set) {
|
|
|
1080
1186
|
return ctx._select_lastCell;
|
|
1081
1187
|
});
|
|
1082
1188
|
|
|
1189
|
+
apiRegister('select.cumulative()', function () {
|
|
1190
|
+
let ctx = this.context[0];
|
|
1191
|
+
|
|
1192
|
+
return ctx && ctx._select_set
|
|
1193
|
+
? ctx._select_set
|
|
1194
|
+
: [];
|
|
1195
|
+
});
|
|
1196
|
+
|
|
1083
1197
|
apiRegisterPlural('rows().select()', 'row().select()', function (select) {
|
|
1084
1198
|
var api = this;
|
|
1199
|
+
var selectedIndexes = [];
|
|
1085
1200
|
|
|
1086
1201
|
if (select === false) {
|
|
1087
1202
|
return this.deselect();
|
|
@@ -1096,9 +1211,20 @@ apiRegisterPlural('rows().select()', 'row().select()', function (select) {
|
|
|
1096
1211
|
var dtData = ctx.aoData[idx];
|
|
1097
1212
|
var dtColumns = ctx.aoColumns;
|
|
1098
1213
|
|
|
1214
|
+
if (ctx._select.selectable) {
|
|
1215
|
+
var result = ctx._select.selectable(dtData._aData, dtData.nTr, idx);
|
|
1216
|
+
|
|
1217
|
+
if (result === false) {
|
|
1218
|
+
// Not selectable - do nothing
|
|
1219
|
+
return;
|
|
1220
|
+
}
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1099
1223
|
$(dtData.nTr).addClass(ctx._select.className);
|
|
1100
1224
|
dtData._select_selected = true;
|
|
1101
1225
|
|
|
1226
|
+
selectedIndexes.push(idx);
|
|
1227
|
+
|
|
1102
1228
|
for (var i=0 ; i<dtColumns.length ; i++) {
|
|
1103
1229
|
var col = dtColumns[i];
|
|
1104
1230
|
|
|
@@ -1123,8 +1249,8 @@ apiRegisterPlural('rows().select()', 'row().select()', function (select) {
|
|
|
1123
1249
|
}
|
|
1124
1250
|
});
|
|
1125
1251
|
|
|
1126
|
-
this.iterator('table', function (
|
|
1127
|
-
eventTrigger(api, 'select', ['row',
|
|
1252
|
+
this.iterator('table', function (ct) {
|
|
1253
|
+
eventTrigger(api, 'select', ['row', selectedIndexes], true);
|
|
1128
1254
|
});
|
|
1129
1255
|
|
|
1130
1256
|
return this;
|
|
@@ -1486,6 +1612,8 @@ $.each(['Row', 'Column', 'Cell'], function (i, item) {
|
|
|
1486
1612
|
init: function (dt) {
|
|
1487
1613
|
var that = this;
|
|
1488
1614
|
|
|
1615
|
+
this.active(dt.select.items() === lc);
|
|
1616
|
+
|
|
1489
1617
|
dt.on('selectItems.dt.DT', function (e, ctx, items) {
|
|
1490
1618
|
that.active(items === lc);
|
|
1491
1619
|
});
|
|
@@ -1536,8 +1664,18 @@ DataTable.render.select = function (valueProp, nameProp) {
|
|
|
1536
1664
|
var dtRow = meta.settings.aoData[meta.row];
|
|
1537
1665
|
var selected = dtRow._select_selected;
|
|
1538
1666
|
var ariaLabel = meta.settings.oLanguage.select.aria.rowCheckbox;
|
|
1667
|
+
var selectable = meta.settings._select.selectable;
|
|
1539
1668
|
|
|
1540
1669
|
if (type === 'display') {
|
|
1670
|
+
// Check if the row is selectable before showing the checkbox
|
|
1671
|
+
if (selectable) {
|
|
1672
|
+
var result = selectable(row, dtRow.nTr, meta.row);
|
|
1673
|
+
|
|
1674
|
+
if (result === false) {
|
|
1675
|
+
return '';
|
|
1676
|
+
}
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1541
1679
|
return $('<input>')
|
|
1542
1680
|
.attr({
|
|
1543
1681
|
'aria-label': ariaLabel,
|
|
@@ -1596,11 +1734,10 @@ $.fn.DataTable.select = DataTable.select;
|
|
|
1596
1734
|
* Initialisation
|
|
1597
1735
|
*/
|
|
1598
1736
|
|
|
1599
|
-
// DataTables creation -
|
|
1600
|
-
//
|
|
1601
|
-
//
|
|
1602
|
-
|
|
1603
|
-
$(document).on('preInit.dt.dtSelect', function (e, ctx) {
|
|
1737
|
+
// DataTables creation - we need this to run _before_ data is read in, but
|
|
1738
|
+
// for backwards compat. we also run again on preInit. If it happens twice
|
|
1739
|
+
// it will simply do nothing the second time around.
|
|
1740
|
+
$(document).on('i18n.dt.dtSelect preInit.dt.dtSelect', function (e, ctx) {
|
|
1604
1741
|
if (e.namespace !== 'dt') {
|
|
1605
1742
|
return;
|
|
1606
1743
|
}
|
package/package.json
CHANGED
package/types/types.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
/// <reference types="jquery" />
|
|
9
9
|
|
|
10
|
-
import DataTables from 'datatables.net';
|
|
10
|
+
import DataTables, {ObjectColumnRender} from 'datatables.net';
|
|
11
11
|
|
|
12
12
|
export default DataTables;
|
|
13
13
|
|
|
@@ -107,6 +107,26 @@ declare module 'datatables.net' {
|
|
|
107
107
|
version: string;
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
+
|
|
111
|
+
interface DataTablesStaticRender {
|
|
112
|
+
/**
|
|
113
|
+
* Display a checkbox in the column's cells to be used for and represent
|
|
114
|
+
* row selection.
|
|
115
|
+
*/
|
|
116
|
+
select(): ObjectColumnRender;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Display a checkbox in the column's cells to be used for and represent
|
|
120
|
+
* row selection, with the `value` and `name` attributes for the checkbox
|
|
121
|
+
* `input` being set by properties from the row's data object.
|
|
122
|
+
*
|
|
123
|
+
* @param valueProp Name of the data property where the `value` for the
|
|
124
|
+
* checkbox is.
|
|
125
|
+
* @param nameProp Name of the data property where the `name` for the
|
|
126
|
+
* checkbox is.
|
|
127
|
+
*/
|
|
128
|
+
select(valueProp: string, nameProp: string): ObjectColumnRender;
|
|
129
|
+
}
|
|
110
130
|
}
|
|
111
131
|
|
|
112
132
|
interface ConfigSelect {
|