diff --git a/README.md b/README.md index fb8ef61..2debb80 100644 --- a/README.md +++ b/README.md @@ -47,12 +47,6 @@ Currently this plugin supports the following options: - Acceptable-Values: URL-string - Function: URL of an external stylesheet to be included -####rejectWindow - - - Default: `true` - - Acceptable-Values: Boolean - - Function: Whether the `document` object should be used intead of `window` - ####noPrintSelector - Default: `".no-print"` diff --git a/demo/index.html b/demo/index.html index 0443f39..a6fa49f 100644 --- a/demo/index.html +++ b/demo/index.html @@ -40,7 +40,7 @@

Some random text.

- @@ -58,7 +58,7 @@

Some more random text.

- @@ -67,12 +67,12 @@

Some really random text.

-
- diff --git a/jQuery.print.js b/jQuery.print.js index 7d234f3..8942ab9 100644 --- a/jQuery.print.js +++ b/jQuery.print.js @@ -1,4 +1,4 @@ -/* jQuery.print, version 1.0.2 +/* jQuery.print, version 1.0.3 * (c) Sathvik Ponangi, Doers' Guild * Licence: CC-By (http://creativecommons.org/licenses/by/3.0/) *--------------------------------------------------------------------------*/ @@ -6,19 +6,42 @@ (function($) {"use strict"; // A nice closure for our definitions + function getjQueryObject(string) { + // Make string a vaild jQuery thing + var jqObj = $(""); + try { + jqObj = $(string).clone(); + } catch(e) { + jqObj = $("").html(string); + } + return jqObj; + } + + function isNode(o) { + /* http://stackoverflow.com/a/384380/937891 */ + return !!( typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string"); + } + + $.print = $.fn.print = function() { // Print a given set of elements - var isNode = function(o) { - /* http://stackoverflow.com/a/384380/937891 */ - return ( typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string"); - } - var options, $this; + var options, $this, self = this; - if (isNode(this)) { + // console.log("Printing", this, arguments); + + if ( self instanceof $) { + // Get the node if it is a jQuery object + self = self.get(0); + } + + if (isNode(self)) { // If `this` is a HTML element, i.e. for // $(selector).print() - $this = $(this); + $this = $(self); + if (arguments.length > 0) { + options = arguments[0]; + } } else { if (arguments.length > 0) { // $.print(selector,options) @@ -30,81 +53,92 @@ } else { // $.print(options) options = arguments[0]; - $this = $(this); + $this = $("html"); } } else { // $.print() - $this = $(this); + $this = $("html"); } } + // Default options var defaults = { globalStyles : true, mediaPrint : false, stylesheet : null, - rejectWindow : true, noPrintSelector : ".no-print", iframe : true, append : null, prepend : null }; - // Default options - options = $.extend(defaults, options); // Merge with user-options + options = $.extend({}, defaults, (options || {})); - if (options.rejectWindow && $this[0] === window) { - // Use document instead of window as it holds all HTML - $this = $(document); - } - - var styles = $(""); + var $styles = $(""); if (options.globalStyles) { // Apply the stlyes from the current sheet to the printed page - styles = $("style, link, meta, title"); + $styles = $("style, link, meta, title"); } else if (options.mediaPrint) { // Apply the media-print stylesheet - styles = $("link[media=print]"); + $styles = $("link[media=print]"); } if (options.stylesheet) { // Add a custom stylesheet if given - styles = $.merge(styles, $('')); + $styles = $.merge($styles, $('')); } - var copy = $this.clone(); // Create a copy of the element to print + var copy = $this.clone(); + // Wrap it in a span to get the HTML markup string copy = $("").append(copy); - copy.find(options.noPrintSelector).remove(); // Remove unwanted elements - copy.append(styles.clone()); - copy.append($(options.append).clone()); - copy.prepend($(options.prepend).clone()); + copy.find(options.noPrintSelector).remove(); + // Add in the styles + copy.append($styles.clone()); + // Appedned content + copy.append(getjQueryObject(options.append)); + // Prepended content + copy.prepend(getjQueryObject(options.prepend)); + // Get the HTML markup string var content = copy.html(); + // Destroy the copy copy.remove(); var w, wdoc; if (options.iframe) { // Use an iframe for printing try { - $iframe = $(options.iframe + ""); + var $iframe = $(options.iframe + ""); var iframeCount = $iframe.length; if (iframeCount === 0) { // Create a new iFrame if none is given - $iframe = $('