jquery-datatables 1.10.13 → 1.10.15
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/README.md +2 -3
- data/Rakefile +1 -1
- data/app/assets/javascripts/datatables/dataTables.bootstrap2.js +162 -0
- data/app/assets/javascripts/datatables/dataTables.bootstrap4.js +7 -7
- data/app/assets/javascripts/datatables/dataTables.semanticui.js +2 -2
- data/app/assets/javascripts/datatables/extensions/AutoFill/dataTables.autoFill.js +104 -13
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.colVis.js +17 -9
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.flash.js +41 -15
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.html5.js +48 -18
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.print.js +29 -13
- data/app/assets/javascripts/datatables/extensions/Buttons/dataTables.buttons.js +46 -5
- data/app/assets/javascripts/datatables/extensions/ColReorder/dataTables.colReorder.js +37 -19
- data/app/assets/javascripts/datatables/extensions/KeyTable/dataTables.keyTable.js +65 -37
- data/app/assets/javascripts/datatables/extensions/RowGroup/dataTables.rowGroup.js +386 -0
- data/app/assets/javascripts/datatables/extensions/Select/dataTables.select.js +24 -14
- data/app/assets/javascripts/datatables/jquery.dataTables.js +48 -10
- data/app/assets/stylesheets/datatables/dataTables.bootstrap.css +7 -7
- data/app/assets/stylesheets/datatables/dataTables.bootstrap2.css +178 -0
- data/app/assets/stylesheets/datatables/dataTables.bootstrap4.css +1 -0
- data/app/assets/stylesheets/datatables/dataTables.foundation.css +8 -6
- data/app/assets/stylesheets/datatables/dataTables.jqueryui.css +6 -5
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.bootstrap.css +56 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.bootstrap4.css +56 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.dataTables.css +56 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.foundation.css +60 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.jqueryui.css +56 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.semanticui.css +57 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/mixins.scss +47 -0
- data/app/assets/stylesheets/datatables/extensions/RowGroup/rowGroup.bootstrap.css +4 -0
- data/app/assets/stylesheets/datatables/extensions/RowGroup/rowGroup.bootstrap4.css +4 -0
- data/app/assets/stylesheets/datatables/extensions/RowGroup/rowGroup.dataTables.css +4 -0
- data/app/assets/stylesheets/datatables/extensions/RowGroup/rowGroup.foundation.css +4 -0
- data/app/assets/stylesheets/datatables/extensions/RowGroup/rowGroup.jqueryui.css +4 -0
- data/app/assets/stylesheets/datatables/extensions/RowGroup/rowGroup.semanticui.css +4 -0
- data/app/assets/stylesheets/datatables/extensions/Select/select.bootstrap.css +7 -7
- data/app/assets/stylesheets/datatables/extensions/Select/select.bootstrap4.css +7 -7
- data/app/assets/stylesheets/datatables/extensions/Select/select.dataTables.css +7 -7
- data/app/assets/stylesheets/datatables/extensions/Select/select.foundation.css +7 -7
- data/app/assets/stylesheets/datatables/extensions/Select/select.jqueryui.css +7 -7
- data/app/assets/stylesheets/datatables/extensions/Select/select.semanticui.css +7 -7
- data/app/assets/stylesheets/datatables/jquery.dataTables.css +14 -11
- data/lib/generators/jquery/datatables/templates/bootstrap2.css.tt +15 -0
- data/lib/generators/jquery/datatables/templates/bootstrap2.js.tt +22 -0
- data/lib/jquery-datatables/version.rb +1 -1
- metadata +14 -3
| @@ -752,7 +752,10 @@ function _excelColWidth( data, col ) { | |
| 752 752 | 
             
            	}
         | 
| 753 753 |  | 
| 754 754 | 
             
            	for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
         | 
| 755 | 
            -
            		 | 
| 755 | 
            +
            		var point = data.body[i][col];
         | 
| 756 | 
            +
            		str = point !== null && point !== undefined ?
         | 
| 757 | 
            +
            			point.toString() :
         | 
| 758 | 
            +
            			'';
         | 
| 756 759 |  | 
| 757 760 | 
             
            		// If there is a newline character, workout the width of the column
         | 
| 758 761 | 
             
            		// based on the longest line in the string
         | 
| @@ -774,7 +777,7 @@ function _excelColWidth( data, col ) { | |
| 774 777 |  | 
| 775 778 | 
             
            		// Max width rather than having potentially massive column widths
         | 
| 776 779 | 
             
            		if ( max > 40 ) {
         | 
| 777 | 
            -
            			 | 
| 780 | 
            +
            			return 52; // 40 * 1.3
         | 
| 778 781 | 
             
            		}
         | 
| 779 782 | 
             
            	}
         | 
| 780 783 |  | 
| @@ -784,11 +787,19 @@ function _excelColWidth( data, col ) { | |
| 784 787 | 
             
            	return max > 6 ? max : 6;
         | 
| 785 788 | 
             
            }
         | 
