@@ -67,7 +67,7 @@ function settings(page, options){
67
67
* @param {webpage } page
68
68
* @param {Function } fn
69
69
* @param {Array } args
70
- * @returns {Object }
70
+ * @returns {object }
71
71
*/
72
72
function evaluate ( page , fn , args ) {
73
73
var type = typeof fn ;
@@ -92,7 +92,7 @@ function evaluate(page, fn, args){
92
92
/**
93
93
* create webpage and bind events
94
94
* @param {string } url
95
- * @param {Object } options
95
+ * @param {object } options
96
96
* @param {Function } onload
97
97
*/
98
98
function createPage ( url , options , onload ) {
@@ -205,7 +205,7 @@ function createPage(url, options, onload){
205
205
206
206
/**
207
207
* Constructor
208
- * @param {Object } options
208
+ * @param {object } options
209
209
* @constructor
210
210
*/
211
211
var M = function ( options ) {
@@ -223,7 +223,7 @@ var M = function(options){
223
223
224
224
/**
225
225
* get info of the latest save
226
- * @returns {Object |boolean }
226
+ * @returns {object |boolean }
227
227
*/
228
228
M . prototype . getLatestTree = function ( ) {
229
229
if ( fs . exists ( this . latest ) ) {
@@ -272,11 +272,12 @@ M.prototype.getRenderOptions = function(){
272
272
* save capture
273
273
* @param {webpage } page
274
274
* @param {string } url
275
- * @param {string|Object } tree
275
+ * @param {string|object } tree
276
+ * @param {array } rect
276
277
* @param {string|number } time
277
278
* @returns {{time: number, dir: string, screenshot: string} }
278
279
*/
279
- M . prototype . save = function ( page , url , tree , time ) {
280
+ M . prototype . save = function ( page , url , tree , rect , time ) {
280
281
time = time || Date . now ( ) ;
281
282
if ( _ . is ( tree , 'Object' ) ) {
282
283
tree = JSON . stringify ( tree ) ;
@@ -291,6 +292,12 @@ M.prototype.save = function(page, url, tree, time){
291
292
var elem = document . documentElement ;
292
293
elem . style . backgroundColor = '#fff' ;
293
294
} ) ;
295
+ page . clipRect = {
296
+ left : rect [ 0 ] ,
297
+ top : rect [ 1 ] ,
298
+ width : rect [ 2 ] ,
299
+ height : rect [ 3 ]
300
+ } ;
294
301
page . render ( screenshot , opt ) ;
295
302
fs . write ( dir + '/' + TREE_FILENAME , tree ) ;
296
303
fs . write ( dir + '/' + INFO_FILENAME , JSON . stringify ( {
@@ -314,9 +321,11 @@ M.prototype.save = function(page, url, tree, time){
314
321
* @param {string|number } left
315
322
* @param {string|number } right
316
323
* @param {Array } diff
324
+ * @param {Array } lOffset
325
+ * @param {Array } rOffset
317
326
* @param {Function } callback
318
327
*/
319
- M . prototype . highlight = function ( left , right , diff , callback ) {
328
+ M . prototype . highlight = function ( left , right , diff , lOffset , rOffset , callback ) {
320
329
log ( 'diff [' + left + '] width [' + right + ']' ) ;
321
330
log ( 'has [' + diff . length + '] changes' ) ;
322
331
var render = this . getRenderOptions ( ) ;
@@ -348,7 +357,7 @@ M.prototype.highlight = function(left, right, diff, callback){
348
357
left : left ,
349
358
right : right ,
350
359
screenshot : dScreenshot ,
351
- count : page . evaluate ( highlight , self . token , diff , options . diff )
360
+ count : page . evaluate ( highlight , self . token , diff , lOffset , rOffset , options . diff )
352
361
} ;
353
362
setTimeout ( function ( ) {
354
363
page . render ( dScreenshot , render ) ;
@@ -375,22 +384,25 @@ M.prototype.capture = function(url, needDiff){
375
384
setTimeout ( function ( ) { // delay
376
385
log ( 'walk tree' ) ;
377
386
var right = page . evaluate ( walk , self . token , options . walk ) ; //walk tree
387
+ var rect = right . rect ;
378
388
var json = JSON . stringify ( right ) ;
379
389
var latest = self . getLatestTree ( ) ;
380
390
if ( latest . content === json ) {
381
391
log ( 'no change' ) ;
382
392
phantom . exit ( ) ;
383
393
} else if ( latest === false || ! needDiff ) {
384
- self . save ( page , url , json ) ;
394
+ self . save ( page , url , json , rect ) ;
385
395
phantom . exit ( ) ;
386
396
} else {
387
397
var left = JSON . parse ( latest . content ) ;
388
398
right = JSON . parse ( json ) ;
389
399
var ret = diff ( left , right , options . diff ) ;
390
400
if ( ret . length ) {
391
401
var now = Date . now ( ) ;
392
- var info = self . save ( page , url , json , now ) ;
393
- self . highlight ( latest . time , now , ret , function ( diff ) {
402
+ var info = self . save ( page , url , json , rect , now ) ;
403
+ var lOffset = { x : left . rect [ 0 ] , y : left . rect [ 1 ] } ;
404
+ var rOffset = { x : right . rect [ 0 ] , y : right . rect [ 1 ] } ;
405
+ self . highlight ( latest . time , now , ret , lOffset , rOffset , function ( diff ) {
394
406
info . diff = diff ;
395
407
log ( JSON . stringify ( info ) , _ . log . INFO ) ;
396
408
phantom . exit ( ) ;
@@ -407,7 +419,7 @@ M.prototype.capture = function(url, needDiff){
407
419
/**
408
420
* get tree object by time
409
421
* @param {string|number } time
410
- * @returns {Object |undefined }
422
+ * @returns {object |undefined }
411
423
*/
412
424
M . prototype . getTree = function ( time ) {
413
425
var file = this . root + '/' + time + '/' + TREE_FILENAME ;
@@ -429,7 +441,9 @@ M.prototype.diff = function(left, right){
429
441
if ( lTree && rTree ) {
430
442
var ret = diff ( lTree , rTree , options . diff ) ;
431
443
if ( ret . length ) {
432
- self . highlight ( left , right , ret , function ( diff ) {
444
+ var lOffset = { x : lTree . rect [ 0 ] , y : lTree . rect [ 1 ] } ;
445
+ var rOffset = { x : rTree . rect [ 0 ] , y : rTree . rect [ 1 ] } ;
446
+ self . highlight ( left , right , ret , lOffset , rOffset , function ( diff ) {
433
447
var info = { diff : diff } ;
434
448
log ( JSON . stringify ( info ) , _ . log . INFO ) ;
435
449
phantom . exit ( ) ;
0 commit comments