]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/browse.js
Consolidate search-related JavaScript
[rails.git] / app / assets / javascripts / index / browse.js
index 5ca29e56822292812b2ba061f50eefd609378180..f00d3999f184d73df82b910127dec5d446b1e44b 100644 (file)
@@ -2,7 +2,7 @@
 //= require templates/browse/feature_list
 //= require templates/browse/feature_history
 
-$(document).ready(function () {
+function initializeBrowse(map) {
   var browseBounds;
   var layersById;
   var selectedLayer;
@@ -10,20 +10,20 @@ $(document).ready(function () {
   var areasHidden = false;
   var locationFilter;
 
-  var dataLayer = new L.OSM.DataLayer(null, {
-    styles: {
-      way: {
-        weight: 3,
-        color: "#000000",
-        opacity: 0.4
-      },
-      area: {
-        weight: 3,
-        color: "#ff0000"
-      },
-      node: {
-        color: "#00ff00"
-      }
+  var dataLayer = map.dataLayer;
+
+  dataLayer.setStyle({
+    way: {
+      weight: 3,
+      color: "#000000",
+      opacity: 0.4
+    },
+    area: {
+      weight: 3,
+      color: "#ff0000"
+    },
+    node: {
+      color: "#00ff00"
     }
   });
 
@@ -35,10 +35,6 @@ $(document).ready(function () {
     onSelect(e.layer);
   });
 
-  if (OSM.STATUS != 'api_offline' && OSM.STATUS != 'database_offline') {
-    map.layersControl.addOverlay(dataLayer, I18n.t("browse.start_rjs.data_layer_name"));
-  }
-
   map.on('layeradd', function (e) {
     if (e.layer === dataLayer) {
       $.ajax({ url: "/browse/start", success: function (sidebarHtml) {
@@ -61,18 +57,17 @@ $(document).ready(function () {
 
     locationFilter.on("change", getData);
 
-    $("#sidebar_title").html(I18n.t('browse.start_rjs.data_frame_title'));
     $("#sidebar_content").html(sidebarHtml);
 
-    openSidebar();
+    if (browseObjectList) loadObjectList();
 
     map.on("moveend", updateData);
     updateData();
 
-    $("#browse_filter_toggle").toggle(enableFilter, disableFilter);
+    $("#browse_filter_toggle").click(toggleFilter);
 
     $("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.hide_areas'));
-    $("#browse_hide_areas_box").toggle(hideAreas, showAreas);
+    $("#browse_hide_areas_box").click(toggleAreas);
 
     $("#sidebar").one("closed", function () {
       map.removeLayer(dataLayer);
@@ -96,28 +91,30 @@ $(document).ready(function () {
     }
   }
 
-  function enableFilter() {
-    $("#browse_filter_toggle").html(I18n.t('browse.start_rjs.view_data'));
-    locationFilter.setBounds(map.getBounds().pad(-0.2));
-    locationFilter.enable();
-    getData();
-  }
+  function toggleFilter() {
+    if (locationFilter.isEnabled()) {
+      $("#browse_filter_toggle").html(I18n.t('browse.start_rjs.manually_select'));
+      locationFilter.disable();
+    } else {
+      $("#browse_filter_toggle").html(I18n.t('browse.start_rjs.view_data'));
+      locationFilter.setBounds(map.getBounds().pad(-0.2));
+      locationFilter.enable();
+    }
 
-  function disableFilter() {
-    $("#browse_filter_toggle").html(I18n.t('browse.start_rjs.manually_select'));
-    locationFilter.disable();
     getData();
   }
 
-  function hideAreas() {
-    $("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.show_areas'));
-    areasHidden = true;
-    getData();
-  }
+  function toggleAreas(e) {
+    e.preventDefault();
+
+    if (areasHidden) {
+      $("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.hide_areas'));
+      areasHidden = false;
+    } else {
+      $("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.show_areas'));
+      areasHidden = true;
+    }
 
-  function showAreas() {
-    $("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.hide_areas'));
-    areasHidden = false;
     getData();
   }
 
@@ -140,6 +137,8 @@ $(document).ready(function () {
     $("#browse_content").append(div);
   }
 
+  var dataLoader;
+
   function getData() {
     var bounds = locationFilter.isEnabled() ? locationFilter.getBounds() : map.getBounds();
     var size = bounds.getSize();
@@ -151,7 +150,7 @@ $(document).ready(function () {
 
     setStatus(I18n.t('browse.start_rjs.loading'));
 
-    var url = "/api/" + OSM.API_VERSION + "/map?bbox=" + bounds.toBBOX();
+    var url = "/api/" + OSM.API_VERSION + "/map?bbox=" + bounds.toBBoxString();
 
     /*
      * Modern browsers are quite happy showing far more than 100 features in
@@ -168,7 +167,9 @@ $(document).ready(function () {
       }
     @*/
 
-    $.ajax({
+    if (dataLoader) dataLoader.abort();
+
+    dataLoader = $.ajax({
       url: url,
       success: function (xml) {
         clearStatus();
@@ -207,6 +208,8 @@ $(document).ready(function () {
         } else {
           displayFeatureWarning(features.length, maxFeatures, addFeatures);
         }
+
+        dataLoader = null;
       }
     });
   }
@@ -327,4 +330,4 @@ $(document).ready(function () {
     $("#browse_status").html("");
     $("#browse_status").hide();
   }
-});
+}