]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/leaflet.map.js
Treat notes as map objects
[rails.git] / app / assets / javascripts / leaflet.map.js
index ffb2d7a2140f52199e28e4521cea68b5f6ed65c1..83cb73ec59dba6a31303f9918df09f83d4bd37ab 100644 (file)
@@ -242,42 +242,64 @@ L.OSM.Map = L.Map.extend({
       interactive: false
     };
 
+    var haloStyle = {
+      weight: 2.5,
+      radius: 20,
+      fillOpacity: 0.5,
+      color: "#FF6200"
+    };
+
     this.removeObject();
 
-    var map = this;
-    this._objectLoader = $.ajax({
-      url: OSM.apiUrl(object),
-      dataType: "xml",
-      success: function (xml) {
-        map._object = object;
-
-        map._objectLayer = new L.OSM.DataLayer(null, {
-          styles: {
-            node: objectStyle,
-            way: objectStyle,
-            area: objectStyle,
-            changeset: changesetStyle
-          }
-        });
-
-        map._objectLayer.interestingNode = function (node, ways, relations) {
-          if (object.type === "node") {
-            return true;
-          } else if (object.type === "relation") {
-            for (var i = 0; i < relations.length; i++) {
-              if (relations[i].members.indexOf(node) !== -1) return true;
+    if (object.type === "note") {
+      this._objectLoader = {
+        abort: function () {}
+      };
+      this._object = object;
+      this._objectLayer = L.featureGroup().addTo(this);
+      L.circleMarker(object.latLng, haloStyle).addTo(this._objectLayer);
+      L.marker(object.latLng, {
+        icon: object.icon,
+        opacity: 1,
+        interactive: true
+      }).addTo(this._objectLayer);
+      if (callback) callback(this._objectLayer.getBounds());
+    } else { // element or changeset handled by L.OSM.DataLayer
+      var map = this;
+      this._objectLoader = $.ajax({
+        url: OSM.apiUrl(object),
+        dataType: "xml",
+        success: function (xml) {
+          map._object = object;
+
+          map._objectLayer = new L.OSM.DataLayer(null, {
+            styles: {
+              node: objectStyle,
+              way: objectStyle,
+              area: objectStyle,
+              changeset: changesetStyle
+            }
+          });
+
+          map._objectLayer.interestingNode = function (node, ways, relations) {
+            if (object.type === "node") {
+              return true;
+            } else if (object.type === "relation") {
+              for (var i = 0; i < relations.length; i++) {
+                if (relations[i].members.indexOf(node) !== -1) return true;
+              }
+            } else {
+              return false;
             }
-          } else {
-            return false;
-          }
-        };
+          };
 
-        map._objectLayer.addData(xml);
-        map._objectLayer.addTo(map);
+          map._objectLayer.addData(xml);
+          map._objectLayer.addTo(map);
 
-        if (callback) callback(map._objectLayer.getBounds());
-      }
-    });
+          if (callback) callback(map._objectLayer.getBounds());
+        }
+      });
+    }
   },
 
   removeObject: function () {
@@ -300,12 +322,17 @@ L.OSM.Map = L.Map.extend({
   },
 
   setSidebarOverlaid: function (overlaid) {
+    var sidebarWidth = 350;
     if (overlaid && !$("#content").hasClass("overlay-sidebar")) {
       $("#content").addClass("overlay-sidebar");
-      this.invalidateSize({ pan: false })
-        .panBy([-350, 0], { animate: false });
+      this.invalidateSize({ pan: false });
+      if ($("html").attr("dir") !== "rtl") {
+        this.panBy([-sidebarWidth, 0], { animate: false });
+      }
     } else if (!overlaid && $("#content").hasClass("overlay-sidebar")) {
-      this.panBy([350, 0], { animate: false });
+      if ($("html").attr("dir") !== "rtl") {
+        this.panBy([sidebarWidth, 0], { animate: false });
+      }
       $("#content").removeClass("overlay-sidebar");
       this.invalidateSize({ pan: false });
     }