jquery-datatables 1.10.19.1 → 1.10.20
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.
- checksums.yaml +4 -4
- data/.gitattributes +1 -0
- data/README.md +28 -1
- data/app/assets/javascripts/datatables/dataTables.uikit.js +2 -2
- data/app/assets/javascripts/datatables/extensions/AutoFill/dataTables.autoFill.js +42 -29
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.bootstrap.js +1 -1
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.bootstrap4.js +8 -2
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.colVis.js +6 -3
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.foundation.js +5 -4
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.html5.js +58 -6
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.print.js +16 -5
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.semanticui.js +1 -1
- data/app/assets/javascripts/datatables/extensions/Buttons/dataTables.buttons.js +267 -152
- data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/ColReorder/dataTables.colReorder.js +121 -52
- data/app/assets/javascripts/datatables/extensions/FixedColumns/dataTables.fixedColumns.js +32 -5
- data/app/assets/javascripts/datatables/extensions/KeyTable/dataTables.keyTable.js +166 -63
- data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/RowGroup/dataTables.rowGroup.js +105 -53
- data/app/assets/javascripts/datatables/extensions/RowGroup/rowGroup.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/RowGroup/{rowGroup.semanicui.js → rowGroup.semanticui.js} +0 -0
- data/app/assets/javascripts/datatables/extensions/RowReorder/dataTables.rowReorder.js +10 -9
- data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/Scroller/dataTables.scroller.js +519 -636
- data/app/assets/javascripts/datatables/extensions/Scroller/scroller.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/Select/dataTables.select.js +49 -18
- data/app/assets/javascripts/datatables/extensions/Select/select.foundation.js +1 -1
- data/app/assets/javascripts/datatables/jquery.dataTables.js +97 -60
- data/app/assets/javascripts/datatables/plugins/api/average.js +7 -6
- data/app/assets/javascripts/datatables/plugins/api/sum.js +7 -6
- data/app/assets/javascripts/datatables/plugins/pagination/ellipses.js +160 -0
- data/app/assets/javascripts/datatables/plugins/pagination/extjs.js +137 -0
- data/app/assets/javascripts/datatables/plugins/pagination/four_button.js +110 -0
- data/app/assets/javascripts/datatables/plugins/pagination/full_numbers_no_ellipses.js +59 -0
- data/app/assets/javascripts/datatables/plugins/pagination/input.js +22 -19
- data/app/assets/javascripts/datatables/plugins/pagination/scrolling.js +130 -0
- data/app/assets/javascripts/datatables/plugins/pagination/select.js +97 -0
- data/app/assets/javascripts/datatables/plugins/pagination/simple_incremental_bootstrap.js +154 -0
- data/app/assets/javascripts/datatables/plugins/pagination/simple_numbers_no_ellipses.js +59 -0
- data/app/assets/javascripts/datatables/plugins/search/dataTables.alphabetSearch.js +440 -399
- data/app/assets/javascripts/datatables/plugins/sorting/enum.js +51 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-dd-MMM-yyyy.js +63 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-de.js +125 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-eu.js +64 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-euro.js +48 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-uk.js +35 -12
- data/app/assets/javascripts/datatables/plugins/type-detection/datetime-moment.js +74 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/datetime-us.js +86 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/file-size.js +37 -13
- data/app/assets/javascripts/datatables/plugins/type-detection/ip-address.js +113 -11
- data/app/assets/javascripts/datatables/plugins/type-detection/numString.js +63 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/percent.js +34 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/time-elapsed-dhms.js +42 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/time.js +56 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/title-numeric.js +40 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/title-string.js +36 -0
- data/app/assets/stylesheets/datatables/extensions/AutoFill/autoFill.dataTables.scss +10 -3
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.bootstrap.scss +12 -3
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.bootstrap4.scss +13 -6
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.dataTables.scss +2 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.foundation.scss +5 -1
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.jqueryui.scss +1 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.semanticui.scss +2 -1
- data/app/assets/stylesheets/datatables/extensions/Buttons/common.scss +10 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/mixins.scss +42 -30
- data/app/assets/stylesheets/datatables/extensions/FixedColumns/fixedColumns.bootstrap.scss +11 -7
- data/app/assets/stylesheets/datatables/extensions/FixedColumns/fixedColumns.foundation.scss +1 -0
- data/app/assets/stylesheets/datatables/extensions/KeyTable/keyTable.dataTables.scss +13 -5
- data/app/assets/stylesheets/datatables/extensions/RowGroup/rowGroup.dataTables.scss +20 -2
- data/app/assets/stylesheets/datatables/extensions/Scroller/scroller.dataTables.scss +15 -2
- data/lib/jquery-datatables/version.rb +1 -1
- metadata +26 -12
- data/app/assets/javascripts/datatables/dataTables.bootstrap2.js +0 -162
- data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.semanicui.js +0 -38
- data/app/assets/javascripts/datatables/extensions/FixedColumns/fixedColumns.semanicui.js +0 -38
- data/app/assets/javascripts/datatables/extensions/FixedHeader/fixedHeader.semanicui.js +0 -38
- data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.semanicui.js +0 -38
- data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.semanicui.js +0 -38
- data/app/assets/stylesheets/datatables/dataTables.bootstrap2.scss +0 -178
@@ -1,15 +1,15 @@
|
|
1
|
-
/*! ColReorder 1.5.
|
2
|
-
* ©2010-
|
1
|
+
/*! ColReorder 1.5.2
|
2
|
+
* ©2010-2019 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
/**
|
6
6
|
* @summary ColReorder
|
7
7
|
* @description Provide the ability to reorder columns in a DataTable
|
8
|
-
* @version 1.5.
|
8
|
+
* @version 1.5.2
|
9
9
|
* @file dataTables.colReorder.js
|
10
10
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
11
11
|
* @contact www.sprymedia.co.uk/contact
|
12
|
-
* @copyright Copyright 2010-
|
12
|
+
* @copyright Copyright 2010-2019 SpryMedia Ltd.
|
13
13
|
*
|
14
14
|
* This source file is free software, available under the following license:
|
15
15
|
* MIT license - http://datatables.net/license/mit
|
@@ -917,7 +917,7 @@ $.extend( ColReorder.prototype, {
|
|
917
917
|
var that = this;
|
918
918
|
$(nTh)
|
919
919
|
.on( 'mousedown.ColReorder', function (e) {
|
920
|
-
if ( that.s.enable ) {
|
920
|
+
if ( that.s.enable && e.which === 1 ) {
|
921
921
|
that._fnMouseDown.call( that, e, nTh );
|
922
922
|
}
|
923
923
|
} )
|
@@ -1004,26 +1004,68 @@ $.extend( ColReorder.prototype, {
|
|
1004
1004
|
} );
|
1005
1005
|
|
1006
1006
|
/* Based on the current mouse position, calculate where the insert should go */
|
1007
|
-
var
|
1007
|
+
var target;
|
1008
1008
|
var lastToIndex = this.s.mouse.toIndex;
|
1009
|
+
var cursorXPosiotion = this._fnCursorPosition(e, 'pageX');
|
1010
|
+
var targetsPrev = function (i) {
|
1011
|
+
while (i >= 0) {
|
1012
|
+
i--;
|
1009
1013
|
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1014
|
+
if (i <= 0) {
|
1015
|
+
return null;
|
1016
|
+
}
|
1017
|
+
|
1018
|
+
if (that.s.aoTargets[i+1].x !== that.s.aoTargets[i].x) {
|
1019
|
+
return that.s.aoTargets[i];
|
1020
|
+
}
|
1021
|
+
}
|
1022
|
+
};
|
1023
|
+
var firstNotHidden = function () {
|
1024
|
+
for (var i=0 ; i<that.s.aoTargets.length-1 ; i++) {
|
1025
|
+
if (that.s.aoTargets[i].x !== that.s.aoTargets[i+1].x) {
|
1026
|
+
return that.s.aoTargets[i];
|
1027
|
+
}
|
1018
1028
|
}
|
1029
|
+
};
|
1030
|
+
var lastNotHidden = function () {
|
1031
|
+
for (var i=that.s.aoTargets.length-1 ; i>0 ; i--) {
|
1032
|
+
if (that.s.aoTargets[i].x !== that.s.aoTargets[i-1].x) {
|
1033
|
+
return that.s.aoTargets[i];
|
1034
|
+
}
|
1035
|
+
}
|
1036
|
+
};
|
1037
|
+
|
1038
|
+
for (var i = 1; i < this.s.aoTargets.length; i++) {
|
1039
|
+
var prevTarget = targetsPrev(i);
|
1040
|
+
if (! prevTarget) {
|
1041
|
+
prevTarget = firstNotHidden();
|
1042
|
+
}
|
1043
|
+
|
1044
|
+
var prevTargetMiddle = prevTarget.x + (this.s.aoTargets[i].x - prevTarget.x) / 2;
|
1045
|
+
|
1046
|
+
if (this._fnIsLtr()) {
|
1047
|
+
if (cursorXPosiotion < prevTargetMiddle ) {
|
1048
|
+
target = prevTarget;
|
1049
|
+
break;
|
1050
|
+
}
|
1051
|
+
}
|
1052
|
+
else {
|
1053
|
+
if (cursorXPosiotion > prevTargetMiddle) {
|
1054
|
+
target = prevTarget;
|
1055
|
+
break;
|
1056
|
+
}
|
1057
|
+
}
|
1019
1058
|
}
|
1020
1059
|
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1060
|
+
if (target) {
|
1061
|
+
this.dom.pointer.css('left', target.x);
|
1062
|
+
this.s.mouse.toIndex = target.to;
|
1063
|
+
}
|
1064
|
+
else {
|
1065
|
+
// The insert element wasn't positioned in the array (less than
|
1066
|
+
// operator), so we put it at the end
|
1067
|
+
this.dom.pointer.css( 'left', lastNotHidden().x );
|
1068
|
+
this.s.mouse.toIndex = lastNotHidden().to;
|
1027
1069
|
}
|
1028
1070
|
|
1029
1071
|
// Perform reordering if realtime updating is on and the column has moved
|
@@ -1094,38 +1136,60 @@ $.extend( ColReorder.prototype, {
|
|
1094
1136
|
"_fnRegions": function ()
|
1095
1137
|
{
|
1096
1138
|
var aoColumns = this.s.dt.aoColumns;
|
1097
|
-
|
1098
|
-
this.s.aoTargets.splice(
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1139
|
+
var isLTR = this._fnIsLtr();
|
1140
|
+
this.s.aoTargets.splice(0, this.s.aoTargets.length);
|
1141
|
+
var lastBound = $(this.s.dt.nTable).offset().left;
|
1142
|
+
|
1143
|
+
var aoColumnBounds = [];
|
1144
|
+
$.each(aoColumns, function (i, column) {
|
1145
|
+
if (column.bVisible && column.nTh.style.display !== 'none') {
|
1146
|
+
var nth = $(column.nTh);
|
1147
|
+
var bound = nth.offset().left;
|
1148
|
+
|
1149
|
+
if (isLTR) {
|
1150
|
+
bound += nth.outerWidth();
|
1151
|
+
}
|
1152
|
+
|
1153
|
+
aoColumnBounds.push({
|
1154
|
+
index: i,
|
1155
|
+
bound: bound
|
1156
|
+
});
|
1157
|
+
|
1158
|
+
lastBound = bound;
|
1117
1159
|
}
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
this.s.aoTargets.push( {
|
1124
|
-
"x": total,
|
1125
|
-
"to": iToPoint
|
1126
|
-
} );
|
1160
|
+
else {
|
1161
|
+
aoColumnBounds.push({
|
1162
|
+
index: i,
|
1163
|
+
bound: lastBound
|
1164
|
+
});
|
1127
1165
|
}
|
1128
|
-
}
|
1166
|
+
});
|
1167
|
+
|
1168
|
+
var firstColumn = aoColumnBounds[0];
|
1169
|
+
var firstColumnWidth = $(aoColumns[firstColumn.index].nTh).outerWidth();
|
1170
|
+
|
1171
|
+
this.s.aoTargets.push({
|
1172
|
+
to: 0,
|
1173
|
+
x: firstColumn.bound - firstColumnWidth
|
1174
|
+
});
|
1175
|
+
|
1176
|
+
for (var i = 0; i < aoColumnBounds.length; i++) {
|
1177
|
+
var columnBound = aoColumnBounds[i];
|
1178
|
+
var iToPoint = columnBound.index;
|
1179
|
+
|
1180
|
+
/* For the column / header in question, we want it's position to remain the same if the
|
1181
|
+
* position is just to it's immediate left or right, so we only increment the counter for
|
1182
|
+
* other columns
|
1183
|
+
*/
|
1184
|
+
if (columnBound.index < this.s.mouse.fromIndex) {
|
1185
|
+
iToPoint++;
|
1186
|
+
}
|
1187
|
+
|
1188
|
+
this.s.aoTargets.push({
|
1189
|
+
to: iToPoint,
|
1190
|
+
x: columnBound.bound
|
1191
|
+
});
|
1192
|
+
}
|
1129
1193
|
|
1130
1194
|
/* Disallow columns for being reordered by drag and drop, counting right to left */
|
1131
1195
|
if ( this.s.fixedRight !== 0 )
|
@@ -1219,7 +1283,11 @@ $.extend( ColReorder.prototype, {
|
|
1219
1283
|
return e.originalEvent.touches[0][ prop ];
|
1220
1284
|
}
|
1221
1285
|
return e[ prop ];
|
1222
|
-
|
1286
|
+
},
|
1287
|
+
|
1288
|
+
_fnIsLtr: function () {
|
1289
|
+
return $(this.s.dt.nTable).css('direction') !== "rtl";
|
1290
|
+
}
|
1223
1291
|
} );
|
1224
1292
|
|
1225
1293
|
|
@@ -1306,7 +1374,7 @@ ColReorder.defaults = {
|
|
1306
1374
|
* @type String
|
1307
1375
|
* @default As code
|
1308
1376
|
*/
|
1309
|
-
ColReorder.version = "1.5.
|
1377
|
+
ColReorder.version = "1.5.2";
|
1310
1378
|
|
1311
1379
|
|
1312
1380
|
|
@@ -1397,6 +1465,7 @@ $.fn.dataTable.Api.register( 'colReorder.transpose()', function ( idx, dir ) {
|
|
1397
1465
|
$.fn.dataTable.Api.register( 'colReorder.move()', function( from, to, drop, invalidateRows ) {
|
1398
1466
|
if (this.context.length) {
|
1399
1467
|
this.context[0]._colReorder.s.dt.oInstance.fnColReorder( from, to, drop, invalidateRows );
|
1468
|
+
this.context[0]._colReorder._fnSetColumnIndexes();
|
1400
1469
|
}
|
1401
1470
|
return this;
|
1402
1471
|
} );
|
@@ -1,11 +1,11 @@
|
|
1
|
-
/*! FixedColumns 3.
|
1
|
+
/*! FixedColumns 3.3.0
|
2
2
|
* ©2010-2018 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
/**
|
6
6
|
* @summary FixedColumns
|
7
7
|
* @description Freeze columns in place on a scrolling DataTable
|
8
|
-
* @version 3.
|
8
|
+
* @version 3.3.0
|
9
9
|
* @file dataTables.fixedColumns.js
|
10
10
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
11
11
|
* @contact www.sprymedia.co.uk/contact
|
@@ -449,6 +449,25 @@ $.extend( FixedColumns.prototype , {
|
|
449
449
|
}
|
450
450
|
},
|
451
451
|
|
452
|
+
fnToFixedNode: function ( rowIdx, colIdx )
|
453
|
+
{
|
454
|
+
var found;
|
455
|
+
|
456
|
+
if ( colIdx < this.s.iLeftColumns ) {
|
457
|
+
found = $(this.dom.clone.left.body).find('[data-dt-row='+rowIdx+'][data-dt-column='+colIdx+']');
|
458
|
+
}
|
459
|
+
else if ( colIdx >= this.s.iRightColumns ) {
|
460
|
+
found = $(this.dom.clone.right.body).find('[data-dt-row='+rowIdx+'][data-dt-column='+colIdx+']');
|
461
|
+
}
|
462
|
+
|
463
|
+
if ( found && found.length ) {
|
464
|
+
return found[0];
|
465
|
+
}
|
466
|
+
|
467
|
+
// Fallback - non-fixed node
|
468
|
+
var table = new $.fn.dataTable.Api(this.s.dt);
|
469
|
+
return table.cell(rowIdx, colIdx).node();
|
470
|
+
},
|
452
471
|
|
453
472
|
|
454
473
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
@@ -735,7 +754,7 @@ $.extend( FixedColumns.prototype , {
|
|
735
754
|
$('<div class="DTFC_ScrollWrapper" style="position:relative; clear:both;">'+
|
736
755
|
'<div class="DTFC_LeftWrapper" style="position:absolute; top:0; left:0;" aria-hidden="true">'+
|
737
756
|
'<div class="DTFC_LeftHeadWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div>'+
|
738
|
-
'<div class="DTFC_LeftBodyWrapper" style="position:relative; top:0; left:0; overflow:hidden;">'+
|
757
|
+
'<div class="DTFC_LeftBodyWrapper" style="position:relative; top:0; left:0; height:0; overflow:hidden;">'+
|
739
758
|
'<div class="DTFC_LeftBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div>'+
|
740
759
|
'</div>'+
|
741
760
|
'<div class="DTFC_LeftFootWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div>'+
|
@@ -744,7 +763,7 @@ $.extend( FixedColumns.prototype , {
|
|
744
763
|
'<div class="DTFC_RightHeadWrapper" style="position:relative; top:0; left:0;">'+
|
745
764
|
'<div class="DTFC_RightHeadBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div>'+
|
746
765
|
'</div>'+
|
747
|
-
'<div class="DTFC_RightBodyWrapper" style="position:relative; top:0; left:0; overflow:hidden;">'+
|
766
|
+
'<div class="DTFC_RightBodyWrapper" style="position:relative; top:0; left:0; height:0; overflow:hidden;">'+
|
748
767
|
'<div class="DTFC_RightBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div>'+
|
749
768
|
'</div>'+
|
750
769
|
'<div class="DTFC_RightFootWrapper" style="position:relative; top:0; left:0;">'+
|
@@ -1525,7 +1544,7 @@ FixedColumns.defaults = /** @lends FixedColumns.defaults */{
|
|
1525
1544
|
* @default See code
|
1526
1545
|
* @static
|
1527
1546
|
*/
|
1528
|
-
FixedColumns.version = "3.
|
1547
|
+
FixedColumns.version = "3.3.0";
|
1529
1548
|
|
1530
1549
|
|
1531
1550
|
|
@@ -1596,6 +1615,14 @@ DataTable.Api.register( 'fixedColumns().cellIndex()', function ( cell ) {
|
|
1596
1615
|
}
|
1597
1616
|
} );
|
1598
1617
|
|
1618
|
+
DataTable.Api.registerPlural( 'cells().fixedNodes()', 'cell().fixedNode()', function () {
|
1619
|
+
return this.iterator( 'cell', function ( settings, row, column ) {
|
1620
|
+
return settings._oFixedColumns
|
1621
|
+
? settings._oFixedColumns.fnToFixedNode( row, column )
|
1622
|
+
: this.node();
|
1623
|
+
}, 1 );
|
1624
|
+
} );
|
1625
|
+
|
1599
1626
|
|
1600
1627
|
|
1601
1628
|
|
@@ -1,15 +1,15 @@
|
|
1
|
-
/*! KeyTable 2.
|
2
|
-
* ©2009-
|
1
|
+
/*! KeyTable 2.5.1
|
2
|
+
* ©2009-2019 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
/**
|
6
6
|
* @summary KeyTable
|
7
7
|
* @description Spreadsheet like keyboard navigation for DataTables
|
8
|
-
* @version 2.
|
8
|
+
* @version 2.5.1
|
9
9
|
* @file dataTables.keyTable.js
|
10
10
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
11
11
|
* @contact www.sprymedia.co.uk/contact
|
12
|
-
* @copyright Copyright 2009-
|
12
|
+
* @copyright Copyright 2009-2019 SpryMedia Ltd.
|
13
13
|
*
|
14
14
|
* This source file is free software, available under the following license:
|
15
15
|
* MIT license - http://datatables.net/license/mit
|
@@ -49,6 +49,7 @@
|
|
49
49
|
}(function( $, window, document, undefined ) {
|
50
50
|
'use strict';
|
51
51
|
var DataTable = $.fn.dataTable;
|
52
|
+
var namespaceCounter = 0;
|
52
53
|
|
53
54
|
|
54
55
|
var KeyTable = function ( dt, opts ) {
|
@@ -80,7 +81,10 @@ var KeyTable = function ( dt, opts ) {
|
|
80
81
|
waitingForDraw: false,
|
81
82
|
|
82
83
|
/** @type {object} Information about the last cell that was focused */
|
83
|
-
lastFocus: null
|
84
|
+
lastFocus: null,
|
85
|
+
|
86
|
+
/** @type {string} Unique namespace per instance */
|
87
|
+
namespace: '.keyTable-'+(namespaceCounter++)
|
84
88
|
};
|
85
89
|
|
86
90
|
// DOM items
|
@@ -167,6 +171,8 @@ $.extend( KeyTable.prototype, {
|
|
167
171
|
var that = this;
|
168
172
|
var dt = this.s.dt;
|
169
173
|
var table = $( dt.table().node() );
|
174
|
+
var namespace = this.s.namespace;
|
175
|
+
var editorBlock = false;
|
170
176
|
|
171
177
|
// Need to be able to calculate the cell positions relative to the table
|
172
178
|
if ( table.css('position') === 'static' ) {
|
@@ -174,7 +180,7 @@ $.extend( KeyTable.prototype, {
|
|
174
180
|
}
|
175
181
|
|
176
182
|
// Click to focus
|
177
|
-
$( dt.table().body() ).on( 'click
|
183
|
+
$( dt.table().body() ).on( 'click'+namespace, 'th, td', function (e) {
|
178
184
|
if ( that.s.enable === false ) {
|
179
185
|
return;
|
180
186
|
}
|
@@ -189,13 +195,15 @@ $.extend( KeyTable.prototype, {
|
|
189
195
|
} );
|
190
196
|
|
191
197
|
// Key events
|
192
|
-
$( document ).on( 'keydown
|
193
|
-
|
198
|
+
$( document ).on( 'keydown'+namespace, function (e) {
|
199
|
+
if ( ! editorBlock ) {
|
200
|
+
that._key( e );
|
201
|
+
}
|
194
202
|
} );
|
195
203
|
|
196
204
|
// Click blur
|
197
205
|
if ( this.c.blurable ) {
|
198
|
-
$( document ).on( 'mousedown
|
206
|
+
$( document ).on( 'mousedown'+namespace, function ( e ) {
|
199
207
|
// Click on the search input will blur focus
|
200
208
|
if ( $(e.target).parents( '.dataTables_filter' ).length ) {
|
201
209
|
that._blur();
|
@@ -233,28 +241,56 @@ $.extend( KeyTable.prototype, {
|
|
233
241
|
if ( mode !== 'inline' && that.s.enable ) {
|
234
242
|
that.enable( false );
|
235
243
|
|
236
|
-
editor.one( 'close
|
244
|
+
editor.one( 'close'+namespace, function () {
|
237
245
|
that.enable( true );
|
238
246
|
} );
|
239
247
|
}
|
240
248
|
} );
|
241
249
|
|
242
250
|
if ( this.c.editOnFocus ) {
|
243
|
-
dt.on( 'key-focus
|
244
|
-
that._editor( null, orig );
|
251
|
+
dt.on( 'key-focus'+namespace+' key-refocus'+namespace, function ( e, dt, cell, orig ) {
|
252
|
+
that._editor( null, orig, true );
|
245
253
|
} );
|
246
254
|
}
|
247
255
|
|
248
256
|
// Activate Editor when a key is pressed (will be ignored, if
|
249
257
|
// already active).
|
250
|
-
dt.on( 'key
|
251
|
-
that._editor( key, orig );
|
258
|
+
dt.on( 'key'+namespace, function ( e, dt, key, cell, orig ) {
|
259
|
+
that._editor( key, orig, false );
|
252
260
|
} );
|
261
|
+
|
262
|
+
// Active editing on double click - it will already have focus from
|
263
|
+
// the click event handler above
|
264
|
+
$( dt.table().body() ).on( 'dblclick'+namespace, 'th, td', function (e) {
|
265
|
+
if ( that.s.enable === false ) {
|
266
|
+
return;
|
267
|
+
}
|
268
|
+
|
269
|
+
var cell = dt.cell( this );
|
270
|
+
|
271
|
+
if ( ! cell.any() ) {
|
272
|
+
return;
|
273
|
+
}
|
274
|
+
|
275
|
+
that._editor( null, e, true );
|
276
|
+
} );
|
277
|
+
|
278
|
+
// While Editor is busy processing, we don't want to process any key events
|
279
|
+
editor
|
280
|
+
.on('preSubmit', function () {
|
281
|
+
editorBlock = true;
|
282
|
+
} )
|
283
|
+
.on('preSubmitCancelled', function () {
|
284
|
+
editorBlock = false;
|
285
|
+
} )
|
286
|
+
.on('submitComplete', function () {
|
287
|
+
editorBlock = false;
|
288
|
+
} );
|
253
289
|
}
|
254
290
|
|
255
291
|
// Stave saving
|
256
292
|
if ( dt.settings()[0].oFeatures.bStateSave ) {
|
257
|
-
dt.on( 'stateSaveParams
|
293
|
+
dt.on( 'stateSaveParams'+namespace, function (e, s, d) {
|
258
294
|
d.keyTable = that.s.lastFocus ?
|
259
295
|
that.s.lastFocus.cell.index() :
|
260
296
|
null;
|
@@ -262,7 +298,7 @@ $.extend( KeyTable.prototype, {
|
|
262
298
|
}
|
263
299
|
|
264
300
|
// Redraw - retain focus on the current cell
|
265
|
-
dt.on( 'draw
|
301
|
+
dt.on( 'draw'+namespace, function (e) {
|
266
302
|
if ( that.s.focusDraw ) {
|
267
303
|
return;
|
268
304
|
}
|
@@ -292,14 +328,21 @@ $.extend( KeyTable.prototype, {
|
|
292
328
|
this._clipboard();
|
293
329
|
}
|
294
330
|
|
295
|
-
dt.on( 'destroy
|
296
|
-
|
297
|
-
|
331
|
+
dt.on( 'destroy'+namespace, function () {
|
332
|
+
that._blur( true );
|
333
|
+
|
334
|
+
// Event tidy up
|
335
|
+
dt.off( namespace );
|
336
|
+
|
337
|
+
$( dt.table().body() )
|
338
|
+
.off( 'click'+namespace, 'th, td' )
|
339
|
+
.off( 'dblclick'+namespace, 'th, td' );
|
340
|
+
|
298
341
|
$( document )
|
299
|
-
.off( '
|
300
|
-
.off( '
|
301
|
-
.off( 'copy
|
302
|
-
.off( 'paste
|
342
|
+
.off( 'mousedown'+namespace )
|
343
|
+
.off( 'keydown'+namespace )
|
344
|
+
.off( 'copy'+namespace )
|
345
|
+
.off( 'paste'+namespace );
|
303
346
|
} );
|
304
347
|
|
305
348
|
// Initial focus comes from state or options
|
@@ -329,9 +372,10 @@ $.extend( KeyTable.prototype, {
|
|
329
372
|
/**
|
330
373
|
* Blur the control
|
331
374
|
*
|
375
|
+
* @param {boolean} [noEvents=false] Don't trigger updates / events (for destroying)
|
332
376
|
* @private
|
333
377
|
*/
|
334
|
-
_blur: function ()
|
378
|
+
_blur: function (noEvents)
|
335
379
|
{
|
336
380
|
if ( ! this.s.enable || ! this.s.lastFocus ) {
|
337
381
|
return;
|
@@ -342,9 +386,11 @@ $.extend( KeyTable.prototype, {
|
|
342
386
|
$( cell.node() ).removeClass( this.c.className );
|
343
387
|
this.s.lastFocus = null;
|
344
388
|
|
345
|
-
|
389
|
+
if ( ! noEvents ) {
|
390
|
+
this._updateFixedColumns(cell.index().column);
|
346
391
|
|
347
|
-
|
392
|
+
this._emitEvent( 'key-blur', [ this.s.dt, cell ] );
|
393
|
+
}
|
348
394
|
},
|
349
395
|
|
350
396
|
|
@@ -356,13 +402,14 @@ $.extend( KeyTable.prototype, {
|
|
356
402
|
_clipboard: function () {
|
357
403
|
var dt = this.s.dt;
|
358
404
|
var that = this;
|
405
|
+
var namespace = this.s.namespace;
|
359
406
|
|
360
407
|
// IE8 doesn't support getting selected text
|
361
408
|
if ( ! window.getSelection ) {
|
362
409
|
return;
|
363
410
|
}
|
364
411
|
|
365
|
-
$(document).on( 'copy
|
412
|
+
$(document).on( 'copy'+namespace, function (ejq) {
|
366
413
|
var e = ejq.originalEvent;
|
367
414
|
var selection = window.getSelection().toString();
|
368
415
|
var focused = that.s.lastFocus;
|
@@ -378,7 +425,7 @@ $.extend( KeyTable.prototype, {
|
|
378
425
|
}
|
379
426
|
} );
|
380
427
|
|
381
|
-
$(document).on( 'paste
|
428
|
+
$(document).on( 'paste'+namespace, function (ejq) {
|
382
429
|
var e = ejq.originalEvent;
|
383
430
|
var focused = that.s.lastFocus;
|
384
431
|
var activeEl = document.activeElement;
|
@@ -445,26 +492,28 @@ $.extend( KeyTable.prototype, {
|
|
445
492
|
* @param {object} orig Original event
|
446
493
|
* @private
|
447
494
|
*/
|
448
|
-
_editor: function ( key, orig )
|
495
|
+
_editor: function ( key, orig, hardEdit )
|
449
496
|
{
|
450
497
|
var that = this;
|
451
498
|
var dt = this.s.dt;
|
452
499
|
var editor = this.c.editor;
|
500
|
+
var editCell = this.s.lastFocus.cell;
|
501
|
+
var namespace = this.s.namespace;
|
453
502
|
|
454
503
|
// Do nothing if there is already an inline edit in this cell
|
455
|
-
if ( $('div.DTE',
|
504
|
+
if ( $('div.DTE', editCell.node()).length ) {
|
456
505
|
return;
|
457
506
|
}
|
458
507
|
|
459
508
|
// Don't activate Editor on control key presses
|
460
|
-
if (
|
509
|
+
if ( key !== null && (
|
461
510
|
(key >= 0x00 && key <= 0x09) ||
|
462
511
|
key === 0x0b ||
|
463
512
|
key === 0x0c ||
|
464
513
|
(key >= 0x0e && key <= 0x1f) ||
|
465
514
|
(key >= 0x70 && key <= 0x7b) ||
|
466
515
|
(key >= 0x7f && key <= 0x9f)
|
467
|
-
) {
|
516
|
+
) ) {
|
468
517
|
return;
|
469
518
|
}
|
470
519
|
|
@@ -478,43 +527,63 @@ $.extend( KeyTable.prototype, {
|
|
478
527
|
|
479
528
|
var editInline = function () {
|
480
529
|
editor
|
481
|
-
.one( 'open
|
530
|
+
.one( 'open'+namespace, function () {
|
482
531
|
// Remove cancel open
|
483
|
-
editor.off( 'cancelOpen
|
532
|
+
editor.off( 'cancelOpen'+namespace );
|
484
533
|
|
485
534
|
// Excel style - select all text
|
486
|
-
if (
|
535
|
+
if ( ! hardEdit ) {
|
487
536
|
$('div.DTE_Field_InputControl input, div.DTE_Field_InputControl textarea').select();
|
488
537
|
}
|
489
538
|
|
490
539
|
// Reduce the keys the Keys listens for
|
491
|
-
dt.keys.enable(
|
540
|
+
dt.keys.enable( hardEdit ? 'tab-only' : 'navigation-only' );
|
492
541
|
|
493
542
|
// On blur of the navigation submit
|
494
|
-
dt.
|
495
|
-
if ( editor.displayed() ) {
|
543
|
+
dt.on( 'key-blur.editor', function (e, dt, cell) {
|
544
|
+
if ( editor.displayed() && cell.node() === editCell.node() ) {
|
496
545
|
editor.submit();
|
497
546
|
}
|
498
547
|
} );
|
499
548
|
|
549
|
+
// Highlight the cell a different colour on full edit
|
550
|
+
if ( hardEdit ) {
|
551
|
+
$( dt.table().container() ).addClass('dtk-focus-alt');
|
552
|
+
}
|
553
|
+
|
554
|
+
// If the dev cancels the submit, we need to return focus
|
555
|
+
editor.on( 'preSubmitCancelled'+namespace, function () {
|
556
|
+
setTimeout( function () {
|
557
|
+
that._focus( editCell, null, false );
|
558
|
+
}, 50 );
|
559
|
+
} );
|
560
|
+
|
561
|
+
editor.on( 'submitUnsuccessful'+namespace, function () {
|
562
|
+
that._focus( editCell, null, false );
|
563
|
+
} );
|
564
|
+
|
500
565
|
// Restore full key navigation on close
|
501
566
|
editor.one( 'close', function () {
|
502
567
|
dt.keys.enable( true );
|
503
568
|
dt.off( 'key-blur.editor' );
|
569
|
+
editor.off( namespace );
|
570
|
+
$( dt.table().container() ).removeClass('dtk-focus-alt');
|
504
571
|
} );
|
505
572
|
} )
|
506
|
-
.one( 'cancelOpen
|
573
|
+
.one( 'cancelOpen'+namespace, function () {
|
507
574
|
// `preOpen` can cancel the display of the form, so it
|
508
575
|
// might be that the open event handler isn't needed
|
509
|
-
editor.off(
|
576
|
+
editor.off( namespace );
|
510
577
|
} )
|
511
|
-
.inline(
|
578
|
+
.inline( editCell.index() );
|
512
579
|
};
|
513
580
|
|
514
581
|
// Editor 1.7 listens for `return` on keyup, so if return is the trigger
|
515
582
|
// key, we need to wait for `keyup` otherwise Editor would just submit
|
516
583
|
// the content triggered by this keypress.
|
517
584
|
if ( key === 13 ) {
|
585
|
+
hardEdit = true;
|
586
|
+
|
518
587
|
$(document).one( 'keyup', function () { // immediately removed
|
519
588
|
editInline();
|
520
589
|
} );
|
@@ -580,6 +649,11 @@ $.extend( KeyTable.prototype, {
|
|
580
649
|
.rows( { filter: 'applied', order: 'applied' } )
|
581
650
|
.indexes()
|
582
651
|
.indexOf( index.row );
|
652
|
+
|
653
|
+
// Don't focus rows that were filtered out.
|
654
|
+
if ( row < 0 ) {
|
655
|
+
return;
|
656
|
+
}
|
583
657
|
|
584
658
|
// For server-side processing normalise the row by adding the start
|
585
659
|
// point, since `rows().indexes()` includes only rows that are
|
@@ -634,6 +708,9 @@ $.extend( KeyTable.prototype, {
|
|
634
708
|
this._blur();
|
635
709
|
}
|
636
710
|
|
711
|
+
// Clear focus from other tables
|
712
|
+
this._removeOtherFocus();
|
713
|
+
|
637
714
|
var node = $( cell.node() );
|
638
715
|
node.addClass( this.c.className );
|
639
716
|
|
@@ -697,6 +774,12 @@ $.extend( KeyTable.prototype, {
|
|
697
774
|
return;
|
698
775
|
}
|
699
776
|
|
777
|
+
// And the last focus still exists!
|
778
|
+
if ( ! this.s.dt.cell(lastFocus.node).any() ) {
|
779
|
+
this.s.lastFocus = null;
|
780
|
+
return;
|
781
|
+
}
|
782
|
+
|
700
783
|
var that = this;
|
701
784
|
var dt = this.s.dt;
|
702
785
|
var scrolling = this.s.dt.settings()[0].oScroll.sY ? true : false;
|
@@ -766,6 +849,13 @@ $.extend( KeyTable.prototype, {
|
|
766
849
|
}
|
767
850
|
break;
|
768
851
|
|
852
|
+
case 113: // F2 - Excel like hard edit
|
853
|
+
if ( this.c.editor ) {
|
854
|
+
this._editor(null, e, true);
|
855
|
+
break;
|
856
|
+
}
|
857
|
+
// else fallthrough
|
858
|
+
|
769
859
|
default:
|
770
860
|
// Everything else - pass through only when fully enabled
|
771
861
|
if ( enable === true ) {
|
@@ -775,6 +865,19 @@ $.extend( KeyTable.prototype, {
|
|
775
865
|
}
|
776
866
|
},
|
777
867
|
|
868
|
+
/**
|
869
|
+
* Remove focus from all tables other than this one
|
870
|
+
*/
|
871
|
+
_removeOtherFocus: function ()
|
872
|
+
{
|
873
|
+
var thisTable = this.s.dt.table().node();
|
874
|
+
|
875
|
+
$.fn.dataTable.tables({api:true}).iterator('table', function (settings) {
|
876
|
+
if (this.table().node() !== thisTable) {
|
877
|
+
this.cell.blur();
|
878
|
+
}
|
879
|
+
});
|
880
|
+
},
|
778
881
|
|
779
882
|
/**
|
780
883
|
* Scroll a container to make a cell visible in it. This can be used for
|
@@ -896,16 +999,19 @@ $.extend( KeyTable.prototype, {
|
|
896
999
|
row++;
|
897
1000
|
}
|
898
1001
|
|
899
|
-
if ( row >= 0 && row < rows && $.inArray( column, columns ) !== -1
|
900
|
-
|
901
|
-
|
1002
|
+
if ( row >= 0 && row < rows && $.inArray( column, columns ) !== -1 ) {
|
1003
|
+
if (e) {
|
1004
|
+
e.preventDefault();
|
1005
|
+
}
|
902
1006
|
|
903
1007
|
this._focus( row, column, true, e );
|
904
1008
|
}
|
905
1009
|
else if ( ! keyBlurable || ! this.c.blurable ) {
|
906
1010
|
// No new focus, but if the table isn't blurable, then don't loose
|
907
1011
|
// focus
|
908
|
-
e
|
1012
|
+
if (e) {
|
1013
|
+
e.preventDefault();
|
1014
|
+
}
|
909
1015
|
}
|
910
1016
|
else {
|
911
1017
|
this._blur();
|
@@ -941,8 +1047,10 @@ $.extend( KeyTable.prototype, {
|
|
941
1047
|
.insertBefore( dt.table().node() );
|
942
1048
|
|
943
1049
|
div.children().on( 'focus', function (e) {
|
944
|
-
|
945
|
-
|
1050
|
+
var cell = dt.cell(':eq(0)', that._columns(), {page: 'current'});
|
1051
|
+
|
1052
|
+
if ( cell.any() ) {
|
1053
|
+
that._focus( cell, null, true, e );
|
946
1054
|
}
|
947
1055
|
} );
|
948
1056
|
},
|
@@ -1016,21 +1124,8 @@ KeyTable.defaults = {
|
|
1016
1124
|
editor: null,
|
1017
1125
|
|
1018
1126
|
/**
|
1019
|
-
*
|
1020
|
-
*
|
1021
|
-
* @type {String}
|
1022
|
-
*/
|
1023
|
-
editorKeys: 'navigation-only',
|
1024
|
-
|
1025
|
-
/**
|
1026
|
-
* Set if Editor should automatically select the text in the input
|
1027
|
-
* @type {Boolean}
|
1028
|
-
*/
|
1029
|
-
editAutoSelect: true,
|
1030
|
-
|
1031
|
-
/**
|
1032
|
-
* Control if editing should be activated immediately upon focus
|
1033
|
-
* @type {Boolean}
|
1127
|
+
* Trigger editing immediately on focus
|
1128
|
+
* @type {boolean}
|
1034
1129
|
*/
|
1035
1130
|
editOnFocus: false,
|
1036
1131
|
|
@@ -1056,7 +1151,7 @@ KeyTable.defaults = {
|
|
1056
1151
|
|
1057
1152
|
|
1058
1153
|
|
1059
|
-
KeyTable.version = "2.
|
1154
|
+
KeyTable.version = "2.5.1";
|
1060
1155
|
|
1061
1156
|
|
1062
1157
|
$.fn.dataTable.KeyTable = KeyTable;
|
@@ -1095,6 +1190,14 @@ DataTable.Api.register( 'keys.enable()', function ( opts ) {
|
|
1095
1190
|
} );
|
1096
1191
|
} );
|
1097
1192
|
|
1193
|
+
DataTable.Api.register( 'keys.move()', function ( dir ) {
|
1194
|
+
return this.iterator( 'table', function (ctx) {
|
1195
|
+
if ( ctx.keytable ) {
|
1196
|
+
ctx.keytable._shift( null, dir, false );
|
1197
|
+
}
|
1198
|
+
} );
|
1199
|
+
} );
|
1200
|
+
|
1098
1201
|
// Cell selector
|
1099
1202
|
DataTable.ext.selector.cell.push( function ( settings, opts, cells ) {
|
1100
1203
|
var focused = opts.focused;
|