Chromium Code Reviews| Index: gm/rebaseline_server/static/loader.js |
| =================================================================== |
| --- gm/rebaseline_server/static/loader.js (revision 11868) |
| +++ gm/rebaseline_server/static/loader.js (working copy) |
| @@ -15,12 +15,14 @@ |
| Loader.filter( |
| 'removeHiddenItems', |
| function() { |
| - return function(unfilteredItems, hiddenResultTypes, hiddenConfigs) { |
| + return function(unfilteredItems, hiddenResultTypes, hiddenConfigs, |
| + viewingTab) { |
| var filteredItems = []; |
| for (var i = 0; i < unfilteredItems.length; i++) { |
| var item = unfilteredItems[i]; |
| if (!(true == hiddenResultTypes[item.resultType]) && |
| - !(true == hiddenConfigs[item.config])) { |
| + !(true == hiddenConfigs[item.config]) && |
| + (viewingTab == item.tab)) { |
| filteredItems.push(item); |
| } |
| } |
| @@ -45,10 +47,24 @@ |
| $scope.categories = data.categories; |
| $scope.testData = data.testData; |
| $scope.sortColumn = 'test'; |
| - $scope.showTodos = true; |
| + $scope.showTodos = false; |
| + // Create the list of tabs (lists into which the user can file each |
| + // test). This may vary, depending on isEditable. |
| + $scope.tabs = [ |
| + 'Unfiled', 'Hidden' |
| + ]; |
| + if (data.header.isEditable) { |
| + $scope.tabs = $scope.tabs.concat( |
| + ['Pending Approval']); |
|
epoger
2013/10/19 01:15:56
So, if run without --editable, you still have two
|
| + } |
| + $scope.defaultTab = $scope.tabs[0]; |
| + $scope.viewingTab = $scope.defaultTab; |
| + |
| + // Add index and tab fields to all records. |
| for (var i = 0; i < $scope.testData.length; i++) { |
| $scope.testData[i].index = i; |
| + $scope.testData[i].tab = $scope.defaultTab; |
|
epoger
2013/10/19 01:15:56
Each test result belongs to a single tab.
|
| } |
| $scope.hiddenResultTypes = { |
| @@ -57,7 +73,7 @@ |
| 'succeeded': true, |
| }; |
| $scope.hiddenConfigs = {}; |
| - $scope.selectedItems = {}; |
| + $scope.selectedItems = []; |
| $scope.updateResults(); |
| $scope.loadingMessage = ""; |
| @@ -72,13 +88,14 @@ |
| ); |
| $scope.isItemSelected = function(index) { |
| - return (true == $scope.selectedItems[index]); |
| + return (-1 != $scope.selectedItems.indexOf(index)); |
|
epoger
2013/10/19 01:15:56
Maintaining $scope.isItemSelected as an array made
|
| } |
| $scope.toggleItemSelected = function(index) { |
| - if (true == $scope.selectedItems[index]) { |
| - delete $scope.selectedItems[index]; |
| + var i = $scope.selectedItems.indexOf(index); |
| + if (-1 == i) { |
| + $scope.selectedItems.push(index); |
| } else { |
| - $scope.selectedItems[index] = true; |
| + $scope.selectedItems.splice(i, 1); |
| } |
| // unlike other toggle methods below, does not set |
| // $scope.areUpdatesPending = true; |
| @@ -113,27 +130,58 @@ |
| $scope.areUpdatesPending = true; |
| } |
| + $scope.setViewingTab = function(tab) { |
| + $scope.viewingTab = tab; |
| + $scope.updateResults(); |
| + } |
| + |
| $scope.localTimeString = function(secondsPastEpoch) { |
| var d = new Date(secondsPastEpoch * 1000); |
| return d.toString(); |
| } |
| + $scope.moveSelectedItems = function() { |
| + var itemIndex; |
| + var selectedItemsLength = $scope.selectedItems.length; |
| + for (var i = 0; i < selectedItemsLength; i++) { |
| + itemIndex = $scope.selectedItems[i]; |
| + $scope.testData[itemIndex].tab = $scope.newTab; |
| + } |
| + $scope.selectedItems = []; |
| + $scope.updateResults(); |
| + } |
| + |
| $scope.updateResults = function() { |
| $scope.displayLimit = $scope.displayLimitPending; |
| // TODO(epoger): Every time we apply a filter, AngularJS creates |
| // another copy of the array. Is there a way we can filter out |
| // the items as they are displayed, rather than storing multiple |
| // array copies? (For better performance.) |
| - $scope.filteredTestData = |
| - $filter("orderBy")( |
| - $filter("removeHiddenItems")( |
| - $scope.testData, |
| - $scope.hiddenResultTypes, |
| - $scope.hiddenConfigs |
| - ), |
| - $scope.sortColumn); |
| - $scope.limitedTestData = $filter("limitTo")( |
| - $scope.filteredTestData, $scope.displayLimit); |
| + |
| + if ($scope.viewingTab == $scope.defaultTab) { |
| + $scope.filteredTestData = |
| + $filter("orderBy")( |
| + $filter("removeHiddenItems")( |
| + $scope.testData, |
| + $scope.hiddenResultTypes, |
| + $scope.hiddenConfigs, |
| + $scope.viewingTab |
| + ), |
| + $scope.sortColumn); |
| + $scope.limitedTestData = $filter("limitTo")( |
| + $scope.filteredTestData, $scope.displayLimit); |
| + } else { |
| + $scope.filteredTestData = |
| + $filter("orderBy")( |
| + $filter("filter")( |
|
epoger
2013/10/19 01:15:56
In the tabs other than "Unfiled", we don't allow t
|
| + $scope.testData, |
| + {tab: $scope.viewingTab}, |
| + true |
| + ), |
| + $scope.sortColumn); |
| + $scope.limitedTestData = $filter("limitTo")( |
| + $scope.filteredTestData, $scope.displayLimit); |
| + } |
| $scope.imageSize = $scope.imageSizePending; |
| $scope.areUpdatesPending = false; |
| } |