jquery-datatables-rails 1.11.2 → 1.11.3

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 (33) hide show
  1. checksums.yaml +7 -0
  2. data/lib/jquery/datatables/rails/engine.rb +1 -1
  3. data/lib/jquery/datatables/rails/version.rb +1 -1
  4. data/vendor/assets/images/dataTables/extras/button.png +0 -0
  5. data/vendor/assets/images/dataTables/extras/insert.png +0 -0
  6. data/vendor/assets/images/dataTables/foundation/sort_asc.png +0 -0
  7. data/vendor/assets/images/dataTables/foundation/sort_asc_disabled.png +0 -0
  8. data/vendor/assets/images/dataTables/foundation/sort_both.png +0 -0
  9. data/vendor/assets/images/dataTables/foundation/sort_desc.png +0 -0
  10. data/vendor/assets/images/dataTables/foundation/sort_desc_disabled.png +0 -0
  11. data/vendor/assets/images/dataTables/minus.png +0 -0
  12. data/vendor/assets/images/dataTables/plus.png +0 -0
  13. data/vendor/assets/javascripts/dataTables/extras/ColReorder.js +41 -15
  14. data/vendor/assets/javascripts/dataTables/extras/ColVis.js +1 -9
  15. data/vendor/assets/javascripts/dataTables/extras/TableTools.js +121 -69
  16. data/vendor/assets/javascripts/dataTables/extras/TableTools.min.js +50 -49
  17. data/vendor/assets/javascripts/dataTables/jquery.dataTables.bootstrap.js +2 -2
  18. data/vendor/assets/javascripts/dataTables/jquery.dataTables.bootstrap3.js +152 -0
  19. data/vendor/assets/javascripts/dataTables/jquery.dataTables.foundation.js +186 -0
  20. data/vendor/assets/javascripts/dataTables/jquery.dataTables.responsive.js +435 -0
  21. data/vendor/assets/media/dataTables/extras/as3/ZeroClipboard.as +1 -1
  22. data/vendor/assets/media/dataTables/extras/as3/ZeroClipboardPdf.as +1 -1
  23. data/vendor/assets/media/dataTables/extras/swf/copy_csv_xls.swf +0 -0
  24. data/vendor/assets/media/dataTables/extras/swf/copy_csv_xls_pdf.swf +0 -0
  25. data/vendor/assets/stylesheets/dataTables/extras/ColReorder.css.erb +21 -0
  26. data/vendor/assets/stylesheets/dataTables/extras/ColVis.css +76 -0
  27. data/vendor/assets/stylesheets/dataTables/extras/ColVisAlt.css.erb +104 -0
  28. data/vendor/assets/stylesheets/dataTables/extras/{TableTools.css → TableTools.css.erb} +39 -31
  29. data/vendor/assets/stylesheets/dataTables/jquery.dataTables.bootstrap.css.scss +5 -0
  30. data/vendor/assets/stylesheets/dataTables/jquery.dataTables.bootstrap3.css.scss +216 -0
  31. data/vendor/assets/stylesheets/dataTables/jquery.dataTables.foundation.css.scss +211 -0
  32. data/vendor/assets/stylesheets/dataTables/jquery.dataTables.responsive.css.scss +22 -0
  33. metadata +28 -15
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 037dfdbef8b4ecec1f3529c3748a8265e48d6569
4
+ data.tar.gz: 7cf9eb12d937c254ce8a49e2362af6d88f8094a1
5
+ SHA512:
6
+ metadata.gz: 93b9dfe61876537f5058e7f9905f3254aa80970a18624efd54e0ac0e0fdc909a8e14a9d00ad61ee23c45a74f7eae4dbf7cd2526707da7da057e1e3d7ca953a33
7
+ data.tar.gz: ec194243411f26c77e9c3bb929815248db9f1de06cc0ffc178f1873febc8b32991e70d91c35c4da7b03e2b22043ad0baa162881177b2b4290b92c7e8f6d9003b
@@ -1,7 +1,7 @@
1
1
  # Configure for Rails 3.1
