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