diff --git a/lib/galaxy/web/controllers/dataset.py b/lib/galaxy/web/controllers/dataset.py index 97b60cc5726..fc10d5cb5da 100644 --- a/lib/galaxy/web/controllers/dataset.py +++ b/lib/galaxy/web/controllers/dataset.py @@ -418,17 +418,25 @@ class DatasetInterface( BaseController, UsesAnnotations, UsesHistoryDatasetAssoc return self.stored_list_grid( trans, status=status, message=message, **kwargs ) @web.expose - def imp( self, trans, id=None, **kwd ): + def imp( self, trans, dataset_id=None, **kwd ): """ Import another user's dataset via a shared URL; dataset is added to user's current history. """ msg = "" + # Set referer message. + referer = trans.request.referer + if referer is not "": + referer_message = "return to the previous page" % referer + else: + referer_message = "go to Galaxy's start page" % url_for( '/' ) + # Error checking. - if not id: - return trans.show_error_message( "You must specify an ID for a dataset to import." ) + if not dataset_id: + return trans.show_error_message( "You must specify a dataset to import. You can %s." % referer_message, use_panels=True ) # Do import. cur_history = trans.get_history( create=True ) - status, message = self._copy_datasets( trans, [ id ], [ cur_history ] ) + status, message = self._copy_datasets( trans, [ dataset_id ], [ cur_history ] ) + message = message + "
You can start using the dataset or %s." % ( url_for('/'), referer_message ) return trans.show_message( message, type=status ) @web.expose diff --git a/lib/galaxy/web/controllers/history.py b/lib/galaxy/web/controllers/history.py index b867fccca93..41711c25ba7 100644 --- a/lib/galaxy/web/controllers/history.py +++ b/lib/galaxy/web/controllers/history.py @@ -505,16 +505,27 @@ class HistoryController( BaseController, Sharable, UsesAnnotations, UsesHistory msg = "" user = trans.get_user() user_history = trans.get_history() + # Set referer message + if 'referer' in kwd: + referer = kwd['referer'] + else: + referer = trans.request.referer + if referer is not "": + referer_message = "return to the previous page" % referer + else: + referer_message = "go to Galaxy's start page" % url_for( '/' ) + + # Do import. if not id: - return trans.show_error_message( "You must specify a history you want to import." ) + return trans.show_error_message( "You must specify a history you want to import.
You can %s." % referer_message, use_panels=True ) import_history = self.get_history( trans, id, check_ownership=False ) if not import_history: - return trans.show_error_message( "The specified history does not exist.") + return trans.show_error_message( "The specified history does not exist.
You can %s." % referer_message, use_panels=True ) if not import_history.importable: - error( "The owner of this history has disabled imports via this link." ) + return trans.show_error_message( "The owner of this history has disabled imports via this link.
You can %s." % referer_message, use_panels=True ) if user: if import_history.user_id == user.id: - return trans.show_error_message( "You cannot import your own history." ) + return trans.show_error_message( "You cannot import your own history.
You can %s." % referer_message, use_panels=True ) new_history = import_history.copy( target_user=user ) new_history.name = "imported: " + new_history.name new_history.user_id = user.id @@ -530,9 +541,9 @@ class HistoryController( BaseController, Sharable, UsesAnnotations, UsesHistory trans.sa_session.flush() if not user_history.datasets: trans.set_history( new_history ) - return trans.show_ok_message( """ - History "%s" has been imported. Click here - to begin.""" % ( new_history.name, web.url_for( '/' ) ) ) + return trans.show_ok_message( + message="""History "%s" has been imported.
You can start using this history or %s.""" + % ( new_history.name, web.url_for( '/' ), referer_message ), use_panels=True ) elif not user_history or not user_history.datasets or confirm: new_history = import_history.copy() new_history.name = "imported: " + new_history.name @@ -548,13 +559,13 @@ class HistoryController( BaseController, Sharable, UsesAnnotations, UsesHistory trans.sa_session.add( new_history ) trans.sa_session.flush() trans.set_history( new_history ) - return trans.show_ok_message( """ - History "%s" has been imported. Click here - to begin.""" % ( new_history.name, web.url_for( '/' ) ) ) + return trans.show_ok_message( + message="""History "%s" has been imported.
You can start using this history or %s.""" + % ( new_history.name, web.url_for( '/' ), referer_message ), use_panels=True ) return trans.show_warn_message( """ Warning! If you import this history, you will lose your current - history. Click here to confirm. - """ % web.url_for( id=id, confirm=True ) ) + history.
You can continue and import this history or %s. + """ % ( web.url_for( id=id, confirm=True, referer=trans.request.referer ), referer_message ), use_panels=True ) @web.expose def view( self, trans, id=None ): diff --git a/lib/galaxy/web/controllers/workflow.py b/lib/galaxy/web/controllers/workflow.py index 2e794f986ff..5d241d66b4a 100644 --- a/lib/galaxy/web/controllers/workflow.py +++ b/lib/galaxy/web/controllers/workflow.py @@ -278,18 +278,28 @@ class WorkflowController( BaseController, Sharable, UsesStoredWorkflow, UsesAnno @web.expose @web.require_login( "use Galaxy workflows" ) def imp( self, trans, id, **kwargs ): + # Set referer message. + referer = trans.request.referer + if referer is not "": + referer_message = "return to the previous page" % referer + else: + referer_message = "go to Galaxy's start page" % url_for( '/' ) + + # Do import. session = trans.sa_session stored = self.get_stored_workflow( trans, id, check_ownership=False ) if stored.importable == False: - error( "The owner of this workflow has disabled imports via this link" ) + return trans.show_error_message( "The owner of this workflow has disabled imports via this link.
You can %s" % referer_message, use_panels=True ) elif stored.user == trans.user: - error( "You are already the owner of this workflow, can't import" ) + return trans.show_error_message( "You can't import this workflow because you own it.
You can %s" % referer_message, use_panels=True ) elif stored.deleted: - error( "This workflow has been deleted, can't import" ) + return trans.show_error_message( "You can't import this workflow because it has been deleted.
You can %s" % referer_message, use_panels=True ) elif session.query( model.StoredWorkflowUserShareAssociation ) \ .filter_by( user=trans.user, stored_workflow=stored ).count() > 0: - error( "This workflow is already shared with you" ) + # TODO: this is only reasonable as long as import creates a sharing relation. + return trans.show_error_message( "You can't import this workflow because it is already shared with you.
You can %s" % referer_message, use_panels=True ) else: + # TODO: Shouldn't an import provide a copy of a workflow? share = model.StoredWorkflowUserShareAssociation() share.stored_workflow = stored share.user = trans.user @@ -297,7 +307,9 @@ class WorkflowController( BaseController, Sharable, UsesStoredWorkflow, UsesAnno session.add( share ) session.flush() # Redirect to load galaxy frames. - return trans.response.send_redirect( url_for( controller='workflow' ) ) + return trans.show_ok_message( + message="""Workflow "%s" has been imported.
You can start using this workflow or %s.""" + % ( stored.name, web.url_for( controller='workflow' ), referer_message ), use_panels=True ) @web.expose @web.require_login( "use Galaxy workflows" ) diff --git a/lib/galaxy/web/framework/__init__.py b/lib/galaxy/web/framework/__init__.py index ccc2ea41ce1..6dad4bc6d5c 100644 --- a/lib/galaxy/web/framework/__init__.py +++ b/lib/galaxy/web/framework/__init__.py @@ -561,7 +561,7 @@ class UniverseWebTransaction( base.DefaultWebTransaction ): context. """ return self.template_context['message'] - def show_message( self, message, type='info', refresh_frames=[], cont=None ): + def show_message( self, message, type='info', refresh_frames=[], cont=None, use_panels=False ): """ Convenience method for displaying a simple page with a single message. @@ -571,22 +571,22 @@ class UniverseWebTransaction( base.DefaultWebTransaction ): `refresh_frames`: names of frames in the interface that should be refreshed when the message is displayed """ - return self.fill_template( "message.mako", message_type=type, message=message, refresh_frames=refresh_frames, cont=cont ) - def show_error_message( self, message, refresh_frames=[] ): + return self.fill_template( "message.mako", message_type=type, message=message, refresh_frames=refresh_frames, cont=cont, use_panels=use_panels ) + def show_error_message( self, message, refresh_frames=[], use_panels=False ): """ Convenience method for displaying an error message. See `show_message`. """ - return self.show_message( message, 'error', refresh_frames ) - def show_ok_message( self, message, refresh_frames=[] ): + return self.show_message( message, 'error', refresh_frames, use_panels=use_panels ) + def show_ok_message( self, message, refresh_frames=[], use_panels=False ): """ Convenience method for displaying an ok message. See `show_message`. """ - return self.show_message( message, 'done', refresh_frames ) - def show_warn_message( self, message, refresh_frames=[] ): + return self.show_message( message, 'done', refresh_frames, use_panels=use_panels ) + def show_warn_message( self, message, refresh_frames=[], use_panels=False ): """ Convenience method for displaying an warn message. See `show_message`. """ - return self.show_message( message, 'warning', refresh_frames ) + return self.show_message( message, 'warning', refresh_frames, use_panels=use_panels ) def show_form( self, form, header=None, template="form.mako" ): """ Convenience method for displaying a simple page with a single HTML diff --git a/templates/dataset/display.mako b/templates/dataset/display.mako index ad0bfd74676..2dd8d20c226 100644 --- a/templates/dataset/display.mako +++ b/templates/dataset/display.mako @@ -23,7 +23,8 @@ <%def name="render_item_links( data )"> ## Provide links to save data and TODO: import dataset. - save + + <%def name="render_item( data, data_to_render )"> @@ -49,11 +50,12 @@
-
+
${self.render_item_links( item )}
- - ${self.render_item_header( item )} +
+ ${self.render_item_header( item )} +
${self.render_item( item, item_data )}
diff --git a/templates/display_base.mako b/templates/display_base.mako index ac26e220aa0..71d65de7d28 100644 --- a/templates/display_base.mako +++ b/templates/display_base.mako @@ -156,11 +156,12 @@
-
+
${self.render_item_links( item )}
- - ${self.render_item_header( item )} +
+ ${self.render_item_header( item )} +
${self.render_item( item, item_data )}
diff --git a/templates/display_common.mako b/templates/display_common.mako index 3253349e569..0aa9fd5c8e5 100644 --- a/templates/display_common.mako +++ b/templates/display_common.mako @@ -128,3 +128,13 @@ %endif +## Render message. +<%def name="render_message( message, message_type )"> + %if message: +

+

${util.restore_text( message )}
+
+

+ %endif + + diff --git a/templates/grid_base.mako b/templates/grid_base.mako index d80b2674575..d9c5125016d 100644 --- a/templates/grid_base.mako +++ b/templates/grid_base.mako @@ -9,6 +9,7 @@ return '/base.mako' %> <%inherit file="${inherit(context)}"/> +<%namespace file="/display_common.mako" import="render_message" /> <%def name="init()"> <% @@ -663,23 +664,13 @@ ${self.render_grid_header( grid )} - ${self.render_grid_message( grid )} + ${render_message( message, message_type )} ${self.render_grid_table( grid )} -## Render grid message. -<%def name="render_grid_message( grid )"> - %if message: -

-

${util.restore_text( message )}
-
-

- %endif - - ## Render grid header. <%def name="render_grid_header( grid, render_title=True)">
diff --git a/templates/grid_base_async.mako b/templates/grid_base_async.mako index ef63583b9f5..515b8727fab 100644 --- a/templates/grid_base_async.mako +++ b/templates/grid_base_async.mako @@ -1,4 +1,5 @@ <%namespace file="./grid_base.mako" import="*" /> +<%namespace file="/display_common.mako" import="render_message" /> <% # Set flag to indicate whether grid has operations that operate on multiple items. @@ -12,4 +13,4 @@ ${render_grid_table_body_contents( grid, show_item_checkboxes=multiple_item_ops_ ***** ${num_pages} ***** -${render_grid_message( grid )} \ No newline at end of file +${render_message( grid )} \ No newline at end of file diff --git a/templates/history/display.mako b/templates/history/display.mako index 9a3a15b3ccd..ea812236b60 100644 --- a/templates/history/display.mako +++ b/templates/history/display.mako @@ -236,16 +236,7 @@ <%def name="render_item_links( history )"> - %if history.user != trans.get_user(): - import and start using history - %else: - ## TODO: add tooltip to indicate why this link is disabled. - import and start using history - %endif - ##${_('refresh')} - %if show_deleted: - | ${_('hide deleted')} - %endif + <%def name="render_item( history, datasets )"> diff --git a/templates/message.mako b/templates/message.mako index 84db8e099a2..c956e056bf6 100644 --- a/templates/message.mako +++ b/templates/message.mako @@ -1,5 +1,21 @@ +<%! + def inherit(context): + if context.get('use_panels'): + return '/base_panels.mako' + else: + return '/base.mako' +%> +<%inherit file="${inherit(context)}"/> <% _=n_ %> -<%inherit file="/base.mako"/> + +<%def name="init()"> +<% + self.has_left_panel=False + self.has_right_panel=False + self.active_view=active_view + self.message_box_visible=False +%> + <%def name="javascripts()"> ${parent.javascripts()} @@ -45,7 +61,23 @@ -
${_(message)}
+## +## Override methods from base.mako and base_panels.mako +## + +<%def name="center_panel()"> + ${render_large_message( message, message_type )} + + +## Render the grid's basic elements. Each of these elements can be subclassed. +<%def name="body()"> + ${render_large_message( message, message_type )} + + +## Render large message. +<%def name="render_large_message( message, message_type )"> +
${_(message)}
+ ## Render a message <%def name="render_msg( msg, messagetype='done' )"> diff --git a/templates/page/select_items_grid_async.mako b/templates/page/select_items_grid_async.mako index d425b35cabd..d21298cf1f5 100644 --- a/templates/page/select_items_grid_async.mako +++ b/templates/page/select_items_grid_async.mako @@ -1,8 +1,9 @@ <%namespace file="../grid_base.mako" import="*" /> +<%namespace file="/display_common.mako" import="render_message" /> ## Always show item checkboxes so that users can select histories. ${render_grid_table_body_contents( grid, show_item_checkboxes=True )} ***** ${num_pages} ***** -${render_grid_message( grid )} \ No newline at end of file +${render_message( message, message_type )} \ No newline at end of file diff --git a/templates/workflow/display.mako b/templates/workflow/display.mako index 6e229f021fb..92aeee12c9c 100644 --- a/templates/workflow/display.mako +++ b/templates/workflow/display.mako @@ -77,11 +77,7 @@ <%def name="render_item_links( workflow )"> - %if workflow.user != trans.get_user(): - import and start using workflow - %else: - import and start using workflow - %endif + <%def name="render_item( workflow, steps )">