Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: gm/rebaseline_server/static/view.html

Issue 47423002: rebaseline_server: allow substring filtering for builder and test (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: lastbit Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gm/rebaseline_server/static/loader.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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="loader.js"></script> 8 <script src="loader.js"></script>
9 <link rel="stylesheet" href="view.css"> 9 <link rel="stylesheet" href="view.css">
10 </head> 10 </head>
(...skipping 15 matching lines...) Expand all
26 <p> 26 <p>
27 TODO(epoger): 27 TODO(epoger):
28 <input type="checkbox" ng-model="showTodos"> 28 <input type="checkbox" ng-model="showTodos">
29 show 29 show
30 <ul ng-hide="!showTodos"> 30 <ul ng-hide="!showTodos">
31 <li> 31 <li>
32 If server was run with --reload flag, automatically check for 32 If server was run with --reload flag, automatically check for
33 new results and tell the user when new results are available 33 new results and tell the user when new results are available
34 (the user can reload the page if he wants to see them). 34 (the user can reload the page if he wants to see them).
35 </li><li> 35 </li><li>
36 Add ability to filter builder and test names
37 (using a free-form text field, with partial string match)
38 </li><li>
39 Add pixel diffs, and sorting by percentage of different pixels 36 Add pixel diffs, and sorting by percentage of different pixels
40 </li><li> 37 </li><li>
41 Add ability to sort/filter by reviewed-by-human. Depends on 38 Add ability to sort/filter by reviewed-by-human. Depends on
42 <a href="https://code.google.com/p/skia/issues/detail?id=1758"> 39 <a href="https://code.google.com/p/skia/issues/detail?id=1758">
43 bug 1758 40 bug 1758
44 </a> 41 </a>
45 ('rebaseline_server: make the "categories" struct passed from server t o client a list instead of a dict') 42 ('rebaseline_server: make the "categories" struct passed from server t o client a list instead of a dict')
46 </li><li> 43 </li><li>
47 Improve the column sorting, as per 44 Improve the column sorting, as per
48 <a href="http://jsfiddle.net/vojtajina/js64b/14/"> 45 <a href="http://jsfiddle.net/vojtajina/js64b/14/">
49 http://jsfiddle.net/vojtajina/js64b/14/ 46 http://jsfiddle.net/vojtajina/js64b/14/
50 </a> 47 </a>
51 </li><li> 48 </li><li>
49 For the text-filtered categories, allow regular expression matching
50 (or Unix-style wildcard matching) instead of simple substring match?
51 <!-- In order to do this efficiently, we should probably do the
52 expression matching over the list of categories returned,
53 use that to generate a list of category values that fulfill the
54 regex, and when filtering the results just look for category
55 values within that list. -->
56 </li><li>
52 Right now, if you change which column is used to 57 Right now, if you change which column is used to
53 sort the data, the column widths may fluctuate based on the 58 sort the data, the column widths may fluctuate based on the
54 longest string <i>currently visible</i> within the top {{displayLimit} } 59 longest string <i>currently visible</i> within the top {{displayLimit} }
55 results. Can we fix the column widths to be wide enough to hold 60 results. Can we fix the column widths to be wide enough to hold
56 any result, even the currently hidden results? 61 any result, even the currently hidden results?
57 </li> 62 </li>
58 </ul> 63 </ul>
59 </div><!-- TODOs --> 64 </div><!-- TODOs -->
60 65
61 <div ng-hide="!(header.timeUpdated)"> 66 <div ng-hide="!(header.timeUpdated)">
(...skipping 11 matching lines...) Expand all
73 </div> 78 </div>
74 </div> 79 </div>
75 </div><!-- tabs --> 80 </div><!-- tabs -->
76 81
77 <div class="tab-main"><!-- main display area of selected tab --> 82 <div class="tab-main"><!-- main display area of selected tab -->
78 83
79 <br> 84 <br>
80 <!-- We only show the filters/settings table on the Unfiled tab. --> 85 <!-- We only show the filters/settings table on the Unfiled tab. -->
81 <table ng-hide="viewingTab != defaultTab" border="1"> 86 <table ng-hide="viewingTab != defaultTab" border="1">
82 <tr> 87 <tr>
83 <th colspan="2"> 88 <th colspan="4">
84 Filters 89 Filters
85 </th> 90 </th>
86 <th> 91 <th>
87 Settings 92 Settings
88 </th> 93 </th>
89 </tr> 94 </tr>
90 <tr valign="top"> 95 <tr valign="top">
91 <!-- TODO(epoger): make this an ng-repeat over resultType, config, etc? -- > 96 <!-- TODO(epoger): make this an ng-repeat over resultType, config, etc? -- >
92 <td> 97 <td>
93 resultType<br> 98 resultType<br>
94 <label ng-repeat="(resultType, count) in categories['resultType'] track by $index"> 99 <label ng-repeat="(resultType, count) in categories['resultType'] track by $index">
95 <input type="checkbox" 100 <input type="checkbox"
96 name="resultTypes" 101 name="resultTypes"
97 value="{{resultType}}" 102 value="{{resultType}}"
98 ng-checked="!isValueInSet(resultType, hiddenResultTypes)" 103 ng-checked="!isValueInSet(resultType, hiddenResultTypes)"
99 ng-click="toggleValueInSet(resultType, hiddenResultTypes); setU pdatesPending(true)"> 104 ng-click="toggleValueInSet(resultType, hiddenResultTypes); setU pdatesPending(true)">
100 {{resultType}} ({{count}})<br> 105 {{resultType}} ({{count}})<br>
101 </label> 106 </label>
107 <button ng-click="hiddenResultTypes = {}; updateResults()">
108 all
109 </button>
110 <button ng-click="hiddenResultTypes = {}; toggleValuesInSet(allResultTyp es, hiddenResultTypes); updateResults()">
111 none
112 </button>
113 <button ng-click="toggleValuesInSet(allResultTypes, hiddenResultTypes); updateResults()">
114 toggle
115 </button>
116 </td>
117 <td ng-repeat="category in ['builder', 'test']">
118 {{category}}
119 <br>
120 <input type="text"
121 ng-model="categoryValueMatch[category]"
122 ng-change="setUpdatesPending(true)"/>
123 <br>
124 <button ng-click="setCategoryValueMatch(category, '')"
125 ng-disabled="('' == categoryValueMatch[category])">
126 clear (show all)
127 </button>
102 </td> 128 </td>
103 <td> 129 <td>
104 config<br> 130 config<br>
105 <label ng-repeat="(config, count) in categories['config'] track by $inde x"> 131 <label ng-repeat="(config, count) in categories['config'] track by $inde x">
106 <input type="checkbox" 132 <input type="checkbox"
107 name="configs" 133 name="configs"
108 value="{{config}}" 134 value="{{config}}"
109 ng-checked="!isValueInSet(config, hiddenConfigs)" 135 ng-checked="!isValueInSet(config, hiddenConfigs)"
110 ng-click="toggleValueInSet(config, hiddenConfigs); setUpdatesPe nding(true)"> 136 ng-click="toggleValueInSet(config, hiddenConfigs); setUpdatesPe nding(true)">
111 {{config}} ({{count}})<br> 137 {{config}} ({{count}})<br>
112 </label> 138 </label>
139 <button ng-click="hiddenConfigs = {}; updateResults()">
140 all
141 </button>
142 <button ng-click="hiddenConfigs = {}; toggleValuesInSet(allConfigs, hidd enConfigs); updateResults()">
143 none
144 </button>
145 <button ng-click="toggleValuesInSet(allConfigs, hiddenConfigs); updateRe sults()">
146 toggle
147 </button>
113 </td> 148 </td>
114 <td><table> 149 <td><table>
115 <tr><td> 150 <tr><td>
116 Image size 151 Image size
117 <input type="text" ng-model="imageSizePending" 152 <input type="text" ng-model="imageSizePending"
118 ng-init="imageSizePending=100" 153 ng-init="imageSizePending=100"
119 ng-change="areUpdatesPending = true" 154 ng-change="areUpdatesPending = true"
120 maxlength="4"/> 155 maxlength="4"/>
121 </td></tr> 156 </td></tr>
122 <tr><td> 157 <tr><td>
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 name="sortColumnRadio" 279 name="sortColumnRadio"
245 value="actualHashDigest" 280 value="actualHashDigest"
246 ng-checked="(sortColumn == 'actualHashDigest')" 281 ng-checked="(sortColumn == 'actualHashDigest')"
247 ng-click="sortResultsBy('actualHashDigest')"> 282 ng-click="sortResultsBy('actualHashDigest')">
248 actual image 283 actual image
249 </th> 284 </th>
250 <th> 285 <th>
251 <!-- item-selection checkbox column --> 286 <!-- item-selection checkbox column -->
252 </th> 287 </th>
253 </tr> 288 </tr>
289
290 <!-- For most columns... if the user clicks on the cell, and we are on
291 the default tab, update the filter to only show results with the
292 same value for this category.
293 This is made a bit tricky by the fact that AngularJS expressions
294 do not allow control flow statements. See
295 http://docs.angularjs.org/guide/expression -->
254 <tr ng-repeat="result in limitedTestData"> 296 <tr ng-repeat="result in limitedTestData">
255 <td ng-repeat="categoryName in ['resultType', 'builder', 'test', 'conf ig']"> 297 <td ng-click="(viewingTab != defaultTab) || showOnlyResultType(result. resultType)">
298 {{result.resultType}}
299 </td>
300 <td ng-repeat="categoryName in ['builder', 'test']"
301 ng-click="(viewingTab != defaultTab) || setCategoryValueMatch(cate goryName, result[categoryName])">
256 {{result[categoryName]}} 302 {{result[categoryName]}}
257 </td> 303 </td>
304 <td ng-click="(viewingTab != defaultTab) || showOnlyConfig(result.conf ig)">
305 {{result.config}}
306 </td>
258 <td> 307 <td>
259 <a ng-repeat="bug in result['bugs']" 308 <a ng-repeat="bug in result['bugs']"
260 href="https://code.google.com/p/skia/issues/detail?id={{bug}}" 309 href="https://code.google.com/p/skia/issues/detail?id={{bug}}"
261 target="_blank"> 310 target="_blank">
262 {{bug}} 311 {{bug}}
263 </a> 312 </a>
264 </td> 313 </td>
265 <td> 314 <td>
266 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.g oogleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHa shDigest}}.png"> 315 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.g oogleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHa shDigest}}.png">
267 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondata storage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.e xpectedHashDigest}}.png"/> 316 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondata storage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.e xpectedHashDigest}}.png"/>
(...skipping 18 matching lines...) Expand all
286 <!-- TODO(epoger): Can we get the base URLs (commondatastorage and 335 <!-- TODO(epoger): Can we get the base URLs (commondatastorage and
287 issues list) from 336 issues list) from
288 http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json 337 http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json
289 ? I tried importing the 338 ? I tried importing the
290 http://skia.googlecode.com/svn/buildbot/skia_tools.js script and using 339 http://skia.googlecode.com/svn/buildbot/skia_tools.js script and using
291 that to do so, but I got Access-Control-Allow-Origin errors. 340 that to do so, but I got Access-Control-Allow-Origin errors.
292 --> 341 -->
293 342
294 </body> 343 </body>
295 </html> 344 </html>
OLDNEW
« no previous file with comments | « gm/rebaseline_server/static/loader.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698