view.html revision dcb4e65998913bfb2cc7e331ffacf0965bdee0ea
1<!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 some indication of how old the 15 expected/actual data is --> 16 17 <em> 18 {{loadingMessage}} 19 </em> 20 21 <div ng-hide="!categories"> 22 <div ng-hide="!(header.isEditable && header.isExported)" 23 style="background-color:#ffbb00"> 24 WARNING! These results are editable and exported, so any user 25 who can connect to this server over the network can modify them. 26 </div> 27 <table border="1"> 28 <tr> 29 <th colspan="2"> 30 Filters 31 </th> 32 <th> 33 Settings 34 </th> 35 </tr> 36 <tr valign="top"> 37 <td> 38 resultType<br> 39 <label ng-repeat="(resultType, count) in categories['resultType']"> 40 <input type="checkbox" 41 name="resultTypes" 42 value="{{resultType}}" 43 ng-checked="!isHiddenResultType(resultType)" 44 ng-click="toggleHiddenResultType(resultType)"> 45 {{resultType}} ({{count}})<br> 46 </label> 47 </td> 48 <td> 49 config<br> 50 <label ng-repeat="(config, count) in categories['config']"> 51 <input type="checkbox" 52 name="configs" 53 value="{{config}}" 54 ng-checked="!isHiddenConfig(config)" 55 ng-click="toggleHiddenConfig(config)"> 56 {{config}} ({{count}})<br> 57 </label> 58 </td> 59 <td><table> 60 <tr><td> 61 Image size 62 <input type="text" ng-model="imageSizePending" 63 ng-init="imageSizePending=100" 64 ng-change="areUpdatesPending = true" 65 maxlength="4"/> 66 </td></tr> 67 <tr><td> 68 Max records to display 69 <input type="text" ng-model="displayLimitPending" 70 ng-init="displayLimitPending=50" 71 ng-change="areUpdatesPending = true" 72 maxlength="4"/> 73 </td></tr> 74 <tr><td> 75 <button style="font-size:30px" 76 ng-click="updateResults()" 77 ng-disabled="!areUpdatesPending"> 78 Update Results 79 </button> 80 </td></tr> 81 </tr></table></td> 82 </tr> 83 </table> 84 85 <p> 86 TODO(epoger): Add ability to filter builder and test names 87 (using a free-form text field, with partial string match) 88 <br> 89 TODO(epoger): Add more columns, such as pixel diffs, notes/bugs, 90 ignoreFailure boolean 91 <br> 92 TODO(epoger): Improve the column sorting, as per 93 <a href="http://jsfiddle.net/vojtajina/js64b/14/"> 94 http://jsfiddle.net/vojtajina/js64b/14/ 95 </a> 96 <br> 97 TODO(epoger): Right now, if you change which column is used to 98 sort the data, the column widths may fluctuate based on the 99 longest string <i>currently visible</i> within the top {{displayLimit}} 100 results. Can we fix the column widths to be wide enough to hold 101 any result, even the currently hidden results? 102 <p> 103 Found {{filteredTestData.length}} matches, and displaying the first 104 {{displayLimit}}: <br> 105 <!-- TODO(epoger): If (displayLimit <= filteredTestData.length), 106 modify this message to indicate that all results are shown. --> 107 (click on the column header radio buttons to re-sort by that column) 108 <br> 109 <table border="1"> 110 <tr> 111 <th ng-repeat="categoryName in ['resultType', 'builder', 'test', 'config']"> 112 <input type="radio" 113 name="sortColumnRadio" 114 value="{{categoryName}}" 115 ng-checked="(sortColumn == categoryName)" 116 ng-click="sortResultsBy(categoryName)"> 117 {{categoryName}} 118 </th> 119 <th> 120 <input type="radio" 121 name="sortColumnRadio" 122 value="expectedHashDigest" 123 ng-checked="(sortColumn == 'expectedHashDigest')" 124 ng-click="sortResultsBy('expectedHashDigest')"> 125 expected image 126 </th> 127 <th> 128 <input type="radio" 129 name="sortColumnRadio" 130 value="actualHashDigest" 131 ng-checked="(sortColumn == 'actualHashDigest')" 132 ng-click="sortResultsBy('actualHashDigest')"> 133 actual image 134 </th> 135 <th ng-hide="!header.isEditable"> 136 <!-- item-selection checkbox column --> 137 {{selectedItems}} <!-- TODO(epoger): temporary debug output --> 138 </th> 139 </tr> 140 <tr ng-repeat="result in limitedTestData"> 141 <td>{{result.resultType}}</td> 142 <td>{{result.builder}}</td> 143 <td>{{result.test}}</td> 144 <td>{{result.config}}</td> 145 <td> 146 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHashDigest}}.png"> 147 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.expectedHashType}}/{{result.test}}/{{result.expectedHashDigest}}.png"/> 148 </a> 149 </td> 150 <td> 151 <a target="_blank" href="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDigest}}.png"> 152 <img width="{{imageSize}}" src="http://chromium-skia-gm.commondatastorage.googleapis.com/gm/{{result.actualHashType}}/{{result.test}}/{{result.actualHashDigest}}.png"/> 153 </a> 154 </td> 155 <td ng-hide="!header.isEditable"> 156 <input type="checkbox" 157 name="rowSelect" 158 value="{{result.index}}" 159 ng-checked="isItemSelected(result.index)" 160 ng-click="toggleItemSelected(result.index)"> 161 </tr> 162 </table> 163 </div> 164 </div> 165 166 <!-- TODO(epoger): Can we get the base URLs (commondatastorage and 167 issues list) from 168 http://skia.googlecode.com/svn/buildbot/site_config/global_variables.json 169 ? I tried importing the 170 http://skia.googlecode.com/svn/buildbot/skia_tools.js script and using 171 that to do so, but I got Access-Control-Allow-Origin errors. 172 --> 173 174</body> 175</html> 176