From c99992f85f1749e444298989a499eea254c4dae6 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Tue, 12 Jun 2007 16:16:49 +0000 Subject: [PATCH] Be a bit more intelligent when trying to update the arguments on a link. --- app/views/layouts/site.rhtml | 4 +-- public/javascripts/site.js | 47 ++++++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/app/views/layouts/site.rhtml b/app/views/layouts/site.rhtml index b34900f7b..8d0559772 100644 --- a/app/views/layouts/site.rhtml +++ b/app/views/layouts/site.rhtml @@ -25,8 +25,8 @@ <% if @user %> - Welcome, <%= link_to @user.display_name, {:controller => 'user', :action => 'view', :display_name => @user.display_name}, {:id => 'loginanchor'}%> | - <%= link_to 'logout', {:controller => 'user', :action => 'logout', :referer => request.request_uri}, {:id => 'loginanchor'}%> + Welcome, <%= link_to @user.display_name, {:controller => 'user', :action => 'view', :display_name => @user.display_name}%> | + <%= link_to 'logout', {:controller => 'user', :action => 'logout', :referer => request.request_uri}, {:id => 'logoutanchor'}%> <% else %> <%= link_to 'log in', {:controller => 'user', :action => 'login', :referer => request.request_uri}, {:id => 'loginanchor'}%> | <%= link_to 'sign up', {:controller => 'user', :action => 'new'}, {:id => 'registeranchor'} %> diff --git a/public/javascripts/site.js b/public/javascripts/site.js index e7ef320bc..0d37d99cc 100644 --- a/public/javascripts/site.js +++ b/public/javascripts/site.js @@ -12,13 +12,21 @@ function updatelinks(lon,lat,zoom) { for (anchor in links) { node = document.getElementById(anchor); if (! node) { continue; } - node.href = links[anchor] + "?lat=" + lat + "&lon=" + lon + "&zoom=" + zoom; + var args = getArgs(node.href); + args["lat"] = lat; + args["lon"] = lon; + args["zoom"] = zoom; + node.href = setArgs(node.href, args); } node = document.getElementById("editanchor"); if (node) { if ( zoom >= 14) { - node.href = '/edit.html?lat=' + lat + '&lon=' + lon + "&zoom=" + zoom; + var args = getArgs(node.href); + args.lat = lat; + args.lon = lon; + args.zoom = zoom; + node.href = setArgs(node.href, args); node.style.fontStyle = 'normal'; } else { node.href = 'javascript:alert("zoom in to edit map");'; @@ -26,3 +34,38 @@ function updatelinks(lon,lat,zoom) { } } } + +function getArgs(url) { + var args = new Object(); + var querystart = url.indexOf("?"); + + if (querystart >= 0) { + var querystring = url.substring(querystart + 1); + var queryitems = querystring.split("&"); + + for (var i = 0; i < queryitems.length; i++) { + if (match = queryitems[i].match(/^(.*)=(.*)$/)) { + args[unescape(match[1])] = unescape(match[2]); + } else { + args[unescape(queryitems[i])] = null + } + } + } + + return args; +} + +function setArgs(url, args) { + var queryitems = new Array(); + + for (arg in args) + { + if (args[arg] == null) { + queryitems.push(escape(arg)); + } else { + queryitems.push(escape(arg) + "=" + escape(args[arg])); + } + } + + return url.replace(/\?.*$/, "") + "?" + queryitems.join("&"); +} -- 2.43.2