Fix resizing of the map area in RTL layouts
authorTom Hughes <tom@compton.nu>
Sat, 2 Jul 2011 15:19:47 +0000 (16:19 +0100)
committerTom Hughes <tom@compton.nu>
Sat, 2 Jul 2011 15:19:47 +0000 (16:19 +0100)
app/views/site/_resize.html.erb [new file with mode: 0644]
app/views/site/edit.html.erb
app/views/site/index.html.erb

diff --git a/app/views/site/_resize.html.erb b/app/views/site/_resize.html.erb
new file mode 100644 (file)
index 0000000..a4975e1
--- /dev/null
@@ -0,0 +1,41 @@
+<script type="text/javascript">
+  var brokenContentSize = $("content").offsetWidth == 0;
+
+  function resizeContent() {
+    var content = $("content");
+    var leftMargin = parseInt(getStyle(content, "left"));
+    var rightMargin = parseInt(getStyle(content, "right"));
+    var bottomMargin = parseInt(getStyle(content, "bottom"));
+
+    <% if t('html.dir') == "ltr" -%>
+    content.style.width = document.documentElement.clientWidth - content.offsetLeft - rightMargin;
+    <% else -%>
+    content.style.width = document.documentElement.clientWidth - content.offsetRight - leftMargin;
+    <% end -%>
+    content.style.height = document.documentElement.clientHeight - content.offsetTop - bottomMargin;
+  }
+
+  function resizeMap() {
+    var sidebar_width = $("sidebar").offsetWidth;
+
+    if (sidebar_width > 0) {
+      sidebar_width = sidebar_width + 5
+    }
+
+    <% if t('html.dir') == "ltr" -%>
+    $("map").style.left = (sidebar_width) + "px";
+    <% else -%>
+    $("map").style.right = (sidebar_width) + "px";
+    <% end -%>
+    $("map").style.width = ($("content").offsetWidth - sidebar_width) + "px";
+    $("map").style.height = ($("content").offsetHeight - 2) + "px";
+  }
+
+  function handleResize() {
+    if (brokenContentSize) {
+      resizeContent();
+    }
+
+    resizeMap();
+  }
+</script>
index a9b915faf84413224bfac2eab1497378b65e48bf..fdbfa5428f1616278585b9b9b464227ec363c7ac 100644 (file)
 
 <%= render :partial => 'sidebar', :locals => { :onopen => "resizeMap();", :onclose => "resizeMap();" } %>
 <%= render :partial => 'search' %>
+<%= render :partial => 'resize' %>
 
 <%= render :partial => preferred_editor %>
 
 <script type="text/javascript" defer="defer">
-  function resizeContent() {
-    var content = $("content");
-    var rightMargin = parseInt(getStyle(content, "right"));
-    var bottomMargin = parseInt(getStyle(content, "bottom"));
-
-    content.style.width = document.documentElement.clientWidth - content.offsetLeft - rightMargin;
-    content.style.height = document.documentElement.clientHeight - content.offsetTop - bottomMargin;
-  }
-  
-  function resizeMap() {
-    var sidebar_width = $("sidebar").offsetWidth;
-
-    if (sidebar_width > 0) {
-      sidebar_width = sidebar_width + 5
-    }
-
-    $("map").style.left = (sidebar_width) + "px";
-    $("map").style.width = ($("content").offsetWidth - sidebar_width) + "px";
-    $("map").style.height = ($("content").offsetHeight - 2) + "px";
-  }
-
-  function handleResize() {
-    if (brokenContentSize) {
-      resizeContent();
-    }
-
-    resizeMap();
-  }
-
   function maximiseMap() {
     $("left").style.display = "none";
     $("greeting").style.display = "none";
     $("tabnav").style.display = "none";
 
     $("content").style.top = "10px";
+    <% if t('html.dir') == "ltr" -%>
     $("content").style.left = "10px";
+    <% else -%>
+    $("content").style.right = "10px";
+    <% end -%>
 
     handleResize();
   }
     $("tabnav").style.display = "";
 
     $("content").style.top = "35px";
+    <% if t('html.dir') == "ltr" -%>
     $("content").style.left = "192px";
+    <% else -%>
+    $("content").style.right = "192px";
+    <% end -%>
 
     handleResize();
   }
 
   handleResize();
 
-  window.onload = handleResize;
-  window.onresize = handleResize;
+  Event.observe(window, "load", handleResize);
+  Event.observe(window, "resize", handleResize);
 </script>
 <% end %>
index 5c02efb82ffc5854e22d5cb0d69d3aecb25a2028..84ffcbe59a52bc7885ceab7c0a4add179c80cdd9 100644 (file)
@@ -118,9 +118,9 @@ end
 <%= javascript_include_tag '/openlayers/OpenStreetMap.js' %>
 <%= javascript_include_tag 'map.js' %>
 
+<%= render :partial => 'resize' %>
+
 <script type="text/javascript" defer="defer">
-  <!--
-  var brokenContentSize = $("content").offsetWidth == 0;
   var marker;
   var map;
 
@@ -237,43 +237,6 @@ end
     document.cookie = "_osm_location=" + lonlat.lon + "|" + lonlat.lat + "|" + zoom + "|" + layers + "; expires=" + expiry.toGMTString();
   }
 
-  function resizeContent() {
-    var content = $("content");
-    var rightMargin = parseInt(getStyle(content, "right"));
-    var bottomMargin = parseInt(getStyle(content, "bottom"));
-
-    content.style.width = document.documentElement.clientWidth - content.offsetLeft - rightMargin;
-    content.style.height = document.documentElement.clientHeight - content.offsetTop - bottomMargin;
-  }
-
-  function resizeMap() {
-    var centre = map.getCenter();
-    var zoom = map.getZoom();
-    var sidebar_width = $("sidebar").offsetWidth;
-
-    if (sidebar_width > 0) {
-      sidebar_width = sidebar_width + 5
-    }
-
-    <% if t('html.dir') == "ltr" -%>
-    $("map").style.left = (sidebar_width) + "px";
-    <% else -%>
-    $("map").style.right = (sidebar_width) + "px";
-    <% end -%>
-    $("map").style.width = ($("content").offsetWidth - sidebar_width) + "px";
-    $("map").style.height = ($("content").offsetHeight - 2) + "px";
-
-    map.setCenter(centre, zoom);
-  }
-
-  function handleResize() {
-    if (brokenContentSize) {
-      resizeContent();
-    }
-
-    resizeMap();
-  }
-
   function remoteEditHandler(event) {
     var extent = getMapExtent();
     var loaded = false;
@@ -304,10 +267,17 @@ end
 
   Event.observe(window, "load", installEditHandler);
   Event.observe(window, "load", handleResize);
-  Event.observe(window, "resize", handleResize);
+
+  Event.observe(window, "resize", function() {
+    var centre = map.getCenter();
+    var zoom = map.getZoom();
+
+    handleResize();
+
+    map.setCenter(centre, zoom);
+  });
 
   <% if params['action'] == 'export' %>
   <%= remote_function :url => { :controller => 'export', :action => 'start' } %>
   <% end %>
-// -->
 </script>