jquery.jPrintArea.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /**
  2. * Version 2.0
  3. * -Contributors: "mindinquiring" : filter to exclude any stylesheet other than print.
  4. * Tested ONLY in IE 8 and FF 3.5.3. No official support for other browsers, but will
  5. * TRY to accomodate challenges in other browsers.
  6. * Example:
  7. * Print Button: <div id="print_button">Print</div>
  8. * Print Area : <div class="PrintArea"> ... html ... </div>
  9. * Javascript : <script>
  10. * $("div#print_button").click(function(){
  11. * $("div.PrintArea").printArea( [OPTIONS] );
  12. * });
  13. * </script>
  14. * options are passed as json (json example: {mode: "popup", popClose: false})
  15. *
  16. * {OPTIONS} | [type] | (default), values | Explanation
  17. * --------- | --------- | -------------------- | -----------
  18. * @mode | [string] | ("iframe"), "popup" | printable window is either iframe or browser popup
  19. * @popHt | [number] | (500) | popup window height
  20. * @popWd | [number] | (400) | popup window width
  21. * @popX | [number] | (500) | popup window screen X position
  22. * @popY | [number] | (500) | popup window screen Y position
  23. * @popTitle | [string] | ('') | popup window title element
  24. * @popClose | [boolean] | (false), true | popup window close after printing
  25. */
  26. (function($) {
  27. var counter = 0;
  28. var modes = { iframe : "iframe", popup : "popup" };
  29. var defaults = { mode : modes.iframe,
  30. popHt : 500,
  31. popWd : 400,
  32. popX : 200,
  33. popY : 200,
  34. popTitle : '',
  35. popClose : false };
  36. var settings = {};//global settings
  37. $.fn.printArea = function( options )
  38. {
  39. $.extend( settings, defaults, options );
  40. counter++;
  41. var idPrefix = "printArea_";
  42. $( "[id^=" + idPrefix + "]" ).remove();
  43. var ele = $(this);
  44. settings.id = idPrefix + counter;
  45. var writeDoc;
  46. var printWindow;
  47. switch ( settings.mode )
  48. {
  49. case modes.iframe :
  50. var f = new Iframe();
  51. writeDoc = f.doc;
  52. printWindow = f.contentWindow || f;
  53. break;
  54. case modes.popup :
  55. printWindow = new Popup();
  56. writeDoc = printWindow.doc;
  57. }
  58. writeDoc.open();
  59. writeDoc.write("<html>" + getHead() + getBody(ele) + "</html>" );
  60. writeDoc.close();
  61. printWindow.focus();
  62. printWindow.print();
  63. if ( settings.mode == modes.popup && settings.popClose )
  64. printWindow.close();
  65. }
  66. function getHead()
  67. {
  68. var head = "<head><title>" + settings.popTitle + "</title>";
  69. $(document).find("link")
  70. .filter(function(){
  71. return $(this).attr("rel").toLowerCase() == "stylesheet";
  72. })
  73. .filter(function(){ // this filter contributed by "mindinquiring"
  74. var media = $(this).attr("media");
  75. return (media.toLowerCase() == "" || media.toLowerCase() == "print")
  76. })
  77. .each(function(){
  78. head += '<link type="text/css" rel="stylesheet" href="' + $(this).attr("href") + '" >';
  79. });
  80. head += "</head>";
  81. return head;
  82. }
  83. function getBody( printElement )
  84. {
  85. var body = "<body>";
  86. body += '<div class="' + $(printElement).attr("class") + '">' + $(printElement).html() + '</div>';
  87. body += "</body>";
  88. return body;
  89. }
  90. function Iframe()
  91. {
  92. var frameId = settings.id;
  93. var iframeStyle = 'border:0;position:absolute;width:0px;height:0px;left:0px;top:0px;';
  94. var iframe;
  95. //Downloads By http://www.veryhuo.com
  96. try
  97. {
  98. iframe = document.createElement('iframe');
  99. document.body.appendChild(iframe);
  100. $(iframe).attr({ style: iframeStyle, id: frameId, src: "" });
  101. iframe.doc = null;
  102. iframe.doc = iframe.contentDocument ? iframe.contentDocument : ( iframe.contentWindow ? iframe.contentWindow.document : iframe.document);
  103. }
  104. catch( e ) { throw e + ". iframes may not be supported in this browser."; }
  105. if ( iframe.doc == null ) throw "Cannot find document.";
  106. return iframe;
  107. }
  108. function Popup()
  109. {
  110. var windowAttr = "location=yes,statusbar=no,directories=no,menubar=no,titlebar=no,toolbar=no,dependent=no";
  111. windowAttr += ",width=" + settings.popWd + ",height=" + settings.popHt;
  112. windowAttr += ",resizable=yes,screenX=" + settings.popX + ",screenY=" + settings.popY + ",personalbar=no,scrollbars=no";
  113. var newWin = window.open( "", "_blank", windowAttr );
  114. newWin.doc = newWin.document;
  115. return newWin;
  116. }
  117. })(jQuery);