]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/id.js
Extend user list to allow searching by name or email
[rails.git] / app / assets / javascripts / id.js
index 8c0a061ddc01bfc2333e6ad993965aad43fe0077..f2063ff0ef17c50347d97a7c4d44674f5e0b471a 100644 (file)
@@ -3,7 +3,7 @@
 /* globals iD */
 
 document.addEventListener("DOMContentLoaded", function () {
-  var container = document.getElementById("id-container");
+  const container = document.getElementById("id-container");
 
   if (typeof iD === "undefined" || !iD.utilDetect().support) {
     container.innerHTML = "This editor is supported " +
@@ -11,16 +11,16 @@ document.addEventListener("DOMContentLoaded", function () {
       "Please upgrade your browser or use JOSM to edit the map.";
     container.className = "unsupported";
   } else {
-    var idContext = iD.coreContext();
+    const idContext = iD.coreContext();
     idContext.connection().apiConnections([]);
-    var url = location.protocol + "//" + location.host;
+    const url = location.protocol + "//" + location.host;
     idContext.preauth({
       url: url,
       apiUrl: url === "https://www.openstreetmap.org" ? "https://api.openstreetmap.org" : url,
       access_token: container.dataset.token
     });
 
-    var id = idContext
+    const id = idContext
       .embed(true)
       .assetPath("iD/")
       .assetMap(JSON.parse(container.dataset.assetMap))
@@ -28,33 +28,53 @@ document.addEventListener("DOMContentLoaded", function () {
       .containerNode(container)
       .init();
 
+    if (parent === window) {
+      // iD not opened in an iframe -> skip setting of parent  handlers
+      return;
+    }
+
+    let hashChangedAutomatically = false;
     id.map().on("move.embed", parent.$.throttle(250, function () {
       if (id.inIntro()) return;
-      var zoom = ~~id.map().zoom(),
-          center = id.map().center(),
-          llz = { lon: center[0], lat: center[1], zoom: zoom };
+      const zoom = ~~id.map().zoom(),
+            center = id.map().center(),
+            llz = { lon: center[0], lat: center[1], zoom: zoom };
 
       parent.updateLinks(llz, zoom);
 
       // Manually resolve URL to avoid iframe JS context weirdness.
-      // http://bl.ocks.org/jfirebaugh/5439412
-      var hash = parent.OSM.formatHash(llz);
+      // https://gist.github.com/jfirebaugh/5439412
+      const hash = parent.OSM.formatHash(llz);
       if (hash !== parent.location.hash) {
+        hashChangedAutomatically = true;
         parent.location.replace(parent.location.href.replace(/(#.*|$)/, hash));
       }
     }));
 
-    parent.$("body").on("click", "a.set_position", function (e) {
-      e.preventDefault();
-      var data = parent.$(this).data();
-
+    function goToLocation(data) {
       // 0ms timeout to avoid iframe JS context weirdness.
-      // http://bl.ocks.org/jfirebaugh/5439412
+      // https://gist.github.com/jfirebaugh/5439412
       setTimeout(function () {
         id.map().centerZoom(
           [data.lon, data.lat],
           Math.max(data.zoom || 15, 13));
       }, 0);
+    }
+
+    parent.$("body").on("click", "a.set_position", function (e) {
+      e.preventDefault();
+      const data = parent.$(this).data();
+      goToLocation(data);
+    });
+
+    parent.addEventListener("hashchange", function (e) {
+      if (hashChangedAutomatically) {
+        hashChangedAutomatically = false;
+        return;
+      }
+      e.preventDefault();
+      const data = parent.OSM.mapParams();
+      goToLocation(data);
     });
   }
 });