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

Unified Diff: gm/rebaseline_server/static/loader.js

Issue 104623003: rebaseline_server: add "deep linking" to allow bookmarking of particular views (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: rebase Created 7 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gm/rebaseline_server/static/index.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/rebaseline_server/static/loader.js
===================================================================
--- gm/rebaseline_server/static/loader.js (revision 12512)
+++ gm/rebaseline_server/static/loader.js (working copy)
@@ -42,8 +42,8 @@
'Loader.Controller',
function($scope, $http, $filter, $location, $timeout) {
$scope.windowTitle = "Loading GM Results...";
- var resultsToLoad = $location.search().resultsToLoad;
- $scope.loadingMessage = "Loading results of type '" + resultsToLoad +
+ $scope.resultsToLoad = $location.search().resultsToLoad;
+ $scope.loadingMessage = "Loading results of type '" + $scope.resultsToLoad +
"', please wait...";
/**
@@ -51,7 +51,7 @@
* Once the dictionary is loaded, unhide the page elements so they can
* render the data.
*/
- $http.get("/results/" + resultsToLoad).success(
+ $http.get("/results/" + $scope.resultsToLoad).success(
function(data, status, header, config) {
if (data.header.resultsStillLoading) {
$scope.loadingMessage =
@@ -118,6 +118,9 @@
$scope.categoryValueMatch.builder = "";
$scope.categoryValueMatch.test = "";
+ // If any defaults were overridden in the URL, get them now.
+ $scope.queryParameters.load();
+
$scope.updateResults();
$scope.loadingMessage = "";
$scope.windowTitle = "Current GM Results";
@@ -126,7 +129,7 @@
).error(
function(data, status, header, config) {
$scope.loadingMessage = "Failed to load results of type '"
- + resultsToLoad + "'";
+ + $scope.resultsToLoad + "'";
$scope.windowTitle = "Failed to Load GM Results";
}
);
@@ -220,6 +223,93 @@
//
+ // $scope.queryParameters:
+ // Transfer parameter values between $scope and the URL query string.
+ //
+ $scope.queryParameters = {};
+
+ // load and save functions for parameters of each type
+ // (load a parameter value into $scope from nameValuePairs,
+ // save a parameter value from $scope into nameValuePairs)
+ $scope.queryParameters.copiers = {
+ 'simple': {
+ 'load': function(nameValuePairs, name) {
+ var value = nameValuePairs[name];
+ if (value) {
+ $scope[name] = value;
+ }
+ },
+ 'save': function(nameValuePairs, name) {
+ nameValuePairs[name] = $scope[name];
+ }
+ },
+
+ 'categoryValueMatch': {
+ 'load': function(nameValuePairs, name) {
+ var value = nameValuePairs[name];
+ if (value) {
+ $scope.categoryValueMatch[name] = value;
+ }
+ },
+ 'save': function(nameValuePairs, name) {
+ nameValuePairs[name] = $scope.categoryValueMatch[name];
+ }
+ },
+
+ 'set': {
+ 'load': function(nameValuePairs, name) {
+ var value = nameValuePairs[name];
+ if (value) {
+ var valueArray = value.split(',');
+ $scope[name] = {};
+ $scope.toggleValuesInSet(valueArray, $scope[name]);
+ }
+ },
+ 'save': function(nameValuePairs, name) {
+ nameValuePairs[name] = Object.keys($scope[name]).join(',');
+ }
+ },
+
+ };
+
+ // parameter name -> copier objects to load/save parameter value
+ $scope.queryParameters.map = {
+ 'resultsToLoad': $scope.queryParameters.copiers.simple,
+ 'displayLimitPending': $scope.queryParameters.copiers.simple,
+ 'imageSizePending': $scope.queryParameters.copiers.simple,
+ 'sortColumn': $scope.queryParameters.copiers.simple,
+
+ 'builder': $scope.queryParameters.copiers.categoryValueMatch,
+ 'test': $scope.queryParameters.copiers.categoryValueMatch,
+
+ 'hiddenResultTypes': $scope.queryParameters.copiers.set,
+ 'hiddenConfigs': $scope.queryParameters.copiers.set,
+ };
+
+ // Loads all parameters into $scope from the URL query string;
+ // any which are not found within the URL will keep their current value.
+ $scope.queryParameters.load = function() {
+ var nameValuePairs = $location.search();
+ angular.forEach($scope.queryParameters.map,
+ function(copier, paramName) {
+ copier.load(nameValuePairs, paramName);
+ }
+ );
+ };
+
+ // Saves all parameters from $scope into the URL query string.
+ $scope.queryParameters.save = function() {
+ var nameValuePairs = {};
+ angular.forEach($scope.queryParameters.map,
+ function(copier, paramName) {
+ copier.save(nameValuePairs, paramName);
+ }
+ );
+ $location.search(nameValuePairs);
+ };
+
+
+ //
// updateResults() and friends.
//
@@ -241,7 +331,9 @@
}
/**
- * Update the displayed results, based on filters/settings.
+ * Update the displayed results, based on filters/settings,
+ * and call $scope.queryParameters.save() so that the new filter results
+ * can be bookmarked.
*/
$scope.updateResults = function() {
$scope.displayLimit = $scope.displayLimitPending;
@@ -284,6 +376,7 @@
}
$scope.imageSize = $scope.imageSizePending;
$scope.setUpdatesPending(false);
+ $scope.queryParameters.save();
}
/**
« no previous file with comments | « gm/rebaseline_server/static/index.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698