123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*!
- * jQuery Print Previw Plugin v1.0.1
- *
- * Copyright 2011, Tim Connell
- * Licensed under the GPL Version 2 license
- * http://www.gnu.org/licenses/gpl-2.0.html
- *
- * Date: Wed Jan 25 00:00:00 2012 -000
- */
- (function ($) {
- $.fn.printPreview = function () {
- this.each(function () {
- $(this).bind('click',
- function (e) {
- e.preventDefault();
- if (!$('#print-modal').length) {
- $.printPreview.loadPrintPreview();
- }
- });
- });
- return this;
- };
- var mask, size, print_modal, print_controls;
- $.printPreview = {
- loadPrintPreview: function () {
- print_modal = $('<div id="print-modal"></div>');
- print_controls = $('<div id="print-modal-controls">' + '<a href="#" class="print" title="Print page">Print page</a>' + '<a href="#" class="close" title="Close print preview">Close</a>').hide();
- var print_frame = $('<iframe id="print-modal-content" scrolling="no" border="0" frameborder="0" name="print-frame" />');
- print_modal.hide().append(print_controls).append(print_frame).appendTo('body');
- for (var i = 0; i < window.frames.length; i++) {
- if (window.frames[i].name == "print-frame") {
- var print_frame_ref = window.frames[i].document;
- break;
- }
- }
- print_frame_ref.open();
- print_frame_ref.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">' + '<head><title>' + document.title + '</title></head>' + '<body></body>' + '</html>');
- print_frame_ref.close();
- var $iframe_head = $('head link[media*=print], head link[media=all]').clone(),
- $iframe_body = $('body > *:not(#print-modal):not(script)').clone();
- $iframe_head.each(function () {
- $(this).attr('media', 'all');
- });
- if (!$.browser.msie && !($.browser.version < 7)) {
- $('head', print_frame_ref).append($iframe_head);
- $('body', print_frame_ref).append($iframe_body);
- } else {
- $('body > *:not(#print-modal):not(script)').clone().each(function () {
- $('body', print_frame_ref).append(this.outerHTML);
- });
- $('head link[media*=print], head link[media=all]').each(function () {
- $('head', print_frame_ref).append($(this).clone().attr('media', 'all')[0].outerHTML);
- });
- }
- $('a', print_frame_ref).bind('click.printPreview',
- function (e) {
- e.preventDefault();
- });
- $('head').append('<style type="text/css">' + '@media print {' + '/* -- Print Preview --*/' + '#print-modal-mask,' + '#print-modal {' + 'display: none !important;' + '}' + '}' + '</style>');
- $.printPreview.loadMask();
- $('body').css({
- overflowY: 'hidden',
- height: '100%'
- });
- $('img', print_frame_ref).load(function () {
- print_frame.height($('body', print_frame.contents())[0].scrollHeight);
- });
- starting_position = $(window).height() + $(window).scrollTop();
- var css = {
- top: starting_position,
- height: '100%',
- overflowY: 'auto',
- zIndex: 10000,
- display: 'block'
- }
- print_modal.css(css).animate({
- top: $(window).scrollTop()
- },
- 400, 'linear',
- function () {
- print_controls.fadeIn('slow').focus();
- });
- print_frame.height($('body', print_frame.contents())[0].scrollHeight);
- $('a', print_controls).bind('click',
- function (e) {
- e.preventDefault();
- if ($(this).hasClass('print')) {
- window.print();
- } else {
- $.printPreview.distroyPrintPreview();
- }
- });
- },
- distroyPrintPreview: function () {
- print_controls.fadeOut(100);
- print_modal.animate({
- top: $(window).scrollTop() - $(window).height(),
- opacity: 1
- },
- 400, 'linear',
- function () {
- print_modal.remove();
- $('body').css({
- overflowY: 'auto',
- height: 'auto'
- });
- });
- mask.fadeOut('slow',
- function () {
- mask.remove();
- });
- $(document).unbind("keydown.printPreview.mask");
- mask.unbind("click.printPreview.mask");
- $(window).unbind("resize.printPreview.mask");
- },
- loadMask: function () {
- size = $.printPreview.sizeUpMask();
- mask = $('<div id="print-modal-mask" />').appendTo($('body'));
- mask.css({
- position: 'absolute',
- top: 0,
- left: 0,
- width: size[0],
- height: size[1],
- display: 'none',
- opacity: 0,
- zIndex: 9999,
- backgroundColor: '#000'
- });
- mask.css({
- display: 'block'
- }).fadeTo('400', 0.75);
- $(window).bind("resize..printPreview.mask",
- function () {
- $.printPreview.updateMaskSize();
- });
- mask.bind("click.printPreview.mask",
- function (e) {
- $.printPreview.distroyPrintPreview();
- });
- $(document).bind("keydown.printPreview.mask",
- function (e) {
- if (e.keyCode == 27) {
- $.printPreview.distroyPrintPreview();
- }
- });
- },
- sizeUpMask: function () {
- if ($.browser.msie) {
- var d = $(document).height(),
- w = $(window).height();
- return [window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, d - w < 20 ? w : d];
- } else {
- return [$(document).width(), $(document).height()];
- }
- },
- updateMaskSize: function () {
- var size = $.printPreview.sizeUpMask();
- mask.css({
- width: size[0],
- height: size[1]
- });
- }
- }
- })(jQuery);
|