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="diff_viewer.js"></script> | 9 <script src="diff_viewer.js"></script> |
10 <script src="loader.js"></script> | 10 <script src="loader.js"></script> |
11 <link rel="stylesheet" href="view.css"> | 11 <link rel="stylesheet" href="view.css"> |
12 </head> | 12 </head> |
13 | 13 |
14 <body> | 14 <body> |
15 <h2> | 15 <h2> |
16 Instructions, roadmap, etc. are at | 16 Instructions, roadmap, etc. are at |
17 <a href="http://tinyurl.com/SkiaRebaselineServer"> | 17 <a href="http://tinyurl.com/SkiaRebaselineServer"> |
18 http://tinyurl.com/SkiaRebaselineServer | 18 http://tinyurl.com/SkiaRebaselineServer |
19 </a> | 19 </a> |
20 </h2> | 20 </h2> |
21 | 21 |
22 <em> | 22 <em> |
23 {{loadingMessage}} | 23 {{loadingMessage}} |
24 </em> | 24 </em> |
25 | 25 |
26 <div ng-hide="!extraColumnHeaders"><!-- everything: hide until data is loaded --> | 26 <div ng-show="extraColumnHeaders"><!-- everything: hide until data is loaded - -> |
epoger
2014/03/05 18:25:28
Where we are guarding against img src loading, I h
borenet
2014/03/05 19:03:56
Just curious - what problems did use of ng-if inst
| |
27 | 27 |
28 <div class="warning-div" | 28 <div class="warning-div" |
29 ng-hide="!(header[constants.KEY__HEADER__IS_EDITABLE] && header[constan ts.KEY__HEADER__IS_EXPORTED])"> | 29 ng-show="header[constants.KEY__HEADER__IS_EDITABLE] && header[constants .KEY__HEADER__IS_EXPORTED]"> |
30 WARNING! These results are editable and exported, so any user | 30 WARNING! These results are editable and exported, so any user |
31 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. |
32 </div> | 32 </div> |
33 | 33 |
34 <div ng-hide="!(header[constants.KEY__HEADER__TIME_UPDATED])"> | 34 <div ng-show="header[constants.KEY__HEADER__TIME_UPDATED]"> |
35 Results current as of {{localTimeString(header[constants.KEY__HEADER__TIME _UPDATED])}} | 35 Results current as of {{localTimeString(header[constants.KEY__HEADER__TIME _UPDATED])}} |
36 </div> | 36 </div> |
37 | 37 |
38 <div><!-- tabs --> | 38 <div><!-- tabs --> |
39 <div class="tab-spacer" ng-repeat="tab in tabs"> | 39 <div class="tab-spacer" ng-repeat="tab in tabs"> |
40 <div class="tab-{{tab == viewingTab}}" | 40 <div class="tab-{{tab == viewingTab}}" |
41 ng-click="setViewingTab(tab)"> | 41 ng-click="setViewingTab(tab)"> |
42 {{tab}} ({{numResultsPerTab[tab]}}) | 42 {{tab}} ({{numResultsPerTab[tab]}}) |
43 </div> | 43 </div> |
44 <div class="tab-spacer"> | 44 <div class="tab-spacer"> |
45 | 45 |
46 </div> | 46 </div> |
47 </div> | 47 </div> |
48 </div><!-- tabs --> | 48 </div><!-- tabs --> |
49 | 49 |
50 <div class="tab-main"><!-- main display area of selected tab --> | 50 <div class="tab-main"><!-- main display area of selected tab --> |
51 | 51 |
52 <br> | 52 <br> |
53 <!-- We only show the filters/settings table on the Unfiled tab. --> | 53 <!-- We only show the filters/settings table on the Unfiled tab. --> |
54 <table ng-hide="viewingTab != defaultTab" border="1"> | 54 <table ng-show="viewingTab == defaultTab" border="1"> |
55 <tr> | 55 <tr> |
56 <th colspan="4"> | 56 <th colspan="4"> |
57 Filters | 57 Filters |
58 </th> | 58 </th> |
59 <th> | 59 <th> |
60 Settings | 60 Settings |
61 </th> | 61 </th> |
62 </tr> | 62 </tr> |
63 <tr valign="top"> | 63 <tr valign="top"> |
64 <td> | 64 <td> |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
108 </button> | 108 </button> |
109 <button ng-click="hiddenConfigs = {}; toggleValuesInSet(allConfigs, hidd enConfigs); updateResults()"> | 109 <button ng-click="hiddenConfigs = {}; toggleValuesInSet(allConfigs, hidd enConfigs); updateResults()"> |
110 none | 110 none |
111 </button> | 111 </button> |
112 <button ng-click="toggleValuesInSet(allConfigs, hiddenConfigs); updateRe sults()"> | 112 <button ng-click="toggleValuesInSet(allConfigs, hiddenConfigs); updateRe sults()"> |
113 toggle | 113 toggle |
114 </button> | 114 </button> |
115 </td> | 115 </td> |
116 <td><table> | 116 <td><table> |
117 <tr><td> | 117 <tr><td> |
118 <input type="checkbox" ng-model="showThumbnailsPending" | |
119 ng-init="showThumbnailsPending = true" | |
120 ng-change="areUpdatesPending = true"/> | |
121 Show thumbnails | |
122 </td></tr> | |
123 <tr><td> | |
118 Image width | 124 Image width |
119 <input type="text" ng-model="imageSizePending" | 125 <input type="text" ng-model="imageSizePending" |
120 ng-init="imageSizePending=100" | 126 ng-init="imageSizePending=100" |
121 ng-change="areUpdatesPending = true" | 127 ng-change="areUpdatesPending = true" |
122 maxlength="4"/> | 128 maxlength="4"/> |
123 </td></tr> | 129 </td></tr> |
124 <tr><td> | 130 <tr><td> |
125 Max records to display | 131 Max records to display |
126 <input type="text" ng-model="displayLimitPending" | 132 <input type="text" ng-model="displayLimitPending" |
127 ng-init="displayLimitPending=50" | 133 ng-init="displayLimitPending=50" |
128 ng-change="areUpdatesPending = true" | 134 ng-change="areUpdatesPending = true" |
129 maxlength="4"/> | 135 maxlength="4"/> |
130 </td></tr> | 136 </td></tr> |
131 <tr><td> | 137 <tr><td> |
132 <button class="update-results-button" | 138 <button class="update-results-button" |
133 ng-click="updateResults()" | 139 ng-click="updateResults()" |
134 ng-disabled="!areUpdatesPending"> | 140 ng-disabled="!areUpdatesPending"> |
135 Update Results | 141 Update Results |
136 </button> | 142 </button> |
137 </td></tr> | 143 </td></tr> |
138 </tr></table></td> | 144 </tr></table></td> |
139 </tr> | 145 </tr> |
140 </table> | 146 </table> |
141 | 147 |
142 <p> | 148 <p> |
143 | 149 |
144 <!-- Submission UI that we only show in the Pending Approval tab. --> | 150 <!-- Submission UI that we only show in the Pending Approval tab. --> |
145 <div ng-hide="'Pending Approval' != viewingTab"> | 151 <div ng-show="'Pending Approval' == viewingTab"> |
146 <div style="display:inline-block"> | 152 <div style="display:inline-block"> |
147 <button style="font-size:20px" | 153 <button style="font-size:20px" |
148 ng-click="submitApprovals(filteredImagePairs)" | 154 ng-click="submitApprovals(filteredImagePairs)" |
149 ng-disabled="submitPending || (filteredImagePairs.length == 0) "> | 155 ng-disabled="submitPending || (filteredImagePairs.length == 0) "> |
150 Update these {{filteredImagePairs.length}} expectations on the serve r | 156 Update these {{filteredImagePairs.length}} expectations on the serve r |
151 </button> | 157 </button> |
152 </div> | 158 </div> |
153 <div style="display:inline-block"> | 159 <div style="display:inline-block"> |
154 <div style="font-size:20px" | 160 <div style="font-size:20px" |
155 ng-hide="!submitPending"> | 161 ng-show="submitPending"> |
156 Submitting, please wait... | 162 Submitting, please wait... |
157 </div> | 163 </div> |
158 </div> | 164 </div> |
159 <div> | 165 <div> |
160 Advanced settings... | 166 Advanced settings... |
161 <input type="checkbox" ng-model="showSubmitAdvancedSettings"> | 167 <input type="checkbox" ng-model="showSubmitAdvancedSettings"> |
162 show | 168 show |
163 <ul ng-hide="!showSubmitAdvancedSettings"> | 169 <ul ng-show="showSubmitAdvancedSettings"> |
164 <li ng-repeat="setting in [constants.KEY__EXPECTATIONS__REVIEWED, co nstants.KEY__EXPECTATIONS__IGNOREFAILURE]"> | 170 <li ng-repeat="setting in [constants.KEY__EXPECTATIONS__REVIEWED, co nstants.KEY__EXPECTATIONS__IGNOREFAILURE]"> |
165 {{setting}} | 171 {{setting}} |
166 <input type="checkbox" ng-model="submitAdvancedSettings[setting]"> | 172 <input type="checkbox" ng-model="submitAdvancedSettings[setting]"> |
167 </li> | 173 </li> |
168 <li ng-repeat="setting in ['bug']"> | 174 <li ng-repeat="setting in ['bug']"> |
169 {{setting}} | 175 {{setting}} |
170 <input type="text" ng-model="submitAdvancedSettings[setting]"> | 176 <input type="text" ng-model="submitAdvancedSettings[setting]"> |
171 </li> | 177 </li> |
172 </ul> | 178 </ul> |
173 </div> | 179 </div> |
174 </div> | 180 </div> |
175 | 181 |
176 <p> | 182 <p> |
177 | 183 |
178 <table border="0"><tr><td> <!-- table holding results header + results table --> | 184 <table border="0"><tr><td> <!-- table holding results header + results table --> |
179 <table border="0" width="100%"> <!-- results header --> | 185 <table border="0" width="100%"> <!-- results header --> |
180 <tr> | 186 <tr> |
181 <td> | 187 <td> |
182 Found {{filteredImagePairs.length}} matches; | 188 Found {{filteredImagePairs.length}} matches; |
183 <span ng-hide="filteredImagePairs.length <= limitedImagePairs.length "> | 189 <span ng-show="filteredImagePairs.length > limitedImagePairs.length" > |
184 displaying the first {{limitedImagePairs.length}} | 190 displaying the first {{limitedImagePairs.length}} |
185 </span> | 191 </span> |
186 <span ng-hide="filteredImagePairs.length > limitedImagePairs.length" > | 192 <span ng-show="filteredImagePairs.length <= limitedImagePairs.length "> |
187 displaying them all | 193 displaying them all |
188 </span> | 194 </span> |
189 <br> | 195 <br> |
190 (click on the column header radio buttons to re-sort by that column) | 196 (click on the column header radio buttons to re-sort by that column) |
191 </td> | 197 </td> |
192 <td align="right"> | 198 <td align="right"> |
193 <div> | 199 <div> |
194 all tests shown: | 200 all tests shown: |
195 <button ng-click="selectAllImagePairs()"> | 201 <button ng-click="selectAllImagePairs()"> |
196 select | 202 select |
197 </button> | 203 </button> |
198 <button ng-click="clearAllImagePairs()"> | 204 <button ng-click="clearAllImagePairs()"> |
199 clear | 205 clear |
200 </button> | 206 </button> |
201 <button ng-click="toggleAllImagePairs()"> | 207 <button ng-click="toggleAllImagePairs()"> |
202 toggle | 208 toggle |
203 </button> | 209 </button> |
204 </div> | 210 </div> |
205 <div ng-repeat="otherTab in tabs"> | 211 <div ng-repeat="otherTab in tabs"> |
206 <button ng-click="moveSelectedImagePairsToTab(otherTab)" | 212 <button ng-click="moveSelectedImagePairsToTab(otherTab)" |
207 ng-disabled="selectedImagePairs.length == 0" | 213 ng-disabled="selectedImagePairs.length == 0" |
208 ng-hide="otherTab == viewingTab"> | 214 ng-show="otherTab != viewingTab"> |
209 move {{selectedImagePairs.length}} selected tests to {{otherTab} } tab | 215 move {{selectedImagePairs.length}} selected tests to {{otherTab} } tab |
210 </button> | 216 </button> |
211 </div> | 217 </div> |
212 </td> | 218 </td> |
213 </tr> | 219 </tr> |
214 </table> <!-- results header --> | 220 </table> <!-- results header --> |
215 </td></tr><tr><td> | 221 </td></tr><tr><td> |
216 <table border="1" ng-app="diff_viewer"> <!-- results --> | 222 <table border="1" ng-app="diff_viewer"> <!-- results --> |
217 <tr> | 223 <tr> |
218 <!-- Most column headers are displayed in a common fashion... --> | 224 <!-- Most column headers are displayed in a common fashion... --> |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
264 <th> | 270 <th> |
265 <!-- imagepair-selection checkbox column --> | 271 <!-- imagepair-selection checkbox column --> |
266 </th> | 272 </th> |
267 </tr> | 273 </tr> |
268 | 274 |
269 <tr ng-repeat="imagePair in limitedImagePairs" ng-controller="ImageContr oller"> | 275 <tr ng-repeat="imagePair in limitedImagePairs" ng-controller="ImageContr oller"> |
270 <td> | 276 <td> |
271 {{imagePair[constants.KEY__EXTRA_COLUMN_VALUES][constants.KEY__EXTRA COLUMN__RESULT_TYPE]}} | 277 {{imagePair[constants.KEY__EXTRA_COLUMN_VALUES][constants.KEY__EXTRA COLUMN__RESULT_TYPE]}} |
272 <br> | 278 <br> |
273 <button class="show-only-button" | 279 <button class="show-only-button" |
274 ng-hide="viewingTab != defaultTab" | 280 ng-show="viewingTab == defaultTab" |
275 ng-click="showOnlyResultType(imagePair[constants.KEY__EXTRA_ COLUMN_VALUES][constants.KEY__EXTRACOLUMN__RESULT_TYPE])" | 281 ng-click="showOnlyResultType(imagePair[constants.KEY__EXTRA_ COLUMN_VALUES][constants.KEY__EXTRACOLUMN__RESULT_TYPE])" |
276 title="show only results of type {{imagePair[constants.KEY__ EXTRA_COLUMN_VALUES][constants.KEY__EXTRACOLUMN__RESULT_TYPE]}}"> | 282 title="show only results of type {{imagePair[constants.KEY__ EXTRA_COLUMN_VALUES][constants.KEY__EXTRACOLUMN__RESULT_TYPE]}}"> |
277 show only | 283 show only |
278 </button> | 284 </button> |
279 <br> | 285 <br> |
280 <button class="show-all-button" | 286 <button class="show-all-button" |
281 ng-hide="viewingTab != defaultTab" | 287 ng-show="viewingTab == defaultTab" |
282 ng-disabled="0 == setSize(hiddenResultTypes)" | 288 ng-disabled="0 == setSize(hiddenResultTypes)" |
283 ng-click="showAllResultTypes()" | 289 ng-click="showAllResultTypes()" |
284 title="show results of all types"> | 290 title="show results of all types"> |
285 show all | 291 show all |
286 </button> | 292 </button> |
287 </td> | 293 </td> |
288 <td ng-repeat="categoryName in [constants.KEY__EXTRACOLUMN__BUILDER, c onstants.KEY__EXTRACOLUMN__TEST]"> | 294 <td ng-repeat="categoryName in [constants.KEY__EXTRACOLUMN__BUILDER, c onstants.KEY__EXTRACOLUMN__TEST]"> |
289 {{imagePair[constants.KEY__EXTRA_COLUMN_VALUES][categoryName]}} | 295 {{imagePair[constants.KEY__EXTRA_COLUMN_VALUES][categoryName]}} |
290 <br> | 296 <br> |
291 <button class="show-only-button" | 297 <button class="show-only-button" |
292 ng-hide="viewingTab != defaultTab" | 298 ng-show="viewingTab == defaultTab" |
293 ng-disabled="imagePair[constants.KEY__EXTRA_COLUMN_VALUES][c ategoryName] == categoryValueMatch[categoryName]" | 299 ng-disabled="imagePair[constants.KEY__EXTRA_COLUMN_VALUES][c ategoryName] == categoryValueMatch[categoryName]" |
294 ng-click="setCategoryValueMatch(categoryName, imagePair[cons tants.KEY__EXTRA_COLUMN_VALUES][categoryName])" | 300 ng-click="setCategoryValueMatch(categoryName, imagePair[cons tants.KEY__EXTRA_COLUMN_VALUES][categoryName])" |
295 title="show only results of {{categoryName}} {{imagePair[con stants.KEY__EXTRA_COLUMN_VALUES][categoryName]}}"> | 301 title="show only results of {{categoryName}} {{imagePair[con stants.KEY__EXTRA_COLUMN_VALUES][categoryName]}}"> |
296 show only | 302 show only |
297 </button> | 303 </button> |
298 <br> | 304 <br> |
299 <button class="show-all-button" | 305 <button class="show-all-button" |
300 ng-hide="viewingTab != defaultTab" | 306 ng-show="viewingTab == defaultTab" |
301 ng-disabled="'' == categoryValueMatch[categoryName]" | 307 ng-disabled="'' == categoryValueMatch[categoryName]" |
302 ng-click="setCategoryValueMatch(categoryName, '')" | 308 ng-click="setCategoryValueMatch(categoryName, '')" |
303 title="show results of all {{categoryName}}s"> | 309 title="show results of all {{categoryName}}s"> |
304 show all | 310 show all |
305 </button> | 311 </button> |
306 </td> | 312 </td> |
307 <td> | 313 <td> |
308 {{imagePair[constants.KEY__EXTRA_COLUMN_VALUES][constants.KEY__EXTRA COLUMN__CONFIG]}} | 314 {{imagePair[constants.KEY__EXTRA_COLUMN_VALUES][constants.KEY__EXTRA COLUMN__CONFIG]}} |
309 <br> | 315 <br> |
310 <button class="show-only-button" | 316 <button class="show-only-button" |
311 ng-hide="viewingTab != defaultTab" | 317 ng-show="viewingTab == defaultTab" |
312 ng-click="showOnlyConfig(imagePair[constants.KEY__EXTRA_COLU MN_VALUES][constants.KEY__EXTRACOLUMN__CONFIG])" | 318 ng-click="showOnlyConfig(imagePair[constants.KEY__EXTRA_COLU MN_VALUES][constants.KEY__EXTRACOLUMN__CONFIG])" |
313 title="show only results of config {{imagePair[constants.KEY __EXTRA_COLUMN_VALUES][constants.KEY__EXTRACOLUMN__CONFIG]}}"> | 319 title="show only results of config {{imagePair[constants.KEY __EXTRA_COLUMN_VALUES][constants.KEY__EXTRACOLUMN__CONFIG]}}"> |
314 show only | 320 show only |
315 </button> | 321 </button> |
316 <br> | 322 <br> |
317 <button class="show-all-button" | 323 <button class="show-all-button" |
318 ng-hide="viewingTab != defaultTab" | 324 ng-show="viewingTab == defaultTab" |
319 ng-disabled="0 == setSize(hiddenConfigs)" | 325 ng-disabled="0 == setSize(hiddenConfigs)" |
320 ng-click="showAllConfigs()" | 326 ng-click="showAllConfigs()" |
321 title="show results of all configs"> | 327 title="show results of all configs"> |
322 show all | 328 show all |
323 </button> | 329 </button> |
324 </td> | 330 </td> |
325 <td> | 331 <td> |
326 <a ng-repeat="bug in imagePair[constants.KEY__EXPECTATIONS_DATA][con stants.KEY__EXPECTATIONS__BUGS]" | 332 <a ng-repeat="bug in imagePair[constants.KEY__EXPECTATIONS_DATA][con stants.KEY__EXPECTATIONS__BUGS]" |
327 href="https://code.google.com/p/skia/issues/detail?id={{bug}}" | 333 href="https://code.google.com/p/skia/issues/detail?id={{bug}}" |
328 target="_blank"> | 334 target="_blank"> |
329 {{bug}} | 335 {{bug}} |
330 </a> | 336 </a> |
331 </td> | 337 </td> |
332 | 338 |
333 <!-- image A --> | 339 <!-- image A --> |
334 <td valign="bottom" width="{{imageSize}}"> | 340 <td valign="bottom" width="{{imageSize}}"> |
335 <a href="{{imageSets[0][constants.KEY__IMAGESETS__BASE_URL]}}/{{imag ePair[constants.KEY__IMAGE_A_URL]}}" target="_blank">View Image</a><br/> | 341 <div ng-if="imagePair[constants.KEY__IMAGE_A_URL] != null"> |
336 <img-compare type="baseline" width="{{imageSize}}" | 342 <a href="{{imageSets[0][constants.KEY__IMAGESETS__BASE_URL]}}/{{im agePair[constants.KEY__IMAGE_A_URL]}}" target="_blank">View Image</a><br/> |
337 src="{{imageSets[0][constants.KEY__IMAGESETS__BASE_URL] }}/{{imagePair[constants.KEY__IMAGE_A_URL]}}" /> | 343 <img-compare ng-if="showThumbnails" |
344 type="baseline" width="{{imageSize}}" | |
345 src="{{imageSets[0][constants.KEY__IMAGESETS__BASE_UR L]}}/{{imagePair[constants.KEY__IMAGE_A_URL]}}" /> | |
346 </div> | |
347 <div ng-show="imagePair[constants.KEY__IMAGE_A_URL] == null" | |
348 style="text-align:center"> | |
349 –none– | |
350 </div> | |
338 </td> | 351 </td> |
339 | 352 |
340 <!-- image B --> | 353 <!-- image B --> |
341 <td valign="bottom" width="{{imageSize}}"> | 354 <td valign="bottom" width="{{imageSize}}"> |
342 <a href="{{imageSets[1][constants.KEY__IMAGESETS__BASE_URL]}}/{{imag ePair[constants.KEY__IMAGE_B_URL]}}" target="_blank">View Image</a><br/> | 355 <div ng-if="imagePair[constants.KEY__IMAGE_B_URL] != null"> |
343 <img-compare type="test" width="{{imageSize}}" | 356 <a href="{{imageSets[1][constants.KEY__IMAGESETS__BASE_URL]}}/{{im agePair[constants.KEY__IMAGE_B_URL]}}" target="_blank">View Image</a><br/> |
344 src="{{imageSets[1][constants.KEY__IMAGESETS__BASE_URL] }}/{{imagePair[constants.KEY__IMAGE_B_URL]}}" /> | 357 <img-compare ng-if="showThumbnails" |
358 type="test" width="{{imageSize}}" | |
359 src="{{imageSets[1][constants.KEY__IMAGESETS__BASE_UR L]}}/{{imagePair[constants.KEY__IMAGE_B_URL]}}" /> | |
360 </div> | |
361 <div ng-show="imagePair[constants.KEY__IMAGE_B_URL] == null" | |
362 style="text-align:center"> | |
363 –none– | |
364 </div> | |
345 </td> | 365 </td> |
346 | 366 |
347 <!-- whitediffs: every differing pixel shown in white --> | 367 <!-- whitediffs: every differing pixel shown in white --> |
348 <td valign="bottom" width="{{imageSize}}"> | 368 <td valign="bottom" width="{{imageSize}}"> |
349 <div ng-hide="!imagePair[constants.KEY__IS_DIFFERENT]" | 369 <div ng-if="imagePair[constants.KEY__IS_DIFFERENT]" |
350 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."> | 370 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."> |
351 | 371 |
352 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE NCE_DATA__PERCENT_DIFF_PIXELS].toFixed(4)}}% | 372 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE NCE_DATA__PERCENT_DIFF_PIXELS].toFixed(4)}}% |
353 ({{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFER ENCE_DATA__NUM_DIFF_PIXELS]}}) | 373 ({{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFER ENCE_DATA__NUM_DIFF_PIXELS]}}) |
354 <br/> | 374 <br/> |
355 <a href="/static/generated-images/whitediffs/{{getImageDiffRelativ eUrl(imagePair)}}" target="_blank">View Image</a><br/> | 375 <a href="/static/generated-images/whitediffs/{{getImageDiffRelativ eUrl(imagePair)}}" target="_blank">View Image</a><br/> |
356 <img-compare type="differingPixelsInWhite" width="{{imageSize}}" | 376 <img-compare ng-if="showThumbnails" |
377 type="differingPixelsInWhite" width="{{imageSize}}" | |
357 src="/static/generated-images/whitediffs/{{getImageDi ffRelativeUrl(imagePair)}}" /> | 378 src="/static/generated-images/whitediffs/{{getImageDi ffRelativeUrl(imagePair)}}" /> |
358 | |
359 </div> | 379 </div> |
360 <div ng-hide="imagePair[constants.KEY__IS_DIFFERENT]" | 380 <div ng-show="!imagePair[constants.KEY__IS_DIFFERENT]" |
361 style="text-align:center"> | 381 style="text-align:center"> |
362 –none– | 382 –none– |
363 </div> | 383 </div> |
364 </td> | 384 </td> |
365 | 385 |
366 <!-- diffs: per-channel RGB deltas --> | 386 <!-- diffs: per-channel RGB deltas --> |
367 <td valign="bottom" width="{{imageSize}}"> | 387 <td valign="bottom" width="{{imageSize}}"> |
368 <div ng-hide="!imagePair[constants.KEY__IS_DIFFERENT]" | 388 <div ng-if="imagePair[constants.KEY__IS_DIFFERENT]" |
369 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]}}"> | 389 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]}}"> |
370 | 390 |
371 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE NCE_DATA__PERCEPTUAL_DIFF].toFixed(4)}}% | 391 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE NCE_DATA__PERCEPTUAL_DIFF].toFixed(4)}}% |
372 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE NCE_DATA__MAX_DIFF_PER_CHANNEL]}} | 392 {{imagePair[constants.KEY__DIFFERENCE_DATA][constants.KEY__DIFFERE NCE_DATA__MAX_DIFF_PER_CHANNEL]}} |
373 <br/> | 393 <br/> |
374 <a href="/static/generated-images/diffs/{{getImageDiffRelativeUrl( imagePair)}}" target="_blank">View Image</a><br/> | 394 <a href="/static/generated-images/diffs/{{getImageDiffRelativeUrl( imagePair)}}" target="_blank">View Image</a><br/> |
375 <img-compare ng-style="{backgroundColor: pixelDiffBgColor}" | 395 <img-compare ng-if="showThumbnails" |
396 ng-style="{backgroundColor: pixelDiffBgColor}" | |
376 type="differencePerPixel" width="{{imageSize}}" | 397 type="differencePerPixel" width="{{imageSize}}" |
377 src="/static/generated-images/diffs/{{getImageDiffRel ativeUrl(imagePair)}}" | 398 src="/static/generated-images/diffs/{{getImageDiffRel ativeUrl(imagePair)}}" |
378 ng-mousedown="MagnifyDraw($event, true)" | 399 ng-mousedown="MagnifyDraw($event, true)" |
379 ng-mousemove="MagnifyDraw($event, false)" | 400 ng-mousemove="MagnifyDraw($event, false)" |
380 ng-mouseup="MagnifyEnd($event)" | 401 ng-mouseup="MagnifyEnd($event)" |
381 ng-mouseleave="MagnifyEnd($event)" /> | 402 ng-mouseleave="MagnifyEnd($event)" /> |
382 | |
383 </div> | 403 </div> |
384 <div ng-hide="imagePair[constants.KEY__IS_DIFFERENT]" | 404 <div ng-show="!imagePair[constants.KEY__IS_DIFFERENT]" |
385 style="text-align:center"> | 405 style="text-align:center"> |
386 –none– | 406 –none– |
387 </div> | 407 </div> |
388 </td> | 408 </td> |
389 | 409 |
390 <td> | 410 <td> |
391 <input type="checkbox" | 411 <input type="checkbox" |
392 name="rowSelect" | 412 name="rowSelect" |
393 value="{{imagePair.index}}" | 413 value="{{imagePair.index}}" |
394 ng-checked="isValueInArray(imagePair.index, selectedImagePair s)" | 414 ng-checked="isValueInArray(imagePair.index, selectedImagePair s)" |
395 ng-click="toggleValueInArray(imagePair.index, selectedImagePa irs)"> | 415 ng-click="toggleValueInArray(imagePair.index, selectedImagePa irs)"> |
396 </tr> | 416 </tr> |
397 </table> <!-- imagePairs --> | 417 </table> <!-- imagePairs --> |
398 </td></tr></table> <!-- table holding results header + imagePairs table --> | 418 </td></tr></table> <!-- table holding results header + imagePairs table --> |
399 | 419 |
400 </div><!-- main display area of selected tab --> | 420 </div><!-- main display area of selected tab --> |
401 </div><!-- everything: hide until data is loaded --> | 421 </div><!-- everything: hide until data is loaded --> |
402 | 422 |
403 </body> | 423 </body> |
404 </html> | 424 </html> |
OLD | NEW |