Index: gm/rebaseline_server/static/view.html |
diff --git a/gm/rebaseline_server/static/view.html b/gm/rebaseline_server/static/view.html |
index cf0f936c0446ce717645e4f950aa3dc9a7f394ad..0e964d1e980a3d106f01f2e6db00f44a54a95fe1 100644 |
--- a/gm/rebaseline_server/static/view.html |
+++ b/gm/rebaseline_server/static/view.html |
@@ -74,62 +74,53 @@ |
</th> |
</tr> |
<tr valign="top"> |
- <td> |
- resultType<br> |
- <label ng-repeat="valueAndCount in extraColumnHeaders[constants.KEY__EXTRACOLUMNS__RESULT_TYPE][constants.KEY__EXTRACOLUMNHEADERS__VALUES_AND_COUNTS]"> |
- <input type="checkbox" |
- name="resultTypes" |
- value="{{valueAndCount[0]}}" |
- ng-checked="isValueInSet(valueAndCount[0], showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE])" |
- ng-click="toggleValueInSet(valueAndCount[0], showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE]); setUpdatesPending(true)"> |
- {{valueAndCount[0]}} ({{valueAndCount[1]}})<br> |
- </label> |
- <button ng-click="showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] = {}; toggleValuesInSet(allColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE], showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE]); updateResults()" |
- ng-disabled="!readyToDisplay || allColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE].length == setSize(showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE])"> |
- all |
- </button> |
- <button ng-click="showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] = {}; updateResults()" |
- ng-disabled="!readyToDisplay || 0 == setSize(showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE])"> |
- none |
- </button> |
- <button ng-click="toggleValuesInSet(allColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE], showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE]); updateResults()"> |
- toggle |
- </button> |
- </td> |
- <td ng-repeat="category in [constants.KEY__EXTRACOLUMNS__BUILDER, constants.KEY__EXTRACOLUMNS__TEST]"> |
- {{category}} |
- <br> |
- <input type="text" |
- ng-model="categoryValueMatch[category]" |
- ng-change="setUpdatesPending(true)"/> |
- <br> |
- <button ng-click="setCategoryValueMatch(category, '')" |
- ng-disabled="('' == categoryValueMatch[category])"> |
- clear (show all) |
- </button> |
- </td> |
- <td> |
- config<br> |
- <label ng-repeat="valueAndCount in extraColumnHeaders[constants.KEY__EXTRACOLUMNS__CONFIG][constants.KEY__EXTRACOLUMNHEADERS__VALUES_AND_COUNTS]"> |
- <input type="checkbox" |
- name="configs" |
- value="{{valueAndCount[0]}}" |
- ng-checked="isValueInSet(valueAndCount[0], showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG])" |
- ng-click="toggleValueInSet(valueAndCount[0], showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG]); setUpdatesPending(true)"> |
- {{valueAndCount[0]}} ({{valueAndCount[1]}})<br> |
- </label> |
- <button ng-click="showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG] = {}; toggleValuesInSet(allColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG], showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG]); updateResults()" |
- ng-disabled="!readyToDisplay || allColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG].length == setSize(showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG])"> |
- all |
- </button> |
- <button ng-click="showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG] = {}; updateResults()" |
- ng-disabled="!readyToDisplay || 0 == setSize(showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG])"> |
- none |
- </button> |
- <button ng-click="toggleValuesInSet(allColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG], showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG]); updateResults()"> |
- toggle |
- </button> |
+ |
+ <!-- filters --> |
+ <td ng-repeat="columnName in orderedColumnNames"> |
+ |
+ <!-- Only display filterable columns here... --> |
+ <div ng-if="extraColumnHeaders[columnName][constants.KEY__EXTRACOLUMNHEADERS__IS_FILTERABLE]"> |
+ {{extraColumnHeaders[columnName][constants.KEY__EXTRACOLUMNHEADERS__HEADER_TEXT]}}<br> |
+ |
+ <!-- If we filter this column using free-form text match... --> |
+ <div ng-if="extraColumnHeaders[columnName][constants.KEY__EXTRACOLUMNHEADERS__USE_FREEFORM_FILTER]"> |
+ <input type="text" |
+ ng-model="columnStringMatch[columnName]" |
+ ng-change="setUpdatesPending(true)"/> |
+ <br> |
+ <button ng-click="setColumnStringMatch(columnName, '')" |
+ ng-disabled="('' == columnStringMatch[columnName])"> |
+ clear (show all) |
+ </button> |
+ </div> |
+ |
+ <!-- If we filter this column using checkboxes... --> |
+ <div ng-if="!extraColumnHeaders[columnName][constants.KEY__EXTRACOLUMNHEADERS__USE_FREEFORM_FILTER]"> |
+ <label ng-repeat="valueAndCount in extraColumnHeaders[columnName][constants.KEY__EXTRACOLUMNHEADERS__VALUES_AND_COUNTS]"> |
+ <input type="checkbox" |
+ name="resultTypes" |
+ value="{{valueAndCount[0]}}" |
+ ng-checked="isValueInSet(valueAndCount[0], showingColumnValues[columnName])" |
+ ng-click="toggleValueInSet(valueAndCount[0], showingColumnValues[columnName]); setUpdatesPending(true)"> |
+ {{valueAndCount[0]}} ({{valueAndCount[1]}})<br> |
+ </label> |
+ <button ng-click="showingColumnValues[columnName] = {}; toggleValuesInSet(allColumnValues[columnName], showingColumnValues[columnName]); updateResults()" |
+ ng-disabled="!readyToDisplay || allColumnValues[columnName].length == setSize(showingColumnValues[columnName])"> |
+ all |
+ </button> |
+ <button ng-click="showingColumnValues[columnName] = {}; updateResults()" |
+ ng-disabled="!readyToDisplay || 0 == setSize(showingColumnValues[columnName])"> |
+ none |
+ </button> |
+ <button ng-click="toggleValuesInSet(allColumnValues[columnName], showingColumnValues[columnName]); updateResults()"> |
+ toggle |
+ </button> |
+ </div> |
+ |
+ </div> |
</td> |
+ |
+ <!-- settings --> |
<td><table> |
<tr><td> |
<input type="checkbox" ng-model="showThumbnailsPending" |
@@ -248,13 +239,13 @@ |
<table border="1" ng-app="diff_viewer"> <!-- results --> |
<tr> |
<!-- Most column headers are displayed in a common fashion... --> |
- <th ng-repeat="categoryName in [constants.KEY__EXTRACOLUMNS__RESULT_TYPE, constants.KEY__EXTRACOLUMNS__BUILDER, constants.KEY__EXTRACOLUMNS__TEST, constants.KEY__EXTRACOLUMNS__CONFIG]"> |
+ <th ng-repeat="columnName in orderedColumnNames"> |
<input type="radio" |
name="sortColumnRadio" |
- value="{{categoryName}}" |
- ng-checked="(sortColumnKey == categoryName)" |
- ng-click="sortResultsBy(constants.KEY__IMAGEPAIRS__EXTRACOLUMNS, categoryName)"> |
- {{categoryName}} |
+ value="{{columnName}}" |
+ ng-checked="(sortColumnKey == columnName)" |
+ ng-click="sortResultsBy(constants.KEY__IMAGEPAIRS__EXTRACOLUMNS, columnName)"> |
+ {{extraColumnHeaders[columnName][constants.KEY__EXTRACOLUMNHEADERS__HEADER_TEXT]}} |
</th> |
<!-- ... but there are a few columns where we display things differently. --> |
<th> |
@@ -311,63 +302,28 @@ |
<tr ng-repeat="imagePair in limitedImagePairs" valign="top" |
ng-class-odd="'results-odd'" ng-class-even="'results-even'" |
results-updated-callback-directive> |
- <td> |
- {{imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][constants.KEY__EXTRACOLUMNS__RESULT_TYPE]}} |
- <br> |
- <button class="show-only-button" |
- ng-show="viewingTab == defaultTab" |
- ng-disabled="1 == setSize(showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE])" |
- ng-click="showOnlyColumnValue(constants.KEY__EXTRACOLUMNS__RESULT_TYPE, imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][constants.KEY__EXTRACOLUMNS__RESULT_TYPE])" |
- title="show only results of type {{imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][constants.KEY__EXTRACOLUMNS__RESULT_TYPE]}}"> |
- show only |
- </button> |
- <br> |
- <button class="show-all-button" |
- ng-show="viewingTab == defaultTab" |
- ng-disabled="allColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE].length == setSize(showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE])" |
- ng-click="showAllColumnValues(constants.KEY__EXTRACOLUMNS__RESULT_TYPE)" |
- title="show results of all types"> |
- show all |
- </button> |
- </td> |
- <td ng-repeat="categoryName in [constants.KEY__EXTRACOLUMNS__BUILDER, constants.KEY__EXTRACOLUMNS__TEST]"> |
- {{imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][categoryName]}} |
- <br> |
- <button class="show-only-button" |
- ng-show="viewingTab == defaultTab" |
- ng-disabled="imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][categoryName] == categoryValueMatch[categoryName]" |
- ng-click="setCategoryValueMatch(categoryName, imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][categoryName])" |
- title="show only results of {{categoryName}} {{imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][categoryName]}}"> |
- show only |
- </button> |
- <br> |
- <button class="show-all-button" |
- ng-show="viewingTab == defaultTab" |
- ng-disabled="'' == categoryValueMatch[categoryName]" |
- ng-click="setCategoryValueMatch(categoryName, '')" |
- title="show results of all {{categoryName}}s"> |
- show all |
- </button> |
- </td> |
- <td> |
- {{imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][constants.KEY__EXTRACOLUMNS__CONFIG]}} |
+ |
+ <td ng-repeat="columnName in orderedColumnNames"> |
+ {{imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][columnName]}} |
<br> |
<button class="show-only-button" |
ng-show="viewingTab == defaultTab" |
- ng-disabled="1 == setSize(showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG])" |
- ng-click="showOnlyColumnValue(constants.KEY__EXTRACOLUMNS__CONFIG, imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][constants.KEY__EXTRACOLUMNS__CONFIG])" |
- title="show only results of config {{imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][constants.KEY__EXTRACOLUMNS__CONFIG]}}"> |
+ ng-disabled="1 == setSize(showingColumnValues[columnName])" |
+ ng-click="showOnlyColumnValue(columnName, imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][columnName])" |
+ title="show only results of {{extraColumnHeaders[columnName][constants.KEY__EXTRACOLUMNHEADERS__HEADER_TEXT]}} {{imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS][columnName]}}"> |
show only |
</button> |
<br> |
<button class="show-all-button" |
ng-show="viewingTab == defaultTab" |
- ng-disabled="allColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG].length == setSize(showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG])" |
- ng-click="showAllColumnValues(constants.KEY__EXTRACOLUMNS__CONFIG)" |
- title="show results of all configs"> |
+ ng-disabled="allColumnValues[columnName].length == setSize(showingColumnValues[columnName])" |
+ ng-click="showAllColumnValues(columnName)" |
+ title="show results of all {{extraColumnHeaders[columnName][constants.KEY__EXTRACOLUMNHEADERS__HEADER_TEXT]}}s"> |
show all |
</button> |
</td> |
+ |
+ <!-- bugs --> |
<td> |
<a ng-repeat="bug in imagePair[constants.KEY__IMAGEPAIRS__EXPECTATIONS][constants.KEY__EXPECTATIONS__BUGS]" |
href="https://code.google.com/p/skia/issues/detail?id={{bug}}" |