jquery-datatables 1.10.12 → 1.10.13
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/app/assets/javascripts/datatables/dataTables.bootstrap.js +2 -2
- data/app/assets/javascripts/datatables/dataTables.bootstrap4.js +5 -5
- data/app/assets/javascripts/datatables/dataTables.foundation.js +1 -1
- data/app/assets/javascripts/datatables/dataTables.material.js +1 -1
- data/app/assets/javascripts/datatables/dataTables.semanticui.js +1 -1
- data/app/assets/javascripts/datatables/extensions/AutoFill/dataTables.autoFill.js +63 -31
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.colVis.js +2 -3
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.flash.js +145 -55
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.html5.js +224 -206
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.print.js +14 -8
- data/app/assets/javascripts/datatables/extensions/Buttons/dataTables.buttons.js +54 -24
- data/app/assets/javascripts/datatables/extensions/KeyTable/dataTables.keyTable.js +137 -68
- data/app/assets/javascripts/datatables/extensions/Responsive/dataTables.responsive.js +30 -7
- data/app/assets/javascripts/datatables/extensions/Responsive/responsive.bootstrap.js +6 -2
- data/app/assets/javascripts/datatables/extensions/Responsive/responsive.bootstrap4.js +6 -2
- data/app/assets/javascripts/datatables/extensions/RowReorder/dataTables.rowReorder.js +64 -6
- data/app/assets/javascripts/datatables/extensions/Select/dataTables.select.js +40 -15
- data/app/assets/javascripts/datatables/jquery.dataTables.js +246 -217
- data/app/assets/javascripts/datatables/plugins/api/average.js +32 -0
- data/app/assets/javascripts/datatables/plugins/api/sum.js +51 -0
- data/app/assets/javascripts/datatables/plugins/pagination/input.js +224 -0
- data/app/assets/javascripts/datatables/plugins/search/alphabetSearch.js +368 -0
- data/app/assets/javascripts/datatables/plugins/sorting/file-size.js +43 -0
- data/app/assets/javascripts/datatables/plugins/sorting/ip-address.js +103 -0
- data/app/assets/stylesheets/datatables/dataTables.bootstrap.css +0 -1
- data/app/assets/stylesheets/datatables/dataTables.semanticui.css +0 -1
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.bootstrap.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.bootstrap4.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.dataTables.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.foundation.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.jqueryui.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Responsive/responsive.semanticui.css +4 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.bootstrap.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.bootstrap4.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.dataTables.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.foundation.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.jqueryui.css +9 -4
- data/app/assets/stylesheets/datatables/extensions/Select/select.semanticui.css +9 -4
- data/app/assets/stylesheets/datatables/plugins/search/alphabetSearch.css +43 -0
- data/lib/jquery-datatables/version.rb +1 -1
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf69e7f69f37cf3be807fb96646e14095ea5d3de
|
4
|
+
data.tar.gz: cb8525a65895232943f6278db27556476d187d6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf421ef9efd98efb194a4ad76da45c93b17ae4cdb34a5fd93c494c45df46f5c0a4b9c67f0b0919e85da0f0cbdbedbbac6a1884f3bbd7db2b152461647062d205
|
7
|
+
data.tar.gz: 7bb1786138d0a17407af9bcd6607bc9a9414ed2f0736f841cfc33301124d72dbd4591aecab9b2a09bacc1225b0b82703d03882f57f83e1df0a5e09449ac3f46e
|
data/.gitignore
CHANGED
@@ -172,11 +172,11 @@ DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, bu
|
|
172
172
|
buttons
|
173
173
|
);
|
174
174
|
|
175
|
-
if ( activeEl ) {
|
175
|
+
if ( activeEl !== undefined ) {
|
176
176
|
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
|
177
177
|
}
|
178
178
|
};
|
179
179
|
|
180
180
|
|
181
181
|
return DataTable;
|
182
|
-
}));
|
182
|
+
}));
|
@@ -46,9 +46,9 @@ var DataTable = $.fn.dataTable;
|
|
46
46
|
/* Set the defaults for DataTables initialisation */
|
47
47
|
$.extend( true, DataTable.defaults, {
|
48
48
|
dom:
|
49
|
-
"<'row'<'col-md-6'l><'col-md-6'f>>" +
|
50
|
-
"<'row'<'col-
|
51
|
-
"<'row'<'col-md-5'i><'col-md-7'p>>",
|
49
|
+
"<'row'<'col-xs-12 col-md-6'l><'col-xs-12 col-md-6'f>>" +
|
50
|
+
"<'row'<'col-xs-12'tr>>" +
|
51
|
+
"<'row'<'col-xs-12 col-md-5'i><'col-xs-12 col-md-7'p>>",
|
52
52
|
renderer: 'bootstrap'
|
53
53
|
} );
|
54
54
|
|
@@ -174,11 +174,11 @@ DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, bu
|
|
174
174
|
buttons
|
175
175
|
);
|
176
176
|
|
177
|
-
if ( activeEl ) {
|
177
|
+
if ( activeEl !== undefined ) {
|
178
178
|
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
|
179
179
|
}
|
180
180
|
};
|
181
181
|
|
182
182
|
|
183
183
|
return DataTable;
|
184
|
-
}));
|
184
|
+
}));
|
@@ -1,15 +1,15 @@
|
|
1
|
-
/*! AutoFill 2.1.
|
2
|
-
* ©2008-
|
1
|
+
/*! AutoFill 2.1.3
|
2
|
+
* ©2008-2016 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.1.
|
8
|
+
* @version 2.1.3
|
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-
|
12
|
+
* @copyright Copyright 2010-2016 SpryMedia Ltd.
|
13
13
|
*
|
14
14
|
* This source file is free software, available under the following license:
|
15
15
|
* MIT license - http://datatables.net/license/mit
|
@@ -192,8 +192,6 @@ $.extend( AutoFill.prototype, {
|
|
192
192
|
var idx = dt.cell( node ).index();
|
193
193
|
var handle = this.dom.handle;
|
194
194
|
var handleDim = this.s.handle;
|
195
|
-
var dtScroll = $('div.dataTables_scrollBody', this.s.dt.table().container() );
|
196
|
-
var scrollOffsetX=0, scrollOffsetY=0;
|
197
195
|
|
198
196
|
if ( ! idx || dt.columns( this.c.columns ).indexes().indexOf( idx.column ) === -1 ) {
|
199
197
|
this._detach();
|
@@ -201,7 +199,8 @@ $.extend( AutoFill.prototype, {
|
|
201
199
|
}
|
202
200
|
|
203
201
|
if ( ! this.dom.offsetParent ) {
|
204
|
-
|
202
|
+
// We attach to the table's offset parent
|
203
|
+
this.dom.offsetParent = $( dt.table().node() ).offsetParent();
|
205
204
|
}
|
206
205
|
|
207
206
|
if ( ! handleDim.height || ! handleDim.width ) {
|
@@ -212,20 +211,14 @@ $.extend( AutoFill.prototype, {
|
|
212
211
|
handleDim.width = handle.outerWidth();
|
213
212
|
}
|
214
213
|
|
215
|
-
|
216
|
-
|
217
|
-
// If scrolling, and the table is not itself the offset parent, need to
|
218
|
-
// offset for the scrolling position
|
219
|
-
if ( dtScroll.length && this.dom.offsetParent[0] !== dt.table().node() ) {
|
220
|
-
scrollOffsetY = dtScroll.scrollTop();
|
221
|
-
scrollOffsetX = dtScroll.scrollLeft();
|
222
|
-
}
|
214
|
+
// Might need to go through multiple offset parents
|
215
|
+
var offset = this._getPosition( node, this.dom.offsetParent );
|
223
216
|
|
224
217
|
this.dom.attachedTo = node;
|
225
218
|
handle
|
226
219
|
.css( {
|
227
|
-
top: offset.top + node.offsetHeight - handleDim.height
|
228
|
-
left: offset.left + node.offsetWidth - handleDim.width
|
220
|
+
top: offset.top + node.offsetHeight - handleDim.height,
|
221
|
+
left: offset.left + node.offsetWidth - handleDim.width
|
229
222
|
} )
|
230
223
|
.appendTo( this.dom.offsetParent );
|
231
224
|
},
|
@@ -327,6 +320,7 @@ $.extend( AutoFill.prototype, {
|
|
327
320
|
row: dt.rows( { page: 'current' } ).nodes().indexOf( endCell.parent()[0] ),
|
328
321
|
column: endCell.index()
|
329
322
|
};
|
323
|
+
var colIndx = dt.column.index( 'toData', end.column );
|
330
324
|
|
331
325
|
// Be sure that is a DataTables controlled cell
|
332
326
|
if ( ! dt.cell( endCell ).any() ) {
|
@@ -334,7 +328,7 @@ $.extend( AutoFill.prototype, {
|
|
334
328
|
}
|
335
329
|
|
336
330
|
// if target is not in the columns available - do nothing
|
337
|
-
if ( dt.columns( this.c.columns ).indexes().indexOf(
|
331
|
+
if ( dt.columns( this.c.columns ).indexes().indexOf( colIndx ) === -1 ) {
|
338
332
|
return;
|
339
333
|
}
|
340
334
|
|
@@ -347,16 +341,10 @@ $.extend( AutoFill.prototype, {
|
|
347
341
|
left = start.column < end.column ? startCell : endCell;
|
348
342
|
right = start.column < end.column ? endCell : startCell;
|
349
343
|
|
350
|
-
top =
|
351
|
-
left =
|
352
|
-
height =
|
353
|
-
width =
|
354
|
-
|
355
|
-
var dtScroll = this.dom.dtScroll;
|
356
|
-
if ( dtScroll && this.dom.offsetParent[0] !== dt.table().node() ) {
|
357
|
-
top += dtScroll.scrollTop();
|
358
|
-
left += dtScroll.scrollLeft();
|
359
|
-
}
|
344
|
+
top = this._getPosition( top ).top;
|
345
|
+
left = this._getPosition( left ).left;
|
346
|
+
height = this._getPosition( bottom ).top + bottom.outerHeight() - top;
|
347
|
+
width = this._getPosition( right ).left + right.outerWidth() - left;
|
360
348
|
|
361
349
|
var select = this.dom.select;
|
362
350
|
select.top.css( {
|
@@ -486,7 +474,7 @@ $.extend( AutoFill.prototype, {
|
|
486
474
|
var namespace = this.s.namespace;
|
487
475
|
var focus = this.c.focus !== null ?
|
488
476
|
this.c.focus :
|
489
|
-
dt.settings()[0].keytable ?
|
477
|
+
dt.init().keys || dt.settings()[0].keytable ?
|
490
478
|
'focus' :
|
491
479
|
'hover';
|
492
480
|
|
@@ -528,6 +516,50 @@ $.extend( AutoFill.prototype, {
|
|
528
516
|
},
|
529
517
|
|
530
518
|
|
519
|
+
/**
|
520
|
+
* Get the position of a node, relative to another, including any scrolling
|
521
|
+
* offsets.
|
522
|
+
* @param {Node} node Node to get the position of
|
523
|
+
* @param {jQuery} targetParent Node to use as the parent
|
524
|
+
* @return {object} Offset calculation
|
525
|
+
* @private
|
526
|
+
*/
|
527
|
+
_getPosition: function ( node, targetParent )
|
528
|
+
{
|
529
|
+
var
|
530
|
+
currNode = $(node),
|
531
|
+
currOffsetParent,
|
532
|
+
position,
|
533
|
+
top = 0,
|
534
|
+
left = 0;
|
535
|
+
|
536
|
+
if ( ! targetParent ) {
|
537
|
+
targetParent = $( this.s.dt.table().node() ).offsetParent();
|
538
|
+
}
|
539
|
+
|
540
|
+
do {
|
541
|
+
position = currNode.position();
|
542
|
+
currOffsetParent = currNode.offsetParent();
|
543
|
+
|
544
|
+
top += position.top + currOffsetParent.scrollTop();
|
545
|
+
left += position.left + currOffsetParent.scrollLeft();
|
546
|
+
|
547
|
+
// Emergency fall back. Shouldn't happen, but just in case!
|
548
|
+
if ( currNode.get(0).nodeName.toLowerCase() === 'body' ) {
|
549
|
+
break;
|
550
|
+
}
|
551
|
+
|
552
|
+
currNode = currOffsetParent; // for next loop
|
553
|
+
}
|
554
|
+
while ( currOffsetParent.get(0) !== targetParent.get(0) )
|
555
|
+
|
556
|
+
return {
|
557
|
+
top: top,
|
558
|
+
left: left
|
559
|
+
};
|
560
|
+
},
|
561
|
+
|
562
|
+
|
531
563
|
/**
|
532
564
|
* Start mouse drag - selects the start cell
|
533
565
|
*
|
@@ -554,7 +586,7 @@ $.extend( AutoFill.prototype, {
|
|
554
586
|
} );
|
555
587
|
|
556
588
|
var select = this.dom.select;
|
557
|
-
var offsetParent = $(
|
589
|
+
var offsetParent = $( dt.table().node() ).offsetParent();
|
558
590
|
select.top.appendTo( offsetParent );
|
559
591
|
select.left.appendTo( offsetParent );
|
560
592
|
select.right.appendTo( offsetParent );
|
@@ -970,7 +1002,7 @@ AutoFill.actions = {
|
|
970
1002
|
* @static
|
971
1003
|
* @type String
|
972
1004
|
*/
|
973
|
-
AutoFill.version = '2.1.
|
1005
|
+
AutoFill.version = '2.1.3';
|
974
1006
|
|
975
1007
|
|
976
1008
|
/**
|
@@ -104,12 +104,11 @@ $.extend( DataTable.ext.buttons, {
|
|
104
104
|
},
|
105
105
|
init: function ( dt, button, conf ) {
|
106
106
|
var that = this;
|
107
|
-
var col = dt.column( conf.columns );
|
108
107
|
|
109
108
|
dt
|
110
109
|
.on( 'column-visibility.dt'+conf.namespace, function (e, settings) {
|
111
110
|
if ( ! settings.bDestroying ) {
|
112
|
-
that.active(
|
111
|
+
that.active( dt.column( conf.columns ).visible() );
|
113
112
|
}
|
114
113
|
} )
|
115
114
|
.on( 'column-reorder.dt'+conf.namespace, function (e, settings, details) {
|
@@ -129,7 +128,7 @@ $.extend( DataTable.ext.buttons, {
|
|
129
128
|
that.active( col.visible() );
|
130
129
|
} );
|
131
130
|
|
132
|
-
this.active(
|
131
|
+
this.active( dt.column( conf.columns ).visible() );
|
133
132
|
},
|
134
133
|
destroy: function ( dt, button, conf ) {
|
135
134
|
dt
|
@@ -745,14 +745,28 @@ function _createNode( doc, nodeName, opts ){
|
|
745
745
|
*/
|
746
746
|
function _excelColWidth( data, col ) {
|
747
747
|
var max = data.header[col].length;
|
748
|
-
var len;
|
748
|
+
var len, lineSplit, str;
|
749
749
|
|
750
750
|
if ( data.footer && data.footer[col].length > max ) {
|
751
751
|
max = data.footer[col].length;
|
752
752
|
}
|
753
753
|
|
754
754
|
for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
|
755
|
-
|
755
|
+
str = data.body[i][col].toString();
|
756
|
+
|
757
|
+
// If there is a newline character, workout the width of the column
|
758
|
+
// based on the longest line in the string
|
759
|
+
if ( str.indexOf('\n') !== -1 ) {
|
760
|
+
lineSplit = str.split('\n');
|
761
|
+
lineSplit.sort( function (a, b) {
|
762
|
+
return b.length - a.length;
|
763
|
+
} );
|
764
|
+
|
765
|
+
len = lineSplit[0].length;
|
766
|
+
}
|
767
|
+
else {
|
768
|
+
len = str.length;
|
769
|
+
}
|
756
770
|
|
757
771
|
if ( len > max ) {
|
758
772
|
max = len;
|
@@ -764,8 +778,10 @@ function _excelColWidth( data, col ) {
|
|
764
778
|
}
|
765
779
|
}
|
766
780
|
|
781
|
+
max *= 1.3;
|
782
|
+
|
767
783
|
// And a min width
|
768
|
-
return max >
|
784
|
+
return max > 6 ? max : 6;
|
769
785
|
}
|
770
786
|
|
771
787
|
try {
|
@@ -835,11 +851,9 @@ function _xlsxToStrings( obj ) {
|
|
835
851
|
str = str.replace( /_dt_b_namespace_token_/g, ':' );
|
836
852
|
}
|
837
853
|
|
838
|
-
//
|
839
|
-
//
|
840
|
-
str = str
|
841
|
-
.replace( /<row xmlns="" /g, '<row ' )
|
842
|
-
.replace( /<cols xmlns="">/g, '<cols>' );
|
854
|
+
// Safari, IE and Edge will put empty name space attributes onto
|
855
|
+
// various elements making them useless. This strips them out
|
856
|
+
str = str.replace( /<(.*?) xmlns=""(.*?)>/g, '<$1 $2>' );
|
843
857
|
|
844
858
|
obj[ name ] = str;
|
845
859
|
}
|
@@ -891,9 +905,17 @@ var excelStrings = {
|
|
891
905
|
'<sheetData/>'+
|
892
906
|
'</worksheet>',
|
893
907
|
|
894
|
-
"xl/styles.xml":
|
908
|
+
"xl/styles.xml":
|
895
909
|
'<?xml version="1.0" encoding="UTF-8"?>'+
|
896
910
|
'<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">'+
|
911
|
+
'<numFmts count="6">'+
|
912
|
+
'<numFmt numFmtId="164" formatCode="#,##0.00_-\ [$$-45C]"/>'+
|
913
|
+
'<numFmt numFmtId="165" formatCode=""£"#,##0.00"/>'+
|
914
|
+
'<numFmt numFmtId="166" formatCode="[$€-2]\ #,##0.00"/>'+
|
915
|
+
'<numFmt numFmtId="167" formatCode="0.0%"/>'+
|
916
|
+
'<numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/>'+
|
917
|
+
'<numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/>'+
|
918
|
+
'</numFmts>'+
|
897
919
|
'<fonts count="5" x14ac:knownFonts="1">'+
|
898
920
|
'<font>'+
|
899
921
|
'<sz val="11" />'+
|
@@ -977,7 +999,7 @@ var excelStrings = {
|
|
977
999
|
'<cellStyleXfs count="1">'+
|
978
1000
|
'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" />'+
|
979
1001
|
'</cellStyleXfs>'+
|
980
|
-
'<cellXfs count="
|
1002
|
+
'<cellXfs count="61">'+
|
981
1003
|
'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
|
982
1004
|
'<xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
|
983
1005
|
'<xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
|
@@ -1028,6 +1050,33 @@ var excelStrings = {
|
|
1028
1050
|
'<xf numFmtId="0" fontId="2" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
|
1029
1051
|
'<xf numFmtId="0" fontId="3" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
|
1030
1052
|
'<xf numFmtId="0" fontId="4" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
|
1053
|
+
'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
|
1054
|
+
'<alignment horizontal="left"/>'+
|
1055
|
+
'</xf>'+
|
1056
|
+
'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
|
1057
|
+
'<alignment horizontal="center"/>'+
|
1058
|
+
'</xf>'+
|
1059
|
+
'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
|
1060
|
+
'<alignment horizontal="right"/>'+
|
1061
|
+
'</xf>'+
|
1062
|
+
'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
|
1063
|
+
'<alignment horizontal="fill"/>'+
|
1064
|
+
'</xf>'+
|
1065
|
+
'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
|
1066
|
+
'<alignment textRotation="90"/>'+
|
1067
|
+
'</xf>'+
|
1068
|
+
'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
|
1069
|
+
'<alignment wrapText="1"/>'+
|
1070
|
+
'</xf>'+
|
1071
|
+
'<xf numFmtId="9" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1072
|
+
'<xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1073
|
+
'<xf numFmtId="165" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1074
|
+
'<xf numFmtId="166" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1075
|
+
'<xf numFmtId="167" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1076
|
+
'<xf numFmtId="168" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1077
|
+
'<xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1078
|
+
'<xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1079
|
+
'<xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
|
1031
1080
|
'</cellXfs>'+
|
1032
1081
|
'<cellStyles count="1">'+
|
1033
1082
|
'<cellStyle name="Normal" xfId="0" builtinId="0" />'+
|
@@ -1039,6 +1088,20 @@ var excelStrings = {
|
|
1039
1088
|
// Note we could use 3 `for` loops for the styles, but when gzipped there is
|
1040
1089
|
// virtually no difference in size, since the above can be easily compressed
|
1041
1090
|
|
1091
|
+
// Pattern matching for special number formats. Perhaps this should be exposed
|
1092
|
+
// via an API in future?
|
1093
|
+
var _excelSpecials = [
|
1094
|
+
{ match: /^\-?\d+\.\d%$/, style: 60, fmt: function (d) { return d/100; } }, // Precent with d.p.
|
1095
|
+
{ match: /^\-?\d+\.?\d*%$/, style: 56, fmt: function (d) { return d/100; } }, // Percent
|
1096
|
+
{ match: /^\-?\$[\d,]+.?\d*$/, style: 57 }, // Dollars
|
1097
|
+
{ match: /^\-?£[\d,]+.?\d*$/, style: 58 }, // Pounds
|
1098
|
+
{ match: /^\-?€[\d,]+.?\d*$/, style: 59 }, // Euros
|
1099
|
+
{ match: /^\([\d,]+\)$/, style: 61, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } }, // Negative numbers indicated by brackets
|
1100
|
+
{ match: /^\([\d,]+\.\d{2}\)$/, style: 62, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } }, // Negative numbers indicated by brackets - 2d.p.
|
1101
|
+
{ match: /^[\d,]+$/, style: 63 }, // Numbers with thousand separators
|
1102
|
+
{ match: /^[\d,]+\.\d{2}$/, style: 64 } // Numbers with 2d.p. and thousands separators
|
1103
|
+
];
|
1104
|
+
|
1042
1105
|
|
1043
1106
|
|
1044
1107
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
@@ -1166,58 +1229,85 @@ DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, {
|
|
1166
1229
|
for ( var i=0, ien=row.length ; i<ien ; i++ ) {
|
1167
1230
|
// Concat both the Cell Columns as a letter and the Row of the cell.
|
1168
1231
|
var cellId = createCellPos(i) + '' + currentRow;
|
1169
|
-
var cell;
|
1232
|
+
var cell = null;
|
1170
1233
|
|
1171
|
-
|
1172
|
-
|
1234
|
+
// For null, undefined of blank cell, continue so it doesn't create the _createNode
|
1235
|
+
if ( row[i] === null || row[i] === undefined || row[i] === '' ) {
|
1236
|
+
continue;
|
1173
1237
|
}
|
1174
1238
|
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
},
|
1187
|
-
children: [
|
1188
|
-
_createNode( rels, 'v', { text: row[i] } )
|
1189
|
-
]
|
1190
|
-
} );
|
1191
|
-
}
|
1192
|
-
else {
|
1193
|
-
// Replace non standard characters for text output
|
1194
|
-
var text = ! row[i].replace ?
|
1195
|
-
row[i] :
|
1196
|
-
row[i]
|
1197
|
-
.replace(/&(?!amp;)/g, '&')
|
1198
|
-
.replace(/</g, '<')
|
1199
|
-
.replace(/>/g, '>')
|
1200
|
-
.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, '');
|
1201
|
-
|
1202
|
-
cell = _createNode( rels, 'c', {
|
1203
|
-
attr: {
|
1204
|
-
t: 'inlineStr',
|
1205
|
-
r: cellId
|
1206
|
-
},
|
1207
|
-
children:{
|
1208
|
-
row: _createNode( rels, 'is', {
|
1209
|
-
children: {
|
1210
|
-
row: _createNode( rels, 't', {
|
1211
|
-
text: text
|
1212
|
-
} )
|
1213
|
-
}
|
1214
|
-
} )
|
1239
|
+
row[i] = $.trim( row[i] );
|
1240
|
+
|
1241
|
+
// Special number formatting options
|
1242
|
+
for ( var j=0, jen=_excelSpecials.length ; j<jen ; j++ ) {
|
1243
|
+
var special = _excelSpecials[j];
|
1244
|
+
|
1245
|
+
if ( row[i].match && row[i].match( special.match ) ) {
|
1246
|
+
var val = row[i].replace(/[^\d\.\-]/g, '');
|
1247
|
+
|
1248
|
+
if ( special.fmt ) {
|
1249
|
+
val = special.fmt( val );
|
1215
1250
|
}
|
1216
|
-
|
1251
|
+
|
1252
|
+
cell = _createNode( rels, 'c', {
|
1253
|
+
attr: {
|
1254
|
+
r: cellId,
|
1255
|
+
s: special.style
|
1256
|
+
},
|
1257
|
+
children: [
|
1258
|
+
_createNode( rels, 'v', { text: val } )
|
1259
|
+
]
|
1260
|
+
} );
|
1261
|
+
|
1262
|
+
break;
|
1263
|
+
}
|
1264
|
+
}
|
1265
|
+
|
1266
|
+
if ( ! cell ) {
|
1267
|
+
if ( typeof row[i] === 'number' || (
|
1268
|
+
row[i].match &&
|
1269
|
+
row[i].match(/^-?\d+(\.\d+)?$/) &&
|
1270
|
+
! row[i].match(/^0\d+/) )
|
1271
|
+
) {
|
1272
|
+
// Detect numbers - don't match numbers with leading zeros
|
1273
|
+
// or a negative anywhere but the start
|
1274
|
+
cell = _createNode( rels, 'c', {
|
1275
|
+
attr: {
|
1276
|
+
t: 'n',
|
1277
|
+
r: cellId
|
1278
|
+
},
|
1279
|
+
children: [
|
1280
|
+
_createNode( rels, 'v', { text: row[i] } )
|
1281
|
+
]
|
1282
|
+
} );
|
1283
|
+
}
|
1284
|
+
else {
|
1285
|
+
// String output - replace non standard characters for text output
|
1286
|
+
var text = ! row[i].replace ?
|
1287
|
+
row[i] :
|
1288
|
+
row[i].replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, '');
|
1289
|
+
|
1290
|
+
cell = _createNode( rels, 'c', {
|
1291
|
+
attr: {
|
1292
|
+
t: 'inlineStr',
|
1293
|
+
r: cellId
|
1294
|
+
},
|
1295
|
+
children:{
|
1296
|
+
row: _createNode( rels, 'is', {
|
1297
|
+
children: {
|
1298
|
+
row: _createNode( rels, 't', {
|
1299
|
+
text: text
|
1300
|
+
} )
|
1301
|
+
}
|
1302
|
+
} )
|
1303
|
+
}
|
1304
|
+
} );
|
1305
|
+
}
|
1217
1306
|
}
|
1218
1307
|
|
1219
1308
|
rowNode.appendChild( cell );
|
1220
1309
|
}
|
1310
|
+
|
1221
1311
|
relsGet.appendChild(rowNode);
|
1222
1312
|
rowPos++;
|
1223
1313
|
};
|
@@ -1299,7 +1389,7 @@ DataTable.ext.buttons.pdfFlash = $.extend( {}, flashButton, {
|
|
1299
1389
|
|
1300
1390
|
_setText( flash, JSON.stringify( {
|
1301
1391
|
title: _filename(config, false),
|
1302
|
-
message:
|
1392
|
+
message: typeof config.message == 'function' ? config.message(dt, button, config) : config.message,
|
1303
1393
|
colWidth: ratios.toArray(),
|
1304
1394
|
orientation: config.orientation,
|
1305
1395
|
size: config.pageSize,
|