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

Side by Side Diff: gm/rebaseline_server/static/loader.js

Issue 44123004: rebaseline_server: UI improvements + set reviewed-by-human on commit (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: 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
OLDNEW
1 /* 1 /*
2 * Loader: 2 * Loader:
3 * Reads GM result reports written out by results.py, and imports 3 * Reads GM result reports written out by results.py, and imports
4 * them into $scope.categories and $scope.testData . 4 * them into $scope.categories and $scope.testData .
5 */ 5 */
6 var Loader = angular.module( 6 var Loader = angular.module(
7 'Loader', 7 'Loader',
8 [] 8 []
9 ); 9 );
10 10
11 11
12 // TODO(epoger): Combine ALL of our filtering operations (including 12 // TODO(epoger): Combine ALL of our filtering operations (including
13 // truncation) into this one filter, so that runs most efficiently? 13 // truncation) into this one filter, so that runs most efficiently?
14 // (We would have to make sure truncation still took place after 14 // (We would have to make sure truncation still took place after
15 // sorting, though.) 15 // sorting, though.)
16 Loader.filter( 16 Loader.filter(
17 'removeHiddenItems', 17 'removeHiddenItems',
18 function() { 18 function() {
19 return function(unfilteredItems, hiddenResultTypes, hiddenConfigs, 19 return function(unfilteredItems, hiddenResultTypes, hiddenConfigs,
20 viewingTab) { 20 viewingTab) {
21 var filteredItems = []; 21 var filteredItems = [];
22 for (var i = 0; i < unfilteredItems.length; i++) { 22 for (var i = 0; i < unfilteredItems.length; i++) {
23 var item = unfilteredItems[i]; 23 var item = unfilteredItems[i];
24 » // For performance, we examine the "set" objects directly rather 24 // For performance, we examine the "set" objects directly rather
epoger 2013/10/25 16:38:26 fixed some tabs -> spaces
25 » // than calling $scope.isValueInSet(). 25 // than calling $scope.isValueInSet().
26 // Besides, I don't think we have access to $scope in here...
26 if (!(true == hiddenResultTypes[item.resultType]) && 27 if (!(true == hiddenResultTypes[item.resultType]) &&
27 !(true == hiddenConfigs[item.config]) && 28 !(true == hiddenConfigs[item.config]) &&
28 (viewingTab == item.tab)) { 29 (viewingTab == item.tab)) {
29 filteredItems.push(item); 30 filteredItems.push(item);
30 } 31 }
31 } 32 }
32 return filteredItems; 33 return filteredItems;
33 }; 34 };
34 } 35 }
35 ); 36 );
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 $scope.numResultsPerTab[$scope.tabs[i]] = 0; 77 $scope.numResultsPerTab[$scope.tabs[i]] = 0;
77 } 78 }
78 $scope.numResultsPerTab[$scope.defaultTab] = $scope.testData.length; 79 $scope.numResultsPerTab[$scope.defaultTab] = $scope.testData.length;
79 80
80 // Add index and tab fields to all records. 81 // Add index and tab fields to all records.
81 for (var i = 0; i < $scope.testData.length; i++) { 82 for (var i = 0; i < $scope.testData.length; i++) {
82 $scope.testData[i].index = i; 83 $scope.testData[i].index = i;
83 $scope.testData[i].tab = $scope.defaultTab; 84 $scope.testData[i].tab = $scope.defaultTab;
84 } 85 }
85 86
86 » // Arrays within which the user can toggle individual elements. 87 // Arrays within which the user can toggle individual elements.
87 $scope.selectedItems = []; 88 $scope.selectedItems = [];
88 89
89 » // Sets within which the user can toggle individual elements. 90 // Sets within which the user can toggle individual elements.
90 $scope.hiddenResultTypes = { 91 $scope.hiddenResultTypes = {
91 'failure-ignored': true, 92 'failure-ignored': true,
92 'no-comparison': true, 93 'no-comparison': true,
93 'succeeded': true, 94 'succeeded': true,
94 }; 95 };
95 $scope.hiddenConfigs = {}; 96 $scope.hiddenConfigs = {};
96 97
97 $scope.updateResults(); 98 $scope.updateResults();
98 $scope.loadingMessage = ""; 99 $scope.loadingMessage = "";
99 $scope.windowTitle = "Current GM Results"; 100 $scope.windowTitle = "Current GM Results";
100 } 101 }
101 ).error( 102 ).error(
102 function(data, status, header, config) { 103 function(data, status, header, config) {
103 $scope.loadingMessage = "Failed to load results of type '" 104 $scope.loadingMessage = "Failed to load results of type '"
104 + resultsToLoad + "'"; 105 + resultsToLoad + "'";
105 $scope.windowTitle = "Failed to Load GM Results"; 106 $scope.windowTitle = "Failed to Load GM Results";
106 } 107 }
107 ); 108 );
108 109
109 110
110 // 111 //
112 // Select/Clear/Toggle all tests.
113 //
114
115 /**
116 * Select all currently showing tests.
117 */
118 $scope.selectAllItems = function() {
119 var numItemsShowing = $scope.limitedTestData.length;
120 for (var i=0; i<numItemsShowing; i++) {
121 var index = $scope.limitedTestData[i].index;
122 if (!$scope.isValueInArray(index, $scope.selectedItems)) {
123 $scope.toggleValueInArray(index, $scope.selectedItems);
124 }
125 }
126 }
127
128 /**
129 * Deselect all currently showing tests.
130 */
131 $scope.clearAllItems = function() {
132 var numItemsShowing = $scope.limitedTestData.length;
133 for (var i=0; i<numItemsShowing; i++) {
134 var index = $scope.limitedTestData[i].index;
135 if ($scope.isValueInArray(index, $scope.selectedItems)) {
136 $scope.toggleValueInArray(index, $scope.selectedItems);
137 }
138 }
139 }
140
141 /**
142 * Toggle selection of all currently showing tests.
143 */
144 $scope.toggleAllItems = function() {
145 var numItemsShowing = $scope.limitedTestData.length;
146 for (var i=0; i<numItemsShowing; i++) {
147 var index = $scope.limitedTestData[i].index;
148 $scope.toggleValueInArray(index, $scope.selectedItems);
149 }
150 }
151
152
153 //
111 // Tab operations. 154 // Tab operations.
112 // 155 //
113 156
114 /** 157 /**
115 * Change the selected tab. 158 * Change the selected tab.
116 * 159 *
117 * @param tab (string): name of the tab to select 160 * @param tab (string): name of the tab to select
118 */ 161 */
119 $scope.setViewingTab = function(tab) { 162 $scope.setViewingTab = function(tab) {
120 $scope.viewingTab = tab; 163 $scope.viewingTab = tab;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 $scope.filteredTestData, $scope.displayLimit); 240 $scope.filteredTestData, $scope.displayLimit);
198 } else { 241 } else {
199 $scope.filteredTestData = 242 $scope.filteredTestData =
200 $filter("orderBy")( 243 $filter("orderBy")(
201 $filter("filter")( 244 $filter("filter")(
202 $scope.testData, 245 $scope.testData,
203 {tab: $scope.viewingTab}, 246 {tab: $scope.viewingTab},
204 true 247 true
205 ), 248 ),
206 $scope.sortColumn); 249 $scope.sortColumn);
207 $scope.limitedTestData = $filter("limitTo")( 250 $scope.limitedTestData = $scope.filteredTestData;
208 $scope.filteredTestData, $scope.displayLimit);
209 } 251 }
210 $scope.imageSize = $scope.imageSizePending; 252 $scope.imageSize = $scope.imageSizePending;
211 $scope.setUpdatesPending(false); 253 $scope.setUpdatesPending(false);
212 } 254 }
213 255
214 /** 256 /**
215 * Re-sort the displayed results. 257 * Re-sort the displayed results.
216 * 258 *
217 * @param sortColumn (string): name of the column to sort on 259 * @param sortColumn (string): name of the column to sort on
218 */ 260 */
(...skipping 19 matching lines...) Expand all
238 var newResults = []; 280 var newResults = [];
239 for (var i = 0; i < testDataSubset.length; i++) { 281 for (var i = 0; i < testDataSubset.length; i++) {
240 var actualResult = testDataSubset[i]; 282 var actualResult = testDataSubset[i];
241 var expectedResult = { 283 var expectedResult = {
242 builder: actualResult['builder'], 284 builder: actualResult['builder'],
243 test: actualResult['test'], 285 test: actualResult['test'],
244 config: actualResult['config'], 286 config: actualResult['config'],
245 expectedHashType: actualResult['actualHashType'], 287 expectedHashType: actualResult['actualHashType'],
246 expectedHashDigest: actualResult['actualHashDigest'], 288 expectedHashDigest: actualResult['actualHashDigest'],
247 }; 289 };
290 // Since these are *approvals*, we make assumptions about these fields:
291 expectedResult['reviewed-by-human'] = true;
292 // expectedResult['bugs'] is empty
293 // expectedResult['ignore-failure'] is empty (defaults to false)
248 newResults.push(expectedResult); 294 newResults.push(expectedResult);
249 } 295 }
250 $http({ 296 $http({
251 method: "POST", 297 method: "POST",
252 url: "/edits", 298 url: "/edits",
253 data: { 299 data: {
254 oldResultsType: $scope.header.type, 300 oldResultsType: $scope.header.type,
255 oldResultsHash: $scope.header.dataHash, 301 oldResultsHash: $scope.header.dataHash,
256 modifications: newResults 302 modifications: newResults
257 } 303 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 * 401 *
356 * @param secondsPastEpoch (numeric): seconds past epoch in UTC 402 * @param secondsPastEpoch (numeric): seconds past epoch in UTC
357 */ 403 */
358 $scope.localTimeString = function(secondsPastEpoch) { 404 $scope.localTimeString = function(secondsPastEpoch) {
359 var d = new Date(secondsPastEpoch * 1000); 405 var d = new Date(secondsPastEpoch * 1000);
360 return d.toString(); 406 return d.toString();
361 } 407 }
362 408
363 } 409 }
364 ); 410 );
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698