| Index: gm/rebaseline_server/static/loader.js
|
| ===================================================================
|
| --- gm/rebaseline_server/static/loader.js (revision 11969)
|
| +++ gm/rebaseline_server/static/loader.js (working copy)
|
| @@ -21,8 +21,9 @@
|
| var filteredItems = [];
|
| for (var i = 0; i < unfilteredItems.length; i++) {
|
| var item = unfilteredItems[i];
|
| - // For performance, we examine the "set" objects directly rather
|
| - // than calling $scope.isValueInSet().
|
| + // For performance, we examine the "set" objects directly rather
|
| + // than calling $scope.isValueInSet().
|
| + // Besides, I don't think we have access to $scope in here...
|
| if (!(true == hiddenResultTypes[item.resultType]) &&
|
| !(true == hiddenConfigs[item.config]) &&
|
| (viewingTab == item.tab)) {
|
| @@ -58,6 +59,12 @@
|
| $scope.sortColumn = 'test';
|
| $scope.showTodos = false;
|
|
|
| + $scope.showSubmitAdvancedSettings = false;
|
| + $scope.submitAdvancedSettings = {};
|
| + $scope.submitAdvancedSettings['reviewed-by-human'] = true;
|
| + $scope.submitAdvancedSettings['ignore-failures'] = false;
|
| + $scope.submitAdvancedSettings['bug'] = '';
|
| +
|
| // Create the list of tabs (lists into which the user can file each
|
| // test). This may vary, depending on isEditable.
|
| $scope.tabs = [
|
| @@ -83,10 +90,10 @@
|
| $scope.testData[i].tab = $scope.defaultTab;
|
| }
|
|
|
| - // Arrays within which the user can toggle individual elements.
|
| + // Arrays within which the user can toggle individual elements.
|
| $scope.selectedItems = [];
|
|
|
| - // Sets within which the user can toggle individual elements.
|
| + // Sets within which the user can toggle individual elements.
|
| $scope.hiddenResultTypes = {
|
| 'failure-ignored': true,
|
| 'no-comparison': true,
|
| @@ -108,6 +115,48 @@
|
|
|
|
|
| //
|
| + // Select/Clear/Toggle all tests.
|
| + //
|
| +
|
| + /**
|
| + * Select all currently showing tests.
|
| + */
|
| + $scope.selectAllItems = function() {
|
| + var numItemsShowing = $scope.limitedTestData.length;
|
| + for (var i = 0; i < numItemsShowing; i++) {
|
| + var index = $scope.limitedTestData[i].index;
|
| + if (!$scope.isValueInArray(index, $scope.selectedItems)) {
|
| + $scope.toggleValueInArray(index, $scope.selectedItems);
|
| + }
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Deselect all currently showing tests.
|
| + */
|
| + $scope.clearAllItems = function() {
|
| + var numItemsShowing = $scope.limitedTestData.length;
|
| + for (var i = 0; i < numItemsShowing; i++) {
|
| + var index = $scope.limitedTestData[i].index;
|
| + if ($scope.isValueInArray(index, $scope.selectedItems)) {
|
| + $scope.toggleValueInArray(index, $scope.selectedItems);
|
| + }
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Toggle selection of all currently showing tests.
|
| + */
|
| + $scope.toggleAllItems = function() {
|
| + var numItemsShowing = $scope.limitedTestData.length;
|
| + for (var i = 0; i < numItemsShowing; i++) {
|
| + var index = $scope.limitedTestData[i].index;
|
| + $scope.toggleValueInArray(index, $scope.selectedItems);
|
| + }
|
| + }
|
| +
|
| +
|
| + //
|
| // Tab operations.
|
| //
|
|
|
| @@ -204,8 +253,7 @@
|
| true
|
| ),
|
| $scope.sortColumn);
|
| - $scope.limitedTestData = $filter("limitTo")(
|
| - $scope.filteredTestData, $scope.displayLimit);
|
| + $scope.limitedTestData = $scope.filteredTestData;
|
| }
|
| $scope.imageSize = $scope.imageSizePending;
|
| $scope.setUpdatesPending(false);
|
| @@ -235,6 +283,21 @@
|
| */
|
| $scope.submitApprovals = function(testDataSubset) {
|
| $scope.submitPending = true;
|
| +
|
| + // Convert bug text field to null or 1-item array.
|
| + var bugs = null;
|
| + var bugNumber = parseInt($scope.submitAdvancedSettings['bug']);
|
| + if (!isNaN(bugNumber)) {
|
| + bugs = [bugNumber];
|
| + }
|
| +
|
| + // TODO(epoger): This is a suboptimal way to prevent users from
|
| + // rebaselining failures in alternative renderModes, but it does work.
|
| + // For a better solution, see
|
| + // https://code.google.com/p/skia/issues/detail?id=1748 ('gm: add new
|
| + // result type, RenderModeMismatch')
|
| + var encounteredComparisonConfig = false;
|
| +
|
| var newResults = [];
|
| for (var i = 0; i < testDataSubset.length; i++) {
|
| var actualResult = testDataSubset[i];
|
| @@ -245,8 +308,27 @@
|
| expectedHashType: actualResult['actualHashType'],
|
| expectedHashDigest: actualResult['actualHashDigest'],
|
| };
|
| + if (0 == expectedResult.config.indexOf('comparison-')) {
|
| + encounteredComparisonConfig = true;
|
| + }
|
| +
|
| + // Advanced settings...
|
| + expectedResult['reviewed-by-human'] =
|
| + $scope.submitAdvancedSettings['reviewed-by-human'];
|
| + if (true == $scope.submitAdvancedSettings['ignore-failure']) {
|
| + // if it's false, don't send it at all (just keep the default)
|
| + expectedResult['ignoreFailure'] = true;
|
| + }
|
| + expectedResult['bugs'] = bugs;
|
| +
|
| newResults.push(expectedResult);
|
| }
|
| + if (encounteredComparisonConfig) {
|
| + alert("Approval failed -- you cannot approve results with config " +
|
| + "type comparison-*");
|
| + $scope.submitPending = false;
|
| + return;
|
| + }
|
| $http({
|
| method: "POST",
|
| url: "/edits",
|
|
|