2872: Merge branch 'master' into 2872-folder-nav
[arvados.git] / apps / workbench / app / views / application / _content.html.erb
index e6343628f2cc444fe6346a989259b8a478d3246a..b7f27df3d79539bbe7c01b86dadbf0303160dc78 100644 (file)
   <% end %>
 <% end %>
 
+<% content_for :js do %>
+  tab_pane_valid_state = {};
+
+  function ajaxRefreshTabPane(pane) {
+    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 :tab_panes do %>
 
 <% comparable = controller.respond_to? :compare %>
-<% pane_list ||= %w(recent) %>
-<% panes = Hash[pane_list.map { |pane|
-     [pane, render(partial: 'show_' + pane.downcase,
-                   locals: { comparable: comparable, objects: @objects })]
-   }.compact] %>
 
 <ul class="nav nav-tabs">
-  <% panes.each_with_index do |(pane, content), i| %>
+  <% pane_list.each_with_index do |pane, i| %>
     <li class="<%= 'active' if i==0 %>"><a href="#<%= pane %>" data-toggle="tab" id="<%= pane %>-tab"> <%= pane.gsub('_', ' ') %></a></li>
   <% end %>
 </ul>
 <div class="tab-content">
-<% panes.each_with_index do |(pane, content), i| %>
-  <div id="<%= pane %>" class="tab-pane fade <%= 'in active' if i==0 %>">
+<% pane_list.each_with_index do |pane, i| %>
+  <div id="<%= pane %>"
+       class="tab-pane fade <%= 'in active' if i==0 %> arv-log-event-listener"
+<% if controller.action_name == "index" %>
+       data-object-kind="arvados#<%= ArvadosApiClient.class_kind controller.model_class %>"
+<% else %>
+       data-object-uuid="<%= @object.uuid %>"
+<% end %>
+>
+
+<% content_for :js do %>
+  <% 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 %>');
+    });
+  <% end %>
+<% end %>
+
     <div id="<%= pane %>-scroll" class="<%= 'smart-scroll' if pane.match(/graph/) %>" style="margin-top:0.5em;">
-      <%= content %>
+      <div class="pane-content">
+        <% if i == 0 %>
+          <%= render(partial: 'show_' + pane.downcase,
+                     locals: { comparable: comparable, objects: @objects }) %>
+          <% else %>
+            <%= image_tag 'ajax-loader.gif' %>
+        <% end %>
+      </div>
     </div>
   </div>
 <% end %>
 </div>
 
 <% end %>
-
-<% content_for :js do %>
-    $(window).on('load', smart_scroll_fixup);
-    $(document).on('shown.bs.tab', 'ul.nav-tabs > li > a', smart_scroll_fixup);
-<% end %>