]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/id.js
Merge remote-tracking branch 'upstream/pull/4179'
[rails.git] / app / assets / javascripts / id.js
index 185717b32681e887476d8cff8614c588b84a6e76..2d0d01a6fd1198e7e97ad9b008af2a92b3c3aa0b 100644 (file)
@@ -1 +1,58 @@
 //= require iD
+
+/* globals iD */
+
+document.addEventListener("DOMContentLoaded", function () {
+  var container = document.getElementById("id-container");
+
+  if (typeof iD === "undefined" || !iD.utilDetect().support) {
+    container.innerHTML = "This editor is supported " +
+      "in Firefox, Chrome, Safari, Opera and Edge. " +
+      "Please upgrade your browser or use JOSM to edit the map.";
+    container.className = "unsupported";
+  } else {
+    var idContext = iD.coreContext();
+    idContext.connection().apiConnections([]);
+    idContext.preauth({
+      url: location.protocol + "//" + location.host,
+      access_token: container.dataset.token
+    });
+
+    var id = idContext
+      .embed(true)
+      .assetPath("iD/")
+      .assetMap(JSON.parse(container.dataset.assetMap))
+      .locale(container.dataset.locale)
+      .containerNode(container)
+      .init();
+
+    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 };
+
+      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);
+      if (hash !== parent.location.hash) {
+        parent.location.replace(parent.location.href.replace(/(#.*|$)/, hash));
+      }
+    }));
+
+    parent.$("body").on("click", "a.set_position", function (e) {
+      e.preventDefault();
+      var data = parent.$(this).data();
+
+      // 0ms timeout to avoid iframe JS context weirdness.
+      // http://bl.ocks.org/jfirebaugh/5439412
+      setTimeout(function () {
+        id.map().centerZoom(
+          [data.lon, data.lat],
+          Math.max(data.zoom || 15, 13));
+      }, 0);
+    });
+  }
+});