/* jshint phantom:true, devel:true */
/* Usage: phantomjs screenshot.js in.html out.png */
var sys = require('system'),
page = new WebPage();
page.viewportSize = {
width: 800,
height: 600
};
page.open(sys.args[1], function(status){
if (status !== 'success'){
console.log('Bad status: %s', status);
phantom.exit(1);
}
window.setTimeout(function(){
var box = page.evaluate(function(){
var lefts, rights, tops, bottoms,
padding = 10, // px
selection, show;
// Call setup method
if (window.setup)
window.setup();
// Show all pickers, or only those marked for showing
show = $('body').data('show');
show = show ? $(show) : $('*');
show
.filter(function(){
return 'datepicker' in $(this).data();
})
.datepicker('show');
// Get bounds of selected elements
selection = $($('body').data('capture'));
tops = selection.map(function(){
return $(this).offset().top;
}).toArray();
lefts = selection.map(function(){
return $(this).offset().left;
}).toArray();
bottoms = selection.map(function(){
return $(this).offset().top + $(this).outerHeight();
}).toArray();
rights = selection.map(function(){
return $(this).offset().left + $(this).outerWidth();
}).toArray();
// Convert bounds to single bounding box
var b = {
top: Math.min.apply(Math, tops),
left: Math.min.apply(Math, lefts)
};
b.width = Math.max.apply(Math, rights) - b.left;
b.height = Math.max.apply(Math, bottoms) - b.top;
// Return bounding box
return {
top: Math.max(b.top - padding, 0),
left: Math.max(b.left - padding, 0),
width: b.width + 2 * padding,
height: b.height + 2 * padding
};
});
page.clipRect = box;
page.render(sys.args[2]);
phantom.exit();
}, 1);
});
|