jquery-datatables 1.10.16 → 1.10.17

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 (115) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +2 -0
  3. data/app/assets/javascripts/datatables/dataTables.foundation.js +2 -2
  4. data/app/assets/javascripts/datatables/dataTables.uikit.js +1 -1
  5. data/app/assets/javascripts/datatables/extensions/AutoFill/autoFill.dataTables.js +38 -0
  6. data/app/assets/javascripts/datatables/extensions/AutoFill/dataTables.autoFill.js +52 -12
  7. data/app/assets/javascripts/datatables/extensions/Buttons/buttons.colVis.js +4 -8
  8. data/app/assets/javascripts/datatables/extensions/Buttons/buttons.dataTables.js +38 -0
  9. data/app/assets/javascripts/datatables/extensions/Buttons/buttons.flash.js +17 -7
  10. data/app/assets/javascripts/datatables/extensions/Buttons/buttons.html5.js +33 -19
  11. data/app/assets/javascripts/datatables/extensions/Buttons/buttons.print.js +14 -3
  12. data/app/assets/javascripts/datatables/extensions/Buttons/dataTables.buttons.js +120 -53
  13. data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.bootstrap.js +38 -0
  14. data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.bootstrap4.js +38 -0
  15. data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.dataTables.js +38 -0
  16. data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.foundation.js +38 -0
  17. data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.jqueryui.js +38 -0
  18. data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.semanicui.js +38 -0
  19. data/app/assets/javascripts/datatables/extensions/ColReorder/dataTables.colReorder.js +76 -13
  20. data/app/assets/javascripts/datatables/extensions/FixedColumns/dataTables.fixedColumns.js +23 -17
  21. data/app/assets/javascripts/datatables/extensions/FixedColumns/fixedColumns.bootstrap.js +38 -0
  22. data/app/assets/javascripts/datatables/extensions/FixedColumns/fixedColumns.bootstrap4.js +38 -0
  23. data/app/assets/javascripts/datatables/extensions/FixedColumns/fixedColumns.dataTables.js +38 -0
  24. data/app/assets/javascripts/datatables/extensions/FixedColumns/fixedColumns.foundation.js +38 -0
  25. data/app/assets/javascripts/datatables/extensions/FixedColumns/fixedColumns.jqueryui.js +38 -0
  26. data/app/assets/javascripts/datatables/extensions/FixedColumns/fixedColumns.semanicui.js +38 -0
  27. data/app/assets/javascripts/datatables/extensions/FixedHeader/dataTables.fixedHeader.js +26 -11
  28. data/app/assets/javascripts/datatables/extensions/FixedHeader/fixedHeader.bootstrap.js +38 -0
  29. data/app/assets/javascripts/datatables/extensions/FixedHeader/fixedHeader.bootstrap4.js +38 -0
  30. data/app/assets/javascripts/datatables/extensions/FixedHeader/fixedHeader.dataTables.js +38 -0
  31. data/app/assets/javascripts/datatables/extensions/FixedHeader/fixedHeader.foundation.js +38 -0
  32. data/app/assets/javascripts/datatables/extensions/FixedHeader/fixedHeader.jqueryui.js +38 -0
  33. data/app/assets/javascripts/datatables/extensions/FixedHeader/fixedHeader.semanicui.js +38 -0
  34. data/app/assets/javascripts/datatables/extensions/KeyTable/dataTables.keyTable.js +141 -75
  35. data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.bootstrap.js +38 -0
  36. data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.bootstrap4.js +38 -0
  37. data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.dataTables.js +38 -0
  38. data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.foundation.js +38 -0
  39. data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.jqueryui.js +38 -0
  40. data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.semanicui.js +38 -0
  41. data/app/assets/javascripts/datatables/extensions/Responsive/dataTables.responsive.js +64 -26
  42. data/app/assets/javascripts/datatables/extensions/Responsive/responsive.dataTables.js +38 -0
  43. data/app/assets/javascripts/datatables/extensions/RowGroup/dataTables.rowGroup.js +45 -13
  44. data/app/assets/javascripts/datatables/extensions/RowGroup/rowGroup.bootstrap.js +38 -0
  45. data/app/assets/javascripts/datatables/extensions/RowGroup/rowGroup.bootstrap4.js +38 -0
  46. data/app/assets/javascripts/datatables/extensions/RowGroup/rowGroup.dataTables.js +38 -0
  47. data/app/assets/javascripts/datatables/extensions/RowGroup/rowGroup.foundation.js +38 -0
  48. data/app/assets/javascripts/datatables/extensions/RowGroup/rowGroup.jqueryui.js +38 -0
  49. data/app/assets/javascripts/datatables/extensions/RowGroup/rowGroup.semanicui.js +38 -0
  50. data/app/assets/javascripts/datatables/extensions/RowReorder/dataTables.rowReorder.js +24 -6
  51. data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.bootstrap.js +38 -0
  52. data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.bootstrap4.js +38 -0
  53. data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.dataTables.js +38 -0
  54. data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.foundation.js +38 -0
  55. data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.jqueryui.js +38 -0
  56. data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.semanicui.js +38 -0
  57. data/app/assets/javascripts/datatables/extensions/Scroller/dataTables.scroller.js +93 -87
  58. data/app/assets/javascripts/datatables/extensions/Scroller/scroller.bootstrap.js +38 -0
  59. data/app/assets/javascripts/datatables/extensions/Scroller/scroller.bootstrap4.js +38 -0
  60. data/app/assets/javascripts/datatables/extensions/Scroller/scroller.dataTables.js +38 -0
  61. data/app/assets/javascripts/datatables/extensions/Scroller/scroller.foundation.js +38 -0
  62. data/app/assets/javascripts/datatables/extensions/Scroller/scroller.jqueryui.js +38 -0
  63. data/app/assets/javascripts/datatables/extensions/Scroller/scroller.semanticui.js +38 -0
  64. data/app/assets/javascripts/datatables/extensions/Select/dataTables.select.js +41 -14
  65. data/app/assets/javascripts/datatables/extensions/Select/select.bootstrap.js +38 -0
  66. data/app/assets/javascripts/datatables/extensions/Select/select.bootstrap4.js +38 -0
  67. data/app/assets/javascripts/datatables/extensions/Select/select.dataTables.js +38 -0
  68. data/app/assets/javascripts/datatables/extensions/Select/select.foundation.js +38 -0
  69. data/app/assets/javascripts/datatables/extensions/Select/select.jqueryui.js +38 -0
  70. data/app/assets/javascripts/datatables/extensions/Select/select.semanticui.js +38 -0
  71. data/app/assets/javascripts/datatables/jquery.dataTables.js +125 -72
  72. data/app/assets/stylesheets/datatables/dataTables.bootstrap4.scss +4 -0
  73. data/app/assets/stylesheets/datatables/dataTables.foundation.scss +5 -5
  74. data/app/assets/stylesheets/datatables/dataTables.material.scss +1 -1
  75. data/app/assets/stylesheets/datatables/dataTables.uikit.scss +33 -22
  76. data/app/assets/stylesheets/datatables/extensions/AutoFill/autoFill.bootstrap.scss +9 -0
  77. data/app/assets/stylesheets/datatables/extensions/AutoFill/autoFill.bootstrap4.scss +9 -0
  78. data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.dataTables.scss +3 -2
  79. data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.jqueryui.scss +2 -4
  80. data/app/assets/stylesheets/datatables/extensions/Buttons/mixins.scss +5 -0
  81. data/app/assets/stylesheets/datatables/extensions/FixedColumns/fixedColumns.bootstrap4.scss +3 -6
  82. data/app/assets/stylesheets/datatables/extensions/KeyTable/keyTable.bootstrap.scss +1 -1
  83. data/app/assets/stylesheets/datatables/extensions/KeyTable/keyTable.bootstrap4.scss +1 -1
  84. data/app/assets/stylesheets/datatables/extensions/KeyTable/keyTable.dataTables.scss +6 -5
  85. data/app/assets/stylesheets/datatables/extensions/KeyTable/keyTable.foundation.scss +1 -1
  86. data/app/assets/stylesheets/datatables/extensions/KeyTable/keyTable.semanticui.scss +1 -1
  87. data/app/assets/stylesheets/datatables/extensions/Scroller/scroller.bootstrap.scss +1 -1
  88. data/app/assets/stylesheets/datatables/extensions/Scroller/scroller.bootstrap4.scss +2 -4
  89. data/app/assets/stylesheets/datatables/jquery.dataTables.scss +5 -5
  90. data/jquery-datatables.gemspec +4 -2
  91. data/lib/generators/jquery/datatables/install_generator.rb +22 -6
  92. data/lib/generators/jquery/datatables/templates/{bootstrap.js.tt → javascripts/bootstrap.js.tt} +0 -0
  93. data/lib/generators/jquery/datatables/templates/{bootstrap4.js.tt → javascripts/bootstrap4.js.tt} +0 -0
  94. data/lib/generators/jquery/datatables/templates/{foundation.js.tt → javascripts/foundation.js.tt} +0 -0
  95. data/lib/generators/jquery/datatables/templates/javascripts/initializer.js.tt +30 -0
  96. data/lib/generators/jquery/datatables/templates/{jqueryui.js.tt → javascripts/jqueryui.js.tt} +0 -0
  97. data/lib/generators/jquery/datatables/templates/{material.js.tt → javascripts/material.js.tt} +0 -0
  98. data/lib/generators/jquery/datatables/templates/{regular.js.tt → javascripts/regular.js.tt} +0 -0
  99. data/lib/generators/jquery/datatables/templates/{semanticui.js.tt → javascripts/semanticui.js.tt} +0 -0
  100. data/lib/generators/jquery/datatables/templates/{uikit.js.tt → javascripts/uikit.js.tt} +0 -0
  101. data/lib/generators/jquery/datatables/templates/{bootstrap.scss.tt → stylesheets/bootstrap.scss.tt} +0 -0
  102. data/lib/generators/jquery/datatables/templates/{bootstrap4.scss.tt → stylesheets/bootstrap4.scss.tt} +0 -0
  103. data/lib/generators/jquery/datatables/templates/{foundation.scss.tt → stylesheets/foundation.scss.tt} +0 -0
  104. data/lib/generators/jquery/datatables/templates/{jqueryui.scss.tt → stylesheets/jqueryui.scss.tt} +0 -0
  105. data/lib/generators/jquery/datatables/templates/{material.scss.tt → stylesheets/material.scss.tt} +0 -0
  106. data/lib/generators/jquery/datatables/templates/{regular.scss.tt → stylesheets/regular.scss.tt} +0 -0
  107. data/lib/generators/jquery/datatables/templates/{semanticui.scss.tt → stylesheets/semanticui.scss.tt} +0 -0
  108. data/lib/generators/jquery/datatables/templates/{uikit.scss.tt → stylesheets/uikit.scss.tt} +0 -0
  109. data/lib/generators/jquery/datatables/templates/views/index.html.erb +17 -0
  110. data/lib/generators/jquery/datatables/templates/views/index.html.slim +12 -0
  111. data/lib/generators/jquery/datatables/templates/views/index.json.jbuilder +10 -0
  112. data/lib/jquery-datatables.rb +53 -5
  113. data/lib/jquery-datatables/engine.rb +2 -0
  114. data/lib/jquery-datatables/version.rb +1 -1
  115. metadata +86 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 27428072c9d4a5278d1706f0cbd34ada755b39d0
