]> 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 1a91c202ce9f0ccfc722d8ac05510fc901e95684..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;
 
@@ -176,8 +158,12 @@ OSM.Query = function(map) {
       $(this).show();
     });
 
-    $.ajax({
-      url: "http://overpass-api.de/api/interpreter",
+    if ($section.data("ajax")) {
+      $section.data("ajax").abort();
+    }
+
+    $section.data("ajax", $.ajax({
+      url: OSM.OVERPASS_URL,
       method: "POST",
       data: {
         data: "[timeout:5][out:json];" + query,
@@ -201,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);
           }
@@ -213,7 +199,7 @@ OSM.Query = function(map) {
             .appendTo($ul);
         }
       }
-    });
+    }));
   }
 
   function queryOverpass(lat, lng) {
@@ -222,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();
@@ -270,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() {