page.replace_html :sidebar_content, :partial => 'start'
page << <<EOJ
- var gml, sf, objList, currentFeature, featureList, mode = "auto", currentBounds;
+ var gml, sf, objList, currentFeature, featureList, mode = "auto", currentBounds, browsing;
OpenLayers.Feature.Vector.style['default'].strokeWidth = 3;
OpenLayers.Feature.Vector.style['default'].cursor = "pointer";
map.addControl(box);
map.events.register("moveend", map, showData);
map.events.triggerEvent("moveend");
+ map.dataLayer.stopBrowse = stopBrowse;
+ browsing = true;
}
function showData() {
}
function stopBrowse() {
- if (gml) {
- gml.destroy();
- gml = null;
- }
- if (sf) {
- sf.destroy();
- sf = null;
- }
- if (currentFeature) {
- currentFeature.destroy();
- currentFeature = null;
- }
- map.events.unregister("moveend", map, showData);
+ if (browsing) {
+ browsing = false;
+ map.dataLayer.stopBrowse = null;
+ if (gml) {
+ gml.destroy();
+ gml = null;
+ }
+ if (sf) {
+ sf.destroy();
+ sf = null;
+ }
+ if (currentFeature) {
+ currentFeature.destroy();
+ currentFeature = null;
+ }
+ map.dataLayer.setVisibility(false);
+ map.events.unregister("moveend", map, showData);
+ }
}
function startDrag() {
currentBounds = tileBounds;
getData(tileBounds);
mode = "auto";
- $("drag_box").style.display="inline";
$("use_map").style.display="none";
}
return false;
function endDrag(bbox) {
var bounds = bbox.getBounds();
box.deactivate();
+ currentBounds = bounds;
getData(bounds);
$("drag_box").innerHTML = "Manually select a different area";
mode = "manual";
$("use_map").style.display="inline";
- $("drag_box").style.display="none";
}
function displayFeatureWarning() {
}
function customDataLoader(request) {
+ if (!browsing) { return; }
var doc = request.responseXML;
if (!doc || !doc.documentElement) {
gml = new OpenLayers.Layer.GML("Data",url,
{format: OpenLayers.Format.OSM, formatOptions: {checkTags: true},
maxFeatures: 100, requestSuccess: customDataLoader,
+ displayInLayerSwitcher: false,
styleMap: new OpenLayers.StyleMap({'default': style, 'select': {'strokeColor': '#0000ff', strokeWidth: 8}})
}
);
currentFeature = null;
}
- function dataLoaded() {
- $("status").innerHTML = "Loaded " + this.features.length + " features. (<a href='"+ this.url+"'>API</a>)";
+ function dataLoaded() {
+ if (!browsing) { return; }
+ $("status").innerHTML = "Loaded."
- objList = document.createElement("ul");
+ objList = document.createElement("div")
+
+ list = document.createElement("ul");
for (var i = 0; i < this.features.length; i++) {
var feature = this.features[i];
link.onclick = OpenLayers.Function.bind(viewFeatureLink, link);
li.appendChild(link);
- objList.appendChild(li);
+ list.appendChild(li);
}
+ objList.appendChild(list)
+ var link = document.createElement("a");
+ link.href = this.url;
+ link.appendChild(document.createTextNode("API"));
+ objList.appendChild(link)
$("object").innerHTML = "";
$("object").appendChild(objList);
+
}
function viewFeatureLink() {
div.appendChild(link)
$("object").appendChild(div);
- // Now the list of attributes
- var ul = document.createElement("ul");
var type = "way";
if (feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
type = "node";
}
- var li = document.createElement("li");
+
var link = document.createElement("a");
link.href = "/browse/"+type+"/"+feature.osm_id;
- link.appendChild(document.createTextNode(feature.osm_id));
- li.appendChild(link);
- ul.appendChild(li);
+ link.appendChild(document.createTextNode("Database entry for " + feature.osm_id));
+
+ var div = document.createElement("div");
+ div.style.marginTop = "20px"
+ div.appendChild(link);
+
+ $("object").appendChild(div);
+
+ // Now the list of attributes
+ var ul = document.createElement("ul");
for (var key in feature.attributes) {
var li = document.createElement("li");
var b = document.createElement("b");
ul.appendChild(li);
}
- var li = document.createElement("li");
+ $("object").appendChild(ul);
+
var link = document.createElement("a");
link.href = "/browse/"+type+"/"+feature.osm_id+"/history";
link.appendChild(document.createTextNode("History"));
- li.appendChild(link);
ul.appendChild(li);
link.onclick = OpenLayers.Function.bind(loadHistory, {type: type, feature: feature, link: link});
- $("object").appendChild(ul);
-
+ $("object").appendChild(link);
+
// Stash the currently drawn feature
currentFeature = feature;
}
if (currentFeature.osm_id != this.feature.osm_id || $("object").firstChild == objList) {
return false;
}
- this.link.parentNode.parentNode.removeChild(this.link.parentNode);
+ this.link.parentNode.removeChild(this.link);
var doc = request.responseXML;
var div = document.createElement("div");
var h3 = document.createElement("h3");
div.appendChild(h3);
var nodes = doc.getElementsByTagName(this.type);
var history = document.createElement("ul");
- for (var i = 0; i < nodes.length; i++) {
+ for (var i = nodes.length - 1; i >= 0; i--) {
var user = nodes[i].getAttribute("user") || "private user";
var timestamp = nodes[i].getAttribute("timestamp");
var item = document.createElement("li");
}
div.appendChild(history);
var link = document.createElement("a");
- link.appendChild(document.createTextNode("History"));
+ link.appendChild(document.createTextNode("History entry for " + this.feature.osm_id));
link.href = "/browse/"+this.type+"/"+this.feature.osm_id+"/history";
div.appendChild(link);
$("object").appendChild(div);