Make JOSM remote control based editing work
authorTom Hughes <tom@compton.nu>
Sun, 14 Nov 2010 17:35:08 +0000 (17:35 +0000)
committerTom Hughes <tom@compton.nu>
Mon, 29 Nov 2010 12:20:22 +0000 (12:20 +0000)
app/controllers/site_controller.rb
app/helpers/application_helper.rb
app/views/site/_josm.html.erb [deleted file]
app/views/site/edit.html.erb
app/views/site/index.html.erb

index 0a1a55301a43731c51f0fe8a6b38f0a65527d7a2..d08f34a0a29b0a2689e759c327b227896419f9a7 100644 (file)
@@ -32,36 +32,40 @@ class SiteController < ApplicationController
   end
 
   def edit
-    session[:token] = @user.tokens.create.token unless session[:token] and UserToken.find_by_token(session[:token])
-    
-    @preferred_editor = @user.preferred_editor || DEFAULT_EDITOR
+    editor = @user.preferred_editor || DEFAULT_EDITOR
 
-    # Decide on a lat lon to initialise potlatch with. Various ways of doing this
-    if params['lon'] and params['lat']
-      @lon = params['lon'].to_f
-      @lat = params['lat'].to_f
-      @zoom = params['zoom'].to_i
-      
-    elsif params['mlon'] and params['mlat'] 
-      @lon = params['mlon'].to_f
-      @lat = params['mlat'].to_f
-      @zoom = params['zoom'].to_i
-      
-    elsif params['gpx']
-      #use gpx id to locate (dealt with below)
-      
-    elsif cookies.key?("_osm_location")
-      @lon, @lat, @zoom, layers = cookies["_osm_location"].split("|")
-      
-    elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil? 
-      @lon = @user.home_lon
-      @lat = @user.home_lat
-      
+    if editor == "josm"
+      render :action => :index
     else
-      #catch all.  Do nothing.  lat=nil, lon=nil
-      #Currently this results in potlatch starting up at 0,0 (Atlantic ocean).
-    end
+      session[:token] = @user.tokens.create.token unless session[:token] and UserToken.find_by_token(session[:token])
+
+      # Decide on a lat lon to initialise potlatch with. Various ways of doing this
+      if params['lon'] and params['lat']
+        @lon = params['lon'].to_f
+        @lat = params['lat'].to_f
+        @zoom = params['zoom'].to_i
+
+      elsif params['mlon'] and params['mlat']
+        @lon = params['mlon'].to_f
+        @lat = params['mlat'].to_f
+        @zoom = params['zoom'].to_i
+
+      elsif params['gpx']
+        #use gpx id to locate (dealt with below)
 
-    @zoom = '14' if @zoom.nil?
+      elsif cookies.key?("_osm_location")
+        @lon, @lat, @zoom, layers = cookies["_osm_location"].split("|")
+
+      elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil?
+        @lon = @user.home_lon
+        @lat = @user.home_lat
+
+      else
+        #catch all.  Do nothing.  lat=nil, lon=nil
+        #Currently this results in potlatch starting up at 0,0 (Atlantic ocean).
+      end
+
+      @zoom = '14' if @zoom.nil?
+    end
   end
 end
index 2ccfcca2b0a5b8e33107d6731ae5f6b297ccf594..ca26cfd4846aa59dfd258164146372302daf7afc 100644 (file)
@@ -119,6 +119,14 @@ module ApplicationHelper
     end
   end
 
+  def preferred_editor
+    if @user and @user.preferred_editor
+      @user.preferred_editor
+    else
+      DEFAULT_EDITOR
+    end
+  end
+
 private
 
   def javascript_strings_for_key(key)
diff --git a/app/views/site/_josm.html.erb b/app/views/site/_josm.html.erb
deleted file mode 100644 (file)
index 16f33bd..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<div id="map">
-  <% query = "lat=#{@lat || 0}&lon=#{@lon || 0}&zoom=#{@zoom}" %>
-  <iframe src="http://127.0.0.1:8111/load_and_zoom?<%= query %>" width="100%" height="100%">
-    <p><%= t 'site.edit.no_iframe_support' %></p>
-  </iframe>
-</div>
index b89184404c121d5bc8fe98b4bdbf693757870431..a9b915faf84413224bfac2eab1497378b65e48bf 100644 (file)
@@ -19,7 +19,7 @@
 <%= render :partial => 'sidebar', :locals => { :onopen => "resizeMap();", :onclose => "resizeMap();" } %>
 <%= render :partial => 'search' %>
 
-<%= render :partial => @preferred_editor %>
+<%= render :partial => preferred_editor %>
 
 <script type="text/javascript" defer="defer">
   function resizeContent() {
index a89212238a26e7706b18a3239b711b284a700abe..f9158463af899c8ca1aa12d7c4a5e535e82a3093 100644 (file)
@@ -19,6 +19,9 @@
 <div id="map">
 </div>
 
+<iframe id="linkloader" style="display: none">
+</iframe>
+
 <div id="permalink">
   <a href="/" id="permalinkanchor"><%= t 'site.index.permalink' %></a><br/>
   <a href="/" id="shortlinkanchor"><%= t 'site.index.shortlink' %></a>
@@ -267,11 +270,33 @@ end
     resizeMap();
   }
 
+  function josmEditHandler() {
+    var extent = getMapExtent();
+
+    $("linkloader").src = "http://127.0.0.1:8111/load_and_zoom?left=" + extent.left + "&top=" + extent.top + "&right=" + extent.right + "&bottom=" + extent.bottom;
+
+    return false;
+  }
+
+  function installEditHandler() {
+    <% if preferred_editor == "josm" %>
+      $("editanchor").onclick =josmEditHandler;
+
+      <% if params[:action] == "edit" %>
+        josmEditHandler();
+      <% end %>
+    <% end %>
+  }
+
   mapInit();
 
   window.onload = handleResize;
   window.onresize = handleResize;
 
+  Event.observe(window, 'load', installEditHandler);
+  Event.observe(window, 'load', handleResize);
+  Event.observe(window, 'resize', handleResize);
+
   <% if params['action'] == 'export' %>
   <%= remote_function :url => { :controller => 'export', :action => 'start' } %>
   <% end %>