4edee5952664d3fd1ab6adef034275e2c568a5c2
[rails.git] / app / assets / javascripts / browse.js
1 $(document).ready(function () {
2   function remoteEditHandler(bbox, select) {
3     var left = bbox.getWest() - 0.0001;
4     var top = bbox.getNorth() + 0.0001;
5     var right = bbox.getEast() + 0.0001;
6     var bottom = bbox.getSouth() - 0.0001;
7     var loaded = false;
8
9     $("#linkloader").load(function () { loaded = true; });
10
11     if (select) {
12       $("#linkloader").attr("src", "http://127.0.0.1:8111/load_and_zoom?" +
13         querystring.stringify({
14             left: left,
15             top: top,
16             right: right,
17             bottom: bottom,
18             select: select
19         }));
20     } else {
21       $("#linkloader").attr("src", "http://127.0.0.1:8111/load_and_zoom?" + querystring.stringify({
22             left: left,
23             top: top,
24             right: right,
25             bottom: bottom
26         }));
27     }
28
29     setTimeout(function () {
30       if (!loaded) alert(I18n.t('site.index.remote_failed'));
31     }, 1000);
32
33     return false;
34   }
35
36   var map = L.map("small_map", {
37     attributionControl: false,
38     zoomControl: false
39   }).addLayer(new L.OSM.Mapnik());
40
41   L.control.zoom({position: 'topright'})
42     .addTo(map);
43
44   $("#small_map").on("resized", function () {
45     map.invalidateSize();
46   });
47
48   var params = $("#small_map").data();
49   var object, bbox;
50   if (params.type == "changeset") {
51     bbox = L.latLngBounds([params.minlat, params.minlon],
52         [params.maxlat, params.maxlon]);
53
54     map.fitBounds(bbox);
55
56     L.rectangle(bbox, {
57       weight: 2,
58       color: '#e90',
59       fillOpacity: 0
60     }).addTo(map);
61
62     $("#loading").hide();
63     $("#browse_map .geolink").show();
64
65     $("a[data-editor=remote]").click(function () {
66       return remoteEditHandler(bbox);
67     });
68
69     updatelinks(map.getCenter(), 16, null, [[params.minlat, params.minlon],
70         [params.maxlat, params.maxlon]]);
71   } else if (params.type == "note") {
72     object = {type: params.type, id: params.id};
73
74     map.setView([params.lat, params.lon], 16);
75
76     L.marker([params.lat, params.lon], { icon: getUserIcon() }).addTo(map);
77
78     bbox = map.getBounds();
79
80     $("#loading").hide();
81     $("#browse_map .geolink").show();
82
83     $("a[data-editor=remote]").click(function () {
84       return remoteEditHandler(bbox);
85     });
86
87     updatelinks(params, 16, null,
88                 bbox.getWest(), bbox.getSouth(),
89                 bbox.getEast(), bbox.getNorth(),
90                 object);
91   } else {
92     $("#object_larger_map, #object_edit").hide();
93
94     object = {type: params.type, id: params.id};
95
96     if (!params.visible) {
97       object.version = params.version - 1;
98     }
99
100     addObjectToMap(object, map, {
101       zoom: true, 
102       callback: function(extent) {
103         $("#loading").hide();
104         $("#browse_map .geolink").show();
105
106         if (extent) {
107           $("a.bbox[data-editor=remote]").click(function () {
108             return remoteEditHandler(extent);
109           });
110
111           $("a.object[data-editor=remote]").click(function () {
112             return remoteEditHandler(extent, params.type + params.id);
113           });
114
115           $("#object_larger_map").show();
116           $("#object_edit").show();
117
118           updatelinks(map.getCenter(), 16, null, extent, object);
119         } else {
120           $("#small_map").hide();
121         }
122       }
123     });
124   }
125
126   createMenu("area_edit", "area_edit_menu", "right");
127   createMenu("object_edit", "object_edit_menu", "right");
128 });