Chromium Code Reviews| 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']" |
|
epoger
2013/09/27 18:12:39
For now, I'm still showing the resultTypes in a dr
borenet
2013/09/27 19:22:01
Please pre-select the category that you're display
epoger
2013/09/27 21:38:13
Unfortunately, for the reasons outlined in http://
borenet
2013/09/30 13:06:02
I know nothing of angular, but in jinja/django I t
| |
| 28 <option>failure-ignored</option> | 31 value="{{resultType}}"> |
| 32 {{resultType}} ({{count}}) | |
| 33 </option> | |
| 29 <!-- | 34 <!-- |
| 30 <option>no-comparison</option> | |
| 31 | |
| 32 TODO(epoger): For now, I have disabled viewing the | |
| 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 | 35 TODO(epoger): See results.py: for now, I have disabled |
| 43 returning succeeded tests as part of the JSON, because it | 36 returning succeeded tests as part of the JSON, because it |
| 44 makes the returned JSON too big (and slows down the client). | 37 makes the returned JSON too big (and slows down the client). |
| 38 | |
| 39 Also, we should use some sort of lazy-loading technique | |
| 40 (e.g. http://www.appelsiini.net/projects/lazyload ), so that | |
| 41 the images are only loaded as they become viewable... | |
| 42 that will help with long lists like resultType='no-comparison'. | |
| 45 --> | 43 --> |
| 46 </select> | 44 </select> |
| 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="imageSize" ng-init="imageSize=100" |
| 50 maxlength="4"/> | 54 maxlength="4"/> |
|
borenet
2013/09/27 19:22:01
Can you make this only update the image size when
epoger
2013/09/27 21:38:13
Added an "apply" button.
| |
| 51 </li> | 55 </li> |
| 52 </ul> | 56 </ul> |
| 53 | 57 |
| 54 <p> | 58 <p> |
| 59 Click on each column header to re-sort by that column...<br> | |
|
borenet
2013/09/27 19:22:01
Can we at least make the column headers change the
epoger
2013/09/27 21:38:13
In the long term, improving the column sorting as
borenet
2013/09/30 13:06:02
I think the clearest thing is something like a rad
epoger
2013/09/30 15:04:59
Good idea. Changed 'em to radio buttons for now.
borenet
2013/09/30 15:31:23
SGTM. That example looks great.
| |
| 55 <!-- TODO(epoger): Show some sort of "loading" message, instead of | 60 <!-- TODO(epoger): Show some sort of "loading" message, instead of |
| 56 an empty table, while the data is loading. Otherwise, if there are | 61 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 | 62 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! --> | 63 might think there are NO failures and leave the page! --> |
| 59 <table border="1"> | 64 <table border="1"> |
| 60 <tr> | 65 <tr> |
| 61 <th ng:click="sortColumn='builder'">Builder</th> | 66 <th ng:click="sortColumn='builder'">Builder</th> |
| 62 <th ng:click="sortColumn='test'">Test</th> | 67 <th ng:click="sortColumn='test'">Test</th> |
| 63 <th ng:click="sortColumn='config'">Config</th> | 68 <th ng:click="sortColumn='config'">Config</th> |
| 64 <th ng:click="sortColumn='expectedHashDigest'">Expected Image</th> | 69 <th ng:click="sortColumn='expectedHashDigest'">Expected Image</th> |
| 65 <th ng:click="sortColumn='actualHashDigest'">Actual Image</th> | 70 <th ng:click="sortColumn='actualHashDigest'">Actual Image</th> |
| 66 <!-- TODO(epoger): Add more columns, such as... | 71 <!-- TODO(epoger): Add more columns, such as... |
| 67 pixel diff | 72 pixel diff |
| 68 notes/bugs | 73 notes/bugs |
| 69 ignoreFailure boolean | 74 ignoreFailure boolean |
| 70 --> | 75 --> |
| 71 </tr> | 76 </tr> |
| 72 <!-- TODO(epoger): improve the column sorting, as per | 77 <!-- TODO(epoger): improve the column sorting, as per |
| 73 http://jsfiddle.net/vojtajina/js64b/14/ --> | 78 http://jsfiddle.net/vojtajina/js64b/14/ --> |
| 74 <tr ng-repeat="result in results | filter: { resultType: showResultsOfTy pe } | orderBy: sortColumn"> | 79 <tr ng-repeat="result in testData | filter: { resultType: showResultsOfT ype } | orderBy: sortColumn"> |
| 75 <td>{{result.builder}}</td> | 80 <td>{{result.builder}}</td> |
| 76 <td>{{result.test}}</td> | 81 <td>{{result.test}}</td> |
| 77 <td>{{result.config}}</td> | 82 <td>{{result.config}}</td> |
| 78 <td> | 83 <td> |
| 79 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.g oogleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHa shDigest}}.png"> | 84 <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"/> | 85 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondata storage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.e xpectedHashDigest}}.png"/> |
| 81 </a> | 86 </a> |
| 82 </td> | 87 </td> |
| 83 <td> | 88 <td> |
| 84 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.g oogleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDi gest}}.png"> | 89 <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"/> | 90 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondata storage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.act ualHashDigest}}.png"/> |
| 86 </a> | 91 </a> |
| 87 </td> | 92 </td> |
| 88 </tr> | 93 </tr> |
| 89 </table> | 94 </table> |
| 90 </div> | 95 </div> |
| 91 | 96 |
| 92 <!-- TODO(epoger): Can we get the base URLs (commondatastorage and | 97 <!-- TODO(epoger): Can we get the base URLs (commondatastorage and |
| 93 issues list) from | 98 issues list) from |
| 94 http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json | 99 http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json |
| 95 ? I tried importing the | 100 ? I tried importing the |
| 96 http://skia.googlecode.com/svn/buildbot/skia_tools.js script and using | 101 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. | 102 that to do so, but I got Access-Control-Allow-Origin errors. |
| 98 --> | 103 --> |
| 99 | 104 |
| 100 </body> | 105 </body> |
| 101 </html> | 106 </html> |
| OLD | NEW |