| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 | 2 |
| 3 <html ng-app="Loader" ng-controller="Loader.Controller"> | 3 <html ng-app="Loader" ng-controller="Loader.Controller"> |
| 4 | 4 |
| 5 <head> | 5 <head> |
| 6 <title ng-bind="windowTitle"></title> | 6 <title ng-bind="windowTitle"></title> |
| 7 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.js"
></script> | 7 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.js"
></script> |
| 8 <script src="constants.js"></script> | 8 <script src="constants.js"></script> |
| 9 <script src="loader.js"></script> | 9 <script src="loader.js"></script> |
| 10 <link rel="stylesheet" href="view.css"> | 10 <link rel="stylesheet" href="view.css"> |
| 11 </head> | 11 </head> |
| 12 | 12 |
| 13 <body> | 13 <body> |
| 14 <h2> | 14 <h2> |
| 15 Instructions, roadmap, etc. are at | 15 Instructions, roadmap, etc. are at |
| 16 <a href="http://tinyurl.com/SkiaRebaselineServer"> | 16 <a href="http://tinyurl.com/SkiaRebaselineServer"> |
| 17 http://tinyurl.com/SkiaRebaselineServer | 17 http://tinyurl.com/SkiaRebaselineServer |
| 18 </a> | 18 </a> |
| 19 </h2> | 19 </h2> |
| 20 | 20 |
| 21 <em> | 21 <em ng-show="!extraColumnHeaders"><!-- show until data is loaded --> |
| 22 Loading results from <a href="{{resultsToLoad}}">{{resultsToLoad}}</a> ... |
| 22 {{loadingMessage}} | 23 {{loadingMessage}} |
| 23 </em> | 24 </em> |
| 24 | 25 |
| 25 <div ng-show="extraColumnHeaders"><!-- everything: hide until data is loaded -
-> | 26 <div ng-show="extraColumnHeaders"><!-- everything: hide until data is loaded -
-> |
| 26 | 27 |
| 27 <div class="warning-div" | 28 <div class="warning-div" |
| 28 ng-show="header[constants.KEY__HEADER__IS_EDITABLE] && header[constants
.KEY__HEADER__IS_EXPORTED]"> | 29 ng-show="header[constants.KEY__HEADER__IS_EDITABLE] && header[constants
.KEY__HEADER__IS_EXPORTED]"> |
| 29 WARNING! These results are editable and exported, so any user | 30 WARNING! These results are editable and exported, so any user |
| 30 who can connect to this server over the network can modify them. | 31 who can connect to this server over the network can modify them. |
| 31 </div> | 32 </div> |
| 32 | 33 |
| 33 <div ng-show="header[constants.KEY__HEADER__TIME_UPDATED]"> | 34 <div ng-show="header[constants.KEY__HEADER__TIME_UPDATED]"> |
| 34 Results current as of {{localTimeString(header[constants.KEY__HEADER__TIME
_UPDATED])}} | 35 Results from <a href="{{resultsToLoad}}">{{resultsToLoad}}</a> current as
of {{localTimeString(header[constants.KEY__HEADER__TIME_UPDATED])}} |
| 35 </div> | 36 </div> |
| 36 | 37 |
| 37 <div><!-- tabs --> | 38 <div><!-- tabs --> |
| 38 <div class="tab-spacer" ng-repeat="tab in tabs"> | 39 <div class="tab-spacer" ng-repeat="tab in tabs"> |
| 39 <div class="tab-{{tab == viewingTab}}" | 40 <div class="tab-{{tab == viewingTab}}" |
| 40 ng-click="setViewingTab(tab)"> | 41 ng-click="setViewingTab(tab)"> |
| 41 {{tab}} ({{numResultsPerTab[tab]}}) | 42 {{tab}} ({{numResultsPerTab[tab]}}) |
| 42 </div> | 43 </div> |
| 43 <div class="tab-spacer"> | 44 <div class="tab-spacer"> |
| 44 | 45 |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 <!-- ... but there are a few columns where we display things different
ly. --> | 236 <!-- ... but there are a few columns where we display things different
ly. --> |
| 236 <th> | 237 <th> |
| 237 <input type="radio" | 238 <input type="radio" |
| 238 name="sortColumnRadio" | 239 name="sortColumnRadio" |
| 239 value="bugs" | 240 value="bugs" |
| 240 ng-checked="(sortColumnKey == constants.KEY__EXPECTATIONS__BU
GS)" | 241 ng-checked="(sortColumnKey == constants.KEY__EXPECTATIONS__BU
GS)" |
| 241 ng-click="sortResultsBy(constants.KEY__EXPECTATIONS_DATA, con
stants.KEY__EXPECTATIONS__BUGS)"> | 242 ng-click="sortResultsBy(constants.KEY__EXPECTATIONS_DATA, con
stants.KEY__EXPECTATIONS__BUGS)"> |
| 242 bugs | 243 bugs |
| 243 </th> | 244 </th> |
| 244 <th width="{{imageSize}}"> | 245 <th width="{{imageSize}}"> |
| 245 {{imageSets[0][constants.KEY__IMAGESETS__DESCRIPTION]}} | 246 {{imageSets[constants.KEY__IMAGESETS__SET__IMAGE_A][constants.KEY__I
MAGESETS__FIELD__DESCRIPTION]}} |
| 246 </th> | 247 </th> |
| 247 <th width="{{imageSize}}"> | 248 <th width="{{imageSize}}"> |
| 248 {{imageSets[1][constants.KEY__IMAGESETS__DESCRIPTION]}} | 249 {{imageSets[constants.KEY__IMAGESETS__SET__IMAGE_B][constants.KEY__I
MAGESETS__FIELD__DESCRIPTION]}} |
| 249 </th> | 250 </th> |
| 250 <th width="{{imageSize}}"> | 251 <th width="{{imageSize}}"> |
| 251 <input type="radio" | 252 <input type="radio" |
| 252 name="sortColumnRadio" | 253 name="sortColumnRadio" |
| 253 value="percentDifferingPixels" | 254 value="percentDifferingPixels" |
| 254 ng-checked="(sortColumnKey == constants.KEY__DIFFERENCE_DATA_
_PERCENT_DIFF_PIXELS)" | 255 ng-checked="(sortColumnKey == constants.KEY__DIFFERENCE_DATA_
_PERCENT_DIFF_PIXELS)" |
| 255 ng-click="sortResultsBy(constants.KEY__DIFFERENCE_DATA, const
ants.KEY__DIFFERENCE_DATA__PERCENT_DIFF_PIXELS)"> | 256 ng-click="sortResultsBy(constants.KEY__DIFFERENCE_DATA, const
ants.KEY__DIFFERENCE_DATA__PERCENT_DIFF_PIXELS)"> |
| 256 differing pixels in white | 257 differing pixels in white |
| 257 </th> | 258 </th> |
| 258 <th width="{{imageSize}}"> | 259 <th width="{{imageSize}}"> |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 <a ng-repeat="bug in imagePair[constants.KEY__EXPECTATIONS_DATA][con
stants.KEY__EXPECTATIONS__BUGS]" | 335 <a ng-repeat="bug in imagePair[constants.KEY__EXPECTATIONS_DATA][con
stants.KEY__EXPECTATIONS__BUGS]" |
| 335 href="https://code.google.com/p/skia/issues/detail?id={{bug}}" | 336 href="https://code.google.com/p/skia/issues/detail?id={{bug}}" |
| 336 target="_blank"> | 337 target="_blank"> |
| 337 {{bug}} | 338 {{bug}} |
| 338 </a> | 339 </a> |
| 339 </td> | 340 </td> |
| 340 | 341 |
| 341 <!-- image A --> | 342 <!-- image A --> |
| 342 <td valign="bottom" width="{{imageSize}}"> | 343 <td valign="bottom" width="{{imageSize}}"> |
| 343 <div ng-if="imagePair[constants.KEY__IMAGE_A_URL] != null"> | 344 <div ng-if="imagePair[constants.KEY__IMAGE_A_URL] != null"> |
| 344 <a href="{{imageSets[0][constants.KEY__IMAGESETS__BASE_URL]}}/{{im
agePair[constants.KEY__IMAGE_A_URL]}}" target="_blank">View Image</a><br/> | 345 <a href="{{imageSets[constants.KEY__IMAGESETS__SET__IMAGE_A][const
ants.KEY__IMAGESETS__FIELD__BASE_URL]}}/{{imagePair[constants.KEY__IMAGE_A_URL]}
}" target="_blank">View Image</a><br/> |
| 345 <img ng-if="showThumbnails" | 346 <img ng-if="showThumbnails" |
| 346 width="{{imageSize}}" | 347 width="{{imageSize}}" |
| 347 src="{{imageSets[0][constants.KEY__IMAGESETS__BASE_URL]}}/{{i
magePair[constants.KEY__IMAGE_A_URL]}}" /> | 348 src="{{imageSets[constants.KEY__IMAGESETS__SET__IMAGE_A][cons
tants.KEY__IMAGESETS__FIELD__BASE_URL]}}/{{imagePair[constants.KEY__IMAGE_A_URL]
}}" /> |
| 348 </div> | 349 </div> |
| 349 <div ng-show="imagePair[constants.KEY__IMAGE_A_URL] == null" | 350 <div ng-show="imagePair[constants.KEY__IMAGE_A_URL] == null" |
| 350 style="text-align:center"> | 351 style="text-align:center"> |
| 351 –none– | 352 –none– |
| 352 </div> | 353 </div> |
| 353 </td> | 354 </td> |
| 354 | 355 |
| 355 <!-- image B --> | 356 <!-- image B --> |
| 356 <td valign="bottom" width="{{imageSize}}"> | 357 <td valign="bottom" width="{{imageSize}}"> |
| 357 <div ng-if="imagePair[constants.KEY__IMAGE_B_URL] != null"> | 358 <div ng-if="imagePair[constants.KEY__IMAGE_B_URL] != null"> |
| 358 <a href="{{imageSets[1][constants.KEY__IMAGESETS__BASE_URL]}}/{{im
agePair[constants.KEY__IMAGE_B_URL]}}" target="_blank">View Image</a><br/> | 359 <a href="{{imageSets[constants.KEY__IMAGESETS__SET__IMAGE_B][const
ants.KEY__IMAGESETS__FIELD__BASE_URL]}}/{{imagePair[constants.KEY__IMAGE_B_URL]}
}" target="_blank">View Image</a><br/> |
| 359 <img ng-if="showThumbnails" | 360 <img ng-if="showThumbnails" |
| 360 width="{{imageSize}}" | 361 width="{{imageSize}}" |
| 361 src="{{imageSets[1][constants.KEY__IMAGESETS__BASE_URL]}}/{{i
magePair[constants.KEY__IMAGE_B_URL]}}" /> | 362 src="{{imageSets[constants.KEY__IMAGESETS__SET__IMAGE_B][cons
tants.KEY__IMAGESETS__FIELD__BASE_URL]}}/{{imagePair[constants.KEY__IMAGE_B_URL]
}}" /> |
| 362 </div> | 363 </div> |
| 363 <div ng-show="imagePair[constants.KEY__IMAGE_B_URL] == null" | 364 <div ng-show="imagePair[constants.KEY__IMAGE_B_URL] == null" |
| 364 style="text-align:center"> | 365 style="text-align:center"> |
| 365 –none– | 366 –none– |
| 366 </div> | 367 </div> |
| 367 </td> | 368 </td> |
| 368 | 369 |
| 369 <!-- whitediffs: every differing pixel shown in white --> | 370 <!-- whitediffs: every differing pixel shown in white --> |
| 370 <td valign="bottom" width="{{imageSize}}"> | 371 <td valign="bottom" width="{{imageSize}}"> |
| 371 <div ng-if="imagePair[constants.KEY__IS_DIFFERENT]" | 372 <div ng-if="imagePair[constants.KEY__IS_DIFFERENT]" |
| 372 title="{{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KE
Y__DIFFERENCE_DATA__NUM_DIFF_PIXELS] | number:0}} of {{(100 * imagePair[constant
s.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERENCE_DATA__NUM_DIFF_PIXELS] / image
Pair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERENCE_DATA__PERCENT_DIF
F_PIXELS]) | number:0}} pixels ({{imagePair[constants.KEY__DIFFERENCE_DATA][cons
tants.KEY__DIFFERENCE_DATA__PERCENT_DIFF_PIXELS].toFixed(4)}}%) differ from expe
ctation."> | 373 title="{{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KE
Y__DIFFERENCE_DATA__NUM_DIFF_PIXELS] | number:0}} of {{(100 * imagePair[constant
s.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERENCE_DATA__NUM_DIFF_PIXELS] / image
Pair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERENCE_DATA__PERCENT_DIF
F_PIXELS]) | number:0}} pixels ({{imagePair[constants.KEY__DIFFERENCE_DATA][cons
tants.KEY__DIFFERENCE_DATA__PERCENT_DIFF_PIXELS].toFixed(4)}}%) differ from expe
ctation."> |
| 373 | 374 |
| 374 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE
NCE_DATA__PERCENT_DIFF_PIXELS].toFixed(4)}}% | 375 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE
NCE_DATA__PERCENT_DIFF_PIXELS].toFixed(4)}}% |
| 375 ({{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFER
ENCE_DATA__NUM_DIFF_PIXELS]}}) | 376 ({{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFER
ENCE_DATA__NUM_DIFF_PIXELS]}}) |
| 376 <br/> | 377 <br/> |
| 377 <a href="/static/generated-images/whitediffs/{{getImageDiffRelativ
eUrl(imagePair)}}" target="_blank">View Image</a><br/> | 378 <a href="{{imageSets[constants.KEY__IMAGESETS__SET__WHITEDIFFS][co
nstants.KEY__IMAGESETS__FIELD__BASE_URL]}}/{{getImageDiffRelativeUrl(imagePair)}
}" target="_blank">View Image</a><br/> |
| 378 <img ng-if="showThumbnails" | 379 <img ng-if="showThumbnails" |
| 379 width="{{imageSize}}" | 380 width="{{imageSize}}" |
| 380 src="/static/generated-images/whitediffs/{{getImageDiffRelati
veUrl(imagePair)}}" /> | 381 src="{{imageSets[constants.KEY__IMAGESETS__SET__WHITEDIFFS][c
onstants.KEY__IMAGESETS__FIELD__BASE_URL]}}/{{getImageDiffRelativeUrl(imagePair)
}}" /> |
| 381 </div> | 382 </div> |
| 382 <div ng-show="!imagePair[constants.KEY__IS_DIFFERENT]" | 383 <div ng-show="!imagePair[constants.KEY__IS_DIFFERENT]" |
| 383 style="text-align:center"> | 384 style="text-align:center"> |
| 384 –none– | 385 –none– |
| 385 </div> | 386 </div> |
| 386 </td> | 387 </td> |
| 387 | 388 |
| 388 <!-- diffs: per-channel RGB deltas --> | 389 <!-- diffs: per-channel RGB deltas --> |
| 389 <td valign="bottom" width="{{imageSize}}"> | 390 <td valign="bottom" width="{{imageSize}}"> |
| 390 <div ng-if="imagePair[constants.KEY__IS_DIFFERENT]" | 391 <div ng-if="imagePair[constants.KEY__IS_DIFFERENT]" |
| 391 title="Perceptual difference measure is {{imagePair[constants.K
EY__DIFFERENCE_DATA][constants.KEY__DIFFERENCE_DATA__PERCEPTUAL_DIFF].toFixed(4)
}}%. Maximum difference per channel: R={{imagePair[constants.KEY__DIFFERENCE_DA
TA][constants.KEY__DIFFERENCE_DATA__MAX_DIFF_PER_CHANNEL][0]}}, G={{imagePair[co
nstants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERENCE_DATA__MAX_DIFF_PER_CHANN
EL][1]}}, B={{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERENC
E_DATA__MAX_DIFF_PER_CHANNEL][2]}}"> | 392 title="Perceptual difference measure is {{imagePair[constants.K
EY__DIFFERENCE_DATA][constants.KEY__DIFFERENCE_DATA__PERCEPTUAL_DIFF].toFixed(4)
}}%. Maximum difference per channel: R={{imagePair[constants.KEY__DIFFERENCE_DA
TA][constants.KEY__DIFFERENCE_DATA__MAX_DIFF_PER_CHANNEL][0]}}, G={{imagePair[co
nstants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERENCE_DATA__MAX_DIFF_PER_CHANN
EL][1]}}, B={{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERENC
E_DATA__MAX_DIFF_PER_CHANNEL][2]}}"> |
| 392 | 393 |
| 393 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE
NCE_DATA__PERCEPTUAL_DIFF].toFixed(4)}}% | 394 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE
NCE_DATA__PERCEPTUAL_DIFF].toFixed(4)}}% |
| 394 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE
NCE_DATA__MAX_DIFF_PER_CHANNEL]}} | 395 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE
NCE_DATA__MAX_DIFF_PER_CHANNEL]}} |
| 395 <br/> | 396 <br/> |
| 396 <a href="/static/generated-images/diffs/{{getImageDiffRelativeUrl(
imagePair)}}" target="_blank">View Image</a><br/> | 397 <a href="{{imageSets[constants.KEY__IMAGESETS__SET__DIFFS][constan
ts.KEY__IMAGESETS__FIELD__BASE_URL]}}/{{getImageDiffRelativeUrl(imagePair)}}" ta
rget="_blank">View Image</a><br/> |
| 397 <img ng-if="showThumbnails" | 398 <img ng-if="showThumbnails" |
| 398 ng-style="{backgroundColor: pixelDiffBgColor}" | 399 ng-style="{backgroundColor: pixelDiffBgColor}" |
| 399 width="{{imageSize}}" | 400 width="{{imageSize}}" |
| 400 src="/static/generated-images/diffs/{{getImageDiffRelativeUrl
(imagePair)}}"/> | 401 src="{{imageSets[constants.KEY__IMAGESETS__SET__DIFFS][consta
nts.KEY__IMAGESETS__FIELD__BASE_URL]}}/{{getImageDiffRelativeUrl(imagePair)}}" /
> |
| 401 </div> | 402 </div> |
| 402 <div ng-show="!imagePair[constants.KEY__IS_DIFFERENT]" | 403 <div ng-show="!imagePair[constants.KEY__IS_DIFFERENT]" |
| 403 style="text-align:center"> | 404 style="text-align:center"> |
| 404 –none– | 405 –none– |
| 405 </div> | 406 </div> |
| 406 </td> | 407 </td> |
| 407 | 408 |
| 408 <td> | 409 <td> |
| 409 <input type="checkbox" | 410 <input type="checkbox" |
| 410 name="rowSelect" | 411 name="rowSelect" |
| 411 value="{{imagePair.index}}" | 412 value="{{imagePair.index}}" |
| 412 ng-checked="isValueInArray(imagePair.index, selectedImagePair
s)" | 413 ng-checked="isValueInArray(imagePair.index, selectedImagePair
s)" |
| 413 ng-click="toggleValueInArray(imagePair.index, selectedImagePa
irs)"> | 414 ng-click="toggleValueInArray(imagePair.index, selectedImagePa
irs)"> |
| 414 </tr> | 415 </tr> |
| 415 </table> <!-- imagePairs --> | 416 </table> <!-- imagePairs --> |
| 416 </td></tr></table> <!-- table holding results header + imagePairs table --> | 417 </td></tr></table> <!-- table holding results header + imagePairs table --> |
| 417 | 418 |
| 418 </div><!-- main display area of selected tab --> | 419 </div><!-- main display area of selected tab --> |
| 419 </div><!-- everything: hide until data is loaded --> | 420 </div><!-- everything: hide until data is loaded --> |
| 420 | 421 |
| 421 </body> | 422 </body> |
| 422 </html> | 423 </html> |
| OLD | NEW |