jquery-datatables-rails 3.2.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/dataTables/bootstrap/2/jquery.dataTables.bootstrap.js +110 -96
  3. data/app/assets/javascripts/dataTables/bootstrap/3/jquery.dataTables.bootstrap.js +6 -6
  4. data/app/assets/javascripts/dataTables/extras/dataTables.colReorder.js +28 -27
  5. data/app/assets/javascripts/dataTables/extras/dataTables.colVis.js +27 -11
  6. data/app/assets/javascripts/dataTables/extras/dataTables.fixedColumns.js +53 -29
  7. data/app/assets/javascripts/dataTables/extras/dataTables.responsive.js +110 -47
  8. data/app/assets/javascripts/dataTables/extras/dataTables.tableTools.js +90 -25
  9. data/app/assets/javascripts/dataTables/jquery.dataTables.foundation.js +133 -139
  10. data/app/assets/javascripts/dataTables/jquery.dataTables.js +483 -375
  11. data/app/assets/javascripts/dataTables/jquery.dataTables.sorting.numbersHtml.js +37 -14
  12. data/app/assets/javascripts/dataTables/jquery.dataTables.typeDetection.numbersHtml.js +49 -33
  13. data/app/assets/media/dataTables/extras/swf/copy_csv_xls.swf +0 -0
  14. data/app/assets/media/dataTables/extras/swf/copy_csv_xls_pdf.swf +0 -0
  15. data/app/assets/stylesheets/dataTables/bootstrap/2/jquery.dataTables.bootstrap.scss +34 -9
  16. data/app/assets/stylesheets/dataTables/bootstrap/3/jquery.dataTables.bootstrap.scss +122 -31
  17. data/app/assets/stylesheets/dataTables/extras/dataTables.colvis.jqueryui.scss +18 -0
  18. data/app/assets/stylesheets/dataTables/extras/dataTables.fixedColumns.scss +1 -0
  19. data/app/assets/stylesheets/dataTables/extras/dataTables.responsive.scss +29 -12
  20. data/app/assets/stylesheets/dataTables/extras/dataTables.tableTools.scss +43 -19
  21. data/app/assets/stylesheets/dataTables/jquery.dataTables.foundation.scss +15 -4
  22. data/app/assets/stylesheets/dataTables/jquery.dataTables.scss +22 -11
  23. data/lib/jquery/datatables/rails/version.rb +1 -1
  24. metadata +18 -18
@@ -1,11 +1,11 @@
1
- /*! FixedColumns 3.0.2
1
+ /*! FixedColumns 3.0.4
2
2
  * ©2010-2014 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.0.2
8
+ * @version 3.0.4
9
9
  * @file dataTables.fixedColumns.js
10
10
  * @author SpryMedia Ltd (www.sprymedia.co.uk)
11
11
  * @contact www.sprymedia.co.uk/contact
@@ -62,7 +62,7 @@ var FixedColumns = function ( dt, init ) {
62
62
  var that = this;
63
63
 
64
64
  /* Sanity check - you just know it will happen */
