]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/query.js
Make sure the query location is always in view
[rails.git] / app / assets / javascripts / index / query.js
index fb8649025328af184e9b5aa60e919941a4bd0d36..d9906407d11ead6a476d1187025d14c874640922 100644 (file)
@@ -122,24 +122,6 @@ OSM.Query = function(map) {
     }
   }
 
-  function featureLink(feature) {
-    if (feature.type === "area") {
-      if (feature.id >= 3600000000) {
-        var id = feature.id - 3600000000;
-
-        return "/browse/relation/" + id;
-      } else if (feature.id >= 2400000000) {
-        var id = feature.id - 2400000000;
-
-        return "/browse/way/" + id;
-      } else {
-        return "/browse/node/" + feature.id;
-      }
-    } else {
-      return "/browse/" + feature.type + "/" + feature.id;
-    }
-  }
-
   function featureGeometry(feature, features) {
     var geometry;
 
@@ -205,7 +187,7 @@ OSM.Query = function(map) {
               .appendTo($li);
 
             $("<a>")
-              .attr("href", featureLink(element))
+              .attr("href", "/" + element.type + "/" + element.id)
               .text(featureName(element))
               .appendTo($p);
           }
@@ -226,7 +208,7 @@ OSM.Query = function(map) {
       around = "around:" + radius + "," + lat + "," + lng,
       features = "(node(" + around + ");way(" + around + ");relation(" + around + "))",
       nearby = "((" + features + ";way(bn));node(w));out;",
-      isin = "(is_in(" + lat + "," + lng + ");>);out;";
+      isin = "is_in(" + lat + "," + lng + ")->.a;(relation(pivot.a);way(pivot.a);node(w));out;";
 
     $("#sidebar_content .query-intro")
       .hide();
@@ -274,17 +256,23 @@ OSM.Query = function(map) {
 
   page.pushstate = page.popstate = function(path) {
     OSM.loadSidebarContent(path, function () {
-      page.load(path);
+      page.load(path, true);
     });
   };
 
-  page.load = function(path) {
-    var params = querystring.parse(path.substring(path.indexOf('?') + 1));
+  page.load = function(path, noCentre) {
+    var params = querystring.parse(path.substring(path.indexOf('?') + 1)),
+      latlng = L.latLng(params.lat, params.lon);
+
+    if (!window.location.hash &&
+        (!noCentre || !map.getBounds().contains(latlng))) {
+      OSM.router.withoutMoveListener(function () {
+        map.setView(latlng, 15);
+      });
+    }
 
     queryOverpass(params.lat, params.lon);
     enableQueryMode();
-
-    return map.getState();
   };
 
   page.unload = function() {