DataTables Export Test
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.15/css/dataTables.bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/select/1.2.2/css/select.bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.15/js/dataTables.bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.3.1/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.3.1/js/buttons.bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.3.1/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/select/1.2.2/js/dataTables.select.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.1.1/js/dataTables.responsive.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.1.1/js/responsive.bootstrap.min.js"></script>
<main class="main container">
<h1>Export Test</h1>
<p>Viewport:
<strong>
<span class="visible-xs-inline">xs</span>
<span class="visible-sm-inline">sm</span>
<span class="visible-md-inline">md</span>
<span class="visible-lg-inline">lg</span>
</strong>
</p>
<button id="load-combined-columns">Combined Columns Page & Export</button>
<button id="load-separate-columns">Combined Columns Page; Separate Columns Export</button>
<hr />
<table id="leadInfoTable" class="display table table-bordered table-striped" width="100%">
<thead></thead>
<tbody></tbody>
</table>
</main>
CSS
a:link {
white-space: nowrap;
}
tr.new-lead {
font-weight: bold;
}
.modal .hidden-modal {
display: none;
}
.visible-modal-inline {
display: none;
}
.modal .visible-modal-inline {
display: inline;
}
.modal table > tr > td {
vertical-align: top;
}
JavaScript
// Generate dummy data for table
var numRows = 30000;
function generatePhone(n) {
// convert any number to a 10-character string
n = n.toString();
var l = n.length;
if (l > 9) {
return n.substr(l - 10, l);
}
l = 10 - l;
var phone = n;
for (var i = 0; i < l; i++) {
phone += '0';
}
return phone;
}
var data = [];
for (var i = 0; i < numRows; i++) {
// populate data with random numbers --
// that way table will still have to be sorted on load
var rand = Math.floor(Math.random() * 10000000000),
phone = generatePhone(rand);
data.push({
viewed: (rand % 5 > 0),
firstName: rand,
lastName: rand,
address: rand,
city: rand,
state: rand,
postal: rand,
workPhone: phone,
homePhone: phone,
age: rand,
mediaType: rand,
language: (rand % 3 > 0),
receivedDate: rand,
assignedDate: rand,
letterEligible: rand % 2
});
}
// layout for when DataTable has multiple pages:
// entries per page and paging buttonbar appear at bottom
$.pagedLayout = 'Bfrt' // buttons, filter, processing, table
+ '<"row paged-layout"' + '<"col-sm-3 col-md-push-5"l>' // length
+ '<"col-sm-9 col-md-5 col-md-push-4"p>' // paging
+ '<"col-sm-12 col-md-4 col-md-pull-8"i>' // info
+ '>';
// responsive settings
var defaultResponsiveRenderer = function(api, rowIdx, columns) {
// Copy the row to a two-column table inside the modal.
// First column will be the column's title,
// second column will be its content.
var modalContent = $('<div/>'),
table = $('<table class="table"/>'),
errors;
$.each(columns, function(i) {
// get the node for the current table cell.
var colNode = $(api.cell(rowIdx, i).node());
// ignore cells that aren't supposed to be rendered
// inside the modal.
if (colNode.hasClass('launch-modal') || colNode.hasClass('select-checkbox') || colNode.hasClass('hidden-modal')) {
return;
}
// insert error messages after table
if...