mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-01 15:37:32 +08:00
Merge pull request #3626 from davebx/ts_api_backbone
API installation of toolshed repositories.
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
define(["mvc/toolshed/shed-list-view",
|
||||
"mvc/toolshed/categories-view",
|
||||
"mvc/toolshed/repositories-view",
|
||||
"mvc/toolshed/repository-view",
|
||||
"mvc/toolshed/repository-queue-view",
|
||||
"mvc/toolshed/repo-status-view",
|
||||
"mvc/toolshed/workflows-view"],
|
||||
function(mod_shed_list_view,
|
||||
mod_categories_view,
|
||||
mod_repositories_view,
|
||||
mod_repository_view,
|
||||
mod_repoqueue_view,
|
||||
mod_repo_status_view,
|
||||
mod_workflows_view) {
|
||||
|
||||
var AdminToolshedRouter = Backbone.Router.extend({
|
||||
|
||||
initialize: function() {
|
||||
this.routesHit = 0;
|
||||
// keep count of number of routes handled by the application
|
||||
Backbone.history.on( 'route', function() { this.routesHit++; }, this );
|
||||
this.bind( 'route', this.trackPageview );
|
||||
},
|
||||
|
||||
routes: {
|
||||
"" : "toolsheds",
|
||||
"sheds" : "toolsheds",
|
||||
"queue" : "queue",
|
||||
"workflows" : "workflows",
|
||||
"status/r/:repositories" : "status",
|
||||
"status" : "status",
|
||||
"categories/s/:tool_shed" : "categories",
|
||||
"category/s/:tool_shed/c/:cateory_id" : "repositories",
|
||||
"repository/s/:tool_shed/r/:repository_id" : "repository",
|
||||
},
|
||||
|
||||
/**
|
||||
* If more than one route has been hit the user did not land on current
|
||||
* page directly so we can go back safely. Otherwise go to the home page.
|
||||
* Use replaceState if available so the navigation doesn't create an
|
||||
* extra history entry
|
||||
*/
|
||||
back: function() {
|
||||
if( this.routesHit > 1 ) {
|
||||
window.history.back();
|
||||
} else {
|
||||
this.navigate( '#', { trigger:true, replace:true } );
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
var GalaxyAdminToolshedApp = Backbone.View.extend({
|
||||
|
||||
app_config: {
|
||||
known_views: ['toolsheds', 'queue', 'status', 'categories', 'repositories', 'repoository']
|
||||
},
|
||||
|
||||
initialize: function() {
|
||||
Galaxy.admintoolshedapp = this;
|
||||
this.admin_toolshed_router = new AdminToolshedRouter();
|
||||
|
||||
this.admin_toolshed_router.on('route:queue', function() {
|
||||
if (Galaxy.admintoolshedapp.adminRepoQueueView) {
|
||||
Galaxy.admintoolshedapp.adminRepoQueueView.reDraw();
|
||||
}
|
||||
else {
|
||||
Galaxy.admintoolshedapp.adminRepoQueueView = new mod_repoqueue_view.RepoQueueView();
|
||||
}
|
||||
});
|
||||
this.admin_toolshed_router.on('route:toolsheds', function() {
|
||||
if (Galaxy.admintoolshedapp.adminShedListView) {
|
||||
Galaxy.admintoolshedapp.adminShedListView.reDraw();
|
||||
}
|
||||
else {
|
||||
Galaxy.admintoolshedapp.adminShedListView = new mod_shed_list_view.ShedListView();
|
||||
}
|
||||
});
|
||||
this.admin_toolshed_router.on('route:categories', function(tool_shed) {
|
||||
if (Galaxy.admintoolshedapp.adminShedCategoriesView) {
|
||||
Galaxy.admintoolshedapp.adminShedCategoriesView.reDraw({tool_shed: tool_shed.replace(/\//g, '%2f')});
|
||||
}
|
||||
else {
|
||||
Galaxy.admintoolshedapp.adminShedCategoriesView = new mod_categories_view.CategoryView({tool_shed: tool_shed.replace(/\//g, '%2f')});
|
||||
}
|
||||
});
|
||||
this.admin_toolshed_router.on('route:repositories', function(tool_shed, category_id) {
|
||||
if (Galaxy.admintoolshedapp.adminShedCategoryView) {
|
||||
Galaxy.admintoolshedapp.adminShedCategoryView.reDraw({tool_shed: tool_shed.replace(/\//g, '%2f'), category_id: category_id});
|
||||
}
|
||||
else {
|
||||
Galaxy.admintoolshedapp.adminShedCategoryView = new mod_repositories_view.Category({tool_shed: tool_shed.replace(/\//g, '%2f'), category_id: category_id});
|
||||
}
|
||||
});
|
||||
this.admin_toolshed_router.on('route:repository', function(tool_shed, repository_id) {
|
||||
if (Galaxy.admintoolshedapp.adminRepositoryView) {
|
||||
Galaxy.admintoolshedapp.adminRepositoryView.reDraw({tool_shed: tool_shed.replace(/\//g, '%2f'), repository_id: repository_id});
|
||||
}
|
||||
else {
|
||||
Galaxy.admintoolshedapp.adminRepositoryView = new mod_repository_view.RepoDetails({tool_shed: tool_shed.replace(/\//g, '%2f'), repository_id: repository_id});
|
||||
}
|
||||
});
|
||||
this.admin_toolshed_router.on('route:status', function(repositories) {
|
||||
if (Galaxy.admintoolshedapp.adminRepoStatusView) {
|
||||
Galaxy.admintoolshedapp.adminRepoStatusView.reDraw({repositories: repositories.split('|')});
|
||||
}
|
||||
else {
|
||||
Galaxy.admintoolshedapp.adminRepoStatusView = new mod_repo_status_view.RepoStatus({repositories: repositories.split('|')});
|
||||
}
|
||||
});
|
||||
this.admin_toolshed_router.on('route:workflows', function() {
|
||||
if (Galaxy.admintoolshedapp.adminWorkflowsView) {
|
||||
Galaxy.admintoolshedapp.adminWorkflowsView.reDraw();
|
||||
}
|
||||
else {
|
||||
Galaxy.admintoolshedapp.adminWorkflowsView = new mod_workflows_view.Workflows();
|
||||
}
|
||||
});
|
||||
|
||||
Backbone.history.start({pushState: false});
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
GalaxyApp: GalaxyAdminToolshedApp
|
||||
};
|
||||
|
||||
});
|
||||
@@ -0,0 +1,107 @@
|
||||
define(['mvc/toolshed/toolshed-model', 'mvc/toolshed/util'], function(toolshed_model, toolshed_util) {
|
||||
|
||||
var ToolShedCategories = Backbone.View.extend({
|
||||
|
||||
el: '#center',
|
||||
|
||||
defaults: {
|
||||
tool_shed: "https://toolshed.g2.bx.psu.edu/"
|
||||
},
|
||||
|
||||
initialize: function(options) {
|
||||
var self = this;
|
||||
var shed = options.tool_shed.replace(/\//g, '%2f');
|
||||
this.options = _.defaults(this.options || options, this.defaults);
|
||||
this.model = new toolshed_model.Categories();
|
||||
this.listenTo(this.model, 'sync', this.render);
|
||||
this.model.url = this.model.url + '?tool_shed_url=' + this.options.tool_shed;
|
||||
this.model.tool_shed = shed;
|
||||
this.model.fetch();
|
||||
},
|
||||
|
||||
render: function(options) {
|
||||
this.options = _.extend(this.options, options);
|
||||
this.options.categories = this.model.models;
|
||||
this.options.queue = toolshed_util.queueLength();
|
||||
var category_list_template = this.templateCategoryList;
|
||||
this.$el.html(category_list_template(this.options));
|
||||
$("#center").css('overflow', 'auto');
|
||||
this.bindEvents();
|
||||
},
|
||||
|
||||
bindEvents: function() {
|
||||
var that = this;
|
||||
require(['libs/jquery/jquery-ui'], function() {
|
||||
$("#search_box").autocomplete({
|
||||
source: function(request, response) {
|
||||
var shed_url = that.model.tool_shed.replace(/%2f/g, '/');
|
||||
var base_url = Galaxy.root + 'api/tool_shed/search';
|
||||
var params = {term: request.term, tool_shed_url: shed_url};
|
||||
$.post(base_url, params, function(data) {
|
||||
console.log(data);
|
||||
result_list = toolshed_util.shedParser(data);
|
||||
response(result_list);
|
||||
});
|
||||
},
|
||||
minLength: 3,
|
||||
select: function(event, ui) {
|
||||
var tsr_id = ui.item.value;
|
||||
var api_url = Galaxy.root + 'api/tool_shed/repository';
|
||||
var params = {"tool_shed_url": that.model.tool_shed, "tsr_id": tsr_id};
|
||||
var new_route = 'repository/s/' + that.model.tool_shed + '/r/' + tsr_id;
|
||||
Backbone.history.navigate(new_route, {trigger: true, replace:true});
|
||||
},
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
reDraw: function(options) {
|
||||
this.$el.empty();
|
||||
this.model.url = this.model.url + '?tool_shed_url=' + this.options.tool_shed;
|
||||
this.initialize(options);
|
||||
},
|
||||
|
||||
templateCategoryList: _.template([
|
||||
'<style type="text/css">',
|
||||
'.ui-autocomplete { background-color: #fff; }',
|
||||
'li.ui-menu-item { list-style-type: none; }',
|
||||
'</style>',
|
||||
'<div class="unified-panel-header" id="panel_header" unselectable="on">',
|
||||
'<div class="unified-panel-header-inner" style="layout: inline;">Categories in <%= tool_shed.replace(/%2f/g, "/") %></div>',
|
||||
'<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',
|
||||
'</div>',
|
||||
'<div class="unified-panel-body" id="list_categories">',
|
||||
'<div id="standard-search" style="height: 2em; margin: 1em;">',
|
||||
'<span class="ui-widget" >',
|
||||
'<input class="search-box-input" id="search_box" data-shedurl="<%= tool_shed.replace(/%2f/g, "/") %>" name="search" placeholder="Search repositories by name or id" size="60" type="text" />',
|
||||
'</span>',
|
||||
'</div>',
|
||||
'<div style="clear: both; margin-top: 1em;">',
|
||||
'<table class="grid">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th>Name</th>',
|
||||
'<th>Description</th>',
|
||||
'<th>Repositories</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<% _.each(categories, function(category) { %>',
|
||||
'<tr>',
|
||||
'<td>',
|
||||
'<a href="#/category/s/<%= tool_shed %>/c/<%= category.get("id") %>"><%= category.get("name") %></a>',
|
||||
'</td>',
|
||||
'<td><%= category.get("description") %></td>',
|
||||
'<td><%= category.get("repositories") %></td>',
|
||||
'</tr>',
|
||||
'<% }); %>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
].join(''))
|
||||
});
|
||||
|
||||
return {
|
||||
CategoryView: ToolShedCategories,
|
||||
};
|
||||
|
||||
});
|
||||
@@ -0,0 +1,104 @@
|
||||
define(['toolshed/repository-queue-model'], function() {
|
||||
|
||||
var ToolShedRepositoryQueue = Backbone.View.extend({
|
||||
|
||||
el: '#category_list',
|
||||
|
||||
render: function(options) {
|
||||
this.options = _.extend(this.options, options);
|
||||
var repository_queue_template = this.templateRepoQueue();
|
||||
this.$el.html(repository_queue_template({repository: this.model}));
|
||||
},
|
||||
|
||||
templateRepoQueueTab: _.template([
|
||||
'<li class="nav-tab" role="presentation" id="repository_installation_queue">',
|
||||
'<a href="#repository_queue" data-toggle="tab">Repository Installation Queue</a>',
|
||||
'</li>',
|
||||
].join('')),
|
||||
|
||||
templateRepoQueue: _.template([
|
||||
'<div class="tab-pane" id="repository_queue">',
|
||||
'<table id="queued_repositories" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th class="datasetRow"><input class="btn btn-primary" type="submit" id="install_all" name="install_all" value="Install all" /></th>',
|
||||
'<th class="datasetRow"><input class="btn btn-primary" type="submit" id="clear_queue" name="clear_queue" value="Clear queue" /></th>',
|
||||
'<th class="datasetRow">ToolShed</th>',
|
||||
'<th class="datasetRow">Name</th>',
|
||||
'<th class="datasetRow">Owner</th>',
|
||||
'<th class="datasetRow">Revision</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody>',
|
||||
'<\% _.each(repositories, function(repository) { \%>',
|
||||
'<tr id="queued_repository_<\%= repository.id \%>">',
|
||||
'<td class="datasetRow">',
|
||||
'<input class="btn btn-primary install_one" data-repokey="<\%= repository.queue_key \%>" type="submit" id="install_repository_<\%= repository.id \%>" name="install_repository" value="Install now" />',
|
||||
'</td>',
|
||||
'<td class="datasetRow">',
|
||||
'<input class="btn btn-primary remove_one" data-repokey="<\%= repository.queue_key \%>" type="submit" id="unqueue_repository_<\%= repository.id \%>" name="unqueue_repository" value="Remove from queue" />',
|
||||
'</td>',
|
||||
'<td class="datasetRow"><\%= repository.tool_shed_url \%></td>',
|
||||
'<td class="datasetRow"><\%= repository.name \%></td>',
|
||||
'<td class="datasetRow"><\%= repository.owner \%></td>',
|
||||
'<td class="datasetRow"><\%= repository.changeset \%></td>',
|
||||
'</tr>',
|
||||
'<\% }); \%>',
|
||||
'</tbody>',
|
||||
'</table>',
|
||||
'<input type="button" class="btn btn-primary" id="from_workflow" value="Add from workflow" />',
|
||||
'</div>',
|
||||
].join('')),
|
||||
|
||||
workflows_missing_tools: _.template([
|
||||
'<table id="workflows_missing_tools" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th class="datasetRow">Workflows</th>',
|
||||
'<th class="datasetRow">Tool IDs</th>',
|
||||
'<th class="datasetRow">Shed</th>',
|
||||
'<th class="datasetRow">Name</th>',
|
||||
'<th class="datasetRow">Owner</th>',
|
||||
'<th class="datasetRow">Actions</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody>',
|
||||
'<\% _.each(Object.keys(workflows), function(workflow_key) { \%>',
|
||||
'<\% var workflow_details = workflow_key.split("/"); \%>',
|
||||
'<\% var workflow = workflows[workflow_key]; \%>',
|
||||
'<tr>',
|
||||
'<td class="datasetRow">',
|
||||
'<ul class="workflow_names">',
|
||||
'<\% _.each(workflow.workflows.sort(), function(wf) { \%>',
|
||||
'<li class="workflow_names"><\%= wf \%></li>',
|
||||
'<\% }); \%>',
|
||||
'</ul>',
|
||||
'</td>',
|
||||
'<td class="datasetRow">',
|
||||
'<ul class="workflow_tools">',
|
||||
'<\% _.each(workflow.tools.sort(), function(tool) { \%>',
|
||||
'<li class="workflow_tools"><\%= tool \%></li>',
|
||||
'<\% }); \%>',
|
||||
'</ul>',
|
||||
'</td>',
|
||||
'<td class="datasetRow"><\%= workflow_details[0] \%></td>',
|
||||
'<td class="datasetRow"><\%= workflow_details[2] \%></td>',
|
||||
'<td class="datasetRow"><\%= workflow_details[1] \%></td>',
|
||||
'<td class="datasetRow">',
|
||||
'<ul class="workflow_tools">',
|
||||
'<li class="workflow_tools"><input type="button" class="show_wf_repo btn btn-primary" data-shed="<\%= workflow_details[0] \%>" data-owner="<\%= workflow_details[1] \%>" data-repo="<\%= workflow_details[2] \%>" data-toolids="<\%= workflow.tools.join(",") \%>" value="Preview" /></li>',
|
||||
'<li><input type="button" class="queue_wf_repo btn btn-primary" data-shed="<\%= workflow_details[0] \%>" data-owner="<\%= workflow_details[1] \%>" data-repo="<\%= workflow_details[2] \%>" data-toolids="<\%= workflow.tools.join(",") \%>" value="Add to queue" /></li>',
|
||||
'</ul>',
|
||||
'</td>',
|
||||
'</tr>',
|
||||
'<\% }); \%>',
|
||||
'</ul>',
|
||||
'</div>',
|
||||
].join(''))
|
||||
});
|
||||
|
||||
return {
|
||||
RepoQueue: ToolShedRepositoryQueue,
|
||||
};
|
||||
|
||||
});
|
||||
@@ -0,0 +1,134 @@
|
||||
define(['mvc/toolshed/toolshed-model', 'mvc/toolshed/util'], function(toolshed_model, toolshed_util) {
|
||||
|
||||
var ToolShedRepoStatusView = Backbone.View.extend({
|
||||
|
||||
el: '#center',
|
||||
|
||||
initialize: function(options) {
|
||||
var self = this;
|
||||
this.options = _.defaults(this.options || [{}], options, this.defaults);
|
||||
this.model = new toolshed_model.RepoStatus();
|
||||
this.listenTo(this.model, 'sync', this.render);
|
||||
this.model.url += '?repositories=' + this.options.repositories.join('|');
|
||||
this.model.fetch();
|
||||
this.timer = setInterval(function(self) {
|
||||
var terminal_states = ['installed', 'error'];
|
||||
var all_done = true;
|
||||
_.some(self.model.models, function(repository) {
|
||||
repo_id = repository.get('id');
|
||||
repo_status = repository.get('status').toLowerCase();
|
||||
if (terminal_states.indexOf(repo_status) === -1) {
|
||||
all_done = false;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
if (all_done) {
|
||||
clearInterval(self.timer);
|
||||
}
|
||||
else {
|
||||
self.model.fetch();
|
||||
}
|
||||
}, 2000, this);
|
||||
},
|
||||
|
||||
close: function() {
|
||||
clearInterval(this.timer);
|
||||
},
|
||||
|
||||
render: function(options) {
|
||||
this.options = _.extend(this.options, options);
|
||||
var repo_status_template = this.templateRepoStatus;
|
||||
this.$el.html(repo_status_template({title: 'Repository Status', repositories: this.model.models, queue: toolshed_util.queueLength()}));
|
||||
$("#center").css('overflow', 'auto');
|
||||
this.bindEvents();
|
||||
},
|
||||
|
||||
bindEvents: function() {
|
||||
var that = this;
|
||||
},
|
||||
|
||||
reDraw: function(options){
|
||||
this.$el.empty();
|
||||
this.initialize(options);
|
||||
},
|
||||
|
||||
templateRepoStatus: _.template([
|
||||
'<div class="unified-panel-header" id="panel_header" unselectable="on">',
|
||||
'<div class="unified-panel-header-inner"><%= title %></div>',
|
||||
'<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',
|
||||
'</div>',
|
||||
'<style type="text/css">',
|
||||
'.state-color-new,',
|
||||
'.state-color-deactivated,',
|
||||
'.state-color-uninstalled { border-color:#bfbfbf; background:#eee }',
|
||||
'.state-color-cloning,',
|
||||
'.state-color-setting-tool-versions,',
|
||||
'.state-color-installing-repository-dependencies,',
|
||||
'.state-color-installing-tool-dependencies,',
|
||||
'.state-color-loading-proprietary-datatypes { border-color:#AAAA66; background:#FFFFCC }',
|
||||
'.state-color-installed { border-color:#20b520; background:#b0f1b0 }',
|
||||
'.state-color-error { border-color:#dd1b15; background:#f9c7c5 }',
|
||||
'</style>',
|
||||
'<table id="grid-table" class="grid">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th id="null-header">Name<span class="sort-arrow"></span></th>',
|
||||
'<th id="null-header">Description<span class="sort-arrow"></span></th>',
|
||||
'<th id="null-header">Owner<span class="sort-arrow"></span></th>',
|
||||
'<th id="null-header">Revision<span class="sort-arrow"></span></th>',
|
||||
'<th id="null-header">Installation Status<span class="sort-arrow"></span></th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody id="grid-table-body">',
|
||||
'<% _.each(repositories, function(repository) { %>',
|
||||
'<tr>',
|
||||
'<td>',
|
||||
'<div id="" class="">',
|
||||
'<label id="repo-name-<%= repository.get("id") %>" for="<%= repository.get("id") %>">',
|
||||
'<%= repository.get("name") %>',
|
||||
'</label>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'<td>',
|
||||
'<div id="" class="">',
|
||||
'<label id="repo-desc-<%= repository.get("id") %>" for="<%= repository.get("id") %>">',
|
||||
'<%= repository.get("description") %>',
|
||||
'</label>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'<td>',
|
||||
'<div id="" class="">',
|
||||
'<label id="repo-user-<%= repository.get("id") %>" for="<%= repository.get("id") %>">',
|
||||
'<%= repository.get("owner") %>',
|
||||
'</label>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'<td>',
|
||||
'<div id="" class="">',
|
||||
'<label id="repo-changeset-<%= repository.get("id") %>" for="<%= repository.get("id") %>">',
|
||||
'<%= repository.get("changeset_revision") %>',
|
||||
'</label>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'<td>',
|
||||
'<div id="" class="">',
|
||||
'<label id="RepositoryStatus-<%= repository.get("id") %>" for="<%= repository.get("id") %>">',
|
||||
'<div class="repo-status count-box state-color-<%= repository.get("status").toLowerCase().replace(/ /g, "-") %>" id="RepositoryStatus-<%= repository.get("id") %>">',
|
||||
'<%= repository.get("status") %>',
|
||||
'</div>',
|
||||
'</label>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'</tr>',
|
||||
'<% }); %>',
|
||||
'</tbody>',
|
||||
'<tfoot id="grid-table-footer"></tfoot>',
|
||||
'</table>'
|
||||
].join(''))
|
||||
});
|
||||
|
||||
return {
|
||||
RepoStatus: ToolShedRepoStatusView,
|
||||
};
|
||||
|
||||
});
|
||||
@@ -0,0 +1,101 @@
|
||||
define(['mvc/toolshed/toolshed-model', 'mvc/toolshed/util'], function(toolshed_model, toolshed_util) {
|
||||
|
||||
var ToolShedCategoryContentsView = Backbone.View.extend({
|
||||
|
||||
el: '#center',
|
||||
|
||||
initialize: function(params) {
|
||||
var self = this;
|
||||
this.model = new toolshed_model.CategoryCollection();
|
||||
this.listenTo(this.model, 'sync', this.render);
|
||||
var shed = params.tool_shed.replace(/\//g, '%2f');
|
||||
this.model.url += '?tool_shed_url=' + shed + '&category_id=' + params.category_id;
|
||||
this.model.tool_shed = shed;
|
||||
this.model.category = params.category_id;
|
||||
this.model.fetch();
|
||||
},
|
||||
|
||||
render: function(options) {
|
||||
this.options = _.extend(this.options, options);
|
||||
var category_contents_template = this.templateCategoryContents;
|
||||
this.$el.html(category_contents_template({category: this.model.models[0], tool_shed: this.model.tool_shed, queue: toolshed_util.queueLength()}));
|
||||
$("#center").css('overflow', 'auto');
|
||||
this.bindEvents();
|
||||
},
|
||||
|
||||
bindEvents: function() {
|
||||
var that = this;
|
||||
require(['libs/jquery/jquery-ui'], function() {
|
||||
$("#search_box").autocomplete({
|
||||
source: function(request, response) {
|
||||
var shed_url = that.model.tool_shed.replace(/%2f/g, '/');
|
||||
var base_url = Galaxy.root + 'api/tool_shed/search';
|
||||
var params = {term: request.term, tool_shed_url: shed_url};
|
||||
$.post(base_url, params, function(data) {
|
||||
result_list = toolshed_util.shedParser(data);
|
||||
response(result_list);
|
||||
});
|
||||
},
|
||||
minLength: 3,
|
||||
select: function(event, ui) {
|
||||
var tsr_id = ui.item.value;
|
||||
var new_route = 'repository/s/' + that.model.tool_shed + '/r/' + tsr_id;
|
||||
Backbone.history.navigate(new_route, {trigger: true, replace:true});
|
||||
},
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
reDraw: function(options){
|
||||
this.$el.empty();
|
||||
this.initialize(options);
|
||||
},
|
||||
|
||||
templateCategoryContents: _.template([
|
||||
'<style type="text/css">',
|
||||
'.ui-autocomplete { background-color: #fff; }',
|
||||
'li.ui-menu-item { list-style-type: none; }',
|
||||
'</style>',
|
||||
'<div class="unified-panel-header" id="panel_header" unselectable="on">',
|
||||
'<div class="unified-panel-header-inner">Repositories in <%= category.get("name") %></div>',
|
||||
'<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',
|
||||
'</div>',
|
||||
'<div class="unified-panel-body" id="list_repositories">',
|
||||
'<div id="standard-search" style="height: 2em; margin: 1em;">',
|
||||
'<span class="ui-widget" >',
|
||||
'<input class="search-box-input" id="search_box" name="search" data-shedurl="<%= tool_shed.replace(/%2f/g, "/") %>" placeholder="Search repositories by name or id" size="60" type="text" />',
|
||||
'</span>',
|
||||
'</div>',
|
||||
'<div style="clear: both; margin-top: 1em;">',
|
||||
'<table class="grid">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th style="width: 10%;">Owner</th>',
|
||||
'<th style="width: 15%;">Name</th>',
|
||||
'<th>Synopsis</th>',
|
||||
'<th style="width: 10%;">Type</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<% _.each(category.get("repositories"), function(repository) { %>',
|
||||
'<tr>',
|
||||
'<td><%= repository.owner %></td>',
|
||||
'<td>',
|
||||
'<div style="float: left; margin-left: 1px;" class="menubutton split">',
|
||||
'<a href="#/repository/s/<%= tool_shed %>/r/<%= repository.id %>"><%= repository.name %></a>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'<td><%= repository.description %></td>',
|
||||
'<td><%= repository.type %></td>',
|
||||
'</tr>',
|
||||
'<% }); %>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'</div>'
|
||||
].join(''))
|
||||
});
|
||||
|
||||
return {
|
||||
Category: ToolShedCategoryContentsView,
|
||||
};
|
||||
|
||||
});
|
||||
@@ -0,0 +1,142 @@
|
||||
define(['mvc/toolshed/toolshed-model', 'mvc/toolshed/util'], function(toolshed_model, toolshed_util) {
|
||||
|
||||
var View = Backbone.View.extend({
|
||||
|
||||
el: '#center',
|
||||
|
||||
defaults: [{}],
|
||||
|
||||
initialize: function(options) {
|
||||
var that = this;
|
||||
this.model = new toolshed_model.RepoQueue();
|
||||
this.listenTo(this.model, 'sync', this.render);
|
||||
this.model.fetch();
|
||||
that.render();
|
||||
},
|
||||
|
||||
render: function(options) {
|
||||
var that = this;
|
||||
var repo_queue_template = that.templateRepoQueue;
|
||||
var repositories = that.model.models;
|
||||
that.$el.html(repo_queue_template({title: 'Repository Installation Queue', repositories: repositories, queue: toolshed_util.queueLength()}));
|
||||
$("#center").css('overflow', 'auto');
|
||||
that.bindEvents();
|
||||
},
|
||||
|
||||
bindEvents: function() {
|
||||
var that = this;
|
||||
$('.install_one').on('click', function() {
|
||||
var repository_metadata = that.loadFromQueue($(this).attr('data-repokey'));
|
||||
that.installFromQueue(repository_metadata, $(this).attr('data-repokey'));
|
||||
});
|
||||
$('.remove_one').on('click', function() {
|
||||
var queue_key = $(this).attr('data-repokey');
|
||||
var repo_queue = JSON.parse(localStorage.repositories);
|
||||
if (repo_queue.hasOwnProperty(queue_key)) {
|
||||
var repository_id = repo_queue[queue_key].repository.id;
|
||||
delete repo_queue[queue_key];
|
||||
$('#queued_repository_' + repository_id).remove();
|
||||
}
|
||||
localStorage.repositories = JSON.stringify(repo_queue);
|
||||
});
|
||||
$('#clear_queue').on('click', function() {
|
||||
localStorage.repositories = "{}";
|
||||
});
|
||||
$('#from_workflow').on('click', function() { Backbone.history.navigate('workflows', {trigger: true, replace:true}); });
|
||||
},
|
||||
|
||||
installFromQueue: function(repository_metadata, queue_key) {
|
||||
var that = this;
|
||||
var params = Object();
|
||||
params.install_tool_dependencies = repository_metadata.install_tool_dependencies;
|
||||
params.install_repository_dependencies = repository_metadata.install_repository_dependencies;
|
||||
params.install_resolver_dependencies = repository_metadata.install_resolver_dependencies;
|
||||
params.tool_panel_section = repository_metadata.tool_panel_section;
|
||||
params.shed_tool_conf = repository_metadata.shed_tool_conf;
|
||||
params.repositories = JSON.stringify([[repository_metadata.repository.id, repository_metadata.changeset_revision]]);
|
||||
params.tool_shed_repository_ids = JSON.stringify([repository_metadata.repository.id]);
|
||||
params.tool_shed_url = queue_key.split('|')[0];
|
||||
params.changeset = repository_metadata.changeset_revision;
|
||||
var url = Galaxy.root + 'api/tool_shed_repositories/install?async=True';
|
||||
$('#queued_repository_' + repository_metadata.repository.id).remove();
|
||||
if (localStorage.repositories) {
|
||||
if (queue_key === undefined) {
|
||||
queue_key = toolshed_util.queueKey(repository_metadata);
|
||||
}
|
||||
repository_queue = JSON.parse(localStorage.repositories);
|
||||
if (repository_queue.hasOwnProperty(queue_key)) {
|
||||
delete repository_queue[queue_key];
|
||||
localStorage.repositories = JSON.stringify(repository_queue);
|
||||
}
|
||||
}
|
||||
|
||||
$.post(url, params, function(data) {
|
||||
var iri_params = JSON.parse(data);
|
||||
var repositories = iri_params.repositories;
|
||||
var new_route = 'status/r/' + repositories.join('|');
|
||||
$.post(Galaxy.root + 'admin_toolshed/manage_repositories', iri_params, function(data) {
|
||||
console.log( "Initializing repository installation succeeded" );
|
||||
});
|
||||
Backbone.history.navigate(new_route, {trigger: true, replace:true});
|
||||
});
|
||||
},
|
||||
|
||||
loadFromQueue: function(queue_key) {
|
||||
repository_queue = JSON.parse(localStorage.repositories);
|
||||
if (repository_queue.hasOwnProperty(queue_key)) {
|
||||
return repository_queue[queue_key];
|
||||
}
|
||||
return undefined;
|
||||
},
|
||||
|
||||
reDraw: function(options) {
|
||||
this.$el.empty();
|
||||
this.initialize(options);
|
||||
this.model.fetch();
|
||||
this.render(options);
|
||||
},
|
||||
|
||||
templateRepoQueue: _.template([
|
||||
'<div class="unified-panel-header" id="panel_header" unselectable="on">',
|
||||
'<div class="unified-panel-header-inner"><%= title %></div>',
|
||||
'<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',
|
||||
'</div>',
|
||||
'<div class="tab-pane" id="panel_header" id="repository_queue">',
|
||||
'<table id="queued_repositories" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th class="datasetRow">Name</th>',
|
||||
'<th class="datasetRow">Owner</th>',
|
||||
'<th class="datasetRow">Revision</th>',
|
||||
'<th class="datasetRow">ToolShed</th>',
|
||||
'<th class="datasetRow">Install</th>',
|
||||
'<th class="datasetRow"><input class="btn btn-primary" type="submit" id="clear_queue" name="clear_queue" value="Clear queue" /></th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody>',
|
||||
'<% _.each(repositories, function(repository) { %>',
|
||||
'<tr id="queued_repository_<%= repository.get("id") %>">',
|
||||
'<td class="datasetRow"><%= repository.get("repository").name %></td>',
|
||||
'<td class="datasetRow"><%= repository.get("repository").owner %></td>',
|
||||
'<td class="datasetRow"><%= repository.get("changeset_revision") %></td>',
|
||||
'<td class="datasetRow"><%= repository.get("tool_shed_url") %></td>',
|
||||
'<td class="datasetRow">',
|
||||
'<input class="btn btn-primary install_one" data-repokey="<%= repository.get("queue_key") %>" type="submit" id="install_repository_<%= repository.get("id") %>" name="install_repository" value="Install now" />',
|
||||
'</td>',
|
||||
'<td class="datasetRow">',
|
||||
'<input class="btn btn-primary remove_one" data-repokey="<%= repository.get("queue_key") %>" type="submit" id="unqueue_repository_<%= repository.get("id") %>" name="unqueue_repository" value="Remove from queue" />',
|
||||
'</td>',
|
||||
'</tr>',
|
||||
'<% }); %>',
|
||||
'</tbody>',
|
||||
'</table>',
|
||||
'<input type="button" class="btn btn-primary" id="from_workflow" value="Add from workflow" />',
|
||||
'</div>',
|
||||
].join(''))
|
||||
});
|
||||
|
||||
return {
|
||||
RepoQueueView: View,
|
||||
};
|
||||
|
||||
});
|
||||
@@ -0,0 +1,487 @@
|
||||
define(['mvc/toolshed/toolshed-model',
|
||||
'libs/jquery/jstree',
|
||||
'utils/utils',
|
||||
'mvc/ui/ui-modal',
|
||||
'mvc/form/form-view',
|
||||
'mvc/toolshed/util'], function(toolshed_model,
|
||||
jstree,
|
||||
Utils,
|
||||
Modal,
|
||||
FormView,
|
||||
toolshed_util) {
|
||||
|
||||
var ToolShedRepositoryView = Backbone.View.extend({
|
||||
|
||||
el: '#center',
|
||||
|
||||
initialize: function(params) {
|
||||
var self = this;
|
||||
this.options = _.defaults(this.options || {}, this.defaults);
|
||||
this.model = new toolshed_model.RepositoryCollection();
|
||||
this.listenTo(this.model, 'sync', this.render);
|
||||
shed = params.tool_shed.replace(/\//g, '%2f');
|
||||
this.model.url += '?tool_shed_url=' + shed + '&repository_id=' + params.repository_id;
|
||||
this.model.tool_shed_url = params.tool_shed.replace(/%2f/g, '/');
|
||||
this.model.tool_shed = shed;
|
||||
this.model.category = params.repository_id;
|
||||
this.model.fetch();
|
||||
},
|
||||
|
||||
render: function(options) {
|
||||
var repo_details_template = this.templateRepoDetails;
|
||||
var models = this.model.models[0];
|
||||
this.options = {
|
||||
repository: models.get('repository'),
|
||||
tool_shed: this.model.tool_shed,
|
||||
queue: toolshed_util.queueLength(),
|
||||
}
|
||||
var changesets = Object.keys(this.options.repository.metadata);
|
||||
this.options.current_changeset = (this.options.current_changeset || changesets[changesets.length - 1]);
|
||||
this.options.current_metadata = this.options.repository.metadata[this.options.current_changeset];
|
||||
this.options.current_metadata.tool_shed_url = this.model.tool_shed_url;
|
||||
this.options.tools = this.options.current_metadata.tools;
|
||||
this.options.repository_dependencies_template = this.templateRepoDependencies;
|
||||
this.options.repository_dependency_template = this.templateRepoDependency;
|
||||
this.options.tps_template_global_select = this.templateGlobalSectionSelect;
|
||||
this.options.tps_template_tool_select = this.templateToolSectionSelect;
|
||||
this.options.tps_select_options = this.templatePanelSelectOptions;
|
||||
this.options.tool_dependencies = models.get('tool_dependencies');
|
||||
this.options.shed_tool_conf = this.templateShedToolConf({'stc_html': models.get('shed_conf')});
|
||||
this.options.panel_section_dict = models.get('panel_section_dict');
|
||||
this.options.api_url = Galaxy.root + 'api/tool_shed_repositories/install?async=True';
|
||||
this.options = _.extend(this.options, options);
|
||||
this.$el.html(repo_details_template(this.options));
|
||||
this.checkInstalled(this.options.current_metadata);
|
||||
this.bindEvents();
|
||||
$("#center").css('overflow', 'auto');
|
||||
},
|
||||
|
||||
bindEvents: function(){
|
||||
var that = this;
|
||||
$('#changeset').on('change', function () {
|
||||
that.options.current_changeset = $('#changeset').find("option:selected").text();
|
||||
that.options.current_metadata = that.options.repository.metadata[that.options.current_changeset];
|
||||
that.checkInstalled(that.options.current_metadata);
|
||||
that.reDraw();
|
||||
});
|
||||
$('#tool_panel_section_select').on('change', function() {
|
||||
that.tpsSelection();
|
||||
});
|
||||
$('#install_repository').on('click', function(ev) {
|
||||
var form = $('#repository_installation');
|
||||
ev.preventDefault();
|
||||
var params = {};
|
||||
params.repositories = JSON.stringify([[$('#install_repository').attr('data-tsrid'), $('#changeset').find("option:selected").val()]]);
|
||||
params.tool_shed_repository_ids = JSON.stringify([$('#install_repository').attr('data-tsrid')]);
|
||||
params.tool_shed_url = that.model.tool_shed_url;
|
||||
params.install_tool_dependencies = $("#install_tool_dependencies").val();
|
||||
params.install_repository_dependencies = $("#install_repository_dependencies").val();
|
||||
params.install_resolver_dependencies = $("#install_resolver_dependencies").val();
|
||||
var tps = that.panelSelect(params);
|
||||
params.tool_panel_section = JSON.stringify(that.panelSelect(params));
|
||||
params.shed_tool_conf = $("select[name='shed_tool_conf']").find('option:selected').val()
|
||||
params.changeset = $('#changeset').find("option:selected").val();
|
||||
url = $('#repository_installation').attr('action');
|
||||
that.prepareInstall(params, url);
|
||||
});
|
||||
$('#queue_install').on('click', function(ev) {
|
||||
that.options.current_changeset = $('#changeset').find("option:selected").text();
|
||||
that.options.current_metadata = that.options.repository.metadata[that.options.current_changeset];
|
||||
var changeset = that.options.current_changeset;
|
||||
var repository_metadata = {};
|
||||
_.each(Object.keys(that.options.current_metadata), function(key) {
|
||||
if (!repository_metadata[key]) {
|
||||
repository_metadata[key] = that.options.current_metadata[key];
|
||||
}
|
||||
});
|
||||
repository_metadata.install_tool_dependencies = $("#install_tool_dependencies").val();
|
||||
repository_metadata.install_repository_dependencies = $("#install_repository_dependencies").val();
|
||||
repository_metadata.install_resolver_dependencies = $("#install_resolver_dependencies").val();
|
||||
repository_metadata.tool_panel_section = JSON.stringify(that.panelSelect({}));
|
||||
repository_metadata.shed_tool_conf = $("select[name='shed_tool_conf']").find('option:selected').val()
|
||||
repository_metadata.tool_shed_url = that.model.tool_shed_url;
|
||||
if (repository_metadata.tool_shed_url.substr(-1) == '/') {
|
||||
repository_metadata.tool_shed_url = repository_metadata.tool_shed_url.substr(0, repository_metadata.tool_shed_url.length - 1);
|
||||
}
|
||||
toolshed_util.addToQueue(repository_metadata);
|
||||
that.checkInstalled(repository_metadata);
|
||||
});
|
||||
$('.tool_panel_section_picker').on('change', function() {
|
||||
new_value = $(this).find('option:selected').val();
|
||||
default_tps = $('#tool_panel_section_select').find('option:selected').val();
|
||||
if (new_value == default_tps) {
|
||||
$(this).attr('default', 'active');
|
||||
}
|
||||
else {
|
||||
$(this).removeAttr('default');
|
||||
}
|
||||
});
|
||||
$(function() { $('#repository_dependencies').jstree(); });
|
||||
$('.tool_form').on('click', function() {
|
||||
var guid = $(this).attr('data-guid');
|
||||
var clean = $(this).attr('data-clean');
|
||||
var name = $(this).attr('data-name');
|
||||
var desc = $(this).attr('data-desc');
|
||||
var tool_shed_url = that.model.tool_shed_url;
|
||||
var tsr_id = $('#repository_details').attr('data-tsrid');
|
||||
var changeset = $('#changeset').find("option:selected").val();
|
||||
var api_url = Galaxy.root + 'api/tool_shed/tool_json';
|
||||
var params = {'guid': guid, 'tool_shed_url': tool_shed_url, 'tsr_id': tsr_id, 'changeset': changeset};
|
||||
$.get(api_url, params, function(data) {
|
||||
data.cls = 'ui-portlet-plain';
|
||||
var toolform = new FormView(data);
|
||||
Utils.deepeach(data.inputs, function( input ) {
|
||||
if (input.type) {
|
||||
if (['data', 'data_collection'].indexOf(input.type) != -1) {
|
||||
input.type = 'hidden';
|
||||
input.info = 'Data input \'' + input.name + '\' (' + Utils.textify(input.extensions) + ')';
|
||||
}
|
||||
}
|
||||
});
|
||||
var modal = new Modal.View();
|
||||
var modal_title = '<u>' + name + '</u> ' + desc;
|
||||
modal.show({'closing_events': true,
|
||||
'title': modal_title,
|
||||
'body': toolform.$el,
|
||||
'buttons': { 'Close': function() { modal.hide(); }}});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
checkInstalled: function(metadata) {
|
||||
var that = this;
|
||||
var params = {name: metadata.name, owner: metadata.owner};
|
||||
var already_installed = false;
|
||||
var queued = that.repoQueued(metadata);
|
||||
$.get(Galaxy.root + 'api/tool_shed_repositories', params, function(data) {
|
||||
for (var index = 0; index < data.length; index++) {
|
||||
var repository = data[index];
|
||||
var installed = !repository.deleted && !repository.uninstalled;
|
||||
var changeset_match = repository.changeset_revision == metadata.changeset_revision ||
|
||||
repository.installed_changeset_revision == metadata.changeset_revision;
|
||||
if (repository.name == metadata.repository.name && repository.owner == metadata.repository.owner && installed && changeset_match) {
|
||||
already_installed = true;
|
||||
}
|
||||
if (already_installed) {
|
||||
$('#install_repository').prop('disabled', true);
|
||||
$('#install_repository').val('This revision is already installed');
|
||||
}
|
||||
else {
|
||||
$('#install_repository').prop('disabled', false);
|
||||
$('#install_repository').val('Install this revision');
|
||||
}
|
||||
}
|
||||
if (that.repoQueued(metadata) || already_installed) {
|
||||
$('#queue_install').hide();
|
||||
$('#queue_install').val('This revision is already in the queue');
|
||||
}
|
||||
else {
|
||||
$('#queue_install').show();
|
||||
$('#queue_install').val('Install this revision later');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
panelSelect: function(params) {
|
||||
var tool_panel_section = {};
|
||||
if ($('#tool_panel_section_select').length) {
|
||||
params.tool_panel_section_id = $('#tool_panel_section_select').find("option:selected").val();
|
||||
}
|
||||
else {
|
||||
params.new_tool_panel_section = $("#new_tool_panel_section").val();
|
||||
}
|
||||
$('.tool_panel_section_picker').each(function() {
|
||||
element_name = $(this).attr('name');
|
||||
tool_guid = $(this).attr('data-toolguid');
|
||||
if (element_name === 'tool_panel_section_id') {
|
||||
tool_panel_section[tool_guid] = { tool_panel_section: $(this).find("option:selected").val(), action: 'append' }
|
||||
}
|
||||
else {
|
||||
tool_panel_section[tool_guid] = { tool_panel_section: $(this).val(), action: 'create' }
|
||||
}
|
||||
});
|
||||
return tool_panel_section;
|
||||
},
|
||||
|
||||
reDraw: function(options) {
|
||||
this.$el.empty();
|
||||
this.initialize(options);
|
||||
},
|
||||
|
||||
repoQueued: function(metadata) {
|
||||
var that = this;
|
||||
if (!localStorage.repositories) {
|
||||
return;
|
||||
}
|
||||
var repository_queue = JSON.parse(localStorage.repositories);
|
||||
var changeset = metadata.changeset_revision;
|
||||
var queue_key = that.queueKey(metadata);
|
||||
if (localStorage.repositories) {
|
||||
queued_repos = JSON.parse(localStorage.repositories);
|
||||
}
|
||||
if (queued_repos.hasOwnProperty(queue_key)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
queueKey: function (metadata) {
|
||||
var shed_url = this.model.tool_shed_url;
|
||||
// Make sure there is never a trailing slash on the shed URL.
|
||||
if (shed_url.substr(-1) == '/') {
|
||||
shed_url = shed_url.substr(0, shed_url.length - 1);
|
||||
}
|
||||
return shed_url + '|' + metadata.repository_id + '|' + metadata.changeset_revision;
|
||||
},
|
||||
|
||||
tpsSelection: function() {
|
||||
new_tps = $('#tool_panel_section_select').find('option:selected').val();
|
||||
$('.tool_panel_section_picker[default="active"]').each(function() {
|
||||
$(this).val(new_tps);
|
||||
});
|
||||
},
|
||||
|
||||
prepareInstall: function(params, api_url) {
|
||||
var that = this;
|
||||
$.post(api_url, params, function(data) {
|
||||
iri_parameters = JSON.parse(data);
|
||||
that.doInstall(iri_parameters);
|
||||
});
|
||||
},
|
||||
|
||||
doInstall: function(params) {
|
||||
controller_url = Galaxy.root + 'admin_toolshed/manage_repositories';
|
||||
var repositories = params.repositories;
|
||||
var new_route = 'status/r/' + repositories.join('|');
|
||||
$.post(controller_url, params, function(data) {
|
||||
console.log( "Initializing repository installation succeeded" );
|
||||
})
|
||||
Backbone.history.navigate(new_route, {trigger: true, replace:true});
|
||||
},
|
||||
|
||||
templateRepoDetails: _.template([
|
||||
'<div class="unified-panel-header" id="panel_header" unselectable="on">',
|
||||
'<div class="unified-panel-header-inner">Repository information for <strong><%= repository.name %></strong> from <strong><%= repository.owner %></strong></div>',
|
||||
'<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',
|
||||
'</div>',
|
||||
'<div class="unified-panel-body" id="repository_details" data-tsrid="<%= repository.id %>">',
|
||||
'<form id="repository_installation" name="install_repository" method="post" action="<%= api_url %>">',
|
||||
'<input type="hidden" id="repositories" name="<%= repository.id %>" value="ID" />',
|
||||
'<input type="hidden" id="tool_shed_url" name="tool_shed_url" value="<%= tool_shed %>" />',
|
||||
'<div class="toolForm">',
|
||||
'<div class="toolFormTitle">Changeset</div>',
|
||||
'<div class="toolFormBody changeset">',
|
||||
'<select id="changeset" name="changeset" style="margin: 5px;">',
|
||||
'<% _.each(Object.keys(repository.metadata), function(changeset) { %>',
|
||||
'<% if (changeset == current_changeset) { var selected = "selected "; } else { var selected = ""; } %>',
|
||||
'<option <%= selected %>value="<%= changeset.split(":")[1] %>"><%= changeset %></option>',
|
||||
'<% }); %>',
|
||||
'</select>',
|
||||
'<input class="btn btn-primary preview-button" data-tsrid="<\%= current_metadata.repository.id \%>" type="submit" id="install_repository" name="install_repository" value="Install this revision now" />',
|
||||
'<input class="btn btn-primary preview-button" type="button" id="queue_install" name="queue_install" value="Install this revision later" />',
|
||||
'<div class="toolParamHelp" style="clear: both;">Please select a revision and review the settings below before installing.</div>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'<%= shed_tool_conf %>',
|
||||
'<% if (current_metadata.has_repository_dependencies) { %>',
|
||||
'<div class="toolFormTitle">Repository dependencies for <strong id="current_changeset"><%= current_changeset %></strong></div>',
|
||||
'<div class="toolFormBody">',
|
||||
'<p id="install_repository_dependencies_checkbox">',
|
||||
'<input type="checkbox" checked id="install_repository_dependencies" />',
|
||||
'<label for="install_repository_dependencies">Install repository dependencies</label>',
|
||||
'</p>',
|
||||
'<% current_metadata.repository_dependency_template = repository_dependency_template; %>',
|
||||
'<div class="tables container-table" id="repository_dependencies">',
|
||||
'<div class="expandLink">',
|
||||
'<a class="toggle_folder" data_target="repository_dependencies_table">',
|
||||
'Repository dependencies – <em>installation of these additional repositories is required</em>',
|
||||
'</a>',
|
||||
'</div>',
|
||||
'<%= repository_dependencies_template(current_metadata) %>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'<% } %>',
|
||||
'<% if (current_metadata.includes_tool_dependencies) { %>',
|
||||
'<div class="toolFormTitle">Tool dependencies</div>',
|
||||
'<div class="toolFormBody">',
|
||||
'<p id="install_resolver_dependencies_checkbox">',
|
||||
'<input type="checkbox" checked id="install_resolver_dependencies" />',
|
||||
'<label for="install_resolver_dependencies">Install resolver dependencies</label>',
|
||||
'</p>',
|
||||
'<p id="install_tool_dependencies_checkbox">',
|
||||
'<input type="checkbox" checked id="install_tool_dependencies" />',
|
||||
'<label for="install_tool_dependencies">Install tool dependencies</label>',
|
||||
'</p>',
|
||||
'<div class="tables container-table" id="tool_dependencies">',
|
||||
'<div class="expandLink">',
|
||||
'<a class="toggle_folder" data_target="tool_dependencies_table">',
|
||||
'Tool dependencies – <em>repository tools require handling of these dependencies</em>',
|
||||
'</a>',
|
||||
'</div>',
|
||||
'<table class="tables container-table" id="tool_dependencies_table" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead>',
|
||||
'<tr style="display: table-row;" class="datasetRow" parent="0" id="libraryItem-rt-f9cad7b01a472135">',
|
||||
'<th style="padding-left: 40px;">Name</th>',
|
||||
'<th>Version</th>',
|
||||
'<th>Type</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody id="tool_deps">',
|
||||
'<% _.each(tool_dependencies[current_changeset], function(dependency) { %>',
|
||||
'<tr class="datasetRow tool_dependency_row" style="display: table-row;">',
|
||||
'<td style="padding-left: 40px;">',
|
||||
'<%= dependency.name %></td>',
|
||||
'<td><%= dependency.version %></td>',
|
||||
'<td><%= dependency.type %></td>',
|
||||
'</tr>',
|
||||
'<% }); %>',
|
||||
'</tbody>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'<% } %>',
|
||||
'<% if (current_metadata.includes_tools_for_display_in_tool_panel) { %>',
|
||||
'<div class="toolFormTitle">Tools – <em>click the name to preview the tool and use the pop-up menu to inspect all metadata</em></div>',
|
||||
'<div class="toolFormBody">',
|
||||
'<div class="tables container-table" id="tools_toggle">',
|
||||
'<table class="tables container-table" id="valid_tools" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead>',
|
||||
'<tr style="display: table-row;" class="datasetRow" parent="0" id="libraryItem-rt-f9cad7b01a472135">',
|
||||
'<th style="padding-left: 40px;">Name</th>',
|
||||
'<th>Description</th>',
|
||||
'<th>Version</th>',
|
||||
'<th><%= tps_template_global_select({tps: panel_section_dict, tps_select_options: tps_select_options}) %></tr>',
|
||||
'</thead>',
|
||||
'<tbody id="tools_in_repo">',
|
||||
'<% _.each(current_metadata.tools, function(tool) { %>',
|
||||
'<tr id="libraryItem-<%= tool.clean %>" class="tool_row" style="display: table-row;" style="width: 15%">',
|
||||
'<td style="padding-left: 40px;">',
|
||||
'<div id="tool-<%= tool.clean %>" class="menubutton split popup" style="float: left;">',
|
||||
'<a class="tool_form view-info" data-toggle="modal" data-target="toolform_<%= tool.clean %>" data-clean="<%= tool.clean %>" data-guid="<%= tool.guid %>" data-name="<%= tool.name %>" data-desc="<%= tool.description %>"><%= tool.name %></a>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'<td><%= tool.description %></td>',
|
||||
'<td style="width: 15%"><%= tool.version %></td>',
|
||||
'<td style="width: 35%" id="tool_tps_<%= tool.clean %>">',
|
||||
'<%= tps_template_tool_select({tool: tool, tps: panel_section_dict, tps_select_options: tps_select_options}) %>',
|
||||
'</td>',
|
||||
'</tr>',
|
||||
'<% }); %>',
|
||||
'</tbody>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'<% } %>',
|
||||
'</form>',
|
||||
'</div>',
|
||||
].join('')),
|
||||
|
||||
templateRepoDependencies: _.template([
|
||||
'<div class="toolFormTitle">Repository Dependencies</div>',
|
||||
'<div class="toolFormBody tables container-table" id="repository_dependencies">',
|
||||
'<ul>',
|
||||
'<li>Repository installation requires the following',
|
||||
'<% if (has_repository_dependencies) { %>',
|
||||
'<% _.each(repository_dependencies, function(dependency) { %>',
|
||||
'<% dependency.repository_dependency_template = repository_dependency_template; %>',
|
||||
'<%= repository_dependency_template(dependency) %>',
|
||||
'<% }); %>',
|
||||
'<% } %>',
|
||||
'</li>',
|
||||
'</ul>',
|
||||
'</div>'].join('')),
|
||||
|
||||
templateRepoDependency: _.template([
|
||||
'<li id="metadata_<%= id %>" class="datasetRow repository_dependency_row">',
|
||||
'Repository <b><%= repository.name %></b> revision <b><%= changeset_revision %></b> owned by <b><%= repository.owner %></b>',
|
||||
'<% if (has_repository_dependencies) { %>',
|
||||
'<ul class="child_dependencies">',
|
||||
'<% _.each(repository_dependencies, function(dependency) { %>',
|
||||
'<% dependency.repository_dependency_template = repository_dependency_template; %>',
|
||||
'<%= repository_dependency_template(dependency) %>',
|
||||
'<% }); %>',
|
||||
'</ul>',
|
||||
'<% } %>',
|
||||
'</li>',
|
||||
].join('')),
|
||||
|
||||
templateShedToolConf: _.template([
|
||||
'<div class="toolFormTitle">Shed tool configuration file:</div>',
|
||||
'<div class="toolFormBody">',
|
||||
'<div class="form-row">',
|
||||
'<%= stc_html %>',
|
||||
'<div class="toolParamHelp" style="clear: both;">Select the file whose <b>tool_path</b> setting you want used for installing repositories.</div>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
].join('')),
|
||||
|
||||
templateToolDependency: _.template([
|
||||
'<% if (has_repository_dependencies) { %>',
|
||||
'<% _.each(repository_dependencies, function(dependency) { %>',
|
||||
'<% if (dependency.includes_tool_dependencies) { %>',
|
||||
'<% dependency.tool_dependency_template = tool_dependency_template %>',
|
||||
'<%= tool_dependency_template(dependency) %>',
|
||||
'<% } %>',
|
||||
'<% }); %>',
|
||||
'<% } %>',
|
||||
].join('')),
|
||||
|
||||
templateGlobalSectionCreate: _.template([
|
||||
'<div id="tool_panel_section">',
|
||||
'<div class="form-row" id="new_tps">',
|
||||
'<input id="new_tool_panel_section" name="new_tool_panel_section" type="textfield" value="" size="40"/>',
|
||||
'<input class="btn btn-primary" type="button" id="select_existing" value="Select existing" />',
|
||||
'<div class="toolParamHelp" style="clear: both;">',
|
||||
'Add a new tool panel section to contain the installed tools (optional).',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
].join('')),
|
||||
|
||||
templateGlobalSectionSelect: _.template([
|
||||
'<div id="tool_panel_section">',
|
||||
'<div class="toolFormTitle">Tool Panel Section</div>',
|
||||
'<div class="toolFormBody">',
|
||||
'<div class="tab-pane" id="select_tps">',
|
||||
'<select name="<%= name %>" id="<%= tps.id %>">',
|
||||
'<%= tps_select_options({sections: tps.sections}) %>',
|
||||
'</select>',
|
||||
'<input class="btn btn-primary" type="button" id="create_new" value="Create new" />',
|
||||
'<div class="toolParamHelp" style="clear: both;">',
|
||||
'Select an existing tool panel section to contain the installed tools (optional).',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
].join('')),
|
||||
|
||||
templateToolSectionCreate: _.template([
|
||||
'<div id="new_tps_<%= tool.clean %>" data-clean="<%= tool.clean %>" class="form-row">',
|
||||
'<input data-toolguid="<%= tool.guid %>" class="tool_panel_section_picker" size="40" name="new_tool_panel_section" id="new_tool_panel_section_<%= tool.clean %>" type="text">',
|
||||
'<input id="per_tool_select_<%= tool.clean %>" class="btn btn-primary" data-toolguid="<%= tool.guid %>" value="Select existing" id="select_existing_<%= tool.clean %>" type="button">',
|
||||
'</div>',
|
||||
].join('')),
|
||||
|
||||
templateToolSectionSelect: _.template([
|
||||
'<div id="select_tps_<%= tool.clean %>" data-clean="<%= tool.clean %>" class="tps_creator">',
|
||||
'<select default="active" style="width: 30em;" data-toolguid="<%= tool.guid %>" class="tool_panel_section_picker" name="tool_panel_section_id" id="tool_panel_section_select_<%= tool.clean %>">',
|
||||
'<%= tps_select_options({sections: tps.sections}) %>',
|
||||
'</select>',
|
||||
'<input id="per_tool_create_<%= tool.clean %>" data-clean="<%= tool.clean %>" class="btn btn-primary create-tps-button" data-toolguid="<%= tool.guid %>" value="Create new" id="create_new_<%= tool.clean %>" type="button">',
|
||||
'<div style="clear: both;" class="toolParamHelp"></div>',
|
||||
'</div>',
|
||||
].join('')),
|
||||
|
||||
templatePanelSelectOptions: _.template([
|
||||
'<% _.each(sections, function(section) { %>',
|
||||
'<option value="<%= section.id %>"><%= section.name %></option>',
|
||||
'<% }); %>',
|
||||
].join(''))
|
||||
});
|
||||
|
||||
return {
|
||||
RepoDetails: ToolShedRepositoryView,
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
define(['mvc/toolshed/toolshed-model', 'mvc/toolshed/util'], function(toolshed_model, toolshed_util) {
|
||||
|
||||
var View = Backbone.View.extend({
|
||||
|
||||
defaults: {
|
||||
tool_sheds: [{"url": "https://toolshed.g2.bx.psu.edu/", "name": "Galaxy Main Tool Shed"}]
|
||||
},
|
||||
|
||||
initialize: function(options) {
|
||||
var self = this;
|
||||
this.options = _.defaults(this.options || {}, this.defaults);
|
||||
this.model = new toolshed_model.ShedsCollection();
|
||||
this.listenTo(this.model, 'sync', this.render);
|
||||
this.model.fetch();
|
||||
},
|
||||
|
||||
el: '#center',
|
||||
|
||||
render: function(options) {
|
||||
this.options = _.defaults(this.options || {}, options, this.defaults);
|
||||
var toolshed_list_template = this.templateToolshedList;
|
||||
this.$el.html(toolshed_list_template({title: 'Configured Galaxy Tool Sheds', tool_sheds: this.model.models, queue: toolshed_util.queueLength()}));
|
||||
},
|
||||
|
||||
reDraw: function(options){
|
||||
this.$el.empty();
|
||||
this.render(options);
|
||||
},
|
||||
|
||||
templateToolshedList: _.template([
|
||||
'<div class="unified-panel-header" id="panel_header" unselectable="on">',
|
||||
'<div class="unified-panel-header-inner"><%= title %></div>',
|
||||
'<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',
|
||||
'</div>',
|
||||
'<div class="unified-panel-body" id="list_toolsheds">',
|
||||
'<div class="form-row">',
|
||||
'<table class="grid">',
|
||||
'<% _.each(tool_sheds, function(shed) { %>',
|
||||
'<tr class="libraryTitle">',
|
||||
'<td>',
|
||||
'<div style="float: left; margin-left: 1px;" class="menubutton split">',
|
||||
'<a class="view-info shed-selector" href="#/categories/s/<%= shed.get("url") %>"><%= shed.get("name") %></a>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'</tr>',
|
||||
'<% }); %>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'<div style="clear: both"></div>',
|
||||
'</div>',
|
||||
].join(''))
|
||||
|
||||
});
|
||||
|
||||
return {
|
||||
ShedListView: View,
|
||||
};
|
||||
|
||||
});
|
||||
@@ -0,0 +1,99 @@
|
||||
define([], function() {
|
||||
|
||||
var ToolShedModel = Backbone.Model.extend({
|
||||
defaults: {"url": "https://toolshed.g2.bx.psu.edu/", "name": "Galaxy Main Tool Shed"},
|
||||
urlRoot: Galaxy.root + 'api/tool_shed',
|
||||
});
|
||||
|
||||
var ToolShedsCollection = Backbone.Collection.extend({
|
||||
url: Galaxy.root + 'api/tool_shed',
|
||||
model: ToolShedModel
|
||||
});
|
||||
|
||||
var ToolShedCategoriesModel = Backbone.Model.extend({
|
||||
defaults: [{}],
|
||||
urlRoot: Galaxy.root + 'api/tool_shed/contents',
|
||||
});
|
||||
|
||||
var ToolShedCategoriesCollection = Backbone.Collection.extend({
|
||||
url: Galaxy.root + 'api/tool_shed/contents',
|
||||
model: ToolShedCategoriesModel
|
||||
});
|
||||
|
||||
var ToolShedCategoryModel = Backbone.Model.extend({
|
||||
defaults: [{}],
|
||||
urlRoot: Galaxy.root + 'api/tool_shed/category',
|
||||
});
|
||||
|
||||
var ToolShedCategoryCollection = Backbone.Collection.extend({
|
||||
url: Galaxy.root + 'api/tool_shed/category',
|
||||
model: ToolShedCategoryModel
|
||||
});
|
||||
|
||||
var ToolShedRepositoryModel = Backbone.Model.extend({
|
||||
defaults: [{}],
|
||||
urlRoot: Galaxy.root + 'api/tool_shed/repository',
|
||||
});
|
||||
|
||||
var ToolShedRepositoryCollection = Backbone.Collection.extend({
|
||||
url: Galaxy.root + 'api/tool_shed/repository',
|
||||
model: ToolShedRepositoryModel
|
||||
});
|
||||
|
||||
var RepoQueueModel = Backbone.Model.extend({
|
||||
url: '#',
|
||||
});
|
||||
|
||||
var RepoQueueCollection = Backbone.Collection.extend({
|
||||
url: '#',
|
||||
model: RepoQueueModel,
|
||||
fetch: function() {
|
||||
var collection = this;
|
||||
var repositories = Array();
|
||||
var repositories_enc = JSON.parse(localStorage.repositories);
|
||||
var queue_keys = Object.keys(repositories_enc);
|
||||
_.each(queue_keys, function(key) {
|
||||
var repo = repositories_enc[key];
|
||||
repo.queue_key = key;
|
||||
repositories.push(repo);
|
||||
});
|
||||
collection.reset(repositories);
|
||||
return Backbone.Collection.prototype.fetch.call(this);
|
||||
},
|
||||
});
|
||||
|
||||
var RepoStatusModel = Backbone.Model.extend({
|
||||
defaults: [{}],
|
||||
urlRoot: Galaxy.root + 'api/tool_shed/status',
|
||||
});
|
||||
|
||||
var RepoStatusCollection = Backbone.Collection.extend({
|
||||
url: Galaxy.root + 'api/tool_shed/status',
|
||||
model: RepoStatusModel
|
||||
});
|
||||
|
||||
var WorkflowToolsModel = Backbone.Model.extend({
|
||||
defaults: [{}],
|
||||
urlRoot: Galaxy.root + 'api/workflows?missing_tools=True',
|
||||
});
|
||||
|
||||
var WorkflowToolsCollection = Backbone.Collection.extend({
|
||||
url: Galaxy.root + 'api/workflows?missing_tools=True',
|
||||
model: WorkflowToolsModel
|
||||
});
|
||||
|
||||
return {
|
||||
ShedModel: ToolShedModel,
|
||||
ShedsCollection: ToolShedsCollection,
|
||||
Category: ToolShedCategoriesModel,
|
||||
Categories: ToolShedCategoriesCollection,
|
||||
CategoryModel: ToolShedCategoryModel,
|
||||
CategoryCollection: ToolShedCategoryCollection,
|
||||
RepositoryModel: ToolShedRepositoryModel,
|
||||
RepositoryCollection: ToolShedRepositoryCollection,
|
||||
RepoQueue: RepoQueueCollection,
|
||||
RepoStatus: RepoStatusCollection,
|
||||
WorkflowTools: WorkflowToolsCollection
|
||||
};
|
||||
|
||||
});
|
||||
@@ -0,0 +1,50 @@
|
||||
define([], function() {
|
||||
var searchShed = function(request, response) {
|
||||
var that = this;
|
||||
var shed_url = this.shed_url;
|
||||
var base_url = Galaxy.root + 'api/tool_shed/search';
|
||||
$.get(base_url, {term: request.term, tool_shed_url: shed_url}, function(data) {
|
||||
result_list = that.shedParser(data);
|
||||
response(result_list);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
var shedParser = function(jsondata) {
|
||||
var results = [];
|
||||
var hits = jsondata.hits;
|
||||
$.each(hits, function(hit) {
|
||||
var record = hits[hit];
|
||||
var label = record.repository.name + ' by ' + record.repository.repo_owner_username + ': ' + record.repository.description;
|
||||
result = {value: record.repository.id, label: label};
|
||||
results.push(result);
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
var addToQueue = function(metadata) {
|
||||
if (metadata.tool_shed_url.substr(-1) == '/') {
|
||||
metadata.tool_shed_url = metadata.tool_shed_url.substr(0, metadata.tool_shed_url.length - 1);
|
||||
}
|
||||
var key = metadata.tool_shed_url + '|' + metadata.repository_id + '|' + metadata.changeset_revision;
|
||||
var queued_repos = new Object();
|
||||
if (localStorage.repositories) {
|
||||
queued_repos = JSON.parse(localStorage.repositories);
|
||||
}
|
||||
queued_repos[key] = metadata;
|
||||
localStorage.repositories = JSON.stringify(queued_repos);
|
||||
}
|
||||
|
||||
var queueLength = function() {
|
||||
if (localStorage.hasOwnProperty('repositories')) {
|
||||
repo_queue = JSON.parse(localStorage.repositories);
|
||||
queue_length = Object.keys(repo_queue).length;
|
||||
return queue_length;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return {searchShed: searchShed, shedParser: shedParser, addToQueue: addToQueue, queueLength: queueLength};
|
||||
});
|
||||
@@ -0,0 +1,122 @@
|
||||
define(['mvc/toolshed/toolshed-model', 'mvc/toolshed/util'], function(toolshed_model, toolshed_util) {
|
||||
|
||||
var View = Backbone.View.extend({
|
||||
|
||||
el: '#center',
|
||||
|
||||
defaults: [{}],
|
||||
|
||||
initialize: function(options) {
|
||||
var that = this;
|
||||
this.model = new toolshed_model.WorkflowTools();
|
||||
this.listenTo(this.model, 'sync', this.render);
|
||||
this.model.fetch();
|
||||
that.render();
|
||||
},
|
||||
|
||||
render: function(options) {
|
||||
var that = this;
|
||||
var workflows_missing_tools = that.templateWorkflows;
|
||||
var workflows = that.model.models;
|
||||
that.$el.html(workflows_missing_tools({title: 'Workflows Missing Tools', workflows: workflows, queue: toolshed_util.queueLength()}));
|
||||
$("#center").css('overflow', 'auto');
|
||||
that.bindEvents();
|
||||
},
|
||||
|
||||
bindEvents: function() {
|
||||
var that = this;
|
||||
$('.show_wf_repo').on('click', function() {
|
||||
var tool_ids = $(this).attr('data-toolids');
|
||||
var toolshed = $(this).attr('data-shed');
|
||||
var api_url = Galaxy.root + 'api/tool_shed/repository'
|
||||
var params = {'tool_ids': tool_ids};
|
||||
$.get(api_url, params, function(data) {
|
||||
repository_id = data.repository.id;
|
||||
var new_route = 'repository/s/' + toolshed.replace(/:/g, '%3a').replace(/\//g, '%2f') + '/r/' + data.repository.id;
|
||||
Backbone.history.navigate(new_route, {trigger: true, replace:true});
|
||||
});
|
||||
});
|
||||
$('.queue_wf_repo').on('click', function() {
|
||||
var elem = $(this);
|
||||
var tool_ids = elem.attr('data-toolids');
|
||||
var toolshed = elem.attr('data-shed');
|
||||
var api_url = Galaxy.root + 'api/tool_shed/repository'
|
||||
var params = {'tool_ids': tool_ids};
|
||||
$.get(api_url, params, function(data) {
|
||||
repository_id = data.repository.id;
|
||||
params = {tool_shed_url: toolshed, repository_id: repository_id};
|
||||
$.get(api_url, params, function(data) {
|
||||
var changesets = Object.keys(data.repository.metadata);
|
||||
var current_changeset = changesets[0];
|
||||
var current_metadata = data.repository.metadata[current_changeset];
|
||||
current_metadata.tool_shed_url = toolshed;
|
||||
toolshed_util.addToQueue(current_metadata);
|
||||
elem.remove();
|
||||
});
|
||||
});
|
||||
});
|
||||
$('#from_workflow').on('click', that.loadWorkflows);
|
||||
},
|
||||
|
||||
reDraw: function(options) {
|
||||
this.$el.empty();
|
||||
this.initialize(options);
|
||||
},
|
||||
|
||||
templateWorkflows: _.template([
|
||||
'<div class="unified-panel-header" id="panel_header" unselectable="on">',
|
||||
'<div class="unified-panel-header-inner"><%= title %></div>',
|
||||
'<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',
|
||||
'</div>',
|
||||
'<style type="text/css">',
|
||||
'.workflow_names, .workflow_tools { list-style-type: none; } ul.workflow_tools, ul.workflow_names { padding-left: 0px; }',
|
||||
'</style>',
|
||||
'<table id="workflows_missing_tools" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th class="datasetRow">Workflows</th>',
|
||||
'<th class="datasetRow">Tool IDs</th>',
|
||||
'<th class="datasetRow">Shed</th>',
|
||||
'<th class="datasetRow">Name</th>',
|
||||
'<th class="datasetRow">Owner</th>',
|
||||
'<th class="datasetRow">Actions</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody>',
|
||||
'<% _.each(workflows, function(workflow) { %>',
|
||||
'<tr>',
|
||||
'<td class="datasetRow">',
|
||||
'<ul class="workflow_names">',
|
||||
'<% _.each(workflow.get("workflows"), function(name) { %>',
|
||||
'<li class="workflow_names"><%= name %></li>',
|
||||
'<% }); %>',
|
||||
'</ul>',
|
||||
'</td>',
|
||||
'<td class="datasetRow">',
|
||||
'<ul class="workflow_tools">',
|
||||
'<% _.each(workflow.get("tools"), function(tool) { %>',
|
||||
'<li class="workflow_tools"><%= tool %></li>',
|
||||
'<% }); %>',
|
||||
'</ul>',
|
||||
'</td>',
|
||||
'<td class="datasetRow"><%= workflow.get("shed") %></td>',
|
||||
'<td class="datasetRow"><%= workflow.get("repository") %></td>',
|
||||
'<td class="datasetRow"><%= workflow.get("owner") %></td>',
|
||||
'<td class="datasetRow">',
|
||||
'<ul class="workflow_tools">',
|
||||
'<li class="workflow_tools">',
|
||||
'<input type="button" class="show_wf_repo btn btn-primary" data-shed="<%= workflow.get("shed") %>" data-owner="<%= workflow.get("owner") %>" data-repo="<%= workflow.get("repository") %>" data-toolids="<%= workflow.get("tools").join(",") %>" value="Show Repository" /></li>',
|
||||
'</ul>',
|
||||
'</td>',
|
||||
'</tr>',
|
||||
'<% }); %>',
|
||||
'</ul>',
|
||||
'</div>',
|
||||
].join(''))
|
||||
});
|
||||
|
||||
return {
|
||||
Workflows: View,
|
||||
};
|
||||
|
||||
});
|
||||
@@ -1077,7 +1077,7 @@ use_interactive = True
|
||||
|
||||
# Enable the new interface for installing tools from Tool Shed
|
||||
# via the API. Admin menu will list both if enabled.
|
||||
#enable_beta_ts_api_install = False
|
||||
#enable_beta_ts_api_install = True
|
||||
|
||||
# Enable the new container interface for Interactive Environments
|
||||
#enable_beta_containers_interface = False
|
||||
|
||||
@@ -308,7 +308,7 @@ class Configuration( object ):
|
||||
|
||||
# Enable new interface for API installations from TS.
|
||||
# Admin menu will list both if enabled.
|
||||
self.enable_beta_ts_api_install = string_as_bool( kwargs.get( 'enable_beta_ts_api_install', 'False' ) )
|
||||
self.enable_beta_ts_api_install = string_as_bool( kwargs.get( 'enable_beta_ts_api_install', 'True' ) )
|
||||
# The transfer manager and deferred job queue
|
||||
self.enable_beta_job_managers = string_as_bool( kwargs.get( 'enable_beta_job_managers', 'False' ) )
|
||||
# These workflow modules should not be considered part of Galaxy's
|
||||
|
||||
@@ -1858,8 +1858,8 @@ class Tool( object, Dictifiable ):
|
||||
|
||||
# create tool model
|
||||
tool_model = self.to_dict( request_context )
|
||||
tool_model[ 'inputs' ] = []
|
||||
populate_model( self.inputs, state_inputs, tool_model[ 'inputs' ] )
|
||||
tool_model[ 'inputs' ] = {}
|
||||
self.populate_model( request_context, self.inputs, state_inputs, tool_model[ 'inputs' ] )
|
||||
|
||||
# create tool help
|
||||
tool_help = ''
|
||||
@@ -1897,6 +1897,43 @@ class Tool( object, Dictifiable ):
|
||||
})
|
||||
return tool_model
|
||||
|
||||
# populates model from state
|
||||
def populate_model( self, request_context, inputs, state_inputs, group_inputs, other_values=None ):
|
||||
other_values = ExpressionContext( state_inputs, other_values )
|
||||
for input_index, input in enumerate( inputs.itervalues() ):
|
||||
tool_dict = None
|
||||
group_state = state_inputs.get( input.name, {} )
|
||||
if input.type == 'repeat':
|
||||
tool_dict = input.to_dict( request_context )
|
||||
group_cache = tool_dict[ 'cache' ] = {}
|
||||
for i in range( len( group_state ) ):
|
||||
group_cache[ i ] = {}
|
||||
self.populate_model( request_context, input.inputs, group_state[ i ], group_cache[ i ], other_values )
|
||||
elif input.type == 'conditional':
|
||||
tool_dict = input.to_dict( request_context )
|
||||
if 'test_param' in tool_dict:
|
||||
test_param = tool_dict[ 'test_param' ]
|
||||
test_param[ 'value' ] = input.test_param.value_to_basic( group_state.get( test_param[ 'name' ], input.test_param.get_initial_value( request_context, other_values ) ), self.app )
|
||||
test_param[ 'text_value' ] = input.test_param.value_to_display_text( test_param[ 'value' ] )
|
||||
for i in range( len( tool_dict['cases'] ) ):
|
||||
current_state = {}
|
||||
if i == group_state.get( '__current_case__' ):
|
||||
current_state = group_state
|
||||
self.populate_model( request_context, input.cases[ i ].inputs, current_state, tool_dict[ 'cases' ][ i ][ 'inputs' ], other_values )
|
||||
elif input.type == 'section':
|
||||
tool_dict = input.to_dict( request_context )
|
||||
self.populate_model( request_context, input.inputs, group_state, tool_dict[ 'inputs' ], other_values )
|
||||
else:
|
||||
try:
|
||||
tool_dict = input.to_dict( request_context, other_values=other_values )
|
||||
tool_dict[ 'value' ] = input.value_to_basic( state_inputs.get( input.name, input.get_initial_value( request_context, other_values ) ), self.app, use_security=True )
|
||||
tool_dict[ 'text_value' ] = input.value_to_display_text( tool_dict[ 'value' ] )
|
||||
except Exception as e:
|
||||
tool_dict = input.to_dict( request_context )
|
||||
log.exception('tools::to_json() - Skipping parameter expansion \'%s\': %s.' % ( input.name, e ) )
|
||||
pass
|
||||
group_inputs[ input_index ] = tool_dict
|
||||
|
||||
def _get_job_remap( self, job):
|
||||
if job:
|
||||
if job.state == job.states.ERROR:
|
||||
|
||||
@@ -460,9 +460,23 @@ class AbstractToolBox( Dictifiable, ManagesIntegratedToolPanelMixin, object ):
|
||||
def has_tool( self, tool_id, tool_version=None, exact=False ):
|
||||
return self.get_tool( tool_id, tool_version=tool_version, exact=exact ) is not None
|
||||
|
||||
def is_missing_shed_tool( self, tool_id ):
|
||||
"""Confirm that the tool ID does reference a shed tool and is not installed."""
|
||||
if tool_id is None:
|
||||
# This is not a tool ID.
|
||||
return False
|
||||
if 'repos' not in tool_id:
|
||||
# This is not a shed tool.
|
||||
return False
|
||||
# This is a valid tool, and it is from a toolshed. Check if it's
|
||||
# missing from the toolbox.
|
||||
if tool_id not in self._tools_by_id:
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_tool_id( self, tool_id ):
|
||||
""" Take a tool id (potentially from a different Galaxy instance or that
|
||||
is no longer loaded - and find the closest match to the currently loaded
|
||||
""" Take a tool id - potentially from a different Galaxy instance or that
|
||||
is no longer loaded - and find the closest match to the currently loaded
|
||||
tools (using get_tool for inexact matches which currently returns the oldest
|
||||
tool shed installed tool with the same short id).
|
||||
"""
|
||||
|
||||
@@ -5,10 +5,12 @@ from time import strftime
|
||||
|
||||
from paste.httpexceptions import HTTPBadRequest, HTTPForbidden
|
||||
|
||||
from sqlalchemy import and_
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
from galaxy import util
|
||||
from galaxy import web
|
||||
from galaxy import exceptions
|
||||
|
||||
from galaxy.web import _future_expose_api as expose_api
|
||||
from galaxy.web.base.controller import BaseAPIController
|
||||
|
||||
@@ -18,11 +20,10 @@ from tool_shed.galaxy_install.repair_repository_manager import RepairRepositoryM
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import encoding_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import workflow_util
|
||||
from tool_shed.util import tool_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import tool_util
|
||||
from tool_shed.util import workflow_util
|
||||
|
||||
from sqlalchemy import and_
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -191,26 +192,6 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
return changeset_revisions[ -1 ]
|
||||
return hg_util.INITIAL_CHANGELOG_HASH
|
||||
|
||||
@expose_api
|
||||
@web.require_admin
|
||||
def shed_categories( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed_repositories/shed_categories
|
||||
|
||||
Display a list of categories in the selected toolshed.
|
||||
|
||||
:param tool_shed_url: the url of the toolshed to get categories from
|
||||
"""
|
||||
tool_shed_url = kwd.get( 'tool_shed_url', '' )
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( trans.app, tool_shed_url )
|
||||
url = util.build_url( tool_shed_url, pathspec=[ 'api', 'categories' ] )
|
||||
categories = json.loads( util.url_get( url ) )
|
||||
repositories = []
|
||||
url = util.build_url( tool_shed_url, pathspec=[ 'api', 'repositories' ] )
|
||||
for repo in json.loads( util.url_get( url ) ):
|
||||
repositories.append( dict( value=repo[ 'id' ], label='%s/%s' % ( repo[ 'owner' ], repo[ 'name' ] ) ) )
|
||||
return { 'categories': categories, 'repositories': repositories }
|
||||
|
||||
@expose_api
|
||||
@web.require_admin
|
||||
def shed_category( self, trans, **kwd ):
|
||||
@@ -224,8 +205,9 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
"""
|
||||
tool_shed_url = kwd.get( 'tool_shed_url', '' )
|
||||
category_id = kwd.get( 'category_id', '' )
|
||||
params = dict( installable=True )
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( trans.app, tool_shed_url )
|
||||
url = util.build_url( tool_shed_url, pathspec=[ 'api', 'categories', category_id, 'repositories' ] )
|
||||
url = util.build_url( tool_shed_url, pathspec=[ 'api', 'categories', category_id, 'repositories' ], params=params )
|
||||
category = json.loads( util.url_get( url ) )
|
||||
return category
|
||||
|
||||
@@ -237,12 +219,22 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
|
||||
Get details about the specified repository from its shed.
|
||||
|
||||
:param tsr_id: the tool_shed_repository_id
|
||||
:param tsr_id: the tool_shed_repository_id
|
||||
:param tsr_id: str
|
||||
|
||||
:param tool_shed_url: the URL of the toolshed whence to retrieve repository details
|
||||
:param tool_shed_url: str
|
||||
|
||||
:param tool_ids: (optional) comma-separated list of tool IDs
|
||||
:param tool_ids: str
|
||||
"""
|
||||
tool_dependencies = dict()
|
||||
tools = dict()
|
||||
tool_shed_url = kwd.get( 'tool_shed_url', '' )
|
||||
tsr_id = kwd.get( 'tsr_id', '' )
|
||||
tsr_id = kwd.get( 'tsr_id', None )
|
||||
tool_ids = kwd.get( 'tool_ids', None )
|
||||
if tool_ids is not None:
|
||||
tool_ids = util.listify( tool_ids )
|
||||
tool_panel_section_select_field = tool_util.build_tool_panel_section_select_field( trans.app )
|
||||
tool_panel_section_dict = { 'name': tool_panel_section_select_field.name,
|
||||
'id': tool_panel_section_select_field.field_id,
|
||||
@@ -250,8 +242,22 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
for name, id, _ in tool_panel_section_select_field.options:
|
||||
tool_panel_section_dict['sections'].append( dict( id=id, name=name ) )
|
||||
repository_data = dict()
|
||||
repository_data[ 'repository' ] = json.loads( util.url_get( tool_shed_url, pathspec=[ 'api', 'repositories', tsr_id ] ) )
|
||||
repository_data[ 'repository' ][ 'metadata' ] = json.loads( util.url_get( tool_shed_url, pathspec=[ 'api', 'repositories', tsr_id, 'metadata' ] ) )
|
||||
if tool_ids is not None:
|
||||
if len( tool_shed_url ) == 0:
|
||||
# By design, this list should always be from the same toolshed. If
|
||||
# this is ever not the case, this code will need to be updated.
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( self.app, tool_ids[ 0 ].split( '/' )[ 0 ] )
|
||||
found_repository = json.loads( util.url_get( tool_shed_url, params=dict( tool_ids=','.join( tool_ids ) ), pathspec=[ 'api', 'repositories' ] ) )
|
||||
fr_keys = found_repository.keys()
|
||||
tsr_id = found_repository[ fr_keys[0] ][ 'repository_id' ]
|
||||
repository_data[ 'current_changeset' ] = found_repository[ 'current_changeset' ]
|
||||
repository_data[ 'repository' ] = json.loads( util.url_get( tool_shed_url, pathspec=[ 'api', 'repositories', tsr_id ] ) )
|
||||
del found_repository[ 'current_changeset' ]
|
||||
repository_data[ 'repository' ][ 'metadata' ] = found_repository
|
||||
repository_data[ 'tool_shed_url' ] = tool_shed_url
|
||||
else:
|
||||
repository_data[ 'repository' ] = json.loads( util.url_get( tool_shed_url, pathspec=[ 'api', 'repositories', tsr_id ] ) )
|
||||
repository_data[ 'repository' ][ 'metadata' ] = json.loads( util.url_get( tool_shed_url, pathspec=[ 'api', 'repositories', tsr_id, 'metadata' ] ) )
|
||||
repository_data[ 'shed_conf' ] = tool_util.build_shed_tool_conf_select_field( trans.app ).get_html().replace('\n', '')
|
||||
repository_data[ 'panel_section_html' ] = tool_panel_section_select_field.get_html( extra_attr={ 'style': 'width: 30em;' } ).replace( '\n', '' )
|
||||
repository_data[ 'panel_section_dict' ] = tool_panel_section_dict
|
||||
@@ -278,13 +284,33 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
del( dependency_dict[ 'readme' ] )
|
||||
if dependency_dict not in tool_dependencies[ changeset ]:
|
||||
tool_dependencies[ changeset ].append( dependency_dict )
|
||||
# log.debug(tool_dependencies)
|
||||
if metadata[ 'has_repository_dependencies' ]:
|
||||
for repository_dependency in metadata[ 'repository_dependencies' ]:
|
||||
tool_dependencies[ changeset ] = self.__get_tool_dependencies( repository_dependency, tool_dependencies[ changeset ] )
|
||||
repository_data[ 'tool_dependencies' ] = tool_dependencies
|
||||
return repository_data
|
||||
|
||||
@expose_api
|
||||
@web.require_admin
|
||||
def shed_search( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed_repositories/shed_search
|
||||
|
||||
Search for a specific repository in the toolshed.
|
||||
|
||||
:param q: the query string to search for
|
||||
:param q: str
|
||||
|
||||
:param tool_shed_url: the URL of the toolshed to search
|
||||
:param tool_shed_url: str
|
||||
"""
|
||||
tool_shed_url = kwd.get( 'tool_shed_url', None )
|
||||
q = kwd.get( 'term', None )
|
||||
if None in [ q, tool_shed_url ]:
|
||||
return {}
|
||||
response = json.loads( util.url_get( tool_shed_url, params=dict( q=q ), pathspec=[ 'api', 'repositories' ] ) )
|
||||
return response
|
||||
|
||||
@expose_api
|
||||
def import_workflow( self, trans, payload, **kwd ):
|
||||
"""
|
||||
|
||||
@@ -0,0 +1,297 @@
|
||||
import json
|
||||
import logging
|
||||
import re
|
||||
from six.moves.urllib.parse import quote as urlquote
|
||||
from six.moves.urllib.parse import unquote as urlunquote
|
||||
|
||||
from galaxy import util
|
||||
from galaxy import web
|
||||
|
||||
from galaxy.web import _future_expose_api as expose_api
|
||||
from galaxy.web.base.controller import BaseAPIController
|
||||
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import tool_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
|
||||
class ToolShedController( BaseAPIController ):
|
||||
"""RESTful controller for interactions with tool sheds."""
|
||||
|
||||
def __get_repo_dict_by_id( self, id ):
|
||||
tool_shed_repository = repository_util.get_tool_shed_repository_by_id( self.app, id )
|
||||
if tool_shed_repository is None:
|
||||
log.debug( "Unable to locate tool_shed_repository record for id %s." % ( str( id ) ) )
|
||||
return {}
|
||||
tool_shed_repository_dict = tool_shed_repository.as_dict( value_mapper=self.__get_value_mapper( tool_shed_repository ) )
|
||||
tool_shed_repository_dict[ 'url' ] = web.url_for( controller='tool_shed_repositories',
|
||||
action='show',
|
||||
id=self.app.security.encode_id( tool_shed_repository.id ) )
|
||||
tool_shed_repository_dict[ 'repository_dependencies' ] = self.__flatten_repository_dependency_list( tool_shed_repository )
|
||||
return tool_shed_repository_dict
|
||||
|
||||
def __get_tool_dependencies( self, metadata, tool_dependencies=None ):
|
||||
if tool_dependencies is None:
|
||||
tool_dependencies = []
|
||||
for key, dependency_dict in metadata[ 'tool_dependencies' ].items():
|
||||
if 'readme' in dependency_dict:
|
||||
del( dependency_dict[ 'readme' ] )
|
||||
if dependency_dict not in tool_dependencies:
|
||||
tool_dependencies.append( dependency_dict )
|
||||
if metadata[ 'has_repository_dependencies' ]:
|
||||
for dependency in metadata[ 'repository_dependencies' ]:
|
||||
tool_dependencies = self.__get_tool_dependencies( dependency, tool_dependencies )
|
||||
return tool_dependencies
|
||||
|
||||
def __flatten_repository_dependency_list( self, tool_shed_repository ):
|
||||
'''
|
||||
Return a recursive exclusive flattened list of all tool_shed_repository's dependencies.
|
||||
'''
|
||||
dependencies = []
|
||||
for dependency in tool_shed_repository.repository_dependencies:
|
||||
if len( dependency.repository_dependencies ) > 0:
|
||||
sub_dependencies = self.__flatten_repository_dependency_list( dependency )
|
||||
for sub_dependency in sub_dependencies:
|
||||
if sub_dependency not in dependencies:
|
||||
dependencies.append( sub_dependency )
|
||||
if dependency not in dependencies:
|
||||
dependencies.append( dependency.as_dict( value_mapper=self.__get_value_mapper( tool_shed_repository ) ) )
|
||||
return dependencies
|
||||
|
||||
def __get_value_mapper( self, tool_shed_repository ):
|
||||
value_mapper = { 'id': self.app.security.encode_id( tool_shed_repository.id ),
|
||||
'error_message': tool_shed_repository.error_message or '' }
|
||||
return value_mapper
|
||||
|
||||
def __get_tools( self, metadata, tools=None ):
|
||||
if tools is None:
|
||||
tools = []
|
||||
if metadata[ 'includes_tools_for_display_in_tool_panel' ]:
|
||||
for key, tool_dict in metadata[ 'tools' ]:
|
||||
tool_info = dict( clean=re.sub( '[^a-zA-Z0-9]+', '_', tool_dict[ 'name' ] ).lower(),
|
||||
name=tool_dict[ 'name' ],
|
||||
version=tool_dict[ 'version' ],
|
||||
description=tool_dict[ 'description' ] )
|
||||
if tool_info not in tools:
|
||||
tools.append( tool_info )
|
||||
if metadata[ 'has_repository_dependencies' ]:
|
||||
for dependency in metadata[ 'repository_dependencies' ]:
|
||||
tools = self.__get_tools( dependency, tools )
|
||||
return tools
|
||||
|
||||
@expose_api
|
||||
def index( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed
|
||||
Interact with this galaxy instance's toolshed registry.
|
||||
"""
|
||||
sheds = []
|
||||
for name, url in trans.app.tool_shed_registry.tool_sheds.items():
|
||||
# api_url = web.url_for( controller='api/tool_shed',
|
||||
# action='contents',
|
||||
# tool_shed_url=urlquote( url, '' ),
|
||||
# qualified=True )
|
||||
sheds.append( dict( name=name, url=urlquote( url, '' ) ) )
|
||||
return sheds
|
||||
|
||||
@expose_api
|
||||
@web.require_admin
|
||||
def status( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed_repositories/{id}/status
|
||||
Display a dictionary containing information about a specified repository's installation
|
||||
status and a list of its dependencies and the status of each.
|
||||
|
||||
:param id: the repository's encoded id
|
||||
"""
|
||||
repository_ids = kwd.get( 'repositories', None )
|
||||
repositories = []
|
||||
if repository_ids is not None:
|
||||
for repository_id in repository_ids.split( '|' ):
|
||||
tool_shed_repository_dict = self.__get_repo_dict_by_id( repository_id )
|
||||
repositories.append( tool_shed_repository_dict )
|
||||
return repositories
|
||||
else:
|
||||
return []
|
||||
# return tool_shed_repository_dict
|
||||
|
||||
@expose_api
|
||||
@web.require_admin
|
||||
def tool_json( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed_repositories/shed_tool_json
|
||||
|
||||
Get the tool form JSON for a tool in a toolshed repository.
|
||||
|
||||
:param guid: the GUID of the tool
|
||||
:param guid: str
|
||||
|
||||
:param tsr_id: the ID of the repository
|
||||
:param tsr_id: str
|
||||
|
||||
:param changeset: the changeset at which to load the tool json
|
||||
:param changeset: str
|
||||
|
||||
:param tool_shed_url: the URL of the toolshed to load from
|
||||
:param tool_shed_url: str
|
||||
"""
|
||||
tool_shed_url = kwd.get( 'tool_shed_url', None )
|
||||
tsr_id = kwd.get( 'tsr_id', None )
|
||||
guid = kwd.get( 'guid', None )
|
||||
changeset = kwd.get( 'changeset', None )
|
||||
if None in [ tool_shed_url, tsr_id, guid, changeset ]:
|
||||
message = 'Tool shed URL, changeset, repository ID, and tool GUID are all required parameters.'
|
||||
trans.response.status = 400
|
||||
return { 'status': 'error', 'message': message }
|
||||
response = json.loads( util.url_get( tool_shed_url, params=dict( tsr_id=tsr_id, guid=guid, changeset=changeset.split( ':' )[ -1 ] ), pathspec=[ 'api', 'tools', 'json' ] ) )
|
||||
return response
|
||||
|
||||
@expose_api
|
||||
def show( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed/contents
|
||||
|
||||
Display a list of categories in the selected toolshed.
|
||||
|
||||
:param tool_shed_url: the url of the toolshed to get categories from
|
||||
"""
|
||||
tool_shed_url = urlunquote( kwd.get( 'tool_shed_url', '' ) )
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( trans.app, tool_shed_url )
|
||||
url = util.build_url( tool_shed_url, pathspec=[ 'api', 'categories' ] )
|
||||
categories = []
|
||||
for category in json.loads( util.url_get( url ) ):
|
||||
api_url = web.url_for( controller='api/tool_shed',
|
||||
action='category',
|
||||
tool_shed_url=urlquote( tool_shed_url ),
|
||||
category_id=category[ 'id' ],
|
||||
qualified=True )
|
||||
category[ 'url' ] = api_url
|
||||
categories.append( category )
|
||||
return categories
|
||||
|
||||
@expose_api
|
||||
@web.require_admin
|
||||
def category( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed/category
|
||||
|
||||
Display a list of repositories in the selected category.
|
||||
|
||||
:param tool_shed_url: the url of the toolshed to get repositories from
|
||||
:param category_id: the category to get repositories from
|
||||
"""
|
||||
tool_shed_url = urlunquote( kwd.get( 'tool_shed_url', '' ) )
|
||||
category_id = kwd.get( 'category_id', '' )
|
||||
params = dict( installable=True )
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( trans.app, tool_shed_url )
|
||||
url = util.build_url( tool_shed_url, pathspec=[ 'api', 'categories', category_id, 'repositories' ], params=params )
|
||||
repositories = []
|
||||
return_json = json.loads( util.url_get( url ) )
|
||||
for repository in return_json[ 'repositories' ]:
|
||||
api_url = web.url_for( controller='api/tool_shed',
|
||||
action='repository',
|
||||
tool_shed_url=urlquote( tool_shed_url ),
|
||||
repository_id=repository[ 'id' ],
|
||||
qualified=True )
|
||||
repository[ 'url' ] = api_url
|
||||
repositories.append( repository )
|
||||
return_json[ 'repositories' ] = repositories
|
||||
return return_json
|
||||
|
||||
@expose_api
|
||||
def repository( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed/repository
|
||||
|
||||
Get details about the specified repository from its shed.
|
||||
|
||||
:param repository_id: the tool_shed_repository_id
|
||||
:param repository_id: str
|
||||
|
||||
:param tool_shed_url: the URL of the toolshed whence to retrieve repository details
|
||||
:param tool_shed_url: str
|
||||
|
||||
:param tool_ids: (optional) comma-separated list of tool IDs
|
||||
:param tool_ids: str
|
||||
"""
|
||||
tool_dependencies = dict()
|
||||
tools = dict()
|
||||
tool_shed_url = urlunquote( kwd.get( 'tool_shed_url', '' ) )
|
||||
log.debug( tool_shed_url )
|
||||
repository_id = kwd.get( 'repository_id', None )
|
||||
tool_ids = kwd.get( 'tool_ids', None )
|
||||
if tool_ids is not None:
|
||||
tool_ids = util.listify( tool_ids )
|
||||
tool_panel_section_select_field = tool_util.build_tool_panel_section_select_field( trans.app )
|
||||
tool_panel_section_dict = { 'name': tool_panel_section_select_field.name,
|
||||
'id': tool_panel_section_select_field.field_id,
|
||||
'sections': [] }
|
||||
for name, id, _ in tool_panel_section_select_field.options:
|
||||
tool_panel_section_dict['sections'].append( dict( id=id, name=name ) )
|
||||
repository_data = dict()
|
||||
if tool_ids is not None:
|
||||
if len( tool_shed_url ) == 0:
|
||||
# By design, this list should always be from the same toolshed. If
|
||||
# this is ever not the case, this code will need to be updated.
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( self.app, tool_ids[ 0 ].split( '/' )[ 0 ] )
|
||||
found_repository = json.loads( util.url_get( tool_shed_url, params=dict( tool_ids=','.join( tool_ids ) ), pathspec=[ 'api', 'repositories' ] ) )
|
||||
fr_keys = found_repository.keys()
|
||||
repository_id = found_repository[ fr_keys[0] ][ 'repository_id' ]
|
||||
repository_data[ 'current_changeset' ] = found_repository[ 'current_changeset' ]
|
||||
repository_data[ 'repository' ] = json.loads( util.url_get( tool_shed_url, pathspec=[ 'api', 'repositories', repository_id ] ) )
|
||||
del found_repository[ 'current_changeset' ]
|
||||
repository_data[ 'tool_shed_url' ] = tool_shed_url
|
||||
else:
|
||||
repository_data[ 'repository' ] = json.loads( util.url_get( tool_shed_url, pathspec=[ 'api', 'repositories', repository_id ] ) )
|
||||
repository_data[ 'repository' ][ 'metadata' ] = json.loads( util.url_get( tool_shed_url, pathspec=[ 'api', 'repositories', repository_id, 'metadata' ] ) )
|
||||
repository_data[ 'shed_conf' ] = tool_util.build_shed_tool_conf_select_field( trans.app ).get_html().replace('\n', '')
|
||||
repository_data[ 'panel_section_html' ] = tool_panel_section_select_field.get_html( extra_attr={ 'style': 'width: 30em;' } ).replace( '\n', '' )
|
||||
repository_data[ 'panel_section_dict' ] = tool_panel_section_dict
|
||||
for changeset, metadata in repository_data[ 'repository' ][ 'metadata' ].items():
|
||||
if changeset not in tool_dependencies:
|
||||
tool_dependencies[ changeset ] = []
|
||||
if metadata[ 'includes_tools_for_display_in_tool_panel' ]:
|
||||
if changeset not in tools:
|
||||
tools[ changeset ] = []
|
||||
for tool_dict in metadata[ 'tools' ]:
|
||||
tool_info = dict( clean=re.sub( '[^a-zA-Z0-9]+', '_', tool_dict[ 'name' ] ).lower(),
|
||||
guid=tool_dict[ 'guid' ],
|
||||
name=tool_dict[ 'name' ],
|
||||
version=tool_dict[ 'version' ],
|
||||
description=tool_dict[ 'description' ] )
|
||||
if tool_info not in tools[ changeset ]:
|
||||
tools[ changeset ].append( tool_info )
|
||||
if metadata[ 'has_repository_dependencies' ]:
|
||||
for repository_dependency in metadata[ 'repository_dependencies' ]:
|
||||
tools[ changeset ] = self.__get_tools( repository_dependency, tools[ changeset ] )
|
||||
repository_data[ 'tools' ] = tools
|
||||
for key, dependency_dict in metadata[ 'tool_dependencies' ].items():
|
||||
if 'readme' in dependency_dict:
|
||||
del( dependency_dict[ 'readme' ] )
|
||||
if dependency_dict not in tool_dependencies[ changeset ]:
|
||||
tool_dependencies[ changeset ].append( dependency_dict )
|
||||
if metadata[ 'has_repository_dependencies' ]:
|
||||
for repository_dependency in metadata[ 'repository_dependencies' ]:
|
||||
tool_dependencies[ changeset ] = self.__get_tool_dependencies( repository_dependency, tool_dependencies[ changeset ] )
|
||||
repository_data[ 'tool_dependencies' ] = tool_dependencies
|
||||
return repository_data
|
||||
|
||||
@expose_api
|
||||
@web.require_admin
|
||||
def search( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tool_shed/search
|
||||
Search for a specific repository in the toolshed.
|
||||
:param q: the query string to search for
|
||||
:param q: str
|
||||
:param tool_shed_url: the URL of the toolshed to search
|
||||
:param tool_shed_url: str
|
||||
"""
|
||||
tool_shed_url = kwd.get( 'tool_shed_url', None )
|
||||
q = kwd.get( 'term', None )
|
||||
if None in [ q, tool_shed_url ]:
|
||||
return {}
|
||||
response = json.loads( util.url_get( tool_shed_url, params=dict( q=q ), pathspec=[ 'api', 'repositories' ] ) )
|
||||
return response
|
||||
@@ -43,6 +43,12 @@ class WorkflowsAPIController(BaseAPIController, UsesStoredWorkflowMixin, UsesAnn
|
||||
self.workflow_manager = workflows.WorkflowsManager( app )
|
||||
self.workflow_contents_manager = workflows.WorkflowContentsManager( app )
|
||||
|
||||
def __get_full_shed_url( self, url ):
|
||||
for name, shed_url in self.app.tool_shed_registry.tool_sheds.items():
|
||||
if url in shed_url:
|
||||
return shed_url
|
||||
return None
|
||||
|
||||
@expose_api
|
||||
def index(self, trans, **kwd):
|
||||
"""
|
||||
@@ -52,8 +58,11 @@ class WorkflowsAPIController(BaseAPIController, UsesStoredWorkflowMixin, UsesAnn
|
||||
|
||||
:param show_published: if True, show also published workflows
|
||||
:type show_published: boolean
|
||||
:param missing_tools: if True, include a list of missing tools per workflow
|
||||
:type missing_tools: boolean
|
||||
"""
|
||||
show_published = util.string_as_bool( kwd.get( 'show_published', 'False' ) )
|
||||
missing_tools = util.string_as_bool( kwd.get( 'missing_tools', 'False' ) )
|
||||
rval = []
|
||||
filter1 = ( trans.app.model.StoredWorkflow.user == trans.user )
|
||||
if show_published:
|
||||
@@ -78,6 +87,39 @@ class WorkflowsAPIController(BaseAPIController, UsesStoredWorkflowMixin, UsesAnn
|
||||
item['number_of_steps'] = len( wf_sa.stored_workflow.latest_workflow.steps )
|
||||
item['slug'] = wf_sa.stored_workflow.slug
|
||||
rval.append(item)
|
||||
if missing_tools:
|
||||
workflows_missing_tools = []
|
||||
workflows = []
|
||||
workflows_by_toolshed = dict()
|
||||
for key, value in enumerate(rval):
|
||||
tool_ids = []
|
||||
workflow_details = self.workflow_contents_manager.workflow_to_dict( trans, self.__get_stored_workflow( trans, value[ 'id' ] ), style='instance' )
|
||||
if 'steps' in workflow_details:
|
||||
for step in workflow_details[ 'steps' ]:
|
||||
tool_id = workflow_details[ 'steps' ][ step ][ 'tool_id' ]
|
||||
if tool_id not in tool_ids and self.app.toolbox.is_missing_shed_tool( tool_id ):
|
||||
tool_ids.append( tool_id )
|
||||
if len( tool_ids ) > 0:
|
||||
value[ 'missing_tools' ] = tool_ids
|
||||
workflows_missing_tools.append( value )
|
||||
for workflow in workflows_missing_tools:
|
||||
for tool_id in workflow[ 'missing_tools' ]:
|
||||
toolshed, _, owner, name, tool, version = tool_id.split( '/' )
|
||||
shed_url = self.__get_full_shed_url( toolshed )
|
||||
repo_identifier = '/'.join( [ toolshed, owner, name ] )
|
||||
if repo_identifier not in workflows_by_toolshed:
|
||||
workflows_by_toolshed[ repo_identifier ] = dict( shed=shed_url.rstrip('/'), repository=name, owner=owner, tools=[ tool_id ], workflows=[ workflow[ 'name' ] ] )
|
||||
else:
|
||||
if tool_id not in workflows_by_toolshed[ repo_identifier ][ 'tools' ]:
|
||||
workflows_by_toolshed[ repo_identifier ][ 'tools' ].append( tool_id )
|
||||
if workflow[ 'name' ] not in workflows_by_toolshed[ repo_identifier ][ 'workflows' ]:
|
||||
workflows_by_toolshed[ repo_identifier ][ 'workflows' ].append( workflow[ 'name' ] )
|
||||
for repo_tag in workflows_by_toolshed:
|
||||
workflows.append( workflows_by_toolshed[ repo_tag ] )
|
||||
return workflows
|
||||
# import json
|
||||
# log.debug(json.dumps(workflows_by_toolshed, indent=2))
|
||||
# return workflows_by_toolshed
|
||||
return rval
|
||||
|
||||
@expose_api
|
||||
|
||||
@@ -763,22 +763,46 @@ def populate_api_routes( webapp, app ):
|
||||
repository_id=None,
|
||||
image_file=None )
|
||||
|
||||
webapp.mapper.connect( 'shed_category',
|
||||
'/api/tool_shed_repositories/shed_category',
|
||||
controller='tool_shed_repositories',
|
||||
action='shed_category',
|
||||
webapp.mapper.connect( 'tool_shed_contents',
|
||||
'/api/tool_shed/contents',
|
||||
controller='toolshed',
|
||||
action='show',
|
||||
conditions=dict( method=[ "GET" ] ) )
|
||||
|
||||
webapp.mapper.connect( 'shed_repository',
|
||||
'/api/tool_shed_repositories/shed_repository',
|
||||
controller='tool_shed_repositories',
|
||||
action='shed_repository',
|
||||
webapp.mapper.connect( 'tool_shed_category_contents',
|
||||
'/api/tool_shed/category',
|
||||
controller='toolshed',
|
||||
action='category',
|
||||
conditions=dict( method=[ "GET" ] ) )
|
||||
|
||||
webapp.mapper.connect( 'shed_categories',
|
||||
'/api/tool_shed_repositories/shed_categories',
|
||||
controller='tool_shed_repositories',
|
||||
action='shed_categories',
|
||||
webapp.mapper.connect( 'tool_shed_repository_details',
|
||||
'/api/tool_shed/repository',
|
||||
controller='toolshed',
|
||||
action='repository',
|
||||
conditions=dict( method=[ "GET" ] ) )
|
||||
|
||||
webapp.mapper.connect( 'tool_sheds',
|
||||
'/api/tool_shed',
|
||||
controller='toolshed',
|
||||
action='index',
|
||||
conditions=dict( method=[ "GET" ] ) )
|
||||
|
||||
webapp.mapper.connect( 'tool_shed_search',
|
||||
'/api/tool_shed/search',
|
||||
controller='toolshed',
|
||||
action='search',
|
||||
conditions=dict( method=[ "GET", "POST" ] ) )
|
||||
|
||||
webapp.mapper.connect( 'tool_shed_status',
|
||||
'/api/tool_shed/status',
|
||||
controller='toolshed',
|
||||
action='status',
|
||||
conditions=dict( method=[ "GET", "POST" ] ) )
|
||||
|
||||
webapp.mapper.connect( 'shed_tool_json',
|
||||
'/api/tool_shed/tool_json',
|
||||
controller='toolshed',
|
||||
action='tool_json',
|
||||
conditions=dict( method=[ "GET" ] ) )
|
||||
|
||||
webapp.mapper.connect( 'tool_shed_repository',
|
||||
|
||||
@@ -3,11 +3,11 @@ import logging
|
||||
import os
|
||||
import shutil
|
||||
|
||||
from admin import AdminGalaxy
|
||||
from six import string_types
|
||||
from sqlalchemy import or_
|
||||
|
||||
import tool_shed.repository_types.util as rt_util
|
||||
from admin import AdminGalaxy
|
||||
from galaxy import util, web
|
||||
from galaxy.tools.deps import views
|
||||
from galaxy.web.form_builder import CheckboxField
|
||||
@@ -195,10 +195,13 @@ class AdminToolshed( AdminGalaxy ):
|
||||
@web.expose
|
||||
@web.require_admin
|
||||
def browse_toolsheds( self, trans, **kwd ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
return trans.fill_template( '/admin/tool_shed_repository/browse_toolsheds.mako',
|
||||
message=message,
|
||||
status='error' )
|
||||
app = {
|
||||
'jscript': "admin.toolshed"
|
||||
}
|
||||
return trans.fill_template( 'galaxy.panels.mako',
|
||||
config={
|
||||
'title': 'Galaxy Tool Sheds',
|
||||
'app': app } )
|
||||
|
||||
@web.expose
|
||||
@web.require_admin
|
||||
|
||||
@@ -72,6 +72,7 @@ class CategoriesController( BaseAPIController ):
|
||||
|
||||
Example: GET localhost:9009/api/categories/f9cad7b01a472135/repositories
|
||||
"""
|
||||
installable = util.asbool( kwd.get( 'installable', 'false' ) )
|
||||
category = suc.get_category( self.app, category_id )
|
||||
if category is None:
|
||||
category_dict = dict( message='Unable to locate category record for id %s.' % ( str( id ) ),
|
||||
@@ -82,7 +83,7 @@ class CategoriesController( BaseAPIController ):
|
||||
category_dict[ 'url' ] = web.url_for( controller='categories',
|
||||
action='show',
|
||||
id=trans.security.encode_id( category.id ) )
|
||||
repositories = repository_util.get_repositories_by_category( self.app, category.id )
|
||||
repositories = repository_util.get_repositories_by_category( self.app, category.id, installable=installable )
|
||||
category_dict[ 'repositories' ] = repositories
|
||||
return category_dict
|
||||
|
||||
|
||||
@@ -382,6 +382,9 @@ class RepositoriesController( BaseAPIController ):
|
||||
:param name: (optional)the repository name.
|
||||
:type name: str
|
||||
|
||||
:param tool_ids: (optional) a tool GUID to find the repository for
|
||||
:param tool_ids: str
|
||||
|
||||
:returns dict: object containing list of results
|
||||
|
||||
Examples:
|
||||
@@ -407,6 +410,47 @@ class RepositoriesController( BaseAPIController ):
|
||||
else:
|
||||
response = json.dumps( search_results )
|
||||
return response
|
||||
tool_ids = kwd.get( 'tool_ids', None )
|
||||
if tool_ids is not None:
|
||||
tool_ids = util.listify( tool_ids )
|
||||
repository_found = []
|
||||
all_metadata = dict()
|
||||
for tool_id in tool_ids:
|
||||
# A valid GUID looks like toolshed.g2.bx.psu.edu/repos/bgruening/deeptools/deeptools_computeMatrix/1.1.0
|
||||
shed, _, owner, name, tool, version = tool_id.split( '/' )
|
||||
clause_list = [ and_( self.app.model.Repository.table.c.deprecated == false(),
|
||||
self.app.model.Repository.table.c.deleted == false(),
|
||||
self.app.model.Repository.table.c.name == name,
|
||||
self.app.model.User.table.c.username == owner,
|
||||
self.app.model.Repository.table.c.user_id == self.app.model.User.table.c.id ) ]
|
||||
repository = trans.sa_session.query( self.app.model.Repository ).filter( *clause_list ).first()
|
||||
for changeset, changehash in repository.installable_revisions( self.app ):
|
||||
metadata = metadata_util.get_current_repository_metadata_for_changeset_revision( self.app, repository, changehash )
|
||||
tools = metadata.metadata[ 'tools' ]
|
||||
for tool in tools:
|
||||
if tool[ 'guid' ] in tool_ids:
|
||||
repository_found.append( '%d:%s' % ( int( changeset ), changehash ) )
|
||||
metadata = metadata_util.get_current_repository_metadata_for_changeset_revision( self.app, repository, changehash )
|
||||
if metadata is None:
|
||||
continue
|
||||
metadata_dict = metadata.to_dict( value_mapper={ 'id': self.app.security.encode_id, 'repository_id': self.app.security.encode_id } )
|
||||
metadata_dict[ 'repository' ] = repository.to_dict( value_mapper={ 'id': self.app.security.encode_id } )
|
||||
if metadata.has_repository_dependencies:
|
||||
metadata_dict[ 'repository_dependencies' ] = metadata_util.get_all_dependencies( self.app, metadata, processed_dependency_links=[] )
|
||||
else:
|
||||
metadata_dict[ 'repository_dependencies' ] = []
|
||||
if metadata.includes_tool_dependencies:
|
||||
metadata_dict[ 'tool_dependencies' ] = repository.get_tool_dependencies( self.app, changehash )
|
||||
else:
|
||||
metadata_dict[ 'tool_dependencies' ] = {}
|
||||
if metadata.includes_tools:
|
||||
metadata_dict[ 'tools' ] = metadata.metadata[ 'tools' ]
|
||||
all_metadata[ '%s:%s' % ( int( changeset ), changehash ) ] = metadata_dict
|
||||
if repository_found is not None:
|
||||
all_metadata[ 'current_changeset' ] = repository_found[ 0 ]
|
||||
# all_metadata[ 'found_changesets' ] = repository_found
|
||||
return json.dumps( all_metadata )
|
||||
return '{}'
|
||||
|
||||
clause_list = [ and_( self.app.model.Repository.table.c.deprecated == false(),
|
||||
self.app.model.Repository.table.c.deleted == deleted ) ]
|
||||
|
||||
@@ -3,12 +3,20 @@ import logging
|
||||
from collections import namedtuple
|
||||
from galaxy import web
|
||||
from galaxy import util
|
||||
from galaxy.tools.parameters import params_to_strings
|
||||
from galaxy.web import _future_expose_api_raw_anonymous_and_sessionless as expose_api_raw_anonymous_and_sessionless
|
||||
from galaxy.web.base.controller import BaseAPIController
|
||||
from galaxy.webapps.tool_shed.search.tool_search import ToolSearch
|
||||
from galaxy.exceptions import NotImplemented
|
||||
from galaxy.exceptions import RequestParameterInvalidException
|
||||
from galaxy.exceptions import ConfigDoesNotAllowException
|
||||
from tool_shed.dependencies.repository import relation_builder
|
||||
from tool_shed.tools import tool_validator
|
||||
from tool_shed.utility_containers import ToolShedUtilityContainerManager
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import metadata_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -99,3 +107,78 @@ class ToolsController( BaseAPIController ):
|
||||
boosts )
|
||||
results[ 'hostname' ] = web.url_for( '/', qualified=True )
|
||||
return results
|
||||
|
||||
@expose_api_raw_anonymous_and_sessionless
|
||||
def json( self, trans, **kwd ):
|
||||
"""
|
||||
GET /api/tools/json
|
||||
|
||||
Get the tool form JSON for a tool in a repository.
|
||||
|
||||
:param guid: the GUID of the tool
|
||||
:param guid: str
|
||||
|
||||
:param tsr_id: the ID of the repository
|
||||
:param tsr_id: str
|
||||
|
||||
:param changeset: the changeset at which to load the tool json
|
||||
:param changeset: str
|
||||
"""
|
||||
guid = kwd.get( 'guid', None )
|
||||
tsr_id = kwd.get( 'tsr_id', None )
|
||||
changeset = kwd.get( 'changeset', None )
|
||||
if None in [ changeset, tsr_id, guid ]:
|
||||
message = 'Changeset, repository ID, and tool GUID are all required parameters.'
|
||||
trans.response.status = 400
|
||||
return { 'status': 'error', 'message': message }
|
||||
tsucm = ToolShedUtilityContainerManager( trans.app )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, tsr_id )
|
||||
repository_clone_url = common_util.generate_clone_url_for_repository_in_tool_shed( repository.user, repository )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, tsr_id, changeset )
|
||||
toolshed_base_url = str( web.url_for( '/', qualified=True ) ).rstrip( '/' )
|
||||
rb = relation_builder.RelationBuilder( trans.app, repository, repository_metadata, toolshed_base_url )
|
||||
repository_dependencies = rb.get_repository_dependencies_for_changeset_revision()
|
||||
containers_dict = tsucm.build_repository_containers( repository,
|
||||
changeset,
|
||||
repository_dependencies,
|
||||
repository_metadata )
|
||||
found_tool = None
|
||||
for folder in containers_dict[ 'valid_tools' ].folders:
|
||||
if hasattr( folder, 'valid_tools' ):
|
||||
for tool in folder.valid_tools:
|
||||
tool.id = tool.tool_id
|
||||
tool_guid = suc.generate_tool_guid( repository_clone_url, tool )
|
||||
if tool_guid == guid:
|
||||
found_tool = tool
|
||||
break
|
||||
if found_tool is None:
|
||||
message = 'Unable to find tool with guid %s in repository %s.' % ( guid, repository.name )
|
||||
trans.response.status = 404
|
||||
return { 'status': 'error', 'message': message }
|
||||
|
||||
tv = tool_validator.ToolValidator( trans.app )
|
||||
repository, tool, message = tv.load_tool_from_changeset_revision( tsr_id,
|
||||
changeset,
|
||||
found_tool.tool_config )
|
||||
if message:
|
||||
status = 'error'
|
||||
return dict( message=message, status=status )
|
||||
tool_help = ''
|
||||
if tool.help:
|
||||
tool_help = tool.help.render( static_path=web.url_for( '/static' ), host_url=web.url_for( '/', qualified=True ) )
|
||||
tool_help = util.unicodify( tool_help, 'utf-8' )
|
||||
tool_dict = tool.to_dict( trans )
|
||||
tool_dict[ 'inputs' ] = {}
|
||||
tool.populate_model( trans, tool.inputs, {}, tool_dict[ 'inputs' ] )
|
||||
tool_dict.update({
|
||||
'help' : tool_help,
|
||||
'citations' : bool( tool.citations ),
|
||||
'biostar_url' : trans.app.config.biostar_url,
|
||||
'requirements' : [ { 'name' : r.name, 'version' : r.version } for r in tool.requirements ],
|
||||
'state_inputs' : params_to_strings( tool.inputs, {}, trans.app ),
|
||||
'display' : tool.display_interface,
|
||||
'action' : web.url_for( tool.action ),
|
||||
'method' : tool.method,
|
||||
'enctype' : tool.enctype
|
||||
})
|
||||
return json.dumps( tool_dict )
|
||||
|
||||
@@ -185,6 +185,11 @@ def app_factory( global_conf, **kwargs ):
|
||||
controller='tools',
|
||||
action='index',
|
||||
conditions=dict( method=[ "GET" ] ) )
|
||||
webapp.mapper.connect( 'json',
|
||||
'/api/tools/json',
|
||||
controller='tools',
|
||||
action='json',
|
||||
conditions=dict( method=[ "GET" ] ) )
|
||||
webapp.mapper.connect( "version", "/api/version", controller="configuration", action="version", conditions=dict( method=[ "GET" ] ) )
|
||||
|
||||
webapp.finalize_config()
|
||||
|
||||
@@ -510,7 +510,7 @@ def get_repo_info_tuple_contents( repo_info_tuple ):
|
||||
return description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies
|
||||
|
||||
|
||||
def get_repositories_by_category( app, category_id ):
|
||||
def get_repositories_by_category( app, category_id, installable=False ):
|
||||
sa_session = app.model.context.current
|
||||
resultset = sa_session.query( app.model.Category ).get( category_id )
|
||||
repositories = []
|
||||
@@ -522,7 +522,11 @@ def get_repositories_by_category( app, category_id ):
|
||||
encoded_id = app.security.encode_id( row.repository.id )
|
||||
metadata = metadata_util.get_repository_metadata_by_changeset_revision( app, encoded_id, changehash )
|
||||
repository_dict[ 'metadata' ][ '%s:%s' % ( changeset, changehash ) ] = metadata.to_dict( value_mapper=default_value_mapper )
|
||||
repositories.append( repository_dict )
|
||||
if installable:
|
||||
if len( row.repository.installable_revisions( app ) ):
|
||||
repositories.append( repository_dict )
|
||||
else:
|
||||
repositories.append( repository_dict )
|
||||
return repositories
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"admin.toolshed.js","sources":["../src/admin.toolshed.js"],"names":["define","mod_shed_list_view","mod_categories_view","mod_repositories_view","mod_repository_view","mod_repoqueue_view","mod_repo_status_view","mod_workflows_view","AdminToolshedRouter","Backbone","Router","extend","initialize","this","routesHit","history","on","bind","trackPageview","routes","sheds","queue","workflows","status/r/:repositories","status","categories/s/:tool_shed","category/s/:tool_shed/c/:cateory_id","repository/s/:tool_shed/r/:repository_id","back","window","navigate","trigger","replace","GalaxyAdminToolshedApp","View","app_config","known_views","Galaxy","admintoolshedapp","admin_toolshed_router","adminRepoQueueView","reDraw","RepoQueueView","adminShedListView","ShedListView","tool_shed","adminShedCategoriesView","CategoryView","category_id","adminShedCategoryView","Category","repository_id","adminRepositoryView","RepoDetails","repositories","adminRepoStatusView","split","RepoStatus","adminWorkflowsView","Workflows","start","pushState","GalaxyApp"],"mappings":"AAAAA,QAAQ,8BACA,+BACA,iCACA,+BACA,qCACA,gCACA,+BACA,SAASC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEb,GAAIC,GAAsBC,SAASC,OAAOC,QAEtCC,WAAY,WACRC,KAAKC,UAAY,EAEjBL,SAASM,QAAQC,GAAI,QAAS,WAAaH,KAAKC,aAAgBD,MAChEA,KAAKI,KAAM,QAASJ,KAAKK,gBAG7BC,QACI,GAA+C,YAC/CC,MAA+C,YAC/CC,MAA+C,QAC/CC,UAA+C,YAC/CC,yBAA+C,SAC/CC,OAA+C,SAC/CC,0BAA+C,aAC/CC,sCAA+C,eAC/CC,2CAA+C,cASnDC,KAAM,WACEf,KAAKC,UAAY,EACjBe,OAAOd,QAAQa,OAEff,KAAKiB,SAAU,KAAOC,SAAQ,EAAMC,SAAQ,OAMpDC,EAAyBxB,SAASyB,KAAKvB,QAEvCwB,YACIC,aAAc,YAAa,QAAS,SAAU,aAAc,eAAgB,gBAGhFxB,WAAY,WACRyB,OAAOC,iBAAmBzB,KAC1BA,KAAK0B,sBAAwB,GAAI/B,GAEjCK,KAAK0B,sBAAsBvB,GAAG,cAAe,WACrCqB,OAAOC,iBAAiBE,mBACxBH,OAAOC,iBAAiBE,mBAAmBC,SAG3CJ,OAAOC,iBAAiBE,mBAAqB,GAAInC,GAAmBqC,gBAG5E7B,KAAK0B,sBAAsBvB,GAAG,kBAAmB,WACzCqB,OAAOC,iBAAiBK,kBACxBN,OAAOC,iBAAiBK,kBAAkBF,SAG1CJ,OAAOC,iBAAiBK,kBAAoB,GAAI1C,GAAmB2C,eAG3E/B,KAAK0B,sBAAsBvB,GAAG,mBAAoB,SAAS6B,GACnDR,OAAOC,iBAAiBQ,wBACxBT,OAAOC,iBAAiBQ,wBAAwBL,QAAQI,UAAWA,EAAUb,QAAQ,MAAO,SAG5FK,OAAOC,iBAAiBQ,wBAA0B,GAAI5C,GAAoB6C,cAAcF,UAAWA,EAAUb,QAAQ,MAAO,WAGpInB,KAAK0B,sBAAsBvB,GAAG,qBAAsB,SAAS6B,EAAWG,GAChEX,OAAOC,iBAAiBW,sBACxBZ,OAAOC,iBAAiBW,sBAAsBR,QAAQI,UAAWA,EAAUb,QAAQ,MAAO,OAAQgB,YAAaA,IAG/GX,OAAOC,iBAAiBW,sBAAwB,GAAI9C,GAAsB+C,UAAUL,UAAWA,EAAUb,QAAQ,MAAO,OAAQgB,YAAaA,MAGrJnC,KAAK0B,sBAAsBvB,GAAG,mBAAoB,SAAS6B,EAAWM,GAC9Dd,OAAOC,iBAAiBc,oBACxBf,OAAOC,iBAAiBc,oBAAoBX,QAAQI,UAAWA,EAAUb,QAAQ,MAAO,OAAQmB,cAAeA,IAG/Gd,OAAOC,iBAAiBc,oBAAsB,GAAIhD,GAAoBiD,aAAaR,UAAWA,EAAUb,QAAQ,MAAO,OAAQmB,cAAeA,MAGtJtC,KAAK0B,sBAAsBvB,GAAG,eAAgB,SAASsC,GAC/CjB,OAAOC,iBAAiBiB,oBACxBlB,OAAOC,iBAAiBiB,oBAAoBd,QAAQa,aAAcA,EAAaE,MAAM,OAGrFnB,OAAOC,iBAAiBiB,oBAAsB,GAAIjD,GAAqBmD,YAAYH,aAAcA,EAAaE,MAAM,SAG5H3C,KAAK0B,sBAAsBvB,GAAG,kBAAmB,WACzCqB,OAAOC,iBAAiBoB,mBACxBrB,OAAOC,iBAAiBoB,mBAAmBjB,SAG3CJ,OAAOC,iBAAiBoB,mBAAqB,GAAInD,GAAmBoD,YAI5ElD,SAASM,QAAQ6C,OAAOC,WAAW,MAI3C,QACIC,UAAW7B"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"categories-view.js","sources":["../../../src/mvc/toolshed/categories-view.js"],"names":["define","toolshed_model","toolshed_util","ToolShedCategories","Backbone","View","extend","el","defaults","tool_shed","initialize","options","shed","replace","this","_","model","Categories","listenTo","render","url","fetch","categories","models","queue","queueLength","category_list_template","templateCategoryList","$el","html","$","css","bindEvents","that","require","autocomplete","source","request","response","shed_url","base_url","Galaxy","root","params","term","tool_shed_url","post","data","console","log","result_list","shedParser","minLength","select","event","ui","tsr_id","item","value","new_route","history","navigate","trigger","reDraw","empty","template","join","CategoryView"],"mappings":"AAAAA,QAAQ,8BAA+B,qBAAsB,SAASC,EAAgBC,GAElF,GAAIC,GAAqBC,SAASC,KAAKC,QAEnCC,GAAI,UAEJC,UACIC,UAAW,mCAGfC,WAAY,SAASC,GACjB,GACIC,GAAOD,EAAQF,UAAUI,QAAQ,MAAO,MAC5CC,MAAKH,QAAUI,EAAEP,SAASM,KAAKH,SAAWA,EAASG,KAAKN,UACxDM,KAAKE,MAAQ,GAAIf,GAAegB,WAChCH,KAAKI,SAASJ,KAAKE,MAAO,OAAQF,KAAKK,QACvCL,KAAKE,MAAMI,IAAMN,KAAKE,MAAMI,IAAM,kBAAoBN,KAAKH,QAAQF,UACnEK,KAAKE,MAAMP,UAAYG,EACvBE,KAAKE,MAAMK,SAGfF,OAAQ,SAASR,GACbG,KAAKH,QAAUI,EAAET,OAAOQ,KAAKH,QAASA,GACtCG,KAAKH,QAAQW,WAAaR,KAAKE,MAAMO,OACrCT,KAAKH,QAAQa,MAAQtB,EAAcuB,aACnC,IAAIC,GAAyBZ,KAAKa,oBAClCb,MAAKc,IAAIC,KAAKH,EAAuBZ,KAAKH,UAC1CmB,EAAE,WAAWC,IAAI,WAAY,QAC7BjB,KAAKkB,cAGTA,WAAY,WACR,GAAIC,GAAOnB,IACXoB,UAAS,yBAA0B,WAC/BJ,EAAE,eAAeK,cACbC,OAAQ,SAASC,EAASC,GACtB,GAAIC,GAAWN,EAAKjB,MAAMP,UAAUI,QAAQ,OAAQ,KAChD2B,EAAWC,OAAOC,KAAO,uBACzBC,GAAUC,KAAMP,EAAQO,KAAMC,cAAeN,EACjDT,GAAEgB,KAAKN,EAAUG,EAAQ,SAASI,GAC9BC,QAAQC,IAAIF,GACZG,YAAchD,EAAciD,WAAWJ,GACvCT,EAASY,gBAGjBE,UAAW,EACXC,OAAQ,SAASC,EAAOC,GACpB,GAAIC,GAASD,EAAGE,KAAKC,MAGjBC,GAFUlB,OAAOC,KAAO,4BACdG,cAAiBZ,EAAKjB,MAAMP,UAAW+C,OAAUA,GAC/C,gBAAkBvB,EAAKjB,MAAMP,UAAY,MAAQ+C,EACjEpD,UAASwD,QAAQC,SAASF,GAAYG,SAAS,EAAMjD,SAAQ,UAM7EkD,OAAQ,SAASpD,GACbG,KAAKc,IAAIoC,QACTlD,KAAKE,MAAMI,IAAMN,KAAKE,MAAMI,IAAM,kBAAoBN,KAAKH,QAAQF,UACnEK,KAAKJ,WAAWC,IAGpBgB,qBAAsBZ,EAAEkD,UACpB,0BACI,+CACA,6CACJ,WACA,yEACI,4HACA,wJACJ,SACA,wDACI,+DACI,4BACI,8LACJ,UACJ,SACA,8CACI,uBACI,iCACI,OACI,gBACA,uBACA,wBACJ,QACJ,WACA,gDACI,OACI,OACI,sGACJ,QACA,8CACA,+CACJ,QACJ,YACJ,WACJ,SACJ,UACFC,KAAK,MAGX,QACIC,aAAchE"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"repo-queue-view.js","sources":["../../../src/mvc/toolshed/repo-queue-view.js"],"names":["define","ToolShedRepositoryQueue","Backbone","View","extend","el","render","options","this","_","repository_queue_template","templateRepoQueue","$el","html","repository","model","templateRepoQueueTab","template","join","workflows_missing_tools","RepoQueue"],"mappings":"AAAAA,QAAQ,mCAAoC,WAExC,GAAIC,GAA0BC,SAASC,KAAKC,QAExCC,GAAI,iBAEJC,OAAQ,SAASC,GACbC,KAAKD,QAAUE,EAAEL,OAAOI,KAAKD,QAASA,EACtC,IAAIG,GAA4BF,KAAKG,mBACrCH,MAAKI,IAAIC,KAAKH,GAA2BI,WAAYN,KAAKO,UAG9DC,qBAAsBP,EAAEQ,UACpB,8EACI,kFACJ,SACFC,KAAK,KAEPP,kBAAmBF,EAAEQ,UACjB,+CACI,wGACI,iCACI,OACI,sIACA,sIACA,uCACA,mCACA,oCACA,uCACJ,QACJ,WACA,UACI,oDACI,mDACI,0BACI,oMACJ,QACA,0BACI,yMACJ,QACA,8DACA,qDACA,sDACA,0DACJ,QACJ,YACJ,WACJ,WACA,+FACJ,UACFC,KAAK,KAEPC,wBAAyBV,EAAEQ,UACvB,4GACI,iCACI,OACI,wCACA,uCACA,mCACA,mCACA,oCACA,sCACJ,QACJ,WACA,UACI,gEACI,wDACA,gDACA,OACI,0BACI,8BACI,yDACI,4CACJ,YACJ,QACJ,QACA,0BACI,8BACI,uDACI,8CACJ,YACJ,QACJ,QACA,yDACA,yDACA,yDACA,0BACI,8BACI,oRACA,mQACJ,QACJ,QACJ,QACJ,YACJ,QACJ,UACFC,KAAK,MAGX,QACIE,UAAWnB"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"repo-status-view.js","sources":["../../../src/mvc/toolshed/repo-status-view.js"],"names":["define","toolshed_model","toolshed_util","ToolShedRepoStatusView","Backbone","View","extend","el","initialize","options","this","_","defaults","model","RepoStatus","listenTo","render","url","repositories","join","fetch","timer","setInterval","self","terminal_states","all_done","some","models","repository","repo_id","get","repo_status","toLowerCase","indexOf","clearInterval","close","repo_status_template","templateRepoStatus","$el","html","title","queue","queueLength","$","css","bindEvents","reDraw","empty","template"],"mappings":"AAAAA,QAAQ,8BAA+B,qBAAsB,SAASC,EAAgBC,GAElF,GAAIC,GAAyBC,SAASC,KAAKC,QAEvCC,GAAI,UAEJC,WAAY,SAASC,GAEjBC,KAAKD,QAAUE,EAAEC,SAASF,KAAKD,cAAiBA,EAASC,KAAKE,UAC9DF,KAAKG,MAAQ,GAAIZ,GAAea,WAChCJ,KAAKK,SAASL,KAAKG,MAAO,OAAQH,KAAKM,QACvCN,KAAKG,MAAMI,KAAO,iBAAmBP,KAAKD,QAAQS,aAAaC,KAAK,KACpET,KAAKG,MAAMO,QACXV,KAAKW,MAAQC,YAAY,SAASC,GAC9B,GAAIC,IAAmB,YAAa,SAChCC,GAAW,CACfd,GAAEe,KAAKH,EAAKV,MAAMc,OAAQ,SAASC,GAG/B,MAFAC,SAAUD,EAAWE,IAAI,MACzBC,YAAcH,EAAWE,IAAI,UAAUE,cACM,KAAzCR,EAAgBS,QAAQF,cACxBN,GAAW,GACJ,GAFX,SAKAA,EACAS,cAAcX,EAAKF,OAGnBE,EAAKV,MAAMO,SAEhB,IAAMV,OAGbyB,MAAO,WACHD,cAAcxB,KAAKW,QAGvBL,OAAQ,SAASP,GACbC,KAAKD,QAAUE,EAAEL,OAAOI,KAAKD,QAASA,EACtC,IAAI2B,GAAuB1B,KAAK2B,kBAChC3B,MAAK4B,IAAIC,KAAKH,GAAsBI,MAAO,oBAAqBtB,aAAcR,KAAKG,MAAMc,OAAQc,MAAOvC,EAAcwC,iBACtHC,EAAE,WAAWC,IAAI,WAAY,QAC7BlC,KAAKmC,cAGTA,WAAY,aAIZC,OAAQ,SAASrC,GACbC,KAAK4B,IAAIS,QACTrC,KAAKF,WAAWC,IAGpB4B,mBAAoB1B,EAAEqC,UAClB,yEACI,6DACA,wJACJ,SACA,0BACI,oBACA,4BACA,qEACA,wBACA,sCACA,mDACA,6CACA,0FACA,sEACA,kEACJ,WACA,uCACI,iCACI,OACI,iEACA,wEACA,kEACA,qEACA,gFACJ,QACJ,WACA,+BACI,oDACI,OACI,OACI,uBACI,uFACI,gCACJ,WACJ,SACJ,QACA,OACI,uBACI,uFACI,uCACJ,WACJ,SACJ,QACA,OACI,uBACI,uFACI,iCACJ,WACJ,SACJ,QACA,OACI,uBACI,4FACI,8CACJ,WACJ,SACJ,QACA,OACI,uBACI,8FACI,qKACI,kCACJ,SACJ,WACJ,SACJ,QACJ,QACJ,YACJ,WACA,yCACJ,YACF7B,KAAK,MAGX,QACIL,WAAYX"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"repositories-view.js","sources":["../../../src/mvc/toolshed/repositories-view.js"],"names":["define","toolshed_model","toolshed_util","ToolShedCategoryContentsView","Backbone","View","extend","el","initialize","params","this","model","CategoryCollection","listenTo","render","shed","tool_shed","replace","url","category_id","category","fetch","options","_","category_contents_template","templateCategoryContents","$el","html","models","queue","queueLength","$","css","bindEvents","that","require","autocomplete","source","request","response","shed_url","base_url","Galaxy","root","term","tool_shed_url","post","data","result_list","shedParser","minLength","select","event","ui","tsr_id","item","value","new_route","history","navigate","trigger","reDraw","empty","template","join","Category"],"mappings":"AAAAA,QAAQ,8BAA+B,qBAAsB,SAASC,EAAgBC,GAElF,GAAIC,GAA+BC,SAASC,KAAKC,QAE7CC,GAAI,UAEJC,WAAY,SAASC,GAEjBC,KAAKC,MAAQ,GAAIV,GAAeW,mBAChCF,KAAKG,SAASH,KAAKC,MAAO,OAAQD,KAAKI,OACvC,IAAIC,GAAON,EAAOO,UAAUC,QAAQ,MAAO,MAC3CP,MAAKC,MAAMO,KAAO,kBAAoBH,EAAO,gBAAkBN,EAAOU,YACtET,KAAKC,MAAMK,UAAYD,EACvBL,KAAKC,MAAMS,SAAWX,EAAOU,YAC7BT,KAAKC,MAAMU,SAGfP,OAAQ,SAASQ,GACbZ,KAAKY,QAAUC,EAAEjB,OAAOI,KAAKY,QAASA,EACtC,IAAIE,GAA6Bd,KAAKe,wBACtCf,MAAKgB,IAAIC,KAAKH,GAA4BJ,SAAUV,KAAKC,MAAMiB,OAAO,GAAIZ,UAAWN,KAAKC,MAAMK,UAAWa,MAAO3B,EAAc4B,iBAChIC,EAAE,WAAWC,IAAI,WAAY,QAC7BtB,KAAKuB,cAGTA,WAAY,WACR,GAAIC,GAAOxB,IACXyB,UAAS,yBAA0B,WAC/BJ,EAAE,eAAeK,cACbC,OAAQ,SAASC,EAASC,GACtB,GAAIC,GAAWN,EAAKvB,MAAMK,UAAUC,QAAQ,OAAQ,KAChDwB,EAAWC,OAAOC,KAAO,uBACzBlC,GAAUmC,KAAMN,EAAQM,KAAMC,cAAeL,EACjDT,GAAEe,KAAKL,EAAUhC,EAAQ,SAASsC,GAC9BC,YAAc9C,EAAc+C,WAAWF,GACvCR,EAASS,gBAGjBE,UAAW,EACXC,OAAQ,SAASC,EAAOC,GACpB,GAAIC,GAASD,EAAGE,KAAKC,MACjBC,EAAY,gBAAkBvB,EAAKvB,MAAMK,UAAY,MAAQsC,CACjElD,UAASsD,QAAQC,SAASF,GAAYG,SAAS,EAAM3C,SAAQ,UAM7E4C,OAAQ,SAASvC,GACbZ,KAAKgB,IAAIoC,QACTpD,KAAKF,WAAWc,IAGpBG,yBAA0BF,EAAEwC,UACxB,0BACI,+CACA,6CACJ,WACA,yEACI,4FACA,wJACJ,SACA,0DACI,+DACI,4BACI,8LACJ,UACJ,SACA,8CACI,uBACI,iCACI,OACI,qCACA,oCACA,oBACA,oCACJ,QACJ,WACA,oEACI,OACI,mCACA,OACI,wEACI,8FACJ,SACJ,QACA,yCACA,kCACJ,QACJ,YACJ,WACJ,SACJ,UACFC,KAAK,MAGX,QACIC,SAAU9D"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"repository-queue-view.js","sources":["../../../src/mvc/toolshed/repository-queue-view.js"],"names":["define","toolshed_model","toolshed_util","View","Backbone","extend","el","defaults","initialize","that","this","model","RepoQueue","listenTo","render","fetch","repo_queue_template","templateRepoQueue","repositories","models","$el","html","title","queue","queueLength","$","css","bindEvents","on","repository_metadata","loadFromQueue","attr","installFromQueue","queue_key","repo_queue","JSON","parse","localStorage","hasOwnProperty","repository_id","repository","id","remove","stringify","history","navigate","trigger","replace","params","Object","install_tool_dependencies","install_repository_dependencies","install_resolver_dependencies","tool_panel_section","shed_tool_conf","changeset_revision","tool_shed_repository_ids","tool_shed_url","split","changeset","url","Galaxy","root","undefined","queueKey","repository_queue","post","data","iri_params","new_route","join","console","log","reDraw","options","empty","_","template","RepoQueueView"],"mappings":"AAAAA,QAAQ,8BAA+B,qBAAsB,SAASC,EAAgBC,GAElF,GAAIC,GAAOC,SAASD,KAAKE,QAErBC,GAAI,UAEJC,cAEAC,WAAY,WACR,GAAIC,GAAOC,IACXA,MAAKC,MAAQ,GAAIV,GAAeW,UAChCF,KAAKG,SAASH,KAAKC,MAAO,OAAQD,KAAKI,QACvCJ,KAAKC,MAAMI,QACXN,EAAKK,UAGTA,OAAQ,WACJ,GAAIL,GAAOC,KACPM,EAAsBP,EAAKQ,kBAC3BC,EAAeT,EAAKE,MAAMQ,MAC9BV,GAAKW,IAAIC,KAAKL,GAAqBM,MAAO,gCAAiCJ,aAAcA,EAAcK,MAAOrB,EAAcsB,iBAC5HC,EAAE,WAAWC,IAAI,WAAY,QAC7BjB,EAAKkB,cAGTA,WAAY,WACR,GAAIlB,GAAOC,IACXe,GAAE,gBAAgBG,GAAG,QAAS,WAC1B,GAAIC,GAAsBpB,EAAKqB,cAAcL,EAAEf,MAAMqB,KAAK,gBAC1DtB,GAAKuB,iBAAiBH,EAAqBJ,EAAEf,MAAMqB,KAAK,mBAE5DN,EAAE,eAAeG,GAAG,QAAS,WACzB,GAAIK,GAAYR,EAAEf,MAAMqB,KAAK,gBACzBG,EAAaC,KAAKC,MAAMC,aAAanB,aACzC,IAAIgB,EAAWI,eAAeL,GAAY,CACtC,GAAIM,GAAgBL,EAAWD,GAAWO,WAAWC,SAC9CP,GAAWD,GAClBR,EAAE,sBAAwBc,GAAeG,SAE7CL,aAAanB,aAAeiB,KAAKQ,UAAUT,KAE/CT,EAAE,gBAAgBG,GAAG,QAAS,WAC1BS,aAAanB,aAAe,OAEhCO,EAAE,kBAAkBG,GAAG,QAAS,WAAaxB,SAASwC,QAAQC,SAAS,aAAcC,SAAS,EAAMC,SAAQ,OAGhHf,iBAAkB,SAASH,EAAqBI,GAC5C,GACIe,GAASC,QACbD,GAAOE,0BAA4BrB,EAAoBqB,0BACvDF,EAAOG,gCAAkCtB,EAAoBsB,gCAC7DH,EAAOI,8BAAgCvB,EAAoBuB,8BAC3DJ,EAAOK,mBAAqBxB,EAAoBwB,mBAChDL,EAAOM,eAAiBzB,EAAoByB,eAC5CN,EAAO9B,aAAeiB,KAAKQ,YAAYd,EAAoBW,WAAWC,GAAIZ,EAAoB0B,sBAC9FP,EAAOQ,yBAA2BrB,KAAKQ,WAAWd,EAAoBW,WAAWC,KACjFO,EAAOS,cAAgBxB,EAAUyB,MAAM,KAAK,GAC5CV,EAAOW,UAAY9B,EAAoB0B,kBACvC,IAAIK,GAAMC,OAAOC,KAAO,+CACxBrC,GAAE,sBAAwBI,EAAoBW,WAAWC,IAAIC,SACzDL,aAAanB,eACK6C,SAAd9B,IACAA,EAAY/B,EAAc8D,SAASnC,IAEvCoC,iBAAmB9B,KAAKC,MAAMC,aAAanB,cACvC+C,iBAAiB3B,eAAeL,WACzBgC,kBAAiBhC,GACxBI,aAAanB,aAAeiB,KAAKQ,UAAUsB,oBAInDxC,EAAEyC,KAAKN,EAAKZ,EAAQ,SAASmB,GACzB,GAAIC,GAAajC,KAAKC,MAAM+B,GACxBjD,EAAekD,EAAWlD,aAC1BmD,EAAY,YAAcnD,EAAaoD,KAAK,IAChD7C,GAAEyC,KAAKL,OAAOC,KAAO,qCAAsCM,EAAY,WACnEG,QAAQC,IAAK,oDAEjBpE,SAASwC,QAAQC,SAASwB,GAAYvB,SAAS,EAAMC,SAAQ,OAIrEjB,cAAe,SAASG,GAEpB,MADAgC,kBAAmB9B,KAAKC,MAAMC,aAAanB,cACvC+C,iBAAiB3B,eAAeL,GACzBgC,iBAAiBhC,GAErB8B,QAGXU,OAAQ,SAASC,GACbhE,KAAKU,IAAIuD,QACTjE,KAAKF,WAAWkE,GAChBhE,KAAKC,MAAMI,QACXL,KAAKI,OAAO4D,IAGhBzD,kBAAmB2D,EAAEC,UACjB,yEACI,6DACA,wJACJ,SACA,iEACI,wGACI,iCACI,OACI,mCACA,oCACA,uCACA,uCACA,sCACA,sIACJ,QACJ,WACA,UACI,oDACQ,0DACI,uEACA,wEACA,0EACA,qEACA,0BACI,kNACJ,QACA,0BACI,uNACJ,QACJ,QACR,YACJ,WACJ,WACA,+FACJ,UACEP,KAAK,MAGf,QACIQ,cAAe3E"}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"shed-category-view.js","sources":["../../../src/mvc/toolshed/shed-category-view.js"],"names":["define","Backbone","View","extend","el","render","options","this","_","category_list_template","templateCategoryList","$el","html","categories","model","template","join","ToolShedCategoriesView","ToolShedCategories"],"mappings":"AAAAA,QAAQ,gCAAiC,WAERC,SAASC,KAAKC,QAEvCC,GAAI,iBAEJC,OAAQ,SAASC,GACbC,KAAKD,QAAUE,EAAEL,OAAOI,KAAKD,QAASA,EACtC,IAAIG,GAAyBF,KAAKG,sBAClCH,MAAKI,IAAIC,KAAKH,GAAwBI,WAAYN,KAAKO,UAG3DJ,qBAAsBF,EAAEO,UACpB,8CACI,+DACI,4BACI,gJACJ,UACJ,SACA,8CACI,oCACA,uBACI,iCACI,OACI,gBACA,uBACA,wBACJ,QACJ,WACA,gDACI,OACI,OACI,uGACJ,QACA,uCACA,wCACJ,QACJ,YACJ,WACJ,SACJ,UACFC,KAAK,MAGX,QACIC,uBAAwBC"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"shed-list-view.js","sources":["../../../src/mvc/toolshed/shed-list-view.js"],"names":["define","toolshed_model","toolshed_util","View","Backbone","extend","defaults","tool_sheds","url","name","initialize","this","options","_","model","ShedsCollection","listenTo","render","fetch","el","toolshed_list_template","templateToolshedList","$el","html","title","models","queue","queueLength","reDraw","empty","template","join","ShedListView"],"mappings":"AAAAA,QAAQ,8BAA+B,qBAAsB,SAASC,EAAgBC,GAElF,GAAIC,GAAOC,SAASD,KAAKE,QAErBC,UACIC,aAAcC,IAAO,kCAAmCC,KAAQ,2BAGpEC,WAAY,WAERC,KAAKC,QAAUC,EAAEP,SAASK,KAAKC,YAAeD,KAAKL,UACnDK,KAAKG,MAAQ,GAAIb,GAAec,gBAChCJ,KAAKK,SAASL,KAAKG,MAAO,OAAQH,KAAKM,QACvCN,KAAKG,MAAMI,SAGfC,GAAI,UAEJF,OAAQ,SAASL,GACbD,KAAKC,QAAUC,EAAEP,SAASK,KAAKC,YAAeA,EAASD,KAAKL,SAC5D,IAAIc,GAAyBT,KAAKU,oBAClCV,MAAKW,IAAIC,KAAKH,GAAwBI,MAAO,+BAAgCjB,WAAYI,KAAKG,MAAMW,OAAQC,MAAOxB,EAAcyB,kBAGrIC,OAAQ,SAAShB,GACbD,KAAKW,IAAIO,QACTlB,KAAKM,OAAOL,IAGhBS,qBAAsBR,EAAEiB,UACpB,yEACI,6DACA,wJACJ,SACA,uDACI,yBACI,uBACI,4CACI,4BACI,OACI,wEACI,8GACJ,SACJ,QACJ,QACJ,YACJ,WACJ,SACA,kCACJ,UACFC,KAAK,MAIX,QACIC,aAAc7B"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"shed-repo-details-view.js","sources":["../../../src/mvc/toolshed/shed-repo-details-view.js"],"names":["define","ToolShedRepositoryView","Backbone","View","extend","el","render","options","this","_","repository_details_template","templateRepoDetails","$el","html","repositories","model","template","join","templateRepoDependencies","templateRepoDependency","templateShedToolConf","templateToolDependency","templateGlobalSectionCreate","templateGlobalSectionselect","templateToolSectionCreate","templatePanelSelectOptions","RepoDetails"],"mappings":"AAAAA,QAAQ,qCAAsC,WAE1C,GAAIC,GAAyBC,SAASC,KAAKC,QAEvCC,GAAI,iBAEJC,OAAQ,SAASC,GACbC,KAAKD,QAAUE,EAAEL,OAAOI,KAAKD,QAASA,EACtC,IAAIG,GAA8BF,KAAKG,qBACvCH,MAAKI,IAAIC,KAAKH,GAA6BI,aAAcN,KAAKO,UAGlEJ,oBAAqBF,EAAEO,UACnB,wIACI,yJACA,wFACI,oGACA,+FACA,yBACI,6CACA,uCACI,gEACI,uEACI,wGACA,4HACJ,YACJ,YACA,wMACA,6IACA,kIACJ,SACJ,SACA,wBACA,gJACA,6BACI,4DACI,oDACI,yEACA,uFACJ,OACA,0FACA,oEACI,2BACI,wEACI,qGACJ,OACJ,SACA,4DACJ,SACJ,UACA,2DACI,kDACI,uEACA,mFACJ,OACA,8CACI,mEACA,2EACJ,OACA,8DACI,2BACI,kEACI,6FACJ,OACJ,SACA,8HACI,UACI,sGACI,4CACA,mBACA,gBACJ,QACJ,WACA,yBACI,4EACI,0EACI,mCACA,8BACA,qCACA,kCACJ,QACJ,YACJ,WACJ,WACJ,SACJ,UACA,yEACI,yDACI,2BACI,sDACI,kHACJ,OACJ,SACA,kHACI,UACI,sGACI,4CACA,uBACA,mBACA,wEACR,WACA,6BACQ,0DACI,0GACI,mCACI,wFACI,gPACJ,SACJ,QACA,mCACA,kDACA,0DACI,yEACJ,QACJ,QACJ,YACR,WACJ,WACJ,SACJ,UACJ,SACJ,UACJ,UACFC,KAAK,KAEPC,yBAA0BT,EAAEO,UACxB,0EACI,wGACA,4BACI,2CACI,+DACI,oFACA,oDACJ,YACJ,UACJ,QACJ,UAAUC,KAAK,KAEnBE,uBAAwBV,EAAEO,UACtB,wGACI,6HACJ,QACA,2CACI,+DACI,oFACA,sCACI,oDACJ,QACJ,YACJ,WACFC,KAAK,KAEPG,qBAAsBX,EAAEO,UACpB,iEACA,6BACA,yBACI,kBACA,kJACJ,UACFC,KAAK,KAEPI,uBAAwBZ,EAAEO,UACtB,2CACI,+DACI,qDACI,uEACA,8CACJ,UACJ,YACJ,WACFC,KAAK,KAEPK,4BAA6Bb,EAAEO,UAC3B,gCACI,sDACA,6BACI,sCACI,yGACA,+FACA,mDACI,0EACJ,SACJ,SACJ,SACJ,UACFC,KAAK,KAEPM,4BAA6Bd,EAAEO,UAC3B,gCACI,sDACA,6BACI,yCACI,iDACI,sDACJ,YACA,qFACA,mDACI,mFACJ,SACJ,SACJ,SACJ,UACFC,KAAK,KAEPO,0BAA2Bf,EAAEO,UACzB,uFACI,+KACA,uLACJ,UACFC,KAAK,KAEPO,0BAA2Bf,EAAEO,UACzB,6FACI,kMACI,sDACJ,YACA,8NACA,yDACJ,UACFC,KAAK,KAEPQ,2BAA4BhB,EAAEO,UAC1B,6CACI,iEACJ,aACFC,KAAK,MAGX,QACIS,YAAazB"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"shed-repo-list-view.js","sources":["../../../src/mvc/toolshed/shed-repo-list-view.js"],"names":["define","Backbone","View","extend","el","render","options","this","_","repository_list_template","templateRepoList","$el","html","repositories","model","template","join","ToolShedRepositoriesView","ToolShedRepositories"],"mappings":"AAAAA,QAAQ,kCAAmC,WAEVC,SAASC,KAAKC,QAEvCC,GAAI,iBAEJC,OAAQ,SAASC,GACbC,KAAKD,QAAUE,EAAEL,OAAOI,KAAKD,QAASA,EACtC,IAAIG,GAA2BF,KAAKG,kBACpCH,MAAKI,IAAIC,KAAKH,GAA0BI,aAAcN,KAAKO,UAG/DJ,iBAAkBF,EAAEO,UAChB,gDACI,+DACI,4BACI,8IACJ,UACJ,SACA,8CACI,uCACA,uBACI,iCACI,OACI,qCACA,oCACA,oBACA,oCACA,wCACJ,QACJ,WACA,oDACI,OACI,mCACA,OACI,wGACJ,QACA,yCACA,kCACA,iEACJ,QACJ,YACJ,WACJ,SACJ,UACFC,KAAK,MAGX,QACIC,yBAA0BC"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"sheds-list-view.js","sources":["../../../src/mvc/toolshed/sheds-list-view.js"],"names":["define","toolshed_model","View","Backbone","extend","defaults","tool_sheds","url","name","initialize","this","model","Sheds","listenTo","render","fetch","el","options","_","toolshed_list_template","templateToolshedList","$el","html","template","join"],"mappings":"AAAAA,QAAQ,+BAAgC,SAASC,GAE7C,GAAIC,GAAOC,SAASD,KAAKE,QAErBC,UACIC,aAAcC,IAAO,kCAAmCC,KAAQ,2BAGpEC,WAAY,WAERC,KAAKC,MAAQ,GAAIV,GAAeW,MAChCF,KAAKG,SAASH,KAAKC,MAAO,OAAQD,KAAKI,QACvCJ,KAAKC,MAAMI,SAGfC,GAAI,kBAEJF,OAAQ,SAASG,GACbP,KAAKO,QAAUC,EAAEb,SAASK,KAAKO,YAAeA,EAASP,KAAKL,SAC5D,IAAIc,GAAyBT,KAAKU,oBAClCV,MAAKW,IAAIC,KAAKH,EAAuBT,KAAKC,SAG9CS,qBAAsBF,EAAEK,UACpB,6CACI,gEACA,6BACI,yBACI,uBACI,wCACI,4BACI,OACI,wEACI,gHACJ,SACJ,QACJ,QACJ,YACJ,WACJ,SACA,kCACJ,SACJ,UACFC,KAAK,MAIX,QACItB,KAAMA"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"toolshed-model.js","sources":["../../../src/mvc/toolshed/toolshed-model.js"],"names":["define","ToolShedModel","Backbone","Model","extend","defaults","url","name","urlRoot","Galaxy","root","ToolShedsCollection","Collection","model","ToolShedCategoriesModel","ToolShedCategoriesCollection","ToolShedCategoryModel","ToolShedCategoryCollection","ToolShedRepositoryModel","ToolShedRepositoryCollection","RepoQueueModel","RepoQueueCollection","fetch","collection","this","repositories","Array","repositories_enc","JSON","parse","localStorage","queue_keys","Object","keys","_","each","key","repo","queue_key","push","reset","prototype","call","RepoStatusModel","RepoStatusCollection","WorkflowToolsModel","WorkflowToolsCollection","ShedModel","ShedsCollection","Category","Categories","CategoryModel","CategoryCollection","RepositoryModel","RepositoryCollection","RepoQueue","RepoStatus","WorkflowTools"],"mappings":"AAAAA,UAAW,WAEP,GAAIC,GAAgBC,SAASC,MAAMC,QAC/BC,UAAWC,IAAO,kCAAmCC,KAAQ,yBAC7DC,QAASC,OAAOC,KAAO,kBAGvBC,EAAsBT,SAASU,WAAWR,QAC1CE,IAAKG,OAAOC,KAAO,gBACnBG,MAAOZ,IAGPa,EAA0BZ,SAASC,MAAMC,QACzCC,cACAG,QAASC,OAAOC,KAAO,2BAGvBK,EAA+Bb,SAASU,WAAWR,QACnDE,IAAKG,OAAOC,KAAO,yBACnBG,MAAOC,IAGPE,EAAwBd,SAASC,MAAMC,QACvCC,cACAG,QAASC,OAAOC,KAAO,2BAGvBO,EAA6Bf,SAASU,WAAWR,QACjDE,IAAKG,OAAOC,KAAO,yBACnBG,MAAOG,IAGPE,EAA0BhB,SAASC,MAAMC,QACzCC,cACAG,QAASC,OAAOC,KAAO,6BAGvBS,EAA+BjB,SAASU,WAAWR,QACnDE,IAAKG,OAAOC,KAAO,2BACnBG,MAAOK,IAGPE,EAAiBlB,SAASC,MAAMC,QAChCE,IAAK,MAGLe,EAAsBnB,SAASU,WAAWR,QAC1CE,IAAK,IACLO,MAAOO,EACPE,MAAO,WACH,GAAIC,GAAaC,KACbC,EAAeC,QACfC,EAAmBC,KAAKC,MAAMC,aAAaL,cAC3CM,EAAaC,OAAOC,KAAKN,EAO7B,OANAO,GAAEC,KAAKJ,EAAY,SAASK,GACxB,GAAIC,GAAOV,EAAiBS,EAC5BC,GAAKC,UAAYF,EACjBX,EAAac,KAAKF,KAEtBd,EAAWiB,MAAMf,GACVvB,SAASU,WAAW6B,UAAUnB,MAAMoB,KAAKlB,SAIpDmB,EAAkBzC,SAASC,MAAMC,QACjCC,cACAG,QAASC,OAAOC,KAAO,yBAGvBkC,EAAuB1C,SAASU,WAAWR,QAC3CE,IAAKG,OAAOC,KAAO,uBACnBG,MAAO8B,IAGPE,EAAqB3C,SAASC,MAAMC,QACpCC,cACAG,QAASC,OAAOC,KAAO,qCAGvBoC,EAA0B5C,SAASU,WAAWR,QAC9CE,IAAKG,OAAOC,KAAO,mCACnBG,MAAOgC,GAGX,QACIE,UAAW9C,EACX+C,gBAAiBrC,EACjBsC,SAAUnC,EACVoC,WAAYnC,EACZoC,cAAenC,EACfoC,mBAAoBnC,EACpBoC,gBAAiBnC,EACjBoC,qBAAsBnC,EACtBoC,UAAWlC,EACXmC,WAAYZ,EACZa,cAAeX"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"util.js","sources":["../../../src/mvc/toolshed/util.js"],"names":["define","searchShed","request","response","that","this","shed_url","base_url","Galaxy","root","$","get","term","tool_shed_url","data","result_list","shedParser","jsondata","results","hits","each","hit","record","label","repository","name","repo_owner_username","description","result","value","id","push","addToQueue","metadata","substr","length","key","repository_id","changeset_revision","queued_repos","Object","localStorage","repositories","JSON","parse","stringify","queueLength","hasOwnProperty","repo_queue","queue_length","keys"],"mappings":"AAAAA,UAAW,WACP,GAAIC,GAAa,SAASC,EAASC,GAC/B,GAAIC,GAAOC,KACPC,EAAWD,KAAKC,SAChBC,EAAWC,OAAOC,KAAO,sBAC7BC,GAAEC,IAAIJ,GAAWK,KAAMV,EAAQU,KAAMC,cAAeP,GAAW,SAASQ,GACpEC,YAAcX,EAAKY,WAAWF,GAC9BX,EAASY,gBAKbC,EAAa,SAASC,GACtB,GAAIC,MACAC,EAAOF,EAASE,IAOpB,OANAT,GAAEU,KAAKD,EAAM,SAASE,GAClB,GAAIC,GAASH,EAAKE,GACdE,EAAQD,EAAOE,WAAWC,KAAO,OAASH,EAAOE,WAAWE,oBAAsB,KAAOJ,EAAOE,WAAWG,WAC/GC,SAAUC,MAAOP,EAAOE,WAAWM,GAAIP,MAAOA,GAC9CL,EAAQa,KAAKH,UAEVV,GAGPc,EAAa,SAASC,GACmB,KAArCA,EAASpB,cAAcqB,OAAO,MAC9BD,EAASpB,cAAgBoB,EAASpB,cAAcqB,OAAO,EAAGD,EAASpB,cAAcsB,OAAS,GAE9F,IAAIC,GAAMH,EAASpB,cAAgB,IAAMoB,EAASI,cAAgB,IAAMJ,EAASK,mBAC7EC,EAAe,GAAIC,OACnBC,cAAaC,eACbH,EAAeI,KAAKC,MAAMH,aAAaC,eAE3CH,EAAaH,GAAOH,EACpBQ,aAAaC,aAAeC,KAAKE,UAAUN,IAG3CO,EAAc,WACd,MAAIL,cAAaM,eAAe,iBAC5BC,WAAaL,KAAKC,MAAMH,aAAaC,cACrCO,aAAeT,OAAOU,KAAKF,YAAYb,OAChCc,cAGA,EAIf,QAAQhD,WAAYA,EAAYe,WAAYA,EAAYgB,WAAYA,EAAYc,YAAaA"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"workflows-view.js","sources":["../../../src/mvc/toolshed/workflows-view.js"],"names":["define","toolshed_model","toolshed_util","View","Backbone","extend","el","defaults","initialize","that","this","model","WorkflowTools","listenTo","render","fetch","workflows_missing_tools","templateWorkflows","workflows","models","$el","html","title","queue","queueLength","$","css","bindEvents","on","tool_ids","attr","toolshed","api_url","Galaxy","root","params","get","data","repository_id","repository","id","new_route","replace","history","navigate","trigger","elem","tool_shed_url","changesets","Object","keys","metadata","current_changeset","current_metadata","addToQueue","remove","loadWorkflows","reDraw","options","empty","_","template","join","Workflows"],"mappings":"AAAAA,QAAQ,8BAA+B,qBAAsB,SAASC,EAAgBC,GAElF,GAAIC,GAAOC,SAASD,KAAKE,QAErBC,GAAI,UAEJC,cAEAC,WAAY,WACR,GAAIC,GAAOC,IACXA,MAAKC,MAAQ,GAAIV,GAAeW,cAChCF,KAAKG,SAASH,KAAKC,MAAO,OAAQD,KAAKI,QACvCJ,KAAKC,MAAMI,QACXN,EAAKK,UAGTA,OAAQ,WACJ,GAAIL,GAAOC,KACPM,EAA0BP,EAAKQ,kBAC/BC,EAAYT,EAAKE,MAAMQ,MAC3BV,GAAKW,IAAIC,KAAKL,GAAyBM,MAAO,0BAA2BJ,UAAWA,EAAWK,MAAOrB,EAAcsB,iBACpHC,EAAE,WAAWC,IAAI,WAAY,QAC7BjB,EAAKkB,cAGTA,WAAY,WACR,GAAIlB,GAAOC,IACXe,GAAE,iBAAiBG,GAAG,QAAS,WAC3B,GAAIC,GAAWJ,EAAEf,MAAMoB,KAAK,gBACxBC,EAAWN,EAAEf,MAAMoB,KAAK,aACxBE,EAAUC,OAAOC,KAAO,2BACxBC,GAAUN,SAAYA,EAC1BJ,GAAEW,IAAIJ,EAASG,EAAQ,SAASE,GAC5BC,cAAgBD,EAAKE,WAAWC,EAChC,IAAIC,GAAY,gBAAkBV,EAASW,QAAQ,KAAM,OAAOA,QAAQ,MAAO,OAAS,MAAQL,EAAKE,WAAWC,EAChHpC,UAASuC,QAAQC,SAASH,GAAYI,SAAS,EAAMH,SAAQ,QAGrEjB,EAAE,kBAAkBG,GAAG,QAAS,WAC5B,GAAIkB,GAAOrB,EAAEf,MACTmB,EAAWiB,EAAKhB,KAAK,gBACrBC,EAAWe,EAAKhB,KAAK,aACrBE,EAAUC,OAAOC,KAAO,2BACxBC,GAAUN,SAAYA,EAC1BJ,GAAEW,IAAIJ,EAASG,EAAQ,SAASE,GAC5BC,cAAgBD,EAAKE,WAAWC,GAChCL,GAAUY,cAAehB,EAAUO,cAAeA,eAClDb,EAAEW,IAAIJ,EAASG,EAAQ,SAASE,GAC5B,GAAIW,GAAaC,OAAOC,KAAKb,EAAKE,WAAWY,UACzCC,EAAoBJ,EAAW,GAC/BK,EAAmBhB,EAAKE,WAAWY,SAASC,EAChDC,GAAiBN,cAAgBhB,EACjC7B,EAAcoD,WAAWD,GACzBP,EAAKS,eAIjB9B,EAAE,kBAAkBG,GAAG,QAASnB,EAAK+C,gBAGzCC,OAAQ,SAASC,GACbhD,KAAKU,IAAIuC,QACTjD,KAAKF,WAAWkD,IAGpBzC,kBAAmB2C,EAAEC,UACjB,yEACI,6DACA,wJACJ,SACA,0BACI,2HACJ,WACA,4GACI,iCACI,OACI,wCACA,uCACA,mCACA,mCACA,oCACA,sCACJ,QACJ,WACA,UACI,+CACI,OACI,0BACI,8BACI,2DACI,8CACJ,YACJ,QACJ,QACA,0BACI,8BACI,uDACI,8CACJ,YACJ,QACJ,QACA,0DACA,gEACA,2DACA,0BACI,8BACI,8BACI,kRACR,QACJ,QACJ,QACJ,YACJ,QACJ,UACEC,KAAK,MAGf,QACIC,UAAW5D"}
|
||||
@@ -0,0 +1,2 @@
|
||||
define(["mvc/toolshed/shed-list-view","mvc/toolshed/categories-view","mvc/toolshed/repositories-view","mvc/toolshed/repository-view","mvc/toolshed/repository-queue-view","mvc/toolshed/repo-status-view","mvc/toolshed/workflows-view"],function(a,b,c,d,e,f,g){var h=Backbone.Router.extend({initialize:function(){this.routesHit=0,Backbone.history.on("route",function(){this.routesHit++},this),this.bind("route",this.trackPageview)},routes:{"":"toolsheds",sheds:"toolsheds",queue:"queue",workflows:"workflows","status/r/:repositories":"status",status:"status","categories/s/:tool_shed":"categories","category/s/:tool_shed/c/:cateory_id":"repositories","repository/s/:tool_shed/r/:repository_id":"repository"},back:function(){this.routesHit>1?window.history.back():this.navigate("#",{trigger:!0,replace:!0})}}),i=Backbone.View.extend({app_config:{known_views:["toolsheds","queue","status","categories","repositories","repoository"]},initialize:function(){Galaxy.admintoolshedapp=this,this.admin_toolshed_router=new h,this.admin_toolshed_router.on("route:queue",function(){Galaxy.admintoolshedapp.adminRepoQueueView?Galaxy.admintoolshedapp.adminRepoQueueView.reDraw():Galaxy.admintoolshedapp.adminRepoQueueView=new e.RepoQueueView}),this.admin_toolshed_router.on("route:toolsheds",function(){Galaxy.admintoolshedapp.adminShedListView?Galaxy.admintoolshedapp.adminShedListView.reDraw():Galaxy.admintoolshedapp.adminShedListView=new a.ShedListView}),this.admin_toolshed_router.on("route:categories",function(a){Galaxy.admintoolshedapp.adminShedCategoriesView?Galaxy.admintoolshedapp.adminShedCategoriesView.reDraw({tool_shed:a.replace(/\//g,"%2f")}):Galaxy.admintoolshedapp.adminShedCategoriesView=new b.CategoryView({tool_shed:a.replace(/\//g,"%2f")})}),this.admin_toolshed_router.on("route:repositories",function(a,b){Galaxy.admintoolshedapp.adminShedCategoryView?Galaxy.admintoolshedapp.adminShedCategoryView.reDraw({tool_shed:a.replace(/\//g,"%2f"),category_id:b}):Galaxy.admintoolshedapp.adminShedCategoryView=new c.Category({tool_shed:a.replace(/\//g,"%2f"),category_id:b})}),this.admin_toolshed_router.on("route:repository",function(a,b){Galaxy.admintoolshedapp.adminRepositoryView?Galaxy.admintoolshedapp.adminRepositoryView.reDraw({tool_shed:a.replace(/\//g,"%2f"),repository_id:b}):Galaxy.admintoolshedapp.adminRepositoryView=new d.RepoDetails({tool_shed:a.replace(/\//g,"%2f"),repository_id:b})}),this.admin_toolshed_router.on("route:status",function(a){Galaxy.admintoolshedapp.adminRepoStatusView?Galaxy.admintoolshedapp.adminRepoStatusView.reDraw({repositories:a.split("|")}):Galaxy.admintoolshedapp.adminRepoStatusView=new f.RepoStatus({repositories:a.split("|")})}),this.admin_toolshed_router.on("route:workflows",function(){Galaxy.admintoolshedapp.adminWorkflowsView?Galaxy.admintoolshedapp.adminWorkflowsView.reDraw():Galaxy.admintoolshedapp.adminWorkflowsView=new g.Workflows}),Backbone.history.start({pushState:!1})}});return{GalaxyApp:i}});
|
||||
//# sourceMappingURL=../maps/admin.toolshed.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
define(["mvc/toolshed/toolshed-model","mvc/toolshed/util"],function(a,b){var c=Backbone.View.extend({el:"#center",defaults:{tool_shed:"https://toolshed.g2.bx.psu.edu/"},initialize:function(b){var c=b.tool_shed.replace(/\//g,"%2f");this.options=_.defaults(this.options||b,this.defaults),this.model=new a.Categories,this.listenTo(this.model,"sync",this.render),this.model.url=this.model.url+"?tool_shed_url="+this.options.tool_shed,this.model.tool_shed=c,this.model.fetch()},render:function(a){this.options=_.extend(this.options,a),this.options.categories=this.model.models,this.options.queue=b.queueLength();var c=this.templateCategoryList;this.$el.html(c(this.options)),$("#center").css("overflow","auto"),this.bindEvents()},bindEvents:function(){var a=this;require(["libs/jquery/jquery-ui"],function(){$("#search_box").autocomplete({source:function(c,d){var e=a.model.tool_shed.replace(/%2f/g,"/"),f=Galaxy.root+"api/tool_shed/search",g={term:c.term,tool_shed_url:e};$.post(f,g,function(a){console.log(a),result_list=b.shedParser(a),d(result_list)})},minLength:3,select:function(b,c){var d=c.item.value,e=(Galaxy.root+"api/tool_shed/repository",{tool_shed_url:a.model.tool_shed,tsr_id:d},"repository/s/"+a.model.tool_shed+"/r/"+d);Backbone.history.navigate(e,{trigger:!0,replace:!0})}})})},reDraw:function(a){this.$el.empty(),this.model.url=this.model.url+"?tool_shed_url="+this.options.tool_shed,this.initialize(a)},templateCategoryList:_.template(['<style type="text/css">',".ui-autocomplete { background-color: #fff; }","li.ui-menu-item { list-style-type: none; }","</style>",'<div class="unified-panel-header" id="panel_header" unselectable="on">','<div class="unified-panel-header-inner" style="layout: inline;">Categories in <%= tool_shed.replace(/%2f/g, "/") %></div>','<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',"</div>",'<div class="unified-panel-body" id="list_categories">','<div id="standard-search" style="height: 2em; margin: 1em;">','<span class="ui-widget" >','<input class="search-box-input" id="search_box" data-shedurl="<%= tool_shed.replace(/%2f/g, "/") %>" name="search" placeholder="Search repositories by name or id" size="60" type="text" />',"</span>","</div>",'<div style="clear: both; margin-top: 1em;">','<table class="grid">','<thead id="grid-table-header">',"<tr>","<th>Name</th>","<th>Description</th>","<th>Repositories</th>","</tr>","</thead>","<% _.each(categories, function(category) { %>","<tr>","<td>",'<a href="#/category/s/<%= tool_shed %>/c/<%= category.get("id") %>"><%= category.get("name") %></a>',"</td>",'<td><%= category.get("description") %></td>','<td><%= category.get("repositories") %></td>',"</tr>","<% }); %>","</table>","</div>","</div>"].join(""))});return{CategoryView:c}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/categories-view.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
define(["toolshed/repository-queue-model"],function(){var a=Backbone.View.extend({el:"#category_list",render:function(a){this.options=_.extend(this.options,a);var b=this.templateRepoQueue();this.$el.html(b({repository:this.model}))},templateRepoQueueTab:_.template(['<li class="nav-tab" role="presentation" id="repository_installation_queue">','<a href="#repository_queue" data-toggle="tab">Repository Installation Queue</a>',"</li>"].join("")),templateRepoQueue:_.template(['<div class="tab-pane" id="repository_queue">','<table id="queued_repositories" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">','<thead id="grid-table-header">',"<tr>",'<th class="datasetRow"><input class="btn btn-primary" type="submit" id="install_all" name="install_all" value="Install all" /></th>','<th class="datasetRow"><input class="btn btn-primary" type="submit" id="clear_queue" name="clear_queue" value="Clear queue" /></th>','<th class="datasetRow">ToolShed</th>','<th class="datasetRow">Name</th>','<th class="datasetRow">Owner</th>','<th class="datasetRow">Revision</th>',"</tr>","</thead>","<tbody>","<% _.each(repositories, function(repository) { %>",'<tr id="queued_repository_<%= repository.id %>">','<td class="datasetRow">','<input class="btn btn-primary install_one" data-repokey="<%= repository.queue_key %>" type="submit" id="install_repository_<%= repository.id %>" name="install_repository" value="Install now" />',"</td>",'<td class="datasetRow">','<input class="btn btn-primary remove_one" data-repokey="<%= repository.queue_key %>" type="submit" id="unqueue_repository_<%= repository.id %>" name="unqueue_repository" value="Remove from queue" />',"</td>",'<td class="datasetRow"><%= repository.tool_shed_url %></td>','<td class="datasetRow"><%= repository.name %></td>','<td class="datasetRow"><%= repository.owner %></td>','<td class="datasetRow"><%= repository.changeset %></td>',"</tr>","<% }); %>","</tbody>","</table>",'<input type="button" class="btn btn-primary" id="from_workflow" value="Add from workflow" />',"</div>"].join("")),workflows_missing_tools:_.template(['<table id="workflows_missing_tools" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">','<thead id="grid-table-header">',"<tr>",'<th class="datasetRow">Workflows</th>','<th class="datasetRow">Tool IDs</th>','<th class="datasetRow">Shed</th>','<th class="datasetRow">Name</th>','<th class="datasetRow">Owner</th>','<th class="datasetRow">Actions</th>',"</tr>","</thead>","<tbody>","<% _.each(Object.keys(workflows), function(workflow_key) { %>",'<% var workflow_details = workflow_key.split("/"); %>',"<% var workflow = workflows[workflow_key]; %>","<tr>",'<td class="datasetRow">','<ul class="workflow_names">',"<% _.each(workflow.workflows.sort(), function(wf) { %>",'<li class="workflow_names"><%= wf %></li>',"<% }); %>","</ul>","</td>",'<td class="datasetRow">','<ul class="workflow_tools">',"<% _.each(workflow.tools.sort(), function(tool) { %>",'<li class="workflow_tools"><%= tool %></li>',"<% }); %>","</ul>","</td>",'<td class="datasetRow"><%= workflow_details[0] %></td>','<td class="datasetRow"><%= workflow_details[2] %></td>','<td class="datasetRow"><%= workflow_details[1] %></td>','<td class="datasetRow">','<ul class="workflow_tools">','<li class="workflow_tools"><input type="button" class="show_wf_repo btn btn-primary" data-shed="<%= workflow_details[0] %>" data-owner="<%= workflow_details[1] %>" data-repo="<%= workflow_details[2] %>" data-toolids="<%= workflow.tools.join(",") %>" value="Preview" /></li>','<li><input type="button" class="queue_wf_repo btn btn-primary" data-shed="<%= workflow_details[0] %>" data-owner="<%= workflow_details[1] %>" data-repo="<%= workflow_details[2] %>" data-toolids="<%= workflow.tools.join(",") %>" value="Add to queue" /></li>',"</ul>","</td>","</tr>","<% }); %>","</ul>","</div>"].join(""))});return{RepoQueue:a}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/repo-queue-view.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
define(["mvc/toolshed/toolshed-model","mvc/toolshed/util"],function(a,b){var c=Backbone.View.extend({el:"#center",initialize:function(b){this.options=_.defaults(this.options||[{}],b,this.defaults),this.model=new a.RepoStatus,this.listenTo(this.model,"sync",this.render),this.model.url+="?repositories="+this.options.repositories.join("|"),this.model.fetch(),this.timer=setInterval(function(a){var b=["installed","error"],c=!0;_.some(a.model.models,function(a){return repo_id=a.get("id"),repo_status=a.get("status").toLowerCase(),-1===b.indexOf(repo_status)?(c=!1,!0):void 0}),c?clearInterval(a.timer):a.model.fetch()},2e3,this)},close:function(){clearInterval(this.timer)},render:function(a){this.options=_.extend(this.options,a);var c=this.templateRepoStatus;this.$el.html(c({title:"Repository Status",repositories:this.model.models,queue:b.queueLength()})),$("#center").css("overflow","auto"),this.bindEvents()},bindEvents:function(){},reDraw:function(a){this.$el.empty(),this.initialize(a)},templateRepoStatus:_.template(['<div class="unified-panel-header" id="panel_header" unselectable="on">','<div class="unified-panel-header-inner"><%= title %></div>','<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',"</div>",'<style type="text/css">',".state-color-new,",".state-color-deactivated,",".state-color-uninstalled { border-color:#bfbfbf; background:#eee }",".state-color-cloning,",".state-color-setting-tool-versions,",".state-color-installing-repository-dependencies,",".state-color-installing-tool-dependencies,",".state-color-loading-proprietary-datatypes { border-color:#AAAA66; background:#FFFFCC }",".state-color-installed { border-color:#20b520; background:#b0f1b0 }",".state-color-error { border-color:#dd1b15; background:#f9c7c5 }","</style>",'<table id="grid-table" class="grid">','<thead id="grid-table-header">',"<tr>",'<th id="null-header">Name<span class="sort-arrow"></span></th>','<th id="null-header">Description<span class="sort-arrow"></span></th>','<th id="null-header">Owner<span class="sort-arrow"></span></th>','<th id="null-header">Revision<span class="sort-arrow"></span></th>','<th id="null-header">Installation Status<span class="sort-arrow"></span></th>',"</tr>","</thead>",'<tbody id="grid-table-body">',"<% _.each(repositories, function(repository) { %>","<tr>","<td>",'<div id="" class="">','<label id="repo-name-<%= repository.get("id") %>" for="<%= repository.get("id") %>">','<%= repository.get("name") %>',"</label>","</div>","</td>","<td>",'<div id="" class="">','<label id="repo-desc-<%= repository.get("id") %>" for="<%= repository.get("id") %>">','<%= repository.get("description") %>',"</label>","</div>","</td>","<td>",'<div id="" class="">','<label id="repo-user-<%= repository.get("id") %>" for="<%= repository.get("id") %>">','<%= repository.get("owner") %>',"</label>","</div>","</td>","<td>",'<div id="" class="">','<label id="repo-changeset-<%= repository.get("id") %>" for="<%= repository.get("id") %>">','<%= repository.get("changeset_revision") %>',"</label>","</div>","</td>","<td>",'<div id="" class="">','<label id="RepositoryStatus-<%= repository.get("id") %>" for="<%= repository.get("id") %>">','<div class="repo-status count-box state-color-<%= repository.get("status").toLowerCase().replace(/ /g, "-") %>" id="RepositoryStatus-<%= repository.get("id") %>">','<%= repository.get("status") %>',"</div>","</label>","</div>","</td>","</tr>","<% }); %>","</tbody>",'<tfoot id="grid-table-footer"></tfoot>',"</table>"].join(""))});return{RepoStatus:c}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/repo-status-view.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
define(["mvc/toolshed/toolshed-model","mvc/toolshed/util"],function(a,b){var c=Backbone.View.extend({el:"#center",initialize:function(b){this.model=new a.CategoryCollection,this.listenTo(this.model,"sync",this.render);var c=b.tool_shed.replace(/\//g,"%2f");this.model.url+="?tool_shed_url="+c+"&category_id="+b.category_id,this.model.tool_shed=c,this.model.category=b.category_id,this.model.fetch()},render:function(a){this.options=_.extend(this.options,a);var c=this.templateCategoryContents;this.$el.html(c({category:this.model.models[0],tool_shed:this.model.tool_shed,queue:b.queueLength()})),$("#center").css("overflow","auto"),this.bindEvents()},bindEvents:function(){var a=this;require(["libs/jquery/jquery-ui"],function(){$("#search_box").autocomplete({source:function(c,d){var e=a.model.tool_shed.replace(/%2f/g,"/"),f=Galaxy.root+"api/tool_shed/search",g={term:c.term,tool_shed_url:e};$.post(f,g,function(a){result_list=b.shedParser(a),d(result_list)})},minLength:3,select:function(b,c){var d=c.item.value,e="repository/s/"+a.model.tool_shed+"/r/"+d;Backbone.history.navigate(e,{trigger:!0,replace:!0})}})})},reDraw:function(a){this.$el.empty(),this.initialize(a)},templateCategoryContents:_.template(['<style type="text/css">',".ui-autocomplete { background-color: #fff; }","li.ui-menu-item { list-style-type: none; }","</style>",'<div class="unified-panel-header" id="panel_header" unselectable="on">','<div class="unified-panel-header-inner">Repositories in <%= category.get("name") %></div>','<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',"</div>",'<div class="unified-panel-body" id="list_repositories">','<div id="standard-search" style="height: 2em; margin: 1em;">','<span class="ui-widget" >','<input class="search-box-input" id="search_box" name="search" data-shedurl="<%= tool_shed.replace(/%2f/g, "/") %>" placeholder="Search repositories by name or id" size="60" type="text" />',"</span>","</div>",'<div style="clear: both; margin-top: 1em;">','<table class="grid">','<thead id="grid-table-header">',"<tr>",'<th style="width: 10%;">Owner</th>','<th style="width: 15%;">Name</th>',"<th>Synopsis</th>",'<th style="width: 10%;">Type</th>',"</tr>","</thead>",'<% _.each(category.get("repositories"), function(repository) { %>',"<tr>","<td><%= repository.owner %></td>","<td>",'<div style="float: left; margin-left: 1px;" class="menubutton split">','<a href="#/repository/s/<%= tool_shed %>/r/<%= repository.id %>"><%= repository.name %></a>',"</div>","</td>","<td><%= repository.description %></td>","<td><%= repository.type %></td>","</tr>","<% }); %>","</table>","</div>","</div>"].join(""))});return{Category:c}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/repositories-view.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
define(["mvc/toolshed/toolshed-model","mvc/toolshed/util"],function(a,b){var c=Backbone.View.extend({el:"#center",defaults:[{}],initialize:function(){var b=this;this.model=new a.RepoQueue,this.listenTo(this.model,"sync",this.render),this.model.fetch(),b.render()},render:function(){var a=this,c=a.templateRepoQueue,d=a.model.models;a.$el.html(c({title:"Repository Installation Queue",repositories:d,queue:b.queueLength()})),$("#center").css("overflow","auto"),a.bindEvents()},bindEvents:function(){var a=this;$(".install_one").on("click",function(){var b=a.loadFromQueue($(this).attr("data-repokey"));a.installFromQueue(b,$(this).attr("data-repokey"))}),$(".remove_one").on("click",function(){var a=$(this).attr("data-repokey"),b=JSON.parse(localStorage.repositories);if(b.hasOwnProperty(a)){var c=b[a].repository.id;delete b[a],$("#queued_repository_"+c).remove()}localStorage.repositories=JSON.stringify(b)}),$("#clear_queue").on("click",function(){localStorage.repositories="{}"}),$("#from_workflow").on("click",function(){Backbone.history.navigate("workflows",{trigger:!0,replace:!0})})},installFromQueue:function(a,c){var d=Object();d.install_tool_dependencies=a.install_tool_dependencies,d.install_repository_dependencies=a.install_repository_dependencies,d.install_resolver_dependencies=a.install_resolver_dependencies,d.tool_panel_section=a.tool_panel_section,d.shed_tool_conf=a.shed_tool_conf,d.repositories=JSON.stringify([[a.repository.id,a.changeset_revision]]),d.tool_shed_repository_ids=JSON.stringify([a.repository.id]),d.tool_shed_url=c.split("|")[0],d.changeset=a.changeset_revision;var e=Galaxy.root+"api/tool_shed_repositories/install?async=True";$("#queued_repository_"+a.repository.id).remove(),localStorage.repositories&&(void 0===c&&(c=b.queueKey(a)),repository_queue=JSON.parse(localStorage.repositories),repository_queue.hasOwnProperty(c)&&(delete repository_queue[c],localStorage.repositories=JSON.stringify(repository_queue))),$.post(e,d,function(a){var b=JSON.parse(a),c=b.repositories,d="status/r/"+c.join("|");$.post(Galaxy.root+"admin_toolshed/manage_repositories",b,function(){console.log("Initializing repository installation succeeded")}),Backbone.history.navigate(d,{trigger:!0,replace:!0})})},loadFromQueue:function(a){return repository_queue=JSON.parse(localStorage.repositories),repository_queue.hasOwnProperty(a)?repository_queue[a]:void 0},reDraw:function(a){this.$el.empty(),this.initialize(a),this.model.fetch(),this.render(a)},templateRepoQueue:_.template(['<div class="unified-panel-header" id="panel_header" unselectable="on">','<div class="unified-panel-header-inner"><%= title %></div>','<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',"</div>",'<div class="tab-pane" id="panel_header" id="repository_queue">','<table id="queued_repositories" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">','<thead id="grid-table-header">',"<tr>",'<th class="datasetRow">Name</th>','<th class="datasetRow">Owner</th>','<th class="datasetRow">Revision</th>','<th class="datasetRow">ToolShed</th>','<th class="datasetRow">Install</th>','<th class="datasetRow"><input class="btn btn-primary" type="submit" id="clear_queue" name="clear_queue" value="Clear queue" /></th>',"</tr>","</thead>","<tbody>","<% _.each(repositories, function(repository) { %>",'<tr id="queued_repository_<%= repository.get("id") %>">','<td class="datasetRow"><%= repository.get("repository").name %></td>','<td class="datasetRow"><%= repository.get("repository").owner %></td>','<td class="datasetRow"><%= repository.get("changeset_revision") %></td>','<td class="datasetRow"><%= repository.get("tool_shed_url") %></td>','<td class="datasetRow">','<input class="btn btn-primary install_one" data-repokey="<%= repository.get("queue_key") %>" type="submit" id="install_repository_<%= repository.get("id") %>" name="install_repository" value="Install now" />',"</td>",'<td class="datasetRow">','<input class="btn btn-primary remove_one" data-repokey="<%= repository.get("queue_key") %>" type="submit" id="unqueue_repository_<%= repository.get("id") %>" name="unqueue_repository" value="Remove from queue" />',"</td>","</tr>","<% }); %>","</tbody>","</table>",'<input type="button" class="btn btn-primary" id="from_workflow" value="Add from workflow" />',"</div>"].join(""))});return{RepoQueueView:c}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/repository-queue-view.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,23 @@
|
||||
define([ "mvc/toolshed/toolshed-model" ], function(toolshed_model) {
|
||||
var ToolShedCategories = Backbone.View.extend({
|
||||
el: "#center",
|
||||
initialize: function(shed) {
|
||||
console.log(arguments);
|
||||
this.model = new toolshed_model.Categories(), this.listenTo(this.model, "sync", this.render),
|
||||
this.model.url += "?tool_shed_url=" + shed, this.model.tool_shed = shed.replace(/\//g, "%2f"),
|
||||
this.model.fetch();
|
||||
},
|
||||
render: function(options) {
|
||||
console.log("render cat"), this.options = _.extend(this.options, options);
|
||||
var category_list_template = this.templateCategoryList;
|
||||
console.log(this.model), this.$el.html(category_list_template({
|
||||
categories: this.model.models,
|
||||
tool_shed: this.model.tool_shed
|
||||
})), $("#center").css("overflow", "auto");
|
||||
},
|
||||
templateCategoryList: _.template([ "<% console.log(arguments); %>", '<div class="tab-pane" id="list_categories" style="overflow: scroll;">', '<div id="standard-search" style="height: 2em; margin: 1em;">', '<span class="ui-widget" >', '<input class="search-box-input" id="repository_search" name="search" placeholder="Search repositories by name or id" size="60" type="text" />', "</span>", "</div>", '<div style="clear: both; margin-top: 1em;">', "<h2>Repositories by Category</h2>", '<table class="grid">', '<thead id="grid-table-header">', "<tr>", "<th>Name</th>", "<th>Description</th>", "<th>Repositories</th>", "</tr>", "</thead>", "<% _.each(categories, function(category) { %>", "<tr>", "<td>", '<a href="#/category/s/<%= tool_shed %>/c/<%= category.get("id") %>"><%= category.get("name") %></a>', "</td>", '<td><%= category.get("description") %></td>', '<td><%= category.get("repositories") %></td>', "</tr>", "<% }); %>", "</table>", "</div>", "</div>" ].join(""))
|
||||
});
|
||||
return {
|
||||
CategoryView: ToolShedCategories
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,2 @@
|
||||
define(["mvc/toolshed/toolshed-model","mvc/toolshed/util"],function(a,b){var c=Backbone.View.extend({defaults:{tool_sheds:[{url:"https://toolshed.g2.bx.psu.edu/",name:"Galaxy Main Tool Shed"}]},initialize:function(){this.options=_.defaults(this.options||{},this.defaults),this.model=new a.ShedsCollection,this.listenTo(this.model,"sync",this.render),this.model.fetch()},el:"#center",render:function(a){this.options=_.defaults(this.options||{},a,this.defaults);var c=this.templateToolshedList;this.$el.html(c({title:"Configured Galaxy Tool Sheds",tool_sheds:this.model.models,queue:b.queueLength()}))},reDraw:function(a){this.$el.empty(),this.render(a)},templateToolshedList:_.template(['<div class="unified-panel-header" id="panel_header" unselectable="on">','<div class="unified-panel-header-inner"><%= title %></div>','<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',"</div>",'<div class="unified-panel-body" id="list_toolsheds">','<div class="form-row">','<table class="grid">',"<% _.each(tool_sheds, function(shed) { %>",'<tr class="libraryTitle">',"<td>",'<div style="float: left; margin-left: 1px;" class="menubutton split">','<a class="view-info shed-selector" href="#/categories/s/<%= shed.get("url") %>"><%= shed.get("name") %></a>',"</div>","</td>","</tr>","<% }); %>","</table>","</div>",'<div style="clear: both"></div>',"</div>"].join(""))});return{ShedListView:c}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/shed-list-view.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,23 @@
|
||||
define([ "mvc/toolshed/toolshed-model" ], function(toolshed_model) {
|
||||
var ToolShedCategoryContentsView = Backbone.View.extend({
|
||||
el: "#center",
|
||||
initialize: function(shed, category) {
|
||||
console.log(arguments);
|
||||
this.model = new toolshed_model.CategoryCollection(), this.listenTo(this.model, "sync", this.render),
|
||||
this.model.url += "?tool_shed_url=" + shed + "&category_id=" + category, this.model.tool_shed = shed,
|
||||
this.model.category = category, this.model.fetch();
|
||||
},
|
||||
render: function(options) {
|
||||
console.log("render cat"), this.options = _.extend(this.options, options);
|
||||
var category_contents_template = this.templateCategoryContents;
|
||||
console.log(this.model.models), this.$el.html(category_contents_template({
|
||||
category: this.model.models[0],
|
||||
tool_shed: this.model.tool_shed
|
||||
})), $("#center").css("overflow", "auto");
|
||||
},
|
||||
templateCategoryContents: _.template([ '<div class="tab-pane" id="list_repositories">', '<div id="standard-search" style="height: 2em; margin: 1em;">', '<span class="ui-widget" >', '<input class="search-box-input" id="category_search" name="search" placeholder="Search repositories by name or id" size="60" type="text" />', "</span>", "</div>", '<div style="clear: both; margin-top: 1em;">', '<h2>Repositories in <%= category.get("name") %></h2>', '<table class="grid">', '<thead id="grid-table-header">', "<tr>", '<th style="width: 10%;">Owner</th>', '<th style="width: 15%;">Name</th>', "<th>Synopsis</th>", '<th style="width: 10%;">Type</th>', "</tr>", "</thead>", '<% _.each(category.get("repositories"), function(repository) { %>', "<tr>", "<td><%= repository.owner %></td>", "<td>", '<a href="#/repository/s/<%= tool_shed %>/r/<%= repository.id %>"><%= repository.name %></a>', "</td>", "<td><%= repository.description %></td>", "<td><%= repository.type %></td>", "</tr>", "<% }); %>", "</table>", "</div>", "</div>" ].join(""))
|
||||
});
|
||||
return {
|
||||
Category: ToolShedCategoryContentsView
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,27 @@
|
||||
define([ "mvc/toolshed/toolshed-model" ], function(toolshed_model) {
|
||||
var View = Backbone.View.extend({
|
||||
defaults: {
|
||||
tool_sheds: [ {
|
||||
url: "https://toolshed.g2.bx.psu.edu/",
|
||||
name: "Galaxy Main Tool Shed"
|
||||
} ]
|
||||
},
|
||||
initialize: function() {
|
||||
console.log("init");
|
||||
this.model = new toolshed_model.ShedsCollection(), this.listenTo(this.model, "sync", this.render),
|
||||
this.model.fetch();
|
||||
},
|
||||
el: "#center",
|
||||
render: function(options) {
|
||||
this.options = _.defaults(this.options || {}, options, this.defaults);
|
||||
var toolshed_list_template = this.templateToolshedList;
|
||||
this.$el.html(toolshed_list_template({
|
||||
tool_sheds: this.model.models
|
||||
}));
|
||||
},
|
||||
templateToolshedList: _.template([ '<div class="tab-pane" id="list_toolsheds">', '<div class="toolFormTitle">Accessible Galaxy tool sheds</div>', '<div class="toolFormBody">', '<div class="form-row">', '<table class="grid">', "<% _.each(tool_sheds, function(shed) { %>", '<tr class="libraryTitle">', "<td>", '<div style="float: left; margin-left: 1px;" class="menubutton split">', '<a class="view-info shed-selector" href="#/categories/s/<%= shed.get("url") %>"><%= shed.get("name") %></a>', "</div>", "</td>", "</tr>", "<% }); %>", "</table>", "</div>", '<div style="clear: both"></div>', "</div>", "</div>" ].join(""))
|
||||
});
|
||||
return {
|
||||
ShedListView: View
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,2 @@
|
||||
define([],function(){var a=Backbone.Model.extend({defaults:{url:"https://toolshed.g2.bx.psu.edu/",name:"Galaxy Main Tool Shed"},urlRoot:Galaxy.root+"api/tool_shed"}),b=Backbone.Collection.extend({url:Galaxy.root+"api/tool_shed",model:a}),c=Backbone.Model.extend({defaults:[{}],urlRoot:Galaxy.root+"api/tool_shed/contents"}),d=Backbone.Collection.extend({url:Galaxy.root+"api/tool_shed/contents",model:c}),e=Backbone.Model.extend({defaults:[{}],urlRoot:Galaxy.root+"api/tool_shed/category"}),f=Backbone.Collection.extend({url:Galaxy.root+"api/tool_shed/category",model:e}),g=Backbone.Model.extend({defaults:[{}],urlRoot:Galaxy.root+"api/tool_shed/repository"}),h=Backbone.Collection.extend({url:Galaxy.root+"api/tool_shed/repository",model:g}),i=Backbone.Model.extend({url:"#"}),j=Backbone.Collection.extend({url:"#",model:i,fetch:function(){var a=this,b=Array(),c=JSON.parse(localStorage.repositories),d=Object.keys(c);return _.each(d,function(a){var d=c[a];d.queue_key=a,b.push(d)}),a.reset(b),Backbone.Collection.prototype.fetch.call(this)}}),k=Backbone.Model.extend({defaults:[{}],urlRoot:Galaxy.root+"api/tool_shed/status"}),l=Backbone.Collection.extend({url:Galaxy.root+"api/tool_shed/status",model:k}),m=Backbone.Model.extend({defaults:[{}],urlRoot:Galaxy.root+"api/workflows?missing_tools=True"}),n=Backbone.Collection.extend({url:Galaxy.root+"api/workflows?missing_tools=True",model:m});return{ShedModel:a,ShedsCollection:b,Category:c,Categories:d,CategoryModel:e,CategoryCollection:f,RepositoryModel:g,RepositoryCollection:h,RepoQueue:j,RepoStatus:l,WorkflowTools:n}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/toolshed-model.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
define([],function(){var a=function(a,b){var c=this,d=this.shed_url,e=Galaxy.root+"api/tool_shed/search";$.get(e,{term:a.term,tool_shed_url:d},function(a){result_list=c.shedParser(a),b(result_list)})},b=function(a){var b=[],c=a.hits;return $.each(c,function(a){var d=c[a],e=d.repository.name+" by "+d.repository.repo_owner_username+": "+d.repository.description;result={value:d.repository.id,label:e},b.push(result)}),b},c=function(a){"/"==a.tool_shed_url.substr(-1)&&(a.tool_shed_url=a.tool_shed_url.substr(0,a.tool_shed_url.length-1));var b=a.tool_shed_url+"|"+a.repository_id+"|"+a.changeset_revision,c=new Object;localStorage.repositories&&(c=JSON.parse(localStorage.repositories)),c[b]=a,localStorage.repositories=JSON.stringify(c)},d=function(){return localStorage.hasOwnProperty("repositories")?(repo_queue=JSON.parse(localStorage.repositories),queue_length=Object.keys(repo_queue).length,queue_length):0};return{searchShed:a,shedParser:b,addToQueue:c,queueLength:d}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/util.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
define(["mvc/toolshed/toolshed-model","mvc/toolshed/util"],function(a,b){var c=Backbone.View.extend({el:"#center",defaults:[{}],initialize:function(){var b=this;this.model=new a.WorkflowTools,this.listenTo(this.model,"sync",this.render),this.model.fetch(),b.render()},render:function(){var a=this,c=a.templateWorkflows,d=a.model.models;a.$el.html(c({title:"Workflows Missing Tools",workflows:d,queue:b.queueLength()})),$("#center").css("overflow","auto"),a.bindEvents()},bindEvents:function(){var a=this;$(".show_wf_repo").on("click",function(){var a=$(this).attr("data-toolids"),b=$(this).attr("data-shed"),c=Galaxy.root+"api/tool_shed/repository",d={tool_ids:a};$.get(c,d,function(a){repository_id=a.repository.id;var c="repository/s/"+b.replace(/:/g,"%3a").replace(/\//g,"%2f")+"/r/"+a.repository.id;Backbone.history.navigate(c,{trigger:!0,replace:!0})})}),$(".queue_wf_repo").on("click",function(){var a=$(this),c=a.attr("data-toolids"),d=a.attr("data-shed"),e=Galaxy.root+"api/tool_shed/repository",f={tool_ids:c};$.get(e,f,function(c){repository_id=c.repository.id,f={tool_shed_url:d,repository_id:repository_id},$.get(e,f,function(c){var e=Object.keys(c.repository.metadata),f=e[0],g=c.repository.metadata[f];g.tool_shed_url=d,b.addToQueue(g),a.remove()})})}),$("#from_workflow").on("click",a.loadWorkflows)},reDraw:function(a){this.$el.empty(),this.initialize(a)},templateWorkflows:_.template(['<div class="unified-panel-header" id="panel_header" unselectable="on">','<div class="unified-panel-header-inner"><%= title %></div>','<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',"</div>",'<style type="text/css">',".workflow_names, .workflow_tools { list-style-type: none; } ul.workflow_tools, ul.workflow_names { padding-left: 0px; }","</style>",'<table id="workflows_missing_tools" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">','<thead id="grid-table-header">',"<tr>",'<th class="datasetRow">Workflows</th>','<th class="datasetRow">Tool IDs</th>','<th class="datasetRow">Shed</th>','<th class="datasetRow">Name</th>','<th class="datasetRow">Owner</th>','<th class="datasetRow">Actions</th>',"</tr>","</thead>","<tbody>","<% _.each(workflows, function(workflow) { %>","<tr>",'<td class="datasetRow">','<ul class="workflow_names">','<% _.each(workflow.get("workflows"), function(name) { %>','<li class="workflow_names"><%= name %></li>',"<% }); %>","</ul>","</td>",'<td class="datasetRow">','<ul class="workflow_tools">','<% _.each(workflow.get("tools"), function(tool) { %>','<li class="workflow_tools"><%= tool %></li>',"<% }); %>","</ul>","</td>",'<td class="datasetRow"><%= workflow.get("shed") %></td>','<td class="datasetRow"><%= workflow.get("repository") %></td>','<td class="datasetRow"><%= workflow.get("owner") %></td>','<td class="datasetRow">','<ul class="workflow_tools">','<li class="workflow_tools">','<input type="button" class="show_wf_repo btn btn-primary" data-shed="<%= workflow.get("shed") %>" data-owner="<%= workflow.get("owner") %>" data-repo="<%= workflow.get("repository") %>" data-toolids="<%= workflow.get("tools").join(",") %>" value="Show Repository" /></li>',"</ul>","</td>","</tr>","<% }); %>","</ul>","</div>"].join(""))});return{Workflows:c}});
|
||||
//# sourceMappingURL=../../../maps/mvc/toolshed/workflows-view.js.map
|
||||
@@ -1,918 +0,0 @@
|
||||
<%inherit file="/base.mako"/>
|
||||
<%namespace file="/message.mako" import="render_msg" />
|
||||
<%namespace file="/admin/tool_shed_repository/common.mako" import="*" />
|
||||
<%namespace file="/admin/tool_shed_repository/repository_actions_menu.mako" import="*" />
|
||||
|
||||
<%def name="stylesheets()">
|
||||
${parent.stylesheets()}
|
||||
${h.css( "dynatree_skin/ui.dynatree" )}
|
||||
<style type="text/css">
|
||||
div.expandLink {
|
||||
float: left;
|
||||
padding-left: 2px;
|
||||
background-color: #d8d8d8;
|
||||
width: 100%;
|
||||
}
|
||||
div.changeset {
|
||||
padding: 5px 10px 5px 10px;
|
||||
}
|
||||
div.container {
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.container-table {
|
||||
padding-top: 1em;
|
||||
}
|
||||
ul.jstree-container-ul {
|
||||
margin-top: 1em;
|
||||
}
|
||||
</style>
|
||||
</%def>
|
||||
<%def name="javascripts()">
|
||||
${parent.javascripts()}
|
||||
</%def>
|
||||
<script type="text/javascript">
|
||||
<%
|
||||
import json
|
||||
sheds = []
|
||||
for name, url in trans.app.tool_shed_registry.tool_sheds.items():
|
||||
sheds.append(dict(name=name, url=url))
|
||||
tool_sheds = json.dumps(sheds)
|
||||
%>
|
||||
/*
|
||||
*
|
||||
* Define some global variables, data, and templates
|
||||
*
|
||||
*/
|
||||
var has_repo_dependencies = false;
|
||||
var valid_tool_dependencies = Array();
|
||||
var valid_tools = Array();
|
||||
var repository_data = Object();
|
||||
var tool_sheds = JSON.parse('${tool_sheds}');
|
||||
repository_queue_tab = _.template([
|
||||
'<li class="nav-tab" role="presentation" id="repository_installation_queue">',
|
||||
'<a href="#repository_queue" data-toggle="tab">Repository Installation Queue</a>',
|
||||
'</li>',
|
||||
].join(''))
|
||||
repository_queue_template = _.template([
|
||||
'<div class="tab-pane" id="repository_queue">',
|
||||
'<table id="queued_repositories" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th class="datasetRow"><input class="btn btn-primary" type="submit" id="install_all" name="install_all" value="Install all" /></th>',
|
||||
'<th class="datasetRow"><input class="btn btn-primary" type="submit" id="clear_queue" name="clear_queue" value="Clear queue" /></th>',
|
||||
'<th class="datasetRow">ToolShed</th>',
|
||||
'<th class="datasetRow">Name</th>',
|
||||
'<th class="datasetRow">Owner</th>',
|
||||
'<th class="datasetRow">Revision</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody>',
|
||||
'<\% _.each(repositories, function(repository) { \%>',
|
||||
'<tr id="queued_repository_<\%= repository.id \%>">',
|
||||
'<td class="datasetRow">',
|
||||
'<input class="btn btn-primary install_one" data-repokey="<\%= repository.queue_key \%>" type="submit" id="install_repository_<\%= repository.id \%>" name="install_repository" value="Install now" />',
|
||||
'</td>',
|
||||
'<td class="datasetRow">',
|
||||
'<input class="btn btn-primary remove_one" data-repokey="<\%= repository.queue_key \%>" type="submit" id="unqueue_repository_<\%= repository.id \%>" name="unqueue_repository" value="Remove from queue" />',
|
||||
'</td>',
|
||||
'<td class="datasetRow"><\%= repository.tool_shed_url \%></td>',
|
||||
'<td class="datasetRow"><\%= repository.name \%></td>',
|
||||
'<td class="datasetRow"><\%= repository.owner \%></td>',
|
||||
'<td class="datasetRow"><\%= repository.changeset \%></td>',
|
||||
'</tr>',
|
||||
'<\% }); \%>',
|
||||
'</tbody>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
].join(''));
|
||||
repository_details_template = _.template([
|
||||
'<div class="tab-pane" id="repository_details">',
|
||||
'<h2 style="font-weight: normal;">Repository information for <strong><\%= repository.name \%></strong> from <strong><\%= repository.owner \%></strong></h2>',
|
||||
'<form id="repository_installation" name="install_repository" method="post" action="${h.url_for(controller='/api/tool_shed_repositories', action='install', async=True)}">',
|
||||
'<input type="hidden" id="repositories" name="<\%= current_metadata.repository.id \%>" value="ID" />',
|
||||
'<input type="hidden" id="tool_shed_url" name="tool_shed_url" value="<\%= tool_shed_url \%>" />',
|
||||
'<div class="toolForm">',
|
||||
'<div class="toolFormTitle">Changeset</div>',
|
||||
'<div class="toolFormBody changeset">',
|
||||
'<select id="changeset" name="changeset">',
|
||||
'<\% _.each(Object.keys(repository.metadata), function(changeset) { \%>',
|
||||
'<\% if (changeset == current_changeset) { var selected = "selected "; } else { var selected = ""; } \%>',
|
||||
'<option <\%= selected \%>data-changeset="<\%= changeset \%>" value="<\%= changeset.split(":")[1] \%>"><\%= changeset \%></option>',
|
||||
'<\% }); \%>',
|
||||
'</select>',
|
||||
'<input class="btn btn-primary" data-tsrid="<\%= current_metadata.repository.id \%>" type="submit" id="install_repository" name="install_repository" value="Install this revision now" />',
|
||||
'<input class="btn btn-primary" type="button" id="queue_install" name="queue_install" value="Install this revision later" />',
|
||||
'<div class="toolParamHelp" style="clear: both;">Please select a revision and review the settings below before installing.</div>',
|
||||
'</div>',
|
||||
'<div class="toolParamHelp" style="clear: both;">',
|
||||
'Please select a revision and review the settings below before installing.',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'<\%= shed_tool_conf \%>',
|
||||
'<\%= tool_panel_section \%>',
|
||||
'<div class="toolFormTitle">Contents of this repository at revision <strong id="current_changeset"><\%= current_changeset \%></strong></div>',
|
||||
'<div class="toolFormBody">',
|
||||
'<\% if (current_metadata.has_repository_dependencies) { \%>',
|
||||
'<p id="install_repository_dependencies_checkbox">',
|
||||
'<input type="checkbox" checked id="install_repository_dependencies" />',
|
||||
'<label for="install_repository_dependencies">Install repository dependencies</label>',
|
||||
'</p>',
|
||||
'<\% current_metadata.repository_dependency_template = repository_dependency_template; \%>',
|
||||
'<div class="tables container-table" id="repository_dependencies">',
|
||||
'<div class="expandLink">',
|
||||
'<a class="toggle_folder" data_target="repository_dependencies_table">',
|
||||
'Repository dependencies – <em>installation of these additional repositories is required</em>',
|
||||
'</a>',
|
||||
'</div>',
|
||||
'<\%= repository_dependencies_template(current_metadata) \%>',
|
||||
'</div>',
|
||||
'<\% } \%>',
|
||||
'<\% if (current_metadata.includes_tool_dependencies) { \%>',
|
||||
'<p id="install_resolver_dependencies_checkbox">',
|
||||
'<input type="checkbox" checked id="install_resolver_dependencies" />',
|
||||
'<label for="install_resolver_dependencies">Install resolver dependencies</label>',
|
||||
'</p>',
|
||||
'<p id="install_tool_dependencies_checkbox">',
|
||||
'<input type="checkbox" checked id="install_tool_dependencies" />',
|
||||
'<label for="install_tool_dependencies">Install tool dependencies</label>',
|
||||
'</p>',
|
||||
'<div class="tables container-table" id="tool_dependencies">',
|
||||
'<div class="expandLink">',
|
||||
'<a class="toggle_folder" data_target="tool_dependencies_table">',
|
||||
'Tool dependencies – <em>repository tools require handling of these dependencies</em>',
|
||||
'</a>',
|
||||
'</div>',
|
||||
'<table class="tables container-table" id="tool_dependencies_table" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead>',
|
||||
'<tr style="display: table-row;" class="datasetRow" parent="0" id="libraryItem-rt-f9cad7b01a472135">',
|
||||
'<th style="padding-left: 40px;">Name</th>',
|
||||
'<th>Version</th>',
|
||||
'<th>Type</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody id="tool_deps">',
|
||||
'<\% _.each(tool_dependencies[current_changeset], function(dependency) { \%>',
|
||||
'<tr class="datasetRow tool_dependency_row" style="display: table-row;">',
|
||||
'<td style="padding-left: 40px;">',
|
||||
'<\%= dependency.name \%></td>',
|
||||
'<td><\%= dependency.version \%></td>',
|
||||
'<td><\%= dependency.type \%></td>',
|
||||
'</tr>',
|
||||
'<\% }); \%>',
|
||||
'</tbody>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'<\% } \%>',
|
||||
'<\% if (current_metadata.includes_tools_for_display_in_tool_panel) { \%>',
|
||||
'<div class="tables container-table" id="tools_toggle">',
|
||||
'<div class="expandLink">',
|
||||
'<a class="toggle_folder" data_target="valid_tools">',
|
||||
'Valid tools – <em>click the name to preview the tool and use the pop-up menu to inspect all metadata</em>',
|
||||
'</a>',
|
||||
'</div>',
|
||||
'<table class="tables container-table" id="valid_tools" border="0" cellpadding="2" cellspacing="2" width="100%">',
|
||||
'<thead>',
|
||||
'<tr style="display: table-row;" class="datasetRow" parent="0" id="libraryItem-rt-f9cad7b01a472135">',
|
||||
'<th style="padding-left: 40px;">Name</th>',
|
||||
'<th>Description</th>',
|
||||
'<th>Version</th>',
|
||||
'<th>Tool Panel Section</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<tbody id="tools_in_repo">',
|
||||
'<\% _.each(tools[current_changeset], function(tool) { \%>',
|
||||
'<tr id="libraryItem" class="tool_row" style="display: table-row;" style="width: 15%">',
|
||||
'<td style="padding-left: 40px;">',
|
||||
'<div id="tool" class="menubutton split popup" style="float: left;">',
|
||||
'<a class="view-info"><\%= tool.name \%></a>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'<td><\%= tool.description \%></td>',
|
||||
'<td style="width: 15%"><\%= tool.version \%></td>',
|
||||
'<td style="width: 35%">',
|
||||
'<div class="tool_tps_switcher tps_switcher_<\%= tool.clean \%>" id="per_tool_tps_container_<\%= tool.clean \%>">',
|
||||
'<span id="tps_button_<\%= tool.clean \%>" >',
|
||||
'<input class="btn btn-primary show_tool_tps_selector" id="select_tps_button_<\%= tool.clean \%>" data-toolguid="<\%= tool.guid \%>" data-toolname="<\%= tool.clean \%>" type="button" value="Specify panel section" />',
|
||||
'</span>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'</tr>',
|
||||
'<\% }); \%>',
|
||||
'</tbody>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'<\% } \%>',
|
||||
'</div>',
|
||||
'</form>',
|
||||
'</div>',
|
||||
].join(''));
|
||||
shed_tool_conf = _.template([
|
||||
'<div class="toolFormTitle">Shed tool configuration file:</div>',
|
||||
'<div class="toolFormBody">',
|
||||
'<div class="form-row">',
|
||||
'<\%= stc_html \%>',
|
||||
'<div class="toolParamHelp" style="clear: both;">Select the file whose <b>tool_path</b> setting you want used for installing repositories.</div>',
|
||||
'</div>',
|
||||
].join(''));
|
||||
var tool_dependency_template = _.template([
|
||||
'<\% if (has_repository_dependencies) { \%>',
|
||||
'<\% _.each(repository_dependencies, function(dependency) { \%>',
|
||||
'<\% if (dependency.includes_tool_dependencies) { \%>',
|
||||
'<\% dependency.tool_dependency_template = tool_dependency_template \%>',
|
||||
'<\%= tool_dependency_template(dependency) \%>',
|
||||
'<\% } \%>',
|
||||
'<\% }); \%>',
|
||||
'<\% } \%>',
|
||||
].join(''));
|
||||
repository_dependencies_template = _.template([
|
||||
'<div class="tables container-table" id="repository_dependencies_table">',
|
||||
'<span class="repository_dependency_row"><p>Repository installation requires the following:</p></span>',
|
||||
'<ul id="repository_deps">',
|
||||
'<\% if (has_repository_dependencies) { \%>',
|
||||
'<\% _.each(repository_dependencies, function(dependency) { \%>',
|
||||
'<\% dependency.repository_dependency_template = repository_dependency_template; \%>',
|
||||
'<\%= repository_dependency_template(dependency) \%>',
|
||||
'<\% }); \%>',
|
||||
'<\% } \%>',
|
||||
'</ul>',
|
||||
'</div>'].join(''));
|
||||
repository_dependency_template = _.template([
|
||||
'<li id="metadata_<\%= id \%>" class="datasetRow repository_dependency_row" style="display: table-row;">',
|
||||
'Repository <b><\%= repository.name \%></b> revision <b><\%= changeset_revision \%></b> owned by <b><\%= repository.owner \%></b>',
|
||||
'</li>',
|
||||
'<\% if (has_repository_dependencies) { \%>',
|
||||
'<\% _.each(repository_dependencies, function(dependency) { \%>',
|
||||
'<\% dependency.repository_dependency_template = repository_dependency_template; \%>',
|
||||
'<li id="repository_<\%= id \%>_deps">',
|
||||
'<\%= repository_dependency_template(dependency) \%>',
|
||||
'</li>',
|
||||
'<\% }); \%>',
|
||||
'<\% } \%>'
|
||||
].join(''));
|
||||
categories_in_shed = _.template([
|
||||
'<div class="tab-pane" id="list_categories">',
|
||||
'<div style="clear: both; margin-top: 1em;">',
|
||||
'<h2>Repositories by Category</h2>',
|
||||
'<table class="grid">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th>Name</th>',
|
||||
'<th>Description</th>',
|
||||
'<th>Repositories</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<\% _.each(categories, function(category) { \%>',
|
||||
'<tr>',
|
||||
'<td>',
|
||||
'<button class="category-selector" data-categoryid="<\%= category.id \%>"><\%= category.name \%></button>',
|
||||
'</td>',
|
||||
'<td><\%= category.description \%></td>',
|
||||
'<td><\%= category.repositories \%></td>',
|
||||
'</tr>',
|
||||
'<\% }); \%>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
].join(''));
|
||||
repositories_in_category = _.template([
|
||||
'<div class="tab-pane" id="list_repositories">',
|
||||
'<div id="standard-search" style="height: 2em; margin: 1em;">',
|
||||
'<span class="ui-widget" >',
|
||||
'<input class="search-box-input" id="repository_search" name="search" placeholder="Search repositories by name or id" size="60" type="text" />',
|
||||
'</span>',
|
||||
'</div>',
|
||||
'<div style="clear: both; margin-top: 1em;">',
|
||||
'<h2>Repositories in <\%= name \%></h2>',
|
||||
'<table class="grid">',
|
||||
'<thead id="grid-table-header">',
|
||||
'<tr>',
|
||||
'<th style="width: 10%;">Owner</th>',
|
||||
'<th style="width: 15%;">Name</th>',
|
||||
'<th>Synopsis</th>',
|
||||
'<th style="width: 10%;">Type</th>',
|
||||
'<th style="width: 5%;">Certified</th>',
|
||||
'</tr>',
|
||||
'</thead>',
|
||||
'<\% _.each(repositories, function(repository) { \%>',
|
||||
'<tr>',
|
||||
'<td><\%= repository.owner \%></td>',
|
||||
'<td>',
|
||||
'<button class="repository-selector" data-tsrid="<\%= repository.id \%>"><\%= repository.name \%></button>',
|
||||
'</td>',
|
||||
'<td><\%= repository.description \%></td>',
|
||||
'<td><\%= repository.type \%></td>',
|
||||
'<td><\%= repository.metadata.tools_functionally_correct \%></td>',
|
||||
'</tr>',
|
||||
'<\% }); \%>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
].join(''));
|
||||
tool_sheds_template = _.template([
|
||||
'<div class="tab-pane" id="list_toolsheds">',
|
||||
'<div class="toolFormTitle">Accessible Galaxy tool sheds</div>',
|
||||
'<div class="toolFormBody">',
|
||||
'<div class="form-row">',
|
||||
'<table class="grid">',
|
||||
'<\% _.each(tool_sheds, function(shed) { \%>',
|
||||
'<tr class="libraryTitle">',
|
||||
'<td>',
|
||||
'<div style="float: left; margin-left: 1px;" class="menubutton split">',
|
||||
'<a class="view-info shed-selector" data-shedurl="<\%= shed.url \%>" href="#"><\%= shed.name \%></a>',
|
||||
'</div>',
|
||||
'</td>',
|
||||
'</tr>',
|
||||
'<\% }); \%>',
|
||||
'</table>',
|
||||
'</div>',
|
||||
'<div style="clear: both"></div>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
].join(''));
|
||||
tps_selection_template = _.template([
|
||||
'<div class="tab-pane" id="select_tps">',
|
||||
'<select name="<\%= name \%>" id="<\%= id \%>',
|
||||
'<\% _.each(sections, function(section) { \%>',
|
||||
'<option value="<\%= section.id \%>"><\%= section.name \%>',
|
||||
'<\% }); \%>',
|
||||
'</select>',
|
||||
'<input class="btn btn-primary" type="button" id="create_new" value="Create new" />',
|
||||
'<div class="toolParamHelp" style="clear: both;">',
|
||||
'Select an existing tool panel section to contain the installed tools (optional).',
|
||||
'</div>',
|
||||
'</div>'].join(''));
|
||||
tps_creation_template = _.template([
|
||||
'<div class="form-row" id="new_tps">',
|
||||
'<input id="new_tool_panel_section" name="new_tool_panel_section" type="textfield" value="" size="40"/>',
|
||||
'<input class="btn btn-primary" type="button" id="select_existing" value="Select existing" />',
|
||||
'<div class="toolParamHelp" style="clear: both;">',
|
||||
'Add a new tool panel section to contain the installed tools (optional).',
|
||||
'</div>',
|
||||
'</div>'].join(''));
|
||||
var tps_picker_template = _.template([
|
||||
'<span id="tps_button_<\%= tool.clean \%>" >',
|
||||
'<input class="btn btn-primary show_tool_tps_selector" id="select_tps_button_<\%= tool.clean \%>" data-toolguid="<\%= tool.guid \%>" type="button" value="Specify panel section" />',
|
||||
'</span>',
|
||||
].join(''));
|
||||
var select_tps_template = _.template([
|
||||
'<div id="select_tps_<\%= tool.clean \%>" class="tps_creator">',
|
||||
'<select style="width: 30em;" data-toolguid="<\%= tool.guid \%>" class="tool_panel_section_picker" name="tool_panel_section_id" id="tool_panel_section_select_<\%= tool.clean \%>">',
|
||||
'</select>',
|
||||
'<input id="per_tool_create_<\%= tool.clean \%>" class="btn btn-primary" data-toolguid="<\%= tool.guid \%>" value="Create new" id="create_new_<\%= tool.clean \%>" type="button">',
|
||||
'<input id="cancel_<\%= tool.clean \%>" class="btn btn-primary" data-toolguid="<\%= tool.guid \%>" value="Cancel" type="button">',
|
||||
'<div style="clear: both;" class="toolParamHelp"></div>',
|
||||
'</div>',
|
||||
].join(''));
|
||||
var create_tps_template = _.template([
|
||||
'<div id="new_tps_<\%= tool.clean \%>" class="form-row">',
|
||||
'<input data-toolguid="<\%= tool.guid \%>" class="tool_panel_section_picker" size="40" name="new_tool_panel_section" id="new_tool_panel_section_<\%= tool.clean \%>" type="text">',
|
||||
'<input id="per_tool_select_<\%= tool.clean \%>" class="btn btn-primary" data-toolguid="<\%= tool.guid \%>" value="Select existing" id="select_existing_<\%= tool.clean \%>" type="button">',
|
||||
'<input id="cancel_<\%= tool.clean \%>" class="btn btn-primary" data-toolguid="<\%= tool.guid \%>" value="Cancel" type="button">',
|
||||
'</div>',
|
||||
].join(''));
|
||||
|
||||
function array_contains_dict(array, dict) {
|
||||
for (var i in array) {
|
||||
needle = array[i];
|
||||
var found = true;
|
||||
for (var key in dict) {
|
||||
if (needle[key] !== dict[key]) {
|
||||
found = false;
|
||||
}
|
||||
}
|
||||
if (found) { return true; }
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
function bind_category_events() {
|
||||
$('.repository-selector').click(function() {
|
||||
$('#repository_details').replaceWith('<div class="tab-pane" id="repository_details"><p><img src="/static/images/jstree/throbber.gif" alt="Loading repository..." /></p></div>');
|
||||
tsr_id = $(this).attr('data-tsrid');
|
||||
shed_url = $('#tab_contents').attr('data-shedurl');
|
||||
api_url = '${h.url_for(controller='/api/tool_shed_repositories', action="shed_repository")}'
|
||||
params = {"tool_shed_url": shed_url, "tsr_id": tsr_id}
|
||||
$.get(api_url, params, function(data) {
|
||||
var changesets = Object.keys(data.repository.metadata);
|
||||
data.tool_shed_url = shed_url;
|
||||
data.current_changeset = changesets[changesets.length - 1];
|
||||
data.current_metadata = data.repository.metadata[data.current_changeset];
|
||||
data.repository_dependencies_template = repository_dependencies_template;
|
||||
data.repository_dependency_template = repository_dependency_template;
|
||||
data.tps_selection_template = tps_selection_template;
|
||||
repository_data = data;
|
||||
repository_data.shed_tool_conf = shed_tool_conf({'stc_html': repository_data.shed_conf});
|
||||
repository_data.tool_panel_section = '';
|
||||
if (repository_data.repository.metadata[data.current_changeset].includes_tools_for_display_in_tool_panel) {
|
||||
repository_data.tool_panel_section = tps_selection_template(repository_data.panel_section_dict)
|
||||
}
|
||||
$('#repository_details').replaceWith(repository_details_template(data));
|
||||
$('#repo_info_tab').click();
|
||||
require(["libs/jquery/jstree"], function() {
|
||||
$('#repository_deps').jstree();
|
||||
});
|
||||
$('#repository_installation').ready(function() {
|
||||
bind_repository_events();
|
||||
});
|
||||
});
|
||||
$('#repository_contents').click();
|
||||
});
|
||||
}
|
||||
function bind_repository_events() {
|
||||
var current_changeset = get_current_changeset();
|
||||
var current_metadata = repository_data.repository.metadata[current_changeset];
|
||||
$('.show_tool_tps_selector').click(function() {
|
||||
var changeset = get_current_changeset();
|
||||
var tool_guid = $(this).attr('data-toolguid');
|
||||
show_panel_selector(tool_guid, changeset);
|
||||
});
|
||||
$('#changeset').change(changeset_metadata);
|
||||
$('.toggle_folder').click(function() {
|
||||
toggle_folder($(this));
|
||||
});
|
||||
$('#queue_install').click(function() {
|
||||
var changeset = get_current_changeset();
|
||||
var repository_metadata = repository_data.current_metadata;
|
||||
repository_metadata.install_tool_dependencies = $("#install_tool_dependencies").val();
|
||||
repository_metadata.install_repository_dependencies = $("#install_repository_dependencies").val();
|
||||
repository_metadata.install_resolver_dependencies = $("#install_resolver_dependencies").val();
|
||||
repository_metadata.tool_panel_section = JSON.stringify(select_tps({}));
|
||||
repository_metadata.shed_tool_conf = $("select[name='shed_tool_conf']").find('option:selected').val()
|
||||
var queue_key = get_queue_key(repository_metadata, changeset);
|
||||
var queued_repos = new Object();
|
||||
if (localStorage.repositories) {
|
||||
queued_repos = get_repository_queue();
|
||||
}
|
||||
if (!queued_repos.hasOwnProperty(queue_key)) {
|
||||
queued_repos[queue_key] = repository_metadata;
|
||||
}
|
||||
save_repository_queue(queued_repos);
|
||||
check_if_installed(repository_metadata.repository.name, repository_metadata.repository.owner, current_changeset.split(':')[1]);
|
||||
check_queue();
|
||||
});
|
||||
$('#create_new').click(show_global_tps_create);
|
||||
$('#install_repository').click(function() {
|
||||
var form = $('#repository_installation');
|
||||
var params = {};
|
||||
params.repositories = JSON.stringify([[$('#install_repository').attr('data-tsrid'), $('#changeset').find("option:selected").val()]]);
|
||||
params.tool_shed_repository_ids = JSON.stringify([$('#install_repository').attr('data-tsrid')]);
|
||||
params.tool_shed_url = $('#tab_contents').attr('data-shedurl');
|
||||
params.install_tool_dependencies = $("#install_tool_dependencies").val();
|
||||
params.install_repository_dependencies = $("#install_repository_dependencies").val();
|
||||
params.install_resolver_dependencies = $("#install_resolver_dependencies").val();
|
||||
params.tool_panel_section = JSON.stringify(select_tps(params));
|
||||
params.shed_tool_conf = $("select[name='shed_tool_conf']").find('option:selected').val()
|
||||
params.changeset = $('#changeset').find("option:selected").val();
|
||||
url = $('#repository_installation').attr('action');
|
||||
prepare_installation(params, url);
|
||||
});
|
||||
check_if_installed(current_metadata.repository.name, current_metadata.repository.owner, current_changeset.split(':')[1]);
|
||||
}
|
||||
function bind_shed_events() {
|
||||
$('.category-selector').click(function() {
|
||||
var tabsw = $('#category_list_tab');
|
||||
$('#list_repositories').replaceWith('<div id="list_repositories" class="tab-pane"><img src="/static/images/jstree/throbber.gif" alt="Loading repositories..." /></div>');
|
||||
var category_id = $(this).attr('data-categoryid');
|
||||
var shed_url = $('#tab_contents').attr('data-shedurl');
|
||||
var api_url = '${h.url_for(controller='/api/tool_shed_repositories', action="shed_category")}'
|
||||
var params = {'tool_shed_url': shed_url, 'category_id': category_id};
|
||||
$.get(api_url, params, function(data) {
|
||||
$('#list_repositories').replaceWith(repositories_in_category(data));
|
||||
$('#repo_list_tab').click();
|
||||
bind_category_events();
|
||||
});
|
||||
});
|
||||
}
|
||||
function changeset_metadata() {
|
||||
repository_data.current_changeset = get_current_changeset();
|
||||
repository_data.current_metadata = repository_data.repository.metadata[changeset];
|
||||
repository_information = repository_data.repository;
|
||||
$('#repository_details').replaceWith(repository_details_template(repository_data));
|
||||
check_if_installed(repository_information.name, repository_information.owner, changeset.split(':')[1]);
|
||||
bind_repository_events();
|
||||
}
|
||||
function check_if_installed(name, owner, changeset) {
|
||||
params = {name: name, owner: owner}
|
||||
var already_installed = false;
|
||||
var queued = repository_in_queue();
|
||||
$.get('${h.url_for(controller='/api/tool_shed_repositories')}', params, function(data) {
|
||||
for (var index = 0; index < data.length; index++) {
|
||||
var repository = data[index];
|
||||
var installed = !repository.deleted && !repository.uninstalled;
|
||||
var changeset_match = repository.changeset_revision == changeset ||
|
||||
repository.installed_changeset_revision == changeset;
|
||||
if (repository.name == name && repository.owner == owner && installed && changeset_match) {
|
||||
already_installed = true;
|
||||
}
|
||||
if (already_installed && !repository_in_queue()) {
|
||||
$('#install_repository').prop('disabled', true);
|
||||
$('#install_repository').val('This revision is already installed');
|
||||
$('#queue_install').prop('disabled', true);
|
||||
$('#queue_install').val('This revision is already installed');
|
||||
}
|
||||
else {
|
||||
$('#install_repository').prop('disabled', false);
|
||||
$('#install_repository').val('Install this revision');
|
||||
$('#queue_install').prop('disabled', false);
|
||||
$('#queue_install').val('Install this revision later');
|
||||
}
|
||||
}
|
||||
});
|
||||
if (repository_in_queue() && !already_installed) {
|
||||
$('#queue_install').prop('disabled', true);
|
||||
$('#queue_install').val('This revision has been queued');
|
||||
}
|
||||
else {
|
||||
$('#queue_install').prop('disabled', false);
|
||||
$('#queue_install').val('Install this revision later');
|
||||
}
|
||||
}
|
||||
function check_queue() {
|
||||
if (localStorage.hasOwnProperty('repositories')) {
|
||||
repository_queue = JSON.parse(localStorage.repositories);
|
||||
queue_keys = Object.keys(repository_queue);
|
||||
queue = Array();
|
||||
for (var i = 0; i < queue_keys.length; i++) {
|
||||
queue_key = queue_keys[i];
|
||||
repository_metadata = repository_queue[queue_key];
|
||||
repository = repository_metadata.repository;
|
||||
key_parts = queue_key.split('|');
|
||||
tool_shed_url = key_parts[0];
|
||||
repository.queue_key = queue_key;
|
||||
repository.changeset = repository_metadata.changeset_revision;
|
||||
repository.tool_shed_url = tool_shed_url;
|
||||
queue.push(repository);
|
||||
}
|
||||
$('#repository_queue').replaceWith(repository_queue_template({'repositories': queue}));
|
||||
$('.install_one').click(function() {
|
||||
var repository_metadata = get_repository_from_queue($(this).attr('data-repokey'));
|
||||
install_from_queue(repository_metadata, $(this).attr('data-repokey'));
|
||||
});
|
||||
$('.remove_one').click(function(){
|
||||
queue_key = $(this).attr('data-repokey');
|
||||
repository_metadata = get_repository_from_queue(queue_key);
|
||||
repository_id = repository_metadata.repository.id;
|
||||
selector = "#queued_repository_" + repository_id;
|
||||
$(selector).remove();
|
||||
remove_from_queue(undefined, undefined, queue_key);
|
||||
});
|
||||
$('#clear_queue').click(function() {
|
||||
localStorage.removeItem('repositories');
|
||||
});
|
||||
$('#install_all').click(process_queue);
|
||||
}
|
||||
}
|
||||
function find_tool_by_guid(tool_guid, changeset) {
|
||||
var tools = repository_data.tools[changeset];
|
||||
for (var index = 0; index < tools.length; index++) {
|
||||
var tool = tools[index];
|
||||
if (tool.guid === tool_guid) {
|
||||
return tool;
|
||||
}
|
||||
}
|
||||
}
|
||||
function get_current_changeset() {
|
||||
return $('#changeset').find("option:selected").text();
|
||||
}
|
||||
function get_queue_key(repository_metadata, changeset, shed_url = undefined) {
|
||||
if (shed_url === undefined) {
|
||||
shed_url = $("#tab_contents").attr('data-shedurl');
|
||||
}
|
||||
return shed_url + '|' + repository_metadata.id + '|' + changeset;
|
||||
}
|
||||
function get_queued_repositories(current_ids = null, processed_ids = null, metadata = null) {
|
||||
if (processed_ids === null) {
|
||||
processed_ids = Array();
|
||||
}
|
||||
if (current_ids === null) {
|
||||
current_ids = Array();
|
||||
}
|
||||
if (metadata === null) {
|
||||
var changeset = get_current_changeset();
|
||||
$("#current_changeset").text(changeset);
|
||||
var metadata = repository_information.metadata[changeset];
|
||||
}
|
||||
if (processed_ids.indexOf(metadata.repository.id) === -1) {
|
||||
var repo_tuple = Array(metadata.repository.id, metadata.changeset_revision)
|
||||
processed_ids.push(metadata.repository.id)
|
||||
current_ids.push(repo_tuple)
|
||||
}
|
||||
if (metadata.has_repository_dependencies) {
|
||||
for (var item in metadata.repository_dependencies) {
|
||||
var dependency = metadata.repository_dependencies[item];
|
||||
var repository = dependency.repository;
|
||||
if (processed_ids.indexOf(repository.id) === -1) {
|
||||
repo_tuple = Array(repository.id, dependency.changeset_revision)
|
||||
current_ids.push(repo_tuple);
|
||||
processed_ids.push(repository.id)
|
||||
}
|
||||
if (dependency.has_repository_dependencies) {
|
||||
current_ids = get_queued_repositories(current_ids, processed_ids, dependency);
|
||||
}
|
||||
}
|
||||
}
|
||||
return current_ids;
|
||||
}
|
||||
function get_repository_queue() {
|
||||
return JSON.parse(localStorage.repositories);
|
||||
}
|
||||
function get_repository_from_queue(queue_key) {
|
||||
repository_queue = get_repository_queue();
|
||||
if (repository_queue.hasOwnProperty(queue_key)) {
|
||||
return repository_queue[queue_key];
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
function install_repository(data) {
|
||||
var params = data;
|
||||
$.post("${h.url_for( controller='admin_toolshed', action='manage_repositories' )}", params, function(data) {
|
||||
console.log( "Initializing repository installation succeeded" );
|
||||
window.location.assign('${h.url_for(controller='admin_toolshed', action='monitor_repository_installation')}');
|
||||
})
|
||||
}
|
||||
function install_from_queue(repository_metadata, queue_key) {
|
||||
var params = Object();
|
||||
params.install_tool_dependencies = repository_metadata.install_tool_dependencies;
|
||||
params.install_repository_dependencies = repository_metadata.install_repository_dependencies;
|
||||
params.install_resolver_dependencies = repository_metadata.install_resolver_dependencies;
|
||||
params.tool_panel_section = repository_metadata.tool_panel_section;
|
||||
params.shed_tool_conf = repository_metadata.shed_tool_conf;
|
||||
params.repositories = JSON.stringify([[repository_metadata.repository.id, repository_metadata.changeset_revision]]);
|
||||
params.tool_shed_repository_ids = JSON.stringify([repository_metadata.repository.id]);
|
||||
params.tool_shed_url = queue_key.split('|')[0];
|
||||
params.changeset = repository_metadata.changeset_revision;
|
||||
var url = '${h.url_for(controller='/api/tool_shed_repositories', action='install', async=True)}';
|
||||
$('#queued_repository_' + repository_metadata.repository.id).remove();
|
||||
remove_from_queue(undefined, undefined, queue_key);
|
||||
prepare_installation(params, url);
|
||||
}
|
||||
function prepare_installation(params, api_url) {
|
||||
$.post(api_url, params, function(data) {
|
||||
iri_parameters = JSON.parse(data);
|
||||
install_repository(iri_parameters);
|
||||
});
|
||||
}
|
||||
function process_dependencies(metadata, selector) {
|
||||
has_repo_dependencies = false;
|
||||
if (metadata.has_repository_dependencies) {
|
||||
has_repo_dependencies = true;
|
||||
for (var item in metadata.repository_dependencies) {
|
||||
var dependency = metadata.repository_dependencies[item];
|
||||
if (dependency.has_repository_dependencies) {
|
||||
has_repo_dependencies = true;
|
||||
}
|
||||
var repository = dependency.repository;
|
||||
if (repository !== null) {
|
||||
template_values = {dependency_id: dependency.id,
|
||||
name: repository.name,
|
||||
revision: dependency.changeset_revision,
|
||||
owner: repository.owner,
|
||||
prior: ''};
|
||||
if (dependency.prior_installation_required) {
|
||||
template_values.prior = ' (<b>Prior installation required</b>)';
|
||||
}
|
||||
var dependency_html = repository_dependency_template(template_values);
|
||||
if (selector === undefined) {
|
||||
$("#repository_deps").append(dependency_html);
|
||||
}
|
||||
else {
|
||||
$(selector).append('<ul>' + dependency_html + '</ul>');
|
||||
}
|
||||
if (dependency.has_repository_dependencies) {
|
||||
process_dependencies(dependency, '#metadata_' + dependency.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (metadata.includes_tool_dependencies) {
|
||||
for (var item in metadata.tool_dependencies) {
|
||||
var dependency = metadata.tool_dependencies[item];
|
||||
if (item === 'set_environment') {
|
||||
for (var i = 0; i < dependency.length; i++) {
|
||||
var tool_dependency = {name: dependency[i].name, version: 'N/A', type: dependency[i].type}
|
||||
}
|
||||
}
|
||||
else {
|
||||
var tool_dependency = {name: dependency.name, version: dependency.version, type: dependency.type};
|
||||
}
|
||||
if (!array_contains_dict(valid_tool_dependencies, tool_dependency)) {
|
||||
valid_tool_dependencies.push(tool_dependency);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (metadata.includes_tools_for_display_in_tool_panel) {
|
||||
$('#tools_toggle').show();
|
||||
for (var i = 0; i < metadata.tools.length; i++) {
|
||||
var tool = metadata.tools[i];
|
||||
valid_tool = {clean_name: tool.clean, name: tool.name, version: tool.version, description: tool.description, guid: tool.guid};
|
||||
if (!array_contains_dict(valid_tools, valid_tool) && tool.add_to_tool_panel) {
|
||||
valid_tools.push(valid_tool);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$('#tools_toggle').hide();
|
||||
}
|
||||
}
|
||||
function process_queue() {
|
||||
if (!localStorage.repositories) {
|
||||
return;
|
||||
}
|
||||
var toolsheds = Array();
|
||||
var queue = Object();
|
||||
var queued_repositories = get_repository_queue();
|
||||
var queue_keys = Object.keys(queued_repositories);
|
||||
for (var i = 0; i < queue_keys.length; i++) {
|
||||
queue_key = queue_keys[i];
|
||||
toolshed = queue_key.split('|')[0];
|
||||
if (toolsheds.indexOf(toolshed) === -1) {
|
||||
toolsheds.push(toolshed);
|
||||
queue[toolshed] = Array();
|
||||
}
|
||||
repository_metadata = queued_repositories[queue_key]
|
||||
repository_metadata.queue_key = queue_key
|
||||
queue[toolshed].push(repository_metadata);
|
||||
}
|
||||
for (i = 0; i < toolsheds.length; i++) {
|
||||
for (var j = 0; j < queue[toolsheds[i]].length; j++) {
|
||||
repository = queue[toolsheds[i]][j];
|
||||
install_from_queue(repository, repository.queue_key);
|
||||
}
|
||||
}
|
||||
}
|
||||
function remove_from_queue(repository_metadata, changeset, queue_key=undefined) {
|
||||
if (!localStorage.repositories) {
|
||||
return;
|
||||
}
|
||||
if (queue_key === undefined) {
|
||||
queue_key = get_queue_key(repository_metadata, changeset);
|
||||
}
|
||||
repository_queue = get_repository_queue();
|
||||
if (repository_queue.hasOwnProperty(queue_key)) {
|
||||
delete repository_queue[queue_key];
|
||||
save_repository_queue(repository_queue);
|
||||
}
|
||||
}
|
||||
function repository_in_queue() {
|
||||
if (!localStorage.repositories) {
|
||||
return;
|
||||
}
|
||||
repository_queue = get_repository_queue();
|
||||
changeset = get_current_changeset();
|
||||
var repository_metadata = repository_data.current_metadata;
|
||||
var queue_key = get_queue_key(repository_metadata, changeset);
|
||||
if (localStorage.repositories) {
|
||||
queued_repos = get_repository_queue();
|
||||
}
|
||||
if (queued_repos.hasOwnProperty(queue_key)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function save_repository_queue(repository_queue) {
|
||||
localStorage.repositories = JSON.stringify(repository_queue);
|
||||
}
|
||||
function select_tps(params) {
|
||||
var tool_panel_section = {};
|
||||
if ($('#tool_panel_section_select').length) {
|
||||
params.tool_panel_section_id = $('#tool_panel_section_select').find("option:selected").val();
|
||||
}
|
||||
else {
|
||||
params.new_tool_panel_section = $("#new_tool_panel_section").val();
|
||||
}
|
||||
$('.tool_panel_section_picker').each(function() {
|
||||
element_name = $(this).attr('name');
|
||||
tool_guid = $(this).attr('data-toolguid');
|
||||
if (element_name === 'tool_panel_section_id') {
|
||||
tool_panel_section[tool_guid] = { tool_panel_section: $(this).find("option:selected").val(), action: 'append' }
|
||||
}
|
||||
else {
|
||||
tool_panel_section[tool_guid] = { tool_panel_section: $(this).val(), action: 'create' }
|
||||
}
|
||||
});
|
||||
return tool_panel_section;
|
||||
}
|
||||
function show_global_tps_select() {
|
||||
$('#tool_panel_section').empty();
|
||||
$('#tool_panel_section').append(tps_selection_template(repository_data.panel_section_dict));
|
||||
$('#create_new').click(show_global_tps_create);
|
||||
}
|
||||
function show_global_tps_create() {
|
||||
$('#tool_panel_section').empty();
|
||||
$('#tool_panel_section').append(tps_creation_template(repository_data.panel_section_dict));
|
||||
$('#select_existing').click(show_global_tps_select);
|
||||
}
|
||||
function show_panel_button(tool_guid, changeset) {
|
||||
var tool = find_tool_by_guid(tool_guid, changeset);
|
||||
var selector = '#per_tool_tps_container_' + tool.clean;
|
||||
$(selector).empty();
|
||||
$(selector).append(tps_picker_template({tool: tool}));
|
||||
$('#select_tps_button_' + tool.clean).click(function() {
|
||||
var changeset = get_current_changeset();
|
||||
var tool_guid = $(this).attr('data-toolguid');
|
||||
show_panel_selector(tool_guid, changeset);
|
||||
});
|
||||
}
|
||||
function show_panel_selector(tool_guid, changeset) {
|
||||
var tool = find_tool_by_guid(tool_guid, changeset);
|
||||
var selector = '#per_tool_tps_container_' + tool.clean;
|
||||
$(selector).empty();
|
||||
$(selector).append(select_tps_template({tool: tool}));
|
||||
$('#per_tool_create_' + tool.clean).click(function() {
|
||||
show_tool_create(tool_guid, changeset);
|
||||
});
|
||||
$('#cancel_' + tool.clean).click(function() {
|
||||
show_panel_button(tool_guid, changeset);
|
||||
});
|
||||
}
|
||||
function show_tool_create(tool_guid, changeset) {
|
||||
var tool = find_tool_by_guid(tool_guid, changeset);
|
||||
var selector = '#per_tool_tps_container_' + tool.clean;
|
||||
$(selector).empty();
|
||||
$(selector).append(create_tps_template({tool: tool}));
|
||||
$('#per_tool_select_' + tool.clean).click(function() {
|
||||
var changeset = get_current_changeset();
|
||||
var tool_guid = $(this).attr('data-toolguid');
|
||||
show_tool_select(tool_guid, changeset);
|
||||
});
|
||||
$('#cancel_' + tool.clean).click(function() {
|
||||
var changeset = get_current_changeset();
|
||||
var tool_guid = $(this).attr('data-toolguid');
|
||||
show_panel_button(tool_guid, changeset);
|
||||
});
|
||||
}
|
||||
function show_tool_select(tool_guid, changeset) {
|
||||
var tool = find_tool_by_guid(tool_guid, changeset);
|
||||
var selector = '#per_tool_tps_container_' + tool.clean;
|
||||
$(selector).empty();
|
||||
$(selector).append(select_tps_template({tool: tool}));
|
||||
$('#per_tool_create_' + tool.clean).click(function() {
|
||||
var changeset = get_current_changeset();
|
||||
var tool_guid = $(this).attr('data-toolguid');
|
||||
show_tool_create(tool_guid, changeset);
|
||||
});
|
||||
$('#cancel_' + tool.clean).click(function() {
|
||||
var changeset = get_current_changeset();
|
||||
var tool_guid = $(this).attr('data-toolguid');
|
||||
show_panel_button(tool_guid, changeset);
|
||||
});
|
||||
}
|
||||
function toggle_folder(folder) {
|
||||
target_selector = '#' + folder.attr('data_target');
|
||||
$(target_selector).toggle();
|
||||
}
|
||||
function tool_panel_section() {
|
||||
var tps_selection = $('#tool_panel_section_select').find("option:selected").text();
|
||||
if (tps_selection === 'Create New') {
|
||||
$("#new_tool_panel_section").prop('disabled', false);
|
||||
$("#new_tps").show();
|
||||
}
|
||||
else {
|
||||
$("#new_tool_panel_section").prop('disabled', true);
|
||||
$("#new_tps").hide();
|
||||
}
|
||||
}
|
||||
$(document).ready(function() {
|
||||
$('#list_toolsheds').replaceWith(tool_sheds_template({tool_sheds: tool_sheds}));
|
||||
$('#shed_list_tab').click();
|
||||
check_queue();
|
||||
$('.shed-selector').click(function() {
|
||||
$('#list_categories').replaceWith('<div id="list_categories" class="nav-tab"><img src="/static/images/jstree/throbber.gif" alt="Loading categories..." /></div>');
|
||||
shed_url = $(this).attr('data-shedurl');
|
||||
$('#tab_contents').attr('data-shedurl', shed_url);
|
||||
api_url = '${h.url_for(controller='/api/tool_shed_repositories', action="shed_categories")}'
|
||||
$.get(api_url, { tool_shed_url: shed_url }, function(data) {
|
||||
$('#list_categories').replaceWith(categories_in_shed(data));
|
||||
$('#category_list_tab').click();
|
||||
bind_shed_events();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div class="container" role="navigation">
|
||||
<ul class="nav nav-tabs" id="browse_toolsheds">
|
||||
<li class="nav-tab tab_toolsheds" role="presentation" id="toolshed_list">
|
||||
<a id="shed_list_tab" href="#list_toolsheds" data-toggle="tab">Toolsheds</a>
|
||||
</li>
|
||||
<li class="nav-tab tab_categories" role="presentation" id="category_list">
|
||||
<a id="category_list_tab" href="#list_categories" data-toggle="tab">Categories</a>
|
||||
</li>
|
||||
<li class="nav-tab tab_repositories" role="presentation" id="repository_list">
|
||||
<a id="repo_list_tab" href="#list_repositories" data-toggle="tab">Repositories</a>
|
||||
</li>
|
||||
<li class="nav-tab tab_repository_details" role="presentation" id="repository_contents">
|
||||
<a id="repo_info_tab" href="#repository_details" data-toggle="tab">Repository</a>
|
||||
</li>
|
||||
<li class="nav-tab" role="presentation" id="repository_installation_queue">
|
||||
<a href="#repository_queue" data-toggle="tab">Repository Installation Queue</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="tab_contents" class="tab-content clearfix">
|
||||
<div class="tab-pane active" id="list_toolsheds">Loading...</div>
|
||||
<div class="tab-pane" id="list_categories">Select a toolshed in the previous tab to see a list of its categories.</div>
|
||||
<div class="tab-pane" id="list_repositories">Select a category in the previous tab to see a list of its repositories.</div>
|
||||
<div class="tab-pane" id="repository_details">Select a repository in the previous tab.</div>
|
||||
<div class="tab-pane" id="repository_queue">There are no repositories queued for installation.</div>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user