diff --git a/client/galaxy/scripts/mvc/ui/ui-select-default.js b/client/galaxy/scripts/mvc/ui/ui-select-default.js index fda11eed1a8..61bc233be07 100644 --- a/client/galaxy/scripts/mvc/ui/ui-select-default.js +++ b/client/galaxy/scripts/mvc/ui/ui-select-default.js @@ -208,6 +208,7 @@ var View = Backbone.View.extend({ if (this.options.searchable) { this.$select.select2('destroy'); this.$select.select2(); + this.$( '.select2-container .select2-search input' ).off( 'blur' ); } // set previous value diff --git a/client/grunt-tasks/style.js b/client/grunt-tasks/style.js index 02d1f5fed19..47be772bf8d 100644 --- a/client/grunt-tasks/style.js +++ b/client/grunt-tasks/style.js @@ -32,16 +32,19 @@ module.exports = function( grunt ){ 'history-buttons': { src: fmt( '%s/history-buttons/*.png', imagesPath ), destImg: fmt( '%s/sprite-history-buttons.png', styleDistPath ), + imgPath: fmt( 'sprite-history-buttons.png' ), destCSS: fmt( '%s/sprite-history-buttons.less', lessPath ) }, 'history-states': { src: fmt( '%s/history-states/*.png', imagesPath ), destImg: fmt( '%s/sprite-history-states.png', styleDistPath ), + imgPath: fmt( 'sprite-history-states.png' ), destCSS: fmt( '%s/sprite-history-states.less', lessPath ) }, 'fugue': { src: fmt( '%s/fugue/*.png', imagesPath ), destImg: fmt( '%s/sprite-fugue.png', styleDistPath ), + imgPath: fmt( 'sprite-fugue.png' ), destCSS: fmt( '%s/sprite-fugue.less', lessPath ) } }); diff --git a/config/galaxy.ini.sample b/config/galaxy.ini.sample index c9be8ab844a..8b956a924bf 100644 --- a/config/galaxy.ini.sample +++ b/config/galaxy.ini.sample @@ -350,8 +350,9 @@ paste.app_factory = galaxy.web.buildapp:app_factory # If your SMTP server requires SSL from the beginning of the connection # smtp_ssl = False -# On the user registration form, users may choose to join the mailing list. -# This is the address of the list they'll be subscribed to. +# On the user registration form, users may choose to join a mailing list. This +# is the address used to subscribe to the list. Uncomment and leave empty if you +# want to remove this option from the user registration form. #mailing_join_addr = galaxy-announce-join@bx.psu.edu # Datasets in an error state include a link to report the error. Those reports diff --git a/lib/galaxy/managers/workflows.py b/lib/galaxy/managers/workflows.py index d4cd0ebdc9c..7f4ef608f19 100644 --- a/lib/galaxy/managers/workflows.py +++ b/lib/galaxy/managers/workflows.py @@ -585,8 +585,8 @@ class WorkflowContentsManager(UsesAnnotations): yield step_dict def __module_from_dict( self, trans, step_dict, secure ): - """ Create a WorkflowStep model object and corrsponding module representing - type-specific functionality from the incoming dicitionary. + """ Create a WorkflowStep model object and corresponding module + representing type-specific functionality from the incoming dictionary. """ step = model.WorkflowStep() # TODO: Consider handling position inside module. diff --git a/lib/galaxy/tools/test.py b/lib/galaxy/tools/test.py index babdcb84fe2..07837255dc2 100644 --- a/lib/galaxy/tools/test.py +++ b/lib/galaxy/tools/test.py @@ -71,9 +71,8 @@ class ToolTestBuilder( object ): # No explicit value for param in test case, determine from default query_value = test_param.checked else: - # Test case supplied value, check cases against this. - query_value = string_as_bool( declared_value ) - matches_declared_value = lambda case_value: string_as_bool(case_value) == query_value + query_value = _process_bool_param_value( test_param, declared_value ) + matches_declared_value = lambda case_value: _process_bool_param_value( test_param, case_value ) == query_value elif isinstance(test_param, galaxy.tools.parameters.basic.SelectToolParameter): if declared_value is not None: # Test case supplied explicit value to check against. @@ -166,7 +165,8 @@ class ToolTestBuilder( object ): # as a new instance with value defined and hence enter # an infinite loop - hence the "case_value is not None" # check. - expanded_inputs[ case_context.for_state() ] = expanded_case_value + processed_value = _process_simple_value( value.test_param, expanded_case_value ) + expanded_inputs[ case_context.for_state() ] = processed_value elif isinstance( value, galaxy.tools.parameters.grouping.Section ): context = ParamContext( name=value.name, parent_context=parent_context ) for r_name, r_value in value.inputs.iteritems(): @@ -203,33 +203,8 @@ class ToolTestBuilder( object ): for ( name, value, extra ) in collection_def.collect_inputs(): require_file( name, value, extra, self.required_files ) processed_value = collection_def - elif isinstance( value, galaxy.tools.parameters.basic.SelectToolParameter ) and hasattr( value, 'static_options' ): - # Tests may specify values as either raw value or the value - # as they appear in the list - the API doesn't and shouldn't - # accept the text value - so we need to convert the text - # into the form value. - def process_param_value( param_value ): - found_value = False - value_for_text = None - if value.static_options: - for (text, opt_value, selected) in value.static_options: - if param_value == opt_value: - found_value = True - if value_for_text is None and param_value == text: - value_for_text = opt_value - if not found_value and value_for_text is not None: - processed_value = value_for_text - else: - processed_value = param_value - return processed_value - # Do replacement described above for lists or singleton - # values. - if isinstance( param_value, list ): - processed_value = map( process_param_value, param_value ) - else: - processed_value = process_param_value( param_value ) else: - processed_value = param_value + processed_value = _process_simple_value( value, param_value ) expanded_inputs[ context.for_state() ] = processed_value return expanded_inputs @@ -240,6 +215,54 @@ class ToolTestBuilder( object ): return require_file( name, value, extra, self.required_files ) +def _process_simple_value( param, param_value ): + if isinstance( param, galaxy.tools.parameters.basic.SelectToolParameter ) and hasattr( param, 'static_options' ): + # Tests may specify values as either raw value or the value + # as they appear in the list - the API doesn't and shouldn't + # accept the text value - so we need to convert the text + # into the form value. + def process_param_value( param_value ): + found_value = False + value_for_text = None + if param.static_options: + for (text, opt_value, selected) in param.static_options: + if param_value == opt_value: + found_value = True + if value_for_text is None and param_value == text: + value_for_text = opt_value + if not found_value and value_for_text is not None: + processed_value = value_for_text + else: + processed_value = param_value + return processed_value + # Do replacement described above for lists or singleton + # values. + if isinstance( param_value, list ): + processed_value = map( process_param_value, param_value ) + else: + processed_value = process_param_value( param_value ) + elif isinstance( param, galaxy.tools.parameters.basic.BooleanToolParameter ): + # Like above, tests may use the tool define values of simply + # true/false. + processed_value = _process_bool_param_value( param, param_value ) + else: + processed_value = param_value + return processed_value + + +def _process_bool_param_value( param, param_value ): + assert isinstance( param, galaxy.tools.parameters.basic.BooleanToolParameter ) + if isinstance( param_value, list ): + param_value = param_value[0] + if param.truevalue == param_value: + processed_value = True + elif param.falsevalue == param_value: + processed_value = False + else: + processed_value = string_as_bool( param_value ) + return processed_value + + @nottest def test_data_iter( required_files ): for fname, extra in required_files: diff --git a/static/maps/mvc/ui/ui-select-default.js.map b/static/maps/mvc/ui/ui-select-default.js.map index dd589a69328..9d1e91c997a 100644 --- a/static/maps/mvc/ui/ui-select-default.js.map +++ b/static/maps/mvc/ui/ui-select-default.js.map @@ -1 +1 @@ -{"version":3,"file":"ui-select-default.js","sources":["../../../src/mvc/ui/ui-select-default.js"],"names":["define","Utils","ButtonCheck","View","Backbone","extend","optionsDefault","id","uid","cls","error_text","empty_text","visible","wait","multiple","searchable","optional","initialize","options","self","this","merge","setElement","_template","$select","$el","find","$icon","$button","all_button","onclick","new_value","value","_availableOptions","trigger","prepend","addClass","prop","remove","update","data","undefined","hide","show","on","onchange","exists","val","select2","current","_getValue","$","isArray","length","_size","first","text","unwait","removeClass","disabled","is","enable","disable","append","_templateOption","label","key","setOnChange","callback","validate","available","each","i","e","push","attr"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ui-select-default.js","sources":["../../../src/mvc/ui/ui-select-default.js"],"names":["define","Utils","ButtonCheck","View","Backbone","extend","optionsDefault","id","uid","cls","error_text","empty_text","visible","wait","multiple","searchable","optional","initialize","options","self","this","merge","setElement","_template","$select","$el","find","$icon","$button","all_button","onclick","new_value","value","_availableOptions","trigger","prepend","addClass","prop","remove","update","data","undefined","hide","show","on","onchange","exists","val","select2","current","_getValue","$","isArray","length","_size","first","text","unwait","removeClass","disabled","is","enable","disable","append","_templateOption","label","key","off","setOnChange","callback","validate","available","each","i","e","push","attr"],"mappings":"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"} \ No newline at end of file diff --git a/static/scripts/mvc/ui/ui-select-default.js b/static/scripts/mvc/ui/ui-select-default.js index 06f3126396d..5b63052ee10 100644 --- a/static/scripts/mvc/ui/ui-select-default.js +++ b/static/scripts/mvc/ui/ui-select-default.js @@ -1,2 +1,2 @@ -define(["utils/utils","mvc/ui/ui-button-check"],function(a,b){var c=Backbone.View.extend({optionsDefault:{id:a.uid(),cls:"ui-select",error_text:"No data available",empty_text:"No selection",visible:!0,wait:!1,multiple:!1,searchable:!0,optional:!1},initialize:function(c){var d=this;this.options=a.merge(c,this.optionsDefault),this.setElement(this._template(this.options)),this.$select=this.$el.find(".select"),this.$icon=this.$el.find(".icon"),this.$button=this.$el.find(".button"),this.options.multiple&&(this.options.searchable&&(this.all_button=new b({onclick:function(){var a=[];0!==d.all_button.value()&&(a=d._availableOptions()),d.value(a),d.trigger("change")}}),this.$el.prepend(this.all_button.$el)),this.$el.addClass("ui-select-multiple"),this.$select.prop("multiple",!0),this.$button.remove()),this.update(this.options.data),void 0!==this.options.value&&this.value(this.options.value),this.options.visible||this.hide(),this.options.wait?this.wait():this.show(),this.$select.on("change",function(){d.trigger("change")}),this.on("change",function(){d.options.onchange&&d.options.onchange(this.value())})},value:function(a){void 0!==a&&(null===a&&(a="__null__"),(this.exists(a)||this.options.multiple)&&(this.$select.val(a),this.$select.select2&&this.$select.select2("val",a)));var b=this._getValue();return this.all_button&&this.all_button.value($.isArray(b)&&b.length||0,this._size()),b},first:function(){var a=this.$select.find("option").first();return a.length>0?a.val():null},text:function(){return this.$select.find("option:selected").text()},show:function(){this.unwait(),this.$select.show(),this.$el.show()},hide:function(){this.$el.hide()},wait:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-spinner fa-spin")},unwait:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-caret-down")},disabled:function(){return this.$select.is(":disabled")},enable:function(){this.$select.prop("disabled",!1)},disable:function(){this.$select.prop("disabled",!0)},update:function(a){var b=this._getValue();this.$select.find("option").remove(),!this.options.multiple&&this.options.optional&&this.$select.append(this._templateOption({value:"__null__",label:this.options.empty_text}));for(var c in a)this.$select.append(this._templateOption(a[c]));0==this._size()?(this.disable(),this.$select.append(this._templateOption({value:"__null__",label:this.options.error_text}))):this.enable(),this.options.searchable&&(this.$select.select2("destroy"),this.$select.select2()),this.value(b),null!==this._getValue()||this.options.multiple&&this.options.optional||this.value(this.first())},setOnChange:function(a){this.options.onchange=a},exists:function(a){return this.$select.find('option[value="'+a+'"]').length>0},_getValue:function(){var b=this.$select.val();return a.validate(b)?b:null},_availableOptions:function(){var a=[];return this.$select.find("option").each(function(b,c){a.push($(c).attr("value"))}),a},_size:function(){return this.$select.find("option").length},_templateOption:function(a){return'"},_template:function(a){return'
- The Galaxy team regularly reviews errors that occur in the application.
+ Usually the local Galaxy administrators regularly review errors that occur on the server.
However, if you would like to provide additional information (such as
what you were trying to do when the error occurred) and a contact e-mail
address, we will be better able to investigate your problem and get back
diff --git a/test/functional/tools/boolean_conditional.xml b/test/functional/tools/boolean_conditional.xml
new file mode 100644
index 00000000000..df699e267a8
--- /dev/null
+++ b/test/functional/tools/boolean_conditional.xml
@@ -0,0 +1,53 @@
+