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