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

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

Issue 376623002: rebaseline_server: allow JSON to control column filtering (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Ravi suggestions Created 6 years, 5 months 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
« no previous file with comments | « gm/rebaseline_server/static/constants.js ('k') | gm/rebaseline_server/static/view.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.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
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, showingColumnValues, 33 return function(unfilteredImagePairs, filterableColumnNames, showingColumnVa lues,
34 builderSubstring, testSubstring, viewingTab) { 34 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 var allColumnValuesAreVisible = true;
40 // than calling $scope.isValueInSet(). 40 // Loop over all columns, and if any of them contain values not found in
41 // Besides, I don't think we have access to $scope in here... 41 // showingColumnValues[columnName], don't include this imagePair.
42 if (showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] 42 //
43 [extraColumnValues[constants.KEY__EXTRACOLUMNS__R ESULT_TYPE]] && 43 // We use this same filtering mechanism regardless of whether each colum n
44 showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG] 44 // has USE_FREEFORM_FILTER set or not; if that flag is set, then we will
45 [extraColumnValues[constants.KEY__EXTRACOLUMNS__C ONFIG]] && 45 // have already used the freeform text entry block to populate
46 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMNS__BUILDER] 46 // showingColumnValues[columnName].
47 .indexOf(builderSubstring)) && 47 for (var j = 0; j < filterableColumnNames.length; j++) {
48 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMNS__TEST] 48 var columnName = filterableColumnNames[j];
49 .indexOf(testSubstring)) && 49 var columnValue = extraColumnValues[columnName];
50 (viewingTab == imagePair.tab)) { 50 if (!showingColumnValues[columnName][columnValue]) {
51 allColumnValuesAreVisible = false;
52 break;
53 }
54 }
55 if (allColumnValuesAreVisible && (viewingTab == imagePair.tab)) {
51 filteredImagePairs.push(imagePair); 56 filteredImagePairs.push(imagePair);
52 } 57 }
53 } 58 }
54 return filteredImagePairs; 59 return filteredImagePairs;
55 }; 60 };
56 } 61 }
57 ); 62 );
58 63
59 /** 64 /**
60 * Limit the input imagePairs to some max number, and merge identical rows 65 * Limit the input imagePairs to some max number, and merge identical rows
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 "server is still loading results; will retry at " + 157 "server is still loading results; will retry at " +
153 $scope.localTimeString(timeToReload / 1000); 158 $scope.localTimeString(timeToReload / 1000);
154 $timeout( 159 $timeout(
155 function(){location.reload();}, 160 function(){location.reload();},
156 timeToReload - timeNow); 161 timeToReload - timeNow);
157 } else { 162 } else {
158 $scope.loadingMessage = "processing data, please wait..."; 163 $scope.loadingMessage = "processing data, please wait...";
159 164
160 $scope.header = dataHeader; 165 $scope.header = dataHeader;
161 $scope.extraColumnHeaders = data[constants.KEY__ROOT__EXTRACOLUMNHEADE RS]; 166 $scope.extraColumnHeaders = data[constants.KEY__ROOT__EXTRACOLUMNHEADE RS];
167 $scope.orderedColumnNames = data[constants.KEY__ROOT__EXTRACOLUMNORDER ];
162 $scope.imagePairs = data[constants.KEY__ROOT__IMAGEPAIRS]; 168 $scope.imagePairs = data[constants.KEY__ROOT__IMAGEPAIRS];
163 $scope.imageSets = data[constants.KEY__ROOT__IMAGESETS]; 169 $scope.imageSets = data[constants.KEY__ROOT__IMAGESETS];
164 $scope.sortColumnSubdict = constants.KEY__IMAGEPAIRS__DIFFERENCES; 170 $scope.sortColumnSubdict = constants.KEY__IMAGEPAIRS__DIFFERENCES;
165 $scope.sortColumnKey = constants.KEY__DIFFERENCES__PERCEPTUAL_DIFF; 171 $scope.sortColumnKey = constants.KEY__DIFFERENCES__PERCEPTUAL_DIFF;
166 172
167 $scope.showSubmitAdvancedSettings = false; 173 $scope.showSubmitAdvancedSettings = false;
168 $scope.submitAdvancedSettings = {}; 174 $scope.submitAdvancedSettings = {};
169 $scope.submitAdvancedSettings[ 175 $scope.submitAdvancedSettings[
170 constants.KEY__EXPECTATIONS__REVIEWED] = true; 176 constants.KEY__EXPECTATIONS__REVIEWED] = true;
171 $scope.submitAdvancedSettings[ 177 $scope.submitAdvancedSettings[
(...skipping 21 matching lines...) Expand all
193 199
194 // Add index and tab fields to all records. 200 // Add index and tab fields to all records.
195 for (var i = 0; i < $scope.imagePairs.length; i++) { 201 for (var i = 0; i < $scope.imagePairs.length; i++) {
196 $scope.imagePairs[i].index = i; 202 $scope.imagePairs[i].index = i;
197 $scope.imagePairs[i].tab = $scope.defaultTab; 203 $scope.imagePairs[i].tab = $scope.defaultTab;
198 } 204 }
199 205
200 // Arrays within which the user can toggle individual elements. 206 // Arrays within which the user can toggle individual elements.
201 $scope.selectedImagePairs = []; 207 $scope.selectedImagePairs = [];
202 208
209 // Set up filters.
210 //
211 // filterableColumnNames is a list of all column names we can filter o n.
203 // allColumnValues[columnName] is a list of all known values 212 // allColumnValues[columnName] is a list of all known values
204 // for this column. 213 // for a given column.
205 // showingColumnValues[columnName] is a set indicating which values 214 // showingColumnValues[columnName] is a set indicating which values
206 // in this column would cause us to show a row, rather than hiding it. 215 // in a given column would cause us to show a row, rather than hiding it.
216 //
217 // columnStringMatch[columnName] is a string used as a pattern to gene rate
218 // showingColumnValues[columnName] for columns we filter using free-fo rm text.
219 // It is ignored for any columns with USE_FREEFORM_FILTER == false.
220 $scope.filterableColumnNames = [];
207 $scope.allColumnValues = {}; 221 $scope.allColumnValues = {};
208 $scope.showingColumnValues = {}; 222 $scope.showingColumnValues = {};
223 $scope.columnStringMatch = {};
209 224
210 // set allColumnValues/showingColumnValues for RESULT_TYPE; 225 angular.forEach(
226 Object.keys($scope.extraColumnHeaders),
227 function(columnName) {
228 var columnHeader = $scope.extraColumnHeaders[columnName];
229 if (columnHeader[constants.KEY__EXTRACOLUMNHEADERS__IS_FILTERABLE] ) {
230 $scope.filterableColumnNames.push(columnName);
231 $scope.allColumnValues[columnName] = $scope.columnSliceOf2DArray (
232 columnHeader[constants.KEY__EXTRACOLUMNHEADERS__VALUES_AND_C OUNTS], 0);
233 $scope.showingColumnValues[columnName] = {};
234 $scope.toggleValuesInSet($scope.allColumnValues[columnName],
235 $scope.showingColumnValues[columnName]) ;
236 $scope.columnStringMatch[columnName] = "";
237 }
238 }
239 );
240
241 // TODO(epoger): Special handling for RESULT_TYPE column:
211 // by default, show only KEY__RESULT_TYPE__FAILED results 242 // by default, show only KEY__RESULT_TYPE__FAILED results
212 $scope.allColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] =
213 $scope.columnSliceOf2DArray(
214 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMNS__RESULT_ TYPE]
215 [constants.KEY__EXTRACOLUMNHEADERS__V ALUES_AND_COUNTS],
216 0);
217 $scope.showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] = {}; 243 $scope.showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] = {};
218 $scope.showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE][ 244 $scope.showingColumnValues[constants.KEY__EXTRACOLUMNS__RESULT_TYPE][
219 constants.KEY__RESULT_TYPE__FAILED] = true; 245 constants.KEY__RESULT_TYPE__FAILED] = true;
220 246
221 // set allColumnValues/showingColumnValues for CONFIG; 247 // Set up mapping for URL parameters.
222 // by default, show results for all configs 248 // parameter name -> copier object to load/save parameter value
223 $scope.allColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG] = 249 $scope.queryParameters.map = {
224 $scope.columnSliceOf2DArray( 250 'resultsToLoad': $scope.queryParameters.copiers.simple,
225 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMNS__CONFIG] 251 'displayLimitPending': $scope.queryParameters.copiers.simple,
226 [constants.KEY__EXTRACOLUMNHEADERS__V ALUES_AND_COUNTS], 252 'showThumbnailsPending': $scope.queryParameters.copiers.simple,
227 0); 253 'mergeIdenticalRowsPending': $scope.queryParameters.copiers.simple,
228 $scope.showingColumnValues[constants.KEY__EXTRACOLUMNS__CONFIG] = {}; 254 'imageSizePending': $scope.queryParameters.copiers.simple,
229 $scope.toggleValuesInSet($scope.allColumnValues[constants.KEY__EXTRACO LUMNS__CONFIG], 255 'sortColumnSubdict': $scope.queryParameters.copiers.simple,
230 $scope.showingColumnValues[constants.KEY__EXT RACOLUMNS__CONFIG]); 256 'sortColumnKey': $scope.queryParameters.copiers.simple,
231 257 };
232 // Associative array of partial string matches per category. 258 // Some parameters are handled differently based on whether they USE_F REEFORM_FILTER.
233 // TODO(epoger): Rename as columnValueMatch to be more consistent 259 angular.forEach(
234 // with allColumnValues/showingColumnValues ? 260 $scope.filterableColumnNames,
235 $scope.categoryValueMatch = {}; 261 function(columnName) {
236 $scope.categoryValueMatch[constants.KEY__EXTRACOLUMNS__BUILDER] = ""; 262 if ($scope.extraColumnHeaders[columnName]
237 $scope.categoryValueMatch[constants.KEY__EXTRACOLUMNS__TEST] = ""; 263 [constants.KEY__EXTRACOLUMNHEADERS__USE_FREEFORM_FILTER]) {
264 $scope.queryParameters.map[columnName] =
265 $scope.queryParameters.copiers.columnStringMatch;
266 } else {
267 $scope.queryParameters.map[columnName] =
268 $scope.queryParameters.copiers.showingColumnValuesSet;
269 }
270 }
271 );
238 272
239 // If any defaults were overridden in the URL, get them now. 273 // If any defaults were overridden in the URL, get them now.
240 $scope.queryParameters.load(); 274 $scope.queryParameters.load();
241 275
242 // Any image URLs which are relative should be relative to the JSON 276 // Any image URLs which are relative should be relative to the JSON
243 // file's source directory; absolute URLs should be left alone. 277 // file's source directory; absolute URLs should be left alone.
244 var baseUrlKey = constants.KEY__IMAGESETS__FIELD__BASE_URL; 278 var baseUrlKey = constants.KEY__IMAGESETS__FIELD__BASE_URL;
245 angular.forEach( 279 angular.forEach(
246 $scope.imageSets, 280 $scope.imageSets,
247 function(imageSet) { 281 function(imageSet) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 var value = nameValuePairs[name]; 418 var value = nameValuePairs[name];
385 if (value) { 419 if (value) {
386 $scope[name] = value; 420 $scope[name] = value;
387 } 421 }
388 }, 422 },
389 'save': function(nameValuePairs, name) { 423 'save': function(nameValuePairs, name) {
390 nameValuePairs[name] = $scope[name]; 424 nameValuePairs[name] = $scope[name];
391 } 425 }
392 }, 426 },
393 427
394 'categoryValueMatch': { 428 'columnStringMatch': {
395 'load': function(nameValuePairs, name) { 429 'load': function(nameValuePairs, name) {
396 var value = nameValuePairs[name]; 430 var value = nameValuePairs[name];
397 if (value) { 431 if (value) {
398 $scope.categoryValueMatch[name] = value; 432 $scope.columnStringMatch[name] = value;
399 } 433 }
400 }, 434 },
401 'save': function(nameValuePairs, name) { 435 'save': function(nameValuePairs, name) {
402 nameValuePairs[name] = $scope.categoryValueMatch[name]; 436 nameValuePairs[name] = $scope.columnStringMatch[name];
403 } 437 }
404 }, 438 },
405 439
406 'showingColumnValuesSet': { 440 'showingColumnValuesSet': {
407 'load': function(nameValuePairs, name) { 441 'load': function(nameValuePairs, name) {
408 var value = nameValuePairs[name]; 442 var value = nameValuePairs[name];
409 if (value) { 443 if (value) {
410 var valueArray = value.split(','); 444 var valueArray = value.split(',');
411 $scope.showingColumnValues[name] = {}; 445 $scope.showingColumnValues[name] = {};
412 $scope.toggleValuesInSet(valueArray, $scope.showingColumnValues[name ]); 446 $scope.toggleValuesInSet(valueArray, $scope.showingColumnValues[name ]);
413 } 447 }
414 }, 448 },
415 'save': function(nameValuePairs, name) { 449 'save': function(nameValuePairs, name) {
416 nameValuePairs[name] = Object.keys($scope.showingColumnValues[name]).j oin(','); 450 nameValuePairs[name] = Object.keys($scope.showingColumnValues[name]).j oin(',');
417 } 451 }
418 }, 452 },
419 453
420 }; 454 };
421 455
422 // parameter name -> copier objects to load/save parameter value
423 $scope.queryParameters.map = {
424 'resultsToLoad': $scope.queryParameters.copiers.simple,
425 'displayLimitPending': $scope.queryParameters.copiers.simple,
426 'showThumbnailsPending': $scope.queryParameters.copiers.simple,
427 'mergeIdenticalRowsPending': $scope.queryParameters.copiers.simple,
428 'imageSizePending': $scope.queryParameters.copiers.simple,
429 'sortColumnSubdict': $scope.queryParameters.copiers.simple,
430 'sortColumnKey': $scope.queryParameters.copiers.simple,
431 };
432 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__RESULT_TYPE] =
433 $scope.queryParameters.copiers.showingColumnValuesSet;
434 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__BUILDER] =
435 $scope.queryParameters.copiers.categoryValueMatch;
436 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__TEST] =
437 $scope.queryParameters.copiers.categoryValueMatch;
438 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__CONFIG] =
439 $scope.queryParameters.copiers.showingColumnValuesSet;
440
441 // Loads all parameters into $scope from the URL query string; 456 // Loads all parameters into $scope from the URL query string;
442 // any which are not found within the URL will keep their current value. 457 // any which are not found within the URL will keep their current value.
443 $scope.queryParameters.load = function() { 458 $scope.queryParameters.load = function() {
444 var nameValuePairs = $location.search(); 459 var nameValuePairs = $location.search();
445 460
446 // If urlSchemaVersion is not specified, we assume the current version. 461 // If urlSchemaVersion is not specified, we assume the current version.
447 var urlSchemaVersion = constants.URL_VALUE__SCHEMA_VERSION__CURRENT; 462 var urlSchemaVersion = constants.URL_VALUE__SCHEMA_VERSION__CURRENT;
448 if (constants.URL_KEY__SCHEMA_VERSION in nameValuePairs) { 463 if (constants.URL_KEY__SCHEMA_VERSION in nameValuePairs) {
449 urlSchemaVersion = nameValuePairs[constants.URL_KEY__SCHEMA_VERSION]; 464 urlSchemaVersion = nameValuePairs[constants.URL_KEY__SCHEMA_VERSION];
450 } else if ('hiddenResultTypes' in nameValuePairs) { 465 } else if ('hiddenResultTypes' in nameValuePairs) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 /** 558 /**
544 * Update the displayed results, based on filters/settings, 559 * Update the displayed results, based on filters/settings,
545 * and call $scope.queryParameters.save() so that the new filter results 560 * and call $scope.queryParameters.save() so that the new filter results
546 * can be bookmarked. 561 * can be bookmarked.
547 */ 562 */
548 $scope.updateResults = function() { 563 $scope.updateResults = function() {
549 $scope.renderStartTime = window.performance.now(); 564 $scope.renderStartTime = window.performance.now();
550 $log.debug("renderStartTime: " + $scope.renderStartTime); 565 $log.debug("renderStartTime: " + $scope.renderStartTime);
551 $scope.displayLimit = $scope.displayLimitPending; 566 $scope.displayLimit = $scope.displayLimitPending;
552 $scope.mergeIdenticalRows = $scope.mergeIdenticalRowsPending; 567 $scope.mergeIdenticalRows = $scope.mergeIdenticalRowsPending;
568
569 // For each USE_FREEFORM_FILTER column, populate showingColumnValues.
570 // This is more efficient than applying the freeform filter within the
571 // tight loop in removeHiddenImagePairs.
572 angular.forEach(
573 $scope.filterableColumnNames,
574 function(columnName) {
575 var columnHeader = $scope.extraColumnHeaders[columnName];
576 if (columnHeader[constants.KEY__EXTRACOLUMNHEADERS__USE_FREEFORM_FILTE R]) {
577 var columnStringMatch = $scope.columnStringMatch[columnName];
578 var showingColumnValues = {};
579 angular.forEach(
580 $scope.allColumnValues[columnName],
581 function(columnValue) {
582 if (-1 != columnValue.indexOf(columnStringMatch)) {
583 showingColumnValues[columnValue] = true;
584 }
585 }
586 );
587 $scope.showingColumnValues[columnName] = showingColumnValues;
588 }
589 }
590 );
591
553 // TODO(epoger): Every time we apply a filter, AngularJS creates 592 // TODO(epoger): Every time we apply a filter, AngularJS creates
554 // another copy of the array. Is there a way we can filter out 593 // another copy of the array. Is there a way we can filter out
555 // the imagePairs as they are displayed, rather than storing multiple 594 // the imagePairs as they are displayed, rather than storing multiple
556 // array copies? (For better performance.) 595 // array copies? (For better performance.)
557 596
558 if ($scope.viewingTab == $scope.defaultTab) { 597 if ($scope.viewingTab == $scope.defaultTab) {
559 598
560 // TODO(epoger): Until we allow the user to reverse sort order, 599 // TODO(epoger): Until we allow the user to reverse sort order,
561 // there are certain columns we want to sort in a different order. 600 // there are certain columns we want to sort in a different order.
562 var doReverse = ( 601 var doReverse = (
563 ($scope.sortColumnKey == 602 ($scope.sortColumnKey ==
564 constants.KEY__DIFFERENCES__PERCENT_DIFF_PIXELS) || 603 constants.KEY__DIFFERENCES__PERCENT_DIFF_PIXELS) ||
565 ($scope.sortColumnKey == 604 ($scope.sortColumnKey ==
566 constants.KEY__DIFFERENCES__PERCEPTUAL_DIFF)); 605 constants.KEY__DIFFERENCES__PERCEPTUAL_DIFF));
567 606
568 $scope.filteredImagePairs = 607 $scope.filteredImagePairs =
569 $filter("orderBy")( 608 $filter("orderBy")(
570 $filter("removeHiddenImagePairs")( 609 $filter("removeHiddenImagePairs")(
571 $scope.imagePairs, 610 $scope.imagePairs,
611 $scope.filterableColumnNames,
572 $scope.showingColumnValues, 612 $scope.showingColumnValues,
573 $scope.categoryValueMatch[constants.KEY__EXTRACOLUMNS__BUILD ER],
574 $scope.categoryValueMatch[constants.KEY__EXTRACOLUMNS__TEST] ,
575 $scope.viewingTab 613 $scope.viewingTab
576 ), 614 ),
577 [$scope.getSortColumnValue, $scope.getSecondOrderSortValue], 615 [$scope.getSortColumnValue, $scope.getSecondOrderSortValue],
578 doReverse); 616 doReverse);
579 $scope.limitedImagePairs = $filter("mergeAndLimit")( 617 $scope.limitedImagePairs = $filter("mergeAndLimit")(
580 $scope.filteredImagePairs, $scope.displayLimit, $scope.mergeIdentica lRows); 618 $scope.filteredImagePairs, $scope.displayLimit, $scope.mergeIdentica lRows);
581 } else { 619 } else {
582 $scope.filteredImagePairs = 620 $scope.filteredImagePairs =
583 $filter("orderBy")( 621 $filter("orderBy")(
584 $filter("filter")( 622 $filter("filter")(
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 * adjacent rows as much as possible. 683 * adjacent rows as much as possible.
646 * 684 *
647 * @param imagePair: imagePair to get a column value out of. 685 * @param imagePair: imagePair to get a column value out of.
648 */ 686 */
649 $scope.getSecondOrderSortValue = function(imagePair) { 687 $scope.getSecondOrderSortValue = function(imagePair) {
650 return imagePair[constants.KEY__IMAGEPAIRS__IMAGE_A_URL] + "-vs-" + 688 return imagePair[constants.KEY__IMAGEPAIRS__IMAGE_A_URL] + "-vs-" +
651 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL]; 689 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL];
652 } 690 }
653 691
654 /** 692 /**
655 * Set $scope.categoryValueMatch[name] = value, and update results. 693 * Set $scope.columnStringMatch[name] = value, and update results.
656 * 694 *
657 * @param name 695 * @param name
658 * @param value 696 * @param value
659 */ 697 */
660 $scope.setCategoryValueMatch = function(name, value) { 698 $scope.setColumnStringMatch = function(name, value) {
661 $scope.categoryValueMatch[name] = value; 699 $scope.columnStringMatch[name] = value;
662 $scope.updateResults(); 700 $scope.updateResults();
663 } 701 }
664 702
665 /** 703 /**
666 * Update $scope.showingColumnValues[columnName] so that ONLY entries with 704 * Update $scope.showingColumnValues[columnName] and $scope.columnStringMatc h[columnName]
667 * this columnValue are showing, and update the visible results. 705 * so that ONLY entries with this columnValue are showing, and update the vi sible results.
706 * (We update both of those, so we cover both freeform and checkbox filtered columns.)
668 * 707 *
669 * @param columnName 708 * @param columnName
670 * @param columnValue 709 * @param columnValue
671 */ 710 */
672 $scope.showOnlyColumnValue = function(columnName, columnValue) { 711 $scope.showOnlyColumnValue = function(columnName, columnValue) {
712 $scope.columnStringMatch[columnName] = columnValue;
673 $scope.showingColumnValues[columnName] = {}; 713 $scope.showingColumnValues[columnName] = {};
674 $scope.toggleValueInSet(columnValue, $scope.showingColumnValues[columnName ]); 714 $scope.toggleValueInSet(columnValue, $scope.showingColumnValues[columnName ]);
675 $scope.updateResults(); 715 $scope.updateResults();
676 } 716 }
677 717
678 /** 718 /**
679 * Update $scope.showingColumnValues[columnName] so that ALL entries are 719 * Update $scope.showingColumnValues[columnName] and $scope.columnStringMatc h[columnName]
680 * showing, and update the visible results. 720 * so that ALL entries are showing, and update the visible results.
721 * (We update both of those, so we cover both freeform and checkbox filtered columns.)
681 * 722 *
682 * @param columnName 723 * @param columnName
683 */ 724 */
684 $scope.showAllColumnValues = function(columnName) { 725 $scope.showAllColumnValues = function(columnName) {
726 $scope.columnStringMatch[columnName] = "";
685 $scope.showingColumnValues[columnName] = {}; 727 $scope.showingColumnValues[columnName] = {};
686 $scope.toggleValuesInSet($scope.allColumnValues[columnName], 728 $scope.toggleValuesInSet($scope.allColumnValues[columnName],
687 $scope.showingColumnValues[columnName]); 729 $scope.showingColumnValues[columnName]);
688 $scope.updateResults(); 730 $scope.updateResults();
689 } 731 }
690 732
691 733
692 // 734 //
693 // Operations for sending info back to the server. 735 // Operations for sending info back to the server.
694 // 736 //
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 */ 1017 */
976 $scope.getImageDiffRelativeUrl = function(imagePair) { 1018 $scope.getImageDiffRelativeUrl = function(imagePair) {
977 var before = 1019 var before =
978 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_A_URL] + "-vs-" + 1020 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_A_URL] + "-vs-" +
979 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL]; 1021 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL];
980 return before.replace(/[^\w\-]/g, "_") + ".png"; 1022 return before.replace(/[^\w\-]/g, "_") + ".png";
981 } 1023 }
982 1024
983 } 1025 }
984 ); 1026 );
OLDNEW
« no previous file with comments | « gm/rebaseline_server/static/constants.js ('k') | gm/rebaseline_server/static/view.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698