| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 | 
							- /*!
 
-  * Print button for Buttons and DataTables.
 
-  * 2016 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
 
- 		module.exports = function (root, $) {
 
- 			if ( ! root ) {
 
- 				root = window;
 
- 			}
 
- 			if ( ! $ || ! $.fn.dataTable ) {
 
- 				$ = require('datatables.net')(root, $).$;
 
- 			}
 
- 			if ( ! $.fn.dataTable.Buttons ) {
 
- 				require('datatables.net-buttons')(root, $);
 
- 			}
 
- 			return factory( $, root, root.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 = '<tr>';
 
- 			for ( var i=0, ien=d.length ; i<ien ; i++ ) {
 
- 				// null and undefined aren't useful in the print output
 
- 				var dataOut = d[i] === null || d[i] === undefined ?
 
- 					'' :
 
- 					d[i];
 
- 				var classAttr = columnClasses[i] ?
 
- 					'class="'+columnClasses[i]+'"' :
 
- 					'';
 
- 				str += '<'+tag+' '+classAttr+'>'+dataOut+'</'+tag+'>';
 
- 			}
 
- 			return str + '</tr>';
 
- 		};
 
- 		// Construct a table for printing
 
- 		var html = '<table class="'+dt.table().node().className+'">';
 
- 		if ( config.header ) {
 
- 			html += '<thead>'+ addRow( data.header, 'th' ) +'</thead>';
 
- 		}
 
- 		html += '<tbody>';
 
- 		for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
 
- 			html += addRow( data.body[i], 'td' );
 
- 		}
 
- 		html += '</tbody>';
 
- 		if ( config.footer && data.footer ) {
 
- 			html += '<tfoot>'+ addRow( data.footer, 'th' ) +'</tfoot>';
 
- 		}
 
- 		html += '</table>';
 
- 		// Open a new window for the printable table
 
- 		var win = window.open( '', '' );
 
- 		win.document.close();
 
- 		// Inject the title and also a copy of the style and link tags from this
 
- 		// document so the table can retain its base styling. Note that we have
 
- 		// to use string manipulation as IE won't allow elements to be created
 
- 		// in the host document and then appended to the new window.
 
- 		var head = '<title>'+exportInfo.title+'</title>';
 
- 		$('style, link').each( function () {
 
- 			head += _styleToAbs( this );
 
- 		} );
 
- 		try {
 
- 			win.document.head.innerHTML = head; // Work around for Edge
 
- 		}
 
- 		catch (e) {
 
- 			$(win.document.head).html( head ); // Old IE
 
- 		}
 
- 		// Inject the table and other surrounding information
 
- 		win.document.body.innerHTML =
 
- 			'<h1>'+exportInfo.title+'</h1>'+
 
- 			'<div>'+(exportInfo.messageTop || '')+'</div>'+
 
- 			html+
 
- 			'<div>'+(exportInfo.messageBottom || '')+'</div>';
 
- 		$(win.document.body).addClass('dt-print-view');
 
- 		$('img', win.document.body).each( function ( i, img ) {
 
- 			img.setAttribute( 'src', _relToAbs( img.getAttribute('src') ) );
 
- 		} );
 
- 		if ( config.customize ) {
 
- 			config.customize( win, config, dt );
 
- 		}
 
- 		// Allow stylesheets time to load
 
- 		var autoPrint = function () {
 
- 			if ( config.autoPrint ) {
 
- 				win.print(); // blocking - so close will not
 
- 				win.close(); // execute until this is done
 
- 			}
 
- 		};
 
- 		if ( navigator.userAgent.match(/Trident\/\d.\d/) ) { // IE needs to call this without a setTimeout
 
- 			autoPrint();
 
- 		}
 
- 		else {
 
- 			win.setTimeout( autoPrint, 1000 );
 
- 		}
 
- 	},
 
- 	title: '*',
 
- 	messageTop: '*',
 
- 	messageBottom: '*',
 
- 	exportOptions: {},
 
- 	header: true,
 
- 	footer: false,
 
- 	autoPrint: true,
 
- 	customize: null
 
- };
 
- return DataTable.Buttons;
 
- }));
 
 
  |