Update iD frame parameters if the parent URL changes
[rails.git] / app / views / site / _id.html.erb
index 680c45cdebd1f2707662eb714ae7ad70caaa1474..d582028f83226ceaad63ea3ea1b11b608a68abb3 100644 (file)
@@ -1,34 +1,58 @@
 <% if defined? ID_KEY %>
-<iframe frameBorder="0" id="id-embed" class="id-embed"></iframe>
-<% token = @user.access_token(ID_KEY) %>
-<script>
-var keys = {
-    '<%= request.protocol + request.host_with_port %>': {
-        oauth_consumer_key: "<%= token.client_application.key %>",
-        oauth_secret: "<%= token.client_application.secret %>",
-        oauth_token: "<%= token.token %>",
-        oauth_token_secret: "<%= token.secret %>"
+  <div id="map">
+    <iframe frameBorder="0" id="id-embed" class="id-embed" allowfullscreen></iframe>
+  </div>
+  <script>
+    var params = {};
+
+    function getParams(params) {
+      var mapParams = OSM.mapParams();
+      if (mapParams.object) {
+        params.id = mapParams.object.type[0] + mapParams.object.id;
+        mapParams = OSM.parseHash(location.hash);
+        if (mapParams.center) {
+          params.map = mapParams.zoom + '/' + mapParams.center.lat + '/' + mapParams.center.lng;
+        }
+      } else {
+        params.map = (mapParams.zoom || 17) + '/' + mapParams.lat + '/' + mapParams.lon;
+      }
+    }
+
+    getParams(params);
+
+<% if @lat && @lon -%>
+    params.map = '16/<%= @lat %>/<%= @lon %>';
+<% end -%>
+
+    var hashParams = OSM.params(location.hash.substring(1));
+
+    if (hashParams.background) {
+      params.background = hashParams.background;
+    }
+    if (hashParams.comment) {
+      params.comment = hashParams.comment;
+    }
+    if (hashParams.offset) {
+      params.offset = hashParams.offset;
     }
-};
 
-var coord = {};
-<% if @lat && @lon && @zoom -%>
-coord.lat = <%= @lat %>;
-coord.lon = <%= @lon %>;
-coord.zoom = <%= @zoom %>;
+<% if params[:gpx] -%>
+    params.gpx = '<%= trace_data_url(params[:gpx], :format => :xml) %>';
 <% else -%>
-var params = OSM.mapParams();
-coord.lat = params.lat;
-coord.lon = params.lon;
-coord.zoom = params.zoom;
+    if (hashParams.gpx) {
+      params.gpx = hashParams.gpx;
+    }
 <% end -%>
-var url = 'id_iframe#map=' + coord.zoom + '/' + coord.lon + '/' + coord.lat +
-    '&preauth=' + JSON.stringify(keys);
-$('#id-embed').attr('src', url);
-</script>
-<% else%>
-<script type="text/javascript">alert("<%= t 'site.edit.id_not_configured' %>")</script>
-<% end %>
 
-<script type="text/javascript">
-</script>
+    var baseUrl = '<%= id_url :locale => params[:locale] %>#';
+
+    $('#id-embed').attr('src', baseUrl + querystring.stringify(params));
+
+    $(window).on('hashchange', function () {
+      getParams(params);
+      $('#id-embed').attr('src', baseUrl + querystring.stringify(params));
+    });
+  </script>
+<% else %>
+  <script type="text/javascript">alert("<%= t 'site.edit.id_not_configured' %>")</script>
+<% end %>