Serve embedded maps through the assets pipeline
authorTom Hughes <tom@compton.nu>
Fri, 23 Nov 2012 09:04:38 +0000 (09:04 +0000)
committerTom Hughes <tom@compton.nu>
Fri, 23 Nov 2012 10:40:26 +0000 (10:40 +0000)
app/assets/javascripts/embed.js [new file with mode: 0644]
app/assets/stylesheets/embed.css.scss [new file with mode: 0644]
app/controllers/export_controller.rb
app/views/export/embed.html.erb [new file with mode: 0644]
config/environments/production.rb
config/routes.rb
public/export/embed.html [deleted file]
test/functional/export_controller_test.rb

diff --git a/app/assets/javascripts/embed.js b/app/assets/javascripts/embed.js
new file mode 100644 (file)
index 0000000..914eabb
--- /dev/null
@@ -0,0 +1,38 @@
+//= require leaflet
+//= require leaflet.osm
+
+window.onload = function () {
+  var query = (window.location.search || '?').substr(1),
+      args  = {};
+
+  query.replace(/([^&=]+)=?([^&]*)(?:&+|$)/g, function(match, key, value) {
+    value = value.split(",");
+    if (value.length == 1)
+      value = value[0];
+    args[key] = value;
+  });
+
+  var map = L.map("map");
+  map.attributionControl.setPrefix('');
+
+  if (!args.layer || args.layer == "mapnik" || args.layer == "osmarender") {
+    new L.OSM.Mapnik().addTo(map);
+  } else if (args.layer == "cyclemap" || args.layer == "cycle map") {
+    new L.OSM.CycleMap().addTo(map);
+  } else if (args.layer == "transportmap") {
+    new L.OSM.TransportMap().addTo(map);
+  } else if (args.layer == "mapquest") {
+    new L.OSM.MapQuestOpen().addTo(map);
+  }
+
+  if (args.marker) {
+    L.marker(args.marker).addTo(map);
+  }
+
+  if (args.bbox) {
+    map.fitBounds([L.latLng(args.bbox[1], args.bbox[0]),
+                   L.latLng(args.bbox[3], args.bbox[2])])
+  } else {
+    map.fitWorld();
+  }  
+};
diff --git a/app/assets/stylesheets/embed.css.scss b/app/assets/stylesheets/embed.css.scss
new file mode 100644 (file)
index 0000000..024f73d
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ *= require leaflet
+ */
+
+html {
+  width: 100%;
+  height: 100%;
+}
+
+body {
+  width: 100%;
+  height: 100%;
+  margin: 0px;
+}
+
+#map {
+  width: 100%;
+  height: 100%;
+}
+
+.leaflet-control-zoom-in {
+  background-image: image-url("images/zoom-in.png");
+}
+
+.leaflet-control-zoom-out {
+  background-image: image-url("images/zoom-out.png");
+}
index 2102a5704f4b29560387f2a4a2c2e5c84639a4fb..074a92ce82635a50e1bbc5ac5eb8ed960de7d347 100644 (file)
@@ -3,6 +3,8 @@ class ExportController < ApplicationController
   before_filter :authorize_web
   before_filter :set_locale
 
+  caches_page :embed
+
   def start
   end
 
@@ -23,4 +25,7 @@ class ExportController < ApplicationController
       redirect_to "http://parent.tile.openstreetmap.org/cgi-bin/export?bbox=#{bbox}&scale=#{scale}&format=#{format}"
     end
   end
+
+  def embed
+  end
 end
