/*! * Print button for Buttons and DataTables. * © SpryMedia Ltd - datatables.net/license */ (function( factory ){ if ( typeof define === 'function' && define.amd ) { // AMD define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) { return factory( $, window, document ); } ); } else if ( typeof exports === 'object' ) { // CommonJS var jq = require('jquery'); var cjsRequires = function (root, $) { if ( ! $.fn.dataTable ) { require('datatables.net')(root, $); } if ( ! $.fn.dataTable.Buttons ) { require('datatables.net-buttons')(root, $); } }; if (typeof window === 'undefined') { module.exports = function (root, $) { if ( ! root ) { // CommonJS environments without a window global must pass a // root. This will give an error otherwise root = window; } if ( ! $ ) { $ = jq( root ); } cjsRequires( root, $ ); return factory( $, root, root.document ); }; } else { cjsRequires( window, jq ); module.exports = factory( jq, window, window.document ); } } else { // Browser factory( jQuery, window, document ); } }(function( $, window, document, undefined ) { 'use strict'; var DataTable = $.fn.dataTable; var _link = document.createElement('a'); /** * Clone link and style tags, taking into account the need to change the source * path. * * @param {node} el Element to convert */ var _styleToAbs = function (el) { var url; var clone = $(el).clone()[0]; var linkHost; if (clone.nodeName.toLowerCase() === 'link') { clone.href = _relToAbs(clone.href); } return clone.outerHTML; }; /** * Convert a URL from a relative to an absolute address so it will work * correctly in the popup window which has no base URL. * * @param {string} href URL */ var _relToAbs = function (href) { // Assign to a link on the original page so the browser will do all the // hard work of figuring out where the file actually is _link.href = href; var linkHost = _link.host; // IE doesn't have a trailing slash on the host // Chrome has it on the pathname if (linkHost.indexOf('/') === -1 && _link.pathname.indexOf('/') !== 0) { linkHost += '/'; } return _link.protocol + '//' + linkHost + _link.pathname + _link.search; }; DataTable.ext.buttons.print = { className: 'buttons-print', text: function (dt) { return dt.i18n('buttons.print', 'Print'); }, action: function (e, dt, button, config) { var data = dt.buttons.exportData( $.extend({ decodeEntities: false }, config.exportOptions) // XSS protection ); var exportInfo = dt.buttons.exportInfo(config); var columnClasses = dt .columns(config.exportOptions.columns) .flatten() .map(function (idx) { return dt.settings()[0].aoColumns[dt.column(idx).index()].sClass; }) .toArray(); var addRow = function (d, tag) { var str = '