| 786 789 |  | 
| 787 | 
            -
             | 
| 788 | 
            -
             | 
| 789 | 
            -
             | 
| 790 | 
            -
             | 
| 791 | 
            -
             | 
| 790 | 
            +
              var _serialiser = "";
         | 
| 791 | 
            +
                if (typeof window.XMLSerializer === 'undefined') {
         | 
| 792 | 
            +
                    _serialiser = new function () {
         | 
| 793 | 
            +
                        this.serializeToString = function (input) {
         | 
| 794 | 
            +
                            return input.xml
         | 
| 795 | 
            +
                        }
         | 
| 796 | 
            +
                    };
         | 
| 797 | 
            +
                } else {
         | 
| 798 | 
            +
                    _serialiser =  new XMLSerializer();
         | 
| 799 | 
            +
                }
         | 
| 800 | 
            +
             | 
| 801 | 
            +
                var _ieExcel;
         | 
| 802 | 
            +
             | 
| 792 803 |  | 
| 793 804 | 
             
            /**
         | 
| 794 805 | 
             
             * Convert XML documents in an object to strings
         | 
| @@ -853,7 +864,7 @@ function _xlsxToStrings( obj ) { | |
| 853 864 |  | 
| 854 865 | 
             
            			// Safari, IE and Edge will put empty name space attributes onto
         | 
| 855 866 | 
             
            			// various elements making them useless. This strips them out
         | 
| 856 | 
            -
            			str = str.replace( /<( | 
| 867 | 
            +
            			str = str.replace( /<([^<>]*?) xmlns=""([^<>]*?)>/g, '<$1 $2>' );
         | 
| 857 868 |  | 
| 858 869 | 
             
            			obj[ name ] = str;
         | 
| 859 870 | 
             
            		}
         | 
| @@ -1010,11 +1021,11 @@ var excelStrings = { | |
| 1010 1021 | 
             
            				'<xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1011 1022 | 
             
            				'<xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1012 1023 | 
             
            				'<xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1013 | 
            -
            				'<xf numFmtId="0" fontId="0" fillId=" | 
| 1014 | 
            -
            				'<xf numFmtId="0" fontId="1" fillId=" | 
| 1015 | 
            -
            				'<xf numFmtId="0" fontId="2" fillId=" | 
| 1016 | 
            -
            				'<xf numFmtId="0" fontId="3" fillId=" | 
| 1017 | 
            -
            				'<xf numFmtId="0" fontId="4" fillId=" | 
| 1024 | 
            +
            				'<xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1025 | 
            +
            				'<xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1026 | 
            +
            				'<xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1027 | 
            +
            				'<xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1028 | 
            +
            				'<xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1018 1029 | 
             
            				'<xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1019 1030 | 
             
            				'<xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 1020 1031 | 
             
            				'<xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| @@ -1109,7 +1120,7 @@ var _excelSpecials = [ | |
| 1109 1120 | 
             
             */
         | 
| 1110 1121 |  | 
| 1111 1122 | 
             
            // Set the default SWF path
         | 
| 1112 | 
            -
            DataTable.Buttons.swfPath = '//cdn.datatables.net/buttons/1.2. | 
| 1123 | 
            +
            DataTable.Buttons.swfPath = '//cdn.datatables.net/buttons/1.2.4/swf/flashExport.swf';
         | 
| 1113 1124 |  | 
| 1114 1125 | 
             
            // Method to allow Flash buttons to be resized when made visible - as they are
         | 
| 1115 1126 | 
             
            // of zero height and width if initialised hidden
         | 
