var src; // url for retrieving content
var scrollHeight;
var spinner, colspan;
+ var serial = Date.now();
scrollHeight = scroller.scrollHeight || $('body')[0].scrollHeight;
+ var num_scrollers = $(window).data("arv-num-scrollers");
if ($(scroller).scrollTop() + $(scroller).height()
>
- scrollHeight - 50) {
- container = $(this).data('infinite-container');
+ scrollHeight - 50)
+ {
+ for (var i = 0; i < num_scrollers; i++) {
+ $container = $($(this).data('infinite-container'+i));
- src = $container.attr('data-infinite-content-href');
+ if (!$(container).attr('data-infinite-content-href0')) {
+ // Remember the first page source url, so we can refresh
+ // from page 1 later.
+ $(container).attr('data-infinite-content-href0',
+ $(container).attr('data-infinite-content-href'));
+ }
+ src = $(container).attr('data-infinite-content-href');
- if (!src)
+ if (!src || !$container.is(':visible'))
- continue;
+ // Finished
+ return;
+
// Don't start another request until this one finishes
- $(container).attr('data-infinite-content-href', null);
+ $container.attr('data-infinite-content-href', null);
spinner = '<div class="spinner spinner-32px spinner-h-center"></div>';
if ($(container).is('table,tbody,thead,tfoot')) {
// Hack to determine how many columns a new tr should have
$(this.container).append(data.content);
$(this.container).attr('data-infinite-content-href', data.next_page_href);
});
- }
+ break;
+ }
+ }
}
+
$(document).
+ on('click', 'div.infinite-retry button', function() {
+ var $retry_div = $(this).closest('.infinite-retry');
+ var $scroller = $(this).closest('.infinite-scroller')
+ $scroller.attr('data-infinite-content-href',
+ $retry_div.attr('data-infinite-content-href'));
+ $retry_div.replaceWith('<div class="spinner spinner-32px spinner-h-center" />');
+ $scroller.trigger('scroll');
+ }).
+ on('refresh-content', '[data-infinite-scroller]', function() {
+ // Clear all rows, reset source href to initial state, and
+ // (if the container is visible) start loading content.
+ var first_page_href = $(this).attr('data-infinite-content-href0');
+ if (!first_page_href)
+ first_page_href = $(this).attr('data-infinite-content-href');
+ $(this).
+ html('').
+ attr('data-infinite-content-href', first_page_href);
+ $('.infinite-scroller').
+ trigger('scroll');
+ }).
on('ready ajax:complete', function() {
+ var num_scrollers = 0;
$('[data-infinite-scroller]').each(function() {
var $scroller = $($(this).attr('data-infinite-scroller'));
if (!$scroller.hasClass('smart-scroll') &&
</div>
<div class="modal-body">
- <nav class="navbar navbar-default breadcrumbs" role="navigation">
- <ul class="nav navbar-nav navbar-left">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="projects-menu">
- Projects
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <%= render partial: "projects_tree_menu", locals: {
- :project_link_to => Proc.new do |pnode, &block|
- link_to "#", {"class" => "chooser-show-project", "data-project-uuid" => pnode[:object].uuid }, &block
- end,
- :top_button => Proc.new do %>
- <% link_to "#", {"class" => "chooser-show-project btn btn-xs btn-default pull-right" } do %>
- All <%= controller.model_class.class_for_display.pluralize.downcase %>
- <% end %>
+ <div class="input-group">
+ <input type="text" class="form-control filterable-control focus-on-display" placeholder="Search" data-filterable-target=".modal.arv-choose .selectable-container"/>
+ <% if params[:by_project] != false %>
+ <div class="input-group-btn" data-filterable-target=".modal.arv-choose .selectable-container">
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
+ Filter by project <span class="caret"></span>
+ </button>
+ <ul class="dropdown-menu" role="menu">
+ <li>
+ <%= link_to '#', class: 'chooser-show-project' do %>
+ Remove filter (search all projects)
<% end %>
- <% } %>
- </ul>
- </li>
- <li class="nav-separator">
- <i class="fa fa-lg fa-angle-double-right"></i>
- </li>
- <li><p class="navbar-text" id="chooser-breadcrumb">All <%= controller.model_class.class_for_display.pluralize.downcase %></span></li>
- </ul>
- <div class="navbar-form navbar-right">
- <input type="text" class="form-control filterable-control" placeholder="Search" data-filterable-target=".modal.arv-choose .selectable-container"/>
- </div>
- </nav>
+ </li>
+ <li class="divider" />
+ <%= render partial: "projects_tree_menu", locals: {
+ :project_link_to => Proc.new do |pnode, &block|
+ link_to "#", {"class" => "chooser-show-project", "data-project-uuid" => pnode[:object].uuid }, &block
+ end,
+ :top_button => nil
+ } %>
+ </ul>
+ </div>
+ <% end %>
+ </div>
+ <div style="height: 1em" />
+
+ <% preview_pane = (params[:preview_pane] != "false")
+ pane_col_class = preview_pane ? "col-sm-6" : "" %>
<div class="row" style="height: 20em">
- <div class="<%= pane_col_class %> container-fluid arv-filterable-list selectable-container"
- style="height: 100%; overflow-y: scroll"
- data-infinite-scroller="#choose-scroll"
- id="choose-scroll"
- data-infinite-content-href="<%= @next_page_href %>">
- <%= render partial: 'choose_rows', locals: {multiple: multiple} %>
+ <div class="col-sm-6 container arv-filterable-list selectable-container <%= 'multiple' if multiple %>"
+ style="height: 100%; overflow-y: scroll"
+ data-infinite-scroller="#choose-scroll"
+ id="choose-scroll"
+ data-infinite-content-href="<%= next_page_href partial: true %>"
+ data-infinite-content-href0="<%= url_for partial: true %>">
+ <%= render partial: 'choose_rows' %>
+ </div>
+ <div class="col-sm-6 modal-dialog-preview-pane" style="height: 100%; overflow-y: scroll">
</div>
- <% if preview_pane %>
- <div class="<%= pane_col_class %> modal-dialog-preview-pane" style="height: 100%; overflow-y: scroll">
- </div>
- <% end %>
</div>
<div class="modal-footer">