jquery-datatables 1.10.12 → 1.10.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/app/assets/javascripts/datatables/dataTables.bootstrap.js +2 -2
- data/app/assets/javascripts/datatables/dataTables.bootstrap4.js +5 -5
- data/app/assets/javascripts/datatables/dataTables.foundation.js +1 -1
- data/app/assets/javascripts/datatables/dataTables.material.js +1 -1
- data/app/assets/javascripts/datatables/dataTables.semanticui.js +1 -1
- data/app/assets/javascripts/datatables/extensions/AutoFill/dataTables.autoFill.js +63 -31
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.colVis.js +2 -3
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.flash.js +145 -55
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.html5.js +224 -206
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.print.js +14 -8
- data/app/assets/javascripts/datatables/extensions/Buttons/dataTables.buttons.js +54 -24
- data/app/assets/javascripts/datatables/extensions/KeyTable/dataTables.keyTable.js +137 -68
- data/app/assets/javascripts/datatables/extensions/Responsive/dataTables.responsive.js +30 -7
- data/app/assets/javascripts/datatables/extensions/Responsive/responsive.bootstrap.js +6 -2
- data/app/assets/javascripts/datatables/extensions/Responsive/responsive.bootstrap4.js +6 -2
- data/app/assets/javascripts/datatables/extensions/RowReorder/dataTables.rowReorder.js +64 -6
- data/app/assets/javascripts/datatables/extensions/Select/dataTables.select.js +40 -15
- data/app/assets/javascripts/datatables/jquery.dataTables.js +246 -217
- data/app/assets/javascripts/datatables/plugins/api/average.js +32 -0
- data/app/assets/javascripts/datatables/plugins/api/sum.js +51 -0
- data/app/assets/javascripts/datatables/plugins/pagination/input.js +224 -0
- data/app/assets/javascripts/datatables/plugins/search/alphabetSearch.js +368 -0
- data/app/assets/javascripts/datatables/plugins/sorting/file-size.js +43 -0
- data/app/assets/javascripts/datatables/plugins/sorting/ip-address.js +103 -0
- data/app/assets/stylesheets/datatables/dataTables.bootstrap.css +0 -1
- data/app/assets/stylesheets/datatables/dataTables.semanticui.css +0 -1
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.bootstrap.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.bootstrap4.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.dataTables.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.foundation.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.jqueryui.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.semanticui.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.bootstrap.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.bootstrap4.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.dataTables.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.foundation.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.jqueryui.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.semanticui.css +9 -4
- data/app/assets/stylesheets/datatables/plugins/search/alphabetSearch.css +43 -0
- data/lib/jquery-datatables/version.rb +1 -1
- metadata +10 -3
@@ -1,11 +1,11 @@
|
|
1
|
-
/*! Responsive 2.1.
|
1
|
+
/*! Responsive 2.1.1
|
2
2
|
* 2014-2016 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
/**
|
6
6
|
* @summary Responsive
|
7
7
|
* @description Responsive tables plug-in for DataTables
|
8
|
-
* @version 2.1.
|
8
|
+
* @version 2.1.1
|
9
9
|
* @file dataTables.responsive.js
|
10
10
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
11
11
|
* @contact www.sprymedia.co.uk/contact
|
@@ -166,7 +166,7 @@ $.extend( Responsive.prototype, {
|
|
166
166
|
// new data is added
|
167
167
|
dtPrivateSettings.oApi._fnCallbackReg( dtPrivateSettings, 'aoRowCreatedCallback', function (tr, data, idx) {
|
168
168
|
if ( $.inArray( false, that.s.current ) !== -1 ) {
|
169
|
-
$('td, th', tr).each( function ( i ) {
|
169
|
+
$('>td, >th', tr).each( function ( i ) {
|
170
170
|
var idx = dt.column.index( 'toData', i );
|
171
171
|
|
172
172
|
if ( that.s.current[idx] === false ) {
|
@@ -236,6 +236,23 @@ $.extend( Responsive.prototype, {
|
|
236
236
|
that._resize();
|
237
237
|
});
|
238
238
|
|
239
|
+
// On Ajax reload we want to reopen any child rows which are displayed
|
240
|
+
// by responsive
|
241
|
+
dt.on( 'preXhr.dtr', function () {
|
242
|
+
var rowIds = [];
|
243
|
+
dt.rows().every( function () {
|
244
|
+
if ( this.child.isShown() ) {
|
245
|
+
rowIds.push( this.id(true) );
|
246
|
+
}
|
247
|
+
} );
|
248
|
+
|
249
|
+
dt.one( 'draw.dtr', function () {
|
250
|
+
dt.rows( rowIds ).every( function () {
|
251
|
+
that._detailsDisplay( this, false );
|
252
|
+
} );
|
253
|
+
} );
|
254
|
+
});
|
255
|
+
|
239
256
|
dt.on( 'init.dtr', function (e, settings, details) {
|
240
257
|
that._resizeAuto();
|
241
258
|
that._resize();
|
@@ -598,7 +615,7 @@ $.extend( Responsive.prototype, {
|
|
598
615
|
}
|
599
616
|
|
600
617
|
// Check that the row is actually a DataTable's controlled node
|
601
|
-
if (
|
618
|
+
if ( $.inArray( $(this).closest('tr').get(0), dt.rows().nodes().toArray() ) === -1 ) {
|
602
619
|
return;
|
603
620
|
}
|
604
621
|
|
@@ -907,6 +924,12 @@ $.extend( Responsive.prototype, {
|
|
907
924
|
':eq('+target+')' :
|
908
925
|
target;
|
909
926
|
|
927
|
+
// This is a bit of a hack - we need to limit the selected nodes to just
|
928
|
+
// those of this table
|
929
|
+
if ( selector === 'td:first-child, th:first-child' ) {
|
930
|
+
selector = '>td:first-child, >th:first-child';
|
931
|
+
}
|
932
|
+
|
910
933
|
$( selector, dt.rows( { page: 'current' } ).nodes() )
|
911
934
|
.attr( 'tabIndex', ctx.iTabIndex )
|
912
935
|
.data( 'dtr-keyboard', 1 );
|
@@ -1062,7 +1085,7 @@ Responsive.renderer = {
|
|
1062
1085
|
} ).join('');
|
1063
1086
|
|
1064
1087
|
return data ?
|
1065
|
-
$('<ul data-dtr-index="'+rowIdx+'"/>').append( data ) :
|
1088
|
+
$('<ul data-dtr-index="'+rowIdx+'" class="dtr-details"/>').append( data ) :
|
1066
1089
|
false;
|
1067
1090
|
}
|
1068
1091
|
},
|
@@ -1080,7 +1103,7 @@ Responsive.renderer = {
|
|
1080
1103
|
'</tr>';
|
1081
1104
|
} ).join('');
|
1082
1105
|
|
1083
|
-
return $('<table class="'+options.tableClass+'" width="100%"/>').append( data );
|
1106
|
+
return $('<table class="'+options.tableClass+' dtr-details" width="100%"/>').append( data );
|
1084
1107
|
}
|
1085
1108
|
}
|
1086
1109
|
};
|
@@ -1201,7 +1224,7 @@ Api.register( 'responsive.hasHidden()', function () {
|
|
1201
1224
|
* @name Responsive.version
|
1202
1225
|
* @static
|
1203
1226
|
*/
|
1204
|
-
Responsive.version = '2.1.
|
1227
|
+
Responsive.version = '2.1.1';
|
1205
1228
|
|
1206
1229
|
|
1207
1230
|
$.fn.dataTable.Responsive = Responsive;
|
@@ -59,9 +59,13 @@ _display.modal = function ( options ) {
|
|
59
59
|
else {
|
60
60
|
if ( ! update ) {
|
61
61
|
if ( options && options.header ) {
|
62
|
-
_modal.find('div.modal-header')
|
62
|
+
var header = _modal.find('div.modal-header');
|
63
|
+
var button = header.find('button').detach();
|
64
|
+
|
65
|
+
header
|
63
66
|
.empty()
|
64
|
-
.append( '<h4 class="modal-title">'+options.header( row )+'</h4>' )
|
67
|
+
.append( '<h4 class="modal-title">'+options.header( row )+'</h4>' )
|
68
|
+
.prepend( button );
|
65
69
|
}
|
66
70
|
|
67
71
|
_modal.find( 'div.modal-body' )
|
@@ -59,9 +59,13 @@ _display.modal = function ( options ) {
|
|
59
59
|
else {
|
60
60
|
if ( ! update ) {
|
61
61
|
if ( options && options.header ) {
|
62
|
-
_modal.find('div.modal-header')
|
62
|
+
var header = _modal.find('div.modal-header');
|
63
|
+
var button = header.find('button').detach();
|
64
|
+
|
65
|
+
header
|
63
66
|
.empty()
|
64
|
-
.append( '<h4 class="modal-title">'+options.header( row )+'</h4>' )
|
67
|
+
.append( '<h4 class="modal-title">'+options.header( row )+'</h4>' )
|
68
|
+
.prepend( button );
|
65
69
|
}
|
66
70
|
|
67
71
|
_modal.find( 'div.modal-body' )
|
@@ -1,11 +1,11 @@
|
|
1
|
-
/*! RowReorder 1.
|
1
|
+
/*! RowReorder 1.2.0
|
2
2
|
* 2015-2016 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
/**
|
6
6
|
* @summary RowReorder
|
7
7
|
* @description Row reordering extension for DataTables
|
8
|
-
* @version 1.
|
8
|
+
* @version 1.2.0
|
9
9
|
* @file dataTables.rowReorder.js
|
10
10
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
11
11
|
* @contact www.sprymedia.co.uk/contact
|
@@ -170,6 +170,10 @@ $.extend( RowReorder.prototype, {
|
|
170
170
|
// Use `table().container()` rather than just the table node for IE8 -
|
171
171
|
// otherwise it only works once...
|
172
172
|
$(dt.table().container()).on( 'mousedown.rowReorder touchstart.rowReorder', this.c.selector, function (e) {
|
173
|
+
if ( ! that.c.enabled ) {
|
174
|
+
return;
|
175
|
+
}
|
176
|
+
|
173
177
|
var tr = $(this).closest('tr');
|
174
178
|
|
175
179
|
// Double check that it is a DataTable row
|
@@ -447,6 +451,7 @@ $.extend( RowReorder.prototype, {
|
|
447
451
|
*/
|
448
452
|
_mouseUp: function ( e )
|
449
453
|
{
|
454
|
+
var that = this;
|
450
455
|
var dt = this.s.dt;
|
451
456
|
var i, ien;
|
452
457
|
var dataSrc = this.c.dataSrc;
|
@@ -507,11 +512,19 @@ $.extend( RowReorder.prototype, {
|
|
507
512
|
|
508
513
|
// Editor interface
|
509
514
|
if ( this.c.editor ) {
|
515
|
+
// Disable user interaction while Editor is submitting
|
516
|
+
this.c.enabled = false;
|
517
|
+
|
510
518
|
this.c.editor
|
511
|
-
.edit(
|
512
|
-
|
513
|
-
|
519
|
+
.edit(
|
520
|
+
diffNodes,
|
521
|
+
false,
|
522
|
+
$.extend( {submit: 'changed'}, this.c.formOptions )
|
523
|
+
)
|
514
524
|
.multiSet( dataSrc, idDiff )
|
525
|
+
.one( 'submitComplete', function () {
|
526
|
+
that.c.enabled = true;
|
527
|
+
} )
|
515
528
|
.submit();
|
516
529
|
}
|
517
530
|
|
@@ -647,6 +660,20 @@ RowReorder.defaults = {
|
|
647
660
|
*/
|
648
661
|
editor: null,
|
649
662
|
|
663
|
+
/**
|
664
|
+
* Enable / disable RowReorder's user interaction
|
665
|
+
* @type {Boolean}
|
666
|
+
*/
|
667
|
+
enabled: true,
|
668
|
+
|
669
|
+
/**
|
670
|
+
* Form options to pass to Editor when submitting a change in the row order.
|
671
|
+
* See the Editor `from-options` object for details of the options
|
672
|
+
* available.
|
673
|
+
* @type {Object}
|
674
|
+
*/
|
675
|
+
formOptions: {},
|
676
|
+
|
650
677
|
/**
|
651
678
|
* Drag handle selector. This defines the element that when dragged will
|
652
679
|
* reorder a row.
|
@@ -673,13 +700,44 @@ RowReorder.defaults = {
|
|
673
700
|
};
|
674
701
|
|
675
702
|
|
703
|
+
/*
|
704
|
+
* API
|
705
|
+
*/
|
706
|
+
var Api = $.fn.dataTable.Api;
|
707
|
+
|
708
|
+
// Doesn't do anything - work around for a bug in DT... Not documented
|
709
|
+
Api.register( 'rowReorder()', function () {
|
710
|
+
return this;
|
711
|
+
} );
|
712
|
+
|
713
|
+
Api.register( 'rowReorder.enable()', function ( toggle ) {
|
714
|
+
if ( toggle === undefined ) {
|
715
|
+
toggle = true;
|
716
|
+
}
|
717
|
+
|
718
|
+
return this.iterator( 'table', function ( ctx ) {
|
719
|
+
if ( ctx.rowreorder ) {
|
720
|
+
ctx.rowreorder.c.enabled = toggle;
|
721
|
+
}
|
722
|
+
} );
|
723
|
+
} );
|
724
|
+
|
725
|
+
Api.register( 'rowReorder.disable()', function () {
|
726
|
+
return this.iterator( 'table', function ( ctx ) {
|
727
|
+
if ( ctx.rowreorder ) {
|
728
|
+
ctx.rowreorder.c.enabled = false;
|
729
|
+
}
|
730
|
+
} );
|
731
|
+
} );
|
732
|
+
|
733
|
+
|
676
734
|
/**
|
677
735
|
* Version information
|
678
736
|
*
|
679
737
|
* @name RowReorder.version
|
680
738
|
* @static
|
681
739
|
*/
|
682
|
-
RowReorder.version = '1.
|
740
|
+
RowReorder.version = '1.2.0';
|
683
741
|
|
684
742
|
|
685
743
|
$.fn.dataTable.RowReorder = RowReorder;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! Select for DataTables 1.2.
|
1
|
+
/*! Select for DataTables 1.2.1
|
2
2
|
* 2015-2016 SpryMedia Ltd - datatables.net/license/mit
|
3
3
|
*/
|
4
4
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
* @summary Select for DataTables
|
7
7
|
* @description A collection of API methods, events and buttons for DataTables
|
8
8
|
* that provides selection options of the items in a DataTable
|
9
|
-
* @version 1.2.
|
9
|
+
* @version 1.2.1
|
10
10
|
* @file dataTables.select.js
|
11
11
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
12
12
|
* @contact datatables.net/forums
|
@@ -54,7 +54,7 @@ var DataTable = $.fn.dataTable;
|
|
54
54
|
// Version information for debugger
|
55
55
|
DataTable.select = {};
|
56
56
|
|
57
|
-
DataTable.select.version = '1.2.
|
57
|
+
DataTable.select.version = '1.2.1';
|
58
58
|
|
59
59
|
DataTable.select.init = function ( dt ) {
|
60
60
|
var ctx = dt.settings()[0];
|
@@ -71,15 +71,18 @@ DataTable.select.init = function ( dt ) {
|
|
71
71
|
var info = true;
|
72
72
|
var selector = 'td, th';
|
73
73
|
var className = 'selected';
|
74
|
+
var setStyle = false;
|
74
75
|
|
75
76
|
ctx._select = {};
|
76
77
|
|
77
78
|
// Initialisation customisations
|
78
79
|
if ( opts === true ) {
|
79
80
|
style = 'os';
|
81
|
+
setStyle = true;
|
80
82
|
}
|
81
83
|
else if ( typeof opts === 'string' ) {
|
82
84
|
style = opts;
|
85
|
+
setStyle = true;
|
83
86
|
}
|
84
87
|
else if ( $.isPlainObject( opts ) ) {
|
85
88
|
if ( opts.blurable !== undefined ) {
|
@@ -96,6 +99,7 @@ DataTable.select.init = function ( dt ) {
|
|
96
99
|
|
97
100
|
if ( opts.style !== undefined ) {
|
98
101
|
style = opts.style;
|
102
|
+
setStyle = true;
|
99
103
|
}
|
100
104
|
|
101
105
|
if ( opts.selector !== undefined ) {
|
@@ -129,7 +133,7 @@ DataTable.select.init = function ( dt ) {
|
|
129
133
|
|
130
134
|
// If the init options haven't enabled select, but there is a selectable
|
131
135
|
// class name, then enable
|
132
|
-
if ( $( dt.table().node() ).hasClass( 'selectable' ) ) {
|
136
|
+
if ( ! setStyle && $( dt.table().node() ).hasClass( 'selectable' ) ) {
|
133
137
|
dt.select.style( 'os' );
|
134
138
|
}
|
135
139
|
};
|
@@ -301,7 +305,7 @@ function disableMouseSelection( dt )
|
|
301
305
|
var ctx = dt.settings()[0];
|
302
306
|
var selector = ctx._select.selector;
|
303
307
|
|
304
|
-
$( dt.table().
|
308
|
+
$( dt.table().container() )
|
305
309
|
.off( 'mousedown.dtSelect', selector )
|
306
310
|
.off( 'mouseup.dtSelect', selector )
|
307
311
|
.off( 'click.dtSelect', selector );
|
@@ -317,16 +321,16 @@ function disableMouseSelection( dt )
|
|
317
321
|
*/
|
318
322
|
function enableMouseSelection ( dt )
|
319
323
|
{
|
320
|
-
var
|
324
|
+
var container = $( dt.table().container() );
|
321
325
|
var ctx = dt.settings()[0];
|
322
326
|
var selector = ctx._select.selector;
|
323
327
|
|
324
|
-
|
328
|
+
container
|
325
329
|
.on( 'mousedown.dtSelect', selector, function(e) {
|
326
330
|
// Disallow text selection for shift clicking on the table so multi
|
327
331
|
// element selection doesn't look terrible!
|
328
332
|
if ( e.shiftKey || e.metaKey || e.ctrlKey ) {
|
329
|
-
|
333
|
+
container
|
330
334
|
.css( '-moz-user-select', 'none' )
|
331
335
|
.one('selectstart.dtSelect', selector, function () {
|
332
336
|
return false;
|
@@ -336,7 +340,7 @@ function enableMouseSelection ( dt )
|
|
336
340
|
.on( 'mouseup.dtSelect', selector, function() {
|
337
341
|
// Allow text selection to occur again, Mozilla style (tested in FF
|
338
342
|
// 35.0.1 - still required)
|
339
|
-
|
343
|
+
container.css( '-moz-user-select', '' );
|
340
344
|
} )
|
341
345
|
.on( 'click.dtSelect', selector, function ( e ) {
|
342
346
|
var items = dt.select.items();
|
@@ -1000,16 +1004,26 @@ function i18n( label, def ) {
|
|
1000
1004
|
};
|
1001
1005
|
}
|
1002
1006
|
|
1007
|
+
// Common events with suitable namespaces
|
1008
|
+
function namespacedEvents ( config ) {
|
1009
|
+
var unique = config._eventNamespace;
|
1010
|
+
|
1011
|
+
return 'draw.dt.DT'+unique+' select.dt.DT'+unique+' deselect.dt.DT'+unique;
|
1012
|
+
}
|
1013
|
+
|
1014
|
+
var _buttonNamespace = 0;
|
1015
|
+
|
1003
1016
|
$.extend( DataTable.ext.buttons, {
|
1004
1017
|
selected: {
|
1005
1018
|
text: i18n( 'selected', 'Selected' ),
|
1006
1019
|
className: 'buttons-selected',
|
1007
|
-
init: function ( dt ) {
|
1020
|
+
init: function ( dt, node, config ) {
|
1008
1021
|
var that = this;
|
1022
|
+
config._eventNamespace = '.select'+(_buttonNamespace++);
|
1009
1023
|
|
1010
1024
|
// .DT namespace listeners are removed by DataTables automatically
|
1011
1025
|
// on table destroy
|
1012
|
-
dt.on(
|
1026
|
+
dt.on( namespacedEvents(config), function () {
|
1013
1027
|
var enable = that.rows( { selected: true } ).any() ||
|
1014
1028
|
that.columns( { selected: true } ).any() ||
|
1015
1029
|
that.cells( { selected: true } ).any();
|
@@ -1018,15 +1032,19 @@ $.extend( DataTable.ext.buttons, {
|
|
1018
1032
|
} );
|
1019
1033
|
|
1020
1034
|
this.disable();
|
1035
|
+
},
|
1036
|
+
destroy: function ( dt, node, config ) {
|
1037
|
+
dt.off( config._eventNamespace );
|
1021
1038
|
}
|
1022
1039
|
},
|
1023
1040
|
selectedSingle: {
|
1024
1041
|
text: i18n( 'selectedSingle', 'Selected single' ),
|
1025
1042
|
className: 'buttons-selected-single',
|
1026
|
-
init: function ( dt ) {
|
1043
|
+
init: function ( dt, node, config ) {
|
1027
1044
|
var that = this;
|
1045
|
+
config._eventNamespace = '.select'+(_buttonNamespace++);
|
1028
1046
|
|
1029
|
-
dt.on(
|
1047
|
+
dt.on( namespacedEvents(config), function () {
|
1030
1048
|
var count = dt.rows( { selected: true } ).flatten().length +
|
1031
1049
|
dt.columns( { selected: true } ).flatten().length +
|
1032
1050
|
dt.cells( { selected: true } ).flatten().length;
|
@@ -1035,6 +1053,9 @@ $.extend( DataTable.ext.buttons, {
|
|
1035
1053
|
} );
|
1036
1054
|
|
1037
1055
|
this.disable();
|
1056
|
+
},
|
1057
|
+
destroy: function ( dt, node, config ) {
|
1058
|
+
dt.off( config._eventNamespace );
|
1038
1059
|
}
|
1039
1060
|
},
|
1040
1061
|
selectAll: {
|
@@ -1051,10 +1072,11 @@ $.extend( DataTable.ext.buttons, {
|
|
1051
1072
|
action: function () {
|
1052
1073
|
clear( this.settings()[0], true );
|
1053
1074
|
},
|
1054
|
-
init: function ( dt ) {
|
1075
|
+
init: function ( dt, node, config ) {
|
1055
1076
|
var that = this;
|
1077
|
+
config._eventNamespace = '.select'+(_buttonNamespace++);
|
1056
1078
|
|
1057
|
-
dt.on(
|
1079
|
+
dt.on( namespacedEvents(config), function () {
|
1058
1080
|
var count = dt.rows( { selected: true } ).flatten().length +
|
1059
1081
|
dt.columns( { selected: true } ).flatten().length +
|
1060
1082
|
dt.cells( { selected: true } ).flatten().length;
|
@@ -1063,6 +1085,9 @@ $.extend( DataTable.ext.buttons, {
|
|
1063
1085
|
} );
|
1064
1086
|
|
1065
1087
|
this.disable();
|
1088
|
+
},
|
1089
|
+
destroy: function ( dt, node, config ) {
|
1090
|
+
dt.off( config._eventNamespace );
|
1066
1091
|
}
|
1067
1092
|
}
|
1068
1093
|
} );
|
@@ -1,15 +1,15 @@
|
|
1
|
-
/*! DataTables 1.10.
|
2
|
-
* ©2008-
|
1
|
+
/*! DataTables 1.10.13
|
2
|
+
* ©2008-2016 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
/**
|
6
6
|
* @summary DataTables
|
7
7
|
* @description Paginate, search and order HTML tables
|
8
|
-
* @version 1.10.
|
8
|
+
* @version 1.10.13
|
9
9
|
* @file jquery.dataTables.js
|
10
|
-
* @author SpryMedia Ltd
|
11
|
-
* @contact www.
|
12
|
-
* @copyright Copyright 2008-
|
10
|
+
* @author SpryMedia Ltd
|
11
|
+
* @contact www.datatables.net
|
12
|
+
* @copyright Copyright 2008-2016 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
|
@@ -279,7 +279,7 @@
|
|
279
279
|
* "bPaginate": false
|
280
280
|
* } );
|
281
281
|
*
|
282
|
-
* $(window).
|
282
|
+
* $(window).on('resize', function () {
|
283
283
|
* oTable.fnAdjustColumnSizing();
|
284
284
|
* } );
|
285
285
|
* } );
|
@@ -1101,7 +1101,7 @@
|
|
1101
1101
|
var oLanguage = oSettings.oLanguage;
|
1102
1102
|
$.extend( true, oLanguage, oInit.oLanguage );
|
1103
1103
|
|
1104
|
-
if ( oLanguage.sUrl
|
1104
|
+
if ( oLanguage.sUrl )
|
1105
1105
|
{
|
1106
1106
|
/* Get the language definitions from a file - because this Ajax call makes the language
|
1107
1107
|
* get async to the remainder of this function we use bInitHandedOff to indicate that
|
@@ -1213,131 +1213,125 @@
|
|
1213
1213
|
}
|
1214
1214
|
|
1215
1215
|
var features = oSettings.oFeatures;
|
1216
|
+
var loadedInit = function () {
|
1217
|
+
/*
|
1218
|
+
* Sorting
|
1219
|
+
* @todo For modularisation (1.11) this needs to do into a sort start up handler
|
1220
|
+
*/
|
1216
1221
|
|
1217
|
-
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1222
|
+
// If aaSorting is not defined, then we use the first indicator in asSorting
|
1223
|
+
// in case that has been altered, so the default sort reflects that option
|
1224
|
+
if ( oInit.aaSorting === undefined ) {
|
1225
|
+
var sorting = oSettings.aaSorting;
|
1226
|
+
for ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {
|
1227
|
+
sorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];
|
1228
|
+
}
|
1229
|
+
}
|
1224
1230
|
|
1231
|
+
/* Do a first pass on the sorting classes (allows any size changes to be taken into
|
1232
|
+
* account, and also will apply sorting disabled classes if disabled
|
1233
|
+
*/
|
1234
|
+
_fnSortingClasses( oSettings );
|
1225
1235
|
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1236
|
+
if ( features.bSort ) {
|
1237
|
+
_fnCallbackReg( oSettings, 'aoDrawCallback', function () {
|
1238
|
+
if ( oSettings.bSorted ) {
|
1239
|
+
var aSort = _fnSortFlatten( oSettings );
|
1240
|
+
var sortedColumns = {};
|
1230
1241
|
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
{
|
1235
|
-
var sorting = oSettings.aaSorting;
|
1236
|
-
for ( i=0, iLen=sorting.length ; i<iLen ; i++ )
|
1237
|
-
{
|
1238
|
-
sorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];
|
1239
|
-
}
|
1240
|
-
}
|
1242
|
+
$.each( aSort, function (i, val) {
|
1243
|
+
sortedColumns[ val.src ] = val.dir;
|
1244
|
+
} );
|
1241
1245
|
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
+
_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );
|
1247
|
+
_fnSortAria( oSettings );
|
1248
|
+
}
|
1249
|
+
} );
|
1250
|
+
}
|
1246
1251
|
|
1247
|
-
if ( features.bSort )
|
1248
|
-
{
|
1249
1252
|
_fnCallbackReg( oSettings, 'aoDrawCallback', function () {
|
1250
|
-
if ( oSettings.bSorted ) {
|
1251
|
-
|
1252
|
-
|
1253
|
+
if ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {
|
1254
|
+
_fnSortingClasses( oSettings );
|
1255
|
+
}
|
1256
|
+
}, 'sc' );
|
1253
1257
|
|
1254
|
-
$.each( aSort, function (i, val) {
|
1255
|
-
sortedColumns[ val.src ] = val.dir;
|
1256
|
-
} );
|
1257
1258
|
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1259
|
+
/*
|
1260
|
+
* Final init
|
1261
|
+
* Cache the header, body and footer as required, creating them if needed
|
1262
|
+
*/
|
1263
|
+
|
1264
|
+
// Work around for Webkit bug 83867 - store the caption-side before removing from doc
|
1265
|
+
var captions = $this.children('caption').each( function () {
|
1266
|
+
this._captionSide = $(this).css('caption-side');
|
1261
1267
|
} );
|
1262
|
-
}
|
1263
1268
|
|
1264
|
-
|
1265
|
-
if (
|
1266
|
-
|
1269
|
+
var thead = $this.children('thead');
|
1270
|
+
if ( thead.length === 0 ) {
|
1271
|
+
thead = $('<thead/>').appendTo($this);
|
1267
1272
|
}
|
1268
|
-
|
1273
|
+
oSettings.nTHead = thead[0];
|
1269
1274
|
|
1275
|
+
var tbody = $this.children('tbody');
|
1276
|
+
if ( tbody.length === 0 ) {
|
1277
|
+
tbody = $('<tbody/>').appendTo($this);
|
1278
|
+
}
|
1279
|
+
oSettings.nTBody = tbody[0];
|
1270
1280
|
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1281
|
+
var tfoot = $this.children('tfoot');
|
1282
|
+
if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") ) {
|
1283
|
+
// If we are a scrolling table, and no footer has been given, then we need to create
|
1284
|
+
// a tfoot element for the caption element to be appended to
|
1285
|
+
tfoot = $('<tfoot/>').appendTo($this);
|
1286
|
+
}
|
1275
1287
|
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1288
|
+
if ( tfoot.length === 0 || tfoot.children().length === 0 ) {
|
1289
|
+
$this.addClass( oClasses.sNoFooter );
|
1290
|
+
}
|
1291
|
+
else if ( tfoot.length > 0 ) {
|
1292
|
+
oSettings.nTFoot = tfoot[0];
|
1293
|
+
_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );
|
1294
|
+
}
|
1280
1295
|
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1296
|
+
/* Check if there is data passing into the constructor */
|
1297
|
+
if ( oInit.aaData ) {
|
1298
|
+
for ( i=0 ; i<oInit.aaData.length ; i++ ) {
|
1299
|
+
_fnAddData( oSettings, oInit.aaData[ i ] );
|
1300
|
+
}
|
1301
|
+
}
|
1302
|
+
else if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {
|
1303
|
+
/* Grab the data from the page - only do this when deferred loading or no Ajax
|
1304
|
+
* source since there is no point in reading the DOM data if we are then going
|
1305
|
+
* to replace it with Ajax data
|
1306
|
+
*/
|
1307
|
+
_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );
|
1308
|
+
}
|
1287
1309
|
|
1288
|
-
|
1289
|
-
|
1290
|
-
{
|
1291
|
-
tbody = $('<tbody/>').appendTo(this);
|
1292
|
-
}
|
1293
|
-
oSettings.nTBody = tbody[0];
|
1310
|
+
/* Copy the data index array */
|
1311
|
+
oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
|
1294
1312
|
|
1295
|
-
|
1296
|
-
|
1297
|
-
{
|
1298
|
-
// If we are a scrolling table, and no footer has been given, then we need to create
|
1299
|
-
// a tfoot element for the caption element to be appended to
|
1300
|
-
tfoot = $('<tfoot/>').appendTo(this);
|
1301
|
-
}
|
1313
|
+
/* Initialisation complete - table can be drawn */
|
1314
|
+
oSettings.bInitialised = true;
|
1302
1315
|
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1308
|
-
|
1309
|
-
}
|
1316
|
+
/* Check if we need to initialise the table (it might not have been handed off to the
|
1317
|
+
* language processor)
|
1318
|
+
*/
|
1319
|
+
if ( bInitHandedOff === false ) {
|
1320
|
+
_fnInitialise( oSettings );
|
1321
|
+
}
|
1322
|
+
};
|
1310
1323
|
|
1311
|
-
/*
|
1312
|
-
if ( oInit.
|
1324
|
+
/* Must be done after everything which can be overridden by the state saving! */
|
1325
|
+
if ( oInit.bStateSave )
|
1313
1326
|
{
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
1317
|
-
}
|
1327
|
+
features.bStateSave = true;
|
1328
|
+
_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );
|
1329
|
+
_fnLoadState( oSettings, oInit, loadedInit );
|
1318
1330
|
}
|
1319
|
-
else
|
1320
|
-
|
1321
|
-
/* Grab the data from the page - only do this when deferred loading or no Ajax
|
1322
|
-
* source since there is no point in reading the DOM data if we are then going
|
1323
|
-
* to replace it with Ajax data
|
1324
|
-
*/
|
1325
|
-
_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );
|
1331
|
+
else {
|
1332
|
+
loadedInit();
|
1326
1333
|
}
|
1327
1334
|
|
1328
|
-
/* Copy the data index array */
|
1329
|
-
oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
|
1330
|
-
|
1331
|
-
/* Initialisation complete - table can be drawn */
|
1332
|
-
oSettings.bInitialised = true;
|
1333
|
-
|
1334
|
-
/* Check if we need to initialise the table (it might not have been handed off to the
|
1335
|
-
* language processor)
|
1336
|
-
*/
|
1337
|
-
if ( bInitHandedOff === false )
|
1338
|
-
{
|
1339
|
-
_fnInitialise( oSettings );
|
1340
|
-
}
|
1341
1335
|
} );
|
1342
1336
|
_that = null;
|
1343
1337
|
return this;
|
@@ -1368,8 +1362,10 @@
|
|
1368
1362
|
var _re_dic = {};
|
1369
1363
|
var _re_new_lines = /[\r\n]/g;
|
1370
1364
|
var _re_html = /<.*?>/g;
|
1371
|
-
|
1372
|
-
|
1365
|
+
|
1366
|
+
// This is not strict ISO8601 - Date.parse() is quite lax, although
|
1367
|
+
// implementations differ between browsers.
|
1368
|
+
var _re_date = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/;
|
1373
1369
|
|
1374
1370
|
// Escape regular expression special characters
|
1375
1371
|
var _re_escape_regex = new RegExp( '(\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ].join('|\\') + ')', 'g' );
|
@@ -1851,7 +1847,7 @@
|
|
1851
1847
|
.css( {
|
1852
1848
|
position: 'fixed',
|
1853
1849
|
top: 0,
|
1854
|
-
left:
|
1850
|
+
left: $(window).scrollLeft()*-1, // allow for scrolling
|
1855
1851
|
height: 1,
|
1856
1852
|
width: 1,
|
1857
1853
|
overflow: 'hidden'
|
@@ -2544,7 +2540,7 @@
|
|
2544
2540
|
function _fnSplitObjNotation( str )
|
2545
2541
|
{
|
2546
2542
|
return $.map( str.match(/(\\.|[^\.])+/g) || [''], function ( s ) {
|
2547
|
-
return s.replace(
|
2543
|
+
return s.replace(/\\\./g, '.');
|
2548
2544
|
} );
|
2549
2545
|
}
|
2550
2546
|
|
@@ -4202,13 +4198,13 @@
|
|
4202
4198
|
var jqFilter = $('input', filter)
|
4203
4199
|
.val( previousSearch.sSearch )
|
4204
4200
|
.attr( 'placeholder', language.sSearchPlaceholder )
|
4205
|
-
.
|
4201
|
+
.on(
|
4206
4202
|
'keyup.DT search.DT input.DT paste.DT cut.DT',
|
4207
4203
|
searchDelay ?
|
4208
4204
|
_fnThrottle( searchFn, searchDelay ) :
|
4209
4205
|
searchFn
|
4210
4206
|
)
|
4211
|
-
.
|
4207
|
+
.on( 'keypress.DT', function(e) {
|
4212
4208
|
/* Prevent form submission */
|
4213
4209
|
if ( e.keyCode == 13 ) {
|
4214
4210
|
return false;
|
@@ -4338,16 +4334,19 @@
|
|
4338
4334
|
}
|
4339
4335
|
|
4340
4336
|
var data;
|
4337
|
+
var out = [];
|
4341
4338
|
var display = settings.aiDisplay;
|
4342
4339
|
var rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );
|
4343
4340
|
|
4344
|
-
for ( var i=
|
4341
|
+
for ( var i=0 ; i<display.length ; i++ ) {
|
4345
4342
|
data = settings.aoData[ display[i] ]._aFilterData[ colIdx ];
|
4346
4343
|
|
4347
|
-
if (
|
4348
|
-
|
4344
|
+
if ( rpSearch.test( data ) ) {
|
4345
|
+
out.push( display[i] );
|
4349
4346
|
}
|
4350
4347
|
}
|
4348
|
+
|
4349
|
+
settings.aiDisplay = out;
|
4351
4350
|
}
|
4352
4351
|
|
4353
4352
|
|
@@ -4367,6 +4366,7 @@
|
|
4367
4366
|
var prevSearch = settings.oPreviousSearch.sSearch;
|
4368
4367
|
var displayMaster = settings.aiDisplayMaster;
|
4369
4368
|
var display, invalidated, i;
|
4369
|
+
var filtered = [];
|
4370
4370
|
|
4371
4371
|
// Need to take account of custom filtering functions - always filter
|
4372
4372
|
if ( DataTable.ext.search.length !== 0 ) {
|
@@ -4395,11 +4395,13 @@
|
|
4395
4395
|
// Search the display array
|
4396
4396
|
display = settings.aiDisplay;
|
4397
4397
|
|
4398
|
-
for ( i=
|
4399
|
-
if (
|
4400
|
-
|
4398
|
+
for ( i=0 ; i<display.length ; i++ ) {
|
4399
|
+
if ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {
|
4400
|
+
filtered.push( display[i] );
|
4401
4401
|
}
|
4402
4402
|
}
|
4403
|
+
|
4404
|
+
settings.aiDisplay = filtered;
|
4403
4405
|
}
|
4404
4406
|
}
|
4405
4407
|
|
@@ -4812,13 +4814,13 @@
|
|
4812
4814
|
// reference is broken by the use of outerHTML
|
4813
4815
|
$('select', div)
|
4814
4816
|
.val( settings._iDisplayLength )
|
4815
|
-
.
|
4817
|
+
.on( 'change.DT', function(e) {
|
4816
4818
|
_fnLengthChange( settings, $(this).val() );
|
4817
4819
|
_fnDraw( settings );
|
4818
4820
|
} );
|
4819
4821
|
|
4820
4822
|
// Update node value whenever anything changes the table's length
|
4821
|
-
$(settings.nTable).
|
4823
|
+
$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {
|
4822
4824
|
if ( settings === s ) {
|
4823
4825
|
$('select', div).val( len );
|
4824
4826
|
}
|
@@ -5683,7 +5685,7 @@
|
|
5683
5685
|
|
5684
5686
|
if ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {
|
5685
5687
|
var bindResize = function () {
|
5686
|
-
$(window).
|
5688
|
+
$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {
|
5687
5689
|
_fnAdjustColumnSizing( oSettings );
|
5688
5690
|
} ) );
|
5689
5691
|
};
|
@@ -6294,86 +6296,102 @@
|
|
6294
6296
|
* Attempt to load a saved table state
|
6295
6297
|
* @param {object} oSettings dataTables settings object
|
6296
6298
|
* @param {object} oInit DataTables init object so we can override settings
|
6299
|
+
* @param {function} callback Callback to execute when the state has been loaded
|
6297
6300
|
* @memberof DataTable#oApi
|
6298
6301
|
*/
|
6299
|
-
function _fnLoadState ( settings, oInit )
|
6302
|
+
function _fnLoadState ( settings, oInit, callback )
|
6300
6303
|
{
|
6301
6304
|
var i, ien;
|
6302
6305
|
var columns = settings.aoColumns;
|
6306
|
+
var loaded = function ( s ) {
|
6307
|
+
if ( ! s || ! s.time ) {
|
6308
|
+
callback();
|
6309
|
+
return;
|
6310
|
+
}
|
6303
6311
|
|
6304
|
-
|
6305
|
-
|
6306
|
-
|
6307
|
-
|
6308
|
-
|
6309
|
-
|
6310
|
-
|
6311
|
-
}
|
6312
|
+
// Allow custom and plug-in manipulation functions to alter the saved data set and
|
6313
|
+
// cancelling of loading by returning false
|
6314
|
+
var abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, state] );
|
6315
|
+
if ( $.inArray( false, abStateLoad ) !== -1 ) {
|
6316
|
+
callback();
|
6317
|
+
return;
|
6318
|
+
}
|
6312
6319
|
|
6313
|
-
|
6314
|
-
|
6315
|
-
|
6316
|
-
|
6317
|
-
|
6318
|
-
|
6319
|
-
}
|
6320
|
+
// Reject old data
|
6321
|
+
var duration = settings.iStateDuration;
|
6322
|
+
if ( duration > 0 && s.time < +new Date() - (duration*1000) ) {
|
6323
|
+
callback();
|
6324
|
+
return;
|
6325
|
+
}
|
6320
6326
|
|
6321
|
-
|
6322
|
-
|
6323
|
-
|
6324
|
-
|
6325
|
-
|
6327
|
+
// Number of columns have changed - all bets are off, no restore of settings
|
6328
|
+
if ( s.columns && columns.length !== s.columns.length ) {
|
6329
|
+
callback();
|
6330
|
+
return;
|
6331
|
+
}
|
6326
6332
|
|
6327
|
-
|
6328
|
-
|
6329
|
-
return;
|
6330
|
-
}
|
6333
|
+
// Store the saved state so it might be accessed at any time
|
6334
|
+
settings.oLoadedState = $.extend( true, {}, state );
|
6331
6335
|
|
6332
|
-
|
6333
|
-
|
6336
|
+
// Restore key features - todo - for 1.11 this needs to be done by
|
6337
|
+
// subscribed events
|
6338
|
+
if ( s.start !== undefined ) {
|
6339
|
+
settings._iDisplayStart = s.start;
|
6340
|
+
settings.iInitDisplayStart = s.start;
|
6341
|
+
}
|
6342
|
+
if ( s.length !== undefined ) {
|
6343
|
+
settings._iDisplayLength = s.length;
|
6344
|
+
}
|
6334
6345
|
|
6335
|
-
|
6336
|
-
|
6337
|
-
|
6338
|
-
|
6339
|
-
|
6340
|
-
|
6341
|
-
|
6342
|
-
|
6343
|
-
|
6346
|
+
// Order
|
6347
|
+
if ( s.order !== undefined ) {
|
6348
|
+
settings.aaSorting = [];
|
6349
|
+
$.each( s.order, function ( i, col ) {
|
6350
|
+
settings.aaSorting.push( col[0] >= columns.length ?
|
6351
|
+
[ 0, col[1] ] :
|
6352
|
+
col
|
6353
|
+
);
|
6354
|
+
} );
|
6355
|
+
}
|
6344
6356
|
|
6345
|
-
|
6346
|
-
|
6347
|
-
|
6348
|
-
|
6349
|
-
settings.aaSorting.push( col[0] >= columns.length ?
|
6350
|
-
[ 0, col[1] ] :
|
6351
|
-
col
|
6352
|
-
);
|
6353
|
-
} );
|
6354
|
-
}
|
6357
|
+
// Search
|
6358
|
+
if ( s.search !== undefined ) {
|
6359
|
+
$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );
|
6360
|
+
}
|
6355
6361
|
|
6356
|
-
|
6357
|
-
|
6358
|
-
|
6359
|
-
|
6362
|
+
// Columns
|
6363
|
+
//
|
6364
|
+
if ( s.columns ) {
|
6365
|
+
for ( i=0, ien=s.columns.length ; i<ien ; i++ ) {
|
6366
|
+
var col = s.columns[i];
|
6360
6367
|
|
6361
|
-
|
6362
|
-
|
6363
|
-
|
6368
|
+
// Visibility
|
6369
|
+
if ( col.visible !== undefined ) {
|
6370
|
+
columns[i].bVisible = col.visible;
|
6371
|
+
}
|
6364
6372
|
|
6365
|
-
|
6366
|
-
|
6367
|
-
|
6373
|
+
// Search
|
6374
|
+
if ( col.search !== undefined ) {
|
6375
|
+
$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );
|
6376
|
+
}
|
6377
|
+
}
|
6368
6378
|
}
|
6369
6379
|
|
6370
|
-
|
6371
|
-
|
6372
|
-
|
6373
|
-
|
6380
|
+
_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, state] );
|
6381
|
+
callback();
|
6382
|
+
}
|
6383
|
+
|
6384
|
+
if ( ! settings.oFeatures.bStateSave ) {
|
6385
|
+
callback();
|
6386
|
+
return;
|
6374
6387
|
}
|
6375
6388
|
|
6376
|
-
|
6389
|
+
var state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );
|
6390
|
+
|
6391
|
+
if ( state !== undefined ) {
|
6392
|
+
loaded( state );
|
6393
|
+
}
|
6394
|
+
// otherwise, wait for the loaded callback to be executed
|
6377
6395
|
}
|
6378
6396
|
|
6379
6397
|
|
@@ -6526,17 +6544,17 @@
|
|
6526
6544
|
function _fnBindAction( n, oData, fn )
|
6527
6545
|
{
|
6528
6546
|
$(n)
|
6529
|
-
.
|
6547
|
+
.on( 'click.DT', oData, function (e) {
|
6530
6548
|
n.blur(); // Remove focus outline for mouse users
|
6531
6549
|
fn(e);
|
6532
6550
|
} )
|
6533
|
-
.
|
6551
|
+
.on( 'keypress.DT', oData, function (e){
|
6534
6552
|
if ( e.which === 13 ) {
|
6535
6553
|
e.preventDefault();
|
6536
6554
|
fn(e);
|
6537
6555
|
}
|
6538
6556
|
} )
|
6539
|
-
.
|
6557
|
+
.on( 'selectstart.DT', function () {
|
6540
6558
|
/* Take the brutal approach to cancelling text selection */
|
6541
6559
|
return false;
|
6542
6560
|
} );
|
@@ -7664,7 +7682,8 @@
|
|
7664
7682
|
}
|
7665
7683
|
|
7666
7684
|
for ( i=0, ien=selector.length ; i<ien ; i++ ) {
|
7667
|
-
|
7685
|
+
// Only split on simple strings - complex expressions will be jQuery selectors
|
7686
|
+
a = selector[i] && selector[i].split && ! selector[i].match(/[\[\(:]/) ?
|
7668
7687
|
selector[i].split(',') :
|
7669
7688
|
[ selector[i] ];
|
7670
7689
|
|
@@ -7804,6 +7823,7 @@
|
|
7804
7823
|
|
7805
7824
|
var __row_selector = function ( settings, selector, opts )
|
7806
7825
|
{
|
7826
|
+
var rows;
|
7807
7827
|
var run = function ( sel ) {
|
7808
7828
|
var selInt = _intVal( sel );
|
7809
7829
|
var i, ien;
|
@@ -7815,13 +7835,15 @@
|
|
7815
7835
|
return [ selInt ];
|
7816
7836
|
}
|
7817
7837
|
|
7818
|
-
|
7838
|
+
if ( ! rows ) {
|
7839
|
+
rows = _selector_row_indexes( settings, opts );
|
7840
|
+
}
|
7819
7841
|
|
7820
7842
|
if ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {
|
7821
7843
|
// Selector - integer
|
7822
7844
|
return [ selInt ];
|
7823
7845
|
}
|
7824
|
-
else if (
|
7846
|
+
else if ( sel === null || sel === undefined || sel === '' ) {
|
7825
7847
|
// Selector - none
|
7826
7848
|
return rows;
|
7827
7849
|
}
|
@@ -8134,7 +8156,7 @@
|
|
8134
8156
|
addRow( data, klass );
|
8135
8157
|
|
8136
8158
|
if ( row._details ) {
|
8137
|
-
row._details.
|
8159
|
+
row._details.detach();
|
8138
8160
|
}
|
8139
8161
|
|
8140
8162
|
row._details = $(rows);
|
@@ -8335,7 +8357,7 @@
|
|
8335
8357
|
// can be an array of these items, comma separated list, or an array of comma
|
8336
8358
|
// separated lists
|
8337
8359
|
|
8338
|
-
var __re_column_selector = /^(
|
8360
|
+
var __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;
|
8339
8361
|
|
8340
8362
|
|
8341
8363
|
// r1 and r2 are redundant - but it means that the parameters match for the
|
@@ -9082,6 +9104,10 @@
|
|
9082
9104
|
var t = $(table).get(0);
|
9083
9105
|
var is = false;
|
9084
9106
|
|
9107
|
+
if ( table instanceof DataTable.Api ) {
|
9108
|
+
return true;
|
9109
|
+
}
|
9110
|
+
|
9085
9111
|
$.each( DataTable.settings, function (i, o) {
|
9086
9112
|
var head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;
|
9087
9113
|
var foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;
|
@@ -9170,9 +9196,11 @@
|
|
9170
9196
|
var args = Array.prototype.slice.call(arguments);
|
9171
9197
|
|
9172
9198
|
// Add the `dt` namespace automatically if it isn't already present
|
9173
|
-
|
9174
|
-
|
9175
|
-
|
9199
|
+
args[0] = $.map( args[0].split( /\s/ ), function ( e ) {
|
9200
|
+
return ! e.match(/\.dt\b/) ?
|
9201
|
+
e+'.dt' :
|
9202
|
+
e;
|
9203
|
+
} ).join( ' ' );
|
9176
9204
|
|
9177
9205
|
var inst = $( this.tables().nodes() );
|
9178
9206
|
inst[key].apply( inst, args );
|
@@ -9237,8 +9265,8 @@
|
|
9237
9265
|
// Blitz all `DT` namespaced events (these are internal events, the
|
9238
9266
|
// lowercase, `dt` events are user subscribed and they are responsible
|
9239
9267
|
// for removing them
|
9240
|
-
jqWrapper.
|
9241
|
-
$(window).
|
9268
|
+
jqWrapper.off('.DT').find(':not(tbody *)').off('.DT');
|
9269
|
+
$(window).off('.DT-'+settings.sInstance);
|
9242
9270
|
|
9243
9271
|
// When scrolling we had to break the table up - restore it
|
9244
9272
|
if ( table != thead.parentNode ) {
|
@@ -9368,7 +9396,7 @@
|
|
9368
9396
|
* @type string
|
9369
9397
|
* @default Version number
|
9370
9398
|
*/
|
9371
|
-
DataTable.version = "1.10.
|
9399
|
+
DataTable.version = "1.10.13";
|
9372
9400
|
|
9373
9401
|
/**
|
9374
9402
|
* Private data store, containing all of the settings objects that are
|
@@ -10876,6 +10904,8 @@
|
|
10876
10904
|
* @type function
|
10877
10905
|
* @member
|
10878
10906
|
* @param {object} settings DataTables settings object
|
10907
|
+
* @param {object} callback Callback that can be executed when done. It
|
10908
|
+
* should be passed the loaded state object.
|
10879
10909
|
* @return {object} The DataTables state object to be loaded
|
10880
10910
|
*
|
10881
10911
|
* @dtopt Callbacks
|
@@ -10885,21 +10915,14 @@
|
|
10885
10915
|
* $(document).ready( function() {
|
10886
10916
|
* $('#example').dataTable( {
|
10887
10917
|
* "stateSave": true,
|
10888
|
-
* "stateLoadCallback": function (settings) {
|
10889
|
-
* var o;
|
10890
|
-
*
|
10891
|
-
* // Send an Ajax request to the server to get the data. Note that
|
10892
|
-
* // this is a synchronous request.
|
10918
|
+
* "stateLoadCallback": function (settings, callback) {
|
10893
10919
|
* $.ajax( {
|
10894
10920
|
* "url": "/state_load",
|
10895
|
-
* "async": false,
|
10896
10921
|
* "dataType": "json",
|
10897
10922
|
* "success": function (json) {
|
10898
|
-
*
|
10923
|
+
* callback( json );
|
10899
10924
|
* }
|
10900
10925
|
* } );
|
10901
|
-
*
|
10902
|
-
* return o;
|
10903
10926
|
* }
|
10904
10927
|
* } );
|
10905
10928
|
* } );
|
@@ -11838,14 +11861,15 @@
|
|
11838
11861
|
|
11839
11862
|
|
11840
11863
|
/**
|
11841
|
-
* DataTables features
|
11864
|
+
* DataTables features six different built-in options for the buttons to
|
11842
11865
|
* display for pagination control:
|
11843
11866
|
*
|
11867
|
+
* * `numbers` - Page number buttons only
|
11844
11868
|
* * `simple` - 'Previous' and 'Next' buttons only
|
11845
11869
|
* * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers
|
11846
11870
|
* * `full` - 'First', 'Previous', 'Next' and 'Last' buttons
|
11847
|
-
* * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus
|
11848
|
-
*
|
11871
|
+
* * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers
|
11872
|
+
* * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers
|
11849
11873
|
*
|
11850
11874
|
* Further methods can be added using {@link DataTable.ext.oPagination}.
|
11851
11875
|
* @type string
|
@@ -14494,6 +14518,10 @@
|
|
14494
14518
|
full_numbers: function ( page, pages ) {
|
14495
14519
|
return [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];
|
14496
14520
|
},
|
14521
|
+
|
14522
|
+
first_last_numbers: function (page, pages) {
|
14523
|
+
return ['first', _numbers(page, pages), 'last'];
|
14524
|
+
},
|
14497
14525
|
|
14498
14526
|
// For testing and plug-ins to use
|
14499
14527
|
_numbers: _numbers,
|
@@ -14605,7 +14633,7 @@
|
|
14605
14633
|
|
14606
14634
|
attach( $(host).empty(), buttons );
|
14607
14635
|
|
14608
|
-
if ( activeEl ) {
|
14636
|
+
if ( activeEl !== undefined ) {
|
14609
14637
|
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
|
14610
14638
|
}
|
14611
14639
|
}
|
@@ -14628,10 +14656,10 @@
|
|
14628
14656
|
// Dates (only those recognised by the browser's Date.parse)
|
14629
14657
|
function ( d, settings )
|
14630
14658
|
{
|
14631
|
-
// V8
|
14632
|
-
//
|
14633
|
-
//
|
14634
|
-
if ( d && !(d instanceof Date) &&
|
14659
|
+
// V8 tries _very_ hard to make a string passed into `Date.parse()`
|
14660
|
+
// valid, so we need to use a regex to restrict date formats. Use a
|
14661
|
+
// plug-in for anything other than ISO8601 style strings
|
14662
|
+
if ( d && !(d instanceof Date) && ! _re_date.test(d) ) {
|
14635
14663
|
return null;
|
14636
14664
|
}
|
14637
14665
|
var parsed = Date.parse(d);
|
@@ -14768,7 +14796,7 @@
|
|
14768
14796
|
$.extend( _ext.type.order, {
|
14769
14797
|
// Dates
|
14770
14798
|
"date-pre": function ( d ) {
|
14771
|
-
return Date.parse( d ) ||
|
14799
|
+
return Date.parse( d ) || -Infinity;
|
14772
14800
|
},
|
14773
14801
|
|
14774
14802
|
// html
|
@@ -14939,6 +14967,7 @@
|
|
14939
14967
|
return __htmlEscapeEntities( d );
|
14940
14968
|
}
|
14941
14969
|
|
14970
|
+
flo = flo.toFixed( precision );
|
14942
14971
|
d = Math.abs( flo );
|
14943
14972
|
|
14944
14973
|
var intPart = parseInt( d, 10 );
|