| Index: gm/rebaseline_server/static/loader.js
|
| ===================================================================
|
| --- gm/rebaseline_server/static/loader.js (revision 11972)
|
| +++ gm/rebaseline_server/static/loader.js (working copy)
|
| @@ -17,7 +17,7 @@
|
| 'removeHiddenItems',
|
| function() {
|
| return function(unfilteredItems, hiddenResultTypes, hiddenConfigs,
|
| - viewingTab) {
|
| + builderSubstring, testSubstring, viewingTab) {
|
| var filteredItems = [];
|
| for (var i = 0; i < unfilteredItems.length; i++) {
|
| var item = unfilteredItems[i];
|
| @@ -26,6 +26,8 @@
|
| // Besides, I don't think we have access to $scope in here...
|
| if (!(true == hiddenResultTypes[item.resultType]) &&
|
| !(true == hiddenConfigs[item.config]) &&
|
| + !(-1 == item.builder.indexOf(builderSubstring)) &&
|
| + !(-1 == item.test.indexOf(testSubstring)) &&
|
| (viewingTab == item.tab)) {
|
| filteredItems.push(item);
|
| }
|
| @@ -99,8 +101,15 @@
|
| 'no-comparison': true,
|
| 'succeeded': true,
|
| };
|
| + $scope.allResultTypes = Object.keys(data.categories['resultType']);
|
| $scope.hiddenConfigs = {};
|
| + $scope.allConfigs = Object.keys(data.categories['config']);
|
|
|
| + // Associative array of partial string matches per category.
|
| + $scope.categoryValueMatch = {};
|
| + $scope.categoryValueMatch.builder = "";
|
| + $scope.categoryValueMatch.test = "";
|
| +
|
| $scope.updateResults();
|
| $scope.loadingMessage = "";
|
| $scope.windowTitle = "Current GM Results";
|
| @@ -239,6 +248,8 @@
|
| $scope.testData,
|
| $scope.hiddenResultTypes,
|
| $scope.hiddenConfigs,
|
| + $scope.categoryValueMatch.builder,
|
| + $scope.categoryValueMatch.test,
|
| $scope.viewingTab
|
| ),
|
| $scope.sortColumn);
|
| @@ -269,7 +280,47 @@
|
| $scope.updateResults();
|
| }
|
|
|
| + /**
|
| + * Set $scope.categoryValueMatch[name] = value, and update results.
|
| + *
|
| + * @param name
|
| + * @param value
|
| + */
|
| + $scope.setCategoryValueMatch = function(name, value) {
|
| + $scope.categoryValueMatch[name] = value;
|
| + $scope.updateResults();
|
| + }
|
|
|
| + /**
|
| + * Update $scope.hiddenResultTypes so that ONLY this resultType is showing,
|
| + * and update the visible results.
|
| + *
|
| + * @param resultType
|
| + */
|
| + $scope.showOnlyResultType = function(resultType) {
|
| + $scope.hiddenResultTypes = {};
|
| + // TODO(epoger): Maybe change $scope.allResultTypes to be a Set like
|
| + // $scope.hiddenResultTypes (rather than an array), so this operation is
|
| + // simpler (just assign or add allResultTypes to hiddenResultTypes).
|
| + $scope.toggleValuesInSet($scope.allResultTypes, $scope.hiddenResultTypes);
|
| + $scope.toggleValueInSet(resultType, $scope.hiddenResultTypes);
|
| + $scope.updateResults();
|
| + }
|
| +
|
| + /**
|
| + * Update $scope.hiddenConfigs so that ONLY this config is showing,
|
| + * and update the visible results.
|
| + *
|
| + * @param config
|
| + */
|
| + $scope.showOnlyConfig = function(config) {
|
| + $scope.hiddenConfigs = {};
|
| + $scope.toggleValuesInSet($scope.allConfigs, $scope.hiddenConfigs);
|
| + $scope.toggleValueInSet(config, $scope.hiddenConfigs);
|
| + $scope.updateResults();
|
| + }
|
| +
|
| +
|
| //
|
| // Operations for sending info back to the server.
|
| //
|
| @@ -392,7 +443,20 @@
|
| }
|
| }
|
|
|
| + /**
|
| + * For each value in valueArray, call toggleValueInSet(value, set).
|
| + *
|
| + * @param valueArray
|
| + * @param set
|
| + */
|
| + $scope.toggleValuesInSet = function(valueArray, set) {
|
| + var arrayLength = valueArray.length;
|
| + for (var i = 0; i < arrayLength; i++) {
|
| + $scope.toggleValueInSet(valueArray[i], set);
|
| + }
|
| + }
|
|
|
| +
|
| //
|
| // Array operations; similar to our Set operations, but operate on a
|
| // Javascript Array so we *can* easily get a list of all values in the Set.
|
|
|