$('.loading').fadeOut('fast', 0);
}
}).
+ on('ajaxSend', function(e, xhr) {
+ // map jquery event to rails event
+ $(document).trigger('ajax:send');
+ }).
+ on('ajaxComplete', function(e, xhr) {
+ // map jquery event to rails event
+ $(document).trigger('ajax:complete');
+ }).
on('click', '.removable-tag a', function(e) {
var tag_span = $(this).parents('[data-tag-link-uuid]').eq(0)
tag_span.fadeTo('fast', 0.2);
}).
done(function(data, status, jqxhr) {
var context = this;
- $(document).trigger('ajax:complete');
// Remove "danger" status in case a previous action failed
$('.btn-danger', context.toggle_group).
addClass('btn-info').
fail(function(jqxhr, status, error) {
var context = this;
var saved_state;
- $(document).trigger('ajax:complete');
// Add a visual indication that something failed
$(context.button).
addClass('btn-danger').
window.alert("Request failed.");
}
});
- $(document).trigger('ajax:send');
});
});
done(function(data, status, jqxhr) {
$(this.container).append(data.content);
$(this.container).attr('data-infinite-content-href', data.next_page_href);
- $(document).trigger('ajax:complete');
});
}
}
.navbar.breadcrumbs .nav > li.nav-separator > i {
color: #bbb;
}
+.navbar.breadcrumbs .navbar-form {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+.navbar.breadcrumbs .navbar-text {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
nav.navbar-fixed-top .navbar-nav.navbar-right > li.open > a,
nav.navbar-fixed-top .navbar-nav.navbar-right > li.open > a:focus,
nav.navbar-fixed-top .navbar-nav.navbar-right > li.open > a:hover {
}
.selectable.active, .selectable:hover {
background: #d9edf7;
+ cursor: pointer;
}
.selectable.active,
.selectable.active *,
around_filter :thread_with_optional_api_token
before_filter :check_user_agreements, except: ERROR_ACTIONS
before_filter :check_user_notifications, except: ERROR_ACTIONS
- before_filter :find_object_by_uuid, except: [:index] + ERROR_ACTIONS
+ before_filter :find_object_by_uuid, except: [:index, :choose] + ERROR_ACTIONS
theme :select_theme
begin
def choose
params[:limit] ||= 20
- @objects = Link.
- filter([['link_class','=','name'],
- ['head_uuid','is_a','arvados#collection']])
+
+ filter = [['link_class','=','name'],
+ ['head_uuid','is_a','arvados#collection']]
+
+ if params[:project_uuid] and !params[:project_uuid].empty?
+ filter << ['tail_uuid', '=', params[:project_uuid]]
+ end
+
+ @objects = Link.filter(filter)
+
find_objects_for_index
@next_page_href = (next_page_offset and
url_for(offset: next_page_offset, partial: true))
@name_links = @objects
+
+ puts "and the result is (1) ", @name_links.results
+
@objects = Collection.
filter([['uuid','in',@name_links.collect(&:head_uuid)]])
super
self.class.to_s.underscore.humanize
end
+ def self.class_for_display
+ self.to_s.underscore.humanize
+ end
+
def self.creatable?
current_user
end
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" onClick="reset_form()" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title"><%= params[:title] || "Choose #{@objects.first.class_for_display}" %></h4>
+ <h4 class="modal-title"><%= params[:title] || "Choose #{@objects.first.andand.class_for_display}" %></h4>
</div>
<div class="modal-body">
- <div>
- <div class="row">
- <div class="col-sm-6">
- </div>
- <div class="col-sm-6">
- <input type="text" class="form-control filterable-control" placeholder="Search" data-filterable-target=".modal.arv-choose .selectable-container"/>
- </div>
+ <nav class="navbar navbar-default breadcrumbs" role="navigation">
+ <ul class="nav navbar-nav navbar-left">
+ <li class="dropdown">
+ <%= 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 %>
+ <% end %>
+ <% } %>
+ </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>
- </div>
+ </nav>
<div class="row" style="height: 20em">
- <div class="col-sm-6 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-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>
<div class="col-sm-6 modal-dialog-preview-pane" style="height: 100%; overflow-y: scroll">
</div>
- </div>
+ </div>
- <div class="modal-footer">
- <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Cancel</button>
- <button class="btn btn-primary" aria-hidden="true" data-enable-if-selection disabled><%= raw(params[:action_name]) || 'Select' %></button>
- <div class="modal-error hide" style="text-align: left; margin-top: 1em;">
+ <div class="modal-footer">
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Cancel</button>
+ <button class="btn btn-primary" aria-hidden="true" data-enable-if-selection disabled><%= raw(params[:action_name]) || 'Select' %></button>
+ <div class="modal-error hide" style="text-align: left; margin-top: 1em;">
+ </div>
</div>
</div>
</div>
attr('data-action-href', '<%= j params[:action_href] %>').
attr('data-method', '<%= j params[:action_method] %>').
data('action-data', <%= raw params[:action_data] %>);
-$(document).trigger('ajax:complete');
+$(".chooser-show-project").on("click", function() {
+ $("#choose-scroll").html("<%=j image_tag 'ajax-loader.gif' %>");
+ var t = $(this);
+ var d = {
+ partial: true,
+ multiple: <%= multiple %>
+ };
+ if (t.attr("data-project-uuid") != null) {
+ d.project_uuid = t.attr("data-project-uuid");
+ }
+ $.ajax('<%=j url_for %>', {
+ dataType: "json",
+ type: "GET",
+ data: d
+ }).done(function(data, status, jqxhr) {
+ console.log(data);
+ $("#chooser-breadcrumb").text(t.text());
+ $("#choose-scroll").html(data.content);
+ $("#choose-scroll").prop("data-infinite-content-href", "next_page_href");
+ });
+});
function ajaxRefreshTabPane(pane) {
if (!tab_pane_valid_state[pane]) {
tab_pane_valid_state[pane] = true;
- $(document).trigger('ajax:send');
$.ajax('<%=j url_for() %>?<%= raw(controller.request.query_string) %>&tab_pane='+pane, {dataType: 'html', type: 'GET'}).
done(function(data, status, jqxhr) {
$('#' + pane + ' > div > div').html(data);
- $(document).trigger('ajax:complete');
ajaxRefreshTabPane(pane);
});
}
--- /dev/null
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="projects-menu">
+ <i class="fa fa-lg fa-fw fa-home"></i>
+ Projects
+ <span class="caret"></span>
+ </a>
+ <ul class="dropdown-menu" role="menu">
+ <li role="presentation" class="dropdown-header">
+ <%= top_button.call %>
+ My projects
+ </li>
+ <% my_project_tree.each do |pnode| %>
+ <% next if pnode[:object].class != Group %>
+ <li style="padding-left: <%= pnode[:depth]-1 %>em">
+ <%= project_link_to.call pnode do %>
+ <%= pnode[:object].name %>
+ <% end %>
+ </li>
+ <% end %>
+ <li class="divider">
+ <li role="presentation" class="dropdown-header">
+ Projects shared with me
+ </li>
+ <% shared_project_tree.each do |pnode| %>
+ <% next if pnode[:object].class != Group %>
+ <li style="padding-left: <%= pnode[:depth]-1 %>em">
+ <%= project_link_to.call pnode do %>
+ <i class="fa fa-fw fa-share-alt" style="color:#aaa"></i> <%= pnode[:object].name %>
+ <% end %>
+ </li>
+ <% end %>
+ </ul>
+<% puts "and the result is (2) ", @name_links.results, "objects is #{@objects}" %>
<% @name_links.each do |name_link| %>
+ <% puts "looking up #{name_link.head_uuid}" %>
<% if (object = get_object(name_link.head_uuid)) %>
+ <% puts "got #{object}" %>
<div class="row filterable selectable <%= 'multiple' if multiple %>" data-object-uuid="<%= name_link.uuid %>"
data-preview-href="<%= url_for object %>?tab_pane=chooser_preview"
style="margin-left: 1em; border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: #DDDDDD">
history.replaceState(null, null, "<%= escape_javascript(@request_url) %>");
$('table#collections-index tbody').html("<%= escape_javascript(render partial: 'index_tbody') %>");
$('table#collections-index tbody').fadeTo(200, 1.0);
-$(document).trigger('ajax:complete');
<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">
- <i class="fa fa-lg fa-fw fa-home"></i>
- Projects
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <li role="presentation" class="dropdown-header">
- <%= link_to projects_path('project[owner_uuid]' => current_project_uuid), method: 'post', class: 'btn btn-xs btn-default pull-right' do %>
- <i class="fa fa-plus"></i> New project
- <% end %>
- My projects
- </li>
- <% my_project_tree.each do |pnode| %>
- <% next if pnode[:object].class != Group %>
- <li style="padding-left: <%= pnode[:depth]-1 %>em">
- <%= link_to(pnode[:object].name, project_path(pnode[:object].uuid), data: {object_uuid: pnode[:object].uuid, name: 'name'}) %>
- </li>
- <% end %>
- <li class="divider">
- <li role="presentation" class="dropdown-header">
- Projects shared with me
- </li>
- <% shared_project_tree.each do |pnode| %>
- <% next if pnode[:object].class != Group %>
- <li style="padding-left: <%= pnode[:depth]-1 %>em">
- <%= link_to project_path(pnode[:object].uuid), data: {object_uuid: pnode[:object].uuid, name: 'name'} do %>
- <i class="fa fa-fw fa-share-alt" style="color:#aaa"></i> <%= pnode[:object].name %>
+ <%= render partial: "projects_tree_menu", locals: {
+ :project_link_to => Proc.new do |pnode, &block|
+ link_to(project_path(pnode[:object].uuid), data: {object_uuid: pnode[:object].uuid, name: 'name'}, &block)
+ end,
+ :top_button => Proc.new do %>
+ <% link_to projects_path('project[owner_uuid]' => current_project_uuid), method: 'post', class: 'btn btn-xs btn-default pull-right' do %>
+ <i class="fa fa-plus"></i> New project
+ <% end %>
<% end %>
- </li>
- <% end %>
- </ul>
+ <% } %>
</li>
<% project_breadcrumbs.each do |p| %>
<li class="nav-separator">
$('.nav-tabs li a[href="' + href + '"]').tab('show');
});
}
-$(document).trigger('ajax:complete');
var new_content = "<%= escape_javascript(render partial: 'tables') %>";
if ($('div#home-tables').html() != new_content)
$('div#home-tables').html(new_content);
-$(document).trigger('ajax:complete');
Job, PipelineInstance, PipelineTemplate,
Collection,
Human, Specimen, Trait].each do |klass|
+ if params[:object_kind] and klass.kind != params[:object_kind]
+ continue
+ end
@objects = klass.readable_by(*@read_users)
cond_sql = "#{klass.table_name}.owner_uuid = ?"
cond_params = [@object.uuid]