Refactor browsed object loading
authorJohn Firebaugh <john.firebaugh@gmail.com>
Fri, 4 Oct 2013 21:37:22 +0000 (14:37 -0700)
committerJohn Firebaugh <john.firebaugh@gmail.com>
Sun, 13 Oct 2013 21:46:08 +0000 (14:46 -0700)
app/assets/javascripts/index.js
app/assets/javascripts/index/notes.js.erb
app/assets/javascripts/osm.js.erb
app/assets/javascripts/templates/notes/show.jst.ejs

index 7c65f35c3b0992e96f50434ebed5dc3b71460dca..3dd9e78d800581596c1943a8a795e1567ea47f36 100644 (file)
@@ -173,16 +173,14 @@ $(document).ready(function () {
     });
   }
 
-  var marker = L.marker([0, 0], {icon: getUserIcon()});
-
-  if (!params.object_zoom) {
-    if (params.bounds) {
-      map.fitBounds(params.bounds);
-    } else {
-      map.setView([params.lat, params.lon], params.zoom);
-    }
+  if (params.bounds) {
+    map.fitBounds(params.bounds);
+  } else {
+    map.setView([params.lat, params.lon], params.zoom);
   }
 
+  var marker = L.marker([0, 0], {icon: getUserIcon()});
+
   if (params.marker) {
     marker.setLatLng([params.mlat, params.mlon]).addTo(map);
   }
@@ -220,8 +218,8 @@ $(document).ready(function () {
     });
   }
 
-  initializeBrowse(map, params);
-  initializeNotes(map, params);
+  initializeBrowse(map);
+  initializeNotes(map);
 
   OSM.Index = function(map) {
     var page = {};
@@ -241,12 +239,20 @@ $(document).ready(function () {
   OSM.Browse = function(map) {
     var page = {};
 
-    page.pushstate = page.popstate = function(path) {
-      $('#sidebar_content').load(path, page.load);
+    page.pushstate = page.popstate = function(path, type, id) {
+      $('#sidebar_content').load(path, function() {
+        page.load(path, type, id);
+      });
     };
 
-    page.load = function() {
-      map.addObject(OSM.mapParams().object, {zoom: true});
+    page.load = function(path, type, id) {
+      if (OSM.STATUS === 'api_offline' || OSM.STATUS === 'database_offline') return;
+
+      if (type === 'note') {
+        map.noteLayer.showNote(parseInt(id));
+      } else {
+        map.addObject({type: type, id: parseInt(id)}, {zoom: true});
+      }
     };
 
     page.unload = function() {
index a30a4919be833c989af2d12f621f21513a2e1bda..4538e9968cb9bfc22438c6b416cd3e6f7167f676 100644 (file)
@@ -1,7 +1,7 @@
 //= require templates/notes/show
 //= require templates/notes/new
 
-function initializeNotes(map, params) {
+function initializeNotes(map) {
   var noteLayer = map.noteLayer,
       notes = {},
       newNote;
@@ -48,19 +48,17 @@ function initializeNotes(map, params) {
     }
   });
 
-  if (OSM.STATUS != 'api_offline' && OSM.STATUS != 'database_offline') {
-    if (params.note) {
-      $.ajax({
-        url: "/api/" + OSM.API_VERSION + "/notes/" + params.note + ".json",
-        success: function (feature) {
-          var marker = updateMarker(notes[feature.properties.id], feature);
-          notes[feature.properties.id] = marker;
-          map.addLayer(noteLayer);
-          marker.openPopup();
-        }
-      });
-    }
-  }
+  noteLayer.showNote = function(id) {
+    $.ajax({
+      url: "/api/" + OSM.API_VERSION + "/notes/" + id + ".json",
+      success: function (feature) {
+        var marker = updateMarker(notes[feature.properties.id], feature);
+        notes[feature.properties.id] = marker;
+        map.addLayer(noteLayer);
+        marker.openPopup();
+      }
+    });
+  };
 
   function updateMarker(marker, feature) {
     if (marker) {
index 215d5b7ca220e746456fa077584b140cd6277b54..59d880efc7913a9fea9854270ca98c58216cbe49 100644 (file)
@@ -46,27 +46,12 @@ OSM = {
       mapParams.mlat = parseFloat(params.mlat);
     }
 
-    match = window.location.pathname.match(/\/browse\/(node|way|relation|changeset)\/(\d+)/);
-    if (match) {
-      mapParams.object_zoom = true;
-      mapParams.object = {type: match[1], id: parseInt(match[2])};
-    } else if (params.node || params.way || params.relation || params.note) {
-      mapParams.object_zoom = true;
-
-      if (params.node) {
-        mapParams.object = {type: 'node', id: parseInt(params.node)};
-      } else if (params.way) {
-        mapParams.object = {type: 'way', id: parseInt(params.way)};
-      } else if (params.relation) {
-        mapParams.object = {type: 'relation', id: parseInt(params.relation)};
-      }
-    }
-
-    match = window.location.pathname.match(/\/browse\/note\/(\d+)/);
-    if (match) {
-      mapParams.note = parseInt(match[1]);
-    } else if (params.note) {
-      mapParams.note = parseInt(params.note);
+    if (params.node) {
+      mapParams.object = {type: 'node', id: parseInt(params.node)};
+    } else if (params.way) {
+      mapParams.object = {type: 'way', id: parseInt(params.way)};
+    } else if (params.relation) {
+      mapParams.object = {type: 'relation', id: parseInt(params.relation)};
     }
 
     var hash = OSM.parseHash(location.hash);
@@ -76,17 +61,14 @@ OSM = {
       mapParams.lon = hash.center.lng;
       mapParams.lat = hash.center.lat;
       mapParams.zoom = hash.zoom;
-      mapParams.object_zoom = false;
     } else if (params.lon && params.lat) {
       mapParams.lon = parseFloat(params.lon);
       mapParams.lat = parseFloat(params.lat);
       mapParams.zoom = parseInt(params.zoom || 5);
-      mapParams.object_zoom = false;
     } else if (params.mlon && params.mlat) {
       mapParams.lon = parseFloat(params.mlon);
       mapParams.lat = parseFloat(params.mlat);
       mapParams.zoom = parseInt(params.zoom || 12);
-      mapParams.object_zoom = false;
     } else if (loc = $.cookie('_osm_location')) {
       loc = loc.split("|");
       mapParams.lon = parseFloat(loc[0]);
index bea60ed4a5983cc9c00806b55ca71487a8767cca..2402591403b9f4df81f147112f996dcd8795df17 100644 (file)
@@ -1,5 +1,5 @@
 <div class="note">
-  <a class="icon link permalink deemphasize" href="/?note=<%- note.id %>"><span><%- I18n.t('javascripts.notes.show.permalink', { id: note.id }) %></span></a>
+  <a class="icon link permalink deemphasize" href="/browse/note/<%- note.id %>"><span><%- I18n.t('javascripts.notes.show.permalink', { id: note.id }) %></span></a>
   <% if (note.comments.some(function (comment) { return !comment.user })) { %>
   <small class="warning"><%- I18n.t('javascripts.notes.show.anonymous_warning') %></small>
   <% } %>