openstreetmap-website/app/views/site/index.rhtml
Tom Hughes a03c584a98 Resize the map div when the page load is complete (via onload) in case the
page layout has changed since the initial sizing by the deferred script.
2008-03-07 00:26:57 +00:00

186 lines
5.2 KiB
Text

<% content_for :greeting do %>
<% if @user and !@user.home_lon.nil? and !@user.home_lat.nil? %>
<%= link_to_function 'home', "setPosition(#{@user.home_lat}, #{@user.home_lon}, 10)" %> |
<% end %>
<% end %>
<%= render :partial => 'sidebar', :locals => { :onopen => "resizeMap();", :onclose => "resizeMap();" } %>
<%= render :partial => 'key' %>
<%= render :partial => 'search' %>
<div id="map">
<div id="permalink"><a href="/" id="permalinkanchor">Permalink</a></div>
</div>
<div id="attribution">
<table width="100%">
<tr>
<td align="left">http://creativecommons.org/licenses/by-sa/2.0/</td>
<td align="right">http://openstreetmap.org/</td>
</tr>
<tr>
<td colspan="2" align="center">
Licensed under the Creative Commons Attribution-Share Alike 2.0 license
by the OpenStreetMap project and it's contributors.
</td>
</table>
</div>
<% if params['mlon'] and params['mlat'] %>
<% marker = true %>
<% mlon = h(params['mlon']) %>
<% mlat = h(params['mlat']) %>
<% end %>
<% if params['minlon'] and params['minlat'] and params['maxlon'] and params['maxlat'] %>
<% bbox = true %>
<% minlon = h(params['minlon']) %>
<% minlat = h(params['minlat']) %>
<% maxlon = h(params['maxlon']) %>
<% maxlat = h(params['maxlat']) %>
<% end %>
<% if params['lon'] and params['lat'] %>
<% lon = h(params['lon']) %>
<% lat = h(params['lat']) %>
<% zoom = h(params['zoom'] || '5') %>
<% layers = h(params['layers']) %>
<% elsif params['mlon'] and params['mlat'] %>
<% lon = h(params['mlon']) %>
<% lat = h(params['mlat']) %>
<% zoom = h(params['zoom'] || '12') %>
<% layers = h(params['layers']) %>
<% elsif cookies.key?("location") %>
<% lon,lat,zoom,layers = cookies["location"].split(",") %>
<% elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil? %>
<% lon = @user.home_lon %>
<% lat = @user.home_lat %>
<% zoom = '10' %>
<% else %>
<% session[:location] = OSM::IPLocation(request.env['REMOTE_ADDR']) unless session[:location] %>
<% if session[:location] %>
<% bbox = true %>
<% minlon = session[:location][:minlon] %>
<% minlat = session[:location][:minlat] %>
<% maxlon = session[:location][:maxlon] %>
<% maxlat = session[:location][:maxlat] %>
<% else %>
<% lon = '-0.1' %>
<% lat = '51.5' %>
<% zoom = h(params['zoom'] || '5') %>
<% layers = h(params['layers']) %>
<% end %>
<% end %>
<%= javascript_include_tag '/openlayers/OpenLayers.js' %>
<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %>
<%= javascript_include_tag 'map.js' %>
<script type="text/javascript" defer="defer">
<!--
var brokenContentSize = $("content").offsetWidth == 0;
var marker;
var map;
function mapInit(){
map = createMap("map");
<% if bbox %>
var min = lonLatToMercator(new OpenLayers.LonLat(<%= minlon %>, <%= minlat %>));
var max = lonLatToMercator(new OpenLayers.LonLat(<%= maxlon %>, <%= maxlat %>));
var bbox = new OpenLayers.Bounds(min.lon, min.lat, max.lon, max.lat);
map.zoomToExtent(bbox);
<% else %>
var centre = lonLatToMercator(new OpenLayers.LonLat(<%= lon %>, <%= lat %>));
var zoom = <%= zoom %>;
<% if params['scale'] and params['scale'].length > 0 then %>
zoom = scaleToZoom(<%= params['scale'].to_f() %>);
<% end %>
map.setCenter(centre, zoom);
<% end %>
<% if layers %>
setMapLayers("<%= layers %>");
<% end %>
<% if marker %>
marker = addMarkerToMap(lonLatToMercator(new OpenLayers.LonLat(<%= mlon %>, <%= mlat %>)));
<% end %>
map.events.register("zoomend", map, updateKey);
map.events.register("moveend", map, updateLocation);
map.events.register("changelayer", map, updateLocation);
updateLocation();
handleResize();
}
function getPosition() {
return mercatorToLonLat(map.getCenter());
}
function setPosition(lat, lon, zoom) {
var centre = lonLatToMercator(new OpenLayers.LonLat(lon, lat));
map.setCenter(centre, zoom);
if (marker)
removeMarkerFromMap(marker);
marker = addMarkerToMap(centre, getArrowIcon());
}
function updateLocation() {
var lonlat = mercatorToLonLat(map.getCenter());
var zoom = map.getZoom();
var layers = getMapLayers();
updatelinks(lonlat.lon, lonlat.lat, zoom, layers);
document.cookie = "location=" + lonlat.lon + "," + lonlat.lat + "," + zoom + "," + layers;
}
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
}
$("map").style.left = (sidebar_width) + "px";
$("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();
}
mapInit();
window.onload = handleResize;
window.onresize = handleResize;
// -->
</script>