[ARVADOS] updated: 4ad1947da490a998d68380b1520c4f95b1784676
git at public.curoverse.com
git at public.curoverse.com
Mon Jul 28 19:14:36 EDT 2014
Summary of changes:
apps/workbench/Gemfile | 1 +
apps/workbench/Gemfile.lock | 2 +
.../app/assets/javascripts/application.js | 26 ++
apps/workbench/app/assets/javascripts/editable.js | 11 +-
.../app/assets/javascripts/infinite_scroll.js | 59 +--
apps/workbench/app/assets/javascripts/tab_panes.js | 38 ++
.../app/assets/stylesheets/application.css.scss | 5 +
.../app/controllers/application_controller.rb | 18 +-
.../controllers/pipeline_instances_controller.rb | 3 +-
.../controllers/pipeline_templates_controller.rb | 3 +-
.../app/controllers/projects_controller.rb | 65 ++-
.../app/helpers/pipeline_components_helper.rb | 13 +
.../app/helpers/pipeline_instances_helper.rb | 4 +
apps/workbench/app/models/arvados_api_client.rb | 7 +-
apps/workbench/app/models/arvados_resource_list.rb | 13 +-
apps/workbench/app/models/collection.rb | 8 +
.../app/views/application/_choose.html.erb | 5 +-
.../views/application/_pipeline_progress.html.erb | 2 +-
.../application/_pipeline_status_label.html.erb | 2 +-
.../app/views/layouts/application.html.erb | 188 +-------
.../{application.html.erb => body.html.erb} | 85 +---
.../pipeline_instances/_show_components.html.erb | 79 +---
.../_show_components_json.html.erb | 16 +
....html.erb => _show_components_running.html.erb} | 34 --
.../views/pipeline_instances/_show_recent.html.erb | 6 +-
.../pipeline_templates/_show_components.html.erb | 4 +-
.../app/views/projects/_show_contents.html.erb | 123 ------
.../views/projects/_show_data_collections.html.erb | 9 +-
.../projects/_show_jobs_and_pipelines.html.erb | 9 +-
.../views/projects/_show_other_objects.html.erb | 9 +-
.../projects/_show_pipeline_templates.html.erb | 9 +-
.../app/views/projects/_show_subprojects.html.erb | 9 +-
.../app/views/projects/_show_tab_contents.html.erb | 20 +-
.../pipeline_instances_controller_test.rb | 7 +
.../pipeline_templates_controller_test.rb | 6 +
.../test/functional/projects_controller_test.rb | 7 +-
.../workbench/test/integration/collections_test.rb | 6 +
.../test/integration/pipeline_instances_test.rb | 13 +-
apps/workbench/test/integration/projects_test.rb | 32 +-
apps/workbench/test/integration/users_test.rb | 24 +-
doc/install/index.html.textile.liquid | 2 +-
doc/install/install-keep.html.textile.liquid | 52 +++
sdk/cli/bin/crunch-job | 11 +-
sdk/python/bin/arv-get | 2 +-
.../api/app/controllers/application_controller.rb | 2 +-
services/api/app/models/user.rb | 10 +-
.../db/migrate/20140714184006_empty_collection.rb | 14 +
services/api/db/seeds.rb | 1 +
services/api/db/structure.sql | 4 +-
services/api/lib/current_api_client.rb | 20 +
services/api/test/fixtures/collections.yml | 11 +
services/api/test/fixtures/links.yml | 16 +
services/api/test/fixtures/pipeline_instances.yml | 22 +-
services/api/test/fixtures/pipeline_templates.yml | 21 +
services/api/test/integration/permissions_test.rb | 11 +
services/keep/src/keep/{keep.go => handlers.go} | 283 +-----------
services/keep/src/keep/keep.go | 480 +--------------------
57 files changed, 589 insertions(+), 1353 deletions(-)
create mode 100644 apps/workbench/app/helpers/pipeline_components_helper.rb
copy apps/workbench/app/views/layouts/{application.html.erb => body.html.erb} (78%)
create mode 100644 apps/workbench/app/views/pipeline_instances/_show_components_json.html.erb
copy apps/workbench/app/views/pipeline_instances/{_show_components.html.erb => _show_components_running.html.erb} (63%)
delete mode 100644 apps/workbench/app/views/projects/_show_contents.html.erb
create mode 100644 doc/install/install-keep.html.textile.liquid
create mode 100644 services/api/db/migrate/20140714184006_empty_collection.rb
copy services/keep/src/keep/{keep.go => handlers.go} (63%)
via 4ad1947da490a998d68380b1520c4f95b1784676 (commit)
via ca417c9626eb642e0e219d3928097c561e22b860 (commit)
via d13e8de76d48788a9198d4581205995f45464ff3 (commit)
via 29e5eb86b1dbbb644c244ec6e08e935c06e50d1c (commit)
via 38deaa21b890f880d415c96534bb6d230bcc87fa (commit)
via 35e5f5ac9f0dcfe3868e9f31c6500f1af759a1af (commit)
via dea31790e175096c0df8f5a395696aab940f39d7 (commit)
via 0dca88749fcd5615bf687c916fca9157bf258998 (commit)
via 83561af02e156758b09ea771510ad4f9ee506b06 (commit)
via b34070ef0ed43062e1e923c8771237575dbb5fa7 (commit)
via 1a09083539cf6e56fe91a5b5c75c20f35319922b (commit)
via 9afac37490871ab75c9836a2125b19b574bc5acd (commit)
via b653d031a5dbf2a42cf81d787753e945bf3911b4 (commit)
via 4fdfbe8fb9523451b0536042d14c2f229b75c0f3 (commit)
via e1526dc915e10012352fdd260f9267d10fbf3542 (commit)
via 08ab73ebc61834742594b0eb12c7d3fca4660360 (commit)
via 843a9f614c05ad96275badc7125156b6df4bac4c (commit)
via cec86eb60c65a0bc456614e59281ea184485f811 (commit)
via f2d60a7dc6767003ad8b821dc8029a7dd54deaac (commit)
via d0ab992df96443576bc8f30410940c1acdac827a (commit)
via ce8d052472be0cb417596c41f2700cf92a260fd3 (commit)
via 15c61d99c5a867c6a58ef3eb10cc72d7f9ec5cd8 (commit)
via fdc4fd98ee963559ac13e737700a8be1f5c736c7 (commit)
via 7223231e30b3e0e0b488f8db6d7b1749117a05e9 (commit)
via 315312d808d6b8144d7638b108c0a02be3c14f46 (commit)
via fb77c937ac1e0fe4463cfe48c3b60f8a32e8c128 (commit)
via fa3f6860158dda089c0b4b96c346bbc643232421 (commit)
via 95d963b2d176e0ffe0797541368463fb5deaf3cf (commit)
via 6a6fe8d14502fb47eb4e6b2c0b1cf6d2cdf7a551 (commit)
via c3d4b399c57e711f0cd87c2178f873a688323967 (commit)
via 8d141d95a821f785f6f0619aebd3cf4a1ccdbca3 (commit)
via f0abaec0c637772b781993a63b98aab85072eb97 (commit)
via 423b74882240aa5fde5ad9bf72c6a89651794882 (commit)
via 4d0866e5d005b1c1631c80809a4757037b6dac1b (commit)
via eea48f38868d0663e7c8d690247b84e340109dc4 (commit)
via e74ede4659428af77c50057d69a0d08e4e74a6ef (commit)
via fad046d56740092b1483cb646d2f7c92c544c165 (commit)
via 964350f4132788e07a7ce1b159179a152e9cfcdc (commit)
via 5605c33a0646b155c18482c8157be4d154382565 (commit)
via 949ed4898bc5af8eaf0fdd21c00f7242168cfe22 (commit)
via 1be91cdf5926f71acba0f7360ab7efbe879f375b (commit)
via ed994d1e767c3017bcda18c1e2401ded86edcabb (commit)
via 1ddbf7371a838cd8a8be50eb823f58796c46b2b9 (commit)
via 99d62839eec24dc65760c33f699b3cae2952f01f (commit)
via 91a3a6759a0294c28fa55f044c2d611d01054c20 (commit)
via a0a03c3668a3cd5956b3bd4677a15d6c86770952 (commit)
via 05e8f8b3b2f18bab495af9b40df54126a41d963f (commit)
via 2e66bcd03991218292328f09c5520876862eb5e1 (commit)
via 2369ce76e5c4d7797da2845f0574b56fc7709033 (commit)
via a7824d56a519db6d729323ca56e653db7e895f3c (commit)
via 8dd2205fa58f113aff5b855484c8d933521e3cde (commit)
via 1bfa822f0bf0b6ff968e229528057da299414457 (commit)
via 5722da5b7a5735873b439c0eff2bc4cf2c959002 (commit)
via 00a92f1bc74b503af5c6f17a3b69992e750fce8f (commit)
via ffa64c065ac8b28849395cf3e89fe93814252473 (commit)
via cb832ae39672fe1721e3c531374bdbaa4f24161a (commit)
via 8298d5a841ac106c408b2834dd73091405c2e180 (commit)
via a96adab2a4758c7a969156621c0ed4fe710b98c2 (commit)
via 36e6ade5a578f3f10e048ba545c4448a71137282 (commit)
via 0218232df5c6b4e62cced85e17a512dd6cfcae36 (commit)
via 4e1dda28351f6b7aa91aa6baca8805e283f2694b (commit)
via 7daa6c8ccfc68ec189b42522fa1481b7c31174a8 (commit)
via 1a7dc46ec7237d5ca1c4894c977bf6ce5b29763e (commit)
via f97f243abfaaae4b04d0dc7fc02e6f54685b16fb (commit)
from 9591cf965cc6d780a88e713e7ee3c0530397dcd7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 4ad1947da490a998d68380b1520c4f95b1784676
Author: Tom Clegg <tom at curoverse.com>
Date: Mon Jul 28 17:52:51 2014 -0400
3235: Fix infinite scroll broken by merge.
diff --git a/apps/workbench/app/assets/javascripts/infinite_scroll.js b/apps/workbench/app/assets/javascripts/infinite_scroll.js
index 73b8fd6..2cb9748 100644
--- a/apps/workbench/app/assets/javascripts/infinite_scroll.js
+++ b/apps/workbench/app/assets/javascripts/infinite_scroll.js
@@ -1,25 +1,23 @@
-function maybe_load_more_content() {
+function maybe_load_more_content(event) {
var scroller = this; // element with scroll bars
- var container; // element that receives new content
+ var $container; // element that receives new 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)
{
- for (var i = 0; i < num_scrollers; i++) {
- $container = $($(this).data('infinite-container'+i));
- if (!$(container).attr('data-infinite-content-href0')) {
+ $container = $(event.data.container);
+ 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'));
+ $container.attr('data-infinite-content-href0',
+ $container.attr('data-infinite-content-href'));
}
- src = $(container).attr('data-infinite-content-href');
+ src = $container.attr('data-infinite-content-href');
if (!src || !$container.is(':visible'))
// Finished
return;
@@ -27,7 +25,7 @@ function maybe_load_more_content() {
// Don't start another request until this one finishes
$container.attr('data-infinite-content-href', null);
spinner = '<div class="spinner spinner-32px spinner-h-center"></div>';
- if ($(container).is('table,tbody,thead,tfoot')) {
+ if ($container.is('table,tbody,thead,tfoot')) {
// Hack to determine how many columns a new tr should have
// in order to reach full width.
colspan = $container.closest('table').
@@ -38,17 +36,18 @@ function maybe_load_more_content() {
spinner +
'</td></tr>');
}
- $(container).find(".spinner").detach();
- $(container).append(spinner);
- $(container).attr('data-infinite-serial', serial);
+ $container.find(".spinner").detach();
+ $container.append(spinner);
+ $container.attr('data-infinite-serial', serial);
$.ajax(src,
{dataType: 'json',
type: 'GET',
- data: ($(container).data('infinite-content-params') || {}),
- context: {container: container, src: src, serial: serial}}).
+ data: ($container.data('infinite-content-params') || {}),
+ context: {container: $container, src: src, serial: serial}}).
fail(function(jqxhr, status, error) {
var $faildiv;
- if ($(this.container).attr('data-infinite-serial') != this.serial) {
+ var $container = this.container;
+ if ($container.attr('data-infinite-serial') != this.serial) {
// A newer request is already in progress.
return;
}
@@ -65,20 +64,18 @@ function maybe_load_more_content() {
attr('data-infinite-content-href', this.src).
addClass('infinite-retry').
append('<span class="fa fa-warning" /> Oops, request failed. <button class="btn btn-xs btn-primary">Retry</button>');
- $(this.container).find('div.spinner').replaceWith($faildiv);
+ $container.find('div.spinner').replaceWith($faildiv);
}).
done(function(data, status, jqxhr) {
- if ($(this.container).attr('data-infinite-serial') != this.serial) {
+ if ($container.attr('data-infinite-serial') != this.serial) {
// A newer request is already in progress.
return;
}
- $(this.container).find(".spinner").detach();
- $(this.container).append(data.content);
- $(this.container).attr('data-infinite-content-href', data.next_page_href);
+ $container.find(".spinner").detach();
+ $container.append(data.content);
+ $container.attr('data-infinite-content-href', data.next_page_href);
});
- break;
}
- }
}
$(document).
@@ -103,17 +100,17 @@ $(document).
trigger('scroll');
}).
on('ready ajax:complete', function() {
- var num_scrollers = 0;
$('[data-infinite-scroller]').each(function() {
+ if ($(this).hasClass('infinite-scroller-ready'))
+ return;
+ $(this).addClass('infinite-scroller-ready');
+
var $scroller = $($(this).attr('data-infinite-scroller'));
if (!$scroller.hasClass('smart-scroll') &&
'scroll' != $scroller.css('overflow-y'))
$scroller = $(window);
$scroller.
addClass('infinite-scroller').
- data('infinite-container'+num_scrollers, this).
- on('scroll', maybe_load_more_content);
- num_scrollers++;
+ on('scroll', { container: this }, maybe_load_more_content);
});
- $(window).data("arv-num-scrollers", num_scrollers);
});
commit ca417c9626eb642e0e219d3928097c561e22b860
Author: Tom Clegg <tom at curoverse.com>
Date: Mon Jul 28 17:20:38 2014 -0400
3235: Move filter-by-project to left side.
diff --git a/apps/workbench/app/views/application/_choose.html.erb b/apps/workbench/app/views/application/_choose.html.erb
index 7af37e0..4ee96df 100644
--- a/apps/workbench/app/views/application/_choose.html.erb
+++ b/apps/workbench/app/views/application/_choose.html.erb
@@ -8,7 +8,6 @@
<div class="modal-body">
<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">
@@ -30,6 +29,7 @@
</ul>
</div>
<% end %>
+ <input type="text" class="form-control filterable-control focus-on-display" placeholder="Search" data-filterable-target=".modal.arv-choose .selectable-container"/>
</div>
<div style="height: 1em" />
commit d13e8de76d48788a9198d4581205995f45464ff3
Merge: 0dca887 29e5eb8
Author: Tom Clegg <tom at curoverse.com>
Date: Mon Jul 28 17:12:52 2014 -0400
3235: Merge branch 'master' into 3235-top-nav-site-search
Conflicts:
apps/workbench/app/views/layouts/application.html.erb
commit 0dca88749fcd5615bf687c916fca9157bf258998
Author: Tom Clegg <tom at curoverse.com>
Date: Mon Jul 28 15:56:41 2014 -0400
3235: Remove errant action exemption.
diff --git a/services/api/app/controllers/application_controller.rb b/services/api/app/controllers/application_controller.rb
index 58d14fd..8464a4a 100644
--- a/services/api/app/controllers/application_controller.rb
+++ b/services/api/app/controllers/application_controller.rb
@@ -35,7 +35,7 @@ class ApplicationController < ActionController::Base
except: [:index, :create] + ERROR_ACTIONS)
before_filter :load_limit_offset_order_params, only: [:index, :contents]
before_filter :load_where_param, only: [:index, :contents]
- before_filter :load_filters_param, only: [:index, :contents, :choose]
+ before_filter :load_filters_param, only: [:index, :contents]
before_filter :find_objects_for_index, :only => :index
before_filter :reload_object_before_update, :only => :update
before_filter(:render_404_if_no_object,
commit 83561af02e156758b09ea771510ad4f9ee506b06
Merge: 9591cf9 08ab73e
Author: Tom Clegg <tom at curoverse.com>
Date: Mon Jul 28 15:45:23 2014 -0400
3235: Merge branch 'master' into 3235-top-nav-site-search
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
diff --cc apps/workbench/app/assets/javascripts/infinite_scroll.js
index 3e74da3,1f9997e..73b8fd6
--- a/apps/workbench/app/assets/javascripts/infinite_scroll.js
+++ b/apps/workbench/app/assets/javascripts/infinite_scroll.js
@@@ -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
@@@ -72,30 -55,14 +76,34 @@@
$(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') &&
diff --cc apps/workbench/app/views/application/_choose.html.erb
index aa6d2d4,3c1aaad..7af37e0
--- a/apps/workbench/app/views/application/_choose.html.erb
+++ b/apps/workbench/app/views/application/_choose.html.erb
@@@ -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">
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list