|
|
@@ -1,133 +0,0 @@ |
|
|
|
/// <reference path="http://code.jquery.com/jquery-1.4.1-vsdoc.js" /> |
|
|
|
/* |
|
|
|
* Print Element Plugin 1.2 |
|
|
|
* |
|
|
|
* 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 |
|
|
|
* |
|
|
|
* Home Page : http://projects.erikzaadi/jQueryPlugins/jQuery.printElement |
|
|
|
* Issues (bug reporting) : http://github.com/erikzaadi/jQueryPlugins/issues/labels/printElement |
|
|
|
* jQuery plugin page : http://plugins.jquery.com/project/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 (window, undefined) { |
|
|
|
var document = window["document"]; |
|
|
|
var $ = window["jQuery"]; |
|
|
|
$.fn["printElement"] = function (options) { |
|
|
|
var mainOptions = $.extend({}, $.fn["printElement"]["defaults"], options); |
|
|
|
//Remove previously printed iframe if exists |
|
|
|
$("[id^='printElement_']").remove(); |
|
|
|
|
|
|
|
return this.each(function () { |
|
|
|
//Support Metadata Plug-in if available |
|
|
|
var opts = $.meta ? $.extend({}, mainOptions, $(this).data()) : mainOptions; |
|
|
|
_printElement($(this), opts); |
|
|
|
}); |
|
|
|
}; |
|
|
|
$.fn["printElement"]["defaults"] = { |
|
|
|
"printMode": 'iframe', //Usage : iframe / popup |
|
|
|
"pageTitle": '', //Print Page Title |
|
|
|
"overrideElementCSS": null, |
|
|
|
/* Can be one of the following 3 options: |
|
|
|
* 1 : boolean (pass true for stripping all css linked) |
|
|
|
* 2 : array of $.fn.printElement.cssElement (s) |
|
|
|
* 3 : array of strings with paths to alternate css files (optimized for print) |
|
|
|
*/ |
|
|
|
"printBodyOptions": { |
|
|
|
"styleToAdd": 'padding:10px;margin:10px;', //style attributes to add to the body of print document |
|
|
|
"classNameToAdd": '' //css class to add to the body of print document |
|
|
|
}, |
|
|
|
"leaveOpen": false, // in case of popup, leave the print page open or not |
|
|
|
"iframeElementOptions": { |
|
|
|
"styleToAdd": 'border:none;position:absolute;width:0px;height:0px;bottom:0px;left:0px;', //style attributes to add to the iframe element |
|
|
|
"classNameToAdd": '' //css class to add to the iframe element |
|
|
|
} |
|
|
|
}; |
|
|
|
$.fn["printElement"]["cssElement"] = { |
|
|
|
"href": '', |
|
|
|
"media": '' |
|
|
|
}; |
|
|
|
function _printElement(element, opts) { |
|
|
|
//Create markup to be printed |
|
|
|
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 { |
|
|
|
//The random ID is to overcome a safari bug http://www.cjboco.com.sharedcopy.com/post.cfm/442dc92cd1c0ca10a5c35210b8166882.html |
|
|
|
var printElementID = "printElement_" + (Math.round(Math.random() * 99999)).toString(); |
|
|
|
//Native creation of the element is faster.. |
|
|
|
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); |
|
|
|
var elementHtml = $('<div></div>').append($element.clone()).html(); |
|
|
|
return elementHtml; |
|
|
|
} |
|
|
|
|
|
|
|
function _getBaseHref() { |
|
|
|
var port = (window.location.port) ? ':' + window.location.port : ''; |
|
|
|
return window.location.protocol + '//' + window.location.hostname + 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>'); |
|
|
|
//Ensure that relative links work |
|
|
|
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();' |
|
|
|
+ ((!opts["leaveOpen"] && opts["printMode"].toLowerCase() == 'popup') ? 'close();' : '') + '}</script>'); |
|
|
|
html.push('</body></html>'); |
|
|
|
|
|
|
|
return html.join(''); |
|
|
|
}; |
|
|
|
})(window); |