65
- if ( ! this instanceof FixedColumns )
65
+ if ( ! ( this instanceof FixedColumns ) )
66
66
  {
67
67
  alert( "FixedColumns warning: FixedColumns must be initialised with the 'new' keyword." );
68
68
  return;
@@ -75,8 +75,10 @@ var FixedColumns = function ( dt, init ) {
75
75
 
76
76
  // Use the DataTables Hungarian notation mapping method, if it exists to
77
77
  // provide forwards compatibility for camel case variables
78
- if ( $.fn.dataTable.camelToHungarian ) {
79
- $.fn.dataTable.camelToHungarian( FixedColumns.defaults, init );
78
+ var camelToHungarian = $.fn.dataTable.camelToHungarian;
79
+ if ( camelToHungarian ) {
80
+ camelToHungarian( FixedColumns.defaults, FixedColumns.defaults, true );
81
+ camelToHungarian( FixedColumns.defaults, init );
80
82
  }
81
83
 
82
84
  // v1.10 allows the settings object to be got form a number of sources
@@ -746,6 +748,18 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
746
748
  iLeftWidth = this.s.iLeftWidth,
747
749
  iRightWidth = this.s.iRightWidth,
748
750
  iRight;
751
+ var scrollbarAdjust = function ( node, width ) {
752
+ if ( ! oOverflow.bar ) {
753
+ // If there is no scrollbar (Macs) we need to hide the auto scrollbar
754
+ node.style.width = (width+20)+"px";
755
+ node.style.paddingRight = "20px";
756
+ node.style.boxSizing = "border-box";
757
+ }
758
+ else {
759
+ // Otherwise just overflow by the scrollbar
760
+ node.style.width = (width+oOverflow.bar)+"px";
761
+ }
762
+ };
749
763
 
750
764
  // When x scrolling - don't paint the fixed columns over the x scrollbar
751
765
  if ( oOverflow.x )
@@ -764,7 +778,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
764
778
  oGrid.left.foot.style.top = (oOverflow.x ? oOverflow.bar : 0)+"px"; // shift footer for scrollbar
765
779
  }
766
780
 
767
- oGrid.left.liner.style.width = (iLeftWidth+oOverflow.bar)+"px";
781
+ scrollbarAdjust( oGrid.left.liner, iLeftWidth );
768
782
  oGrid.left.liner.style.height = iBodyHeight+"px";
769
783
  }
770
784
 
@@ -784,7 +798,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
784
798
  oGrid.right.foot.style.top = (oOverflow.x ? oOverflow.bar : 0)+"px";
785
799
  }
786
800
 
787
- oGrid.right.liner.style.width = (iRightWidth+oOverflow.bar)+"px";
801
+ scrollbarAdjust( oGrid.right.liner, iRightWidth );
788
802
  oGrid.right.liner.style.height = iBodyHeight+"px";
789
803
 
790
804
  oGrid.right.headBlock.style.display = oOverflow.y ? 'block' : 'none';
@@ -970,7 +984,8 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
970
984
  {
971
985
  var that = this,
972
986
  i, iLen, j, jLen, jq, nTarget, iColumn, nClone, iIndex, aoCloneLayout,
973
- jqCloneThead, aoFixedHeader;
987
+ jqCloneThead, aoFixedHeader,
988
+ dt = this.s.dt;
974
989
 
975
990
  /*
976
991
  * Header
@@ -987,7 +1002,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
987
1002
  oGrid.head.appendChild( oClone.header );
988
1003
 
989
1004
  /* Copy the DataTables layout cache for the header for our floating column */
990
- aoCloneLayout = this._fnCopyLayout( this.s.dt.aoHeader, aiColumns );
1005
+ aoCloneLayout = this._fnCopyLayout( dt.aoHeader, aiColumns );
991
1006
  jqCloneThead = $('>thead', oClone.header);
992
1007
  jqCloneThead.empty();
993
1008
 
@@ -1000,7 +1015,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1000
1015
  /* Use the handy _fnDrawHead function in DataTables to do the rowspan/colspan
1001
1016
  * calculations for us
1002
1017
  */
1003
- this.s.dt.oApi._fnDrawHead( this.s.dt, aoCloneLayout, true );
1018
+ dt.oApi._fnDrawHead( dt, aoCloneLayout, true );
1004
1019
  }
1005
1020
  else
1006
1021
  {
@@ -1009,10 +1024,10 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1009
1024
  * cloned cells, just copy the classes across. To get the matching layout for the
1010
1025
  * fixed component, we use the DataTables _fnDetectHeader method, allowing 1:1 mapping
1011
1026
  */
1012
- aoCloneLayout = this._fnCopyLayout( this.s.dt.aoHeader, aiColumns );
1027
+ aoCloneLayout = this._fnCopyLayout( dt.aoHeader, aiColumns );
1013
1028
  aoFixedHeader=[];
1014
1029
 
1015
- this.s.dt.oApi._fnDetectHeader( aoFixedHeader, $('>thead', oClone.header)[0] );
1030
+ dt.oApi._fnDetectHeader( aoFixedHeader, $('>thead', oClone.header)[0] );
1016
1031
 
1017
1032
  for ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ )
