[2] | 1 | <!-- --> |
---|
| 2 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
---|
| 3 | |
---|
| 4 | <% |
---|
| 5 | from galaxy.util.expressions import ExpressionContext |
---|
| 6 | %> |
---|
| 7 | |
---|
| 8 | <html> |
---|
| 9 | |
---|
| 10 | <head> |
---|
| 11 | <title>Galaxy</title> |
---|
| 12 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
---|
| 13 | ${h.css( "base", "autocomplete_tagging" )} |
---|
| 14 | ${h.js( "jquery", "galaxy.base", "jquery.autocomplete" )} |
---|
| 15 | <script type="text/javascript"> |
---|
| 16 | $(function() { |
---|
| 17 | $(window).bind("refresh_on_change", function() { |
---|
| 18 | $(':file').each( function() { |
---|
| 19 | var file = $(this); |
---|
| 20 | var file_value = file.val(); |
---|
| 21 | if (file_value) { |
---|
| 22 | // disable file input, since we don't want to upload the file on refresh |
---|
| 23 | var file_name = $(this).attr("name"); |
---|
| 24 | file.attr( { name: 'replaced_file_input_' + file_name, disabled: true } ); |
---|
| 25 | // create a new hidden field which stores the filename and has the original name of the file input |
---|
| 26 | var new_file_input = $(document.createElement('input')); |
---|
| 27 | new_file_input.attr( { "type", "hidden", "value": file_value, "name": file_name } ); |
---|
| 28 | file.after(new_file_input); |
---|
| 29 | } |
---|
| 30 | }); |
---|
| 31 | }); |
---|
| 32 | }); |
---|
| 33 | |
---|
| 34 | %if not add_frame.debug: |
---|
| 35 | if( window.name != "galaxy_main" ) { |
---|
| 36 | location.replace( '${h.url_for( controller='root', action='index', tool_id=tool.id )}' ); |
---|
| 37 | } |
---|
| 38 | %endif |
---|
| 39 | function checkUncheckAll( name, check ) |
---|
| 40 | { |
---|
| 41 | if ( check == 0 ) |
---|
| 42 | { |
---|
| 43 | $("input[name=" + name + "][type='checkbox']").attr('checked', false); |
---|
| 44 | } |
---|
| 45 | else |
---|
| 46 | { |
---|
| 47 | $("input[name=" + name + "][type='checkbox']").attr('checked', true ); |
---|
| 48 | } |
---|
| 49 | } |
---|
| 50 | |
---|
| 51 | </script> |
---|
| 52 | </head> |
---|
| 53 | |
---|
| 54 | <body> |
---|
| 55 | <%def name="do_inputs( inputs, tool_state, errors, prefix, other_values=None )"> |
---|
| 56 | <% other_values = ExpressionContext( tool_state, other_values ) %> |
---|
| 57 | %for input_index, input in enumerate( inputs.itervalues() ): |
---|
| 58 | %if input.type == "repeat": |
---|
| 59 | <div class="repeat-group"> |
---|
| 60 | <div class="form-title-row"><b>${input.title_plural}</b></div> |
---|
| 61 | <% repeat_state = tool_state[input.name] %> |
---|
| 62 | %for i in range( len( repeat_state ) ): |
---|
| 63 | <div class="repeat-group-item"> |
---|
| 64 | <% |
---|
| 65 | if input.name in errors: |
---|
| 66 | rep_errors = errors[input.name][i] |
---|
| 67 | else: |
---|
| 68 | rep_errors = dict() |
---|
| 69 | index = repeat_state[i]['__index__'] |
---|
| 70 | %> |
---|
| 71 | <div class="form-title-row"><b>${input.title} ${i + 1}</b></div> |
---|
| 72 | ${do_inputs( input.inputs, repeat_state[i], rep_errors, prefix + input.name + "_" + str(index) + "|", other_values )} |
---|
| 73 | <div class="form-row"><input type="submit" name="${prefix}${input.name}_${index}_remove" value="Remove ${input.title} ${i+1}"></div> |
---|
| 74 | </div> |
---|
| 75 | %if rep_errors.has_key( '__index__' ): |
---|
| 76 | <div><img style="vertical-align: middle;" src="${h.url_for('/static/style/error_small.png')}"> <span style="vertical-align: middle;">${rep_errors['__index__']}</span></div> |
---|
| 77 | %endif |
---|
| 78 | %endfor |
---|
| 79 | <div class="form-row"><input type="submit" name="${prefix}${input.name}_add" value="Add new ${input.title}"></div> |
---|
| 80 | </div> |
---|
| 81 | %elif input.type == "conditional": |
---|
| 82 | <% |
---|
| 83 | group_state = tool_state[input.name] |
---|
| 84 | group_errors = errors.get( input.name, {} ) |
---|
| 85 | current_case = group_state['__current_case__'] |
---|
| 86 | group_prefix = prefix + input.name + "|" |
---|
| 87 | %> |
---|
| 88 | %if input.value_ref_in_group: |
---|
| 89 | ${row_for_param( group_prefix, input.test_param, group_state, group_errors, other_values )} |
---|
| 90 | %endif |
---|
| 91 | ${do_inputs( input.cases[current_case].inputs, group_state, group_errors, group_prefix, other_values )} |
---|
| 92 | %elif input.type == "upload_dataset": |
---|
| 93 | %if input.get_datatype( trans, other_values ).composite_type is None: #have non-composite upload appear as before |
---|
| 94 | <% |
---|
| 95 | if input.name in errors: |
---|
| 96 | rep_errors = errors[input.name][0] |
---|
| 97 | else: |
---|
| 98 | rep_errors = dict() |
---|
| 99 | %> |
---|
| 100 | ${do_inputs( input.inputs, tool_state[input.name][0], rep_errors, prefix + input.name + "_" + str( 0 ) + "|", other_values )} |
---|
| 101 | %else: |
---|
| 102 | <div class="repeat-group"> |
---|
| 103 | <div class="form-title-row"><b>${input.group_title( other_values )}</b></div> |
---|
| 104 | <% |
---|
| 105 | repeat_state = tool_state[input.name] |
---|
| 106 | %> |
---|
| 107 | %for i in range( len( repeat_state ) ): |
---|
| 108 | <div class="repeat-group-item"> |
---|
| 109 | <% |
---|
| 110 | if input.name in errors: |
---|
| 111 | rep_errors = errors[input.name][i] |
---|
| 112 | else: |
---|
| 113 | rep_errors = dict() |
---|
| 114 | index = repeat_state[i]['__index__'] |
---|
| 115 | %> |
---|
| 116 | <div class="form-title-row"><b>File Contents for ${input.title_by_index( trans, i, other_values )}</b></div> |
---|
| 117 | ${do_inputs( input.inputs, repeat_state[i], rep_errors, prefix + input.name + "_" + str(index) + "|", other_values )} |
---|
| 118 | ##<div class="form-row"><input type="submit" name="${prefix}${input.name}_${index}_remove" value="Remove ${input.title} ${i+1}"></div> |
---|
| 119 | </div> |
---|
| 120 | %endfor |
---|
| 121 | ##<div class="form-row"><input type="submit" name="${prefix}${input.name}_add" value="Add new ${input.title}"></div> |
---|
| 122 | </div> |
---|
| 123 | %endif |
---|
| 124 | %else: |
---|
| 125 | ${row_for_param( prefix, input, tool_state, errors, other_values )} |
---|
| 126 | %endif |
---|
| 127 | %endfor |
---|
| 128 | </%def> |
---|
| 129 | |
---|
| 130 | <%def name="row_for_param( prefix, param, parent_state, parent_errors, other_values )"> |
---|
| 131 | <% |
---|
| 132 | if parent_errors.has_key( param.name ): |
---|
| 133 | cls = "form-row form-row-error" |
---|
| 134 | else: |
---|
| 135 | cls = "form-row" |
---|
| 136 | %> |
---|
| 137 | <div class="${cls}"> |
---|
| 138 | <% label = param.get_label() %> |
---|
| 139 | %if label: |
---|
| 140 | <label> |
---|
| 141 | ${label}: |
---|
| 142 | </label> |
---|
| 143 | %endif |
---|
| 144 | <% |
---|
| 145 | field = param.get_html_field( trans, parent_state[ param.name ], other_values ) |
---|
| 146 | field.refresh_on_change = param.refresh_on_change |
---|
| 147 | |
---|
| 148 | # Field may contain characters submitted by user and these characters may be unicode; handle non-ascii characters gracefully. |
---|
| 149 | field_html = field.get_html( prefix ) |
---|
| 150 | if type( field_html ) is not unicode: |
---|
| 151 | field_html = unicode( field_html, 'utf-8' ) |
---|
| 152 | %> |
---|
| 153 | <div class="form-row-input">${field_html}</div> |
---|
| 154 | %if parent_errors.has_key( param.name ): |
---|
| 155 | <div class="form-row-error-message"> |
---|
| 156 | <div><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> |
---|
| 157 | </div> |
---|
| 158 | %endif |
---|
| 159 | |
---|
| 160 | %if param.help: |
---|
| 161 | <div class="toolParamHelp" style="clear: both;"> |
---|
| 162 | ${param.help} |
---|
| 163 | </div> |
---|
| 164 | %endif |
---|
| 165 | |
---|
| 166 | <div style="clear: both"></div> |
---|
| 167 | |
---|
| 168 | </div> |
---|
| 169 | </%def> |
---|
| 170 | |
---|
| 171 | %if add_frame.from_noframe: |
---|
| 172 | <div class="warningmessage"> |
---|
| 173 | <strong>Welcome to Galaxy</strong> |
---|
| 174 | <hr/> |
---|
| 175 | It appears that you found this tool from a link outside of Galaxy. |
---|
| 176 | If you're not familiar with Galaxy, please consider visiting the |
---|
| 177 | <a href="${h.url_for( controller='root' )}" target="_top">welcome page</a>. |
---|
| 178 | To learn more about what Galaxy is and what it can do for you, please visit |
---|
| 179 | the <a href="$add_frame.wiki_url" target="_top">Galaxy wiki</a>. |
---|
| 180 | </div> |
---|
| 181 | <br/> |
---|
| 182 | %endif |
---|
| 183 | |
---|
| 184 | ## handle calculating the redict url for the special case where we have nginx proxy |
---|
| 185 | ## upload and need to do url_for on the redirect portion of the tool action |
---|
| 186 | <% |
---|
| 187 | try: |
---|
| 188 | tool_url = h.url_for(tool.action) |
---|
| 189 | except AttributeError: |
---|
| 190 | assert len(tool.action) == 2 |
---|
| 191 | tool_url = tool.action[0] + h.url_for(tool.action[1]) |
---|
| 192 | %><div class="toolForm" id="${tool.id}"> |
---|
| 193 | %if tool.has_multiple_pages: |
---|
| 194 | <div class="toolFormTitle">${tool.name} (step ${tool_state.page+1} of ${tool.npages})</div> |
---|
| 195 | %else: |
---|
| 196 | <div class="toolFormTitle">${tool.name}</div> |
---|
| 197 | %endif |
---|
| 198 | <div class="toolFormBody"> |
---|
| 199 | <form id="tool_form" name="tool_form" action="${tool_url}" enctype="${tool.enctype}" target="${tool.target}" method="${tool.method}"> |
---|
| 200 | <input type="hidden" name="tool_id" value="${tool.id}"> |
---|
| 201 | <input type="hidden" name="tool_state" value="${util.object_to_string( tool_state.encode( tool, app ) )}"> |
---|
| 202 | %if tool.display_by_page[tool_state.page]: |
---|
| 203 | ${trans.fill_template_string( tool.display_by_page[tool_state.page], context=tool.get_param_html_map( trans, tool_state.page, tool_state.inputs ) )} |
---|
| 204 | <input type="submit" class="primary-button" name="runtool_btn" value="Execute"> |
---|
| 205 | %else: |
---|
| 206 | ${do_inputs( tool.inputs_by_page[ tool_state.page ], tool_state.inputs, errors, "" )} |
---|
| 207 | <div class="form-row"> |
---|
| 208 | %if tool_state.page == tool.last_page: |
---|
| 209 | <input type="submit" class="primary-button" name="runtool_btn" value="Execute"> |
---|
| 210 | %else: |
---|
| 211 | <input type="submit" class="primary-button" name="runtool_btn" value="Next step"> |
---|
| 212 | %endif |
---|
| 213 | </div> |
---|
| 214 | %endif |
---|
| 215 | </form> |
---|
| 216 | </div> |
---|
| 217 | </div> |
---|
| 218 | %if tool.help: |
---|
| 219 | <div class="toolHelp"> |
---|
| 220 | <div class="toolHelpBody"> |
---|
| 221 | <% |
---|
| 222 | if tool.has_multiple_pages: |
---|
| 223 | tool_help = tool.help_by_page[tool_state.page] |
---|
| 224 | else: |
---|
| 225 | tool_help = tool.help |
---|
| 226 | |
---|
| 227 | # Convert to unicode to display non-ascii characters. |
---|
| 228 | if type( tool_help ) is not unicode: |
---|
| 229 | tool_help = unicode( tool_help, 'utf-8') |
---|
| 230 | %> |
---|
| 231 | ${tool_help} |
---|
| 232 | </div> |
---|
| 233 | </div> |
---|
| 234 | %endif |
---|
| 235 | </body> |
---|
| 236 | |
---|
| 237 | <script type="text/javascript"> |
---|
| 238 | ##For Drilldown Parameters adds expand/collapse buttons and collapses collapsed elements |
---|
| 239 | $( function() { |
---|
| 240 | $( 'li > ul' ).each( function( i ) { |
---|
| 241 | if ( $( this )[0].className == 'toolParameterExpandableCollapsable' ) |
---|
| 242 | { |
---|
| 243 | var parent_li = $( this ).parent( 'li' ); |
---|
| 244 | var sub_ul = $( this ).remove(); |
---|
| 245 | parent_li.find( 'span' ).wrapInner( '<a/>' ).find( 'a' ).click( function() { |
---|
| 246 | sub_ul.toggle(); |
---|
| 247 | $( this )[0].innerHTML = ( sub_ul[0].style.display=='none' ) ? '[+]' : '[-]'; |
---|
| 248 | }); |
---|
| 249 | parent_li.append( sub_ul ); |
---|
| 250 | } |
---|
| 251 | }); |
---|
| 252 | $( 'ul ul' ).each( function(i) { |
---|
| 253 | if ( $( this )[0].className == 'toolParameterExpandableCollapsable' && this.attributes.getNamedItem( 'default_state' ).value == 'collapsed' ) |
---|
| 254 | { |
---|
| 255 | $( this ).hide(); |
---|
| 256 | } |
---|
| 257 | }); |
---|
| 258 | }); |
---|
| 259 | |
---|
| 260 | ##inserts the Select All / Unselect All buttons for checkboxes |
---|
| 261 | $( function() { |
---|
| 262 | $("div.checkUncheckAllPlaceholder").each( function( i ) { |
---|
| 263 | $( this )[0].innerHTML = '<a class="action-button" onclick="checkUncheckAll( \'' + this.attributes.getNamedItem( 'checkbox_name' ).value + '\', 1 );"><span>Select All</span></a> <a class="action-button" onclick="checkUncheckAll( \'' + this.attributes.getNamedItem( 'checkbox_name' ).value + '\', 0 );"><span>Unselect All</span></a>'; |
---|
| 264 | }); |
---|
| 265 | }); |
---|
| 266 | |
---|
| 267 | </script> |
---|
| 268 | |
---|
| 269 | </html> |
---|