Move param-based map configuration to client
[rails.git] / app / views / site / index.html.erb
1 <% if @user and !@user.home_lon.nil? and !@user.home_lat.nil? %>
2   <% content_for :greeting do %>
3     <%= link_to t("layouts.home"), "#", :class => "set_position", :data => { :lat => @user.home_lat, :lon => @user.home_lon, :zoom => 15 }, :title => t("layouts.home_tooltip") %> |
4   <% end %>
5 <% end %>
6
7 <% unless STATUS == :api_offline or STATUS == :database_offline -%>
8   <% content_for :editmenu do -%>
9     <li><%= link_to t("browse.start_rjs.data_layer_name"), { :controller => :browse, :action => :start }, :id => "show_data" %></li>
10   <% end -%>
11 <% end -%>
12
13 <%= render :partial => 'sidebar' %>
14 <%= render :partial => 'key' %>
15 <%= render :partial => 'search' %>
16
17 <noscript>
18   <div id="noscript">
19     <p><%= t 'site.index.js_1' %></p>
20     <p><%= t 'site.index.js_2' %></p>
21   </div>
22 </noscript>
23
24 <div id="map">
25   <div id="permalink">
26     <a href="/" id="permalinkanchor" class="geolink llz layers object"><%= t 'site.index.permalink' %></a>
27     <a href="/" id="shortlinkanchor"><%= t 'site.index.shortlink' %></a>
28   </div>
29 </div>
30
31 <iframe id="linkloader" style="display: none">
32 </iframe>
33
34 <div id="attribution">
35   <table width="100%">
36     <tr>
37       <td class="attribution_license"><%= t'site.index.license.license_url' %></td>
38       <td class="attribution_project"><%= t'site.index.license.project_url' %></td>
39     </tr>
40     <tr>
41       <td colspan="2" class="attribution_notice"><%= t'site.index.license.copyright' %></td>
42     </tr>
43   </table>
44 </div>
45
46 <script type="text/javascript">
47   var marker;
48   var map;
49   var params = OSM.mapParams();
50
51   function mapInit(){
52     map = createMap("map");
53
54     if (!params.object_zoom) {
55       if (params.bbox) {
56         var bbox = new OpenLayers.Bounds(params.minlon, params.minlat, params.maxlon, params.maxlat);
57
58         map.zoomToExtent(proj(bbox));
59
60         if (params.box) {
61           $(window).load(function() { addBoxToMap(bbox) });
62         }
63       } else {
64         setMapCenter(new OpenLayers.LonLat(params.lon, params.lat), params.zoom);
65       }
66     }
67
68     if (params.layers) {
69       setMapLayers(params.layers);
70     }
71
72     if (params.marker) {
73       marker = addMarkerToMap(new OpenLayers.LonLat(params.mlon, params.mlat));
74     }
75
76     if (params.object) {
77       var url = "/api/" + OSM.API_VERSION + "/" + params.object_type + "/" + params.object_id;
78
79       if (params.object_type != "node") {
80         url += "/full";
81       }
82
83       $(window).load(function() { addObjectToMap(url, params.object_zoom) });
84     }
85
86     map.events.register("moveend", map, updateLocation);
87     map.events.register("changelayer", map, updateLocation);
88
89     updateLocation();
90     handleResize();
91   }
92
93   $(document).ready(function () {
94     $("#show_data").click(function (e) {
95       $.ajax({ url: $(this).attr('href'), success: function (sidebarHtml) {
96         startBrowse(sidebarHtml);
97       }});
98       e.preventDefault();
99     });
100
101     $("body").on("click", "a.set_position", function () {
102       var lat = parseFloat($(this).attr("data-lat"));
103       var lon = parseFloat($(this).attr("data-lon"));
104       var zoom = parseInt($(this).attr("data-zoom"));
105       var min_lon = parseFloat($(this).attr("data-min-lon"));
106       var min_lat = parseFloat($(this).attr("data-min-lat"));
107       var max_lon = parseFloat($(this).attr("data-max-lon"));
108       var max_lat = parseFloat($(this).attr("data-max-lat"));
109       var centre = new OpenLayers.LonLat(lon, lat);
110
111       if (min_lon && min_lat && max_lon && max_lat) {
112         var bbox = new OpenLayers.Bounds(min_lon, min_lat, max_lon, max_lat);
113
114         map.zoomToExtent(proj(bbox));
115       } else {
116         setMapCenter(centre, zoom);
117       }
118
119       if (marker) {
120         removeMarkerFromMap(marker);
121       }
122
123       marker = addMarkerToMap(centre, getArrowIcon());
124
125       return false;
126     });
127   });
128
129   function updateLocation() {
130     var lonlat = unproj(map.getCenter());
131     var zoom = map.getZoom();
132     var layers = getMapLayers();
133     var extents = unproj(map.getExtent());
134     var expiry = new Date();
135
136     updatelinks(lonlat.lon, lonlat.lat, zoom, layers, extents.left, extents.bottom, extents.right, extents.top, params.object_type, params.object_id);
137
138     expiry.setYear(expiry.getFullYear() + 10);
139     $.cookie("_osm_location", [lonlat.lon, lonlat.lat, zoom, layers].join("|"), {expires: expiry});
140   }
141
142   function remoteEditHandler(event) {
143     var extent = unproj(map.getExtent());
144     var loaded = false;
145
146     $("#linkloader").load(function () { loaded = true; });
147     $("#linkloader").attr("src", "http://127.0.0.1:8111/load_and_zoom?left=" + extent.left + "&top=" + extent.top + "&right=" + extent.right + "&bottom=" + extent.bottom);
148
149     setTimeout(function () {
150       if (!loaded) alert("<%=j t('site.index.remote_failed') %>");
151     }, 1000);
152
153     return false;
154   }
155
156   function installEditHandler() {
157     $("#remoteanchor").click(remoteEditHandler);
158
159     <% if preferred_editor == "remote" %>
160       $("#editanchor").click(remoteEditHandler);
161
162       <% if params[:action] == "edit" %>
163         remoteEditHandler();
164       <% end %>
165     <% end %>
166   }
167
168   $(document).ready(mapInit);
169   $(document).ready(installEditHandler);
170   $(document).ready(handleResize);
171
172   $(window).resize(function() {
173     var centre = map.getCenter();
174     var zoom = map.getZoom();
175
176     handleResize();
177
178     map.setCenter(centre, zoom);
179   });
180
181   $(document).ready(function () {
182     $("#exportanchor").click(function (e) {
183       $.ajax({ url: "<%= url_for :controller => :export, :action => :start %>", success: function (sidebarHtml) {
184         startExport(sidebarHtml);
185       }});
186       e.preventDefault();
187     });
188
189     <% if params[:export] -%>
190     $("#exportanchor").click();
191     <% end -%>
192
193     <% if params[:query] -%>
194     doSearch("<%= params[:query] %>");
195     <% end %>
196   });
197 // -->
198 </script>