X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/cb5e6ebfaaa6e4b89ae259f502a6a3b2bc716d05..e660e609661edadc1ed5ad49d6e83e936b2f91cd:/app/views/site/index.html.erb diff --git a/app/views/site/index.html.erb b/app/views/site/index.html.erb index 0c47227f8..884896109 100644 --- a/app/views/site/index.html.erb +++ b/app/views/site/index.html.erb @@ -20,6 +20,7 @@ @@ -131,6 +132,10 @@ end OpenLayers.Lang.setCode("<%= I18n.locale.to_s %>"); + <% if @user %> + var loginName = "<%= @user.display_name %>" + <% end %> + function mapInit(){ map = createMap("map"); @@ -138,6 +143,65 @@ end map.dataLayer = new OpenLayers.Layer("<%= I18n.t 'browse.start_rjs.data_layer_name' %>", { "visibility": false }); map.dataLayer.events.register("visibilitychanged", map.dataLayer, toggleData); map.addLayer(map.dataLayer); + + map.noteLayer = new OpenLayers.Layer.Vector("Notes", { + visibility: false, + projection: new OpenLayers.Projection("EPSG:4326"), + styleMap: new OpenLayers.StyleMap(new OpenLayers.Style({ + graphicWidth: 22, + graphicHeight: 22, + graphicOpacity: 0.7, + graphicXOffset: -11, + graphicYOffset: -11 + }, { + rules: [ + new OpenLayers.Rule({ + filter: new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.EQUAL_TO, + property: "status", + value: "open" + }), + symbolizer: { + externalGraphic: "<%= image_path 'open_note_marker.png' %>" + } + }), + new OpenLayers.Rule({ + filter: new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.EQUAL_TO, + property: "status", + value: "closed" + }), + symbolizer: { + externalGraphic: "<%= image_path 'closed_note_marker.png' %>" + } + }) + ] + })), + strategies: [ + new OpenLayers.Strategy.BBOX() + ], + protocol: new OpenLayers.Protocol.HTTP({ + url: "<%= url_for :controller => :note, :action => :list, :format => :json %>", + format: new OpenLayers.Format.GeoJSON(), + callback: noteCallback + }) + }); + map.noteLayer.events.register("featureselected", map, noteSelected); + map.noteLayer.events.register("featureunselected", map, noteUnselected); + map.addLayer(map.noteLayer); + + map.noteControl = new OpenLayers.Control.SelectFeature(map.noteLayer, { + autoActivate: true + }); + map.addControl(map.noteControl); + + <% if params[:notes] == "yes" -%> + map.noteLayer.setVisibility(true); + <% end -%> + + $("#createnoteanchor").click(addNote); + + map.events.register("zoomend", map, allowNoteReports); <% end %> <% unless object_zoom %> @@ -265,6 +329,46 @@ end <% end %> } + function noteCallback(scope, response) { + for (var f = 0; f < response.features.length; f++) { + var feature = response.features[f]; + } + } + + function noteSelected(o) { + var feature = o.feature; + var location = feature.geometry.getBounds().getCenterLonLat(); + + feature.popup = new OpenLayers.Popup.FramedCloud( + feature.attributes.id, location, null, + "

" + feature.attributes.id + "

", + null, true, function (e) { map.noteControl.unselect(feature) } + ); + + map.addPopup(feature.popup); +// feature.popup.show(); + } + + function noteUnselected(o) { + var feature = o.feature; + + map.removePopup(feature.popup); + delete feature.popup; + } + + function addNote() { + map.noteLayer.setVisibility(true); + map.noteLayer.addNote(map.getCenter()); + } + + function allowNoteReports() { + if (map.getZoom() > 11) { + $("#createnoteanchor").show(); + } else { + $("#createnoteanchor").hide(); + } + } + $(document).ready(mapInit); $(document).ready(installEditHandler); $(document).ready(handleResize);