3235: Merge branch 'master' into 3235-top-nav-site-search
authorTom Clegg <tom@curoverse.com>
Mon, 28 Jul 2014 19:45:23 +0000 (15:45 -0400)
committerTom Clegg <tom@curoverse.com>
Mon, 28 Jul 2014 19:45:23 +0000 (15:45 -0400)
Conflicts:
apps/workbench/app/assets/javascripts/infinite_scroll.js
apps/workbench/app/views/application/_choose.html.erb
apps/workbench/app/views/layouts/application.html.erb

1  2 
apps/workbench/app/assets/javascripts/infinite_scroll.js
apps/workbench/app/assets/stylesheets/application.css.scss
apps/workbench/app/controllers/application_controller.rb
apps/workbench/app/views/application/_choose.html.erb
apps/workbench/app/views/layouts/application.html.erb

index 3e74da3581d0b95573d946e3540d5d4e1d6be4a5,1f9997efa05fc002f8a9907965d73e9dff2b1a46..73b8fd66af36ee72a019cf1ac144509f3099b3d9
@@@ -4,24 -4,20 +4,28 @@@ function maybe_load_more_content() 
      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') &&
index aa6d2d435b8986cb9a4e448b15da59abf1b3c9e0,3c1aaadf7d5746d34b612a208195a9ec583da726..7af37e0ae92415dc62f1c5d9b8921b55dbd4fee0
@@@ -7,42 -7,50 +7,45 @@@
        </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">