diff --git a/lib/options.js b/lib/options.js index d23e9f0..b7c6ce0 100644 --- a/lib/options.js +++ b/lib/options.js @@ -25,10 +25,11 @@ exports.phantom = { , errorIfJSException: false , cookies: [] , captureSelector: false +, zoomFactor: 1 }; // Options that are just passed to the phantom page object -exports.phantomPage = ['paperSize', 'zoomFactor', 'customHeaders', 'settings']; +exports.phantomPage = ['paperSize', 'customHeaders', 'settings']; // Options that are callbacks for various phantom events exports.phantomCallback = ['onAlert', 'onCallback', 'onClosing', 'onConfirm', diff --git a/lib/webshot.phantom.js b/lib/webshot.phantom.js index a529957..7147cdb 100644 --- a/lib/webshot.phantom.js +++ b/lib/webshot.phantom.js @@ -96,21 +96,21 @@ var _takeScreenshot = function(status) { if (options.captureSelector) { // Handle captureSelector option - page.clipRect = page.evaluate(function(selector) { + page.clipRect = page.evaluate(function(selector, zoomFactor) { try { var selectorClipRect = document.querySelector(selector).getBoundingClientRect(); return { - top: selectorClipRect.top - , left: selectorClipRect.left - , width: selectorClipRect.width - , height: selectorClipRect.height + top: selectorClipRect.top * zoomFactor + , left: selectorClipRect.left * zoomFactor + , width: selectorClipRect.width * zoomFactor + , height: selectorClipRect.height * zoomFactor }; } catch (e) { throw new Error("Unable to fetch bounds for element " + selector); } - }, options.captureSelector); + }, options.captureSelector, options.zoomFactor); } else { //Set the rectangle of the page to render diff --git a/test/options/zoomFactor.js b/test/options/zoomFactor.js index f756706..50df1c6 100644 --- a/test/options/zoomFactor.js +++ b/test/options/zoomFactor.js @@ -29,4 +29,26 @@ describe('zoomFactor', function() { }); }); }); + + it('creates a properly-sized page for zoomed shots that use a selector', + function(done) { + + var fixture = fixtures[2]; + var options = { + captureSelector: '#foo', + zoomFactor: 2 + }; + + webshot(fixture.path, pngOutput, options, function(err) { + if (err) return done(err); + + im.identify(pngOutput, function(err, features) { + if (err) return done(err); + + features.width.should.equal(fixture.width * 2); + features.height.should.equal(fixture.height * 2); + done(); + }); + }) + }); });