diff --git a/app/views/export/embed.html.erb b/app/views/export/embed.html.erb
new file mode 100644 (file)
index 0000000..b683c26
--- /dev/null
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta charset="utf-8">
+    <title>OpenStreetMap Embedded</title>
+    <%= stylesheet_link_tag "embed", :media=> "screen" %>
+    <!--[if IE]>
+    <%= stylesheet_link_tag "leaflet.ie", :media=> "screen" %>
+    <![endif]-->
+    <%= javascript_include_tag "embed" %>
+  </head>
+  <body>
+    <div id="map"></div>
+  </body>
+</html>
index 937f1771a10f5803265b8c3f8521295246559005..c0854d3a4661276245529fa7fe3a8104e536be6c 100644 (file)
@@ -62,6 +62,7 @@ OpenStreetMap::Application.configure do
   config.assets.precompile += %w( large-rtl.css small-rtl.css print-rtl.css )
   config.assets.precompile += %w( browse.css theme/openstreetmap/style.css )
   config.assets.precompile += %w( leaflet-all.css leaflet.ie.css )
+  config.assets.precompile += %w( embed.js embed.css )
 
   # Disable delivery errors, bad email addresses will be ignored
   # config.action_mailer.raise_delivery_errors = false
index 9725c0d1256707a7fd651fc505a30944b579efd9..1cdaaea4068ec15ef2ca584c94c810f60c86634f 100644 (file)
@@ -203,6 +203,7 @@ OpenStreetMap::Application.routes.draw do
   # export
   match '/export/start' => 'export#start', :via => :get
   match '/export/finish' => 'export#finish', :via => :post
+  match '/export/embed' => 'export#embed', :via => :get
 
   # messages
   match '/user/:display_name/inbox' => 'message#inbox', :via => :get, :as => "inbox"
diff --git a/public/export/embed.html b/public/export/embed.html
deleted file mode 100644 (file)
index 3559f8f..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta charset="utf-8">
-    <title>OpenStreetMap Embedded</title>
-    <style type="text/css">
-        html {
-            width: 100%;
-            height: 100%;
-        }
-        body {
-            width: 100%;
-            height: 100%;
-            margin: 0px;
-        }
-        #map {
-            width: 100%;
-            height: 100%;
-        }
-    </style>
-    <link href="/assets/leaflet.css" media="screen" rel="stylesheet" type="text/css">
-    <!--[if IE]>
-    <link href="/assets/leaflet.ie.css" media="screen" rel="stylesheet" type="text/css" />
-     <![endif]-->
-    <script src="/assets/leaflet.js"></script>
-    <script src="/assets/leaflet.osm.js"></script>
-  </head>
-
-  <body>
-    <div id="map"></div>
-    <script>
-      var query = (window.location.search || '?').substr(1),
-          args  = {};
-
-      query.replace(/([^&=]+)=?([^&]*)(?:&+|$)/g, function(match, key, value) {
-        value = value.split(",");
-        if (value.length == 1)
-          value = value[0];
-        args[key] = value;
-      });
-
-      var map = L.map("map");
-      map.attributionControl.setPrefix('');
-
-      if (!args.layer || args.layer == "mapnik" || args.layer == "osmarender") {
-        new L.OSM.Mapnik().addTo(map);
-      } else if (args.layer == "cyclemap" || args.layer == "cycle map") {
-        new L.OSM.CycleMap().addTo(map);
-      } else if (args.layer == "transportmap") {
-        new L.OSM.TransportMap().addTo(map);
-      } else if (args.layer == "mapquest") {
-        new L.OSM.MapQuestOpen().addTo(map);
-      }
-
-      if (args.marker) {
-        L.marker(args.marker).addTo(map);
-      }
-
-      if (args.bbox) {
-        map.fitBounds([L.latLng(args.bbox[1], args.bbox[0]),
-                       L.latLng(args.bbox[3], args.bbox[2])])
-      } else {
-        map.fitWorld();
-      }
-    </script>
-  </body>
-</html>
index af9d2818392d364772ba096e30273be58f1531fe..61a307643414f212a506c188038d72fce6f37c07 100644 (file)
@@ -13,6 +13,10 @@ class ExportControllerTest < ActionController::TestCase
       { :path => "/export/finish", :method => :post },
       { :controller => "export", :action => "finish" }
     )
+    assert_routing(
+      { :path => "/export/embed", :method => :get },
+      { :controller => "export", :action => "embed" }
+    )
   end
 
   def test_start