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