blob: cd3ab1589584ef54b4c1fc1714502fa2d0d0995e [file] [log] [blame]
epoger@google.comf9d134d2013-09-27 15:02:44 +00001<!DOCTYPE html>
2
3<html ng-app="Loader">
4
5<head>
6 <title>Current GM Results</title>
7 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.js"></script>
8 <script src="loader.js"></script>
9</head>
10
11<body>
12 <div ng-controller="Loader.Controller">
13
14 <!-- TODO(epoger): Add a warning banner if the server is running in
15 --export mode
16 -->
17
epoger@google.comafaad3d2013-09-30 15:06:25 +000018 <!-- TODO(epoger): Add some indication of how old the
19 expected/actual data is -->
20
epoger@google.com5f2bb002013-10-02 18:57:48 +000021 <em ng-hide="categories">
22 Loading data, please wait...
23 </em>
epoger@google.comafaad3d2013-09-30 15:06:25 +000024
epoger@google.com5f2bb002013-10-02 18:57:48 +000025 <div ng-hide="!categories">
26 <table border="1">
27 <tr>
28 <th colspan="2">
29 Filters
30 </th>
31 <th>
32 Settings
33 </th>
34 </tr>
35 <tr valign="top">
36 <td>
37 resultType<br>
38 <label ng-repeat="(resultType, count) in categories['resultType']">
39 <input type="checkbox"
40 name="resultTypes"
41 value="{{resultType}}"
42 ng-checked="!isHiddenResultType(resultType)"
43 ng-click="toggleHiddenResultType(resultType)">
44 {{resultType}} ({{count}})<br>
45 </label>
46 </td>
47 <td>
48 config<br>
49 <label ng-repeat="(config, count) in categories['config']">
50 <input type="checkbox"
51 name="configs"
52 value="{{config}}"
53 ng-checked="!isHiddenConfig(config)"
54 ng-click="toggleHiddenConfig(config)">
55 {{config}} ({{count}})<br>
56 </label>
57 </td>
58 <td><table>
59 <tr><td>
60 Image size
61 <input type="text" ng-model="imageSizePending"
62 ng-init="imageSizePending=100"
63 ng-change="areUpdatesPending = true"
64 maxlength="4"/>
65 </td></tr>
66 <tr><td>
67 Max records to display
68 <input type="text" ng-model="displayLimitPending"
69 ng-init="displayLimitPending=50"
70 ng-change="areUpdatesPending = true"
71 maxlength="4"/>
72 </td></tr>
73 <tr><td>
74 <button style="font-size:30px"
75 ng-click="updateResults()"
76 ng-disabled="!areUpdatesPending">
77 Update Results
78 </button>
79 </td></tr>
80 </tr></table></td>
81 </tr>
82 </table>
epoger@google.comf9d134d2013-09-27 15:02:44 +000083
84 <p>
epoger@google.com5f2bb002013-10-02 18:57:48 +000085 TODO(epoger): Add ability to filter builder and test names
86 (using a free-form text field, with partial string match)
87 <br>
88 TODO(epoger): Add more columns, such as pixel diffs, notes/bugs,
89 ignoreFailure boolean
90 <br>
91 TODO(epoger): Improve the column sorting, as per
92 <a href="http://jsfiddle.net/vojtajina/js64b/14/">
93 http://jsfiddle.net/vojtajina/js64b/14/
94 </a>
95 <br>
96 TODO(epoger): Right now, if you change which column is used to
97 sort the data, the column widths may fluctuate based on the
98 longest string <i>currently visible</i> within the top {{displayLimit}}
99 results. Can we fix the column widths to be wide enough to hold
100 any result, even the currently hidden results?
101 <p>
102 Found {{filteredTestData.length}} matches, and displaying the first
103 {{displayLimit}}: <br>
104 <!-- TODO(epoger): If (displayLimit <= filteredTestData.length),
105 modify this message to indicate that all results are shown. -->
106 (click on the column header radio buttons to re-sort by that column)
107 <br>
epoger@google.comf9d134d2013-09-27 15:02:44 +0000108 <table border="1">
109 <tr>
epoger@google.com5f2bb002013-10-02 18:57:48 +0000110 <th ng-repeat="categoryName in ['resultType', 'builder', 'test', 'config']">
111 <input type="radio"
112 name="sortColumnRadio"
113 value="{{categoryName}}"
114 ng-checked="(sortColumn == categoryName)"
115 ng-click="sortResultsBy(categoryName)">
116 {{categoryName}}
117 </th>
118 <th>
119 <input type="radio"
120 name="sortColumnRadio"
121 value="expectedHashDigest"
122 ng-checked="(sortColumn == 'expectedHashDigest')"
123 ng-click="sortResultsBy('expectedHashDigest')">
124 expected image
125 </th>
126 <th>
127 <input type="radio"
128 name="sortColumnRadio"
129 value="actualHashDigest"
130 ng-checked="(sortColumn == 'actualHashDigest')"
131 ng-click="sortResultsBy('actualHashDigest')">
132 actual image
133 </th>
epoger@google.comf9d134d2013-09-27 15:02:44 +0000134 </tr>
epoger@google.com5f2bb002013-10-02 18:57:48 +0000135 <tr ng-repeat="result in limitedTestData">
136 <td>{{result.resultType}}</td>
epoger@google.comf9d134d2013-09-27 15:02:44 +0000137 <td>{{result.builder}}</td>
138 <td>{{result.test}}</td>
139 <td>{{result.config}}</td>
140 <td>
141 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHashDigest}}.png">
142 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHashDigest}}.png"/>
143 </a>
144 </td>
145 <td>
146 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDigest}}.png">
147 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDigest}}.png"/>
148 </a>
149 </td>
150 </tr>
151 </table>
152 </div>
epoger@google.com5f2bb002013-10-02 18:57:48 +0000153 </div>
epoger@google.comf9d134d2013-09-27 15:02:44 +0000154
155 <!-- TODO(epoger): Can we get the base URLs (commondatastorage and
156 issues list) from
157 http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json
158 ? I tried importing the
159 http://skia.googlecode.com/svn/buildbot/skia_tools.js script and using
160 that to do so, but I got Access-Control-Allow-Origin errors.
161 -->
162
163</body>
164</html>