4
- data.tar.gz: 71ff60a597d6606a52918d34c4e2c6b3aa239d18
2
+ SHA256:
3
+ metadata.gz: 681cbce4e90454b5a033b6082241a8cabcfe3872558a5c39ad35eee32944f32b
4
+ data.tar.gz: c619f8924e5f9b43e1e237379a581fbe17b04cd2f4ff60888504aabafb011140
5
5
  SHA512:
6
- metadata.gz: c8307a745961c98ee70809ca9fd5abfefebf18eb9681dd3558caff33d26837a483a34b34549aff9242756b7060c319614aa656cb8122e15119e13c847cba0fb1
7
- data.tar.gz: 331efe4207f004fde90cd8ae508d03878f046b1296d85bb80c9bccc5fd4811fd9c8bdf0cfd0b0d2bdb0ab9dd11e4a76a7786f645072d1c60263888d06b072f70
6
+ metadata.gz: 783b181782fd948624f1a29d4f8fa9c72b1e83c8a75ddf385b851404adbb1cf5af85481c14251ecb95051841a4ab40d66a59eb2fe750e9535630192a845fb1d4
7
+ data.tar.gz: e6f67600ae98753348aaa32cbb785a9ec142d5827f60a0978b0c02a0c10ec83c7cf955b808d423c4d1b66bc0d900ad58ab01a335023491e097feff173f148b43
data/README.md CHANGED
@@ -115,6 +115,8 @@ $(document).ready(function() {
115
115
 
116
116
  ## Todo
117
117
  - update instructions
118
+ - add scaffolds generators
119
+ - add ajax helpers
118
120
 
119
121
  ## Contributing
120
122
 
@@ -54,9 +54,9 @@ $.extend( DataTable.ext.classes, {
54
54
  /* Set the defaults for DataTables initialisation */
55
55
  $.extend( true, DataTable.defaults, {
56
56
  dom:
57
- "<'row'<'small-6 columns'l><'small-6 columns'f>r>"+
57
+ "<'row grid-x'<'small-6 columns cell'l><'small-6 columns cell'f>r>"+
58
58
  "t"+
59
- "<'row'<'small-6 columns'i><'small-6 columns'p>>",
59
+ "<'row grid-x'<'small-6 columns cell'i><'small-6 columns cell'p>>",
60
60
  renderer: 'foundation'
61
61
  } );
62
62
 
@@ -162,7 +162,7 @@ DataTable.ext.renderer.pageButton.uikit = function ( settings, host, idx, button
162
162
  catch (e) {}
163
163
 
164
164
  attach(
165
- $(host).empty().html('<ul class="uk-pagination uk-pagination-right"/>').children('ul'),
165
+ $(host).empty().html('<ul class="uk-pagination uk-pagination-right uk-flex-right"/>').children('ul'),
166
166
  buttons
167
167
  );
168
168
 
@@ -0,0 +1,38 @@
1
+ /*! DataTables styling wrapper for AutoFill
2
+ * ©2018 SpryMedia Ltd - datatables.net/license
3
+ */
4
+
5
+ (function( factory ){
6
+ if ( typeof define === 'function' && define.amd ) {
7
+ // AMD
8
+ define( ['jquery', 'datatables.net-dt', 'datatables.net-autofill'], function ( $ ) {
9
+ return factory( $, window, document );
10
+ } );
11
+ }
12
+ else if ( typeof exports === 'object' ) {
13
+ // CommonJS
14
+ module.exports = function (root, $) {
15
+ if ( ! root ) {
16
+ root = window;
17
+ }
18
+
19
+ if ( ! $ || ! $.fn.dataTable ) {
20
+ $ = require('datatables.net-dt')(root, $).$;
21
+ }
22
+
23
+ if ( ! $.fn.dataTable.AutoFill ) {
24
+ require('datatables.net-autofill')(root, $);
25
+ }
26
+
27
+ return factory( $, root, root.document );
28
+ };
29
+ }
30
+ else {
31
+ // Browser
32
+ factory( jQuery, window, document );
33
+ }
34
+ }(function( $, window, document, undefined ) {
35
+
36
+ return $.fn.dataTable;
37
+
38
+ }));
@@ -1,15 +1,15 @@
1
- /*! AutoFill 2.2.2
2
- * ©2008-2017 SpryMedia Ltd - datatables.net/license
1
+ /*! AutoFill 2.3.0
2
+ * ©2008-2018 SpryMedia Ltd - datatables.net/license
3
3
  */
4
4
 
5
5
  /**
6
6
  * @summary AutoFill
7
7
  * @description Add Excel like click and drag auto-fill options to DataTables
8
- * @version 2.2.2
8
+ * @version 2.3.0
9
9
  * @file dataTables.autoFill.js
10
10
  * @author SpryMedia Ltd (www.sprymedia.co.uk)
11
11
  * @contact www.sprymedia.co.uk/contact
12
- * @copyright Copyright 2010-2017 SpryMedia Ltd.
12
+ * @copyright Copyright 2010-2018 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
@@ -358,12 +358,16 @@ $.extend( AutoFill.prototype, {
358
358
  var dt = this.s.dt;
359
359
  var start = this.s.start;
360
360
  var startCell = $(this.dom.start);
361
- var endCell = $(target);
362
361
  var end = {
363
- row: dt.rows( { page: 'current' } ).nodes().indexOf( endCell.parent()[0] ),
364
- column: endCell.index()
362
+ row: this.c.vertical ?
363
+ dt.rows( { page: 'current' } ).nodes().indexOf( target.parentNode ) :
364
+ start.row,
365
+ column: this.c.horizontal ?
366
+ $(target).index() :
367
+ start.column
365
368
  };
366
369
  var colIndx = dt.column.index( 'toData', end.column );
370
+ var endCell = $( dt.cell( ':eq('+end.row+')', colIndx ).node() );
367
371
 
368
372
  // Be sure that is a DataTables controlled cell
369
373
  if ( ! dt.cell( endCell ).any() ) {
@@ -587,16 +591,21 @@ $.extend( AutoFill.prototype, {
587
591
  left = 0;
588
592
 
589
593
  if ( ! targetParent ) {
590
- targetParent = $( this.s.dt.table().node() ).offsetParent();
594
+ targetParent = $( $( this.s.dt.table().node() )[0].offsetParent );
591
595
  }
592
596
 
593
597
  do {
594
598
  position = currNode.position();
595
- currOffsetParent = currNode.offsetParent();
599
+
600
+ // jQuery doesn't give a `table` as the offset parent oddly, so use DOM directly
601
+ currOffsetParent = $( currNode[0].offsetParent );
596
602
 
597
603
  top += position.top + currOffsetParent.scrollTop();
598
604
  left += position.left + currOffsetParent.scrollLeft();
599
605
 
606
+ top += parseInt( currOffsetParent.css('margin-top') ) * 1;
607
+ top += parseInt( currOffsetParent.css('border-top-width') ) * 1;
608
+
600
609
  // Emergency fall back. Shouldn't happen, but just in case!
601
610
  if ( currNode.get(0).nodeName.toLowerCase() === 'body' ) {
602
611
  break;
@@ -695,6 +704,7 @@ $.extend( AutoFill.prototype, {
695
704
  {
696
705
  $(document.body).off( '.autoFill' );
697
706
 
707
+ var that = this;
698
708
  var dt = this.s.dt;
699
709
  var select = this.dom.select;
700
710
  select.top.remove();
@@ -713,6 +723,27 @@ $.extend( AutoFill.prototype, {
713
723
  return;
714
724
  }
715
725
 
726
+ var startDt = dt.cell( ':eq('+start.row+')', start.column+':visible', {page:'current'} );
727
+
728
+ // If Editor is active inside this cell (inline editing) we need to wait for Editor to
729
+ // submit and then we can loop back and trigger the fill.
730
+ if ( $('div.DTE', startDt.node()).length ) {
731
+ var editor = dt.editor();
732
+
733
+ editor
734
+ .on( 'submitSuccess.kt', function () {
735
+ editor.off( '.kt');
736
+ that._mouseup( e );
737
+ } )
738
+ .on( 'submitComplete.kt preSubmitCancelled.kt', function () {
739
+ editor.off( '.kt');
740
+ } );
741
+
742
+ editor.submit();
743
+
744
+ return;
745
+ }
746
+
716
747
  // Build a matrix representation of the selected rows
717
748
  var rows = this._range( start.row, end.row );
718
749
  var columns = this._range( start.column, end.column );
@@ -950,7 +981,10 @@ $.extend( AutoFill.prototype, {
950
981
  AutoFill.actions = {
951
982
  increment: {
952
983
  available: function ( dt, cells ) {
953
- return $.isNumeric( cells[0][0].label );
984
+ var d = cells[0][0].label;
985
+
986
+ // is numeric test based on jQuery's old `isNumeric` function
987
+ return !isNaN( d - parseFloat( d ) );
954
988
  },
955
989
 
956
990
  option: function ( dt, cells ) {
@@ -1055,7 +1089,7 @@ AutoFill.actions = {
1055
1089
  * @static
1056
1090
  * @type String
1057
1091
  */
1058
- AutoFill.version = '2.2.2';
1092
+ AutoFill.version = '2.3.0';
1059
1093
 
1060
1094
 
1061
1095
  /**
@@ -1080,7 +1114,13 @@ AutoFill.defaults = {
1080
1114
  update: null, // false is editor given, true otherwise
1081
1115
 
1082
1116
  /** @type {DataTable.Editor} Editor instance for automatic submission */
1083
- editor: null
1117
+ editor: null,
1118
+
1119
+ /** @type {boolean} Enable vertical fill */
1120
+ vertical: true,
1121
+
1122
+ /** @type {boolean} Enable horizontal fill */
1123
+ horizontal: true
1084
1124
  };
1085
1125
 
1086
1126
 
@@ -122,14 +122,8 @@ $.extend( DataTable.ext.buttons, {
122
122
  return;
123
123
  }
124
124
 
125
- if ( typeof conf.columns === 'number' ) {
126
- conf.columns = details.mapping[ conf.columns ];
127
- }
128
-
129
- var col = dt.column( conf.columns );
130
-
131
125
  that.text( conf._columnText( dt, conf ) );
132
- that.active( col.visible() );
126
+ that.active( dt.column( conf.columns ).visible() );
133
127
  } );
134
128
 
135
129
  this.active( dt.column( conf.columns ).visible() );
@@ -149,7 +143,9 @@ $.extend( DataTable.ext.buttons, {
149
143
  var title = dt.settings()[0].aoColumns[ idx ].sTitle
150
144
  .replace(/\n/g," ") // remove new lines
151
145
  .replace(/<br\s*\/?>/gi, " ") // replace line breaks with spaces
152
- .replace( /<.*?>/g, "" ) // strip HTML
146
+ .replace(/<select(.*?)<\/select>/g, "") // remove select tags, including options text
147
+ .replace(/<!\-\-.*?\-\->/g, "") // strip HTML comments
148
+ .replace(/<.*?>/g, "") // strip HTML
153
149
  .replace(/^\s+|\s+$/g,""); // trim
154
150
 
155
151
  return conf.columnText ?
@@ -0,0 +1,38 @@
1
+ /*! DataTables styling wrapper for Buttons
2
+ * ©2018 SpryMedia Ltd - datatables.net/license
3
+ */
4
+
5
+ (function( factory ){
6
+ if ( typeof define === 'function' && define.amd ) {
7
+ // AMD
8
+ define( ['jquery', 'datatables.net-dt', 'datatables.net-buttons'], function ( $ ) {
9
+ return factory( $, window, document );
10
+ } );
11
+ }
12
+ else if ( typeof exports === 'object' ) {
13
+ // CommonJS
14
+ module.exports = function (root, $) {
15
+ if ( ! root ) {
16
+ root = window;
17
+ }
18
+
19
+ if ( ! $ || ! $.fn.dataTable ) {
20
+ $ = require('datatables.net-dt')(root, $).$;
21
+ }
22
+
23
+ if ( ! $.fn.dataTable.Buttons ) {
24
+ require('datatables.net-buttons')(root, $);
25
+ }
26
+
27
+ return factory( $, root, root.document );
28
+ };
29
+ }
30
+ else {
31
+ // Browser
32
+ factory( jQuery, window, document );
33
+ }
34
+ }(function( $, window, document, undefined ) {
35
+
36
+ return $.fn.dataTable;
37
+
38
+ }));
@@ -915,7 +915,9 @@ var excelStrings = {
915
915
  '<fill>'+
916
916
  '<patternFill patternType="none" />'+
917
917
  '</fill>'+
918
- '<fill/>'+ // Excel appears to use this as a dotted background regardless of values
918
+ '<fill>'+ // Excel appears to use this as a dotted background regardless of values but
919
+ '<patternFill patternType="none" />'+ // to be valid to the schema, use a patternFill
920
+ '</fill>'+
919
921
  '<fill>'+
920
922
  '<patternFill patternType="solid">'+
921
923
  '<fgColor rgb="FFD9D9D9" />'+
@@ -1130,7 +1132,7 @@ DataTable.ext.buttons.copyFlash = $.extend( {}, flashButton, {
1130
1132
  }
1131
1133
 
1132
1134
  if ( config.customize ) {
1133
- output = config.customize( output, config );
1135
+ output = config.customize( output, config, dt );
1134
1136
  }
1135
1137
 
1136
1138
  flash.setAction( 'copy' );
@@ -1165,12 +1167,13 @@ DataTable.ext.buttons.csvFlash = $.extend( {}, flashButton, {
1165
1167
  // Set the text
1166
1168
  var flash = config._flash;
1167
1169
  var data = _exportData( dt, config );
1170
+ var info = dt.buttons.exportInfo( config );
1168
1171
  var output = config.customize ?
1169
- config.customize( data.str, config ) :
1172
+ config.customize( data.str, config, dt ) :
1170
1173
  data.str;
1171
1174
 
1172
1175
  flash.setAction( 'csv' );
1173
- flash.setFileName( _filename( config ) );
1176
+ flash.setFileName( info.filename );
1174
1177
  _setText( flash, output );
1175
1178
  },
1176
1179
 
@@ -1224,7 +1227,12 @@ DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, {
1224
1227
 
1225
1228
  // For null, undefined of blank cell, continue so it doesn't create the _createNode
1226
1229
  if ( row[i] === null || row[i] === undefined || row[i] === '' ) {
1227
- continue;
1230
+ if ( config.createEmptyCells === true ) {
1231
+ row[i] = '';
1232
+ }
1233
+ else {
1234
+ continue;
1235
+ }
1228
1236
  }
1229
1237
 
1230
1238
  row[i] = $.trim( row[i] );
@@ -1374,7 +1382,7 @@ DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, {
1374
1382
 
1375
1383
  // Let the developer customise the document if they want to
1376
1384
  if ( config.customize ) {
1377
- config.customize( xlsx );
1385
+ config.customize( xlsx, config, dt );
1378
1386
  }
1379
1387
 
1380
1388
  _xlsxToStrings( xlsx );
@@ -1387,7 +1395,9 @@ DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, {
1387
1395
  this.processing( false );
1388
1396
  },
1389
1397
 
1390
- extension: '.xlsx'
1398
+ extension: '.xlsx',
1399
+
1400
+ createEmptyCells: false
1391
1401
  } );
1392
1402
 
1393
1403
 
@@ -602,7 +602,9 @@ var excelStrings = {
602
602
  '<fill>'+
603
603
  '<patternFill patternType="none" />'+
604
604
  '</fill>'+
605
- '<fill/>'+ // Excel appears to use this as a dotted background regardless of values
605
+ '<fill>'+ // Excel appears to use this as a dotted background regardless of values but
606
+ '<patternFill patternType="none" />'+ // to be valid to the schema, use a patternFill
607
+ '</fill>'+
606
608
  '<fill>'+
607
609
  '<patternFill patternType="solid">'+
608
610
  '<fgColor rgb="FFD9D9D9" />'+
@@ -811,7 +813,7 @@ DataTable.ext.buttons.copyHtml5 = {
811
813
  }
812
814
 
813
815
  if ( config.customize ) {
814
- output = config.customize( output, config );
816
+ output = config.customize( output, config, dt );
815
817
  }
816
818
 
817
819
  var textarea = $('<textarea readonly/>')
@@ -923,7 +925,7 @@ DataTable.ext.buttons.csvHtml5 = {
923
925
  var charset = config.charset;
924
926
 
925
927
  if ( config.customize ) {
926
- output = config.customize( output, config );
928
+ output = config.customize( output, config, dt );
927
929
  }
928
930
 
929
931
  if ( charset !== false ) {
@@ -1031,9 +1033,15 @@ DataTable.ext.buttons.excelHtml5 = {
1031
1033
 
1032
1034
  // For null, undefined of blank cell, continue so it doesn't create the _createNode
1033
1035
  if ( row[i] === null || row[i] === undefined || row[i] === '' ) {
1034
- continue;
1036
+ if ( config.createEmptyCells === true ) {
1037
+ row[i] = '';
1038
+ }
1039
+ else {
1040
+ continue;
1041
+ }
1035
1042
  }
1036
1043
 
1044
+ var originalContent = row[i];
1037
1045
  row[i] = $.trim( row[i] );
1038
1046
 
1039
1047
  // Special number formatting options
@@ -1084,9 +1092,9 @@ DataTable.ext.buttons.excelHtml5 = {
1084
1092
  }
1085
1093
  else {
1086
1094
  // String output - replace non standard characters for text output
1087
- var text = ! row[i].replace ?
1088
- row[i] :
1089
- row[i].replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, '');
1095
+ var text = ! originalContent.replace ?
1096
+ originalContent :
1097
+ originalContent.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, '');
1090
1098
 
1091
1099
  cell = _createNode( rels, 'c', {
1092
1100
  attr: {
@@ -1097,7 +1105,10 @@ DataTable.ext.buttons.excelHtml5 = {
1097
1105
  row: _createNode( rels, 'is', {
1098
1106
  children: {
1099
1107
  row: _createNode( rels, 't', {
1100
- text: text
1108
+ text: text,
1109
+ attr: {
1110
+ 'xml:space': 'preserve'
1111
+ }
1101
1112
  } )
1102
1113
  }
1103
1114
  } )
@@ -1127,7 +1138,7 @@ DataTable.ext.buttons.excelHtml5 = {
1127
1138
  ref: 'A'+row+':'+createCellPos(colspan)+row
1128
1139
  }
1129
1140
  } ) );
1130
- mergeCells.attr( 'count', mergeCells.attr( 'count' )+1 );
1141
+ mergeCells.attr( 'count', parseFloat(mergeCells.attr( 'count' ))+1 );
1131
1142
  $('row:eq('+(row-1)+') c', rels).attr( 's', '51' ); // centre
1132
1143
  };
1133
1144
 
@@ -1181,7 +1192,12 @@ DataTable.ext.buttons.excelHtml5 = {
1181
1192
 
1182
1193
  // Let the developer customise the document if they want to
1183
1194
  if ( config.customize ) {
1184
- config.customize( xlsx );
1195
+ config.customize( xlsx, config, dt );
1196
+ }
1197
+
1198
+ // Excel doesn't like an empty mergeCells tag
1199
+ if ( $('mergeCells', rels).children().length === 0 ) {
1200
+ $('mergeCells', rels).remove();
1185
1201
  }
1186
1202
 
1187
1203
  var jszip = _jsZip();
@@ -1226,7 +1242,9 @@ DataTable.ext.buttons.excelHtml5 = {
1226
1242
 
1227
1243
  messageTop: '*',
1228
1244
 
1229
- messageBottom: '*'
1245
+ messageBottom: '*',
1246
+
1247
+ createEmptyCells: false
1230
1248
  };
1231
1249
 
1232
1250
  //
@@ -1344,23 +1362,19 @@ DataTable.ext.buttons.pdfHtml5 = {
1344
1362
  }
1345
1363
 
1346
1364
  if ( config.customize ) {
1347
- config.customize( doc, config );
1365
+ config.customize( doc, config, dt );
1348
1366
  }
1349
1367
 
1350
1368
  var pdf = _pdfMake().createPdf( doc );
1351
1369
 
1352
1370
  if ( config.download === 'open' && ! _isDuffSafari() ) {
1353
1371
  pdf.open();
1354
- this.processing( false );
1355
1372
  }
1356
1373
  else {
1357
- pdf.getBuffer( function (buffer) {
1358
- var blob = new Blob( [buffer], {type:'application/pdf'} );
1359
-
1360
- _saveAs( blob, info.filename );
1361
- that.processing( false );
1362
- } );
1374
+ pdf.download( info.filename );
1363
1375
  }
1376
+
1377
+ this.processing( false );
1364
1378
  },
1365
1379
 
1366
1380
  title: '*',