1 new commit in galaxy-central: https://bitbucket.org/galaxy/galaxy-central/changeset/c528fab7ea8c/ changeset: c528fab7ea8c user: greg date: 2011-10-27 19:26:43 summary: Add the ability to search for workflows by name in a Galalxy tool shed, either within the tool shed itself or in a local Galaxy instance configured to communicate with the tool shed. affected #: 13 files diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 lib/galaxy/web/controllers/admin.py --- a/lib/galaxy/web/controllers/admin.py +++ b/lib/galaxy/web/controllers/admin.py @@ -704,6 +704,13 @@ return trans.response.send_redirect( url ) @web.expose @web.require_admin + def find_workflows_in_tool_shed( self, trans, **kwd ): + tool_shed_url = kwd[ 'tool_shed_url' ] + galaxy_url = trans.request.host + url = '%s/repository/find_workflows?galaxy_url=%s&webapp=galaxy' % ( tool_shed_url, galaxy_url ) + return trans.response.send_redirect( url ) + @web.expose + @web.require_admin def browse_tool_shed( self, trans, **kwd ): tool_shed_url = kwd[ 'tool_shed_url' ] galaxy_url = trans.request.host diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 lib/galaxy/webapps/community/controllers/repository.py --- a/lib/galaxy/webapps/community/controllers/repository.py +++ b/lib/galaxy/webapps/community/controllers/repository.py @@ -231,7 +231,7 @@ return repository_metadata.repository.user.username return 'no user' # Grid definition - title = "Repositories with matching tools" + title = "Matching repositories" model_class = model.RepositoryMetadata template='/webapps/community/repository/grid.mako' default_sort_key = "Repository.name" @@ -375,6 +375,83 @@ # Render the list view return self.valid_repository_list_grid( trans, **kwd ) @web.expose + def find_workflows( self, trans, **kwd ): + params = util.Params( kwd ) + message = util.restore_text( params.get( 'message', '' ) ) + status = params.get( 'status', 'done' ) + webapp = params.get( 'webapp', 'community' ) + galaxy_url = kwd.get( 'galaxy_url', None ) + if galaxy_url: + trans.set_cookie( galaxy_url, name='toolshedgalaxyurl' ) + if 'operation' in kwd: + item_id = kwd.get( 'id', '' ) + if item_id: + operation = kwd[ 'operation' ].lower() + is_admin = trans.user_is_admin() + if operation == "view_or_manage_repository": + # The received id is a RepositoryMetadata id, so we have to get the repository id. + repository_metadata = get_repository_metadata_by_id( trans, item_id ) + repository_id = trans.security.encode_id( repository_metadata.repository.id ) + repository = get_repository( trans, repository_id ) + kwd[ 'id' ] = repository_id + kwd[ 'changeset_revision' ] = repository_metadata.changeset_revision + if webapp == 'community' and ( is_admin or repository.user == trans.user ): + a = 'manage_repository' + else: + a = 'view_repository' + return trans.response.send_redirect( web.url_for( controller='repository', + action=a, + **kwd ) ) + if operation == "install": + galaxy_url = trans.get_cookie( name='toolshedgalaxyurl' ) + encoded_repo_info_dict = self.__encode_repo_info_dict( trans, webapp, util.listify( item_id ) ) + # TODO: support https in the following url. + url = 'http://%s/admin/install_tool_shed_repository?tool_shed_url=%s&webapp=%s&repo_info_dict=%s' % \ + ( galaxy_url, trans.request.host, webapp, encoded_repo_info_dict ) + return trans.response.send_redirect( url ) + else: + # This can only occur when there is a multi-select grid with check boxes and an operation, + # and the user clicked the operation button without checking any of the check boxes. + return trans.show_error_message( "No items were selected." ) + workflow_names = [ item.lower() for item in util.listify( kwd.get( 'workflow_name', '' ) ) ] + exact_matches = params.get( 'exact_matches', '' ) + exact_matches_checked = CheckboxField.is_checked( exact_matches ) + match_tuples = [] + ok = True + if workflow_names: + ok, match_tuples = self.__search_repository_metadata( trans, exact_matches_checked, workflow_names=workflow_names ) + if ok: + kwd[ 'match_tuples' ] = match_tuples + # Render the list view + if webapp == 'galaxy': + # Our initial request originated from a Galaxy instance. + global_actions = [ grids.GridAction( "Browse valid repositories", + dict( controller='repository', action='browse_valid_repositories', webapp=webapp ) ), + grids.GridAction( "Search for valid tools", + dict( controller='repository', action='find_tools', webapp=webapp ) ), + grids.GridAction( "Search for workflows", + dict( controller='repository', action='find_workflows', webapp=webapp ) ) ] + self.install_matched_repository_list_grid.global_actions = global_actions + install_url_args = dict( controller='repository', action='find_workflows', webapp=webapp ) + operations = [ grids.GridOperation( "Install", url_args=install_url_args, allow_multiple=True, async_compatible=False ) ] + self.install_matched_repository_list_grid.operations = operations + return self.install_matched_repository_list_grid( trans, **kwd ) + else: + kwd[ 'message' ] = "workflow name: <b>%s</b><br/>exact matches only: <b>%s</b>" % \ + ( self.__stringify( workflow_names ), str( exact_matches_checked ) ) + self.matched_repository_list_grid.title = "Repositories with matching workflows" + return self.matched_repository_list_grid( trans, **kwd ) + else: + message = "No search performed - each field must contain the same number of comma-separated items." + status = "error" + exact_matches_check_box = CheckboxField( 'exact_matches', checked=exact_matches_checked ) + return trans.fill_template( '/webapps/community/repository/find_workflows.mako', + webapp=webapp, + workflow_name=self.__stringify( workflow_names ), + exact_matches_check_box=exact_matches_check_box, + message=message, + status=status ) + @web.expose def find_tools( self, trans, **kwd ): params = util.Params( kwd ) message = util.restore_text( params.get( 'message', '' ) ) @@ -421,7 +498,7 @@ match_tuples = [] ok = True if tool_ids or tool_names or tool_versions: - ok, match_tuples = self.__search_repository_metadata( trans, tool_ids, tool_names, tool_versions, exact_matches_checked ) + ok, match_tuples = self.__search_repository_metadata( trans, exact_matches_checked, tool_ids=tool_ids, tool_names=tool_names, tool_versions=tool_versions ) if ok: kwd[ 'match_tuples' ] = match_tuples # Render the list view @@ -430,7 +507,9 @@ global_actions = [ grids.GridAction( "Browse valid repositories", dict( controller='repository', action='browse_valid_repositories', webapp=webapp ) ), grids.GridAction( "Search for valid tools", - dict( controller='repository', action='find_tools', webapp=webapp ) ) ] + dict( controller='repository', action='find_tools', webapp=webapp ) ), + grids.GridAction( "Search for workflows", + dict( controller='repository', action='find_workflows', webapp=webapp ) ) ] self.install_matched_repository_list_grid.global_actions = global_actions install_url_args = dict( controller='repository', action='find_tools', webapp=webapp ) operations = [ grids.GridOperation( "Install", url_args=install_url_args, allow_multiple=True, async_compatible=False ) ] @@ -439,6 +518,7 @@ else: kwd[ 'message' ] = "tool id: <b>%s</b><br/>tool name: <b>%s</b><br/>tool version: <b>%s</b><br/>exact matches only: <b>%s</b>" % \ ( self.__stringify( tool_ids ), self.__stringify( tool_names ), self.__stringify( tool_versions ), str( exact_matches_checked ) ) + self.matched_repository_list_grid.title = "Repositories with matching tools" return self.matched_repository_list_grid( trans, **kwd ) else: message = "No search performed - each field must contain the same number of comma-separated items." @@ -452,62 +532,76 @@ exact_matches_check_box=exact_matches_check_box, message=message, status=status ) - def __search_repository_metadata( self, trans, tool_ids, tool_names, tool_versions, exact_matches_checked ): + def __search_repository_metadata( self, trans, exact_matches_checked, tool_ids='', tool_names='', tool_versions='', workflow_names='' ): match_tuples = [] ok = True for repository_metadata in trans.sa_session.query( model.RepositoryMetadata ): metadata = repository_metadata.metadata - if 'tools' in metadata: - tools = metadata[ 'tools' ] - else: - tools = [] - for tool_dict in tools: - if tool_ids and not tool_names and not tool_versions: - for tool_id in tool_ids: - if self.__in_tool_dict( tool_dict, exact_matches_checked, tool_id=tool_id ): + if tool_ids or tool_names or tool_versions: + if 'tools' in metadata: + tools = metadata[ 'tools' ] + else: + tools = [] + for tool_dict in tools: + if tool_ids and not tool_names and not tool_versions: + for tool_id in tool_ids: + if self.__in_tool_dict( tool_dict, exact_matches_checked, tool_id=tool_id ): + match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) ) + elif tool_names and not tool_ids and not tool_versions: + for tool_name in tool_names: + if self.__in_tool_dict( tool_dict, exact_matches_checked, tool_name=tool_name ): + match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) ) + elif tool_versions and not tool_ids and not tool_names: + for tool_version in tool_versions: + if self.__in_tool_dict( tool_dict, exact_matches_checked, tool_version=tool_version ): + match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) ) + elif tool_ids and tool_names and not tool_versions: + if len( tool_ids ) == len( tool_names ): + match_tuples = self.__search_ids_names( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_names ) + elif len( tool_ids ) == 1 or len( tool_names ) == 1: + tool_ids, tool_names = self.__make_same_length( tool_ids, tool_names ) + match_tuples = self.__search_ids_names( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_names ) + else: + ok = False + elif tool_ids and tool_versions and not tool_names: + if len( tool_ids ) == len( tool_versions ): + match_tuples = self.__search_ids_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_versions ) + elif len( tool_ids ) == 1 or len( tool_versions ) == 1: + tool_ids, tool_versions = self.__make_same_length( tool_ids, tool_versions ) + match_tuples = self.__search_ids_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_versions ) + else: + ok = False + elif tool_versions and tool_names and not tool_ids: + if len( tool_versions ) == len( tool_names ): + match_tuples = self.__search_names_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_names, tool_versions ) + elif len( tool_versions ) == 1 or len( tool_names ) == 1: + tool_versions, tool_names = self.__make_same_length( tool_versions, tool_names ) + match_tuples = self.__search_names_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_names, tool_versions ) + else: + ok = False + elif tool_versions and tool_names and tool_ids: + if len( tool_versions ) == len( tool_names ) and len( tool_names ) == len( tool_ids ): + for i, tool_version in enumerate( tool_versions ): + tool_name = tool_names[ i ] + tool_id = tool_ids[ i ] + if self.__in_tool_dict( tool_dict, exact_matches_checked, tool_id=tool_id, tool_name=tool_name, tool_version=tool_version ): + match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) ) + else: + ok = False + if workflow_names: + if 'workflows' in metadata: + workflows = metadata[ 'workflows' ] + else: + workflows = [] + for workflow_dict in workflows: + for workflow_name in workflow_names: + if self.__in_workflow_dict( workflow_dict, exact_matches_checked, workflow_name=workflow_name ): match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) ) - elif tool_names and not tool_ids and not tool_versions: - for tool_name in tool_names: - if self.__in_tool_dict( tool_dict, exact_matches_checked, tool_name=tool_name ): - match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) ) - elif tool_versions and not tool_ids and not tool_names: - for tool_version in tool_versions: - if self.__in_tool_dict( tool_dict, exact_matches_checked, tool_version=tool_version ): - match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) ) - elif tool_ids and tool_names and not tool_versions: - if len( tool_ids ) == len( tool_names ): - match_tuples = self.__search_ids_names( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_names ) - elif len( tool_ids ) == 1 or len( tool_names ) == 1: - tool_ids, tool_names = self.__make_same_length( tool_ids, tool_names ) - match_tuples = self.__search_ids_names( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_names ) - else: - ok = False - elif tool_ids and tool_versions and not tool_names: - if len( tool_ids ) == len( tool_versions ): - match_tuples = self.__search_ids_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_versions ) - elif len( tool_ids ) == 1 or len( tool_versions ) == 1: - tool_ids, tool_versions = self.__make_same_length( tool_ids, tool_versions ) - match_tuples = self.__search_ids_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_versions ) - else: - ok = False - elif tool_versions and tool_names and not tool_ids: - if len( tool_versions ) == len( tool_names ): - match_tuples = self.__search_names_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_names, tool_versions ) - elif len( tool_versions ) == 1 or len( tool_names ) == 1: - tool_versions, tool_names = self.__make_same_length( tool_versions, tool_names ) - match_tuples = self.__search_names_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_names, tool_versions ) - else: - ok = False - elif tool_versions and tool_names and tool_ids: - if len( tool_versions ) == len( tool_names ) and len( tool_names ) == len( tool_ids ): - for i, tool_version in enumerate( tool_versions ): - tool_name = tool_names[ i ] - tool_id = tool_ids[ i ] - if self.__in_tool_dict( tool_dict, exact_matches_checked, tool_id=tool_id, tool_name=tool_name, tool_version=tool_version ): - match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) ) - else: - ok = False return ok, match_tuples + def __in_workflow_dict( self, workflow_dict, exact_matches_checked, workflow_name=None ): + workflow_dict_workflow_name = workflow_dict[ 'name' ].lower() + return ( workflow_name == workflow_dict_workflow_name ) or \ + ( not exact_matches_checked and workflow_dict_workflow_name.find( workflow_name ) >= 0 ) def __in_tool_dict( self, tool_dict, exact_matches_checked, tool_id=None, tool_name=None, tool_version=None ): found = False if tool_id and not tool_name and not tool_version: diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/grid_base.mako --- a/templates/grid_base.mako +++ b/templates/grid_base.mako @@ -744,7 +744,7 @@ %if grid.global_actions: <ul class="manage-table-actions"> - %if len( grid.global_actions ) < 4: + %if len( grid.global_actions ) < 3: %for action in grid.global_actions: <li><a class="action-button" href="${h.url_for( **action.url_args )}">${action.label}</a></li> %endfor diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/community/index.mako --- a/templates/webapps/community/index.mako +++ b/templates/webapps/community/index.mako @@ -44,6 +44,20 @@ <div class="page-container" style="padding: 10px;"><div class="toolMenu"><div class="toolSectionList"> + %if repository_metadata: + <div class="toolSectionPad"></div> + <div class="toolSectionTitle"> + Search + </div> + <div class="toolSectionBody"> + <div class="toolTitle"> + <a target="galaxy_main" href="${h.url_for( controller='repository', action='find_tools', webapp='community' )}">Search for valid tools</a> + </div> + <div class="toolTitle"> + <a target="galaxy_main" href="${h.url_for( controller='repository', action='find_workflows', webapp='community' )}">Search for workflows</a> + </div> + </div> + %endif <div class="toolSectionPad"></div><div class="toolSectionTitle"> Repositories @@ -61,11 +75,6 @@ <a target="galaxy_main" href="${h.url_for( controller='repository', action='browse_repositories', operation='my_repositories', webapp='community' )}">Browse my repositories</a></div> %endif - %if repository_metadata: - <div class="toolTitle"> - <a target="galaxy_main" href="${h.url_for( controller='repository', action='find_tools', webapp='community' )}">Search for valid tools</a> - </div> - %endif </div></div><div class="toolSectionBody"> diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/community/repository/find_tools.mako --- a/templates/webapps/community/repository/find_tools.mako +++ b/templates/webapps/community/repository/find_tools.mako @@ -14,6 +14,7 @@ <br/><br/><ul class="manage-table-actions"><li><a class="action-button" href="${h.url_for( controller='repository', action='browse_valid_repositories', webapp=webapp )}">Browse valid repositories</a></li> + <li><a class="action-button" href="${h.url_for( controller='repository', action='find_workflows', webapp=webapp )}">Search for workflows</a></li></ul> %endif diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/community/repository/find_workflows.mako --- /dev/null +++ b/templates/webapps/community/repository/find_workflows.mako @@ -0,0 +1,53 @@ +<%inherit file="/base.mako"/> +<%namespace file="/message.mako" import="render_msg" /> + +<%! + def inherit(context): + if context.get('use_panels'): + return '/webapps/community/base_panels.mako' + else: + return '/base.mako' +%> +<%inherit file="${inherit(context)}"/> + +%if webapp == 'galaxy': + <br/><br/> + <ul class="manage-table-actions"> + <li><a class="action-button" href="${h.url_for( controller='repository', action='browse_valid_repositories', webapp=webapp )}">Browse valid repositories</a></li> + <a class="action-button" href="${h.url_for( controller='repository', action='find_tools', webapp=webapp )}">Search for valid tools</a> + </ul> +%endif + +%if message: + ${render_msg( message, status )} +%endif + +<div class="toolForm"> + <div class="toolFormTitle">Search repositories for workflows</div> + <div class="toolFormBody"> + <div class="form-row"> + Enter a workflow name to find repositories that contain workflows matching the search criteria.<br/><br/> + Comma-separated strings may be entered to expand search criteria. + </div> + <div style="clear: both"></div> + <form name="find_workflows" id="find_workflows" action="${h.url_for( controller='repository', action='find_workflows', webapp=webapp )}" method="post" > + <div style="clear: both"></div> + <div class="form-row"> + <label>Workflow name:</label> + <input name="workflow_name" type="textfield" value="${workflow_name}" size="40"/> + </div> + <div style="clear: both"></div> + <div class="form-row"> + <label>Exact matches only:</label> + ${exact_matches_check_box.get_html()} + <div class="toolParamHelp" style="clear: both;"> + Check the box to match text exactly (text case doesn't matter as all strings are forced to lower case). + </div> + </div> + <div style="clear: both"></div> + <div class="form-row"> + <input type="submit" value="Search repositories"/> + </div> + </form> + </div> +</div> diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/community/repository/preview_tools_in_changeset.mako --- a/templates/webapps/community/repository/preview_tools_in_changeset.mako +++ b/templates/webapps/community/repository/preview_tools_in_changeset.mako @@ -69,6 +69,7 @@ <div popupmenu="repository-${repository.id}-popup"><a class="action-button" href="${h.url_for( controller='repository', action='browse_valid_repositories', webapp=webapp )}">Browse valid repositories</a><a class="action-button" href="${h.url_for( controller='repository', action='find_tools', webapp=webapp )}">Search for valid tools</a> + <a class="action-button" href="${h.url_for( controller='repository', action='find_workflows', webapp=webapp )}">Search for workflows</a></div></ul> diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/community/repository/tool_form.mako --- a/templates/webapps/community/repository/tool_form.mako +++ b/templates/webapps/community/repository/tool_form.mako @@ -116,6 +116,7 @@ <div popupmenu="repository-${repository.id}-popup"><a class="action-button" href="${h.url_for( controller='repository', action='browse_valid_repositories', webapp=webapp )}">Browse valid repositories</a><a class="action-button" href="${h.url_for( controller='repository', action='find_tools', webapp=webapp )}">Search for valid tools</a> + <a class="action-button" href="${h.url_for( controller='repository', action='find_workflows', webapp=webapp )}">Search for workflows</a></div> %else: %if is_new: diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/community/repository/view_repository.mako --- a/templates/webapps/community/repository/view_repository.mako +++ b/templates/webapps/community/repository/view_repository.mako @@ -99,6 +99,7 @@ <div popupmenu="repository-${repository.id}-popup"><a class="action-button" href="${h.url_for( controller='repository', action='browse_valid_repositories', webapp=webapp )}">Browse valid repositories</a><a class="action-button" href="${h.url_for( controller='repository', action='find_tools', webapp=webapp )}">Search for valid tools</a> + <a class="action-button" href="${h.url_for( controller='repository', action='find_workflows', webapp=webapp )}">Search for workflows</a></div> %endif </ul> diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/community/repository/view_tool_metadata.mako --- a/templates/webapps/community/repository/view_tool_metadata.mako +++ b/templates/webapps/community/repository/view_tool_metadata.mako @@ -39,6 +39,7 @@ <div popupmenu="repository-${repository.id}-popup"><a class="action-button" href="${h.url_for( controller='repository', action='browse_valid_repositories', webapp=webapp )}">Browse valid repositories</a><a class="action-button" href="${h.url_for( controller='repository', action='find_tools', webapp=webapp )}">Search for valid tools</a> + <a class="action-button" href="${h.url_for( controller='repository', action='find_workflows', webapp=webapp )}">Search for workflows</a></div> %else: %if is_new: diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/community/repository/view_workflow.mako --- a/templates/webapps/community/repository/view_workflow.mako +++ b/templates/webapps/community/repository/view_workflow.mako @@ -84,6 +84,7 @@ <div popupmenu="toolshed-${repository.id}-popup"><a class="action-button" href="${h.url_for( controller='repository', action='browse_valid_repositories', webapp=webapp )}">Browse valid repositories</a><a class="action-button" href="${h.url_for( controller='repository', action='find_tools', webapp=webapp )}">Search for valid tools</a> + <a class="action-button" href="${h.url_for( controller='repository', action='find_workflows', webapp=webapp )}">Search for workflows</a></div> %endif </ul> @@ -92,10 +93,12 @@ ${render_msg( message, status )} %endif -<br/> -<b>Boxes are red when tools are not available in this repository</b> -<div class="toolParamHelp" style="clear: both;"> - (this page displays SVG graphics) +<div class="toolFormTitle">${workflow_name}</div> +<div class="form-row"> + <b>Boxes are red when tools are not available in this repository</b> + <div class="toolParamHelp" style="clear: both;"> + (this page displays SVG graphics) + </div></div><br clear="left"/> diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/galaxy/admin/index.mako --- a/templates/webapps/galaxy/admin/index.mako +++ b/templates/webapps/galaxy/admin/index.mako @@ -73,7 +73,7 @@ <div class="toolSectionTitle">Tool sheds</div><div class="toolSectionBody"><div class="toolSectionBg"> - <div class="toolTitle"><a href="${h.url_for( controller='admin', action='browse_tool_sheds' )}" target="galaxy_main">Browse tool sheds</a></div> + <div class="toolTitle"><a href="${h.url_for( controller='admin', action='browse_tool_sheds' )}" target="galaxy_main">Search and browse tool sheds</a></div></div></div> %endif diff -r 216d4f09480468bb01ee56df9a393c5b740fe51d -r c528fab7ea8c89ab55cb9977d5916c72e5170546 templates/webapps/galaxy/admin/tool_sheds.mako --- a/templates/webapps/galaxy/admin/tool_sheds.mako +++ b/templates/webapps/galaxy/admin/tool_sheds.mako @@ -27,6 +27,7 @@ <div popupmenu="dataset-${shed_id}-popup"><a class="action-button" href="${h.url_for( controller='admin', action='browse_tool_shed', tool_shed_url=url )}">Browse valid repositories</a><a class="action-button" href="${h.url_for( controller='admin', action='find_tools_in_tool_shed', tool_shed_url=url )}">Search for valid tools</a> + <a class="action-button" href="${h.url_for( controller='admin', action='find_workflows_in_tool_shed', tool_shed_url=url )}">Search for workflows</a></div></td></tr> Repository URL: https://bitbucket.org/galaxy/galaxy-central/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email.