| // ----------------------------------------------------------------------- |
| // Eros Fratini - eros@recoding.it |
| // jqprint 0.3 |
| // |
| // - 19/06/2009 - some new implementations, added Opera support |
| // - 11/05/2009 - first sketch |
| // |
| // Printing plug-in for jQuery, evolution of jPrintArea: http://plugins.jquery.com/project/jPrintArea |
| // requires jQuery 1.3.x |
| // |
| // Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php |
| //------------------------------------------------------------------------ |
| |
| (function($) { |
| var opt; |
| |
| $.fn.jqprint = function (options) { |
| opt = $.extend({}, $.fn.jqprint.defaults, options); |
| |
| var $element = (this instanceof jQuery) ? this : $(this); |
| |
| if (opt.operaSupport && $.browser.opera) |
| { |
| var tab = window.open("","jqPrint-preview"); |
| tab.document.open(); |
| |
| var doc = tab.document; |
| } |
| else |
| { |
| var $iframe = $("<iframe />"); |
| |
| if (!opt.debug) { $iframe.css({ position: "absolute", width: "0px", height: "0px", left: "-600px", top: "-600px" }); } |
| |
| $iframe.appendTo("body"); |
| var doc = $iframe[0].contentWindow.document; |
| } |
| |
| if (opt.importCSS) |
| { |
| if ($("link[media=print]").length > 0) |
| { |
| $("link[media=print]").each( function() { |
| doc.write("<link type='text/css' rel='stylesheet' href='" + $(this).attr("href") + "' media='print' />"); |
| }); |
| } |
| else |
| { |
| $("link").each( function() { |
| doc.write("<link type='text/css' rel='stylesheet' href='" + $(this).attr("href") + "' />"); |
| }); |
| } |
| } |
| |
| if (opt.printContainer) { doc.write($element.outer()); } |
| else { $element.each( function() { doc.write($(this).html()); }); } |
| |
| doc.close(); |
| |
| (opt.operaSupport && $.browser.opera ? tab : $iframe[0].contentWindow).focus(); |
| setTimeout( function() { (opt.operaSupport && $.browser.opera ? tab : $iframe[0].contentWindow).print(); if (tab) { tab.close(); } }, 1000); |
| } |
| |
| $.fn.jqprint.defaults = { |
| debug: false, |
| importCSS: true, |
| printContainer: true, |
| operaSupport: true |
| }; |
| |
| // Thanks to 9__, found at http://users.livejournal.com/9__/380664.html |
| jQuery.fn.outer = function() { |
| return $($('<div></div>').html(this.clone())).html(); |
| } |
| })(jQuery); |