1018
1033
  {
@@ -1046,8 +1061,8 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1046
1061
 
1047
1062
  oClone.body = $(this.dom.body).clone(true)[0];
1048
1063
  oClone.body.className += " DTFC_Cloned";
1049
- oClone.body.style.paddingBottom = this.s.dt.oScroll.iBarWidth+"px";
1050
- oClone.body.style.marginBottom = (this.s.dt.oScroll.iBarWidth*2)+"px"; /* For IE */
1064
+ oClone.body.style.paddingBottom = dt.oScroll.iBarWidth+"px";
1065
+ oClone.body.style.marginBottom = (dt.oScroll.iBarWidth*2)+"px"; /* For IE */
1051
1066
  if ( oClone.body.getAttribute('id') !== null )
1052
1067
  {
1053
1068
  oClone.body.removeAttribute('id');
@@ -1058,7 +1073,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1058
1073
 
1059
1074
  var nBody = $('tbody', oClone.body)[0];
1060
1075
  $(nBody).empty();
1061
- if ( this.s.dt.aiDisplay.length > 0 )
1076
+ if ( dt.aiDisplay.length > 0 )
1062
1077
  {
1063
1078
  /* Copy the DataTables' header elements to force the column width in exactly the
1064
1079
  * same way that DataTables does it - have the header element, apply the width and
@@ -1069,7 +1084,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1069
1084
  {
1070
1085
  iColumn = aiColumns[iIndex];
1071
1086
 
1072
- nClone = $(this.s.dt.aoColumns[iColumn].nTh).clone(true)[0];
1087
+ nClone = $(dt.aoColumns[iColumn].nTh).clone(true)[0];
1073
1088
  nClone.innerHTML = "";
1074
1089
 
1075
1090
  var oStyle = nClone.style;
@@ -1089,9 +1104,10 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1089
1104
  n.removeAttribute('id');
1090
1105
  var i = that.s.dt.oFeatures.bServerSide===false ?
1091
1106
  that.s.dt.aiDisplay[ that.s.dt._iDisplayStart+z ] : z;
1107
+ var aTds = that.s.dt.aoData[ i ].anCells || $(this).children('td, th');
1108
+
1092
1109
  for ( iIndex=0 ; iIndex<aiColumns.length ; iIndex++ )
1093
1110
  {
1094
- var aTds = that.s.dt.aoData[i].anCells || that.s.dt.oApi._fnGetTdNodes( that.s.dt, i );
1095
1111
  iColumn = aiColumns[iIndex];
1096
1112
 
1097
1113
  if ( aTds.length > 0 )
@@ -1117,13 +1133,21 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1117
1133
  oClone.body.style.margin = "0";
1118
1134
  oClone.body.style.padding = "0";
1119
1135
 
1120
- if ( bAll )
1136
+ // Interop with Scroller - need to use a height forcing element in the
1137
+ // scrolling area in the same way that Scroller does in the body scroll.
1138
+ if ( dt.oScroller !== undefined )
1121
1139
  {
1122
- if ( typeof this.s.dt.oScroller != 'undefined' )
1123
- {
1124
- oGrid.liner.appendChild( this.s.dt.oScroller.dom.force.cloneNode(true) );
1140
+ var scrollerForcer = dt.oScroller.dom.force;
1141
+
1142
+ if ( ! oGrid.forcer ) {
1143
+ oGrid.forcer = scrollerForcer.cloneNode( true );
1144
+ oGrid.liner.appendChild( oGrid.forcer );
1145
+ }
1146
+ else {
1147
+ oGrid.forcer.style.height = scrollerForcer.style.height;
1125
1148
  }
1126
1149
  }
1150
+
1127
1151
  oGrid.liner.appendChild( oClone.body );
1128
1152
 
1129
1153
  this._fnEqualiseHeights( 'tbody', that.dom.body, oClone.body );
@@ -1131,7 +1155,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1131
1155
  /*
1132
1156
  * Footer
1133
1157
  */
1134
- if ( this.s.dt.nTFoot !== null )
1158
+ if ( dt.nTFoot !== null )
1135
1159
  {
1136
1160
  if ( bAll )
1137
1161
  {
@@ -1145,7 +1169,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1145
1169
  oGrid.foot.appendChild( oClone.footer );
1146
1170
 
1147
1171
  /* Copy the footer just like we do for the header */
1148
- aoCloneLayout = this._fnCopyLayout( this.s.dt.aoFooter, aiColumns );
1172
+ aoCloneLayout = this._fnCopyLayout( dt.aoFooter, aiColumns );
1149
1173
  var jqCloneTfoot = $('>tfoot', oClone.footer);
1150
1174
  jqCloneTfoot.empty();
1151
1175
 
@@ -1153,14 +1177,14 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1153
1177
  {
1154
1178
  jqCloneTfoot[0].appendChild( aoCloneLayout[i].nTr );
1155
1179
  }
1156
- this.s.dt.oApi._fnDrawHead( this.s.dt, aoCloneLayout, true );
1180
+ dt.oApi._fnDrawHead( dt, aoCloneLayout, true );
1157
1181
  }
1158
1182
  else
1159
1183
  {
1160
- aoCloneLayout = this._fnCopyLayout( this.s.dt.aoFooter, aiColumns );
1184
+ aoCloneLayout = this._fnCopyLayout( dt.aoFooter, aiColumns );
1161
1185
  var aoCurrFooter=[];
1162
1186
 
1163
- this.s.dt.oApi._fnDetectHeader( aoCurrFooter, $('>tfoot', oClone.footer)[0] );
1187
+ dt.oApi._fnDetectHeader( aoCurrFooter, $('>tfoot', oClone.footer)[0] );
1164
1188
 
1165
1189
  for ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ )
1166
1190
  {
@@ -1174,7 +1198,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1174
1198
  }
1175
1199
 
1176
1200
  /* Equalise the column widths between the header footer and body - body get's priority */
1177
- var anUnique = this.s.dt.oApi._fnGetUniqueThs( this.s.dt, $('>thead', oClone.header)[0] );
1201
+ var anUnique = dt.oApi._fnGetUniqueThs( dt, $('>thead', oClone.header)[0] );
1178
1202
  $(anUnique).each( function (i) {
1179
1203
  iColumn = aiColumns[i];
1180
1204
  this.style.width = that.s.aiInnerWidths[iColumn]+"px";
@@ -1182,7 +1206,7 @@ FixedColumns.prototype = /** @lends FixedColumns.prototype */{
1182
1206
 
1183
1207
  if ( that.s.dt.nTFoot !== null )
1184
1208
  {
1185
- anUnique = this.s.dt.oApi._fnGetUniqueThs( this.s.dt, $('>tfoot', oClone.footer)[0] );
1209
+ anUnique = dt.oApi._fnGetUniqueThs( dt, $('>tfoot', oClone.footer)[0] );
1186
1210
  $(anUnique).each( function (i) {
1187
1211
  iColumn = aiColumns[i];
1188
1212
  this.style.width = that.s.aiInnerWidths[iColumn]+"px";
@@ -1352,7 +1376,7 @@ FixedColumns.defaults = /** @lends FixedColumns.defaults */{
1352
1376
  * @default See code
1353
1377
  * @static
1354
1378
  */
1355
- FixedColumns.version = "3.0.2";
1379
+ FixedColumns.version = "3.0.4";
1356
1380
 
1357
1381
 
1358
1382
 
@@ -1,15 +1,15 @@
1
- /*! Responsive 1.0.2
2
- * 2014 SpryMedia Ltd - datatables.net/license
1
+ /*! Responsive 1.0.5
2
+ * 2014-2015 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 1.0.2
8
+ * @version 1.0.5
9
9
  * @file dataTables.responsive.js
10
10
  * @author SpryMedia Ltd (www.sprymedia.co.uk)
11
11
  * @contact www.sprymedia.co.uk/contact
12
- * @copyright Copyright 2014 SpryMedia Ltd.
12
+ * @copyright Copyright 2014-2015 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
@@ -122,7 +122,7 @@ Responsive.prototype = {
122
122
 
123
123
  // Destroy event handler
124
124
  dt.on( 'destroy.dtr', function () {
125
- $(window).off( 'resize.dtr orientationchange.dtr' );
125
+ $(window).off( 'resize.dtr orientationchange.dtr draw.dtr' );
126
126
  } );
127
127
 
128
128
  // Reorder the breakpoints array here in case they have been added out
@@ -133,16 +133,13 @@ Responsive.prototype = {
133
133
  } );
134
134
 
135
135
  // Determine which columns are already hidden, and should therefore
136
- // remain hidden. TODO - should this be done? See thread 22677
136
+ // remain hidden. todo - should this be done? See thread 22677
137
137
  //
138
138
  // this.s.alwaysHidden = dt.columns(':hidden').indexes();
139
139
 
140
140
  this._classLogic();
141
141
  this._resizeAuto();
142
142
 
143
- // First pass - draw the table for the current viewport size
144
- this._resize();
145
-
146
143
  // Details handler
147
144
  var details = this.c.details;
148
145
  if ( details.type ) {
@@ -153,8 +150,24 @@ Responsive.prototype = {
153
150
  that._detailsVis();
154
151
  } );
155
152
 
153
+ // Redraw the details box on each draw. This is used until
154
+ // DataTables implements a native `updated` event for rows
155
+ dt.on( 'draw.dtr', function () {
156
+ dt.rows( {page: 'current'} ).iterator( 'row', function ( settings, idx ) {
157
+ var row = dt.row( idx );
158
+
159
+ if ( row.child.isShown() ) {
160
+ var info = that.c.details.renderer( dt, idx );
161
+ row.child( info, 'child' ).show();
162
+ }
163
+ } );
164
+ } );
165
+
156
166
  $(dt.table().node()).addClass( 'dtr-'+details.type );
157
167
  }
168
+
169
+ // First pass - draw the table for the current viewport size
170
+ this._resize();
158
171
  },
159
172
 
160
173
 
@@ -200,25 +213,43 @@ Responsive.prototype = {
200
213
  }
201
214
  }
202
215
 
203
- // Second pass, use up any remaining width for other columns
204
- var widthAvailable = dt.table().container().offsetWidth;
216
+ // Second pass, use up any remaining width for other columns. For
217
+ // scrolling tables we need to subtract the width of the scrollbar. It
218
+ // may not be requires which makes this sub-optimal, but it would
219
+ // require another full redraw to make complete use of those extra few
220
+ // pixels
221
+ var scrolling = dt.settings()[0].oScroll;
222
+ var bar = scrolling.sY || scrolling.sX ? scrolling.iBarWidth : 0;
223
+ var widthAvailable = dt.table().container().offsetWidth - bar;
205
224
  var usedWidth = widthAvailable - requiredWidth;
206
225
 
226
+ // Control column needs to always be included. This makes it sub-
227
+ // optimal in terms of using the available with, but to stop layout
228
+ // thrashing or overflow. Also we need to account for the control column
229
+ // width first so we know how much width is available for the other
230
+ // columns, since the control column might not be the first one shown
207
231
  for ( i=0, ien=display.length ; i<ien ; i++ ) {
208
- // Control column needs to always be included. This makes it sub-
209
- // optimal in terms of using the available with, but to stop layout
210
- // thrashing or overflow
211
232
  if ( columns[i].control ) {
212
233
  usedWidth -= columns[i].minWidth;
213
234
  }
214
- else if ( display[i] === '-' ) {
215
- // Otherwise, remove the width
216
- display[i] = usedWidth - columns[i].minWidth < 0 ?
217
- false :
218
- true;
219
-
220
- // Continue counting down the width, so a smaller column to the
221
- // left won't be shown
235
+ }
236
+
237
+ // Allow columns to be shown (counting from the left) until we run out
238
+ // of room
239
+ var empty = false;
240
+ for ( i=0, ien=display.length ; i<ien ; i++ ) {
241
+ if ( display[i] === '-' && ! columns[i].control ) {
242
+ // Once we've found a column that won't fit we don't let any
243
+ // others display either, or columns might disappear in the
244
+ // middle of the table
245
+ if ( empty || usedWidth - columns[i].minWidth < 0 ) {
246
+ empty = true;
247
+ display[i] = false;
248
+ }
249
+ else {
250
+ display[i] = true;
251
+ }
252
+
222
253
  usedWidth -= columns[i].minWidth;
223
254
  }
224
255
  }
@@ -476,11 +507,8 @@ Responsive.prototype = {
476
507
  }
477
508
 
478
509
  if ( haveHidden ) {
479
- // Got hidden columns
480
- $( dt.table().node() ).addClass('collapsed');
481
-
482
510
  // Show all existing child rows
483
- dt.rows().eq(0).each( function (idx) {
511
+ dt.rows( { page: 'current' } ).eq(0).each( function (idx) {
484
512
  var row = dt.row( idx );
485
513
 
486
514
  if ( row.child() ) {
@@ -497,11 +525,8 @@ Responsive.prototype = {
497
525
  } );
498
526
  }
499
527
  else {
500
- // No hidden columns
501
- $( dt.table().node() ).removeClass('collapsed');
502
-
503
528
  // Hide all existing child rows
504
- dt.rows().eq(0).each( function (idx) {
529
+ dt.rows( { page: 'current' } ).eq(0).each( function (idx) {
505
530
  dt.row( idx ).child.hide();
506
531
  } );
507
532
  }
@@ -538,9 +563,11 @@ Responsive.prototype = {
538
563
  var width = $(window).width();
539
564
  var breakpoints = this.c.breakpoints;
540
565
  var breakpoint = breakpoints[0].name;
566
+ var columns = this.s.columns;
567
+ var i, ien;
541
568
 
542
569
  // Determine what breakpoint we are currently at
543
- for ( var i=breakpoints.length-1 ; i>=0 ; i-- ) {
570
+ for ( i=breakpoints.length-1 ; i>=0 ; i-- ) {
544
571
  if ( width <= breakpoints[i].width ) {
545
572
  breakpoint = breakpoints[i].name;
546
573
  break;
@@ -548,10 +575,23 @@ Responsive.prototype = {
548
575
  }
549
576
 
550
577
  // Show the columns for that break point
551
- var columns = this._columnsVisiblity( breakpoint );
578
+ var columnsVis = this._columnsVisiblity( breakpoint );
579
+
580
+ // Set the class before the column visibility is changed so event
581
+ // listeners know what the state is. Need to determine if there are
582
+ // any columns that are not visible but can be shown
583
+ var collapsedClass = false;
584
+ for ( i=0, ien=columns.length ; i<ien ; i++ ) {
585
+ if ( columnsVis[i] === false && ! columns[i].never ) {
586
+ collapsedClass = true;
587
+ break;
588
+ }
589
+ }
590
+
591
+ $( dt.table().node() ).toggleClass('collapsed', collapsedClass );
552
592
 
553
593
  dt.columns().eq(0).each( function ( colIdx, i ) {
554
- dt.column( colIdx ).visible( columns[i] );
594
+ dt.column( colIdx ).visible( columnsVis[i] );
555
595
  } );
556
596
  },
557
597
 
@@ -587,6 +627,8 @@ Responsive.prototype = {
587
627
  var clonedHeader = $( dt.table().header().cloneNode( false ) ).appendTo( clonedTable );
588
628
  var clonedBody = $( dt.table().body().cloneNode( false ) ).appendTo( clonedTable );
589
629
 
630
+ $( dt.table().footer() ).clone( false ).appendTo( clonedTable );
631
+
590
632
  // This is a bit slow, but we need to get a clone of each row that
591
633
  // includes all columns. As such, try to do this as little as possible.
592
634
  dt.rows( { page: 'current' } ).indexes().flatten().each( function ( idx ) {
@@ -599,8 +641,12 @@ Responsive.prototype = {
599
641
  $(clone).appendTo( clonedBody );
600
642
  } );
601
643
 
602
- var cells = dt.columns().header().to$().clone( false ).wrapAll('tr').appendTo( clonedHeader );
603
- var inserted = $('<div/>')
644
+ var cells = dt.columns().header().to$().clone( false );
645
+ $('<tr/>')
646
+ .append( cells )
647
+ .appendTo( clonedHeader );
648
+
649
+ var inserted = $('<div/>')
604
650
  .css( {
605
651
  width: 1,
606
652
  height: 1,
@@ -699,10 +745,14 @@ Responsive.defaults = {
699
745
  var cellData = dtPrivate.oApi._fnGetCellData(
700
746
  dtPrivate, idx.row, idx.column, 'display'
701
747
  );
748
+ var title = header.text();
749
+ if ( title ) {
750
+ title = title + ':';
751
+ }
702
752
 
703
753
  return '<li data-dtr-index="'+idx.column+'">'+
704
754
  '<span class="dtr-title">'+
705
- header.text()+':'+
755
+ title+
706
756
  '</span> '+
707
757
  '<span class="dtr-data">'+
708
758
  cellData+
@@ -732,15 +782,6 @@ Api.register( 'responsive()', function () {
732
782
  return this;
733
783
  } );
734
784
 
735
- Api.register( 'responsive.recalc()', function () {
736
- this.iterator( 'table', function ( ctx ) {
737
- if ( ctx._responsive ) {
738
- ctx._responsive._resizeAuto();
739
- ctx._responsive._resize();
740
- }
741
- } );
742
- } );
743
-
744
785
  Api.register( 'responsive.index()', function ( li ) {
745
786
  li = $(li);
746
787
 
@@ -750,6 +791,23 @@ Api.register( 'responsive.index()', function ( li ) {
750
791
  };
751
792
  } );
752
793
 
794
+ Api.register( 'responsive.rebuild()', function () {
795
+ return this.iterator( 'table', function ( ctx ) {
796
+ if ( ctx._responsive ) {
797
+ ctx._responsive._classLogic();
798
+ }
799
+ } );
800
+ } );
801
+
802
+ Api.register( 'responsive.recalc()', function () {
803
+ return this.iterator( 'table', function ( ctx ) {
804
+ if ( ctx._responsive ) {
805
+ ctx._responsive._resizeAuto();
806
+ ctx._responsive._resize();
807
+ }
808
+ } );
809
+ } );
810
+
753
811
 
754
812
  /**
755
813
  * Version information
@@ -757,7 +815,7 @@ Api.register( 'responsive.index()', function ( li ) {
757
815
  * @name Responsive.version
758
816
  * @static
759
817
  */
760
- Responsive.version = '1.0.2';
818
+ Responsive.version = '1.0.5';
761
819
 
762
820
 
763
821
  $.fn.dataTable.Responsive = Responsive;
@@ -766,11 +824,17 @@ $.fn.DataTable.Responsive = Responsive;
766
824
  // Attach a listener to the document which listens for DataTables initialisation
767
825
  // events so we can automatically initialise
768
826
  $(document).on( 'init.dt.dtr', function (e, settings, json) {
827
+ if ( e.namespace !== 'dt' ) {
828
+ return;
829
+ }
830
+
769
831
  if ( $(settings.nTable).hasClass( 'responsive' ) ||
770
832
  $(settings.nTable).hasClass( 'dt-responsive' ) ||
771
833
  settings.oInit.responsive ||
772
834
  DataTable.defaults.responsive
773
835
  ) {
836
+ console.log( e.namespace );
837
+
774
838
  var init = settings.oInit.responsive;
775
839
 
776
840
  if ( init !== false ) {
@@ -798,4 +862,3 @@ else if ( jQuery && !jQuery.fn.dataTable.Responsive ) {
798
862
 
799
863
 
800
864
  })(window, document);
801
-