/*!
* 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 = $('
' + '
Print page' + '
Close').hide();
var 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('' + '' + '
' + document.title + '' + '' + '');
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('');
$.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 = $('
').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);