Skip to content

Instantly share code, notes, and snippets.

@rfessler
Created October 20, 2012 07:40
Show Gist options
  • Save rfessler/3922533 to your computer and use it in GitHub Desktop.
Save rfessler/3922533 to your computer and use it in GitHub Desktop.
javascript: printlimator
/*
<a class = "bookmarklet" href = "javascript:(function(){function loadScript(a,b){var c = document.createElement('script');c.type = 'text/javascript';c.src = a;var d = document.getElementsByTagName('head')[0],done = false;c.onload = c.onreadystatechange = function(){if(!done&amp;&amp;(!this.readyState||this.readyState == 'loaded'||this.readyState == 'complete')){done = true;b()}};d.appendChild(c)}loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver = 1.3.2',function(){loadScript('http://css-tricks.com/examples/ThePrintliminator/js/printliminator.js',function(){printlimator()})})})()">Printliminator</a>
*/
//<a class = "bookmarklet" href = "javascript:(
function()
{
function loadScript(a,b)
{
var c = document.createElement('script');
c.type = 'text/javascript';
c.src = a;
var d = document.getElementsByTagName('head')[0],done = false;
c.onload = c.onreadystatechange = function()
{
if(!done&amp;
&amp;
(!this.readyState||this.readyState == 'loaded'||this.readyState == 'complete'))
{
done = true;
b()
}
};
d.appendChild(c)
}
loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver = 1.3.2',function()
{
loadScript('http://css-tricks.com/examples/ThePrintliminator/js/printliminator.js',function()
{
printlimator()
}
)
}
)
}
)()
//">Printliminator</a>
function printlimator() {
//remove conflicts with other javascript libraries
var $ = jQuery;
//like the hover function, but for mousedown state
$.fn.active = function(fn1, fn2) {
var el = this;
$(el).mousedown(fn1);
$(document).mouseup(function() {
fn2.call(el);
});
return this;
};
var history = [];
var dont = false;
$('body *:not(._print_controls, ._print_controls *)').live('click', function (e) {
if (!dont) {
e.preventDefault();
var done;
if(e.altKey) {
done = $("body *").not("._print_controls, ._print_controls *, style")
.not($(this).parents().andSelf())
.not($(this).find("*"))
.hide();
}
else done = $(this).hide();
done.addClass("_print_removed");
history.push(done);
}
}).live('mouseover', function () {
if (!dont) $(this).css('outline', '3px solid red')
}).live('mouseout', function () {
if (!dont) $(this).css('outline', 'none')
});
var controls = $('<div>').addClass('_print_controls').css({
position: 'fixed',
top: 25,
right: 25,
width: 162,
height: 182,
background: 'url(http://css-tricks.com/examples/ThePrintliminator/images/printliminator2.png) no-repeat',
zIndex: 10000
}).mouseover(function () {
dont = true
}).mouseout(function () {
dont = false
}).appendTo('body');
//fix IE6, which doesn't support position: fixed
if (controls.css('position') ! = 'fixed') {
controls.css('position', 'absolute');
}
//Remove Graphics
$('<div>').css({
background: 'url(http://css-tricks.com/examples/ThePrintliminator/images/printliminator2.png) 0 -182px no-repeat',
position: 'absolute',
top: 6,
left: 6,
width: 74,
height: 74
}).click(function () {
var done = $('img,iframe,object,embed,input[type = image],ins').hide();
var bg = $('body *:not(._print_controls, ._print_controls *)').css('background');
var item = $('body *:not(._print_controls, ._print_controls *)').css('background', 'none');
done.addClass("_print_removed");
history.push(function() {
done.show();
item.css('background', bg);
});
}).hover(function(){
$(this).css({ "background-position": "0 -256px" }) }, function() {
$(this).css({ "background-position": "0 -182px" })
}).active(function(){
$(this).css({ "background-position": "0 -330px" }) }, function() {
$(this).css({ "background-position": "0 -182px" })
}).appendTo(controls);
// Print Stylize
$('<div>').css({
background: 'url(http://css-tricks.com/examples/ThePrintliminator/images/printliminator2.png) no-repeat -222px -182px',
position: 'absolute',
top: 6,
left: 83,
width: 74,
height: 74
}).click(function () {
window.print();
}).hover(function(){
$(this).css({ "background-position": "-222px -256px" }) }, function() {
$(this).css({ "background-position": "-222px -182px" })
}).active(function(){
$(this).css({ "background-position": "-222px -330px" }) }, function() {
$(this).css({ "background-position": "-222px -182px" })
}).appendTo(controls);
//Print
$('<div>').css({
background: 'url(http://css-tricks.com/examples/ThePrintliminator/images/printliminator2.png) -74px -182px no-repeat',
position: 'absolute',
top: 83,
left: 83,
width: 74,
height: 74
}).hover(function(){
$(this).css({ "background-position": "-74px -256px" }) }, function() {
$(this).css({ "background-position": "-74px -182px" })
}).active(function(){
$(this).css({ "background-position": "-74px -330px" }) }, function() {
$(this).css({ "background-position": "-74px -182px" })
}).click(function () {
var links = $("link[rel = 'stylesheet'], style:not(#_print_control_styles)").remove();
//cache and remove inline styles
var inline = $('body *:not(._print_controls, ._print_controls > *, ._print_removed)').map(function() {
var style = $(this).attr("style");
$(this).attr("style", "");
return {
el: this,
style: style
};
});
var print = $("<link rel = 'stylesheet' type = 'text/css' href = 'http://css-tricks.com/examples/ThePrintliminator/css/printliminator.css'/>").appendTo("head");
history.push(function() {
print.remove();
links.appendTo("head");
inline.each(function() {
$(this.el).attr("style", this.style);
});
});
}).appendTo(controls);
//Close
$('<div>').css({
background: 'url(http://css-tricks.com/examples/ThePrintliminator/images/printliminator2.png) -222px -3px no-repeat',
position: 'absolute',
top: -20,
right: -20,
width: 33,
height: 33
}).hover(function(){
$(this).css({ "background-position": "-222px -39px" }) }, function(){
$(this).css({ "background-position": "-222px -3px" })
}).click(function(){
$('._print_controls').remove();
}).appendTo(controls);
$("<div>").css({
background: 'url(http://css-tricks.com/examples/ThePrintliminator/images/printliminator2.png) -148px -182px no-repeat',
position: 'absolute',
top: 83,
left: 6,
width: 74,
height: 74
}).hover(function(){
$(this).css({ "background-position": "-148px -256px" }) }, function() {
$(this).css({ "background-position": "-148px -182px" })
}).active(function(){
$(this).css({ "background-position": "-148px -330px" }) }, function() {
$(this).css({ "background-position": "-148px -182px" })
}).click(function() {
var last = history.pop();
if(last) {
if(typeof last ! = 'function')
last.removeClass("_print_removed").show();
else last.call();
}
}).appendTo(controls);
//make sure that the controls don't get printed
$('<style id = "_print_control_styles">').text('@media print{._print_controls{display:none;}}').appendTo("head");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment