Chromium Code Reviews| OLD | NEW |
|---|---|
| 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.extraColumnHeaders and $scope.imagePairs . | 4 * them into $scope.extraColumnHeaders and $scope.imagePairs . |
| 5 */ | 5 */ |
| 6 var Loader = angular.module( | 6 var Loader = angular.module( |
| 7 'Loader', | 7 'Loader', |
| 8 ['ConstantsModule'] | 8 ['ConstantsModule'] |
| 9 ); | 9 ); |
| 10 | 10 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 ] | 23 ] |
| 24 ); | 24 ); |
| 25 | 25 |
| 26 // TODO(epoger): Combine ALL of our filtering operations (including | 26 // TODO(epoger): Combine ALL of our filtering operations (including |
| 27 // truncation) into this one filter, so that runs most efficiently? | 27 // truncation) into this one filter, so that runs most efficiently? |
| 28 // (We would have to make sure truncation still took place after | 28 // (We would have to make sure truncation still took place after |
| 29 // sorting, though.) | 29 // sorting, though.) |
| 30 Loader.filter( | 30 Loader.filter( |
| 31 'removeHiddenImagePairs', | 31 'removeHiddenImagePairs', |
| 32 function(constants) { | 32 function(constants) { |
| 33 return function(unfilteredImagePairs, hiddenResultTypes, hiddenConfigs, | 33 return function(unfilteredImagePairs, showingColumnValues, |
|
epoger
2014/07/03 21:49:46
Throughout:
- (hiddenResultTypes, hiddenConfigs) d
rmistry
2014/07/07 15:28:52
Acknowledged.
| |
| 34 builderSubstring, testSubstring, viewingTab) { | 34 builderSubstring, testSubstring, viewingTab) { |
| 35 var filteredImagePairs = []; | 35 var filteredImagePairs = []; |
| 36 for (var i = 0; i < unfilteredImagePairs.length; i++) { | 36 for (var i = 0; i < unfilteredImagePairs.length; i++) { |
| 37 var imagePair = unfilteredImagePairs[i]; | 37 var imagePair = unfilteredImagePairs[i]; |
| 38 var extraColumnValues = imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMN S]; | 38 var extraColumnValues = imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMN S]; |
| 39 // For performance, we examine the "set" objects directly rather | 39 // For performance, we examine the "set" objects directly rather |
| 40 // than calling $scope.isValueInSet(). | 40 // than calling $scope.isValueInSet(). |
| 41 // Besides, I don't think we have access to $scope in here... | 41 // Besides, I don't think we have access to $scope in here... |
| 42 if (!(true == hiddenResultTypes[extraColumnValues[ | 42 if (showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] |
| 43 constants.KEY__EXTRACOLUMNS__RESULT_TYPE]]) && | 43 [extraColumnValues[constants.KEY__EXTRACOLUMNS__R ESULT_TYPE]] && |
| 44 !(true == hiddenConfigs[extraColumnValues[ | 44 showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG] |
| 45 constants.KEY__EXTRACOLUMNS__CONFIG]]) && | 45 [extraColumnValues[constants.KEY__EXTRACOLUMNS__C ONFIG]] && |
| 46 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMNS__BUILDER] | 46 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMNS__BUILDER] |
| 47 .indexOf(builderSubstring)) && | 47 .indexOf(builderSubstring)) && |
| 48 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMNS__TEST] | 48 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMNS__TEST] |
| 49 .indexOf(testSubstring)) && | 49 .indexOf(testSubstring)) && |
| 50 (viewingTab == imagePair.tab)) { | 50 (viewingTab == imagePair.tab)) { |
| 51 filteredImagePairs.push(imagePair); | 51 filteredImagePairs.push(imagePair); |
| 52 } | 52 } |
| 53 } | 53 } |
| 54 return filteredImagePairs; | 54 return filteredImagePairs; |
| 55 }; | 55 }; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 112 } | 112 } |
| 113 return filteredImagePairs; | 113 return filteredImagePairs; |
| 114 }; | 114 }; |
| 115 } | 115 } |
| 116 ); | 116 ); |
| 117 | 117 |
| 118 | 118 |
| 119 Loader.controller( | 119 Loader.controller( |
| 120 'Loader.Controller', | 120 'Loader.Controller', |
| 121 function($scope, $http, $filter, $location, $log, $timeout, constants) { | 121 function($scope, $http, $filter, $location, $log, $timeout, constants) { |
| 122 $scope.readyToDisplay = false; | |
| 122 $scope.constants = constants; | 123 $scope.constants = constants; |
| 123 $scope.windowTitle = "Loading GM Results..."; | 124 $scope.windowTitle = "Loading GM Results..."; |
| 124 $scope.resultsToLoad = $location.search().resultsToLoad; | 125 $scope.resultsToLoad = $location.search().resultsToLoad; |
| 125 $scope.loadingMessage = "please wait..."; | 126 $scope.loadingMessage = "please wait..."; |
| 126 | 127 |
| 127 /** | 128 /** |
| 128 * On initial page load, load a full dictionary of results. | 129 * On initial page load, load a full dictionary of results. |
| 129 * Once the dictionary is loaded, unhide the page elements so they can | 130 * Once the dictionary is loaded, unhide the page elements so they can |
| 130 * render the data. | 131 * render the data. |
| 131 */ | 132 */ |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 192 | 193 |
| 193 // Add index and tab fields to all records. | 194 // Add index and tab fields to all records. |
| 194 for (var i = 0; i < $scope.imagePairs.length; i++) { | 195 for (var i = 0; i < $scope.imagePairs.length; i++) { |
| 195 $scope.imagePairs[i].index = i; | 196 $scope.imagePairs[i].index = i; |
| 196 $scope.imagePairs[i].tab = $scope.defaultTab; | 197 $scope.imagePairs[i].tab = $scope.defaultTab; |
| 197 } | 198 } |
| 198 | 199 |
| 199 // Arrays within which the user can toggle individual elements. | 200 // Arrays within which the user can toggle individual elements. |
| 200 $scope.selectedImagePairs = []; | 201 $scope.selectedImagePairs = []; |
| 201 | 202 |
| 202 // Sets within which the user can toggle individual elements. | 203 // allColumnValues[columnName] is a list of all known values |
| 203 $scope.hiddenResultTypes = {}; | 204 // for this column. |
| 204 $scope.hiddenResultTypes[ | 205 // showingColumnValues[columnName] is a set indicating which values |
| 205 constants.KEY__RESULT_TYPE__FAILUREIGNORED] = true; | 206 // in this column would cause us to show a row, rather than hiding it. |
| 206 $scope.hiddenResultTypes[ | 207 $scope.allColumnValues = {}; |
| 207 constants.KEY__RESULT_TYPE__NOCOMPARISON] = true; | 208 $scope.showingColumnValues = {}; |
| 208 $scope.hiddenResultTypes[ | 209 |
| 209 constants.KEY__RESULT_TYPE__SUCCEEDED] = true; | 210 // set allColumnValues/showingColumnValues for RESULT_TYPE; |
| 210 $scope.allResultTypes = $scope.columnSliceOf2DArray( | 211 // by default, show only KEY__RESULT_TYPE__FAILED results |
| 211 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMNS__RESULT_TYPE ] | 212 $scope.allColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] = |
| 212 [constants.KEY__EXTRACOLUMNHEADERS__VALUE S_AND_COUNTS], | 213 $scope.columnSliceOf2DArray( |
| 213 0); | 214 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMNS__RESULT_ TYPE] |
| 214 $scope.hiddenConfigs = {}; | 215 [constants.KEY__EXTRACOLUMNHEADERS__V ALUES_AND_COUNTS], |
| 215 $scope.allConfigs = $scope.columnSliceOf2DArray( | 216 0); |
| 216 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMNS__CONFIG] | 217 $scope.showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] = {}; |
| 217 [constants.KEY__EXTRACOLUMNHEADERS__VALUE S_AND_COUNTS], | 218 $scope.showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE][ |
| 218 0); | 219 constants.KEY__RESULT_TYPE__FAILED] = true; |
| 220 | |
| 221 // set allColumnValues/showingColumnValues for CONFIG; | |
| 222 // by default, show results for all configs | |
| 223 $scope.allColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG] = | |
| 224 $scope.columnSliceOf2DArray( | |
| 225 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMNS__CONFIG] | |
| 226 [constants.KEY__EXTRACOLUMNHEADERS__V ALUES_AND_COUNTS], | |
| 227 0); | |
| 228 $scope.showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG] = {}; | |
| 229 $scope.toggleValuesInSet($scope.allColumnValues[constants.KEY__EXTRACO LUMNS__CONFIG], | |
| 230 $scope.showingColumnValues[constants.KEY__EXT RACOLUMNS__CONFIG]); | |
| 219 | 231 |
| 220 // Associative array of partial string matches per category. | 232 // Associative array of partial string matches per category. |
| 233 // TODO(epoger): Rename as columnValueMatch to be more consistent | |
| 234 // with allColumnValues/showingColumnValues ? | |
| 221 $scope.categoryValueMatch = {}; | 235 $scope.categoryValueMatch = {}; |
| 222 $scope.categoryValueMatch.builder = ""; | 236 $scope.categoryValueMatch[constants.KEY__EXTRACOLUMNS__BUILDER] = ""; |
| 223 $scope.categoryValueMatch.test = ""; | 237 $scope.categoryValueMatch[constants.KEY__EXTRACOLUMNS__TEST] = ""; |
| 224 | 238 |
| 225 // If any defaults were overridden in the URL, get them now. | 239 // If any defaults were overridden in the URL, get them now. |
| 226 $scope.queryParameters.load(); | 240 $scope.queryParameters.load(); |
| 227 | 241 |
| 228 // Any image URLs which are relative should be relative to the JSON | 242 // Any image URLs which are relative should be relative to the JSON |
| 229 // file's source directory; absolute URLs should be left alone. | 243 // file's source directory; absolute URLs should be left alone. |
| 230 var baseUrlKey = constants.KEY__IMAGESETS__FIELD__BASE_URL; | 244 var baseUrlKey = constants.KEY__IMAGESETS__FIELD__BASE_URL; |
| 231 angular.forEach( | 245 angular.forEach( |
| 232 $scope.imageSets, | 246 $scope.imageSets, |
| 233 function(imageSet) { | 247 function(imageSet) { |
| 234 var baseUrl = imageSet[baseUrlKey]; | 248 var baseUrl = imageSet[baseUrlKey]; |
| 235 if ((baseUrl.substring(0, 1) != '/') && | 249 if ((baseUrl.substring(0, 1) != '/') && |
| 236 (baseUrl.indexOf('://') == -1)) { | 250 (baseUrl.indexOf('://') == -1)) { |
| 237 imageSet[baseUrlKey] = $scope.resultsToLoad + '/../' + baseUrl; | 251 imageSet[baseUrlKey] = $scope.resultsToLoad + '/../' + baseUrl; |
| 238 } | 252 } |
| 239 } | 253 } |
| 240 ); | 254 ); |
| 241 | 255 |
| 256 $scope.readyToDisplay = true; | |
| 242 $scope.updateResults(); | 257 $scope.updateResults(); |
| 243 $scope.loadingMessage = ""; | 258 $scope.loadingMessage = ""; |
| 244 $scope.windowTitle = "Current GM Results"; | 259 $scope.windowTitle = "Current GM Results"; |
| 245 } | 260 } |
| 246 } | 261 } |
| 247 ).error( | 262 ).error( |
| 248 function(data, status, header, config) { | 263 function(data, status, header, config) { |
| 249 $scope.loadingMessage = "FAILED to load."; | 264 $scope.loadingMessage = "FAILED to load."; |
| 250 $scope.windowTitle = "Failed to Load GM Results"; | 265 $scope.windowTitle = "Failed to Load GM Results"; |
| 251 } | 266 } |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 var value = nameValuePairs[name]; | 396 var value = nameValuePairs[name]; |
| 382 if (value) { | 397 if (value) { |
| 383 $scope.categoryValueMatch[name] = value; | 398 $scope.categoryValueMatch[name] = value; |
| 384 } | 399 } |
| 385 }, | 400 }, |
| 386 'save': function(nameValuePairs, name) { | 401 'save': function(nameValuePairs, name) { |
| 387 nameValuePairs[name] = $scope.categoryValueMatch[name]; | 402 nameValuePairs[name] = $scope.categoryValueMatch[name]; |
| 388 } | 403 } |
| 389 }, | 404 }, |
| 390 | 405 |
| 391 'set': { | 406 'showingColumnValuesSet': { |
| 392 'load': function(nameValuePairs, name) { | 407 'load': function(nameValuePairs, name) { |
| 393 var value = nameValuePairs[name]; | 408 var value = nameValuePairs[name]; |
| 394 if (value) { | 409 if (value) { |
| 395 var valueArray = value.split(','); | 410 var valueArray = value.split(','); |
| 396 $scope[name] = {}; | 411 $scope.showingColumnValues[name] = {}; |
| 397 $scope.toggleValuesInSet(valueArray, $scope[name]); | 412 $scope.toggleValuesInSet(valueArray, $scope.showingColumnValues[name ]); |
| 398 } | 413 } |
| 399 }, | 414 }, |
| 400 'save': function(nameValuePairs, name) { | 415 'save': function(nameValuePairs, name) { |
| 401 nameValuePairs[name] = Object.keys($scope[name]).join(','); | 416 nameValuePairs[name] = Object.keys($scope.showingColumnValues[name]).j oin(','); |
| 402 } | 417 } |
| 403 }, | 418 }, |
| 404 | 419 |
| 405 }; | 420 }; |
| 406 | 421 |
| 407 // parameter name -> copier objects to load/save parameter value | 422 // parameter name -> copier objects to load/save parameter value |
| 408 $scope.queryParameters.map = { | 423 $scope.queryParameters.map = { |
| 409 'resultsToLoad': $scope.queryParameters.copiers.simple, | 424 'resultsToLoad': $scope.queryParameters.copiers.simple, |
| 410 'displayLimitPending': $scope.queryParameters.copiers.simple, | 425 'displayLimitPending': $scope.queryParameters.copiers.simple, |
| 411 'showThumbnailsPending': $scope.queryParameters.copiers.simple, | 426 'showThumbnailsPending': $scope.queryParameters.copiers.simple, |
| 412 'mergeIdenticalRowsPending': $scope.queryParameters.copiers.simple, | 427 'mergeIdenticalRowsPending': $scope.queryParameters.copiers.simple, |
| 413 'imageSizePending': $scope.queryParameters.copiers.simple, | 428 'imageSizePending': $scope.queryParameters.copiers.simple, |
| 414 'sortColumnSubdict': $scope.queryParameters.copiers.simple, | 429 'sortColumnSubdict': $scope.queryParameters.copiers.simple, |
| 415 'sortColumnKey': $scope.queryParameters.copiers.simple, | 430 'sortColumnKey': $scope.queryParameters.copiers.simple, |
| 416 | |
| 417 'hiddenResultTypes': $scope.queryParameters.copiers.set, | |
| 418 'hiddenConfigs': $scope.queryParameters.copiers.set, | |
| 419 }; | 431 }; |
| 432 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] = | |
| 433 $scope.queryParameters.copiers.showingColumnValuesSet; | |
| 420 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__BUILDER] = | 434 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__BUILDER] = |
| 421 $scope.queryParameters.copiers.categoryValueMatch; | 435 $scope.queryParameters.copiers.categoryValueMatch; |
| 422 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__TEST] = | 436 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__TEST] = |
| 423 $scope.queryParameters.copiers.categoryValueMatch; | 437 $scope.queryParameters.copiers.categoryValueMatch; |
| 438 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__CONFIG] = | |
| 439 $scope.queryParameters.copiers.showingColumnValuesSet; | |
| 424 | 440 |
| 425 // Loads all parameters into $scope from the URL query string; | 441 // Loads all parameters into $scope from the URL query string; |
| 426 // any which are not found within the URL will keep their current value. | 442 // any which are not found within the URL will keep their current value. |
| 427 $scope.queryParameters.load = function() { | 443 $scope.queryParameters.load = function() { |
| 428 var nameValuePairs = $location.search(); | 444 var nameValuePairs = $location.search(); |
| 429 | 445 |
| 430 // If urlSchemaVersion is not specified, we assume the current version. | 446 // If urlSchemaVersion is not specified, we assume the current version. |
| 431 var urlSchemaVersion = constants.URL_VALUE__SCHEMA_VERSION__CURRENT; | 447 var urlSchemaVersion = constants.URL_VALUE__SCHEMA_VERSION__CURRENT; |
| 432 if (constants.URL_KEY__SCHEMA_VERSION in nameValuePairs) { | 448 if (constants.URL_KEY__SCHEMA_VERSION in nameValuePairs) { |
| 433 urlSchemaVersion = nameValuePairs[constants.URL_KEY__SCHEMA_VERSION]; | 449 urlSchemaVersion = nameValuePairs[constants.URL_KEY__SCHEMA_VERSION]; |
| 450 } else if ('hiddenResultTypes' in nameValuePairs) { | |
| 451 // The combination of: | |
|
epoger
2014/07/03 21:49:46
Eric- I figured out a way to properly handle any o
| |
| 452 // - absence of an explicit urlSchemaVersion, and | |
| 453 // - presence of the old 'hiddenResultTypes' field | |
| 454 // tells us that the URL is from the original urlSchemaVersion. | |
| 455 // See https://codereview.chromium.org/367173002/ | |
| 456 urlSchemaVersion = 0; | |
| 434 } | 457 } |
| 435 $scope.urlSchemaVersionLoaded = urlSchemaVersion; | 458 $scope.urlSchemaVersionLoaded = urlSchemaVersion; |
| 436 | 459 |
| 460 if (urlSchemaVersion != constants.URL_VALUE__SCHEMA_VERSION__CURRENT) { | |
| 461 nameValuePairs = $scope.upconvertUrlNameValuePairs(nameValuePairs, urlSc hemaVersion); | |
| 462 } | |
| 437 angular.forEach($scope.queryParameters.map, | 463 angular.forEach($scope.queryParameters.map, |
| 438 function(copier, paramName) { | 464 function(copier, paramName) { |
| 439 copier.load(nameValuePairs, paramName); | 465 copier.load(nameValuePairs, paramName); |
| 440 } | 466 } |
| 441 ); | 467 ); |
| 442 }; | 468 }; |
| 443 | 469 |
| 444 // Saves all parameters from $scope into the URL query string. | 470 // Saves all parameters from $scope into the URL query string. |
| 445 $scope.queryParameters.save = function() { | 471 $scope.queryParameters.save = function() { |
| 446 var nameValuePairs = {}; | 472 var nameValuePairs = {}; |
| 447 nameValuePairs[constants.URL_KEY__SCHEMA_VERSION] = constants.URL_VALUE__S CHEMA_VERSION__CURRENT; | 473 nameValuePairs[constants.URL_KEY__SCHEMA_VERSION] = constants.URL_VALUE__S CHEMA_VERSION__CURRENT; |
| 448 angular.forEach($scope.queryParameters.map, | 474 angular.forEach($scope.queryParameters.map, |
| 449 function(copier, paramName) { | 475 function(copier, paramName) { |
| 450 copier.save(nameValuePairs, paramName); | 476 copier.save(nameValuePairs, paramName); |
| 451 } | 477 } |
| 452 ); | 478 ); |
| 453 $location.search(nameValuePairs); | 479 $location.search(nameValuePairs); |
| 454 }; | 480 }; |
| 455 | 481 |
| 482 /** | |
| 483 * Converts URL name/value pairs that were stored by a previous urlSchemaVer sion | |
| 484 * to the currently needed format. | |
| 485 * | |
| 486 * @param oldNValuePairs name/value pairs found in the loaded URL | |
| 487 * @param oldUrlSchemaVersion which version of the schema was used to genera te that URL | |
| 488 * | |
| 489 * @returns nameValuePairs as needed by the current URL parser | |
| 490 */ | |
| 491 $scope.upconvertUrlNameValuePairs = function(oldNameValuePairs, oldUrlSchema Version) { | |
| 492 var newNameValuePairs = {}; | |
| 493 angular.forEach(oldNameValuePairs, | |
| 494 function(value, name) { | |
| 495 if (oldUrlSchemaVersion < 1) { | |
| 496 if ('hiddenConfigs' == name) { | |
| 497 name = 'config'; | |
| 498 var valueSet = {}; | |
| 499 $scope.toggleValuesInSet(value.split(','), valueSet) ; | |
| 500 $scope.toggleValuesInSet( | |
| 501 $scope.allColumnValues[constants.KEY__EXTRACOLUM NS__CONFIG], | |
| 502 valueSet); | |
| 503 value = Object.keys(valueSet).join(','); | |
| 504 } else if ('hiddenResultTypes' == name) { | |
| 505 name = 'resultType'; | |
| 506 var valueSet = {}; | |
| 507 $scope.toggleValuesInSet(value.split(','), valueSet) ; | |
| 508 $scope.toggleValuesInSet( | |
| 509 $scope.allColumnValues[constants.KEY__EXTRACOLUM NS__RESULT_TYPE], | |
| 510 valueSet); | |
| 511 value = Object.keys(valueSet).join(','); | |
| 512 } | |
| 513 } | |
| 514 | |
| 515 newNameValuePairs[name] = value; | |
| 516 } | |
| 517 ); | |
| 518 return newNameValuePairs; | |
| 519 } | |
| 520 | |
| 456 | 521 |
| 457 // | 522 // |
| 458 // updateResults() and friends. | 523 // updateResults() and friends. |
| 459 // | 524 // |
| 460 | 525 |
| 461 /** | 526 /** |
| 462 * Set $scope.areUpdatesPending (to enable/disable the Update Results | 527 * Set $scope.areUpdatesPending (to enable/disable the Update Results |
| 463 * button). | 528 * button). |
| 464 * | 529 * |
| 465 * TODO(epoger): We could reduce the amount of code by just setting the | 530 * TODO(epoger): We could reduce the amount of code by just setting the |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 497 var doReverse = ( | 562 var doReverse = ( |
| 498 ($scope.sortColumnKey == | 563 ($scope.sortColumnKey == |
| 499 constants.KEY__DIFFERENCES__PERCENT_DIFF_PIXELS) || | 564 constants.KEY__DIFFERENCES__PERCENT_DIFF_PIXELS) || |
| 500 ($scope.sortColumnKey == | 565 ($scope.sortColumnKey == |
| 501 constants.KEY__DIFFERENCES__PERCEPTUAL_DIFF)); | 566 constants.KEY__DIFFERENCES__PERCEPTUAL_DIFF)); |
| 502 | 567 |
| 503 $scope.filteredImagePairs = | 568 $scope.filteredImagePairs = |
| 504 $filter("orderBy")( | 569 $filter("orderBy")( |
| 505 $filter("removeHiddenImagePairs")( | 570 $filter("removeHiddenImagePairs")( |
| 506 $scope.imagePairs, | 571 $scope.imagePairs, |
| 507 $scope.hiddenResultTypes, | 572 $scope.showingColumnValues, |
| 508 $scope.hiddenConfigs, | 573 $scope.categoryValueMatch[constants.KEY__EXTRACOLUMNS__BUILD ER], |
| 509 $scope.categoryValueMatch.builder, | 574 $scope.categoryValueMatch[constants.KEY__EXTRACOLUMNS__TEST] , |
| 510 $scope.categoryValueMatch.test, | |
| 511 $scope.viewingTab | 575 $scope.viewingTab |
| 512 ), | 576 ), |
| 513 [$scope.getSortColumnValue, $scope.getSecondOrderSortValue], | 577 [$scope.getSortColumnValue, $scope.getSecondOrderSortValue], |
| 514 doReverse); | 578 doReverse); |
| 515 $scope.limitedImagePairs = $filter("mergeAndLimit")( | 579 $scope.limitedImagePairs = $filter("mergeAndLimit")( |
| 516 $scope.filteredImagePairs, $scope.displayLimit, $scope.mergeIdentica lRows); | 580 $scope.filteredImagePairs, $scope.displayLimit, $scope.mergeIdentica lRows); |
| 517 } else { | 581 } else { |
| 518 $scope.filteredImagePairs = | 582 $scope.filteredImagePairs = |
| 519 $filter("orderBy")( | 583 $filter("orderBy")( |
| 520 $filter("filter")( | 584 $filter("filter")( |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 592 * | 656 * |
| 593 * @param name | 657 * @param name |
| 594 * @param value | 658 * @param value |
| 595 */ | 659 */ |
| 596 $scope.setCategoryValueMatch = function(name, value) { | 660 $scope.setCategoryValueMatch = function(name, value) { |
| 597 $scope.categoryValueMatch[name] = value; | 661 $scope.categoryValueMatch[name] = value; |
| 598 $scope.updateResults(); | 662 $scope.updateResults(); |
| 599 } | 663 } |
| 600 | 664 |
| 601 /** | 665 /** |
| 602 * Update $scope.hiddenResultTypes so that ONLY this resultType is showing, | 666 * Update $scope.showingColumnValues[columnName] so that ONLY entries with |
| 603 * and update the visible results. | 667 * this columnValue are showing, and update the visible results. |
| 604 * | 668 * |
| 605 * @param resultType | 669 * @param columnName |
| 670 * @param columnValue | |
| 606 */ | 671 */ |
| 607 $scope.showOnlyResultType = function(resultType) { | 672 $scope.showOnlyColumnValue = function(columnName, columnValue) { |
| 608 $scope.hiddenResultTypes = {}; | 673 $scope.showingColumnValues[columnName] = {}; |
| 609 // TODO(epoger): Maybe change $scope.allResultTypes to be a Set like | 674 $scope.toggleValueInSet(columnValue, $scope.showingColumnValues[columnName ]); |
| 610 // $scope.hiddenResultTypes (rather than an array), so this operation is | |
| 611 // simpler (just assign or add allResultTypes to hiddenResultTypes). | |
| 612 $scope.toggleValuesInSet($scope.allResultTypes, $scope.hiddenResultTypes); | |
| 613 $scope.toggleValueInSet(resultType, $scope.hiddenResultTypes); | |
| 614 $scope.updateResults(); | 675 $scope.updateResults(); |
| 615 } | 676 } |
| 616 | 677 |
| 617 /** | 678 /** |
| 618 * Update $scope.hiddenResultTypes so that ALL resultTypes are showing, | 679 * Update $scope.showingColumnValues[columnName] so that ALL entries are |
| 619 * and update the visible results. | 680 * showing, and update the visible results. |
| 681 * | |
| 682 * @param columnName | |
| 620 */ | 683 */ |
| 621 $scope.showAllResultTypes = function() { | 684 $scope.showAllColumnValues = function(columnName) { |
| 622 $scope.hiddenResultTypes = {}; | 685 $scope.showingColumnValues[columnName] = {}; |
| 686 $scope.toggleValuesInSet($scope.allColumnValues[columnName], | |
| 687 $scope.showingColumnValues[columnName]); | |
| 623 $scope.updateResults(); | 688 $scope.updateResults(); |
| 624 } | 689 } |
| 625 | 690 |
| 626 /** | |
| 627 * Update $scope.hiddenConfigs so that ONLY this config is showing, | |
| 628 * and update the visible results. | |
| 629 * | |
| 630 * @param config | |
| 631 */ | |
| 632 $scope.showOnlyConfig = function(config) { | |
| 633 $scope.hiddenConfigs = {}; | |
| 634 $scope.toggleValuesInSet($scope.allConfigs, $scope.hiddenConfigs); | |
| 635 $scope.toggleValueInSet(config, $scope.hiddenConfigs); | |
| 636 $scope.updateResults(); | |
| 637 } | |
| 638 | |
| 639 /** | |
| 640 * Update $scope.hiddenConfigs so that ALL configs are showing, | |
| 641 * and update the visible results. | |
| 642 */ | |
| 643 $scope.showAllConfigs = function() { | |
| 644 $scope.hiddenConfigs = {}; | |
| 645 $scope.updateResults(); | |
| 646 } | |
| 647 | |
| 648 | 691 |
| 649 // | 692 // |
| 650 // Operations for sending info back to the server. | 693 // Operations for sending info back to the server. |
| 651 // | 694 // |
| 652 | 695 |
| 653 /** | 696 /** |
| 654 * Tell the server that the actual results of these particular tests | 697 * Tell the server that the actual results of these particular tests |
| 655 * are acceptable. | 698 * are acceptable. |
| 656 * | 699 * |
| 657 * TODO(epoger): This assumes that the original expectations are in | 700 * TODO(epoger): This assumes that the original expectations are in |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 932 */ | 975 */ |
| 933 $scope.getImageDiffRelativeUrl = function(imagePair) { | 976 $scope.getImageDiffRelativeUrl = function(imagePair) { |
| 934 var before = | 977 var before = |
| 935 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_A_URL] + "-vs-" + | 978 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_A_URL] + "-vs-" + |
| 936 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL]; | 979 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL]; |
| 937 return before.replace(/[^\w\-]/g, "_") + ".png"; | 980 return before.replace(/[^\w\-]/g, "_") + ".png"; |
| 938 } | 981 } |
| 939 | 982 |
| 940 } | 983 } |
| 941 ); | 984 ); |
| OLD | NEW |