mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge branch 'inject_connected_inputs' into dev
This commit is contained in:
@@ -23,7 +23,7 @@ define([ 'utils/utils', 'utils/deferred', 'mvc/ui/ui-misc', 'mvc/form/form-view'
|
||||
_refresh: function() {
|
||||
var margin = _.reduce( this.$el.children(), function( memo, child ) {
|
||||
return memo + $( child ).outerHeight();
|
||||
}, 0 ) - this.$steps.height() + 30;
|
||||
}, 0 ) - this.$steps.height() + 25;
|
||||
this.$steps.css( 'height', $( window ).height() - margin );
|
||||
},
|
||||
|
||||
@@ -56,7 +56,9 @@ define([ 'utils/utils', 'utils/deferred', 'mvc/ui/ui-misc', 'mvc/form/form-view'
|
||||
errors : step.messages,
|
||||
initial_errors : true,
|
||||
cls : 'ui-portlet-narrow',
|
||||
hide_operations : true
|
||||
hide_operations : true,
|
||||
needs_refresh : false,
|
||||
always_refresh : step.step_type != 'tool'
|
||||
}, step );
|
||||
self.steps[ i ] = step;
|
||||
self.links[ i ] = [];
|
||||
@@ -167,7 +169,7 @@ define([ 'utils/utils', 'utils/deferred', 'mvc/ui/ui-misc', 'mvc/form/form-view'
|
||||
this._renderHistory();
|
||||
_.each ( this.steps, function( step, i ) { self._renderStep( step, i ) } );
|
||||
this.deferred.execute( function() { self.execute_btn.unwait();
|
||||
self.execute_btn.model.set( { wait_text: 'Sending...', percentage: -1 } ) } );
|
||||
self.execute_btn.model.set( { wait_text: 'Sending...', percentage: -1 } ); } );
|
||||
},
|
||||
|
||||
/** Render header */
|
||||
@@ -193,7 +195,8 @@ define([ 'utils/utils', 'utils/deferred', 'mvc/ui/ui-misc', 'mvc/form/form-view'
|
||||
this.$message.append( new Ui.Message( {
|
||||
message : 'Some tools in this workflow may have changed since it was last saved or some errors were found. The workflow may still run, but any new options will have default values. Please review the messages below to make a decision about whether the changes will affect your analysis.',
|
||||
status : 'warning',
|
||||
persistent : true
|
||||
persistent : true,
|
||||
fade : false
|
||||
} ).$el );
|
||||
}
|
||||
},
|
||||
@@ -205,9 +208,7 @@ define([ 'utils/utils', 'utils/deferred', 'mvc/ui/ui-misc', 'mvc/form/form-view'
|
||||
if ( !_.isEmpty( this.wp_inputs ) ) {
|
||||
this.wp_form = new Form({ title: '<b>Workflow Parameters</b>', inputs: this.wp_inputs, cls: 'ui-portlet-narrow', onchange: function() {
|
||||
_.each( self.wp_form.input_list, function( input_def, i ) {
|
||||
_.each( input_def.links, function( step ) {
|
||||
self._refreshStep( step );
|
||||
});
|
||||
_.each( input_def.links, function( step ) { self._refreshStep( step ) } );
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -266,17 +267,16 @@ define([ 'utils/utils', 'utils/deferred', 'mvc/ui/ui-misc', 'mvc/form/form-view'
|
||||
}, '' ) ) )
|
||||
);
|
||||
}
|
||||
self._append( self.$steps, form.$el );
|
||||
} else {
|
||||
_.each( step.inputs, function( input ) { input.flavor = 'module' } );
|
||||
form = new Form( Utils.merge({
|
||||
title : '<b>' + step.name + '</b>',
|
||||
onchange : function() { _.each( self.links[ i ], function( link ) { self._refreshStep( link ) } ) }
|
||||
}, step ) );
|
||||
self._append( self.$steps, form.$el );
|
||||
}
|
||||
self.forms[ i ] = form;
|
||||
self._refreshStep( step );
|
||||
self._append( self.$steps, form.$el );
|
||||
step.needs_refresh && self._refreshStep( step );
|
||||
self._resolve( form.deferred, promise );
|
||||
self.execute_btn.model.set( 'percentage', ( i + 1 ) * 100.0 / self.steps.length );
|
||||
Galaxy.emit.debug( 'tool-form-composite::initialize()', i + ' : Workflow step state ready.', step );
|
||||
@@ -327,6 +327,8 @@ define([ 'utils/utils', 'utils/deferred', 'mvc/ui/ui-misc', 'mvc/form/form-view'
|
||||
}
|
||||
});
|
||||
form.trigger( 'change' );
|
||||
} else {
|
||||
step.needs_refresh = true;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -42,7 +42,8 @@ define(['utils/utils',
|
||||
message : null,
|
||||
status : 'info',
|
||||
cls : '',
|
||||
persistent : false
|
||||
persistent : false,
|
||||
fade : true
|
||||
}).set( options );
|
||||
this.listenTo( this.model, 'change', this.render, this );
|
||||
this.render();
|
||||
@@ -62,7 +63,7 @@ define(['utils/utils',
|
||||
}
|
||||
if ( this.model.get( 'message' ) ) {
|
||||
this.$el.html( this.model.get( 'message' ) );
|
||||
this.$el.fadeIn();
|
||||
this.$el[ this.model.get( 'fade' ) ? 'fadeIn' : 'show' ]();
|
||||
this.timeout && window.clearTimeout( this.timeout );
|
||||
if ( !this.model.get( 'persistent' ) ) {
|
||||
var self = this;
|
||||
|
||||
@@ -3309,6 +3309,15 @@ class HistoryDatasetCollectionAssociation( DatasetCollectionInstance, UsesAnnota
|
||||
return (( type_coerce( cls.content_type, types.Unicode ) + u'-' +
|
||||
type_coerce( cls.id, types.Unicode ) ).label( 'type_id' ))
|
||||
|
||||
def to_hda_representative( self, multiple=False ):
|
||||
rval = []
|
||||
for dataset in self.collection.dataset_elements:
|
||||
rval.append( dataset.dataset_instance )
|
||||
if multiple is False:
|
||||
break
|
||||
if len( rval ) > 0:
|
||||
return rval if multiple else rval[ 0 ]
|
||||
|
||||
def to_dict( self, view='collection' ):
|
||||
dict_value = dict(
|
||||
hid=self.hid,
|
||||
|
||||
@@ -114,16 +114,6 @@ class ToolParameter( object, Dictifiable ):
|
||||
"""
|
||||
return None
|
||||
|
||||
def get_initial_value_from_history_prevent_repeats( self, trans, other_values, already_used ):
|
||||
"""
|
||||
Get the starting value for the parameter, but if fetching from the history, try
|
||||
to find a value that has not yet been used. already_used is a list of objects that
|
||||
tools must manipulate (by adding to it) to store a memento that they can use to detect
|
||||
if a value has already been chosen from the history. This is to support the capability to
|
||||
choose each dataset once
|
||||
"""
|
||||
return self.get_initial_value( trans, other_values )
|
||||
|
||||
def get_required_enctype( self ):
|
||||
"""
|
||||
If this parameter needs the form to have a specific encoding
|
||||
@@ -1202,10 +1192,12 @@ class ColumnListParameter( SelectToolParameter ):
|
||||
return []
|
||||
column_list = None
|
||||
for dataset in util.listify( dataset ):
|
||||
# Use representative dataset if a dataset collection is parsed
|
||||
if isinstance( dataset, trans.app.model.HistoryDatasetCollectionAssociation ):
|
||||
dataset = dataset.to_hda_representative()
|
||||
# Columns can only be identified if metadata is available
|
||||
if not hasattr( dataset, 'metadata' ) or not hasattr( dataset.metadata, 'columns' ) or not dataset.metadata.columns:
|
||||
return []
|
||||
|
||||
# Build up possible columns for this dataset
|
||||
this_column_list = []
|
||||
if self.numerical:
|
||||
@@ -1216,7 +1208,6 @@ class ColumnListParameter( SelectToolParameter ):
|
||||
else:
|
||||
for i in range( 0, dataset.metadata.columns ):
|
||||
this_column_list.append( str( i + 1 ) )
|
||||
|
||||
# Take the intersection of these columns with the other columns.
|
||||
if column_list is None:
|
||||
column_list = this_column_list
|
||||
@@ -1668,6 +1659,25 @@ class BaseDataToolParameter( ToolParameter ):
|
||||
self.options_filter_attribute = options_elem.get( 'options_filter_attribute', None )
|
||||
self.is_dynamic = self.options is not None
|
||||
|
||||
def get_initial_value( self, trans, other_values ):
|
||||
if trans.workflow_building_mode is workflow_building_modes.ENABLED or trans.app.name == 'tool_shed':
|
||||
return RuntimeValue()
|
||||
if self.optional:
|
||||
return None
|
||||
history = trans.history
|
||||
if history is not None:
|
||||
dataset_matcher = DatasetMatcher( trans, self, None, other_values )
|
||||
if isinstance( self, DataToolParameter ):
|
||||
for hda in reversed( history.active_datasets_children_and_roles ):
|
||||
match = dataset_matcher.hda_match( hda )
|
||||
if match:
|
||||
return match.hda
|
||||
else:
|
||||
dataset_collection_matcher = DatasetCollectionMatcher( dataset_matcher )
|
||||
for hdca in reversed( history.active_dataset_collections ):
|
||||
if dataset_collection_matcher.hdca_match( hdca, reduction=self.multiple ):
|
||||
return hdca
|
||||
|
||||
def to_json( self, value, app ):
|
||||
def single_to_json( value ):
|
||||
src = None
|
||||
@@ -1681,7 +1691,6 @@ class BaseDataToolParameter( ToolParameter ):
|
||||
src = 'hda'
|
||||
if src is not None:
|
||||
return { 'id' : app.security.encode_id( value.id ), 'src' : src }
|
||||
|
||||
if value not in [ None, '', 'None' ]:
|
||||
if isinstance( value, list ) and len( value ) > 0:
|
||||
values = [ single_to_json( v ) for v in value ]
|
||||
@@ -1830,44 +1839,6 @@ class DataToolParameter( BaseDataToolParameter ):
|
||||
for item in dataset_collector( history.active_datasets_children_and_roles, None ):
|
||||
yield item
|
||||
|
||||
def get_initial_value( self, trans, other_values ):
|
||||
return self.get_initial_value_from_history_prevent_repeats(trans, other_values, None )
|
||||
|
||||
def get_initial_value_from_history_prevent_repeats( self, trans, other_values, already_used ):
|
||||
"""
|
||||
NOTE: This is wasteful since dynamic options and dataset collection
|
||||
happens twice (here and when generating HTML).
|
||||
"""
|
||||
# Can't look at history in workflow mode. Tool shed has no histories.
|
||||
if trans.workflow_building_mode is workflow_building_modes.ENABLED or trans.app.name == 'tool_shed':
|
||||
return RuntimeValue()
|
||||
history = self._get_history( trans )
|
||||
dataset_matcher = DatasetMatcher( trans, self, None, other_values )
|
||||
if self.optional:
|
||||
return None
|
||||
most_recent_dataset = []
|
||||
|
||||
def dataset_collector( datasets ):
|
||||
for data in datasets:
|
||||
if data.visible and dataset_matcher.hda_accessible( data, check_security=False ):
|
||||
match = dataset_matcher.valid_hda_match( data, check_security=False )
|
||||
if not match or dataset_matcher.filter( match.hda ):
|
||||
continue
|
||||
data = match.hda
|
||||
most_recent_dataset.append(data)
|
||||
# Also collect children via association object
|
||||
dataset_collector( data.children )
|
||||
dataset_collector( history.active_datasets_children_and_roles )
|
||||
most_recent_dataset.reverse()
|
||||
if already_used is not None:
|
||||
for val in most_recent_dataset:
|
||||
if val is not None and val not in already_used:
|
||||
already_used.append(val)
|
||||
return val
|
||||
if len(most_recent_dataset) > 0:
|
||||
return most_recent_dataset[0]
|
||||
return ''
|
||||
|
||||
def from_json( self, value, trans, other_values={} ):
|
||||
if trans.workflow_building_mode is workflow_building_modes.ENABLED:
|
||||
return None
|
||||
|
||||
@@ -7,7 +7,7 @@ import logging
|
||||
import os
|
||||
import validation
|
||||
from galaxy.util import string_as_bool
|
||||
from galaxy.model import User
|
||||
from galaxy.model import User, HistoryDatasetAssociation, HistoryDatasetCollectionAssociation
|
||||
import galaxy.tools
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -125,10 +125,12 @@ class DataMetaFilter( Filter ):
|
||||
return dataset_value in file_value.split( self.separator )
|
||||
return file_value == dataset_value
|
||||
ref = other_values.get( self.ref_name, None )
|
||||
if isinstance( ref, HistoryDatasetCollectionAssociation ):
|
||||
ref = ref.to_hda_representative( self.multiple )
|
||||
is_data = isinstance( ref, galaxy.tools.wrappers.DatasetFilenameWrapper )
|
||||
is_data_list = isinstance( ref, galaxy.tools.wrappers.DatasetListWrapper ) or isinstance( ref, list )
|
||||
is_data_or_data_list = is_data or is_data_list
|
||||
if not isinstance( ref, self.dynamic_option.tool_param.tool.app.model.HistoryDatasetAssociation ) and not is_data_or_data_list:
|
||||
if not isinstance( ref, HistoryDatasetAssociation ) and not is_data_or_data_list:
|
||||
return [] # not a valid dataset
|
||||
|
||||
if is_data_list:
|
||||
@@ -398,7 +400,9 @@ class RemoveValueFilter( Filter ):
|
||||
value = other_values.get( self.ref_name )
|
||||
else:
|
||||
data_ref = other_values.get( self.meta_ref )
|
||||
if not isinstance( data_ref, self.dynamic_option.tool_param.tool.app.model.HistoryDatasetAssociation ) and not isinstance( data_ref, galaxy.tools.wrappers.DatasetFilenameWrapper ):
|
||||
if isinstance( data_ref, HistoryDatasetCollectionAssociation ):
|
||||
data_ref = data_ref.to_hda_representative()
|
||||
if not isinstance( data_ref, HistoryDatasetAssociation ) and not isinstance( data_ref, galaxy.tools.wrappers.DatasetFilenameWrapper ):
|
||||
return options # cannot modify options
|
||||
value = data_ref.metadata.get( self.metadata_key, None )
|
||||
return [ ( disp_name, optval, selected ) for disp_name, optval, selected in options if not compare_value( optval, value ) ]
|
||||
|
||||
@@ -1135,7 +1135,7 @@ class WorkflowController( BaseUIController, SharableMixin, UsesStoredWorkflowMix
|
||||
trans.workflow_building_mode = workflow_building_modes.USE_HISTORY
|
||||
for step in workflow.steps:
|
||||
try:
|
||||
module_injector.inject( step )
|
||||
module_injector.inject( step, steps=workflow.steps )
|
||||
except MissingToolException:
|
||||
if step.tool_id not in missing_tools:
|
||||
missing_tools.append(step.tool_id)
|
||||
|
||||
@@ -21,7 +21,7 @@ from galaxy.tools.parameters.basic import (
|
||||
from galaxy.tools.parameters.wrapped import make_dict_copy
|
||||
from galaxy.tools import DefaultToolState
|
||||
from galaxy.tools import ToolInputsNotReadyException
|
||||
from galaxy.util import odict
|
||||
from galaxy.util import odict, listify
|
||||
from galaxy.util.bunch import Bunch
|
||||
from galaxy.web.framework import formbuilder
|
||||
from tool_shed.util import common_util
|
||||
@@ -132,7 +132,7 @@ class WorkflowModule( object ):
|
||||
"""
|
||||
pass
|
||||
|
||||
def add_dummy_datasets( self, connections=None):
|
||||
def add_dummy_datasets( self, connections=None, steps=None ):
|
||||
# Replaced connected inputs with DummyDataset values.
|
||||
pass
|
||||
|
||||
@@ -417,7 +417,7 @@ class SubWorkflowModule( WorkflowModule ):
|
||||
"""
|
||||
return None
|
||||
|
||||
def add_dummy_datasets( self, connections=None):
|
||||
def add_dummy_datasets( self, connections=None, steps=None ):
|
||||
# Replaced connected inputs with DummyDataset values.
|
||||
return None
|
||||
|
||||
@@ -1139,11 +1139,10 @@ class ToolModule( WorkflowModule ):
|
||||
if flush_required:
|
||||
self.trans.sa_session.flush()
|
||||
|
||||
def add_dummy_datasets( self, connections=None):
|
||||
def add_dummy_datasets( self, connections=None, steps=None ):
|
||||
if connections:
|
||||
# Store onnections by input name
|
||||
input_connections_by_name = \
|
||||
dict( ( conn.input_name, conn ) for conn in connections )
|
||||
input_connections_by_name = dict( ( conn.input_name, conn ) for conn in connections )
|
||||
else:
|
||||
input_connections_by_name = {}
|
||||
|
||||
@@ -1151,10 +1150,24 @@ class ToolModule( WorkflowModule ):
|
||||
# are not persisted so we need to do it every time)
|
||||
def callback( input, prefixed_name, context, **kwargs ):
|
||||
if isinstance( input, DataToolParameter ) or isinstance( input, DataCollectionToolParameter ):
|
||||
if connections is None or prefixed_name in input_connections_by_name:
|
||||
if self.trans.workflow_building_mode is workflow_building_modes.USE_HISTORY:
|
||||
if connections is None or prefixed_name in input_connections_by_name:
|
||||
if steps:
|
||||
connection = input_connections_by_name[ prefixed_name ]
|
||||
output_step = next( output_step for output_step in steps if connection.output_step_id == output_step.id )
|
||||
if output_step.type.startswith( 'data' ):
|
||||
output_inputs = output_step.module.get_runtime_inputs()
|
||||
output_value = output_inputs[ 'input' ].get_initial_value( self.trans, context )
|
||||
if isinstance( input, DataToolParameter ):
|
||||
for v in listify( output_value ):
|
||||
if isinstance( v, self.trans.app.model.HistoryDatasetCollectionAssociation ):
|
||||
return v.to_hda_representative()
|
||||
return output_value
|
||||
return RuntimeValue()
|
||||
else:
|
||||
return input.get_initial_value( self.trans, context )
|
||||
elif connections is None or prefixed_name in input_connections_by_name:
|
||||
return RuntimeValue()
|
||||
elif self.trans.workflow_building_mode is workflow_building_modes.USE_HISTORY:
|
||||
return input.get_initial_value( self.trans, context )
|
||||
|
||||
visit_input_values( self.tool.inputs, self.state.inputs, callback )
|
||||
|
||||
@@ -1289,7 +1302,7 @@ class WorkflowModuleInjector(object):
|
||||
self.trans = trans
|
||||
self.allow_tool_state_corrections = allow_tool_state_corrections
|
||||
|
||||
def inject( self, step, step_args=None ):
|
||||
def inject( self, step, step_args=None, steps=None ):
|
||||
""" Pre-condition: `step` is an ORM object coming from the database, if
|
||||
supplied `step_args` is the representation of the inputs for that step
|
||||
supplied via web form.
|
||||
@@ -1319,7 +1332,7 @@ class WorkflowModuleInjector(object):
|
||||
|
||||
# Any connected input needs to have value DummyDataset (these
|
||||
# are not persisted so we need to do it every time)
|
||||
module.add_dummy_datasets( connections=step.input_connections )
|
||||
module.add_dummy_datasets( connections=step.input_connections, steps=steps )
|
||||
state, step_errors = module.compute_runtime_state( self.trans, step_args )
|
||||
step.state = state
|
||||
if step.type == "subworkflow":
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"version":3,"file":"ui-misc.js","sources":["../../../src/mvc/ui/ui-misc.js"],"names":["define","Utils","Select","Slider","Options","Drilldown","Buttons","Modal","Label","Backbone","View","extend","tagName","initialize","options","this","model","Model","setElement","$","listenTo","render","title","new_title","set","value","get","$el","removeClass","addClass","html","Message","message","status","cls","persistent","update","fadeIn","timeout","window","clearTimeout","self","setTimeout","fadeOut","Input","type","placeholder","disabled","visible","area","color","style","events","input","new_val","undefined","attr","id","css","val","removeAttr","_onchange","Hidden","append","$info","$hidden","show","hide","Button","ButtonDefault","ButtonIcon","ButtonCheck","ButtonMenu","ButtonLink","RadioButton","Checkbox","Radio"],"mappings":"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"}
|
||||
{"version":3,"file":"ui-misc.js","sources":["../../../src/mvc/ui/ui-misc.js"],"names":["define","Utils","Select","Slider","Options","Drilldown","Buttons","Modal","Label","Backbone","View","extend","tagName","initialize","options","this","model","Model","setElement","$","listenTo","render","title","new_title","set","value","get","$el","removeClass","addClass","html","Message","message","status","cls","persistent","fade","update","timeout","window","clearTimeout","self","setTimeout","fadeOut","Input","type","placeholder","disabled","visible","area","color","style","events","input","new_val","undefined","attr","id","css","val","removeAttr","_onchange","Hidden","append","$info","$hidden","show","hide","Button","ButtonDefault","ButtonIcon","ButtonCheck","ButtonMenu","ButtonLink","RadioButton","Checkbox","Radio"],"mappings":"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"}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
define(["utils/utils","mvc/ui/ui-select-default","mvc/ui/ui-slider","mvc/ui/ui-options","mvc/ui/ui-drilldown","mvc/ui/ui-buttons","mvc/ui/ui-modal"],function(a,b,c,d,e,f,g){var h=Backbone.View.extend({tagName:"label",initialize:function(a){this.model=a&&a.model||new Backbone.Model(a),this.tagName=a.tagName||this.tagName,this.setElement($("<"+this.tagName+"/>")),this.listenTo(this.model,"change",this.render,this),this.render()},title:function(a){this.model.set("title",a)},value:function(){return this.model.get("title")},render:function(){return this.$el.removeClass().addClass("ui-label").addClass(this.model.get("cls")).html(this.model.get("title")),this}}),i=Backbone.View.extend({initialize:function(a){this.model=a&&a.model||new Backbone.Model({message:null,status:"info",cls:"",persistent:!1}).set(a),this.listenTo(this.model,"change",this.render,this),this.render()},update:function(a){this.model.set(a)},render:function(){this.$el.removeClass().addClass("ui-message").addClass(this.model.get("cls"));var a=this.model.get("status");if(this.model.get("large")?this.$el.addClass(("success"==a&&"done"||"danger"==a&&"error"||a)+"messagelarge"):this.$el.addClass("alert").addClass("alert-"+a),this.model.get("message")){if(this.$el.html(this.model.get("message")),this.$el.fadeIn(),this.timeout&&window.clearTimeout(this.timeout),!this.model.get("persistent")){var b=this;this.timeout=window.setTimeout(function(){b.model.set("message","")},3e3)}}else this.$el.fadeOut();return this}}),j=Backbone.View.extend({initialize:function(a){this.model=a&&a.model||new Backbone.Model({type:"text",placeholder:"",disabled:!1,visible:!0,cls:"",area:!1,color:null,style:null}).set(a),this.tagName=this.model.get("area")?"textarea":"input",this.setElement($("<"+this.tagName+"/>")),this.listenTo(this.model,"change",this.render,this),this.render()},events:{input:"_onchange"},value:function(a){return void 0!==a&&this.model.set("value","string"==typeof a?a:""),this.model.get("value")},render:function(){return this.$el.removeClass().addClass("ui-"+this.tagName).addClass(this.model.get("cls")).addClass(this.model.get("style")).attr("id",this.model.id).attr("type",this.model.get("type")).attr("placeholder",this.model.get("placeholder")).css("color",this.model.get("color")||"").css("border-color",this.model.get("color")||""),this.model.get("value")!==this.$el.val()&&this.$el.val(this.model.get("value")),this.model.get("disabled")?this.$el.attr("disabled",!0):this.$el.removeAttr("disabled"),this.$el[this.model.get("visible")?"show":"hide"](),this},_onchange:function(){this.value(this.$el.val()),this.model.get("onchange")&&this.model.get("onchange")(this.model.get("value"))}}),k=Backbone.View.extend({initialize:function(a){this.model=a&&a.model||new Backbone.Model(a),this.setElement($("<div/>").append(this.$info=$("<div/>")).append(this.$hidden=$("<div/>"))),this.listenTo(this.model,"change",this.render,this),this.render()},value:function(a){return void 0!==a&&this.model.set("value",a),this.model.get("value")},render:function(){return this.$el.attr("id",this.model.id),this.$hidden.val(this.model.get("value")),this.model.get("info")?this.$info.show().html(this.model.get("info")):this.$info.hide(),this}});return{Button:f.ButtonDefault,ButtonIcon:f.ButtonIcon,ButtonCheck:f.ButtonCheck,ButtonMenu:f.ButtonMenu,ButtonLink:f.ButtonLink,Input:j,Label:h,Message:i,Modal:g,RadioButton:d.RadioButton,Checkbox:d.Checkbox,Radio:d.Radio,Select:b,Hidden:k,Slider:c,Drilldown:e}});
|
||||
define(["utils/utils","mvc/ui/ui-select-default","mvc/ui/ui-slider","mvc/ui/ui-options","mvc/ui/ui-drilldown","mvc/ui/ui-buttons","mvc/ui/ui-modal"],function(a,b,c,d,e,f,g){var h=Backbone.View.extend({tagName:"label",initialize:function(a){this.model=a&&a.model||new Backbone.Model(a),this.tagName=a.tagName||this.tagName,this.setElement($("<"+this.tagName+"/>")),this.listenTo(this.model,"change",this.render,this),this.render()},title:function(a){this.model.set("title",a)},value:function(){return this.model.get("title")},render:function(){return this.$el.removeClass().addClass("ui-label").addClass(this.model.get("cls")).html(this.model.get("title")),this}}),i=Backbone.View.extend({initialize:function(a){this.model=a&&a.model||new Backbone.Model({message:null,status:"info",cls:"",persistent:!1,fade:!0}).set(a),this.listenTo(this.model,"change",this.render,this),this.render()},update:function(a){this.model.set(a)},render:function(){this.$el.removeClass().addClass("ui-message").addClass(this.model.get("cls"));var a=this.model.get("status");if(this.model.get("large")?this.$el.addClass(("success"==a&&"done"||"danger"==a&&"error"||a)+"messagelarge"):this.$el.addClass("alert").addClass("alert-"+a),this.model.get("message")){if(this.$el.html(this.model.get("message")),this.$el[this.model.get("fade")?"fadeIn":"show"](),this.timeout&&window.clearTimeout(this.timeout),!this.model.get("persistent")){var b=this;this.timeout=window.setTimeout(function(){b.model.set("message","")},3e3)}}else this.$el.fadeOut();return this}}),j=Backbone.View.extend({initialize:function(a){this.model=a&&a.model||new Backbone.Model({type:"text",placeholder:"",disabled:!1,visible:!0,cls:"",area:!1,color:null,style:null}).set(a),this.tagName=this.model.get("area")?"textarea":"input",this.setElement($("<"+this.tagName+"/>")),this.listenTo(this.model,"change",this.render,this),this.render()},events:{input:"_onchange"},value:function(a){return void 0!==a&&this.model.set("value","string"==typeof a?a:""),this.model.get("value")},render:function(){return this.$el.removeClass().addClass("ui-"+this.tagName).addClass(this.model.get("cls")).addClass(this.model.get("style")).attr("id",this.model.id).attr("type",this.model.get("type")).attr("placeholder",this.model.get("placeholder")).css("color",this.model.get("color")||"").css("border-color",this.model.get("color")||""),this.model.get("value")!==this.$el.val()&&this.$el.val(this.model.get("value")),this.model.get("disabled")?this.$el.attr("disabled",!0):this.$el.removeAttr("disabled"),this.$el[this.model.get("visible")?"show":"hide"](),this},_onchange:function(){this.value(this.$el.val()),this.model.get("onchange")&&this.model.get("onchange")(this.model.get("value"))}}),k=Backbone.View.extend({initialize:function(a){this.model=a&&a.model||new Backbone.Model(a),this.setElement($("<div/>").append(this.$info=$("<div/>")).append(this.$hidden=$("<div/>"))),this.listenTo(this.model,"change",this.render,this),this.render()},value:function(a){return void 0!==a&&this.model.set("value",a),this.model.get("value")},render:function(){return this.$el.attr("id",this.model.id),this.$hidden.val(this.model.get("value")),this.model.get("info")?this.$info.show().html(this.model.get("info")):this.$info.hide(),this}});return{Button:f.ButtonDefault,ButtonIcon:f.ButtonIcon,ButtonCheck:f.ButtonCheck,ButtonMenu:f.ButtonMenu,ButtonLink:f.ButtonLink,Input:j,Label:h,Message:i,Modal:g,RadioButton:d.RadioButton,Checkbox:d.Checkbox,Radio:d.Radio,Select:b,Hidden:k,Slider:c,Drilldown:e}});
|
||||
//# sourceMappingURL=../../../maps/mvc/ui/ui-misc.js.map
|
||||
@@ -490,7 +490,7 @@ if wf_parms:
|
||||
## FIXME: Initialize in the controller
|
||||
<%
|
||||
if value is None:
|
||||
value = other_values[ param.name ] = param.get_initial_value_from_history_prevent_repeats( t, other_values, already_used )
|
||||
value = other_values[ param.name ] = param.get_initial_value( t, other_values )
|
||||
if not enable_unique_defaults:
|
||||
del already_used[:]
|
||||
%>
|
||||
@@ -521,7 +521,7 @@ if wf_parms:
|
||||
## load, fill in initial values where needed, and mark
|
||||
## all that are runtime modifiable in some way.
|
||||
<%
|
||||
value = other_values[ param.name ] = param.get_initial_value_from_history_prevent_repeats( t, other_values, already_used )
|
||||
value = other_values[ param.name ] = param.get_initial_value( t, other_values )
|
||||
if not enable_unique_defaults:
|
||||
del already_used[:]
|
||||
%>
|
||||
|
||||
@@ -97,21 +97,19 @@ class DataToolParameterTestCase( BaseParameterTestCase ):
|
||||
assert option[ 1 ] == "None"
|
||||
assert option[ 2 ] is True
|
||||
|
||||
def test_get_initial_value_prevents_repeats( self ):
|
||||
def test_get_initial_value( self ):
|
||||
hda1 = MockHistoryDatasetAssociation( name="hda1", id=1 )
|
||||
hda2 = MockHistoryDatasetAssociation( name="hda2", id=2 )
|
||||
self.stub_active_datasets( hda1, hda2 )
|
||||
already_used = []
|
||||
assert hda2 == self.param.get_initial_value_from_history_prevent_repeats( self.trans, {}, already_used )
|
||||
assert hda1 == self.param.get_initial_value_from_history_prevent_repeats( self.trans, {}, already_used )
|
||||
assert hda2 == self.param.get_initial_value( self.trans, {} )
|
||||
|
||||
def test_get_initial_value_is_empty_string_if_no_match( self ):
|
||||
def test_get_initial_value_is_none_if_no_match( self ):
|
||||
hda1 = MockHistoryDatasetAssociation( name="hda1", id=1 )
|
||||
hda1.visible = False
|
||||
hda2 = MockHistoryDatasetAssociation( name="hda2", id=2 )
|
||||
hda2.visible = False
|
||||
self.stub_active_datasets( hda1, hda2 )
|
||||
assert '' == self.param.get_initial_value( self.trans, {} )
|
||||
assert self.param.get_initial_value( self.trans, {} ) is None
|
||||
|
||||
def test_get_initial_none_when_optional( self ):
|
||||
self.optional = True
|
||||
|
||||
Reference in New Issue
Block a user