Initial commit: Kimai TMS
Kimai time management system (PHP 5.6 / MySQL) with custom extensions: - Budget tracking (ki_budget) - Change request form (ki_changerequest) - Invoice generation (ki_invoice) - Expense tracking (ki_expenses) - Flexi time (ki_flexitime) - Export, admin panel, timesheets, tasks, summary Database: ~900K time entries, 2,000+ users, 439 projects. Config: includes/autoconf.php — localhost/kimai/kimai
This commit is contained in:
192
js/jquery.print-preview.js
Normal file
192
js/jquery.print-preview.js
Normal file
@@ -0,0 +1,192 @@
|
||||
/*!
|
||||
* 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($) {
|
||||
|
||||
// Initialization
|
||||
$.fn.printPreview = function() {
|
||||
this.each(function() {
|
||||
$(this).bind('click', function(e) {
|
||||
e.preventDefault();
|
||||
if (!$('#print-modal').length) {
|
||||
$.printPreview.loadPrintPreview();
|
||||
}
|
||||
});
|
||||
});
|
||||
return this;
|
||||
};
|
||||
|
||||
// Private functions
|
||||
var mask, size, print_modal, print_controls;
|
||||
$.printPreview = {
|
||||
loadPrintPreview: function() {
|
||||
// Declare DOM objects
|
||||
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" />');
|
||||
|
||||
// Raise print preview window from the dead, zooooooombies
|
||||
print_modal
|
||||
.hide()
|
||||
.append(print_controls)
|
||||
.append(print_frame)
|
||||
.appendTo('body');
|
||||
|
||||
// The frame lives
|
||||
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();
|
||||
|
||||
// Grab contents and apply stylesheet
|
||||
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);
|
||||
});
|
||||
}
|
||||
|
||||
// Disable all links
|
||||
$('a', print_frame_ref).bind('click.printPreview', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
// Introduce print styles
|
||||
$('head').append('<style type="text/css">' +
|
||||
'@media print {' +
|
||||
'/* -- Print Preview --*/' +
|
||||
'#print-modal-mask,' +
|
||||
'#print-modal {' +
|
||||
'display: none !important;' +
|
||||
'}' +
|
||||
'}' +
|
||||
'</style>'
|
||||
);
|
||||
|
||||
// Load mask
|
||||
$.printPreview.loadMask();
|
||||
|
||||
// Disable scrolling
|
||||
$('body').css({overflowY: 'hidden', height: '100%'});
|
||||
$('img', print_frame_ref).load(function() {
|
||||
print_frame.height($('body', print_frame.contents())[0].scrollHeight);
|
||||
});
|
||||
|
||||
// Position modal
|
||||
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);
|
||||
|
||||
// Bind closure
|
||||
$('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");
|
||||
},
|
||||
|
||||
/* -- Mask Functions --*/
|
||||
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) {
|
||||
// if there are no scrollbars then use window.height
|
||||
var d = $(document).height(), w = $(window).height();
|
||||
return [
|
||||
window.innerWidth || // ie7+
|
||||
document.documentElement.clientWidth || // ie6
|
||||
document.body.clientWidth, // ie6 quirks mode
|
||||
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);
|
||||
Reference in New Issue
Block a user