mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Convert tool_form/tool_executed to mako (for performance)
This commit is contained in:
@@ -676,7 +676,7 @@ class Tool:
|
||||
# on the standard run form) or "URL" (a parameter provided by
|
||||
# external data source tools).
|
||||
if "runtool_btn" not in incoming and "URL" not in incoming:
|
||||
return "tool_form.tmpl", dict( errors={}, tool_state=state, param_values={}, incoming={} )
|
||||
return "tool_form.mako", dict( errors={}, tool_state=state, param_values={}, incoming={} )
|
||||
# Process incoming data
|
||||
if not( self.check_values ):
|
||||
# If `self.check_values` is false we don't do any checking or
|
||||
@@ -702,20 +702,20 @@ class Tool:
|
||||
# error messages
|
||||
if errors:
|
||||
error_message = "One or more errors were found in the input you provided. The specific errors are marked below."
|
||||
return "tool_form.tmpl", dict( errors=errors, tool_state=state, incoming=incoming, error_message=error_message )
|
||||
return "tool_form.mako", dict( errors=errors, tool_state=state, incoming=incoming, error_message=error_message )
|
||||
# If we've completed the last page we can execute the tool
|
||||
elif state.page == self.last_page:
|
||||
out_data = self.execute( trans, incoming=params )
|
||||
return 'tool_executed.tmpl', dict( out_data=out_data )
|
||||
return 'tool_executed.mako', dict( out_data=out_data )
|
||||
# Otherwise move on to the next page
|
||||
else:
|
||||
state.page += 1
|
||||
# Fill in the default values for the next page
|
||||
self.fill_in_new_state( trans, self.inputs_by_page[ state.page ], state.inputs )
|
||||
return 'tool_form.tmpl', dict( errors=errors, tool_state=state )
|
||||
return 'tool_form.mako', dict( errors=errors, tool_state=state )
|
||||
else:
|
||||
# Just a refresh, render the form with updated state and errors.
|
||||
return 'tool_form.tmpl', dict( errors=errors, tool_state=state )
|
||||
return 'tool_form.mako', dict( errors=errors, tool_state=state )
|
||||
|
||||
def update_state( self, trans, inputs, state, incoming, prefix="", context=None,
|
||||
update_only=False, old_errors={}, changed_dependencies={} ):
|
||||
|
||||
@@ -4,37 +4,31 @@
|
||||
<head>
|
||||
<title>Galaxy</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<link href="$h.url_for('/static/style/base.css')" rel="stylesheet" type="text/css" />
|
||||
<link href="${h.url_for('/static/style/base.css')}" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript">
|
||||
var inside_galaxy_frameset = false;
|
||||
|
||||
if ( parent.frames && parent.frames.galaxy_history )
|
||||
{
|
||||
parent.frames.galaxy_history.location.href="$h.url_for( controller='root', action='history' )";
|
||||
|
||||
if ( parent.frames && parent.frames.galaxy_history ) {
|
||||
parent.frames.galaxy_history.location.href="${h.url_for( controller='root', action='history' )}";
|
||||
inside_galaxy_frameset = true;
|
||||
}
|
||||
|
||||
if ( parent.handle_minwidth_hint )
|
||||
{
|
||||
if ( parent.handle_minwidth_hint ) {
|
||||
parent.handle_minwidth_hint( -1 );
|
||||
}
|
||||
|
||||
function main()
|
||||
{
|
||||
function main() {
|
||||
// If called from outside the galaxy frameset, redirect there
|
||||
#if $tool.options.refresh
|
||||
if ( ! inside_galaxy_frameset )
|
||||
{
|
||||
%if tool.options.refresh:
|
||||
if ( ! inside_galaxy_frameset ) {
|
||||
setTimeout( "refresh()", 1000 );
|
||||
document.getElementById( "refresh_message" ).style.display = "block";
|
||||
}
|
||||
#end if
|
||||
%endif
|
||||
}
|
||||
|
||||
function refresh()
|
||||
{
|
||||
top.location.href = '$request.base';
|
||||
function refresh() {
|
||||
top.location.href = '${request.base}';
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -43,14 +37,13 @@
|
||||
|
||||
<body onLoad="main()">
|
||||
|
||||
|
||||
<div class="donemessage">
|
||||
|
||||
<p>The following job has been succesfully added to the queue:</p>
|
||||
|
||||
#for $data in $out_data.values
|
||||
<div style="padding: 10px"><b> $data.hid: $data.name</b></div>
|
||||
#end for
|
||||
%for data in out_data.values():
|
||||
<div style="padding: 10px"><b> ${data.hid}: ${data.name}</b></div>
|
||||
%endfor
|
||||
|
||||
<p>
|
||||
You can check the status of queued jobs and view the resulting
|
||||
@@ -59,9 +52,9 @@ the status will change from 'running' to 'finished' if completed
|
||||
succesfully or 'error' if problems were encountered.
|
||||
</p>
|
||||
|
||||
#if $tool.options.refresh
|
||||
<p id="refresh_message" style="display: none;">You are now being redirected back to <a href="$request.base">Galaxy</a></div>
|
||||
#end if
|
||||
%if tool.options.refresh:
|
||||
<p id="refresh_message" style="display: none;">You are now being redirected back to <a href="${request.base}">Galaxy</a></div>
|
||||
%endif
|
||||
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,194 @@
|
||||
<!-- -->
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<%
|
||||
from galaxy.util.expressions import ExpressionContext
|
||||
%>
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Galaxy</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<link href="${h.url_for('/static/style/base.css')}" rel="stylesheet" type="text/css" />
|
||||
<script type='text/javascript' src="${h.url_for('/static/scripts/jquery.js')}"> </script>
|
||||
<script type="text/javascript">
|
||||
$( function() {
|
||||
$( "select[@refresh_on_change='true']").change( function() {
|
||||
$( "#tool_form" ).submit();
|
||||
});
|
||||
});
|
||||
%if not add_frame.debug:
|
||||
if( window.name != "galaxy_main" ) {
|
||||
location.replace( '${h.url_for( controller='root', action='index', tool_id=tool.id )}' );
|
||||
}
|
||||
%endif
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<%def name="do_inputs( inputs, tool_state, errors, prefix, other_values=None )">
|
||||
<% other_values = ExpressionContext( tool_state, other_values ) %>
|
||||
%for input_index, input in enumerate( inputs.itervalues() ):
|
||||
%if input.type == "repeat":
|
||||
<div class="repeat-group">
|
||||
<div class="form-title-row"><b>${input.title_plural}</b></div>
|
||||
<% repeat_state = tool_state[input.name] %>
|
||||
%for i in range( len( repeat_state ) ):
|
||||
<div class="repeat-group-item">
|
||||
<%
|
||||
if input.name in errors:
|
||||
rep_errors = errors[input.name][i]
|
||||
else:
|
||||
rep_errors = dict()
|
||||
index = repeat_state[i]['__index__']
|
||||
%>
|
||||
<div class="form-title-row"><b>${input.title} ${i + 1}</b></div>
|
||||
${do_inputs( input.inputs, repeat_state[i], rep_errors, prefix + input.name + "_" + str(index) + "|", other_values )}
|
||||
<div class="form-row"><input type="submit" name="${prefix}${input.name}_${index}_remove" value="Remove ${input.title} ${i+1}"></div>
|
||||
</div>
|
||||
%endfor
|
||||
<div class="form-row"><input type="submit" name="${prefix}${input.name}_add" value="Add new ${input.title}"></div>
|
||||
</div>
|
||||
%elif input.type == "conditional":
|
||||
<%
|
||||
group_state = tool_state[input.name]
|
||||
group_errors = errors.get( input.name, {} )
|
||||
current_case = group_state['__current_case__']
|
||||
group_prefix = prefix + input.name + "|"
|
||||
%>
|
||||
${row_for_param( group_prefix, input.test_param, group_state, group_errors, other_values )}
|
||||
${do_inputs( input.cases[current_case].inputs, group_state, group_errors, group_prefix, other_values )}
|
||||
%else:
|
||||
${row_for_param( prefix, input, tool_state, errors, other_values )}
|
||||
%endif
|
||||
%endfor
|
||||
</%def>
|
||||
|
||||
<%def name="row_for_param( prefix, param, parent_state, parent_errors, other_values )">
|
||||
<%
|
||||
if parent_errors.has_key( param.name ):
|
||||
cls = "form-row form-row-error"
|
||||
else:
|
||||
cls = "form-row"
|
||||
%>
|
||||
<div class="${cls}">
|
||||
<% label = param.get_label() %>
|
||||
%if label:
|
||||
<label>
|
||||
${label}:
|
||||
</label>
|
||||
%endif
|
||||
<%
|
||||
field = param.get_html_field( trans, parent_state[ param.name ], other_values )
|
||||
field.refresh_on_change = param.refresh_on_change
|
||||
%>
|
||||
<div style="float: left; width: 250px; margin-right: 10px;">${field.get_html( prefix )}</div>
|
||||
%if parent_errors.has_key( param.name ):
|
||||
<div style="float: left; color: red; font-weight: bold; padding-top: 1px; padding-bottom: 3px;">
|
||||
<div style="width: 300px;"><img style="vertical-align: middle;" src="${h.url_for('/static/style/error_small.png')}"> <span style="vertical-align: middle;">${parent_errors[param.name]}</span></div>
|
||||
</div>
|
||||
%endif
|
||||
|
||||
%if param.help:
|
||||
<div class="toolParamHelp" style="clear: both;">
|
||||
${param.help}
|
||||
</div>
|
||||
%endif
|
||||
|
||||
<div style="clear: both"></div>
|
||||
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
%if add_frame.from_noframe:
|
||||
<div class="warningmessage">
|
||||
<strong>Welcome to Galaxy</strong>
|
||||
<hr/>
|
||||
It appears that you found this tool from a link outside of Galaxy.
|
||||
If you're not familiar with Galaxy, please consider visiting the
|
||||
<a href="${h.url_for( controller='root' )}" target="_top">welcome page</a>.
|
||||
To learn more about what Galaxy is and what it can do for you, please visit
|
||||
the <a href="$add_frame.wiki_url" target="_top">Galaxy wiki</a>.
|
||||
</div>
|
||||
<br/>
|
||||
%endif
|
||||
|
||||
<div class="toolForm" id="$tool.id">
|
||||
%if tool.has_multiple_pages:
|
||||
<div class="toolFormTitle">${tool.name} (step ${tool_state.page+1} of ${tool.npages})</div>
|
||||
%else:
|
||||
<div class="toolFormTitle">${tool.name}</div>
|
||||
%endif
|
||||
<div class="toolFormBody">
|
||||
<form id="tool_form" name="tool_form" action="${h.url_for( tool.action )}" enctype="${tool.enctype}" target="${tool.target}" method="${tool.method}">
|
||||
<input type="hidden" name="tool_id" value="${tool.id}">
|
||||
<input type="hidden" name="tool_state" value="${util.object_to_string( tool_state.encode( tool, app ) )}">
|
||||
|
||||
%if tool.display_by_page[tool_state.page]:
|
||||
${trans.fill_template_string( tool.display_by_page[tool_state.page], other_values=tool.get_param_html_map( trans, tool_state.page, tool_state.inputs ) )}
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Execute">
|
||||
|
||||
%else:
|
||||
|
||||
<div style="display: none;">
|
||||
%if tool_state.page == tool.last_page:
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Execute">
|
||||
%else:
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Next step">
|
||||
%endif
|
||||
</div>
|
||||
${do_inputs( tool.inputs_by_page[ tool_state.page ], tool_state.inputs, errors, "" )}
|
||||
<div class="form-row">
|
||||
%if tool_state.page == tool.last_page:
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Execute">
|
||||
%else:
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Next step">
|
||||
%endif
|
||||
</div>
|
||||
|
||||
%endif
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
%if tool.help:
|
||||
<div class="toolHelp">
|
||||
<div class="toolHelpBody">
|
||||
%if tool.has_multiple_pages:
|
||||
${tool.help_by_page[tool_state.page]}
|
||||
%else:
|
||||
${tool.help}
|
||||
%endif
|
||||
</div>
|
||||
</div>
|
||||
%endif
|
||||
|
||||
</body>
|
||||
|
||||
<script type="text/javascript">
|
||||
$( function() {
|
||||
$( 'li > ul' ).each( function( i ) {
|
||||
if ( $( this )[0].className == 'toolParameterExpandableCollapsable' )
|
||||
{
|
||||
var parent_li = $( this ).parent( 'li' );
|
||||
var sub_ul = $( this ).remove();
|
||||
parent_li.find( 'span' ).wrapInner( '<a/>' ).find( 'a' ).click( function() {
|
||||
sub_ul.toggle();
|
||||
$( this )[0].innerHTML = ( sub_ul[0].style.display=='none' ) ? '[+]' : '[-]';
|
||||
});
|
||||
parent_li.append( sub_ul );
|
||||
}
|
||||
});
|
||||
$( 'ul ul' ).each( function(i) {
|
||||
if ( $( this )[0].className == 'toolParameterExpandableCollapsable' && this.attributes.getNamedItem( 'default_state' ).value == 'collapsed' )
|
||||
{
|
||||
$( this ).hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</html>
|
||||
@@ -1,191 +0,0 @@
|
||||
<!-- -->
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
#from galaxy.util.expressions import ExpressionContext
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Galaxy</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<link href="$h.url_for('/static/style/base.css')" rel="stylesheet" type="text/css" />
|
||||
<script type='text/javascript' src="$h.url_for('/static/scripts/jquery.js')"> </script>
|
||||
<script type="text/javascript">
|
||||
jQuery( function() {
|
||||
jQuery( "select[@refresh_on_change='true']").change( function() {
|
||||
jQuery( "#tool_form" ).submit();
|
||||
});
|
||||
});
|
||||
#if not $add_frame.debug
|
||||
if( window.name != "galaxy_main" ) {
|
||||
location.replace( '$h.url_for( controller='root', action='index', tool_id=$tool.id )' );
|
||||
}
|
||||
#end if
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
## #if $getVar( 'error_message', None )
|
||||
## <div class="errormessagesmall">$error_message</div>
|
||||
## <p></p>
|
||||
## #end if
|
||||
|
||||
#def do_inputs( $inputs, $tool_state, $errors, $prefix, $context=None )
|
||||
#set $context = ExpressionContext( $tool_state, $context )
|
||||
#for $input_index, $input in enumerate( $inputs.itervalues() )
|
||||
#if $input.type == "repeat"
|
||||
<div class="repeat-group">
|
||||
<div class="form-title-row"><b>${input.title_plural}</b></div>
|
||||
#set repeat_state = $tool_state[$input.name]
|
||||
#for i in range( len( $repeat_state ) ):
|
||||
<div class="repeat-group-item">
|
||||
#if $input.name in errors
|
||||
#set rep_errors = $errors[$input.name][$i]
|
||||
#else
|
||||
#set rep_errors = dict()
|
||||
#end if
|
||||
#set index = $repeat_state[$i]['__index__']
|
||||
<div class="form-title-row"><b>${input.title} ${i + 1}</b></div>
|
||||
$do_inputs( $input.inputs, $repeat_state[$i], $rep_errors, $prefix + $input.name + "_" + str($index) + "|", $context )
|
||||
<div class="form-row"><input type="submit" name="${prefix}${input.name}_${index}_remove" value="Remove ${input.title} ${i+1}"></div>
|
||||
</div>
|
||||
#end for
|
||||
<div class="form-row"><input type="submit" name="${prefix}${input.name}_add" value="Add new ${input.title}"></div>
|
||||
</div>
|
||||
#elif $input.type == "conditional"
|
||||
#set group_state = $tool_state[$input.name]
|
||||
#set group_errors = $errors.get( $input.name, {} )
|
||||
#set current_case = $group_state['__current_case__']
|
||||
#set group_prefix = $prefix + $input.name + "|"
|
||||
$row_for_param( $group_prefix, $input.test_param, $group_state, $group_errors, $context )
|
||||
$do_inputs( $input.cases[$current_case].inputs, $group_state, $group_errors, $group_prefix, $context )
|
||||
#else
|
||||
$row_for_param( $prefix, $input, $tool_state, $errors, $context )
|
||||
#end if
|
||||
#end for
|
||||
#end def
|
||||
|
||||
#def row_for_param( $prefix, $param, $parent_state, $parent_errors, $context )
|
||||
#if $parent_errors.has_key( $param.name ):
|
||||
#set cls = "form-row form-row-error"
|
||||
#else
|
||||
#set cls = "form-row"
|
||||
#end if
|
||||
<div class="$cls">
|
||||
#set label = $param.get_label()
|
||||
#if $label:
|
||||
<label>
|
||||
$label:
|
||||
</label>
|
||||
#end if
|
||||
#set field = $param.get_html_field( $caller, $parent_state[ $param.name ], $context )
|
||||
#set $field.refresh_on_change = $param.refresh_on_change
|
||||
<div style="float: left; width: 250px; margin-right: 10px;">$field.get_html( $prefix )</div>
|
||||
#if $parent_errors.has_key( $param.name ):
|
||||
<div style="float: left; color: red; font-weight: bold; padding-top: 1px; padding-bottom: 3px;">
|
||||
<div style="width: 300px;"><img style="vertical-align: middle;" src="$h.url_for('/static/style/error_small.png')"> <span style="vertical-align: middle;">$parent_errors[$param.name]</span></div>
|
||||
</div>
|
||||
#elif $param.help
|
||||
##<div class="toolParamHelp" style="float: right;">$param.help</div>
|
||||
#end if
|
||||
|
||||
#if $param.help
|
||||
<div class="toolParamHelp" style="clear: both;">
|
||||
$param.help
|
||||
</div>
|
||||
|
||||
#end if
|
||||
|
||||
<div style="clear: both"></div>
|
||||
|
||||
</div>
|
||||
#end def
|
||||
|
||||
#if $add_frame.from_noframe
|
||||
<div class="warningmessage">
|
||||
<strong>Welcome to Galaxy</strong>
|
||||
<hr/>
|
||||
It appears that you found this tool from a link outside of Galaxy. If you're not familiar with Galaxy, please consider visiting the <a href="$h.url_for( controller='root' )" target="_top">welcome page</a>. To learn more about what Galaxy is and what it can do for you, please visit the <a href="$add_frame.wiki_url" target="_top">Galaxy wiki</a>.
|
||||
</div>
|
||||
<br/>
|
||||
#end if
|
||||
|
||||
<div class="toolForm" id="$tool.id">
|
||||
#if $tool.has_multiple_pages
|
||||
<div class="toolFormTitle">$tool.name (step #echo $tool_state.page+1 # of $tool.npages)</div>
|
||||
#else
|
||||
<div class="toolFormTitle">$tool.name</div>
|
||||
#end if
|
||||
<div class="toolFormBody">
|
||||
<form id="tool_form" name="tool_form" action="$h.url_for( $tool.action )" enctype="$tool.enctype" target="$tool.target" method="$tool.method">
|
||||
<input type="hidden" name="tool_id" value="$tool.id">
|
||||
<input type="hidden" name="tool_state" value="$util.object_to_string( $tool_state.encode( $tool, $app ) )">
|
||||
|
||||
#if $tool.display_by_page[$tool_state.page]
|
||||
|
||||
$caller.fill_template_string( $tool.display_by_page[$tool_state.page], context=$tool.get_param_html_map( $caller, $tool_state.page, $tool_state.inputs ) )
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Execute">
|
||||
|
||||
#else
|
||||
|
||||
<div style="display: none;">
|
||||
#if $tool_state.page == $tool.last_page
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Execute">
|
||||
#else
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Next step">
|
||||
#end if
|
||||
</div>
|
||||
$do_inputs( $tool.inputs_by_page[ $tool_state.page ], $tool_state.inputs, $errors, "" )
|
||||
<div class="form-row">
|
||||
#if $tool_state.page == $tool.last_page
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Execute">
|
||||
#else
|
||||
<input type="submit" class="primary-button" name="runtool_btn" value="Next step">
|
||||
#end if
|
||||
</div>
|
||||
|
||||
#end if
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
#if $tool.help
|
||||
<div class="toolHelp">
|
||||
<div class="toolHelpBody">
|
||||
#if $tool.has_multiple_pages
|
||||
$tool.help_by_page[$tool_state.page]
|
||||
#else
|
||||
$tool.help
|
||||
#end if
|
||||
</div>
|
||||
</div>
|
||||
#end if
|
||||
|
||||
</body>
|
||||
|
||||
<script type="text/javascript">
|
||||
\$( function() {
|
||||
\$( 'li > ul' ).each( function( i ) {
|
||||
if ( \$( this )[0].className == 'toolParameterExpandableCollapsable' )
|
||||
{
|
||||
var parent_li = \$( this ).parent( 'li' );
|
||||
var sub_ul = \$( this ).remove();
|
||||
parent_li.find( 'span' ).wrapInner( '<a/>' ).find( 'a' ).click( function() {
|
||||
sub_ul.toggle();
|
||||
\$( this )[0].innerHTML = ( sub_ul[0].style.display=='none' ) ? '[+]' : '[-]';
|
||||
});
|
||||
parent_li.append( sub_ul );
|
||||
}
|
||||
});
|
||||
\$( 'ul ul' ).each( function(i) {
|
||||
if ( \$( this )[0].className == 'toolParameterExpandableCollapsable' && this.attributes.getNamedItem( 'default_state' ).value == 'collapsed' )
|
||||
{
|
||||
\$( this ).hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user