| @@ -1140,6 +1151,8 @@ DataTable.ext.buttons.copyFlash = $.extend( {}, flashButton, { | |
| 1140 1151 | 
             
            			return;
         | 
| 1141 1152 | 
             
            		}
         | 
| 1142 1153 |  | 
| 1154 | 
            +
            		this.processing( true );
         | 
| 1155 | 
            +
             | 
| 1143 1156 | 
             
            		var flash = config._flash;
         | 
| 1144 1157 | 
             
            		var data = _exportData( dt, config );
         | 
| 1145 1158 | 
             
            		var output = config.customize ?
         | 
| @@ -1149,6 +1162,8 @@ DataTable.ext.buttons.copyFlash = $.extend( {}, flashButton, { | |
| 1149 1162 | 
             
            		flash.setAction( 'copy' );
         | 
| 1150 1163 | 
             
            		_setText( flash, output );
         | 
| 1151 1164 |  | 
| 1165 | 
            +
            		this.processing( false );
         | 
| 1166 | 
            +
             | 
| 1152 1167 | 
             
            		dt.buttons.info(
         | 
| 1153 1168 | 
             
            			dt.i18n( 'buttons.copyTitle', 'Copy to clipboard' ),
         | 
| 1154 1169 | 
             
            			dt.i18n( 'buttons.copySuccess', {
         | 
| @@ -1197,6 +1212,8 @@ DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, { | |
| 1197 1212 | 
             
            	},
         | 
| 1198 1213 |  | 
| 1199 1214 | 
             
            	action: function ( e, dt, button, config ) {
         | 
| 1215 | 
            +
            		this.processing( true );
         | 
| 1216 | 
            +
             | 
| 1200 1217 | 
             
            		var flash = config._flash;
         | 
| 1201 1218 | 
             
            		var rowPos = 0;
         | 
| 1202 1219 | 
             
            		var rels = $.parseXML( excelStrings['xl/worksheets/sheet1.xml'] ) ; //Parses xml
         | 
| @@ -1242,7 +1259,10 @@ DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, { | |
| 1242 1259 | 
             
            				for ( var j=0, jen=_excelSpecials.length ; j<jen ; j++ ) {
         | 
| 1243 1260 | 
             
            					var special = _excelSpecials[j];
         | 
| 1244 1261 |  | 
| 1245 | 
            -
            					 | 
| 1262 | 
            +
            					// TODO Need to provide the ability for the specials to say
         | 
| 1263 | 
            +
            					// if they are returning a string, since at the moment it is
         | 
| 1264 | 
            +
            					// assumed to be a number
         | 
| 1265 | 
            +
            					if ( row[i].match && ! row[i].match(/^0\d+/) && row[i].match( special.match ) ) {
         | 
| 1246 1266 | 
             
            						var val = row[i].replace(/[^\d\.\-]/g, '');
         | 
| 1247 1267 |  | 
| 1248 1268 | 
             
            						if ( special.fmt ) {
         | 
| @@ -1358,6 +1378,8 @@ DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, { | |
| 1358 1378 | 
             
            		flash.setFileName( _filename( config ) );
         | 
| 1359 1379 | 
             
            		flash.setSheetData( xlsx );
         | 
| 1360 1380 | 
             
            		_setText( flash, '' );
         | 
| 1381 | 
            +
             | 
| 1382 | 
            +
            		this.processing( false );
         | 
| 1361 1383 | 
             
            	},
         | 
| 1362 1384 |  | 
| 1363 1385 | 
             
            	extension: '.xlsx'
         | 
| @@ -1374,6 +1396,8 @@ DataTable.ext.buttons.pdfFlash = $.extend( {}, flashButton, { | |
| 1374 1396 | 
             
            	},
         | 
| 1375 1397 |  | 
| 1376 1398 | 
             
            	action: function ( e, dt, button, config ) {
         | 
| 1399 | 
            +
            		this.processing( true );
         | 
| 1400 | 
            +
             | 
| 1377 1401 | 
             
            		// Set the text
         | 
| 1378 1402 | 
             
            		var flash = config._flash;
         | 
| 1379 1403 | 
             
            		var data = dt.buttons.exportData( config.exportOptions );
         | 
| @@ -1397,6 +1421,8 @@ DataTable.ext.buttons.pdfFlash = $.extend( {}, flashButton, { | |
| 1397 1421 | 
             
            			footer:      config.footer ? data.footer : null,
         | 
| 1398 1422 | 
             
            			body:        data.body
         | 
| 1399 1423 | 
             
            		} ) );
         | 
| 1424 | 
            +
             | 
| 1425 | 
            +
            		this.processing( false );
         | 
| 1400 1426 | 
             
            	},
         | 
| 1401 1427 |  | 
| 1402 1428 | 
             
            	extension: '.pdf',
         | 
| @@ -473,7 +473,7 @@ function _addToZip( zip, obj ) { | |
| 473 473 |  | 
| 474 474 | 
             
            			// Safari, IE and Edge will put empty name space attributes onto
         | 
| 475 475 | 
             
            			// various elements making them useless. This strips them out
         | 
| 476 | 
            -
            			str = str.replace( /<( | 
| 476 | 
            +
            			str = str.replace( /<([^<>]*?) xmlns=""([^<>]*?)>/g, '<$1 $2>' );
         | 
| 477 477 |  | 
| 478 478 | 
             
            			zip.file( name, str );
         | 
| 479 479 | 
             
            		}
         | 
| @@ -527,7 +527,10 @@ function _excelColWidth( data, col ) { | |
| 527 527 | 
             
            	}
         | 
| 528 528 |  | 
| 529 529 | 
             
            	for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
         | 
| 530 | 
            -
            		 | 
| 530 | 
            +
            		var point = data.body[i][col];
         | 
| 531 | 
            +
            		str = point !== null && point !== undefined ?
         | 
| 532 | 
            +
            			point.toString() :
         | 
| 533 | 
            +
            			'';
         | 
| 531 534 |  | 
| 532 535 | 
             
            		// If there is a newline character, workout the width of the column
         | 
| 533 536 | 
             
            		// based on the longest line in the string
         | 
| @@ -549,7 +552,7 @@ function _excelColWidth( data, col ) { | |
| 549 552 |  | 
| 550 553 | 
             
            		// Max width rather than having potentially massive column widths
         | 
| 551 554 | 
             
            		if ( max > 40 ) {
         | 
| 552 | 
            -
            			 | 
| 555 | 
            +
            			return 52; // 40 * 1.3
         | 
| 553 556 | 
             
            		}
         | 
| 554 557 | 
             
            	}
         | 
| 555 558 |  | 
| @@ -698,7 +701,7 @@ var excelStrings = { | |
| 698 701 | 
             
            			'<cellStyleXfs count="1">'+
         | 
| 699 702 | 
             
            				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" />'+
         | 
| 700 703 | 
             
            			'</cellStyleXfs>'+
         | 
| 701 | 
            -
            			'<cellXfs count=" | 
| 704 | 
            +
            			'<cellXfs count="67">'+
         | 
| 702 705 | 
             
            				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 703 706 | 
             
            				'<xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 704 707 | 
             
            				'<xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| @@ -709,11 +712,11 @@ var excelStrings = { | |
| 709 712 | 
             
            				'<xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 710 713 | 
             
            				'<xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 711 714 | 
             
            				'<xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 712 | 
            -
            				'<xf numFmtId="0" fontId="0" fillId=" | 
| 713 | 
            -
            				'<xf numFmtId="0" fontId="1" fillId=" | 
| 714 | 
            -
            				'<xf numFmtId="0" fontId="2" fillId=" | 
| 715 | 
            -
            				'<xf numFmtId="0" fontId="3" fillId=" | 
| 716 | 
            -
            				'<xf numFmtId="0" fontId="4" fillId=" | 
| 715 | 
            +
            				'<xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 716 | 
            +
            				'<xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 717 | 
            +
            				'<xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 718 | 
            +
            				'<xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 719 | 
            +
            				'<xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 717 720 | 
             
            				'<xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 718 721 | 
             
            				'<xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| 719 722 | 
             
            				'<xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
         | 
| @@ -776,6 +779,8 @@ var excelStrings = { | |
| 776 779 | 
             
            				'<xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
         | 
| 777 780 | 
             
            				'<xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
         | 
| 778 781 | 
             
            				'<xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
         | 
| 782 | 
            +
            				'<xf numFmtId="1" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
         | 
| 783 | 
            +
            				'<xf numFmtId="2" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
         | 
| 779 784 | 
             
            			'</cellXfs>'+
         | 
| 780 785 | 
             
            			'<cellStyles count="1">'+
         | 
| 781 786 | 
             
            				'<cellStyle name="Normal" xfId="0" builtinId="0" />'+
         | 
| @@ -797,10 +802,12 @@ var _excelSpecials = [ | |
| 797 802 | 
             
            	{ match: /^\-?\$[\d,]+.?\d*$/,  style: 57 }, // Dollars
         | 
| 798 803 | 
             
            	{ match: /^\-?£[\d,]+.?\d*$/,   style: 58 }, // Pounds
         | 
| 799 804 | 
             
            	{ match: /^\-?€[\d,]+.?\d*$/,   style: 59 }, // Euros
         | 
| 805 | 
            +
            	{ match: /^\-?\d+$/,            style: 65 }, // Numbers without thousand separators
         | 
| 806 | 
            +
            	{ match: /^\-?\d+\.\d{2}$/,     style: 66 }, // Numbers 2 d.p. without thousands separators
         | 
| 800 807 | 
             
            	{ match: /^\([\d,]+\)$/,        style: 61, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } },  // Negative numbers indicated by brackets
         | 
| 801 808 | 
             
            	{ match: /^\([\d,]+\.\d{2}\)$/, style: 62, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } },  // Negative numbers indicated by brackets - 2d.p.
         | 
| 802 | 
            -
            	{ match:  | 
| 803 | 
            -
            	{ match:  | 
| 809 | 
            +
            	{ match: /^\-?[\d,]+$/,         style: 63 }, // Numbers with thousand separators
         | 
| 810 | 
            +
            	{ match: /^\-?[\d,]+\.\d{2}$/,  style: 64 }  // Numbers with 2 d.p. and thousands separators
         | 
| 804 811 | 
             
            ];
         | 
| 805 812 |  | 
| 806 813 |  | 
| @@ -820,6 +827,9 @@ DataTable.ext.buttons.copyHtml5 = { | |
| 820 827 | 
             
            	},
         | 
| 821 828 |  | 
| 822 829 | 
             
            	action: function ( e, dt, button, config ) {
         | 
| 830 | 
            +
            		this.processing( true );
         | 
| 831 | 
            +
             | 
| 832 | 
            +
            		var that = this;
         | 
| 823 833 | 
             
            		var exportData = _exportData( dt, config );
         | 
| 824 834 | 
             
            		var output = exportData.str;
         | 
| 825 835 | 
             
            		var hiddenDiv = $('<div/>')
         | 
| @@ -859,6 +869,8 @@ DataTable.ext.buttons.copyHtml5 = { | |
| 859 869 | 
             
            						}, exportData.rows ),
         | 
| 860 870 | 
             
            						2000
         | 
| 861 871 | 
             
            					);
         | 
| 872 | 
            +
             | 
| 873 | 
            +
            					this.processing( false );
         | 
| 862 874 | 
             
            					return;
         | 
| 863 875 | 
             
            				}
         | 
| 864 876 | 
             
            			}
         | 
| @@ -892,10 +904,12 @@ DataTable.ext.buttons.copyHtml5 = { | |
| 892 904 | 
             
            			.on( 'keydown.buttons-copy', function (e) {
         | 
| 893 905 | 
             
            				if ( e.keyCode === 27 ) { // esc
         | 
| 894 906 | 
             
            					close();
         | 
| 907 | 
            +
            					that.processing( false );
         | 
| 895 908 | 
             
            				}
         | 
| 896 909 | 
             
            			} )
         | 
| 897 910 | 
             
            			.on( 'copy.buttons-copy cut.buttons-copy', function () {
         | 
| 898 911 | 
             
            				close();
         | 
| 912 | 
            +
            				that.processing( false );
         | 
| 899 913 | 
             
            			} );
         | 
| 900 914 | 
             
            	},
         | 
| 901 915 |  | 
| @@ -927,6 +941,8 @@ DataTable.ext.buttons.csvHtml5 = { | |
| 927 941 | 
             
            	},
         | 
| 928 942 |  | 
| 929 943 | 
             
            	action: function ( e, dt, button, config ) {
         | 
| 944 | 
            +
            		this.processing( true );
         | 
| 945 | 
            +
             | 
| 930 946 | 
             
            		// Set the text
         | 
| 931 947 | 
             
            		var output = _exportData( dt, config ).str;
         | 
| 932 948 | 
             
            		var charset = config.charset;
         | 
| @@ -957,6 +973,8 @@ DataTable.ext.buttons.csvHtml5 = { | |
| 957 973 | 
             
            			_filename( config ),
         | 
| 958 974 | 
             
            			true
         | 
| 959 975 | 
             
            		);
         | 
| 976 | 
            +
             | 
| 977 | 
            +
            		this.processing( false );
         | 
| 960 978 | 
             
            	},
         | 
| 961 979 |  | 
| 962 980 | 
             
            	filename: '*',
         | 
| @@ -993,6 +1011,9 @@ DataTable.ext.buttons.excelHtml5 = { | |
| 993 1011 | 
             
            	},
         | 
| 994 1012 |  | 
| 995 1013 | 
             
            	action: function ( e, dt, button, config ) {
         | 
| 1014 | 
            +
            		this.processing( true );
         | 
| 1015 | 
            +
             | 
| 1016 | 
            +
            		var that = this;
         | 
| 996 1017 | 
             
            		var rowPos = 0;
         | 
| 997 1018 | 
             
            		var getXml = function ( type ) {
         | 
| 998 1019 | 
             
            			var str = excelStrings[ type ];
         | 
| @@ -1044,7 +1065,10 @@ DataTable.ext.buttons.excelHtml5 = { | |
| 1044 1065 | 
             
            				for ( var j=0, jen=_excelSpecials.length ; j<jen ; j++ ) {
         | 
| 1045 1066 | 
             
            					var special = _excelSpecials[j];
         | 
| 1046 1067 |  | 
| 1047 | 
            -
            					 | 
| 1068 | 
            +
            					// TODO Need to provide the ability for the specials to say
         | 
| 1069 | 
            +
            					// if they are returning a string, since at the moment it is
         | 
| 1070 | 
            +
            					// assumed to be a number
         | 
| 1071 | 
            +
            					if ( row[i].match && ! row[i].match(/^0\d+/) && row[i].match( special.match ) ) {
         | 
| 1048 1072 | 
             
            						var val = row[i].replace(/[^\d\.\-]/g, '');
         | 
| 1049 1073 |  | 
| 1050 1074 | 
             
            						if ( special.fmt ) {
         | 
| @@ -1169,6 +1193,7 @@ DataTable.ext.buttons.excelHtml5 = { | |
| 1169 1193 | 
             
            				.generateAsync( zipConfig )
         | 
| 1170 1194 | 
             
            				.then( function ( blob ) {
         | 
| 1171 1195 | 
             
            					_saveAs( blob, _filename( config ) );
         | 
| 1196 | 
            +
            					that.processing( false );
         | 
| 1172 1197 | 
             
            				} );
         | 
| 1173 1198 | 
             
            		}
         | 
| 1174 1199 | 
             
            		else {
         | 
| @@ -1177,6 +1202,7 @@ DataTable.ext.buttons.excelHtml5 = { | |
| 1177 1202 | 
             
            				zip.generate( zipConfig ),
         | 
| 1178 1203 | 
             
            				_filename( config )
         | 
| 1179 1204 | 
             
            			);
         | 
| 1205 | 
            +
            			this.processing( false );
         | 
| 1180 1206 | 
             
            		}
         | 
| 1181 1207 | 
             
            	},
         | 
| 1182 1208 |  | 
| @@ -1206,7 +1232,9 @@ DataTable.ext.buttons.pdfHtml5 = { | |
| 1206 1232 | 
             
            	},
         | 
| 1207 1233 |  | 
| 1208 1234 | 
             
            	action: function ( e, dt, button, config ) {
         | 
| 1209 | 
            -
            		 | 
| 1235 | 
            +
            		this.processing( true );
         | 
| 1236 | 
            +
             | 
| 1237 | 
            +
            		var that = this;
         | 
| 1210 1238 | 
             
            		var data = dt.buttons.exportData( config.exportOptions );
         | 
| 1211 1239 | 
             
            		var rows = [];
         | 
| 1212 1240 |  | 
| @@ -1279,11 +1307,11 @@ DataTable.ext.buttons.pdfHtml5 = { | |
| 1279 1307 | 
             
            		};
         | 
| 1280 1308 |  | 
| 1281 1309 | 
             
            		if ( config.message ) {
         | 
| 1282 | 
            -
             | 
| 1283 | 
            -
             | 
| 1284 | 
            -
             | 
| 1285 | 
            -
             | 
| 1286 | 
            -
             | 
| 1310 | 
            +
            			doc.content.unshift( {
         | 
| 1311 | 
            +
            				text: typeof config.message == 'function' ? config.message(dt, button, config) : config.message,
         | 
| 1312 | 
            +
            				style: 'message',
         | 
| 1313 | 
            +
            				margin: [ 0, 0, 0, 12 ]
         | 
| 1314 | 
            +
            			} );
         | 
| 1287 1315 | 
             
            		}
         | 
| 1288 1316 |  | 
| 1289 1317 | 
             
            		if ( config.title ) {
         | 
| @@ -1302,12 +1330,14 @@ DataTable.ext.buttons.pdfHtml5 = { | |
| 1302 1330 |  | 
| 1303 1331 | 
             
            		if ( config.download === 'open' && ! _isDuffSafari() ) {
         | 
| 1304 1332 | 
             
            			pdf.open();
         | 
| 1333 | 
            +
            			this.processing( false );
         | 
| 1305 1334 | 
             
            		}
         | 
| 1306 1335 | 
             
            		else {
         | 
| 1307 1336 | 
             
            			pdf.getBuffer( function (buffer) {
         | 
| 1308 1337 | 
             
            				var blob = new Blob( [buffer], {type:'application/pdf'} );
         | 
| 1309 1338 |  | 
| 1310 1339 | 
             
            				_saveAs( blob, _filename( config ) );
         | 
| 1340 | 
            +
            				that.processing( false );
         | 
| 1311 1341 | 
             
            			} );
         | 
| 1312 1342 | 
             
            		}
         | 
| 1313 1343 | 
             
            	},
         | 
| @@ -40,30 +40,42 @@ var DataTable = $.fn.dataTable; | |
| 40 40 | 
             
            var _link = document.createElement( 'a' );
         | 
| 41 41 |  | 
| 42 42 | 
             
            /**
         | 
| 43 | 
            -
             *  | 
| 44 | 
            -
             *  | 
| 43 | 
            +
             * Clone link and style tags, taking into account the need to change the source
         | 
| 44 | 
            +
             * path.
         | 
| 45 45 | 
             
             *
         | 
| 46 46 | 
             
             * @param  {node}     el Element to convert
         | 
| 47 47 | 
             
             */
         | 
| 48 | 
            -
            var  | 
| 48 | 
            +
            var _styleToAbs = function( el ) {
         | 
| 49 49 | 
             
            	var url;
         | 
| 50 50 | 
             
            	var clone = $(el).clone()[0];
         | 
| 51 51 | 
             
            	var linkHost;
         | 
| 52 52 |  | 
| 53 53 | 
             
            	if ( clone.nodeName.toLowerCase() === 'link' ) {
         | 
| 54 | 
            -
            		 | 
| 55 | 
            -
             | 
| 54 | 
            +
            		clone.href = _relToAbs( clone.href );
         | 
| 55 | 
            +
            	}
         | 
| 56 56 |  | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
            		if ( linkHost.indexOf('/') === -1 && _link.pathname.indexOf('/') !== 0) {
         | 
| 60 | 
            -
            			linkHost += '/';
         | 
| 61 | 
            -
            		}
         | 
| 57 | 
            +
            	return clone.outerHTML;
         | 
| 58 | 
            +
            };
         | 
| 62 59 |  | 
| 63 | 
            -
             | 
| 60 | 
            +
            /**
         | 
| 61 | 
            +
             * Convert a URL from a relative to an absolute address so it will work
         | 
| 62 | 
            +
             * correctly in the popup window which has no base URL.
         | 
| 63 | 
            +
             *
         | 
| 64 | 
            +
             * @param  {string} href URL
         | 
| 65 | 
            +
             */
         | 
| 66 | 
            +
            var _relToAbs = function( href ) {
         | 
| 67 | 
            +
            	// Assign to a link on the original page so the browser will do all the
         | 
| 68 | 
            +
            	// hard work of figuring out where the file actually is
         | 
| 69 | 
            +
            	_link.href = href;
         | 
| 70 | 
            +
            	var linkHost = _link.host;
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            	// IE doesn't have a trailing slash on the host
         | 
| 73 | 
            +
            	// Chrome has it on the pathname
         | 
| 74 | 
            +
            	if ( linkHost.indexOf('/') === -1 && _link.pathname.indexOf('/') !== 0) {
         | 
| 75 | 
            +
            		linkHost += '/';
         | 
| 64 76 | 
             
            	}
         | 
| 65 77 |  | 
| 66 | 
            -
            	return  | 
| 78 | 
            +
            	return _link.protocol+"//"+linkHost+_link.pathname+_link.search;
         | 
| 67 79 | 
             
            };
         | 
| 68 80 |  | 
| 69 81 |  | 
| @@ -123,7 +135,7 @@ DataTable.ext.buttons.print = { | |
| 123 135 | 
             
            		// in the host document and then appended to the new window.
         | 
| 124 136 | 
             
            		var head = '<title>'+title+'</title>';
         | 
| 125 137 | 
             
            		$('style, link').each( function () {
         | 
| 126 | 
            -
            			head +=  | 
| 138 | 
            +
            			head += _styleToAbs( this );
         | 
| 127 139 | 
             
            		} );
         | 
| 128 140 |  | 
| 129 141 | 
             
            		try {
         | 
| @@ -146,6 +158,10 @@ DataTable.ext.buttons.print = { | |
| 146 158 |  | 
| 147 159 | 
             
            		$(win.document.body).addClass('dt-print-view');
         | 
| 148 160 |  | 
| 161 | 
            +
            		$('img', win.document.body).each( function ( i, img ) {
         | 
| 162 | 
            +
            			img.setAttribute( 'src', _relToAbs( img.getAttribute('src') ) );
         | 
| 163 | 
            +
            		} );
         | 
| 164 | 
            +
             | 
| 149 165 | 
             
            		if ( config.customize ) {
         | 
| 150 166 | 
             
            			config.customize( win );
         | 
| 151 167 | 
             
            		}
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            /*! Buttons for DataTables 1. | 
| 1 | 
            +
            /*! Buttons for DataTables 1.3.1
         | 
| 2 2 | 
             
             * ©2016 SpryMedia Ltd - datatables.net/license
         | 
| 3 3 | 
             
             */
         | 
| 4 4 |  | 
| @@ -48,6 +48,11 @@ var _dtButtons = DataTable.ext.buttons; | |
| 48 48 | 
             
             */
         | 
| 49 49 | 
             
            var Buttons = function( dt, config )
         | 
| 50 50 | 
             
            {
         | 
| 51 | 
            +
            	// If there is no config set it to an empty object
         | 
| 52 | 
            +
            	if ( typeof( config ) === 'undefined' ) {
         | 
| 53 | 
            +
            		config = {};	
         | 
| 54 | 
            +
            	}
         | 
| 55 | 
            +
            	
         | 
| 51 56 | 
             
            	// Allow a boolean true for defaults
         | 
| 52 57 | 
             
            	if ( config === true ) {
         | 
| 53 58 | 
             
            		config = {};
         | 
| @@ -253,6 +258,24 @@ $.extend( Buttons.prototype, { | |
| 253 258 | 
             
            		return $(button.node);
         | 
| 254 259 | 
             
            	},
         | 
| 255 260 |  | 
| 261 | 
            +
            	/**
         | 
| 262 | 
            +
            	 * Set / get a processing class on the selected button
         | 
| 263 | 
            +
            	 * @param  {boolean} flag true to add, false to remove, undefined to get
         | 
| 264 | 
            +
            	 * @return {boolean|Buttons} Getter value or this if a setter.
         | 
| 265 | 
            +
            	 */
         | 
| 266 | 
            +
            	processing: function ( node, flag )
         | 
| 267 | 
            +
            	{
         | 
| 268 | 
            +
            		var button = this._nodeToButton( node );
         | 
| 269 | 
            +
             | 
| 270 | 
            +
            		if ( flag === undefined ) {
         | 
| 271 | 
            +
            			return $(button.node).hasClass( 'processing' );
         | 
| 272 | 
            +
            		}
         | 
| 273 | 
            +
             | 
| 274 | 
            +
            		$(button.node).toggleClass( 'processing', flag );
         | 
| 275 | 
            +
             | 
| 276 | 
            +
            		return this;
         | 
| 277 | 
            +
            	},
         | 
| 278 | 
            +
             | 
| 256 279 | 
             
            	/**
         | 
| 257 280 | 
             
            	 * Remove a button.
         | 
| 258 281 | 
             
            	 * @param  {node} node Button node
         | 
| @@ -462,7 +485,8 @@ $.extend( Buttons.prototype, { | |
| 462 485 | 
             
            			if ( built.conf.buttons ) {
         | 
| 463 486 | 
             
            				var collectionDom = this.c.dom.collection;
         | 
| 464 487 | 
             
            				built.collection = $('<'+collectionDom.tag+'/>')
         | 
| 465 | 
            -
            					.addClass( collectionDom.className ) | 
| 488 | 
            +
            					.addClass( collectionDom.className )
         | 
| 489 | 
            +
            					.attr( 'role', 'menu') ;
         | 
| 466 490 | 
             
            				built.conf._collection = built.collection;
         | 
| 467 491 |  | 
| 468 492 | 
             
            				this._expandButton( built.buttons, built.conf.buttons, true, attachPoint );
         | 
| @@ -569,7 +593,7 @@ $.extend( Buttons.prototype, { | |
| 569 593 | 
             
            		}
         | 
| 570 594 |  | 
| 571 595 | 
             
            		if ( config.titleAttr ) {
         | 
| 572 | 
            -
            			button.attr( 'title', config.titleAttr );
         | 
| 596 | 
            +
            			button.attr( 'title', text( config.titleAttr ) );
         | 
| 573 597 | 
             
            		}
         | 
| 574 598 |  | 
| 575 599 | 
             
            		if ( ! config.namespace ) {
         | 
| @@ -1118,7 +1142,7 @@ Buttons.defaults = { | |
| 1118 1142 | 
             
             * @type {string}
         | 
| 1119 1143 | 
             
             * @static
         | 
| 1120 1144 | 
             
             */
         | 
| 1121 | 
            -
            Buttons.version = '1. | 
| 1145 | 
            +
            Buttons.version = '1.3.1';
         | 
| 1122 1146 |  | 
| 1123 1147 |  | 
| 1124 1148 | 
             
            $.extend( _dtButtons, {
         | 
| @@ -1399,6 +1423,19 @@ DataTable.Api.registerPlural( 'buttons().nodes()', 'button().node()', function ( | |
| 1399 1423 | 
             
            	return jq;
         | 
| 1400 1424 | 
             
            } );
         | 
| 1401 1425 |  | 
| 1426 | 
            +
            // Get / set button processing state
         | 
| 1427 | 
            +
            DataTable.Api.registerPlural( 'buttons().processing()', 'button().processing()', function ( flag ) {
         | 
| 1428 | 
            +
            	if ( flag === undefined ) {
         | 
| 1429 | 
            +
            		return this.map( function ( set ) {
         | 
| 1430 | 
            +
            			return set.inst.processing( set.node );
         | 
| 1431 | 
            +
            		} );
         | 
| 1432 | 
            +
            	}
         | 
| 1433 | 
            +
             | 
| 1434 | 
            +
            	return this.each( function ( set ) {
         | 
| 1435 | 
            +
            		set.inst.processing( set.node, flag );
         | 
| 1436 | 
            +
            	} );
         | 
| 1437 | 
            +
            } );
         | 
| 1438 | 
            +
             | 
| 1402 1439 | 
             
            // Get / set button text (i.e. the button labels)
         | 
| 1403 1440 | 
             
            DataTable.Api.registerPlural( 'buttons().text()', 'button().text()', function ( label ) {
         | 
| 1404 1441 | 
             
            	if ( label === undefined ) {
         | 
| @@ -1556,6 +1593,9 @@ var _exportData = function ( dt, inOpts ) | |
| 1556 1593 | 
             
            			return str;
         | 
| 1557 1594 | 
             
            		}
         | 
| 1558 1595 |  | 
| 1596 | 
            +
            		// Always remove script tags
         | 
| 1597 | 
            +
            		str = str.replace( /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '' );
         | 
| 1598 | 
            +
             | 
| 1559 1599 | 
             
            		if ( config.stripHtml ) {
         | 
| 1560 1600 | 
             
            			str = str.replace( /<[^>]*>/g, '' );
         | 
| 1561 1601 | 
             
            		}
         | 
| @@ -1589,7 +1629,8 @@ var _exportData = function ( dt, inOpts ) | |
| 1589 1629 | 
             
            		} ).toArray() :
         | 
| 1590 1630 | 
             
            		null;
         | 
| 1591 1631 |  | 
| 1592 | 
            -
            	var  | 
| 1632 | 
            +
            	var rowIndexes = dt.rows( config.rows, config.modifier ).indexes().toArray();
         | 
| 1633 | 
            +
            	var selectedCells = dt.cells( rowIndexes, config.columns );
         | 
| 1593 1634 | 
             
            	var cells = selectedCells
         | 
| 1594 1635 | 
             
            		.render( config.orthogonal )
         | 
| 1595 1636 | 
             
            		.toArray();
         |