]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index.js
Convert search to pushState
[rails.git] / app / assets / javascripts / index.js
index d57b76b280be1c547790882398b674cd52746bf5..91855f823c295407dd9dce453f9e0c1cfc55db71 100644 (file)
@@ -9,6 +9,8 @@
 //= require index/browse
 //= require index/export
 //= require index/notes
+//= require index/changeset
+//= require router
 
 $(document).ready(function () {
   var params = OSM.mapParams();
@@ -139,15 +141,14 @@ $(document).ready(function () {
       map.getCenter().wrap(),
       map.getZoom(),
       map.getLayersCode(),
-      map.getBounds().wrap(),
       map._object);
 
-      var expiry = new Date();
-      expiry.setYear(expiry.getFullYear() + 10);
-      $.cookie("_osm_location", cookieContent(map), { expires: expiry });
+    var expiry = new Date();
+    expiry.setYear(expiry.getFullYear() + 10);
+    $.cookie("_osm_location", cookieContent(map), { expires: expiry });
 
-      // Trigger hash update on layer changes.
-      map.hash.onMapMove();
+    // Trigger hash update on layer changes.
+    map.hash.onMapMove();
   });
 
   if (OSM.PIWIK) {
@@ -176,10 +177,6 @@ $(document).ready(function () {
     marker.setLatLng([params.mlat, params.mlon]).addTo(map);
   }
 
-  if (params.object) {
-    map.addObject(params.object, { zoom: params.object_zoom });
-  }
-
   $("#homeanchor").on("click", function(e) {
     e.preventDefault();
 
@@ -213,10 +210,61 @@ $(document).ready(function () {
     });
   }
 
-  initializeSearch(map);
-  initializeExport(map);
   initializeBrowse(map, params);
   initializeNotes(map, params);
 
-  if ('undefined' !== typeof initializeChangesets) initializeChangesets(map);
+  OSM.Index = function(map) {
+    var page = {};
+
+    page.pushstate = page.popstate = function(path) {
+      $("#view_tab").addClass("current");
+      $('#sidebar_content').load(path);
+    };
+
+    page.unload = function() {
+      $("#view_tab").removeClass("current");
+    };
+
+    return page;
+  };
+
+  OSM.Browse = function(map) {
+    var page = {};
+
+    page.pushstate = page.popstate = function(path) {
+      $('#sidebar_content').load(path, page.load);
+    };
+
+    page.load = function() {
+      map.addObject(OSM.mapParams().object, {zoom: true});
+    };
+
+    page.unload = function() {
+      map.removeObject();
+    };
+
+    return page;
+  };
+
+  var router = OSM.Router({
+    "/":                           OSM.Index(map),
+    "/search":                     OSM.Search(map),
+    "/export":                     OSM.Export(map),
+    "/browse/changesets":          OSM.ChangesetList(map),
+    "/browse/:type/:id(/history)": OSM.Browse(map)
+  });
+
+  $(document).on("click", "a", function(e) {
+    if (router(this.pathname + this.search + this.hash)) e.preventDefault();
+  });
+
+  $("#search_form").on("submit", function(e) {
+    e.preventDefault();
+    router("/search?query=" + encodeURIComponent($("#query").val()) + OSM.formatHash(map));
+  });
+
+  $("#describe_location").on("click", function(e) {
+    e.preventDefault();
+    router("/search?query=" + encodeURIComponent(map.getCenter().lat + "," + map.getCenter().lng));
+  });
 });