Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

viewport height option, delay timeout fix, whitespace trim #1

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 56 additions & 15 deletions src/banquo.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
var fs = require('fs');
var path = require('path');
var _ = require('underscore')
var phantom = require('node-phantom');
var execSync = require('exec-sync');
var imgTemp = 'banquo_temp.png';
var writePath = path.resolve(__dirname, '../../../../')

function banquo(opts, callback) {
var settings = _.extend({
mode: 'base64',
viewport_width: 1440,
delay: 1000,
viewport_width: 1280,
viewport_height: 900,
trim: 0,
thumbnail: 0,
dimension: '256x144',
delay: 0,
selector: 'body',
css_file: ''
}, opts);
Expand All @@ -26,24 +34,31 @@ function banquo(opts, callback) {
var ph;

console.log('Requesting', settings.url);
console.log(settings)

phantom.create(createPage)

function createPage(err, _ph) {
ph = _ph;
ph.createPage(openPage);
if (!err) {
ph = _ph;
ph.createPage(openPage);
} else {
callback(err);
}
}

function openPage(err, _page) {
page = _page;
page.set('onError', function() { return; });
page.onConsoleMessage = function (msg) { console.log(msg); };
page.set('viewportSize', {width: settings.viewport_width, height: 900});
page.set('viewportSize', {width: settings.viewport_width, height: settings.viewport_height});
page.open(settings.url, prepForRender);
}

function prepForRender(err, status) {
page.evaluate(runInPhantomBrowser, renderImage, settings.selector, css_text);
setTimeout(function() {
page.evaluate(runInPhantomBrowser, renderImage, settings.selector, css_text);
}, settings.delay);
}

function runInPhantomBrowser(selector, css_text) {
Expand All @@ -57,28 +72,54 @@ function banquo(opts, callback) {
}

function renderImage(err, rect) {
setTimeout(function(){
page.set('clipRect', rect);
if (settings.mode != 'save'){
page.renderBase64('PNG', base64Rendered);
}else{
page.render(settings.out_file, cleanup);
callback('Writing to file... ' + settings.out_file);
}
}, settings.delay)
page.set('clipRect', rect);
if (settings.mode != 'save'){
page.renderBase64('PNG', base64Rendered);
}else{
page.render(settings.out_file, cleanup);
callback('Writing to file... ' + settings.out_file);
}
}

function base64Rendered(err, image_data){
if (err){
console.log(err);
}

if (settings.trim === '1' || settings.thumbnail === '1') {
image_data = runImageMagick(image_data)
}

callback(image_data)
cleanup();
}

function cleanup() {
ph.exit();
}

function runImageMagick(image_data) {
var fImg = path.resolve(writePath, imgTemp),
result = fs.writeFileSync(fImg, image_data, 'base64')

if (settings.trim === '1') {
var cmdTrim = "convert -trim " + fImg + " " + fImg
console.log('Trimming: ' + cmdTrim)
execSync(cmdTrim)
}

if (settings.thumbnail === '1') {
var cmdThumbnail = "convert " + fImg + " -thumbnail " + settings.dimension + " " + fImg
console.log('Processing thumbnail: ' + cmdThumbnail)
execSync(cmdThumbnail)
}

var data = fs.readFileSync(fImg, 'base64');

fs.unlink(fImg)

return data
}
}

module.exports = {
Expand Down