]> git.openstreetmap.org Git - rails.git/blobdiff - app/views/browse/start.rjs
define type earlier
[rails.git] / app / views / browse / start.rjs
index dbe70695f401acc254ee52401d6629e2d08f2c3e..783c387b2021b69099a99d1a26e6d39f347d4090 100644 (file)
@@ -2,7 +2,7 @@ page.replace_html :sidebar_title, 'Data'
 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";
     
@@ -22,6 +22,8 @@ page << <<EOJ
         map.addControl(box);
         map.events.register("moveend", map, showData);
         map.events.triggerEvent("moveend");
+        map.dataLayer.stopBrowse = stopBrowse;
+        browsing = true;
     }
 
     function showData() {
@@ -34,19 +36,24 @@ page << <<EOJ
     }
     
     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() {
@@ -72,7 +79,6 @@ page << <<EOJ
             currentBounds = tileBounds;
             getData(tileBounds);
             mode = "auto";
-            $("drag_box").style.display="inline";
             $("use_map").style.display="none";
         }
         return false;
@@ -82,11 +88,11 @@ page << <<EOJ
     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() {
@@ -111,6 +117,7 @@ page << <<EOJ
     }    
 
     function customDataLoader(request) { 
+        if (!browsing) { return; } 
         var doc = request.responseXML;
         
         if (!doc || !doc.documentElement) {
@@ -165,6 +172,7 @@ page << <<EOJ
             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}})
                     }
             );
@@ -183,10 +191,13 @@ page << <<EOJ
 
         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]; 
             
@@ -208,10 +219,16 @@ page << <<EOJ
             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() {
@@ -262,18 +279,23 @@ page << <<EOJ
         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");
@@ -283,16 +305,16 @@ page << <<EOJ
             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; 
     }   
@@ -306,7 +328,7 @@ page << <<EOJ
         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"); 
@@ -314,7 +336,7 @@ page << <<EOJ
         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");
@@ -322,6 +344,10 @@ page << <<EOJ
             history.appendChild(item);
         }
         div.appendChild(history);
+        var link = document.createElement("a");
+        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); 
     }