mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-21 13:50:20 +08:00
ToolForm: Add optional tool state format
This commit is contained in:
@@ -317,6 +317,11 @@ define(['utils/utils', 'mvc/ui/ui-table', 'mvc/ui/ui-misc', 'mvc/ui/ui-portlet',
|
||||
// add to field list
|
||||
this.app.field_list[id] = field;
|
||||
|
||||
// fix default value if missing
|
||||
if (input_def.default_value === undefined) {
|
||||
input_def.default_value = input_def.value;
|
||||
}
|
||||
|
||||
// create input field wrapper
|
||||
var input_element = new InputElement(this.app, {
|
||||
label : input_def.label,
|
||||
|
||||
@@ -123,14 +123,15 @@ return Backbone.Model.extend({
|
||||
}
|
||||
|
||||
// validate field value
|
||||
if (field.skip || (field.validate && !field.validate())) {
|
||||
if (self.app.options.use_defaults) {
|
||||
value = input.default_value;
|
||||
} else {
|
||||
value = null;
|
||||
}
|
||||
if (field.skip) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// validate field value
|
||||
if (field.validate && !field.validate()) {
|
||||
value = null;
|
||||
}
|
||||
|
||||
// ignore certain values
|
||||
if (input.ignore === undefined || (value !== null && input.ignore != value)) {
|
||||
// add value to submission
|
||||
|
||||
@@ -2293,7 +2293,7 @@ class Tool( object, Dictifiable ):
|
||||
job_params = job.get_param_values( trans.app, ignore_errors = True )
|
||||
job_messages = self.check_and_update_param_values( job_params, trans, update_values=False )
|
||||
tool_message = self._compare_tool_version(trans, job)
|
||||
params_to_incoming( kwd, self.inputs, job_params, trans.app )
|
||||
params_to_incoming( kwd, self.inputs, job_params, trans.app, to_html=False )
|
||||
except Exception, exception:
|
||||
trans.response.status = 500
|
||||
return { 'error': str( exception ) }
|
||||
@@ -2463,7 +2463,7 @@ class Tool( object, Dictifiable ):
|
||||
sanitize(tool_dict, 'default_value')
|
||||
|
||||
# use default value
|
||||
if not tool_dict['value']:
|
||||
if tool_dict['value'] is None:
|
||||
tool_dict['value'] = tool_dict['default_value']
|
||||
|
||||
# backup final input dictionary
|
||||
|
||||
@@ -105,7 +105,7 @@ def params_from_strings( params, param_values, app, ignore_errors=False ):
|
||||
return rval
|
||||
|
||||
|
||||
def params_to_incoming( incoming, inputs, input_values, app, name_prefix="" ):
|
||||
def params_to_incoming( incoming, inputs, input_values, app, name_prefix="", to_html=True ):
|
||||
"""
|
||||
Given a tool's parameter definition (`inputs`) and a specific set of
|
||||
parameter `input_values` objects, populate `incoming` with the html values.
|
||||
@@ -117,12 +117,15 @@ def params_to_incoming( incoming, inputs, input_values, app, name_prefix="" ):
|
||||
for i, d in enumerate( input_values[ input.name ] ):
|
||||
index = d['__index__']
|
||||
new_name_prefix = name_prefix + "%s_%d|" % ( input.name, index )
|
||||
params_to_incoming( incoming, input.inputs, d, app, new_name_prefix )
|
||||
params_to_incoming( incoming, input.inputs, d, app, new_name_prefix, to_html=to_html)
|
||||
elif isinstance( input, Conditional ):
|
||||
values = input_values[ input.name ]
|
||||
current = values["__current_case__"]
|
||||
new_name_prefix = name_prefix + input.name + "|"
|
||||
incoming[ new_name_prefix + input.test_param.name ] = values[ input.test_param.name ]
|
||||
params_to_incoming( incoming, input.cases[current].inputs, values, app, new_name_prefix )
|
||||
params_to_incoming( incoming, input.cases[current].inputs, values, app, new_name_prefix, to_html=to_html )
|
||||
else:
|
||||
incoming[ name_prefix + input.name ] = input.to_html_value( input_values.get( input.name ), app )
|
||||
value = input_values.get( input.name )
|
||||
if to_html:
|
||||
value = input.to_html_value( value, app )
|
||||
incoming[ name_prefix + input.name ] = value
|
||||
|
||||
@@ -317,6 +317,11 @@ define(['utils/utils', 'mvc/ui/ui-table', 'mvc/ui/ui-misc', 'mvc/ui/ui-portlet',
|
||||
// add to field list
|
||||
this.app.field_list[id] = field;
|
||||
|
||||
// fix default value if missing
|
||||
if (input_def.default_value === undefined) {
|
||||
input_def.default_value = input_def.value;
|
||||
}
|
||||
|
||||
// create input field wrapper
|
||||
var input_element = new InputElement(this.app, {
|
||||
label : input_def.label,
|
||||
|
||||
@@ -123,14 +123,15 @@ return Backbone.Model.extend({
|
||||
}
|
||||
|
||||
// validate field value
|
||||
if (field.skip || (field.validate && !field.validate())) {
|
||||
if (self.app.options.use_defaults) {
|
||||
value = input.default_value;
|
||||
} else {
|
||||
value = null;
|
||||
}
|
||||
if (field.skip) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// validate field value
|
||||
if (field.validate && !field.validate()) {
|
||||
value = null;
|
||||
}
|
||||
|
||||
// ignore certain values
|
||||
if (input.ignore === undefined || (value !== null && input.ignore != value)) {
|
||||
// add value to submission
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
define(["utils/utils"],function(a){return Backbone.Model.extend({initialize:function(b){this.app=b},finalize:function(g){var b=this;this.map_dict={};if(!this.app.section){return{}}g=g||{};var f={};var e={};this._iterate(this.app.section.$el,e);function d(j,i,h){f[j]=h;b.map_dict[j]=i}function c(p,s){for(var n in s){var k=s[n];if(k.input){var u=k.input;var o=p;if(p!=""){o+="|"}o+=u.name;switch(u.type){case"repeat":var j="section-";var x=[];var r=null;for(var w in k){var q=w.indexOf(j);if(q!=-1){q+=j.length;x.push(parseInt(w.substr(q)));if(!r){r=w.substr(0,q)}}}x.sort(function(y,i){return y-i});var n=0;for(var l in x){c(o+"_"+n++,k[r+x[l]])}break;case"conditional":var v=b.app.field_list[u.id].value();if(g[u.test_param.type]){v=g[u.test_param.type](v)}d(o+"|"+u.test_param.name,u.id,v);var h=b.matchCase(u,v);if(h!=-1){c(o,s[u.id+"-section-"+h])}break;case"section":c("",k);break;default:var t=b.app.field_list[u.id];if(t&&t.value){var v=t.value();if(g[u.type]){v=g[u.type](v)}if(t.skip||(t.validate&&!t.validate())){if(b.app.options.use_defaults){v=u.default_value}else{v=null}}if(u.ignore===undefined||(v!==null&&u.ignore!=v)){d(o,u.id,v);if(u.payload){for(var m in u.payload){d(m,u.id,u.payload[m])}}}}}}}}c("",e);return f},match:function(b){return this.map_dict&&this.map_dict[b]},matchCase:function(b,d){if(b.test_param.type=="boolean"){if(d=="true"){d=b.test_param.truevalue||"true"}else{d=b.test_param.falsevalue||"false"}}for(var c in b.cases){if(b.cases[c].value==d){return c}}return -1},matchModel:function(d,f){var b={};var c=this;function e(g,p){for(var m in p){var k=p[m];var n=k.name;if(g!=""){n=g+"|"+n}switch(k.type){case"repeat":for(var l in k.cache){e(n+"_"+l,k.cache[l])}break;case"conditional":var q=k.test_param&&k.test_param.value;var h=c.matchCase(k,q);if(h!=-1){e(n,k.cases[h].inputs)}break;default:var o=c.map_dict[n];if(o){f(o,k)}}}}e("",d.inputs);return b},matchResponse:function(d){var b={};var c=this;function e(l,j){if(typeof j==="string"){var g=c.map_dict[l];if(g){b[g]=j}}else{for(var h in j){var f=h;if(l!==""){var k="|";if(j instanceof Array){k="_"}f=l+k+f}e(f,j[h])}}}e("",d);return b},_iterate:function(d,e){var b=this;var c=$(d).children();c.each(function(){var h=this;var g=$(h).attr("id");if($(h).hasClass("section-row")){e[g]={};var f=b.app.input_list[g];if(f){e[g]={input:f}}b._iterate(h,e[g])}else{b._iterate(h,e)}})}})});
|
||||
define(["utils/utils"],function(a){return Backbone.Model.extend({initialize:function(b){this.app=b},finalize:function(g){var b=this;this.map_dict={};if(!this.app.section){return{}}g=g||{};var f={};var e={};this._iterate(this.app.section.$el,e);function d(j,i,h){f[j]=h;b.map_dict[j]=i}function c(p,s){for(var n in s){var k=s[n];if(k.input){var u=k.input;var o=p;if(p!=""){o+="|"}o+=u.name;switch(u.type){case"repeat":var j="section-";var x=[];var r=null;for(var w in k){var q=w.indexOf(j);if(q!=-1){q+=j.length;x.push(parseInt(w.substr(q)));if(!r){r=w.substr(0,q)}}}x.sort(function(y,i){return y-i});var n=0;for(var l in x){c(o+"_"+n++,k[r+x[l]])}break;case"conditional":var v=b.app.field_list[u.id].value();if(g[u.test_param.type]){v=g[u.test_param.type](v)}d(o+"|"+u.test_param.name,u.id,v);var h=b.matchCase(u,v);if(h!=-1){c(o,s[u.id+"-section-"+h])}break;case"section":c("",k);break;default:var t=b.app.field_list[u.id];if(t&&t.value){var v=t.value();if(g[u.type]){v=g[u.type](v)}if(t.skip){continue}if(t.validate&&!t.validate()){v=null}if(u.ignore===undefined||(v!==null&&u.ignore!=v)){d(o,u.id,v);if(u.payload){for(var m in u.payload){d(m,u.id,u.payload[m])}}}}}}}}c("",e);return f},match:function(b){return this.map_dict&&this.map_dict[b]},matchCase:function(b,d){if(b.test_param.type=="boolean"){if(d=="true"){d=b.test_param.truevalue||"true"}else{d=b.test_param.falsevalue||"false"}}for(var c in b.cases){if(b.cases[c].value==d){return c}}return -1},matchModel:function(d,f){var b={};var c=this;function e(g,p){for(var m in p){var k=p[m];var n=k.name;if(g!=""){n=g+"|"+n}switch(k.type){case"repeat":for(var l in k.cache){e(n+"_"+l,k.cache[l])}break;case"conditional":var q=k.test_param&&k.test_param.value;var h=c.matchCase(k,q);if(h!=-1){e(n,k.cases[h].inputs)}break;default:var o=c.map_dict[n];if(o){f(o,k)}}}}e("",d.inputs);return b},matchResponse:function(d){var b={};var c=this;function e(l,j){if(typeof j==="string"){var g=c.map_dict[l];if(g){b[g]=j}}else{for(var h in j){var f=h;if(l!==""){var k="|";if(j instanceof Array){k="_"}f=l+k+f}e(f,j[h])}}}e("",d);return b},_iterate:function(d,e){var b=this;var c=$(d).children();c.each(function(){var h=this;var g=$(h).attr("id");if($(h).hasClass("section-row")){e[g]={};var f=b.app.input_list[g];if(f){e[g]={input:f}}b._iterate(h,e[g])}else{b._iterate(h,e)}})}})});
|
||||
@@ -9,7 +9,7 @@
|
||||
incoming = {
|
||||
'__is_dynamic__' : False
|
||||
}
|
||||
params_to_incoming( incoming, tool.inputs, module.state.inputs, trans.app )
|
||||
params_to_incoming( incoming, tool.inputs, module.state.inputs, trans.app, to_html=False)
|
||||
self.form_config = tool.to_json(trans, **incoming)
|
||||
self.form_config.update({
|
||||
'id' : tool.id,
|
||||
|
||||
Reference in New Issue
Block a user