]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/id.js
Merge remote-tracking branch 'upstream/pull/5311'
[rails.git] / app / assets / javascripts / id.js
index 86d2df7e402683a52d9d01cd63f7ee0bb004c590..706097bbaf2c4f01dcd4bfac7888ce29a11080b0 100644 (file)
@@ -1,3 +1,60 @@
 //= require iD
-//= require presets
-//= require imagery
+
+/* 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([]);
+    var 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
+      .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.
+      // https://gist.github.com/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.
+      // https://gist.github.com/jfirebaugh/5439412
+      setTimeout(function () {
+        id.map().centerZoom(
+          [data.lon, data.lat],
+          Math.max(data.zoom || 15, 13));
+      }, 0);
+    });
+  }
+});