2
2
  module Jquery
3
3
  module Datatables
4
- if defined?(::Rails) and ::Rails.version >= "3.1"
4
+ if defined?(::Rails) and Gem::Requirement.new('>= 3.1').satisfied_by?(Gem::Version.new ::Rails.version)
5
5
  module Rails
6
6
  class Engine < ::Rails::Engine
7
7
  end
@@ -1,7 +1,7 @@
1
1
  module Jquery
2
2
  module Datatables
3
3
  module Rails
4
- VERSION = "1.11.2"
4
+ VERSION = "1.11.3"
5
5
  end
6
6
  end
7
7
  end
@@ -1,8 +1,8 @@
1
1
  /*
2
2
  * File: ColReorder.js
3
- * Version: 1.0.6
3
+ * Version: 1.0.8
4
4
  * CVS: $Id$
5
- * Description: Controls for column visiblity in DataTables
5
+ * Description: Allow columns to be reordered in a DataTable
6
6
  * Author: Allan Jardine (www.sprymedia.co.uk)
7
7
  * Created: Wed Sep 15 18:23:29 BST 2010
8
8
  * Modified: $Date$ by $Author$
@@ -174,10 +174,10 @@ $.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo )
174
174
  for ( i=0, iLen=iCols ; i<iLen ; i++ )
175
175
  {
176
176
  oCol = oSettings.aoColumns[i];
177
- if ( typeof oCol.mDataProp == 'number' ) {
178
- oCol.mDataProp = aiInvertMapping[ oCol.mDataProp ];
179
- oCol.fnGetData = oSettings.oApi._fnGetObjectDataFn( oCol.mDataProp );
180
- oCol.fnSetData = oSettings.oApi._fnSetObjectDataFn( oCol.mDataProp );
177
+ if ( typeof oCol.mData == 'number' ) {
178
+ oCol.mData = aiInvertMapping[ oCol.mData ];
179
+ oCol.fnGetData = oSettings.oApi._fnGetObjectDataFn( oCol.mData );
180
+ oCol.fnSetData = oSettings.oApi._fnSetObjectDataFn( oCol.mData );
181
181
  }
182
182
  }
183
183
 
@@ -294,10 +294,10 @@ $.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo )
294
294
  * ColReorder provides column visiblity control for DataTables
295
295
  * @class ColReorder
296
296
  * @constructor
297
- * @param {object} DataTables object
297
+ * @param {object} DataTables settings object
298
298
  * @param {object} ColReorder options
299
299
  */
300
- ColReorder = function( oTable, oOpts )
300
+ ColReorder = function( oDTSettings, oOpts )
301
301
  {
302
302
  /* Santiy check that we are a new instance */
303
303
  if ( !this.CLASS || this.CLASS != "ColReorder" )
@@ -400,9 +400,12 @@ ColReorder = function( oTable, oOpts )
400
400
 
401
401
 
402
402
  /* Constructor logic */
403
- this.s.dt = oTable.fnSettings();
403
+ this.s.dt = oDTSettings.oInstance.fnSettings();
404
404
  this._fnConstruct();
405
405
 
406
+ /* Add destroy callback */
407
+ oDTSettings.oApi._fnCallbackReg(oDTSettings, 'aoDestroyCallback', jQuery.proxy(this._fnDestroy, this), 'ColReorder');
408
+
406
409
  /* Store the instance for later use */
407
410
  ColReorder.aoInstances.push( this );
408
411
  return this;
@@ -811,7 +814,7 @@ ColReorder.prototype = {
811
814
  }
812
815
 
813
816
  $('thead tr:eq(0)', this.dom.drag).each( function () {
814
- $('th:not(:eq('+that.s.mouse.targetIndex+'))', this).remove();
817
+ $('th', this).eq(that.s.mouse.targetIndex).siblings().remove();
815
818
  } );
816
819
  $('tr', this.dom.drag).height( $('tr:eq(0)', that.s.dt.nTHead).height() );
817
820
 
@@ -844,6 +847,29 @@ ColReorder.prototype = {
844
847
 
845
848
  document.body.appendChild( this.dom.pointer );
846
849
  document.body.appendChild( this.dom.drag );
850
+ },
851
+
852
+ /**
853
+ * Clean up ColReorder memory references and event handlers
854
+ * @method _fnDestroy
855
+ * @returns void
856
+ * @private
857
+ */
858
+ "_fnDestroy": function ()
859
+ {
860
+ for ( var i=0, iLen=ColReorder.aoInstances.length ; i<iLen ; i++ )
861
+ {
862
+ if ( ColReorder.aoInstances[i] === this )
863
+ {
864
+ ColReorder.aoInstances.splice( i, 1 );
865
+ break;
866
+ }
867
+ }
868
+
869
+ $(this.s.dt.nTHead).find( '*' ).unbind( '.ColReorder' );
870
+
871
+ this.s.dt.oInstance._oPluginColReorder = null;
872
+ this.s = null;
847
873
  }
848
874
  };
