OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 | 2 |
3 <html ng-app="Loader"> | 3 <html ng-app="Loader"> |
4 | 4 |
5 <head> | 5 <head> |
6 <title>Current GM Results</title> | 6 <title>Current GM Results</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="loader.js"></script> | 8 <script src="loader.js"></script> |
9 </head> | 9 </head> |
10 | 10 |
11 <body> | 11 <body> |
12 <div ng-controller="Loader.Controller"> | 12 <div ng-controller="Loader.Controller"> |
13 | 13 |
14 <!-- TODO(epoger): Add a warning banner if the server is running in | 14 <!-- TODO(epoger): Add a warning banner if the server is running in |
15 --export mode | 15 --export mode |
16 --> | 16 --> |
17 | 17 |
| 18 <!-- TODO(epoger): Add some indication of how old the |
| 19 expected/actual data is --> |
| 20 |
18 Settings: | 21 Settings: |
19 <ul> | 22 <ul> |
20 <!-- TODO(epoger): Now that we get multiple result types in a single | 23 <!-- TODO(epoger): Now that we get multiple result types in a single |
21 fetch, modify the UI: add a column showing resultType, and allow | 24 fetch, modify the UI: add a column showing resultType, and allow |
22 the user to sort/filter on that column just like all the | 25 the user to sort/filter on that column just like all the |
23 others. --> | 26 others. --> |
24 <li>show results of type | 27 <li>show results of type |
25 <select ng-model="showResultsOfType" | 28 <select ng-model="showResultsOfType" |
26 ng-init="showResultsOfType='failed'"> | 29 ng-init="showResultsOfType='failed'"> |
27 <option>failed</option> | 30 <option ng-repeat="(resultType, count) in categories['resultType']" |
28 <option>failure-ignored</option> | 31 value="{{resultType}}"> |
29 <!-- | 32 {{resultType}} ({{count}}) |
30 <option>no-comparison</option> | 33 </option> |
31 | 34 </select> |
32 TODO(epoger): For now, I have disabled viewing the | 35 <!-- |
33 no-comparison results because there are so many of them, and | |
34 the browser takes forever to download all the images. Maybe | |
35 we should use some sort of lazy-loading technique | |
36 (e.g. http://www.appelsiini.net/projects/lazyload ), so that | |
37 the images are only loaded as they become viewable... | |
38 --> | |
39 <!-- | |
40 <option>succeeded</option> | |
41 | |
42 TODO(epoger): See results.py: for now, I have disabled | 36 TODO(epoger): See results.py: for now, I have disabled |
43 returning succeeded tests as part of the JSON, because it | 37 returning succeeded tests as part of the JSON, because it |
44 makes the returned JSON too big (and slows down the client). | 38 makes the returned JSON too big (and slows down the client). |
45 --> | 39 |
46 </select> | 40 Also, we should use some sort of lazy-loading technique |
| 41 (e.g. http://www.appelsiini.net/projects/lazyload ), so that |
| 42 the images are only loaded as they become viewable... |
| 43 that will help with long lists like resultType='no-comparison'. |
| 44 --> |
| 45 <br> |
| 46 TODO(epoger): 'no-comparison' will probably take forever; |
| 47 see HTML source for details |
| 48 <br> |
| 49 TODO(epoger): 'succeeded' will not show any results; |
| 50 see HTML source for details |
47 </li> | 51 </li> |
48 <li>image size | 52 <li>image size |
49 <input type="text" ng-model="imageSize" ng-init="imageSize=100" | 53 <input type="text" ng-model="imageSizePending" |
| 54 ng-init="imageSizePending=100; imageSize=100" |
50 maxlength="4"/> | 55 maxlength="4"/> |
| 56 <button ng:click="imageSize=imageSizePending">apply</button> |
51 </li> | 57 </li> |
52 </ul> | 58 </ul> |
53 | 59 |
54 <p> | 60 <p> |
| 61 Click on the column header radio buttons to re-sort by that column...<br> |
55 <!-- TODO(epoger): Show some sort of "loading" message, instead of | 62 <!-- TODO(epoger): Show some sort of "loading" message, instead of |
56 an empty table, while the data is loading. Otherwise, if there are | 63 an empty table, while the data is loading. Otherwise, if there are |
57 a lot of failures and it takes a long time to load them, the user | 64 a lot of failures and it takes a long time to load them, the user |
58 might think there are NO failures and leave the page! --> | 65 might think there are NO failures and leave the page! --> |
59 <table border="1"> | 66 <table border="1"> |
60 <tr> | 67 <tr> |
61 <th ng:click="sortColumn='builder'">Builder</th> | 68 <th><input ng-model="sortColumn" name="sortColumnRadio" type="radio" v
alue="builder">Builder</input></th> |
62 <th ng:click="sortColumn='test'">Test</th> | 69 <th><input ng-model="sortColumn" name="sortColumnRadio" type="radio" v
alue="test">Test</input></th> |
63 <th ng:click="sortColumn='config'">Config</th> | 70 <th><input ng-model="sortColumn" name="sortColumnRadio" type="radio" v
alue="config">Config</input></th> |
64 <th ng:click="sortColumn='expectedHashDigest'">Expected Image</th> | 71 <th><input ng-model="sortColumn" name="sortColumnRadio" type="radio" v
alue="expectedHashDigest">Expected Image</input></th> |
65 <th ng:click="sortColumn='actualHashDigest'">Actual Image</th> | 72 <th><input ng-model="sortColumn" name="sortColumnRadio" type="radio" v
alue="actualHashDigest">Actual Image</input></th> |
66 <!-- TODO(epoger): Add more columns, such as... | 73 <!-- TODO(epoger): Add more columns, such as... |
67 pixel diff | 74 pixel diff |
68 notes/bugs | 75 notes/bugs |
69 ignoreFailure boolean | 76 ignoreFailure boolean |
70 --> | 77 --> |
71 </tr> | 78 </tr> |
72 <!-- TODO(epoger): improve the column sorting, as per | 79 <!-- TODO(epoger): improve the column sorting, as per |
73 http://jsfiddle.net/vojtajina/js64b/14/ --> | 80 http://jsfiddle.net/vojtajina/js64b/14/ --> |
74 <tr ng-repeat="result in results | filter: { resultType: showResultsOfTy
pe } | orderBy: sortColumn"> | 81 <tr ng-repeat="result in testData | filter: { resultType: showResultsOfT
ype } | orderBy: sortColumn"> |
75 <td>{{result.builder}}</td> | 82 <td>{{result.builder}}</td> |
76 <td>{{result.test}}</td> | 83 <td>{{result.test}}</td> |
77 <td>{{result.config}}</td> | 84 <td>{{result.config}}</td> |
78 <td> | 85 <td> |
79 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.g
oogleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHa
shDigest}}.png"> | 86 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.g
oogleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHa
shDigest}}.png"> |
80 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondata
storage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.e
xpectedHashDigest}}.png"/> | 87 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondata
storage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.e
xpectedHashDigest}}.png"/> |
81 </a> | 88 </a> |
82 </td> | 89 </td> |
83 <td> | 90 <td> |
84 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.g
oogleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDi
gest}}.png"> | 91 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.g
oogleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDi
gest}}.png"> |
85 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondata
storage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.act
ualHashDigest}}.png"/> | 92 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondata
storage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.act
ualHashDigest}}.png"/> |
86 </a> | 93 </a> |
87 </td> | 94 </td> |
88 </tr> | 95 </tr> |
89 </table> | 96 </table> |
90 </div> | 97 </div> |
91 | 98 |
92 <!-- TODO(epoger): Can we get the base URLs (commondatastorage and | 99 <!-- TODO(epoger): Can we get the base URLs (commondatastorage and |
93 issues list) from | 100 issues list) from |
94 http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json | 101 http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json |
95 ? I tried importing the | 102 ? I tried importing the |
96 http://skia.googlecode.com/svn/buildbot/skia_tools.js script and using | 103 http://skia.googlecode.com/svn/buildbot/skia_tools.js script and using |
97 that to do so, but I got Access-Control-Allow-Origin errors. | 104 that to do so, but I got Access-Control-Allow-Origin errors. |
98 --> | 105 --> |
99 | 106 |
100 </body> | 107 </body> |
101 </html> | 108 </html> |
OLD | NEW |