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