﻿/** Print Element Plugin 1.1** Copyright (c) 2010 Erik Zaadi** Inspired by PrintArea (http://plugins.jquery.com/project/PrintArea) and* http://stackoverflow.com/questions/472951/how-do-i-print-an-iframe-from-javascript-in-safari-chrome**  jQuery plugin page : http://plugins.jquery.com/project/printElement *  Wiki : http://wiki.github.com/erikzaadi/jQueryPlugins/jqueryprintelement *  Home Page : http://erikzaadi.github.com/jQueryPlugins/jQuery.printElement *  *  Thanks to David B (http://github.com/ungenio) and icgJohn (http://www.blogger.com/profile/11881116857076484100)*  For their great contributions!* * Dual licensed under the MIT and GPL licenses:*   http://www.opensource.org/licenses/mit-license.php*   http://www.gnu.org/licenses/gpl.html*   *   Note, Iframe Printing is not supported in Opera and Chrome 3.0, a popup window will be shown instead*/
; (
function($) { $.fn.printElement = function(options) { var mainOptions = $.extend({}, $.fn.printElement.defaults, options); if (mainOptions.printMode == 'iframe') { if ($.browser.opera || (/chrome/.test(navigator.userAgent.toLowerCase()))) mainOptions.printMode = 'popup'; } $("[id^='printElement_']").remove(); return this.each(function() { var opts = $.meta ? $.extend({}, mainOptions, $this.data()) : mainOptions; _printElement($(this), opts); }); }; $.fn.printElement.defaults = { printMode: 'iframe', pageTitle: '', overrideElementCSS: null, printBodyOptions: { styleToAdd: 'padding:10px;margin:10px;', classNameToAdd: '' }, leaveOpen: false, iframeElementOptions: { styleToAdd: 'border:none;position:absolute;width:0px;height:0px;bottom:0px;left:0px;', classNameToAdd: ''} }; $.fn.printElement.cssElement = { href: '', media: '' }; function _printElement(element, opts) { var html = _getMarkup(element, opts); var popupOrIframe = null; var documentToWriteTo = null; if (opts.printMode.toLowerCase() == 'popup') { popupOrIframe = window.open('about:blank', 'printElementWindow', 'width=650,height=440,scrollbars=yes'); documentToWriteTo = popupOrIframe.document; } else { var printElementID = "printElement_" + (Math.round(Math.random() * 99999)).toString(); var iframe = document.createElement('IFRAME'); $(iframe).attr({ style: opts.iframeElementOptions.styleToAdd, id: printElementID, className: opts.iframeElementOptions.classNameToAdd, frameBorder: 0, scrolling: 'no', src: 'about:blank' }); document.body.appendChild(iframe); documentToWriteTo = (iframe.contentWindow || iframe.contentDocument); if (documentToWriteTo.document) documentToWriteTo = documentToWriteTo.document; iframe = document.frames ? document.frames[printElementID] : document.getElementById(printElementID); popupOrIframe = iframe.contentWindow || iframe; } focus(); documentToWriteTo.open(); documentToWriteTo.write(html); documentToWriteTo.close(); _callPrint(popupOrIframe); }; function _callPrint(element) { if (element && element.printPage) element.printPage(); else setTimeout(function() { _callPrint(element); }, 50); } function _getElementHTMLIncludingFormElements(element) { var $element = $(element); $(":checked", $element).each(function() { this.setAttribute('checked', 'checked'); }); $("input[type='text']", $element).each(function() { this.setAttribute('value', $(this).val()); }); $("select", $element).each(function() { var $select = $(this); $("option", $select).each(function() { if ($select.val() == $(this).val()) this.setAttribute('selected', 'selected'); }); }); $("textarea", $element).each(function() { var value = $(this).attr('value'); if ($.browser.mozilla) this.firstChild.textContent = value; else this.innerHTML = value; }); var elementHtml = $('<div></div>').append($element.clone()).html(); return elementHtml; } function _getBaseHref() { return window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : "") + window.location.pathname; } function _getMarkup(element, opts) { var $element = $(element); var elementHtml = _getElementHTMLIncludingFormElements(element); var html = new Array(); html.push('<html><head><title>' + opts.pageTitle + '</title>'); if (opts.overrideElementCSS) { if (opts.overrideElementCSS.length > 0) { for (var x = 0; x < opts.overrideElementCSS.length; x++) { var current = opts.overrideElementCSS[x]; if (typeof (current) == 'string') html.push('<link type="text/css" rel="stylesheet" href="' + current + '" >'); else html.push('<link type="text/css" rel="stylesheet" href="' + current.href + '" media="' + current.media + '" >'); } } } else { $(document).find("link").filter(function() { return $(this).attr("rel").toLowerCase() == "stylesheet"; }).each(function() { html.push('<link type="text/css" rel="stylesheet" href="' + $(this).attr("href") + '" media="' + $(this).attr('media') + '" >'); }); } html.push('<base href="' + _getBaseHref() + '" />'); html.push('</head><body style="' + opts.printBodyOptions.styleToAdd + '" class="' + opts.printBodyOptions.classNameToAdd + '">'); html.push('<div class="' + $element.attr('class') + '">' + elementHtml + '</div>'); html.push('<script type="text/javascript">function printPage(){focus();print();' + ((!$.browser.opera && !opts.leaveOpen && opts.printMode.toLowerCase() == 'popup') ? 'close();' : '') + '}</script>'); html.push('</body></html>'); return html.join(''); }; })(jQuery);


function printPage() {
    $('#content-wrapper').printElement({ printMode: 'popup', leaveOpen: true, overrideElementCSS: ['/styles/global.css', '/styles/print.css'] });
}

function printJobPage() {
    $('#addInfoDiv').printElement({ printMode: 'popup', leaveOpen: true, overrideElementCSS: ['/styles/global.css', '/styles/print.css'] });
}