849
875
 
@@ -913,7 +939,7 @@ ColReorder.prototype.CLASS = "ColReorder";
913
939
  * @type String
914
940
  * @default As code
915
941
  */
916
- ColReorder.VERSION = "1.0.6";
942
+ ColReorder.VERSION = "1.0.8";
917
943
  ColReorder.prototype.VERSION = ColReorder.VERSION;
918
944
 
919
945
 
@@ -929,7 +955,7 @@ ColReorder.prototype.VERSION = ColReorder.VERSION;
929
955
  */
930
956
  if ( typeof $.fn.dataTable == "function" &&
931
957
  typeof $.fn.dataTableExt.fnVersionCheck == "function" &&
932
- $.fn.dataTableExt.fnVersionCheck('1.9.0') )
958
+ $.fn.dataTableExt.fnVersionCheck('1.9.3') )
933
959
  {
934
960
  $.fn.dataTableExt.aoFeatures.push( {
935
961
  "fnInit": function( oDTSettings ) {
@@ -937,7 +963,7 @@ if ( typeof $.fn.dataTable == "function" &&
937
963
  if ( typeof oTable._oPluginColReorder == 'undefined' ) {
938
964
  var opts = typeof oDTSettings.oInit.oColReorder != 'undefined' ?
939
965
  oDTSettings.oInit.oColReorder : {};
940
- oTable._oPluginColReorder = new ColReorder( oDTSettings.oInstance, opts );
966
+ oTable._oPluginColReorder = new ColReorder( oDTSettings, opts );
941
967
  } else {
942
968
  oTable.oApi._fnLog( oDTSettings, 1, "ColReorder attempted to initialise twice. Ignoring second" );
943
969
  }
@@ -950,7 +976,7 @@ if ( typeof $.fn.dataTable == "function" &&
950
976
  }
951
977
  else
952
978
  {
953
- alert( "Warning: ColReorder requires DataTables 1.9.0 or greater - www.datatables.net/download");
979
+ alert( "Warning: ColReorder requires DataTables 1.9.3 or greater - www.datatables.net/download");
954
980
  }
955
981
 
956
- })(jQuery, window, document);
982
+ })(jQuery, window, document);
@@ -849,15 +849,7 @@ ColVis.prototype = {
849
849
  */
850
850
  setTimeout( function () {
851
851
  $(nHidden).animate({"opacity": 1}, that.s.iOverlayFade);
852
- $(nBackground).animate({"opacity": 0.1}, that.s.iOverlayFade, 'linear', function () {
853
- /* In IE6 if you set the checked attribute of a hidden checkbox, then this is not visually
854
- * reflected. As such, we need to do it here, once it is visible. Unbelievable.
855
- */
856
- if ( jQuery.browser.msie && jQuery.browser.version == "6.0" )
857
- {
858
- that._fnDrawCallback();
859
- }
860
- });
852
+ $(nBackground).animate({"opacity": 0.1}, that.s.iOverlayFade, 'linear');
861
853
  }, 10 );
862
854
 
863
855
  this.s.hidden = false;
@@ -1,13 +1,13 @@
1
1
  /*
2
2
  * File: TableTools.js
3
- * Version: 2.1.3
3
+ * Version: 2.1.5
4
4
  * Description: Tools and buttons for DataTables
5
5
  * Author: Allan Jardine (www.sprymedia.co.uk)
6
6
  * Language: Javascript
7
7
  * License: GPL v2 or BSD 3 point style
8
8
  * Project: DataTables
9
9
  *
10
- * Copyright 2009-2012 Allan Jardine, all rights reserved.
10
+ * Copyright 2009-2013 Allan Jardine, all rights reserved.
11
11
  *
12
12
  * This source file is free software, under either the GPL v2 license or a
13
13
  * BSD style license, available at:
@@ -323,18 +323,39 @@ TableTools.prototype = {
323
323
  /**
324
324
  * Retreieve the settings object from an instance
325
325
  * @returns {array} List of TR nodes which are currently selected
326
+ * @param {boolean} [filtered=false] Get only selected rows which are
327
+ * available given the filtering applied to the table. By default
328
+ * this is false - i.e. all rows, regardless of filtering are
329
+ selected.
326
330
  */
327
- "fnGetSelected": function ()
331
+ "fnGetSelected": function ( filtered )
328
332
  {
329
- var out=[];
330
- var data=this.s.dt.aoData;
331
- var i, iLen;
333
+ var
334
+ out = [],
335
+ data = this.s.dt.aoData,
336
+ displayed = this.s.dt.aiDisplay,
337
+ i, iLen;
332
338
 
333
- for ( i=0, iLen=data.length ; i<iLen ; i++ )
339
+ if ( filtered )
334
340
  {
335
- if ( data[i]._DTTT_selected )
341
+ // Only consider filtered rows
342
+ for ( i=0, iLen=displayed.length ; i<iLen ; i++ )
336
343
  {
337
- out.push( data[i].nTr );
344
+ if ( data[ displayed[i] ]._DTTT_selected )
345
+ {
346
+ out.push( data[ displayed[i] ].nTr );
347
+ }
348
+ }
349
+ }
350
+ else
351
+ {
352
+ // Use all rows
353
+ for ( i=0, iLen=data.length ; i<iLen ; i++ )
354
+ {
355
+ if ( data[i]._DTTT_selected )
356
+ {
357
+ out.push( data[i].nTr );
358
+ }
338
359
  }
339
360
  }
340
361
 
@@ -404,10 +425,7 @@ TableTools.prototype = {
404
425
  {
405
426
  var s = this._fnGetMasterSettings();
406
427
 
407
- this._fnRowDeselect( (filtered === true) ?
408
- s.dt.aiDisplay :
409
- s.dt.aoData
410
- );
428
+ this._fnRowDeselect( this.fnGetSelected(filtered) );
411
429
  },
412
430
 
413
431
 
@@ -655,11 +673,12 @@ TableTools.prototype = {
655
673
  /* Buttons */
656
674
  this._fnButtonDefinations( this.s.buttonSet, this.dom.container );
657
675
 
658
- /* Destructor - need to wipe the DOM for IE's garbage collector */
676
+ /* Destructor */
659
677
  this.s.dt.aoDestroyCallback.push( {
660
678
  "sName": "TableTools",
661
679
  "fn": function () {
662
- that.dom.container.innerHTML = "";
680
+ $(that.s.dt.nTBody).off( 'click.DTTT_Select', 'tr' );
681
+ $(that.dom.container).empty();
663
682
  }
664
683
  } );
665
684
  },
@@ -1006,7 +1025,7 @@ TableTools.prototype = {
1006
1025
 
1007
1026
  $(dt.nTable).addClass( this.classes.select.table );
1008
1027
 
1009
- $('tr', dt.nTBody).live( 'click', function(e) {
1028
+ $(dt.nTBody).on( 'click.DTTT_Select', 'tr', function(e) {
1010
1029
  /* Sub-table must be ignored (odd that the selector won't do this with >) */
1011
1030
  if ( this.parentNode != dt.nTBody )
1012
1031
  {
@@ -1018,25 +1037,19 @@ TableTools.prototype = {
1018
1037
  {
1019
1038
  return;
1020
1039
  }
1021
-
1022
- /* User defined selection function */
1023
- if ( that.s.select.preRowSelect !== null && !that.s.select.preRowSelect.call(that, e) )
1024
- {
1025
- return;
1026
- }
1027
1040
 
1028
1041
  if ( that.fnIsSelected( this ) )
1029
1042
  {
1030
- that._fnRowDeselect( this );
1043
+ that._fnRowDeselect( this, e );
1031
1044
  }
1032
1045
  else if ( that.s.select.type == "single" )
1033
1046
  {
1034
1047
  that.fnSelectNone();
1035
- that._fnRowSelect( this );
1048
+ that._fnRowSelect( this, e );
1036
1049
  }
1037
1050
  else if ( that.s.select.type == "multi" )
1038
1051
  {
1039
- that._fnRowSelect( this );
1052
+ that._fnRowSelect( this, e );
1040
1053
  }
1041
1054
  } );
1042
1055
 
@@ -1056,27 +1069,48 @@ TableTools.prototype = {
1056
1069
  * @param {*} src Rows to select - see _fnSelectData for a description of valid inputs
1057
1070
  * @private
1058
1071
  */
1059
- "_fnRowSelect": function ( src )
1072
+ "_fnRowSelect": function ( src, e )
1060
1073
  {
1061
- var data = this._fnSelectData( src );
1062
- var firstTr = data.length===0 ? null : data[0].nTr;
1074
+ var
1075
+ that = this,
1076
+ data = this._fnSelectData( src ),
1077
+ firstTr = data.length===0 ? null : data[0].nTr,
1078
+ anSelected = [],
1079
+ i, len;
1080
+
1081
+ // Get all the rows that will be selected
1082
+ for ( i=0, len=data.length ; i<len ; i++ )
1083
+ {
1084
+ if ( data[i].nTr )
1085
+ {
1086
+ anSelected.push( data[i].nTr );
1087
+ }
1088
+ }
1089
+
1090
+ // User defined pre-selection function
1091
+ if ( this.s.select.preRowSelect !== null && !this.s.select.preRowSelect.call(this, e, anSelected, true) )
1092
+ {
1093
+ return;
1094
+ }
1063
1095
 
1064
- for ( var i=0, iLen=data.length ; i<iLen ; i++ )
1096
+ // Mark them as selected
1097
+ for ( i=0, len=data.length ; i<len ; i++ )
1065
1098
  {
1066
1099
  data[i]._DTTT_selected = true;
1067
1100
 
1068
1101
  if ( data[i].nTr )
1069
1102
  {
1070
- $(data[i].nTr).addClass( this.classes.select.row );
1103
+ $(data[i].nTr).addClass( that.classes.select.row );
1071
1104
  }
1072
1105
  }
1073
1106
 
1107
+ // Post-selection function
1074
1108
  if ( this.s.select.postSelected !== null )
1075
1109
  {
1076
- this.s.select.postSelected.call( this, firstTr );
1110
+ this.s.select.postSelected.call( this, anSelected );
1077
1111
  }
1078
1112
 
1079
- TableTools._fnEventDispatch( this, 'select', firstTr );
1113
+ TableTools._fnEventDispatch( this, 'select', anSelected, true );
1080
1114
  },
1081
1115
 
1082
1116
  /**
@@ -1084,27 +1118,48 @@ TableTools.prototype = {
1084
1118
  * @param {*} src Rows to deselect - see _fnSelectData for a description of valid inputs
1085
1119
  * @private
1086
1120
  */
1087
- "_fnRowDeselect": function ( src )
1121
+ "_fnRowDeselect": function ( src, e )
1088
1122
  {
1089
- var data = this._fnSelectData( src );
1090
- var firstTr = data.length===0 ? null : data[0].nTr;
1123
+ var
1124
+ that = this,
1125
+ data = this._fnSelectData( src ),
1126
+ firstTr = data.length===0 ? null : data[0].nTr,
1127
+ anDeselectedTrs = [],
1128
+ i, len;
1091
1129
 
1092
- for ( var i=0, iLen=data.length ; i<iLen ; i++ )
1130
+ // Get all the rows that will be deselected
1131
+ for ( i=0, len=data.length ; i<len ; i++ )
1093
1132
  {
1094
- if ( data[i].nTr && data[i]._DTTT_selected )
1133
+ if ( data[i].nTr )
1095
1134
  {
1096
- $(data[i].nTr).removeClass( this.classes.select.row );
1135
+ anDeselectedTrs.push( data[i].nTr );
1097
1136
  }
1137
+ }
1098
1138
 
1139
+ // User defined pre-selection function
1140
+ if ( this.s.select.preRowSelect !== null && !this.s.select.preRowSelect.call(this, e, anDeselectedTrs, false) )
1141
+ {
1142
+ return;
1143
+ }
1144
+
1145
+ // Mark them as deselected
1146
+ for ( i=0, len=data.length ; i<len ; i++ )
1147
+ {
1099
1148
  data[i]._DTTT_selected = false;
1149
+
1150
+ if ( data[i].nTr )
1151
+ {
1152
+ $(data[i].nTr).removeClass( that.classes.select.row );
1153
+ }
1100
1154
  }
1101
1155
 
1156
+ // Post-deselection function
1102
1157
  if ( this.s.select.postDeselected !== null )
1103
1158
  {
1104
- this.s.select.postDeselected.call( this, firstTr );
1159
+ this.s.select.postDeselected.call( this, anDeselectedTrs );
1105
1160
  }
1106
1161
 
1107
- TableTools._fnEventDispatch( this, 'select', firstTr );
1162
+ TableTools._fnEventDispatch( this, 'select', anDeselectedTrs, false );
1108
1163
  },
1109
1164
 
1110
1165
  /**
@@ -1206,7 +1261,7 @@ TableTools.prototype = {
1206
1261
 
1207
1262
  if ( oConfig.fnClick !== null )
1208
1263
  {
1209
- oConfig.fnClick.call( that, nButton, oConfig, null );
1264
+ oConfig.fnClick.call( that, nButton, oConfig, null, e );
1210
1265
  }
1211
1266
 
1212
1267
  /* Provide a complete function to match the behaviour of the flash elements */
@@ -1633,36 +1688,24 @@ TableTools.prototype = {
1633
1688
  */
1634
1689
  "_fnHtmlDecode": function ( sData )
1635
1690
  {
1636
- if ( sData.indexOf('&') == -1 )
1691
+ if ( sData.indexOf('&') === -1 )
1637
1692
  {
1638
1693
  return sData;
1639
1694
  }
1640
1695
 
1641
- var
1642
- aData = this._fnChunkData( sData, 2048 ),
1643
- n = document.createElement('div'),
1644
- i, iLen, iIndex,
1645
- sReturn = "", sInner;
1646
-
1647
- /* nodeValue has a limit in browsers - so we chunk the data into smaller segments to build
1648
- * up the string. Note that the 'trick' here is to remember than we might have split over
1649
- * an HTML entity, so we backtrack a little to make sure this doesn't happen
1650
- */
1651
- for ( i=0, iLen=aData.length ; i<iLen ; i++ )
1652
- {
1653
- /* Magic number 8 is because no entity is longer then strlen 8 in ISO 8859-1 */
1654
- iIndex = aData[i].lastIndexOf( '&' );
1655
- if ( iIndex != -1 && aData[i].length >= 8 && iIndex > aData[i].length - 8 )
1696
+ var n = document.createElement('div');
1697
+
1698
+ return sData.replace( /&([^\s]*);/g, function( match, match2 ) {
1699
+ if ( match.substr(1, 1) === '#' )
1656
1700
  {
1657
- sInner = aData[i].substr( iIndex );
1658
- aData[i] = aData[i].substr( 0, iIndex );
1701
+ return String.fromCharCode( Number(match2.substr(1)) );
1659
1702
  }
1660
-
1661
- n.innerHTML = aData[i];
1662
- sReturn += n.childNodes[0].nodeValue;
1663
- }
1664
-
1665
- return sReturn;
1703
+ else
1704
+ {
1705
+ n.innerHTML = match;
1706
+ return n.childNodes[0].nodeValue;
1707
+ }
1708
+ } );
1666
1709
  },
1667
1710
 
1668
1711
 
@@ -1703,6 +1746,12 @@ TableTools.prototype = {
1703
1746
  if ( oSetDT.oScroll.sX !== "" || oSetDT.oScroll.sY !== "" )
1704
1747
  {
1705
1748
  this._fnPrintScrollStart( oSetDT );
1749
+
1750
+ // If the table redraws while in print view, the DataTables scrolling
1751
+ // setup would hide the header, so we need to readd it on draw
1752
+ $(this.s.dt.nTable).bind('draw.DTTT_Print', function () {
1753
+ that._fnPrintScrollStart( oSetDT );
1754
+ } );
1706
1755
  }
1707
1756
 
1708
1757
  /* Remove the other DataTables feature nodes - but leave the table! and info div */
@@ -1778,6 +1827,8 @@ TableTools.prototype = {
1778
1827
  /* Restore DataTables' scrolling */
1779
1828
  if ( oSetDT.oScroll.sX !== "" || oSetDT.oScroll.sY !== "" )
1780
1829
  {
1830
+ $(this.s.dt.nTable).unbind('draw.DTTT_Print');
1831
+
1781
1832
  this._fnPrintScrollEnd();
1782
1833
  }
1783
1834
 
@@ -2044,18 +2095,19 @@ TableTools._fnEventListen = function ( that, type, fn )
2044
2095
  * @param {Object} that Scope of the listening function (i.e. 'this' in the caller)
2045
2096
  * @param {String} type Event type
2046
2097
  * @param {Node} node Element that the event occurred on (may be null)
2098
+ * @param {boolean} [selected] Indicate if the node was selected (true) or deselected (false)
2047
2099
  * @returns void
2048
2100
  * @private
2049
2101
  * @static
2050
2102
  */
2051
- TableTools._fnEventDispatch = function ( that, type, node )
2103
+ TableTools._fnEventDispatch = function ( that, type, node, selected )
2052
2104
  {
2053
2105
  var listeners = TableTools._aListeners;
2054
2106
  for ( var i=0, iLen=listeners.length ; i<iLen ; i++ )
2055
2107
  {
2056
2108
  if ( that.dom.table == listeners[i].that.dom.table && listeners[i].type == type )
2057
2109
  {
2058
- listeners[i].fn( node );
2110
+ listeners[i].fn( node, selected );
2059
2111
  }
2060
2112
  }
2061
2113
  };
@@ -2347,7 +2399,7 @@ TableTools.classes_themeroller = {
2347
2399
  * @namespace TableTools default settings for initialisation
2348
2400
  */
2349
2401
  TableTools.DEFAULTS = {
2350
- "sSwfPath": "/assets/dataTables/extras/swf/copy_csv_xls_pdf.swf",
2402
+ "sSwfPath": "media/swf/copy_csv_xls_pdf.swf",
2351
2403
  "sRowSelect": "none",
2352
2404
  "sSelectedClass": null,
2353
2405
  "fnPreRowSelect": null,
@@ -2383,7 +2435,7 @@ TableTools.prototype.CLASS = "TableTools";
2383
2435
  * @type String
2384
2436
  * @default See code
2385
2437
  */
2386
- TableTools.VERSION = "2.1.3";
2438
+ TableTools.VERSION = "2.1.5";
2387
2439
  TableTools.prototype.VERSION = TableTools.VERSION;
2388
2440
 
2389
2441