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