]> git.openstreetmap.org Git - rails.git/blob - public/javascripts/site.js
Fix multiple issues with links to /history from the homepage. Thanks to Ed Avis for...
[rails.git] / public / javascripts / site.js
1 //Called as the user scrolls/zooms around.
2 //Maniplate hrefs of the view tab and various other links
3 function updatelinks(lon,lat,zoom,layers,extents) {
4   var decimals = Math.pow(10, Math.floor(zoom/3));
5   var node;
6
7   lat = Math.round(lat * decimals) / decimals;
8   lon = Math.round(lon * decimals) / decimals;
9
10   node = document.getElementById("permalinkanchor");
11   if (node) {
12     var args = getArgs(node.href);
13     args["lat"] = lat;
14     args["lon"] = lon;
15     args["zoom"] = zoom;
16     if (layers) {
17       args["layers"] = layers;
18     }
19     node.href = setArgs(node.href, args);
20   }
21
22   node = document.getElementById("viewanchor");
23   if (node) {
24     var args = getArgs(node.href);
25     args["lat"] = lat;
26     args["lon"] = lon;
27     args["zoom"] = zoom;
28     if (layers) {
29       args["layers"] = layers;
30     }
31     node.href = setArgs(node.href, args);
32   }
33
34   node = document.getElementById("exportanchor");
35   if (node) {
36     var args = getArgs(node.href);
37     args["lat"] = lat;
38     args["lon"] = lon;
39     args["zoom"] = zoom;
40     if (layers) {
41       args["layers"] = layers;
42     }
43     node.href = setArgs(node.href, args);
44   }
45
46   node = document.getElementById("editanchor");
47   if (node) {
48     if (zoom >= 11) {
49       var args = new Object();
50       args.lat = lat;
51       args.lon = lon;
52       args.zoom = zoom;
53       node.href = setArgs("/edit", args);
54       node.style.fontStyle = 'normal';
55     } else {
56       node.href = 'javascript:alert("zoom in to edit map");';
57       node.style.fontStyle = 'italic';
58     }
59   }
60   
61   node = document.getElementById("historyanchor");
62   if (node) {
63     if (zoom >= 11) {
64       var args = new Object();
65       //set bbox param from 'extents' object
66       minlon = extents.left;
67       minlat = extents.bottom;
68       maxlon = extents.right;
69       maxlat = extents.top;
70       minlon = Math.round(minlon * decimals) / decimals;
71       minlat = Math.round(minlat * decimals) / decimals;
72       maxlon = Math.round(maxlon * decimals) / decimals;
73       maxlat = Math.round(maxlat * decimals) / decimals;
74       args.bbox = minlon + "," + minlat + "," + maxlon + "," + maxlat;
75       node.href = setArgs("/history", args);
76       node.style.fontStyle = 'normal';
77     } else {
78       node.href = 'javascript:alert("zoom in to see editing history");';
79       node.style.fontStyle = 'italic';
80     }
81   }
82 }
83
84 function getArgs(url) {
85   var args = new Object();
86   var querystart = url.indexOf("?");
87
88   if (querystart >= 0) {
89      var querystring = url.substring(querystart + 1);
90      var queryitems = querystring.split("&");
91
92      for (var i = 0; i < queryitems.length; i++) {
93         if (match = queryitems[i].match(/^(.*)=(.*)$/)) {
94            args[unescape(match[1])] = unescape(match[2]);
95         } else {
96            args[unescape(queryitems[i])] = null
97         }
98      }
99   }
100
101   return args;
102 }
103
104 function setArgs(url, args) {
105    var queryitems = new Array();
106
107    for (arg in args)
108    {
109       if (args[arg] == null) {
110          queryitems.push(escape(arg));
111       } else {
112          queryitems.push(escape(arg) + "=" + escape(args[arg]));
113       }
114    }
115
116    return url.replace(/\?.*$/, "") + "?" + queryitems.join("&");
117 }
118
119 function getStyle(el, property) {
120   var style;
121
122   if (el.currentStyle) {
123     style = el.currentStyle[property];
124   } else if( window.getComputedStyle ) {
125     style = document.defaultView.getComputedStyle(el,null).getPropertyValue(property);
126   } else {
127     style = el.style[property];
128   }
129
130   return style;
131 }