2013-09-27 15:02:44 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
|
2013-10-15 20:10:33 +00:00
|
|
|
<html ng-app="Loader" ng-controller="Loader.Controller">
|
2013-09-27 15:02:44 +00:00
|
|
|
|
|
|
|
<head>
|
2013-10-15 20:10:33 +00:00
|
|
|
<title ng-bind="windowTitle"></title>
|
2013-09-27 15:02:44 +00:00
|
|
|
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.js"></script>
|
|
|
|
<script src="loader.js"></script>
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
2013-10-11 18:45:33 +00:00
|
|
|
<em>
|
|
|
|
{{loadingMessage}}
|
2013-10-02 18:57:48 +00:00
|
|
|
</em>
|
2013-09-30 15:06:25 +00:00
|
|
|
|
2013-10-18 18:36:25 +00:00
|
|
|
<div ng-hide="!categories">
|
2013-10-09 18:05:58 +00:00
|
|
|
<div ng-hide="!(header.isEditable && header.isExported)"
|
|
|
|
style="background-color:#ffbb00">
|
|
|
|
WARNING! These results are editable and exported, so any user
|
|
|
|
who can connect to this server over the network can modify them.
|
|
|
|
</div>
|
2013-10-15 20:10:33 +00:00
|
|
|
<div ng-hide="!(header.timeUpdated)">
|
|
|
|
Results current as of {{localTimeString(header.timeUpdated)}}
|
|
|
|
</div>
|
2013-10-18 18:36:25 +00:00
|
|
|
<table border="1">
|
2013-10-02 18:57:48 +00:00
|
|
|
<tr>
|
|
|
|
<th colspan="2">
|
|
|
|
Filters
|
|
|
|
</th>
|
|
|
|
<th>
|
|
|
|
Settings
|
|
|
|
</th>
|
|
|
|
</tr>
|
|
|
|
<tr valign="top">
|
|
|
|
<td>
|
|
|
|
resultType<br>
|
|
|
|
<label ng-repeat="(resultType, count) in categories['resultType']">
|
|
|
|
<input type="checkbox"
|
|
|
|
name="resultTypes"
|
|
|
|
value="{{resultType}}"
|
|
|
|
ng-checked="!isHiddenResultType(resultType)"
|
|
|
|
ng-click="toggleHiddenResultType(resultType)">
|
|
|
|
{{resultType}} ({{count}})<br>
|
|
|
|
</label>
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
config<br>
|
|
|
|
<label ng-repeat="(config, count) in categories['config']">
|
|
|
|
<input type="checkbox"
|
|
|
|
name="configs"
|
|
|
|
value="{{config}}"
|
|
|
|
ng-checked="!isHiddenConfig(config)"
|
|
|
|
ng-click="toggleHiddenConfig(config)">
|
|
|
|
{{config}} ({{count}})<br>
|
|
|
|
</label>
|
|
|
|
</td>
|
|
|
|
<td><table>
|
|
|
|
<tr><td>
|
|
|
|
Image size
|
|
|
|
<input type="text" ng-model="imageSizePending"
|
|
|
|
ng-init="imageSizePending=100"
|
|
|
|
ng-change="areUpdatesPending = true"
|
|
|
|
maxlength="4"/>
|
|
|
|
</td></tr>
|
|
|
|
<tr><td>
|
|
|
|
Max records to display
|
|
|
|
<input type="text" ng-model="displayLimitPending"
|
|
|
|
ng-init="displayLimitPending=50"
|
|
|
|
ng-change="areUpdatesPending = true"
|
|
|
|
maxlength="4"/>
|
|
|
|
</td></tr>
|
|
|
|
<tr><td>
|
|
|
|
<button style="font-size:30px"
|
|
|
|
ng-click="updateResults()"
|
|
|
|
ng-disabled="!areUpdatesPending">
|
|
|
|
Update Results
|
|
|
|
</button>
|
|
|
|
</td></tr>
|
|
|
|
</tr></table></td>
|
|
|
|
</tr>
|
|
|
|
</table>
|
2013-09-27 15:02:44 +00:00
|
|
|
|
2013-10-18 18:36:25 +00:00
|
|
|
<p>
|
|
|
|
TODO(epoger):
|
|
|
|
<input type="checkbox" name="showTodosCheckbox" value="true"
|
|
|
|
ng-checked="showTodos == true"
|
|
|
|
ng-click="showTodos = !showTodos">
|
|
|
|
show
|
|
|
|
<ul ng-hide="!showTodos">
|
|
|
|
<li>
|
|
|
|
Implement editing of results (we have added the --editable
|
|
|
|
flag to the server, but it's not fully implemented yet).
|
|
|
|
<div ng-hide="!header.isEditable">
|
|
|
|
Currently selected items are: {{selectedItems}}
|
|
|
|
</div>
|
|
|
|
</li><li>
|
|
|
|
If server was run with --reload flag, automatically check for
|
|
|
|
new results and tell the user when new results are available
|
|
|
|
(the user can reload the page if he wants to see them).
|
|
|
|
</li><li>
|
|
|
|
Add ability to filter builder and test names
|
|
|
|
(using a free-form text field, with partial string match)
|
|
|
|
</li><li>
|
|
|
|
Add more columns, such as pixel diffs, notes/bugs,
|
|
|
|
ignoreFailure boolean
|
|
|
|
</li><li>
|
|
|
|
Improve the column sorting, as per
|
|
|
|
<a href="http://jsfiddle.net/vojtajina/js64b/14/">
|
|
|
|
http://jsfiddle.net/vojtajina/js64b/14/
|
|
|
|
</a>
|
|
|
|
</li><li>
|
|
|
|
Right now, if you change which column is used to
|
|
|
|
sort the data, the column widths may fluctuate based on the
|
|
|
|
longest string <i>currently visible</i> within the top {{displayLimit}}
|
|
|
|
results. Can we fix the column widths to be wide enough to hold
|
|
|
|
any result, even the currently hidden results?
|
|
|
|
</li>
|
|
|
|
</ul>
|
2013-10-02 18:57:48 +00:00
|
|
|
<p>
|
2013-10-18 18:36:25 +00:00
|
|
|
Found {{filteredTestData.length}} matches, and displaying the first
|
|
|
|
{{displayLimit}}: <br>
|
|
|
|
<!-- TODO(epoger): If (displayLimit <= filteredTestData.length),
|
|
|
|
modify this message to indicate that all results are shown. -->
|
2013-10-02 18:57:48 +00:00
|
|
|
(click on the column header radio buttons to re-sort by that column)
|
|
|
|
<br>
|
2013-09-27 15:02:44 +00:00
|
|
|
<table border="1">
|
|
|
|
<tr>
|
2013-10-02 18:57:48 +00:00
|
|
|
<th ng-repeat="categoryName in ['resultType', 'builder', 'test', 'config']">
|
|
|
|
<input type="radio"
|
|
|
|
name="sortColumnRadio"
|
|
|
|
value="{{categoryName}}"
|
|
|
|
ng-checked="(sortColumn == categoryName)"
|
|
|
|
ng-click="sortResultsBy(categoryName)">
|
|
|
|
{{categoryName}}
|
|
|
|
</th>
|
|
|
|
<th>
|
|
|
|
<input type="radio"
|
|
|
|
name="sortColumnRadio"
|
|
|
|
value="expectedHashDigest"
|
|
|
|
ng-checked="(sortColumn == 'expectedHashDigest')"
|
|
|
|
ng-click="sortResultsBy('expectedHashDigest')">
|
|
|
|
expected image
|
|
|
|
</th>
|
|
|
|
<th>
|
|
|
|
<input type="radio"
|
|
|
|
name="sortColumnRadio"
|
|
|
|
value="actualHashDigest"
|
|
|
|
ng-checked="(sortColumn == 'actualHashDigest')"
|
|
|
|
ng-click="sortResultsBy('actualHashDigest')">
|
|
|
|
actual image
|
|
|
|
</th>
|
2013-10-09 18:05:58 +00:00
|
|
|
<th ng-hide="!header.isEditable">
|
|
|
|
<!-- item-selection checkbox column -->
|
|
|
|
</th>
|
2013-09-27 15:02:44 +00:00
|
|
|
</tr>
|
2013-10-02 18:57:48 +00:00
|
|
|
<tr ng-repeat="result in limitedTestData">
|
|
|
|
<td>{{result.resultType}}</td>
|
2013-09-27 15:02:44 +00:00
|
|
|
<td>{{result.builder}}</td>
|
|
|
|
<td>{{result.test}}</td>
|
|
|
|
<td>{{result.config}}</td>
|
|
|
|
<td>
|
2013-10-11 18:45:33 +00:00
|
|
|
<a target="_blank" href="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHashDigest}}.png">
|
2013-09-27 15:02:44 +00:00
|
|
|
<img width="{{imageSize}}" src="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHashDigest}}.png"/>
|
|
|
|
</a>
|
|
|
|
</td>
|
|
|
|
<td>
|
2013-10-11 18:45:33 +00:00
|
|
|
<a target="_blank" href="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDigest}}.png">
|
|
|
|
<img width="{{imageSize}}" src="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDigest}}.png"/>
|
2013-09-27 15:02:44 +00:00
|
|
|
</a>
|
|
|
|
</td>
|
2013-10-09 18:05:58 +00:00
|
|
|
<td ng-hide="!header.isEditable">
|
|
|
|
<input type="checkbox"
|
|
|
|
name="rowSelect"
|
|
|
|
value="{{result.index}}"
|
|
|
|
ng-checked="isItemSelected(result.index)"
|
|
|
|
ng-click="toggleItemSelected(result.index)">
|
2013-09-27 15:02:44 +00:00
|
|
|
</tr>
|
|
|
|
</table>
|
2013-10-18 18:36:25 +00:00
|
|
|
</div>
|
2013-09-27 15:02:44 +00:00
|
|
|
|
|
|
|
<!-- TODO(epoger): Can we get the base URLs (commondatastorage and
|
|
|
|
issues list) from
|
|
|
|
http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json
|
|
|
|
? I tried importing the
|
|
|
|
http://skia.googlecode.com/svn/buildbot/skia_tools.js script and using
|
|
|
|
that to do so, but I got Access-Control-Allow-Origin errors.
|
|
|
|
-->
|
|
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|