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