/* @license * jQuery.print, version 1.6.0 * (c) Sathvik Ponangi, Doers' Guild * Licence: CC-By (http://creativecommons.org/licenses/by/3.0/) *--------------------------------------------------------------------------*/ (function ($) { "use strict"; // A nice closure for our definitions function jQueryCloneWithSelectAndTextAreaValues(elmToClone, withDataAndEvents, deepWithDataAndEvents) { // Replacement jQuery clone that also clones the values in selects and textareas as jQuery doesn't for performance reasons - https://stackoverflow.com/questions/742810/clone-isnt-cloning-select-values // Based on https://github.com/spencertipping/jquery.fix.clone var $elmToClone = $(elmToClone), $result = $elmToClone.clone(withDataAndEvents, deepWithDataAndEvents), $myTextareas = $elmToClone.find('textarea').add($elmToClone.filter('textarea')), $resultTextareas = $result.find('textarea').add($result.filter('textarea')), $mySelects = $elmToClone.find('select').add($elmToClone.filter('select')), $resultSelects = $result.find('select').add($result.filter('select')), i, l, j, m; for (i = 0, l = $myTextareas.length; i < l; ++i) { $($resultTextareas[i]).val($($myTextareas[i]).val()); } for (i = 0, l = $mySelects.length; i < l; ++i) { for (j = 0, m = $mySelects[i].options.length; j < m; ++j) { if ($mySelects[i].options[j].selected === true) { $resultSelects[i].options[j].selected = true; } } } return $result; } function getjQueryObject(string) { // Make string a vaild jQuery thing var jqObj = $(""); try { jqObj = jQueryCloneWithSelectAndTextAreaValues(string); } catch (e) { jqObj = $("") .html(string); } return jqObj; } function printFrame(frameWindow, content, options) { // Print the selected window/iframe var def = $.Deferred(); try { frameWindow = frameWindow.contentWindow || frameWindow.contentDocument || frameWindow; var wdoc = frameWindow.document || frameWindow.contentDocument || frameWindow; if(options.doctype) { wdoc.write(options.doctype); } wdoc.write(content); wdoc.close(); var printed = false, callPrint = function () { if(printed) { return; } // Fix for IE : Allow it to render the iframe frameWindow.focus(); try { // Fix for IE11 - printng the whole page instead of the iframe content if (!frameWindow.document.execCommand('print', false, null)) { // document.execCommand returns false if it failed -http://stackoverflow.com/a/21336448/937891 frameWindow.print(); } // focus body as it is losing focus in iPad and content not getting printed $('body').focus(); } catch (e) { frameWindow.print(); } frameWindow.close(); printed = true; def.resolve(); }; // Print once the frame window loads - seems to work for the new-window option but unreliable for the iframe $(frameWindow).on("load", callPrint); // Fallback to printing directly if the frame doesn't fire the load event for whatever reason setTimeout(callPrint, options.timeout); } catch (err) { def.reject(err); } return def; } function printContentInIFrame(content, options) { var $iframe = $(options.iframe + ""); var iframeCount = $iframe.length; if (iframeCount === 0) { // Create a new iFrame if none is given $iframe = $('