2961: Track valid/up to date state for each panel, only reload panels when they
authorPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 10 Jun 2014 14:20:29 +0000 (10:20 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 10 Jun 2014 14:20:29 +0000 (10:20 -0400)
are out of date (based on event log) and visible to user.

apps/workbench/app/views/application/_content.html.erb

index 3b3ac6aa853e3decead73779e586342b8fd7ef66..353bd74143103f7d87f0636d0668a2de4e60b280 100644 (file)
@@ -1,20 +1,30 @@
 <% content_for :js do %>
+  tab_pane_valid_state = {};
+
   function ajaxRefreshTabPane(pane) {
-    $.ajax('<%=j url_for @object %>?tab_pane='+pane, {dataType: 'html', type: 'GET'}).
-      done(function(data, status, jqxhr) {
-        $('#' + pane + ' > div > div').html(data);
-        $(document).trigger('ajax:complete')
-      });
+    if (!tab_pane_valid_state[pane]) {
+      tab_pane_valid_state[pane] = true;
+      $(document).trigger('ajax:send');
+      $.ajax('<%=j url_for @object %>?tab_pane='+pane, {dataType: 'html', type: 'GET'}).
+        done(function(data, status, jqxhr) {
+          $('#' + pane + ' > div > div').html(data);
+          $(document).trigger('ajax:complete');
+          ajaxRefreshTabPane(pane);
+        });
+    }
   }
 
   $(window).on('load', smart_scroll_fixup);
-
   $(document).on('shown.bs.tab', 'ul.nav-tabs > li > a', smart_scroll_fixup);
+
   $(document).on('shown.bs.tab', function(e) {
     ajaxRefreshTabPane(e.target.id.slice(0, -4));
   });
 
   $(document).on('arv-log-event', function() {
+    <% pane_list.each do |pane| %>
+    tab_pane_valid_state['<%=j pane %>'] = false;
+    <% end %>
     ajaxRefreshTabPane($('.tab-pane.active')[0].id);
   });
 <% end %>
 >
 
 <% content_for :js do %>
-  <% if i != 0 %>
+  <% if i == 0 %>
+    tab_pane_valid_state['<%=j pane %>'] = true;
+  <% else %>
+    tab_pane_valid_state['<%=j pane %>'] = false;
     $(document).on('ready', function() {
       ajaxRefreshTabPane('<%=j pane %>');
     });