]> git.openstreetmap.org Git - rails.git/blob - public/javascripts/site.js
d381c02314d2b9e7761fa0fac387a05b266c444d
[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       //conjure a bounding box centred at the lat/lon.
66       //TODO: feed actual bounds of the window through to here somehow.
67       minlon = extents.left;
68       minlat = extents.bottom;
69       maxlon = extents.right;
70       maxlat = extents.top;
71       minlon = Math.round(minlon * decimals) / decimals;
72       minlat = Math.round(minlat * decimals) / decimals;
73       maxlon = Math.round(maxlon * decimals) / decimals;
74       maxlat = Math.round(maxlat * decimals) / decimals;
75       args.bbox = minlon + "," + minlat + "," + maxlon + "," + maxlat;
76       node.href = setArgs("history/", args);
77       node.style.fontStyle = 'normal';
78     } else {
79       node.href = 'javascript:alert("zoom in to see editing history");';
80       node.style.fontStyle = 'italic';
81     }
82   }
83 }
84
85 function getArgs(url) {
86   var args = new Object();
87   var querystart = url.indexOf("?");
88
89   if (querystart >= 0) {
90      var querystring = url.substring(querystart + 1);
91      var queryitems = querystring.split("&");
92
93      for (var i = 0; i < queryitems.length; i++) {
94         if (match = queryitems[i].match(/^(.*)=(.*)$/)) {
95            args[unescape(match[1])] = unescape(match[2]);
96         } else {
97            args[unescape(queryitems[i])] = null
98         }
99      }
100   }
101
102   return args;
103 }
104
105 function setArgs(url, args) {
106    var queryitems = new Array();
107
108    for (arg in args)
109    {
110       if (args[arg] == null) {
111          queryitems.push(escape(arg));
112       } else {
113          queryitems.push(escape(arg) + "=" + escape(args[arg]));
114       }
115    }
116
117    return url.replace(/\?.*$/, "") + "?" + queryitems.join("&");
118 }
119
120 function getStyle(el, property) {
121   var style;
122
123   if (el.currentStyle) {
124     style = el.currentStyle[property];
125   } else if( window.getComputedStyle ) {
126     style = document.defaultView.getComputedStyle(el,null).getPropertyValue(property);
127   } else {
128     style = el.style[property];
129   }
130
131   return style;
132 }