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 17 matching lines...) Expand all Loading... |
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, hiddenResultTypes, hiddenConfigs, |
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__EXTRA_COLUMN_VALUES]; | 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 (!(true == hiddenResultTypes[extraColumnValues[ |
43 constants.KEY__EXTRACOLUMN__RESULT_TYPE]]) && | 43 constants.KEY__EXTRACOLUMNS__RESULT_TYPE]]) && |
44 !(true == hiddenConfigs[extraColumnValues[ | 44 !(true == hiddenConfigs[extraColumnValues[ |
45 constants.KEY__EXTRACOLUMN__CONFIG]]) && | 45 constants.KEY__EXTRACOLUMNS__CONFIG]]) && |
46 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMN__BUILDER] | 46 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMNS__BUILDER] |
47 .indexOf(builderSubstring)) && | 47 .indexOf(builderSubstring)) && |
48 !(-1 == extraColumnValues[constants.KEY__EXTRACOLUMN__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 }; |
56 } | 56 } |
57 ); | 57 ); |
58 | 58 |
59 | 59 |
60 Loader.controller( | 60 Loader.controller( |
61 'Loader.Controller', | 61 'Loader.Controller', |
62 function($scope, $http, $filter, $location, $log, $timeout, constants) { | 62 function($scope, $http, $filter, $location, $log, $timeout, constants) { |
63 $scope.constants = constants; | 63 $scope.constants = constants; |
64 $scope.windowTitle = "Loading GM Results..."; | 64 $scope.windowTitle = "Loading GM Results..."; |
65 $scope.resultsToLoad = $location.search().resultsToLoad; | 65 $scope.resultsToLoad = $location.search().resultsToLoad; |
66 $scope.loadingMessage = "please wait..."; | 66 $scope.loadingMessage = "please wait..."; |
67 | 67 |
68 /** | 68 /** |
69 * On initial page load, load a full dictionary of results. | 69 * On initial page load, load a full dictionary of results. |
70 * Once the dictionary is loaded, unhide the page elements so they can | 70 * Once the dictionary is loaded, unhide the page elements so they can |
71 * render the data. | 71 * render the data. |
72 */ | 72 */ |
73 $http.get($scope.resultsToLoad).success( | 73 $http.get($scope.resultsToLoad).success( |
74 function(data, status, header, config) { | 74 function(data, status, header, config) { |
75 var dataHeader = data[constants.KEY__HEADER]; | 75 var dataHeader = data[constants.KEY__ROOT__HEADER]; |
76 if (dataHeader[constants.KEY__HEADER__SCHEMA_VERSION] != | 76 if (dataHeader[constants.KEY__HEADER__SCHEMA_VERSION] != |
77 constants.REBASELINE_SERVER_SCHEMA_VERSION_NUMBER) { | 77 constants.VALUE__HEADER__SCHEMA_VERSION) { |
78 $scope.loadingMessage = "ERROR: Got JSON file with schema version " | 78 $scope.loadingMessage = "ERROR: Got JSON file with schema version " |
79 + dataHeader[constants.KEY__HEADER__SCHEMA_VERSION] | 79 + dataHeader[constants.KEY__HEADER__SCHEMA_VERSION] |
80 + " but expected schema version " | 80 + " but expected schema version " |
81 + constants.REBASELINE_SERVER_SCHEMA_VERSION_NUMBER; | 81 + constants.VALUE__HEADER__SCHEMA_VERSION; |
82 } else if (dataHeader[constants.KEY__HEADER__IS_STILL_LOADING]) { | 82 } else if (dataHeader[constants.KEY__HEADER__IS_STILL_LOADING]) { |
83 // Apply the server's requested reload delay to local time, | 83 // Apply the server's requested reload delay to local time, |
84 // so we will wait the right number of seconds regardless of clock | 84 // so we will wait the right number of seconds regardless of clock |
85 // skew between client and server. | 85 // skew between client and server. |
86 var reloadDelayInSeconds = | 86 var reloadDelayInSeconds = |
87 dataHeader[constants.KEY__HEADER__TIME_NEXT_UPDATE_AVAILABLE] - | 87 dataHeader[constants.KEY__HEADER__TIME_NEXT_UPDATE_AVAILABLE] - |
88 dataHeader[constants.KEY__HEADER__TIME_UPDATED]; | 88 dataHeader[constants.KEY__HEADER__TIME_UPDATED]; |
89 var timeNow = new Date().getTime(); | 89 var timeNow = new Date().getTime(); |
90 var timeToReload = timeNow + reloadDelayInSeconds * 1000; | 90 var timeToReload = timeNow + reloadDelayInSeconds * 1000; |
91 $scope.loadingMessage = | 91 $scope.loadingMessage = |
92 "server is still loading results; will retry at " + | 92 "server is still loading results; will retry at " + |
93 $scope.localTimeString(timeToReload / 1000); | 93 $scope.localTimeString(timeToReload / 1000); |
94 $timeout( | 94 $timeout( |
95 function(){location.reload();}, | 95 function(){location.reload();}, |
96 timeToReload - timeNow); | 96 timeToReload - timeNow); |
97 } else { | 97 } else { |
98 $scope.loadingMessage = "processing data, please wait..."; | 98 $scope.loadingMessage = "processing data, please wait..."; |
99 | 99 |
100 $scope.header = dataHeader; | 100 $scope.header = dataHeader; |
101 $scope.extraColumnHeaders = data[constants.KEY__EXTRACOLUMNHEADERS]; | 101 $scope.extraColumnHeaders = data[constants.KEY__ROOT__EXTRACOLUMNHEADE
RS]; |
102 $scope.imagePairs = data[constants.KEY__IMAGEPAIRS]; | 102 $scope.imagePairs = data[constants.KEY__ROOT__IMAGEPAIRS]; |
103 $scope.imageSets = data[constants.KEY__IMAGESETS]; | 103 $scope.imageSets = data[constants.KEY__ROOT__IMAGESETS]; |
104 $scope.sortColumnSubdict = constants.KEY__DIFFERENCE_DATA; | 104 $scope.sortColumnSubdict = constants.KEY__IMAGEPAIRS__DIFFERENCES; |
105 $scope.sortColumnKey = constants.KEY__DIFFERENCE_DATA__PERCEPTUAL_DIFF
; | 105 $scope.sortColumnKey = constants.KEY__DIFFERENCES__PERCEPTUAL_DIFF; |
106 | 106 |
107 $scope.showSubmitAdvancedSettings = false; | 107 $scope.showSubmitAdvancedSettings = false; |
108 $scope.submitAdvancedSettings = {}; | 108 $scope.submitAdvancedSettings = {}; |
109 $scope.submitAdvancedSettings[ | 109 $scope.submitAdvancedSettings[ |
110 constants.KEY__EXPECTATIONS__REVIEWED] = true; | 110 constants.KEY__EXPECTATIONS__REVIEWED] = true; |
111 $scope.submitAdvancedSettings[ | 111 $scope.submitAdvancedSettings[ |
112 constants.KEY__EXPECTATIONS__IGNOREFAILURE] = false; | 112 constants.KEY__EXPECTATIONS__IGNOREFAILURE] = false; |
113 $scope.submitAdvancedSettings['bug'] = ''; | 113 $scope.submitAdvancedSettings['bug'] = ''; |
114 | 114 |
115 // Create the list of tabs (lists into which the user can file each | 115 // Create the list of tabs (lists into which the user can file each |
(...skipping 26 matching lines...) Expand all Loading... |
142 | 142 |
143 // Sets within which the user can toggle individual elements. | 143 // Sets within which the user can toggle individual elements. |
144 $scope.hiddenResultTypes = {}; | 144 $scope.hiddenResultTypes = {}; |
145 $scope.hiddenResultTypes[ | 145 $scope.hiddenResultTypes[ |
146 constants.KEY__RESULT_TYPE__FAILUREIGNORED] = true; | 146 constants.KEY__RESULT_TYPE__FAILUREIGNORED] = true; |
147 $scope.hiddenResultTypes[ | 147 $scope.hiddenResultTypes[ |
148 constants.KEY__RESULT_TYPE__NOCOMPARISON] = true; | 148 constants.KEY__RESULT_TYPE__NOCOMPARISON] = true; |
149 $scope.hiddenResultTypes[ | 149 $scope.hiddenResultTypes[ |
150 constants.KEY__RESULT_TYPE__SUCCEEDED] = true; | 150 constants.KEY__RESULT_TYPE__SUCCEEDED] = true; |
151 $scope.allResultTypes = $scope.columnSliceOf2DArray( | 151 $scope.allResultTypes = $scope.columnSliceOf2DArray( |
152 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMN__RESULT_TYPE] | 152 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMNS__RESULT_TYPE
] |
153 [constants.KEY__EXTRACOLUMNHEADERS__VALUE
S_AND_COUNTS], | 153 [constants.KEY__EXTRACOLUMNHEADERS__VALUE
S_AND_COUNTS], |
154 0); | 154 0); |
155 $scope.hiddenConfigs = {}; | 155 $scope.hiddenConfigs = {}; |
156 $scope.allConfigs = $scope.columnSliceOf2DArray( | 156 $scope.allConfigs = $scope.columnSliceOf2DArray( |
157 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMN__CONFIG] | 157 $scope.extraColumnHeaders[constants.KEY__EXTRACOLUMNS__CONFIG] |
158 [constants.KEY__EXTRACOLUMNHEADERS__VALUE
S_AND_COUNTS], | 158 [constants.KEY__EXTRACOLUMNHEADERS__VALUE
S_AND_COUNTS], |
159 0); | 159 0); |
160 | 160 |
161 // Associative array of partial string matches per category. | 161 // Associative array of partial string matches per category. |
162 $scope.categoryValueMatch = {}; | 162 $scope.categoryValueMatch = {}; |
163 $scope.categoryValueMatch.builder = ""; | 163 $scope.categoryValueMatch.builder = ""; |
164 $scope.categoryValueMatch.test = ""; | 164 $scope.categoryValueMatch.test = ""; |
165 | 165 |
166 // If any defaults were overridden in the URL, get them now. | 166 // If any defaults were overridden in the URL, get them now. |
167 $scope.queryParameters.load(); | 167 $scope.queryParameters.load(); |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 'resultsToLoad': $scope.queryParameters.copiers.simple, | 335 'resultsToLoad': $scope.queryParameters.copiers.simple, |
336 'displayLimitPending': $scope.queryParameters.copiers.simple, | 336 'displayLimitPending': $scope.queryParameters.copiers.simple, |
337 'showThumbnailsPending': $scope.queryParameters.copiers.simple, | 337 'showThumbnailsPending': $scope.queryParameters.copiers.simple, |
338 'imageSizePending': $scope.queryParameters.copiers.simple, | 338 'imageSizePending': $scope.queryParameters.copiers.simple, |
339 'sortColumnSubdict': $scope.queryParameters.copiers.simple, | 339 'sortColumnSubdict': $scope.queryParameters.copiers.simple, |
340 'sortColumnKey': $scope.queryParameters.copiers.simple, | 340 'sortColumnKey': $scope.queryParameters.copiers.simple, |
341 | 341 |
342 'hiddenResultTypes': $scope.queryParameters.copiers.set, | 342 'hiddenResultTypes': $scope.queryParameters.copiers.set, |
343 'hiddenConfigs': $scope.queryParameters.copiers.set, | 343 'hiddenConfigs': $scope.queryParameters.copiers.set, |
344 }; | 344 }; |
345 $scope.queryParameters.map[constants.KEY__EXTRACOLUMN__BUILDER] = | 345 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__BUILDER] = |
346 $scope.queryParameters.copiers.categoryValueMatch; | 346 $scope.queryParameters.copiers.categoryValueMatch; |
347 $scope.queryParameters.map[constants.KEY__EXTRACOLUMN__TEST] = | 347 $scope.queryParameters.map[constants.KEY__EXTRACOLUMNS__TEST] = |
348 $scope.queryParameters.copiers.categoryValueMatch; | 348 $scope.queryParameters.copiers.categoryValueMatch; |
349 | 349 |
350 // Loads all parameters into $scope from the URL query string; | 350 // Loads all parameters into $scope from the URL query string; |
351 // any which are not found within the URL will keep their current value. | 351 // any which are not found within the URL will keep their current value. |
352 $scope.queryParameters.load = function() { | 352 $scope.queryParameters.load = function() { |
353 var nameValuePairs = $location.search(); | 353 var nameValuePairs = $location.search(); |
354 angular.forEach($scope.queryParameters.map, | 354 angular.forEach($scope.queryParameters.map, |
355 function(copier, paramName) { | 355 function(copier, paramName) { |
356 copier.load(nameValuePairs, paramName); | 356 copier.load(nameValuePairs, paramName); |
357 } | 357 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 // another copy of the array. Is there a way we can filter out | 404 // another copy of the array. Is there a way we can filter out |
405 // the imagePairs as they are displayed, rather than storing multiple | 405 // the imagePairs as they are displayed, rather than storing multiple |
406 // array copies? (For better performance.) | 406 // array copies? (For better performance.) |
407 | 407 |
408 if ($scope.viewingTab == $scope.defaultTab) { | 408 if ($scope.viewingTab == $scope.defaultTab) { |
409 | 409 |
410 // TODO(epoger): Until we allow the user to reverse sort order, | 410 // TODO(epoger): Until we allow the user to reverse sort order, |
411 // there are certain columns we want to sort in a different order. | 411 // there are certain columns we want to sort in a different order. |
412 var doReverse = ( | 412 var doReverse = ( |
413 ($scope.sortColumnKey == | 413 ($scope.sortColumnKey == |
414 constants.KEY__DIFFERENCE_DATA__PERCENT_DIFF_PIXELS) || | 414 constants.KEY__DIFFERENCES__PERCENT_DIFF_PIXELS) || |
415 ($scope.sortColumnKey == | 415 ($scope.sortColumnKey == |
416 constants.KEY__DIFFERENCE_DATA__PERCEPTUAL_DIFF)); | 416 constants.KEY__DIFFERENCES__PERCEPTUAL_DIFF)); |
417 | 417 |
418 $scope.filteredImagePairs = | 418 $scope.filteredImagePairs = |
419 $filter("orderBy")( | 419 $filter("orderBy")( |
420 $filter("removeHiddenImagePairs")( | 420 $filter("removeHiddenImagePairs")( |
421 $scope.imagePairs, | 421 $scope.imagePairs, |
422 $scope.hiddenResultTypes, | 422 $scope.hiddenResultTypes, |
423 $scope.hiddenConfigs, | 423 $scope.hiddenConfigs, |
424 $scope.categoryValueMatch.builder, | 424 $scope.categoryValueMatch.builder, |
425 $scope.categoryValueMatch.test, | 425 $scope.categoryValueMatch.test, |
426 $scope.viewingTab | 426 $scope.viewingTab |
(...skipping 23 matching lines...) Expand all Loading... |
450 * after updateResults(). | 450 * after updateResults(). |
451 */ | 451 */ |
452 $scope.resultsUpdatedCallback = function() { | 452 $scope.resultsUpdatedCallback = function() { |
453 $scope.renderEndTime = window.performance.now(); | 453 $scope.renderEndTime = window.performance.now(); |
454 $log.debug("renderEndTime: " + $scope.renderEndTime); | 454 $log.debug("renderEndTime: " + $scope.renderEndTime); |
455 } | 455 } |
456 | 456 |
457 /** | 457 /** |
458 * Re-sort the displayed results. | 458 * Re-sort the displayed results. |
459 * | 459 * |
460 * @param subdict (string): which subdictionary | 460 * @param subdict (string): which KEY__IMAGEPAIRS__* subdictionary |
461 * (constants.KEY__DIFFERENCE_DATA, constants.KEY__EXPECTATIONS_DATA, | 461 * the sort column key is within |
462 * constants.KEY__EXTRA_COLUMN_VALUES) the sort column key is within | |
463 * @param key (string): sort by value associated with this key in subdict | 462 * @param key (string): sort by value associated with this key in subdict |
464 */ | 463 */ |
465 $scope.sortResultsBy = function(subdict, key) { | 464 $scope.sortResultsBy = function(subdict, key) { |
466 $scope.sortColumnSubdict = subdict; | 465 $scope.sortColumnSubdict = subdict; |
467 $scope.sortColumnKey = key; | 466 $scope.sortColumnKey = key; |
468 $scope.updateResults(); | 467 $scope.updateResults(); |
469 } | 468 } |
470 | 469 |
471 /** | 470 /** |
472 * For a particular ImagePair, return the value of the column we are | 471 * For a particular ImagePair, return the value of the column we are |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 // rebaselining failures in alternative renderModes, but it does work. | 569 // rebaselining failures in alternative renderModes, but it does work. |
571 // For a better solution, see | 570 // For a better solution, see |
572 // https://code.google.com/p/skia/issues/detail?id=1748 ('gm: add new | 571 // https://code.google.com/p/skia/issues/detail?id=1748 ('gm: add new |
573 // result type, RenderModeMismatch') | 572 // result type, RenderModeMismatch') |
574 var encounteredComparisonConfig = false; | 573 var encounteredComparisonConfig = false; |
575 | 574 |
576 var updatedExpectations = []; | 575 var updatedExpectations = []; |
577 for (var i = 0; i < imagePairsSubset.length; i++) { | 576 for (var i = 0; i < imagePairsSubset.length; i++) { |
578 var imagePair = imagePairsSubset[i]; | 577 var imagePair = imagePairsSubset[i]; |
579 var updatedExpectation = {}; | 578 var updatedExpectation = {}; |
580 updatedExpectation[constants.KEY__EXPECTATIONS_DATA] = | 579 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] = |
581 imagePair[constants.KEY__EXPECTATIONS_DATA]; | 580 imagePair[constants.KEY__IMAGEPAIRS__EXPECTATIONS]; |
582 updatedExpectation[constants.KEY__EXTRA_COLUMN_VALUES] = | 581 updatedExpectation[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS] = |
583 imagePair[constants.KEY__EXTRA_COLUMN_VALUES]; | 582 imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS]; |
584 updatedExpectation[constants.KEY__NEW_IMAGE_URL] = | 583 // IMAGE_B_URL contains the actual image (which is now the expectation) |
585 imagePair[constants.KEY__IMAGE_B_URL]; | 584 updatedExpectation[constants.KEY__IMAGEPAIRS__IMAGE_B_URL] = |
586 if (0 == updatedExpectation[constants.KEY__EXTRA_COLUMN_VALUES] | 585 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL]; |
587 [constants.KEY__EXTRACOLUMN__CONFIG] | 586 if (0 == updatedExpectation[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS] |
| 587 [constants.KEY__EXTRACOLUMNS__CONFIG] |
588 .indexOf('comparison-')) { | 588 .indexOf('comparison-')) { |
589 encounteredComparisonConfig = true; | 589 encounteredComparisonConfig = true; |
590 } | 590 } |
591 | 591 |
592 // Advanced settings... | 592 // Advanced settings... |
593 if (null == updatedExpectation[constants.KEY__EXPECTATIONS_DATA]) { | 593 if (null == updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS])
{ |
594 updatedExpectation[constants.KEY__EXPECTATIONS_DATA] = {}; | 594 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] = {}; |
595 } | 595 } |
596 updatedExpectation[constants.KEY__EXPECTATIONS_DATA] | 596 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] |
597 [constants.KEY__EXPECTATIONS__REVIEWED] = | 597 [constants.KEY__EXPECTATIONS__REVIEWED] = |
598 $scope.submitAdvancedSettings[ | 598 $scope.submitAdvancedSettings[ |
599 constants.KEY__EXPECTATIONS__REVIEWED]; | 599 constants.KEY__EXPECTATIONS__REVIEWED]; |
600 if (true == $scope.submitAdvancedSettings[ | 600 if (true == $scope.submitAdvancedSettings[ |
601 constants.KEY__EXPECTATIONS__IGNOREFAILURE]) { | 601 constants.KEY__EXPECTATIONS__IGNOREFAILURE]) { |
602 // if it's false, don't send it at all (just keep the default) | 602 // if it's false, don't send it at all (just keep the default) |
603 updatedExpectation[constants.KEY__EXPECTATIONS_DATA] | 603 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] |
604 [constants.KEY__EXPECTATIONS__IGNOREFAILURE] = true; | 604 [constants.KEY__EXPECTATIONS__IGNOREFAILURE] = true; |
605 } | 605 } |
606 updatedExpectation[constants.KEY__EXPECTATIONS_DATA] | 606 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] |
607 [constants.KEY__EXPECTATIONS__BUGS] = bugs; | 607 [constants.KEY__EXPECTATIONS__BUGS] = bugs; |
608 | 608 |
609 updatedExpectations.push(updatedExpectation); | 609 updatedExpectations.push(updatedExpectation); |
610 } | 610 } |
611 if (encounteredComparisonConfig) { | 611 if (encounteredComparisonConfig) { |
612 alert("Approval failed -- you cannot approve results with config " + | 612 alert("Approval failed -- you cannot approve results with config " + |
613 "type comparison-*"); | 613 "type comparison-*"); |
614 $scope.submitPending = false; | 614 $scope.submitPending = false; |
615 return; | 615 return; |
616 } | 616 } |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
820 * Depending on which diff this is (whitediffs, pixeldiffs, etc.) this | 820 * Depending on which diff this is (whitediffs, pixeldiffs, etc.) this |
821 * will be relative to different base URLs. | 821 * will be relative to different base URLs. |
822 * | 822 * |
823 * We must keep this function in sync with _get_difference_locator() in | 823 * We must keep this function in sync with _get_difference_locator() in |
824 * ../imagediffdb.py | 824 * ../imagediffdb.py |
825 * | 825 * |
826 * @param imagePair: ImagePair to generate image diff URL for | 826 * @param imagePair: ImagePair to generate image diff URL for |
827 */ | 827 */ |
828 $scope.getImageDiffRelativeUrl = function(imagePair) { | 828 $scope.getImageDiffRelativeUrl = function(imagePair) { |
829 var before = | 829 var before = |
830 imagePair[constants.KEY__IMAGE_A_URL] + "-vs-" + | 830 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_A_URL] + "-vs-" + |
831 imagePair[constants.KEY__IMAGE_B_URL]; | 831 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL]; |
832 return before.replace(/[^\w\-]/g, "_") + ".png"; | 832 return before.replace(/[^\w\-]/g, "_") + ".png"; |
833 } | 833 } |
834 | 834 |
835 } | 835 } |
836 ); | 836 ); |
OLD | NEW |