X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/eb61cc614ff43f32721e844a343f58744cc7ff01..33bca7cd655577da0b2b2aac398db221a31700ad:/app/assets/javascripts/id.js?ds=inline diff --git a/app/assets/javascripts/id.js b/app/assets/javascripts/id.js index 86d2df7e4..15f77b1c1 100644 --- a/app/assets/javascripts/id.js +++ b/app/assets/javascripts/id.js @@ -1,3 +1,80 @@ //= 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(); + + if (parent === window) { + // iD not opened in an iframe -> skip setting of parent handlers + return; + } + + var 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 }; + + 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) { + hashChangedAutomatically = true; + parent.location.replace(parent.location.href.replace(/(#.*|$)/, hash)); + } + })); + + function goToLocation(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); + } + + parent.$("body").on("click", "a.set_position", function (e) { + e.preventDefault(); + var data = parent.$(this).data(); + goToLocation(data); + }); + + parent.addEventListener("hashchange", function (e) { + if (hashChangedAutomatically) { + hashChangedAutomatically = false; + return; + } + e.preventDefault(); + var data = parent.OSM.mapParams(); + goToLocation(data); + }); + } +});