Add 'hide areas' button to data view
authorFrederik Ramm <frederik@remote.org>
Sat, 1 May 2010 18:14:53 +0000 (20:14 +0200)
committerTom Hughes <tom@compton.nu>
Sun, 3 Apr 2011 13:54:32 +0000 (14:54 +0100)
app/views/browse/start.rjs

index d4ef1f530ca85b1aa170d6393edbccec7a016fd8..31d7c9ecc80234b6c7763a540696fdfad2f7fbb1 100644 (file)
@@ -9,6 +9,7 @@ page << <<EOJ
   var browseDataLayer;
   var browseSelectControl;
   var browseObjectList;
+  var areasHidden = false;
 
   OpenLayers.Feature.Vector.style['default'].strokeWidth = 3;
   OpenLayers.Feature.Vector.style['default'].cursor = "pointer";
@@ -33,12 +34,15 @@ page << <<EOJ
 
     map.events.register("moveend", map, showData);
     map.events.triggerEvent("moveend");
+    $("browse_hide_areas_box").innerHTML = "#{I18n.t('browse.start_rjs.hide_areas')}";
+    $("browse_hide_areas_box").style.display = "inline";
+    $("browse_hide_areas_box").onclick = hideAreas;
   }
 
   function showData() {
     if (browseMode == "auto") {
       if (map.getZoom() >= 15) {
-          useMap();
+          useMap(false);
       } else {
           setStatus("#{I18n.t('browse.start_rjs.zoom_or_select')}");
       }    
@@ -84,7 +88,7 @@ page << <<EOJ
 
   $("browse_select_box").onclick = startDrag;
 
-  function useMap() {
+  function useMap(reload) {
     var bounds = map.getExtent();
     var projected = bounds.clone().transform(map.getProjectionObject(), epsg4326);
 
@@ -98,7 +102,7 @@ page << <<EOJ
                                              center.lat + (tileHeight / 2));
 
       browseBounds = tileBounds;
-      getData(tileBounds);
+      getData(tileBounds, reload);
 
       browseMode = "auto";
 
@@ -108,6 +112,22 @@ page << <<EOJ
     return false;
   }
 
+  function hideAreas() {
+      $("browse_hide_areas_box").innerHTML = "#{I18n.t('browse.start_rjs.show_areas')}";
+      $("browse_hide_areas_box").style.display = "inline";
+      $("browse_hide_areas_box").onclick = showAreas;
+      areasHidden = true;
+      useMap(true);
+  }
+
+  function showAreas() {
+      $("browse_hide_areas_box").innerHTML = "#{I18n.t('browse.start_rjs.hide_areas')}";
+      $("browse_hide_areas_box").style.display = "inline";
+      $("browse_hide_areas_box").onclick = hideAreas;
+      areasHidden = false; 
+      useMap(true);
+  }
+
   $("browse_select_view").onclick = useMap;
 
   function endDrag(bbox) {
@@ -122,6 +142,7 @@ page << <<EOJ
 
     $("browse_select_box").innerHTML = "#{I18n.t('browse.start_rjs.manually_select')}";
     $("browse_select_view").style.display = "inline";
+
   }
 
   function displayFeatureWarning() {
@@ -181,22 +202,28 @@ page << <<EOJ
     }
   }
 
-  function getData(bounds) {
+  function getData(bounds,reload) {
     var projected = bounds.clone().transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
     var size = projected.getWidth() * projected.getHeight();
 
     if (size > #{MAX_REQUEST_AREA}) {
       setStatus(i18n("#{I18n.t('browse.start_rjs.unable_to_load_size', :max_bbox_size => MAX_REQUEST_AREA)}", { bbox_size: size }));
     } else {
-      loadGML("/api/#{API_VERSION}/map?bbox=" + projected.toBBOX());
+      loadGML("/api/#{API_VERSION}/map?bbox=" + projected.toBBOX(), reload);
     }
   }
 
-  function loadGML(url) {
+  function loadGML(url,reload) {
     setStatus("#{I18n.t('browse.start_rjs.loading')}");
     $("browse_content").innerHTML = "";
 
-    if (!browseDataLayer) {
+    fOptions = {
+      checkTags: true, 
+      interestingTagsExclude: ['source','source_ref','source:ref','history','attribution','created_by','tiger:county','tiger:tlid','tiger:upload_uuid']
+    };
+    if (areasHidden) fOptions.areaTags = [];
+
+    if (!browseDataLayer || reload) {
       var style = new OpenLayers.Style();
 
       style.addRules([new OpenLayers.Rule({
@@ -207,12 +234,11 @@ page << <<EOJ
         }
       })]);
 
+      if (browseDataLayer) browseDataLayer.destroyFeatures();
+
       browseDataLayer = new OpenLayers.Layer.GML("Data", url, {
         format: OpenLayers.Format.OSM,
-        formatOptions: {
-          checkTags: true, 
-          interestingTagsExclude: ['source','source_ref','source:ref','history','attribution','created_by','tiger:county','tiger:tlid','tiger:upload_uuid']
-        },
+        formatOptions: fOptions,
         maxFeatures: 100,
         requestSuccess: customDataLoader,
         displayInLayerSwitcher: false,
@@ -222,6 +248,7 @@ page << <<EOJ
         })
       });
       browseDataLayer.events.register("loadend", browseDataLayer, dataLoaded );
+
       map.addLayer(browseDataLayer);
             
       browseSelectControl = new OpenLayers.Control.SelectFeature(browseDataLayer, { onSelect: onFeatureSelect });
@@ -230,6 +257,8 @@ page << <<EOJ
       map.addControl(browseSelectControl);
       browseSelectControl.activate();
     } else {
+      browseDataLayer.destroyFeatures();
+      browseDataLayer.format(fOptions);
       browseDataLayer.setUrl(url);
     }