X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/2fad5f7c92055755e0a662ed22943b7d3f92e909..6d1167356221c518eb8f1f94745bb33908de826a:/public/javascripts/site.js diff --git a/public/javascripts/site.js b/public/javascripts/site.js index e7ef320bc..8f9d3a035 100644 --- a/public/javascripts/site.js +++ b/public/javascripts/site.js @@ -1,28 +1,134 @@ -function updatelinks(lon,lat,zoom) { - var links = new Array(); - links['viewanchor'] = '/index.html'; - //links['editanchor'] = 'edit.html'; - links['uploadanchor'] = '/traces'; - links['loginanchor'] = '/login.html'; - links['logoutanchor'] = '/logout.html'; - links['registeranchor'] = '/create-account.html'; - +//Called as the user scrolls/zooms around. +//Maniplate hrefs of the view tab and various other links +function updatelinks(lon,lat,zoom,layers,minlon,minlat,maxlon,maxlat) { + var decimals = Math.pow(10, Math.floor(zoom/3)); var node; - var anchor; - for (anchor in links) { - node = document.getElementById(anchor); - if (! node) { continue; } - node.href = links[anchor] + "?lat=" + lat + "&lon=" + lon + "&zoom=" + zoom; + + lat = Math.round(lat * decimals) / decimals; + lon = Math.round(lon * decimals) / decimals; + + node = document.getElementById("permalinkanchor"); + if (node) { + var args = getArgs(node.href); + args["lat"] = lat; + args["lon"] = lon; + args["zoom"] = zoom; + if (layers) { + args["layers"] = layers; + } + node.href = setArgs(node.href, args); + } + + node = document.getElementById("viewanchor"); + if (node) { + var args = getArgs(node.href); + args["lat"] = lat; + args["lon"] = lon; + args["zoom"] = zoom; + if (layers) { + args["layers"] = layers; + } + node.href = setArgs(node.href, args); + } + + node = document.getElementById("exportanchor"); + if (node) { + var args = getArgs(node.href); + args["lat"] = lat; + args["lon"] = lon; + args["zoom"] = zoom; + if (layers) { + args["layers"] = layers; + } + 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; + if (zoom >= 13) { + var args = new Object(); + args.lat = lat; + args.lon = lon; + args.zoom = zoom; + node.href = setArgs("/edit", args); node.style.fontStyle = 'normal'; } else { node.href = 'javascript:alert("zoom in to edit map");'; node.style.fontStyle = 'italic'; } } + + node = document.getElementById("historyanchor"); + if (node) { + if (zoom >= 11) { + var args = new Object(); + //set bbox param from 'extents' object + if (typeof minlon == "number" && + typeof minlat == "number" && + typeof maxlon == "number" && + typeof maxlat == "number") { + + minlon = Math.round(minlon * decimals) / decimals; + minlat = Math.round(minlat * decimals) / decimals; + maxlon = Math.round(maxlon * decimals) / decimals; + maxlat = Math.round(maxlat * decimals) / decimals; + args.bbox = minlon + "," + minlat + "," + maxlon + "," + maxlat; + } + + node.href = setArgs("/history", args); + node.style.fontStyle = 'normal'; + } else { + node.href = 'javascript:alert("zoom in to see editing history");'; + node.style.fontStyle = 'italic'; + } + } +} + +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("&"); +} + +function getStyle(el, property) { + var style; + + if (el.currentStyle) { + style = el.currentStyle[property]; + } else if( window.getComputedStyle ) { + style = document.defaultView.getComputedStyle(el,null).getPropertyValue(property); + } else { + style = el.style[property]; + } + + return style; }