jquery-datatables-rails 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
-