]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/index.js
Add leaflet-locate control, invisible currently.
[rails.git] / app / assets / javascripts / index.js
1 //= require_self
2 //= require index/browse
3 //= require index/export
4 //= require index/key
5 //= require index/notes
6 //= require index/map_ui
7
8 $(document).ready(function () {
9   var permalinks = $("#permalink").detach().html();
10   var marker;
11   var params = OSM.mapParams();
12   var map = createMap("map", {
13     layerControl: false
14   }, {
15     locateControl: true
16   });
17
18   OSM.mapUI().addTo(map);
19
20   L.control.scale().addTo(map);
21
22   map.attributionControl.setPrefix(permalinks);
23
24   map.on("moveend layeradd layerremove", updateLocation);
25
26   if (!params.object_zoom) {
27     if (params.bbox) {
28       var bbox = L.latLngBounds([params.minlat, params.minlon],
29                                 [params.maxlat, params.maxlon]);
30
31       map.fitBounds(bbox);
32
33       if (params.box) {
34         addBoxToMap(bbox);
35       }
36     } else {
37       map.setView([params.lat, params.lon], params.zoom);
38     }
39   }
40
41   if (params.layers) {
42     setMapLayers(params.layers);
43   }
44
45   if (params.marker) {
46     marker = L.marker([params.mlat, params.mlon], {icon: getUserIcon()}).addTo(map);
47   }
48
49   if (params.object) {
50     addObjectToMap(params.object, { zoom: params.object_zoom });
51   }
52
53   handleResize();
54
55   $("body").on("click", "a.set_position", function (e) {
56     e.preventDefault();
57
58     var data = $(this).data();
59     var centre = L.latLng(data.lat, data.lon);
60
61     if (data.minLon && data.minLat && data.maxLon && data.maxLat) {
62       map.fitBounds([[data.minLat, data.minLon],
63                      [data.maxLat, data.maxLon]]);
64     } else {
65       map.setView(centre, data.zoom);
66     }
67
68     if (data.type && data.id) {
69       addObjectToMap(data, { zoom: true, style: { opacity: 0.2, fill: false } });
70     }
71
72     if (marker) {
73       map.removeLayer(marker);
74     }
75
76     marker = L.marker(centre, {icon: getUserIcon()}).addTo(map);
77   });
78
79   function updateLocation() {
80     var center = map.getCenter().wrap();
81     var zoom = map.getZoom();
82     var layers = getMapLayers();
83     var extents = map.getBounds().wrap();
84
85     updatelinks(center.lng,
86                 center.lat,
87                 zoom,
88                 layers,
89                 extents.getWest(),
90                 extents.getSouth(),
91                 extents.getEast(),
92                 extents.getNorth(),
93                 params.object);
94
95     var expiry = new Date();
96     expiry.setYear(expiry.getFullYear() + 10);
97     $.cookie("_osm_location", [center.lng, center.lat, zoom, layers].join("|"), {expires: expiry});
98   }
99
100   function remoteEditHandler() {
101     var extent = map.getBounds();
102     var loaded = false;
103
104     $("#linkloader").load(function () { loaded = true; });
105     $("#linkloader").attr("src", "http://127.0.0.1:8111/load_and_zoom?left=" + extent.getWest()
106                                                                    + "&bottom=" + extent.getSouth()
107                                                                    + "&right=" + extent.getEast()
108                                                                    + "&top=" + extent.getNorth());
109
110     setTimeout(function () {
111       if (!loaded) alert(I18n.t('site.index.remote_failed'));
112     }, 1000);
113
114     return false;
115   }
116
117   $("a[data-editor=remote]").click(remoteEditHandler);
118
119   if (OSM.preferred_editor == "remote" && $('body').hasClass("site-edit")) {
120     remoteEditHandler();
121   }
122
123   $(window).resize(handleResize);
124
125   $("#search_form").submit(function () {
126     var bounds = map.getBounds();
127
128     $("#sidebar_title").html(I18n.t('site.sidebar.search_results'));
129     $("#sidebar_content").load($(this).attr("action"), {
130       query: $("#query").val(),
131       minlon: bounds.getWest(),
132       minlat: bounds.getSouth(),
133       maxlon: bounds.getEast(),
134       maxlat: bounds.getNorth()
135     }, openSidebar);
136
137     return false;
138   });
139
140   if ($("#query").val()) {
141     $("#search_form").submit();
142   }
143
144   // Focus the search field for browsers that don't support
145   // the HTML5 'autofocus' attribute
146   if (!("autofocus" in document.createElement("input"))) {
147     $("#query").focus();
148   }
149 });