From cd2d2909805aeb2f10d7cb5af2f83202482b37af Mon Sep 17 00:00:00 2001
From: Anton Sarukhanov <code@ant.sr>
Date: Fri, 15 Apr 2016 23:37:44 -0400
Subject: [PATCH] Fixed infinite loop on invalid modal request, and implemented
 modal contents caching

---
 static/js/map.js | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/static/js/map.js b/static/js/map.js
index 8fb1205..0f682ad 100644
--- a/static/js/map.js
+++ b/static/js/map.js
@@ -15,6 +15,7 @@ BusMap.Map = function(opts) {
     this.opts = opts;
     var stops = {};
     var routes = {};
+    var modal_cache = {};
     var that = this;
     window._busmap = this;
 
@@ -399,10 +400,18 @@ BusMap.Map = function(opts) {
             query: "modal",
             modal_name: name,
         };
-        $.get("ajax", params).done(function(contents) {
-            modal.append(contents);
-        });
-        setUrlFromView();
+        if (modal_cache[name]) {
+            modal.append(modal_cache[name]);
+            setUrlFromView();
+        } else {
+            $.get("ajax", params).done(function(contents) {
+                modal_cache[name] = contents;
+                modal.append(contents);
+                setUrlFromView();
+            }).fail(function() {
+                modal.append("Please refresh the page and try again.");
+            });
+        }
     }
 
     // Scaling: update what is displayed based on zoom level
@@ -428,7 +437,7 @@ BusMap.Map = function(opts) {
             return;
         }
         var hash = window.location.hash.substring(1);
-        if (hash == "") return false;
+        if (hash == "") return;
         var parts = hash.split(";");
         // First part: view string (lat,lon,zoom; vehicle; or stop)
         applyViewString(parts[0]);
-- 
GitLab