From 620accaaad7c7d3244bc600298de2fa9340cc193 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Tue, 2 Jun 2015 14:42:57 -0400 Subject: [PATCH] Extend workflow editor to allow output collections in tools. Mostly test cases - because I guess I could have sworn it was going to be harder than this. --- .../scripts/galaxy.workflow_editor.canvas.js | 15 +- lib/galaxy/tools/__init__.py | 16 +- lib/galaxy/workflow/modules.py | 24 ++- .../maps/galaxy.workflow_editor.canvas.js.map | 2 +- .../scripts/galaxy.workflow_editor.canvas.js | 5 +- test/qunit/tests/workflow_editor_tests.js | 139 +++++++++++++++++- 6 files changed, 177 insertions(+), 24 deletions(-) diff --git a/client/galaxy/scripts/galaxy.workflow_editor.canvas.js b/client/galaxy/scripts/galaxy.workflow_editor.canvas.js index b146a2e04c3..95e9c04dfda 100644 --- a/client/galaxy/scripts/galaxy.workflow_editor.canvas.js +++ b/client/galaxy/scripts/galaxy.workflow_editor.canvas.js @@ -377,14 +377,15 @@ var BaseInputTerminal = Terminal.extend( { return false; }, _otherCollectionType: function( other ) { + // Effective collection type for other - base collection type + // with map over appended. var otherCollectionType = NULL_COLLECTION_TYPE_DESCRIPTION; if( other.isCollection ) { otherCollectionType = other.collectionType; - } else { - var otherMapOver = other.mapOver(); - if( otherMapOver.isCollection ) { - otherCollectionType = otherMapOver; - } + } + var otherMapOver = other.mapOver(); + if( otherMapOver.isCollection ) { + otherCollectionType = otherMapOver.append(otherCollectionType); } return otherCollectionType; }, @@ -513,7 +514,7 @@ var InputCollectionTerminal = BaseInputTerminal.extend( { } }); -var OutputCollectionTerminal = Terminal.extend( { +var OutputCollectionTerminal = OutputTerminal.extend( { initialize: function( attr ) { Terminal.prototype.initialize.call( this, attr ); this.datatypes = attr.datatypes; @@ -1413,7 +1414,7 @@ var NodeView = Backbone.View.extend( { }, addDataOutput: function( output ) { - var terminalViewClass = ( output.collection_type ) ? OutputCollectionTerminalView : OutputTerminalView; + var terminalViewClass = ( output.collection ) ? OutputCollectionTerminalView : OutputTerminalView; var terminalView = new terminalViewClass( { node: this.node, output: output diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index dce5145fdcc..5459f4a7db4 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -496,8 +496,16 @@ class Tool( object, Dictifiable ): return None @property - def produces_collections( self ): - return any( o.collection for o in self.outputs.values() ) + def produces_collections_of_unknown_type( self ): + + def output_is_dynamic_collection(output): + if not output.collection: + return False + if output.structure.collection_type: + return False + return True + + return any( map( output_is_dynamic_collection, self.outputs.values() ) ) def __get_job_tool_configuration(self, job_params=None): """Generalized method for getting this tool's job configuration. @@ -1118,8 +1126,8 @@ class Tool( object, Dictifiable ): if self.tool_type.startswith( 'data_source' ): return False - if self.produces_collections: - # Someday we will get there! + if self.produces_collections_of_unknown_type: + # Getting there... return False if hasattr( tool_source, "root"): diff --git a/lib/galaxy/workflow/modules.py b/lib/galaxy/workflow/modules.py index 1c9bb8c49ae..748579a4d38 100644 --- a/lib/galaxy/workflow/modules.py +++ b/lib/galaxy/workflow/modules.py @@ -403,7 +403,14 @@ class InputDataCollectionModule( InputModule ): return form def get_data_outputs( self ): - return [ dict( name='output', extensions=['input_collection'], collection_type=self.state[ 'collection_type' ] ) ] + return [ + dict( + name='output', + extensions=['input_collection'], + collection=True, + collection_type=self.state[ 'collection_type' ] + ) + ] class PauseModule( SimpleWorkflowModule ): @@ -655,9 +662,12 @@ class ToolModule( WorkflowModule ): data_outputs = [] data_inputs = None for name, tool_output in self.tool.outputs.iteritems(): + extra_kwds = {} if tool_output.collection: - formats = [ 'input' ] - elif tool_output.format_source != None: + extra_kwds["collection"] = True + extra_kwds["collection_type"] = tool_output.structure.collection_type + formats = [ 'input' ] # TODO: fix + elif tool_output.format_source is not None: formats = [ 'input' ] # default to special name "input" which remove restrictions on connections if data_inputs == None: data_inputs = self.get_data_inputs() @@ -674,7 +684,13 @@ class ToolModule( WorkflowModule ): format = when_elem.get( 'format', None ) if format and format not in formats: formats.append( format ) - data_outputs.append( dict( name=name, extensions=formats ) ) + data_outputs.append( + dict( + name=name, + extensions=formats, + **extra_kwds + ) + ) return data_outputs def get_runtime_input_dicts( self, step_annotation ): diff --git a/static/maps/galaxy.workflow_editor.canvas.js.map b/static/maps/galaxy.workflow_editor.canvas.js.map index c8a77a5d9fb..a1333f1531a 100644 --- a/static/maps/galaxy.workflow_editor.canvas.js.map +++ b/static/maps/galaxy.workflow_editor.canvas.js.map @@ -1 +1 @@ -{"version":3,"file":"galaxy.workflow_editor.canvas.js","sources":["../src/galaxy.workflow_editor.canvas.js"],"names":["CollectionTypeDescription","collectionType","this","isCollection","rank","split","length","Connector","handle1","handle2","canvas","dragging","inner_color","outer_color","connect","Workflow","canvas_container","id_counter","nodes","name","has_changes","active_form_has_changes","fix_delta","x","n","new_pos","Math","ceil","round_up","prebuild_node","type","title_text","tool_id","f","$","node","Node","element","title","append","css","window","scrollLeft","scrollTop","b","tmp","galaxy_config","root","form_html","buttons","addClass","click","destroy","appendTo","o","position","p","parent","width","height","left","top","prependTo","bind","workflow","activate_node","node_changed","fit_canvas_to_nodes","canvas_manager","draw_overview","e","d","po","offsetParent","offset","offsetX","y","offsetY","find","each","terminal","redraw","add_node","issubtype","child","ext_to_type","type_to_type","populate_datatype_info","data","ext_to_class_name","class_to_classes","ScrollPanel","panel","CanvasManager","canvas_viewport","overview","cv","cc","oc","ov","init_drag","extend","prototype","otherCollectionTypeDescription","NULL_COLLECTION_TYPE_DESCRIPTION","ANY_COLLECTION_TYPE_DESCRIPTION","otherCollectionType","canMatch","canMapOver","requiredSuffix","_endsWith","effectiveMapOver","effectiveCollectionType","substring","equal","toString","str","suffix","indexOf","other","TerminalMapping","Backbone","Model","initialize","attr","mapOver","terminalMapping","disableMapOver","setMapOver","collectionTypeDescription","trigger","TerminalMappingView","View","tagName","className","mapText","$el","tooltip","delay","model","_","render","show","hide","InputTerminalMappingView","events","mouseenter","mouseleave","onMouseEnter","connected","onMouseLeave","onClick","resetMapping","InputTerminalMapping","InputCollectionTerminalMapping","OutputTerminalMapping","OutputTerminalMappingView","InputCollectionTerminalMappingView","OutputCollectionTerminalMapping","OutputCollectionTerminalMappingView","Terminal","connectors","connector","push","markChanged","disconnect","splice","inArray","resetMappingIfNeeded","c","slice","destroyInvalidConnections","destroyIfInvalid","val","multiple","output_terminals","outputTerminal","isMappedOver","OutputTerminal","call","datatypes","hasConnectedOutputTerminals","hasConnectedMappedInputTerminals","mappedInputTerminals","mappedInput","noMappedInputs","hasMappedOverInputTerminals","connectedInput","BaseInputTerminal","update","input","canAccept","_inputFilled","attachable","reset","inputFilled","_collectionAttached","inputsFilled","firstOutput","isDataCollectionInput","_mappingConstraints","constraints","first","values","connectedMappedInputTerminals","inputTerminal","_producesAcceptableDatatype","t","cat_outputs","Array","concat","post_job_actions","pja_i","pja","action_type","output_name","action_arguments","other_datatype_i","other_datatype","_otherCollectionType","otherMapOver","InputTerminal","extensions","collection","other_output","thisMapOver","mappingConstraints","every","InputCollectionTerminal","collection_type","_effectiveMapOver","_effectiveCollectionType","OutputCollectionTerminal","output","newCollectionType","t1","t2","remove","document","createElement","G_vmlCanvasManager","initElement","style","zIndex","relativeLeft","relativeTop","start_x","start_y","end_x","end_y","canvas_extra","canvas_min_x","min","canvas_max_x","max","canvas_min_y","canvas_max_y","cp_shift","abs","canvas_left","canvas_top","canvas_width","canvas_height","setAttribute","start_offsets","getContext","end_offsets","num_offsets","i","inner_width","outer_width","draw_outlined_curve","offset_start","offset_end","lineCap","strokeStyle","lineWidth","beginPath","moveTo","bezierCurveTo","stroke","input_terminals","tool_errors","connectedOutputTerminals","_connectedTerminals","terminals","connectedTerminals","outputTerminals","outputName","_connectedMappedTerminals","inputTerminals","inputName","mapped_outputs","_mappedTerminals","mappedTerminals","found","k","remove_node","make_active","make_inactive","get","removeChild","appendChild","parentNode","removeClass","init_field_data","tool_state","annotation","label","uuid","workflow_outputs","nodeView","NodeView","el","data_inputs","addDataInput","data_outputs","addRule","addDataOutput","update_field_data","pja_in","parseJSON","renderToolErrors","old_body","new_body","newInputsDiv","newTerminalViews","terminalView","difference","terminalViews","unusedView","updateDataOutput","replaceWith","error","text","html","id","active_node","clear_active_node","remove_all","wf","v","rectify_workflow_outputs","using_workflow_outputs","has_existing_pjas","pja_id","pjas_to_rem","pja_name","ot_id","ot","create_pja","wo_name","reload_active_node","to_simple","input_connections","cons","act","node_data","steps","from_simple","max_id","step","parseInt","isArray","l","other_node","undefined","callout","check_changes_in_active_form","submit","callback","__NEWTOOLFORM__","show_tool_form","show_form_for_tool","force","layout","n_pred","successors","j","node_ids_by_level","level_parents","pred_k","sk","all_nodes","h_pad","v_pad","ids","sort","a","max_width","bounds_for_all_nodes","xmin","xmax","ymin","ymax","bounds","xmin_delta","ymin_delta","children","options","output_width","tool_body","outputTerminlViews","updateMaxWidth","newWidth","body","skipResize","terminalViewClass","input_type","InputCollectionTerminalView","InputTerminalView","terminalElement","inputView","DataInputView","ib","prepend","terminalElements","OutputCollectionTerminalView","OutputTerminalView","outputView","DataOutputView","display","outerWidth","OutputCalloutView","view","margin","right","resetImage","hoverImage","isInput","join","calloutView","hover","detach","TerminalView","setupMappingView","terminalMappingClass","terminalMappingView","terminalMappingViewClass","BaseInputTerminalView","terminalForInput","dropinit","dropstart","dropend","drop","onDropInit","drag","hasClass","onDropStart","proxy","onDropEnd","onDrop","onHover","padding-right","BaseOutputTerminalView","terminalForOutput","dragstart","dragend","onDrag","onmove","update_viewport_overlay","scroll_panel","test","onDragStart","available","h","onDragEnd","stop","clearTimeout","timeout","pageX","pageY","panel_pos","panel_w","panel_h","viewport","viewport_w","viewport_h","viewport_offset","min_x","min_y","max_x","max_y","p_min_x","p_min_y","p_max_x","p_max_y","moved","close_dist","nudge","setTimeout","self","move","background-position-x","background-position-y","x_adjust","y_adjust","in_w","in_h","o_w","o_h","new_x_offset","new_y_offset","op","opo","new_size","cc_pos","shift_h","shift_w","canvas_el","size","cv_w","cv_h","fillStyle","node_element","w","fillRect","strokeRect"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"galaxy.workflow_editor.canvas.js","sources":["../src/galaxy.workflow_editor.canvas.js"],"names":["CollectionTypeDescription","collectionType","this","isCollection","rank","split","length","Connector","handle1","handle2","canvas","dragging","inner_color","outer_color","connect","Workflow","canvas_container","id_counter","nodes","name","has_changes","active_form_has_changes","fix_delta","x","n","new_pos","Math","ceil","round_up","prebuild_node","type","title_text","tool_id","f","$","node","Node","element","title","append","css","window","scrollLeft","scrollTop","b","tmp","galaxy_config","root","form_html","buttons","addClass","click","destroy","appendTo","o","position","p","parent","width","height","left","top","prependTo","bind","workflow","activate_node","node_changed","fit_canvas_to_nodes","canvas_manager","draw_overview","e","d","po","offsetParent","offset","offsetX","y","offsetY","find","each","terminal","redraw","add_node","issubtype","child","ext_to_type","type_to_type","populate_datatype_info","data","ext_to_class_name","class_to_classes","ScrollPanel","panel","CanvasManager","canvas_viewport","overview","cv","cc","oc","ov","init_drag","extend","prototype","otherCollectionTypeDescription","NULL_COLLECTION_TYPE_DESCRIPTION","ANY_COLLECTION_TYPE_DESCRIPTION","otherCollectionType","canMatch","canMapOver","requiredSuffix","_endsWith","effectiveMapOver","effectiveCollectionType","substring","equal","toString","str","suffix","indexOf","other","TerminalMapping","Backbone","Model","initialize","attr","mapOver","terminalMapping","disableMapOver","setMapOver","collectionTypeDescription","trigger","TerminalMappingView","View","tagName","className","mapText","$el","tooltip","delay","model","_","render","show","hide","InputTerminalMappingView","events","mouseenter","mouseleave","onMouseEnter","connected","onMouseLeave","onClick","resetMapping","InputTerminalMapping","InputCollectionTerminalMapping","OutputTerminalMapping","OutputTerminalMappingView","InputCollectionTerminalMappingView","OutputCollectionTerminalMapping","OutputCollectionTerminalMappingView","Terminal","connectors","connector","push","markChanged","disconnect","splice","inArray","resetMappingIfNeeded","c","slice","destroyInvalidConnections","destroyIfInvalid","val","multiple","output_terminals","outputTerminal","isMappedOver","OutputTerminal","call","datatypes","hasConnectedOutputTerminals","hasConnectedMappedInputTerminals","mappedInputTerminals","mappedInput","noMappedInputs","hasMappedOverInputTerminals","connectedInput","BaseInputTerminal","update","input","canAccept","_inputFilled","attachable","reset","inputFilled","_collectionAttached","inputsFilled","firstOutput","_mappingConstraints","constraints","first","values","connectedMappedInputTerminals","inputTerminal","_producesAcceptableDatatype","t","cat_outputs","Array","concat","post_job_actions","pja_i","pja","action_type","output_name","action_arguments","other_datatype_i","other_datatype","_otherCollectionType","otherMapOver","InputTerminal","extensions","collection","other_output","thisMapOver","mappingConstraints","every","InputCollectionTerminal","collection_type","_effectiveMapOver","_effectiveCollectionType","OutputCollectionTerminal","output","newCollectionType","t1","t2","remove","document","createElement","G_vmlCanvasManager","initElement","style","zIndex","relativeLeft","relativeTop","start_x","start_y","end_x","end_y","canvas_extra","canvas_min_x","min","canvas_max_x","max","canvas_min_y","canvas_max_y","cp_shift","abs","canvas_left","canvas_top","canvas_width","canvas_height","setAttribute","start_offsets","getContext","end_offsets","num_offsets","i","inner_width","outer_width","draw_outlined_curve","offset_start","offset_end","lineCap","strokeStyle","lineWidth","beginPath","moveTo","bezierCurveTo","stroke","input_terminals","tool_errors","connectedOutputTerminals","_connectedTerminals","terminals","connectedTerminals","outputTerminals","outputName","_connectedMappedTerminals","inputTerminals","inputName","mapped_outputs","_mappedTerminals","mappedTerminals","found","k","remove_node","make_active","make_inactive","get","removeChild","appendChild","parentNode","removeClass","init_field_data","tool_state","annotation","label","uuid","workflow_outputs","nodeView","NodeView","el","data_inputs","addDataInput","data_outputs","addRule","addDataOutput","update_field_data","pja_in","parseJSON","renderToolErrors","old_body","new_body","newInputsDiv","newTerminalViews","terminalView","difference","terminalViews","unusedView","updateDataOutput","replaceWith","error","text","html","id","active_node","clear_active_node","remove_all","wf","v","rectify_workflow_outputs","using_workflow_outputs","has_existing_pjas","pja_id","pjas_to_rem","pja_name","ot_id","ot","create_pja","wo_name","reload_active_node","to_simple","input_connections","cons","act","node_data","steps","from_simple","max_id","step","parseInt","isArray","l","other_node","undefined","callout","check_changes_in_active_form","submit","callback","__NEWTOOLFORM__","show_tool_form","show_form_for_tool","force","layout","n_pred","successors","j","node_ids_by_level","level_parents","pred_k","sk","all_nodes","h_pad","v_pad","ids","sort","a","max_width","bounds_for_all_nodes","xmin","xmax","ymin","ymax","bounds","xmin_delta","ymin_delta","children","options","output_width","tool_body","outputTerminlViews","updateMaxWidth","newWidth","body","skipResize","terminalViewClass","input_type","InputCollectionTerminalView","InputTerminalView","terminalElement","inputView","DataInputView","ib","prepend","terminalElements","OutputCollectionTerminalView","OutputTerminalView","outputView","DataOutputView","display","outerWidth","OutputCalloutView","view","margin","right","resetImage","hoverImage","isInput","join","calloutView","hover","detach","TerminalView","setupMappingView","terminalMappingClass","terminalMappingView","terminalMappingViewClass","BaseInputTerminalView","terminalForInput","dropinit","dropstart","dropend","drop","onDropInit","drag","hasClass","onDropStart","proxy","onDropEnd","onDrop","onHover","padding-right","BaseOutputTerminalView","terminalForOutput","dragstart","dragend","onDrag","onmove","update_viewport_overlay","scroll_panel","test","onDragStart","available","h","onDragEnd","stop","clearTimeout","timeout","pageX","pageY","panel_pos","panel_w","panel_h","viewport","viewport_w","viewport_h","viewport_offset","min_x","min_y","max_x","max_y","p_min_x","p_min_y","p_max_x","p_max_y","moved","close_dist","nudge","setTimeout","self","move","background-position-x","background-position-y","x_adjust","y_adjust","in_w","in_h","o_w","o_h","new_x_offset","new_y_offset","op","opo","new_size","cc_pos","shift_h","shift_w","canvas_el","size","cv_w","cv_h","fillStyle","node_element","w","fillRect","strokeRect"],"mappings":"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"} \ No newline at end of file diff --git a/static/scripts/galaxy.workflow_editor.canvas.js b/static/scripts/galaxy.workflow_editor.canvas.js index 74da3495189..62fff6c49e2 100644 --- a/static/scripts/galaxy.workflow_editor.canvas.js +++ b/static/scripts/galaxy.workflow_editor.canvas.js @@ -1,4 +1,3 @@ -function CollectionTypeDescription(a){this.collectionType=a,this.isCollection=!0,this.rank=a.split(":").length}function Connector(a,b){this.canvas=null,this.dragging=!1,this.inner_color="#FFFFFF",this.outer_color="#D8B365",a&&b&&this.connect(a,b)}function Workflow(a){this.canvas_container=a,this.id_counter=0,this.nodes={},this.name=null,this.has_changes=!1,this.active_form_has_changes=!1}function fix_delta(a,b){return b>a||a>3*b?(new_pos=(Math.ceil(a%b/b)+1)*b,-(a-new_pos)):0}function round_up(a,b){return Math.ceil(a/b)*b}function prebuild_node(a,b,c){var d=$("
"),e=new Node({element:d});e.type=a,"tool"==a&&(e.tool_id=c);var f=$("
"+b+"
");d.append(f),d.css("left",$(window).scrollLeft()+20),d.css("top",$(window).scrollTop()+20);var g=$("
"),h="
loading tool info...
";g.append(h),e.form_html=h,d.append(g);var i=$("
");i.append($("
").addClass("fa-icon-button fa fa-times").click(function(){e.destroy()})),d.appendTo("#canvas-container");var j=$("#canvas-container").position(),k=$("#canvas-container").parent(),l=d.width(),m=d.height();return d.css({left:-j.left+k.width()/2-l/2,top:-j.top+k.height()/2-m/2}),i.prependTo(f),l+=i.width()+10,d.css("width",l),$(d).bind("dragstart",function(){workflow.activate_node(e)}).bind("dragend",function(){workflow.node_changed(this),workflow.fit_canvas_to_nodes(),canvas_manager.draw_overview()}).bind("dragclickonly",function(){workflow.activate_node(e)}).bind("drag",function(a,b){var c=$(this).offsetParent().offset(),d=b.offsetX-c.left,e=b.offsetY-c.top;$(this).css({left:d,top:e}),$(this).find(".terminal").each(function(){this.terminal.redraw()})}),e}function add_node(a,b,c){var d=prebuild_node(a,b,c);return workflow.add_node(d),workflow.fit_canvas_to_nodes(),canvas_manager.draw_overview(),workflow.activate_node(d),d}function issubtype(a,b){return a=ext_to_type[a],b=ext_to_type[b],type_to_type[a]&&b in type_to_type[a]}function populate_datatype_info(a){ext_to_type=a.ext_to_class_name,type_to_type=a.class_to_classes}function ScrollPanel(a){this.panel=a}function CanvasManager(a,b){this.cv=a,this.cc=this.cv.find("#canvas-container"),this.oc=b.find("#overview-canvas"),this.ov=b.find("#overview-viewport"),this.init_drag()}$.extend(CollectionTypeDescription.prototype,{append:function(a){return a===NULL_COLLECTION_TYPE_DESCRIPTION?this:a===ANY_COLLECTION_TYPE_DESCRIPTION?otherCollectionType:new CollectionTypeDescription(this.collectionType+":"+a.collectionType)},canMatch:function(a){return a===NULL_COLLECTION_TYPE_DESCRIPTION?!1:a===ANY_COLLECTION_TYPE_DESCRIPTION?!0:a.collectionType==this.collectionType},canMapOver:function(a){if(a===NULL_COLLECTION_TYPE_DESCRIPTION)return!1;if(a===ANY_COLLECTION_TYPE_DESCRIPTION)return!1;if(this.rank<=a.rank)return!1;var b=a.collectionType;return this._endsWith(this.collectionType,b)},effectiveMapOver:function(a){var b=a.collectionType,c=this.collectionType.substring(0,this.collectionType.length-b.length-1);return new CollectionTypeDescription(c)},equal:function(a){return a.collectionType==this.collectionType},toString:function(){return"CollectionType["+this.collectionType+"]"},_endsWith:function(a,b){return-1!==a.indexOf(b,a.length-b.length)}}),NULL_COLLECTION_TYPE_DESCRIPTION={isCollection:!1,canMatch:function(){return!1},canMapOver:function(){return!1},toString:function(){return"NullCollectionType[]"},append:function(a){return a},equal:function(a){return a===this}},ANY_COLLECTION_TYPE_DESCRIPTION={isCollection:!0,canMatch:function(a){return NULL_COLLECTION_TYPE_DESCRIPTION!==a},canMapOver:function(){return!1},toString:function(){return"AnyCollectionType[]"},append:function(){throw"Cannot append to ANY_COLLECTION_TYPE_DESCRIPTION"},equal:function(a){return a===this}};var TerminalMapping=Backbone.Model.extend({initialize:function(a){this.mapOver=a.mapOver||NULL_COLLECTION_TYPE_DESCRIPTION,this.terminal=a.terminal,this.terminal.terminalMapping=this},disableMapOver:function(){this.setMapOver(NULL_COLLECTION_TYPE_DESCRIPTION)},setMapOver:function(a){this.mapOver=a,this.trigger("change")}}),TerminalMappingView=Backbone.View.extend({tagName:"div",className:"fa-icon-button fa fa-folder-o",initialize:function(){var a="Run tool in parallel over collection";this.$el.tooltip({delay:500,title:a}),this.model.bind("change",_.bind(this.render,this))},render:function(){this.model.mapOver.isCollection?this.$el.show():this.$el.hide()}}),InputTerminalMappingView=TerminalMappingView.extend({events:{click:"onClick",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave"},onMouseEnter:function(){var a=this.model;!a.terminal.connected()&&a.mapOver.isCollection&&this.$el.css("color","red")},onMouseLeave:function(){this.$el.css("color","black")},onClick:function(){var a=this.model;!a.terminal.connected()&&a.mapOver.isCollection&&a.terminal.resetMapping()}}),InputTerminalMapping=TerminalMapping,InputCollectionTerminalMapping=TerminalMapping,OutputTerminalMapping=TerminalMapping,OutputTerminalMappingView=TerminalMappingView,InputCollectionTerminalMappingView=InputTerminalMappingView,OutputCollectionTerminalMapping=TerminalMapping,OutputCollectionTerminalMappingView=TerminalMappingView,Terminal=Backbone.Model.extend({initialize:function(a){this.element=a.element,this.connectors=[]},connect:function(a){this.connectors.push(a),this.node&&this.node.markChanged()},disconnect:function(a){this.connectors.splice($.inArray(a,this.connectors),1),this.node&&(this.node.markChanged(),this.resetMappingIfNeeded())},redraw:function(){$.each(this.connectors,function(a,b){b.redraw()})},destroy:function(){$.each(this.connectors.slice(),function(a,b){b.destroy()})},destroyInvalidConnections:function(){_.each(this.connectors,function(a){a.destroyIfInvalid()})},setMapOver:function(a){this.multiple||this.mapOver().equal(a)||(this.terminalMapping.setMapOver(a),_.each(this.node.output_terminals,function(b){b.setMapOver(a)}))},mapOver:function(){return this.terminalMapping?this.terminalMapping.mapOver:NULL_COLLECTION_TYPE_DESCRIPTION},isMappedOver:function(){return this.terminalMapping&&this.terminalMapping.mapOver.isCollection},resetMapping:function(){this.terminalMapping.disableMapOver()},resetMappingIfNeeded:function(){}}),OutputTerminal=Terminal.extend({initialize:function(a){Terminal.prototype.initialize.call(this,a),this.datatypes=a.datatypes},resetMappingIfNeeded:function(){this.node.hasConnectedOutputTerminals()||this.node.hasConnectedMappedInputTerminals()||_.each(this.node.mappedInputTerminals(),function(a){a.resetMappingIfNeeded()});var a=!this.node.hasMappedOverInputTerminals();a&&this.resetMapping()},resetMapping:function(){this.terminalMapping.disableMapOver(),_.each(this.connectors,function(a){var b=a.handle2;b&&(b.resetMappingIfNeeded(),a.destroyIfInvalid())})}}),BaseInputTerminal=Terminal.extend({initialize:function(a){Terminal.prototype.initialize.call(this,a),this.update(a.input)},canAccept:function(a){return this._inputFilled()?!1:this.attachable(a)},resetMappingIfNeeded:function(){var a=this.mapOver();if(a.isCollection){var b=this.node.hasConnectedMappedInputTerminals()||!this.node.hasConnectedOutputTerminals();b&&this.resetMapping()}},resetMapping:function(){this.terminalMapping.disableMapOver(),this.node.hasMappedOverInputTerminals()||_.each(this.node.output_terminals,function(a){a.resetMapping()})},connected:function(){return 0!==this.connectors.length},_inputFilled:function(){var a;return this.connected()?this.multiple?this._collectionAttached()?inputsFilled=!0:a=!1:a=!0:a=!1,a},_collectionAttached:function(){if(this.connected()){var a=this.connectors[0].handle1;return a&&(a.isDataCollectionInput||a.isMappedOver()||a.datatypes.indexOf("input_collection")>0)?!0:!1}return!1},_mappingConstraints:function(){if(!this.node)return[];var a=this.mapOver();if(a.isCollection)return[a];var b=[];return this.node.hasConnectedOutputTerminals()?b.push(_.first(_.values(this.node.output_terminals)).mapOver()):_.each(this.node.connectedMappedInputTerminals(),function(a){b.push(a.mapOver())}),b},_producesAcceptableDatatype:function(a){for(var b in this.datatypes){var c=new Array;if(c=c.concat(a.datatypes),a.node.post_job_actions)for(var d in a.node.post_job_actions){var e=a.node.post_job_actions[d];"ChangeDatatypeAction"!=e.action_type||""!=e.output_name&&e.output_name!=a.name||!e.action_arguments||c.push(e.action_arguments.newtype)}for(var f in c){var g=c[f];if("input"==g||"input_collection"==g||issubtype(c[f],this.datatypes[b]))return!0}}return!1},_otherCollectionType:function(a){var b=NULL_COLLECTION_TYPE_DESCRIPTION;if(a.isDataCollectionInput)b=a.collectionType;else{var c=a.mapOver();c.isCollection&&(b=c)}return b}}),InputTerminal=BaseInputTerminal.extend({update:function(a){this.datatypes=a.extensions,this.multiple=a.multiple,this.collection=!1},connect:function(a){BaseInputTerminal.prototype.connect.call(this,a);var b=a.handle1;if(b){var c=this._otherCollectionType(b);c.isCollection&&this.setMapOver(c)}},attachable:function(a){var b=this._otherCollectionType(a),c=this.mapOver();if(b.isCollection){if(this.multiple)return this.connected()&&!this._collectionAttached()?!1:1==b.rank?this._producesAcceptableDatatype(a):!1;if(c.isCollection&&c.canMatch(b))return this._producesAcceptableDatatype(a);var d=this._mappingConstraints();return d.every(_.bind(b.canMatch,b))?this._producesAcceptableDatatype(a):!1}return c.isCollection?!1:this._producesAcceptableDatatype(a)}}),InputCollectionTerminal=BaseInputTerminal.extend({update:function(a){this.multiple=!1,this.collection=!0,this.datatypes=a.extensions,this.collectionType=a.collection_type?new CollectionTypeDescription(a.collection_type):ANY_COLLECTION_TYPE_DESCRIPTION},connect:function(a){BaseInputTerminal.prototype.connect.call(this,a);var b=a.handle1;if(b){var c=this._effectiveMapOver(b);this.setMapOver(c)}},_effectiveMapOver:function(a){var b=this.collectionType,c=this._otherCollectionType(a);return b.canMatch(c)?NULL_COLLECTION_TYPE_DESCRIPTION:c.effectiveMapOver(b)},_effectiveCollectionType:function(){var a=this.collectionType,b=this.mapOver();return b.append(a)},attachable:function(a){var b=this._otherCollectionType(a);if(b.isCollection){var c=this._effectiveCollectionType(),d=this.mapOver();if(c.canMatch(b))return this._producesAcceptableDatatype(a);if(d.isCollection)return!1;if(b.canMapOver(this.collectionType)){var e=this._effectiveMapOver(a);if(!e.isCollection)return!1;var f=this._mappingConstraints();if(f.every(e.canMatch))return this._producesAcceptableDatatype(a)}}return!1}}),OutputCollectionTerminal=Terminal.extend({initialize:function(a){Terminal.prototype.initialize.call(this,a),this.datatypes=a.datatypes,this.collectionType=new CollectionTypeDescription(a.collection_type),this.isDataCollectionInput=!0},update:function(a){var b=new CollectionTypeDescription(a.collection_type);b.collectionType!=this.collectionType.collectionType&&_.each(this.connectors,function(a){a.destroy()}),this.collectionType=b}});$.extend(Connector.prototype,{connect:function(a,b){this.handle1=a,this.handle1&&this.handle1.connect(this),this.handle2=b,this.handle2&&this.handle2.connect(this)},destroy:function(){this.handle1&&this.handle1.disconnect(this),this.handle2&&this.handle2.disconnect(this),$(this.canvas).remove()},destroyIfInvalid:function(){this.handle1&&this.handle2&&!this.handle2.attachable(this.handle1)&&this.destroy()},redraw:function(){var a=$("#canvas-container");this.canvas||(this.canvas=document.createElement("canvas"),window.G_vmlCanvasManager&&G_vmlCanvasManager.initElement(this.canvas),a.append($(this.canvas)),this.dragging&&(this.canvas.style.zIndex="300"));var b=function(b){return $(b).offset().left-a.offset().left},c=function(b){return $(b).offset().top-a.offset().top};if(this.handle1&&this.handle2){var d=b(this.handle1.element)+5,e=c(this.handle1.element)+5,f=b(this.handle2.element)+5,g=c(this.handle2.element)+5,h=100,i=Math.min(d,f),j=Math.max(d,f),k=Math.min(e,g),l=Math.max(e,g),m=Math.min(Math.max(Math.abs(l-k)/2,100),300),n=i-h,o=k-h,p=j-i+2*h,q=l-k+2*h;this.canvas.style.left=n+"px",this.canvas.style.top=o+"px",this.canvas.setAttribute("width",p),this.canvas.setAttribute("height",q),d-=n,e-=o,f-=n,g-=o;var r=(this.canvas.getContext("2d"),null),s=null,t=1;if(this.handle1&&this.handle1.isMappedOver()){var r=[-6,-3,0,3,6];t=5}else var r=[0];if(this.handle2&&this.handle2.isMappedOver()){var s=[-6,-3,0,3,6];t=5}else var s=[0];for(var u=this,v=0;t>v;v++){var w=5,x=7;(r.length>1||s.length>1)&&(w=1,x=3),u.draw_outlined_curve(d,e,f,g,m,w,x,r[v%r.length],s[v%s.length])}}},draw_outlined_curve:function(a,b,c,d,e,f,g,h,i){var h=h||0,i=i||0,j=this.canvas.getContext("2d");j.lineCap="round",j.strokeStyle=this.outer_color,j.lineWidth=g,j.beginPath(),j.moveTo(a,b+h),j.bezierCurveTo(a+e,b+h,c-e,d+i,c,d+i),j.stroke(),j.strokeStyle=this.inner_color,j.lineWidth=f,j.beginPath(),j.moveTo(a,b+h),j.bezierCurveTo(a+e,b+h,c-e,d+i,c,d+i),j.stroke()}});var Node=Backbone.Model.extend({initialize:function(a){this.element=a.element,this.input_terminals={},this.output_terminals={},this.tool_errors={}},connectedOutputTerminals:function(){return this._connectedTerminals(this.output_terminals)},_connectedTerminals:function(a){var b=[];return $.each(a,function(a,c){c.connectors.length>0&&b.push(c)}),b},hasConnectedOutputTerminals:function(){var a=this.output_terminals;for(var b in a)if(a[b].connectors.length>0)return!0;return!1},connectedMappedInputTerminals:function(){return this._connectedMappedTerminals(this.input_terminals)},hasConnectedMappedInputTerminals:function(){var a=this.input_terminals;for(var b in a){var c=a[b];if(c.connectors.length>0&&c.isMappedOver())return!0}return!1},_connectedMappedTerminals:function(a){var b=[];return $.each(a,function(a,c){var d=c.mapOver();d.isCollection&&c.connectors.length>0&&b.push(c)}),b},mappedInputTerminals:function(){return this._mappedTerminals(this.input_terminals)},_mappedTerminals:function(a){var b=[];return $.each(a,function(a,c){var d=c.mapOver();d.isCollection&&b.push(c)}),b},hasMappedOverInputTerminals:function(){var a=!1;return _.each(this.input_terminals,function(b){var c=b.mapOver();c.isCollection&&(a=!0)}),a},redraw:function(){$.each(this.input_terminals,function(a,b){b.redraw()}),$.each(this.output_terminals,function(a,b){b.redraw()})},destroy:function(){$.each(this.input_terminals,function(a,b){b.destroy()}),$.each(this.output_terminals,function(a,b){b.destroy()}),workflow.remove_node(this),$(this.element).remove()},make_active:function(){$(this.element).addClass("toolForm-active")},make_inactive:function(){var a=this.element.get(0);!function(b){b.removeChild(a),b.appendChild(a)}(a.parentNode),$(a).removeClass("toolForm-active")},init_field_data:function(a){a.type&&(this.type=a.type),this.name=a.name,this.form_html=a.form_html,this.tool_state=a.tool_state,this.tool_errors=a.tool_errors,this.tooltip=a.tooltip?a.tooltip:"",this.annotation=a.annotation,this.post_job_actions=a.post_job_actions?a.post_job_actions:{},this.label=a.label,this.uuid=a.uuid,this.workflow_outputs=a.workflow_outputs?a.workflow_outputs:[];var b=this,c=new NodeView({el:this.element[0],node:b});b.nodeView=c,$.each(a.data_inputs,function(a,b){c.addDataInput(b)}),a.data_inputs.length>0&&a.data_outputs.length>0&&c.addRule(),$.each(a.data_outputs,function(a,b){c.addDataOutput(b)}),c.render(),workflow.node_changed(this,!0)},update_field_data:function(a){var b=this;if(nodeView=b.nodeView,this.tool_state=a.tool_state,this.form_html=a.form_html,this.tool_errors=a.tool_errors,this.annotation=a.annotation,"post_job_actions"in a){var c=$.parseJSON(a.post_job_actions);this.post_job_actions=c?c:{}}b.nodeView.renderToolErrors();var d=nodeView.$("div.inputs"),e=nodeView.newInputsDiv(),f={};_.each(a.data_inputs,function(a){var c=b.nodeView.addDataInput(a,e);f[a.name]=c}),_.each(_.difference(_.values(nodeView.terminalViews),_.values(f)),function(a){a.el.terminal.destroy()}),nodeView.terminalViews=f,1==a.data_outputs.length&&"collection_type"in a.data_outputs[0]&&nodeView.updateDataOutput(a.data_outputs[0]),d.replaceWith(e),this.markChanged(),this.redraw()},error:function(a){var b=$(this.element).find(".toolFormBody");b.find("div").remove();var c="
"+a+"
";this.form_html=c,b.html(c),workflow.node_changed(this)},markChanged:function(){workflow.node_changed(this)}});$.extend(Workflow.prototype,{add_node:function(a){a.id=this.id_counter,a.element.attr("id","wf-node-step-"+a.id),this.id_counter++,this.nodes[a.id]=a,this.has_changes=!0,a.workflow=this},remove_node:function(a){this.active_node==a&&this.clear_active_node(),delete this.nodes[a.id],this.has_changes=!0},remove_all:function(){wf=this,$.each(this.nodes,function(a,b){b.destroy(),wf.remove_node(b)})},rectify_workflow_outputs:function(){var a=!1,b=!1;$.each(this.nodes,function(c,d){d.workflow_outputs&&d.workflow_outputs.length>0&&(a=!0),$.each(d.post_job_actions,function(a,c){"HideDatasetAction"===c.action_type&&(b=!0)})}),(a!==!1||b!==!1)&&$.each(this.nodes,function(b,c){if("tool"===c.type){var d=!1;null==c.post_job_actions&&(c.post_job_actions={},d=!0);var e=[];$.each(c.post_job_actions,function(a,b){"HideDatasetAction"==b.action_type&&e.push(a)}),e.length>0&&$.each(e,function(a,b){d=!0,delete c.post_job_actions[b]}),a&&$.each(c.output_terminals,function(a,b){var e=!0;if($.each(c.workflow_outputs,function(a,c){b.name===c&&(e=!1)}),e===!0){d=!0;var f={action_type:"HideDatasetAction",output_name:b.name,action_arguments:{}};c.post_job_actions["HideDatasetAction"+b.name]=null,c.post_job_actions["HideDatasetAction"+b.name]=f}}),workflow.active_node==c&&d===!0&&workflow.reload_active_node()}})},to_simple:function(){var a={};return $.each(this.nodes,function(b,c){var d={};$.each(c.input_terminals,function(a,b){d[b.name]=null;var c=[];$.each(b.connectors,function(a,e){c[a]={id:e.handle1.node.id,output_name:e.handle1.name},d[b.name]=c})});var e={};c.post_job_actions&&$.each(c.post_job_actions,function(a,b){var c={action_type:b.action_type,output_name:b.output_name,action_arguments:b.action_arguments};e[b.action_type+b.output_name]=null,e[b.action_type+b.output_name]=c}),c.workflow_outputs||(c.workflow_outputs=[]);var f={id:c.id,type:c.type,tool_id:c.tool_id,tool_state:c.tool_state,tool_errors:c.tool_errors,input_connections:d,position:$(c.element).position(),annotation:c.annotation,post_job_actions:c.post_job_actions,uuid:c.uuid,label:c.label,workflow_outputs:c.workflow_outputs};a[c.id]=f}),{steps:a}},from_simple:function(a){wf=this;var b=0;wf.name=a.name;var c=!1;$.each(a.steps,function(a,d){var e=prebuild_node(d.type,d.name,d.tool_id);e.init_field_data(d),d.position&&e.element.css({top:d.position.top,left:d.position.left}),e.id=d.id,wf.nodes[e.id]=e,b=Math.max(b,parseInt(a)),c||"tool"!==e.type||(e.workflow_outputs.length>0?c=!0:$.each(e.post_job_actions,function(a,b){"HideDatasetAction"===b.action_type&&(c=!0)}))}),wf.id_counter=b+1,$.each(a.steps,function(a,b){var d=wf.nodes[a];$.each(b.input_connections,function(a,b){b&&($.isArray(b)||(b=[b]),$.each(b,function(b,c){var e=wf.nodes[c.id],f=new Connector;f.connect(e.output_terminals[c.output_name],d.input_terminals[a]),f.redraw()}))}),c&&"tool"===d.type&&$.each(d.output_terminals,function(a,b){void 0===d.post_job_actions["HideDatasetAction"+b.name]&&(d.workflow_outputs.push(b.name),callout=$(d.element).find(".callout."+b.name),callout.find("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small.png"),workflow.has_changes=!0)})})},check_changes_in_active_form:function(){this.active_form_has_changes&&(this.has_changes=!0,$("#right-content").find("form").submit(),this.active_form_has_changes=!1)},reload_active_node:function(){if(this.active_node){var a=this.active_node;this.clear_active_node(),this.activate_node(a)}},clear_active_node:function(a){this.active_node&&(this.active_node.make_inactive(),this.active_node=null),parent.__NEWTOOLFORM__?parent.show_tool_form("
No node selected
",{id:"no-node"},a):parent.show_form_for_tool("
No node selected
")},activate_node:function(a){this.active_node!=a&&(this.check_changes_in_active_form(),this.clear_active_node(),parent.__NEWTOOLFORM__?parent.show_tool_form(a.form_html,a):parent.show_form_for_tool(a.form_html+a.tooltip,a),a.make_active(),this.active_node=a)},node_changed:function(a,b){this.has_changes=!0,this.active_node!=a||parent.__NEWTOOLFORM__&&!b||(this.check_changes_in_active_form(),parent.__NEWTOOLFORM__?parent.show_tool_form(a.form_html,a):parent.show_form_for_tool(a.form_html+a.tooltip,a))},layout:function(){this.check_changes_in_active_form(),this.has_changes=!0;var a={},b={};for($.each(this.nodes,function(c){void 0===a[c]&&(a[c]=0),void 0===b[c]&&(b[c]=[])}),$.each(this.nodes,function(c,d){$.each(d.input_terminals,function(c,e){$.each(e.connectors,function(c,e){var f=e.handle1.node;a[d.id]+=1,b[f.id].push(d.id)})})}),node_ids_by_level=[];;){level_parents=[];for(var c in a)0==a[c]&&level_parents.push(c);if(0==level_parents.length)break;node_ids_by_level.push(level_parents);for(var d in level_parents){var e=level_parents[d];delete a[e];for(var f in b[e])a[b[e][f]]-=1}}if(!a.length){var g=this.nodes,h=80;v_pad=30;var i=h;$.each(node_ids_by_level,function(a,b){b.sort(function(a,b){return $(g[a].element).position().top-$(g[b].element).position().top});var c=0,d=v_pad;$.each(b,function(a,b){var e=g[b],f=$(e.element);$(f).css({top:d,left:i}),c=Math.max(c,$(f).width()),d+=$(f).height()+v_pad}),i+=c+h}),$.each(g,function(a,b){b.redraw()})}},bounds_for_all_nodes:function(){var a,b=1/0,c=-(1/0),d=1/0,f=-(1/0);return $.each(this.nodes,function(g,h){e=$(h.element),a=e.position(),b=Math.min(b,a.left),c=Math.max(c,a.left+e.width()),d=Math.min(d,a.top),f=Math.max(f,a.top+e.width())}),{xmin:b,xmax:c,ymin:d,ymax:f}},fit_canvas_to_nodes:function(){var a=this.bounds_for_all_nodes(),b=this.canvas_container.position(),c=this.canvas_container.parent(),d=fix_delta(a.xmin,100),e=fix_delta(a.ymin,100);d=Math.max(d,b.left),e=Math.max(e,b.top);var f=b.left-d,g=b.top-e,h=round_up(a.xmax+100,100)+d,i=round_up(a.ymax+100,100)+e;h=Math.max(h,-f+c.width()),i=Math.max(i,-g+c.height()),this.canvas_container.css({left:f,top:g,width:h,height:i}),this.canvas_container.children().each(function(){var a=$(this).position();$(this).css("left",a.left+d),$(this).css("top",a.top+e)})}});var ext_to_type=null,type_to_type=null,NodeView=Backbone.View.extend({initialize:function(a){this.node=a.node,this.output_width=Math.max(150,this.$el.width()),this.tool_body=this.$el.find(".toolFormBody"),this.tool_body.find("div").remove(),this.newInputsDiv().appendTo(this.tool_body),this.terminalViews={},this.outputTerminlViews={}},render:function(){this.renderToolErrors(),this.$el.css("width",Math.min(250,Math.max(this.$el.width(),this.output_width)))},renderToolErrors:function(){this.node.tool_errors?this.$el.addClass("tool-node-error"):this.$el.removeClass("tool-node-error")},newInputsDiv:function(){return $("
")},updateMaxWidth:function(a){this.output_width=Math.max(this.output_width,a)},addRule:function(){this.tool_body.append($("
"))},addDataInput:function(a,b){var c=!0;b||(b=this.$(".inputs"),c=!1);var d=this.terminalViews[a.name],e="dataset_collection"==a.input_type?InputCollectionTerminalView:InputTerminalView;if(!d||d instanceof e||(d.el.terminal.destroy(),d=null),d){var f=d.el.terminal;f.update(a),f.destroyInvalidConnections()}else d=new e({node:this.node,input:a});this.terminalViews[a.name]=d;var g=d.el,h=new DataInputView({terminalElement:g,input:a,nodeView:this,skipResize:c}),i=h.$el;return b.append(i.prepend(d.terminalElements())),d},addDataOutput:function(a){var b=a.collection_type?OutputCollectionTerminalView:OutputTerminalView,c=new b({node:this.node,output:a}),d=new DataOutputView({output:a,terminalElement:c.el,nodeView:this});this.tool_body.append(d.$el.append(c.terminalElements()))},updateDataOutput:function(a){var b=this.node.output_terminals[a.name];b.update(a)}}),DataInputView=Backbone.View.extend({className:"form-row dataRow input-data-row",initialize:function(a){this.input=a.input,this.nodeView=a.nodeView,this.terminalElement=a.terminalElement,this.$el.attr("name",this.input.name).html(this.input.label),a.skipResize||(this.$el.css({position:"absolute",left:-1e3,top:-1e3,display:"none"}),$("body").append(this.el),this.nodeView.updateMaxWidth(this.$el.outerWidth()),this.$el.css({position:"",left:"",top:"",display:""}),this.$el.remove())}}),OutputCalloutView=Backbone.View.extend({tagName:"div",initialize:function(a){this.label=a.label,this.node=a.node,this.output=a.output;var b=this;this.$el.attr("class","callout "+this.label).css({display:"none"}).append($("
").append($("").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small-outline.png").click(function(){-1!=$.inArray(b.output.name,b.node.workflow_outputs)?(b.node.workflow_outputs.splice($.inArray(b.output.name,b.node.workflow_outputs),1),b.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small-outline.png")):(b.node.workflow_outputs.push(b.output.name),b.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small.png")),workflow.has_changes=!0,canvas_manager.draw_overview()}))).tooltip({delay:500,title:"Mark dataset as a workflow output. All unmarked datasets will be hidden."}),this.$el.css({top:"50%",margin:"-8px 0px 0px 0px",right:8}),this.$el.show(),this.resetImage()},resetImage:function(){-1===$.inArray(this.output.name,this.node.workflow_outputs)?this.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small-outline.png"):this.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small.png")},hoverImage:function(){this.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small-yellow.png")}}),DataOutputView=Backbone.View.extend({className:"form-row dataRow",initialize:function(a){this.output=a.output,this.terminalElement=a.terminalElement,this.nodeView=a.nodeView;var b=this.output,c=b.name,d=this.nodeView.node,e=b.extensions.indexOf("input")>=0||b.extensions.indexOf("input_collection")>=0;if(e||(c=c+" ("+b.extensions.join(", ")+")"),this.$el.html(c),"tool"==d.type){var f=new OutputCalloutView({label:c,output:b,node:d});this.$el.append(f.el),this.$el.hover(function(){f.hoverImage()},function(){f.resetImage()})}this.$el.css({position:"absolute",left:-1e3,top:-1e3,display:"none"}),$("body").append(this.el),this.nodeView.updateMaxWidth(this.$el.outerWidth()+17),this.$el.css({position:"",left:"",top:"",display:""}).detach()}}),TerminalView=Backbone.View.extend({setupMappingView:function(a){var b=new this.terminalMappingClass({terminal:a}),c=new this.terminalMappingViewClass({model:b});c.render(),a.terminalMappingView=c,this.terminalMappingView=c},terminalElements:function(){return this.terminalMappingView?[this.terminalMappingView.el,this.el]:[this.el]}}),BaseInputTerminalView=TerminalView.extend({className:"terminal input-terminal",initialize:function(a){var b=a.node,c=a.input,d=c.name,e=this.terminalForInput(c);e.multiple||this.setupMappingView(e),this.el.terminal=e,e.node=b,e.name=d,b.input_terminals[d]=e},events:{dropinit:"onDropInit",dropstart:"onDropStart",dropend:"onDropEnd",drop:"onDrop",hover:"onHover"},onDropInit:function(a,b){var c=this.el.terminal;return $(b.drag).hasClass("output-terminal")&&c.canAccept(b.drag.terminal)},onDropStart:function(a,b){b.proxy.terminal&&(b.proxy.terminal.connectors[0].inner_color="#BBFFBB")},onDropEnd:function(a,b){b.proxy.terminal&&(b.proxy.terminal.connectors[0].inner_color="#FFFFFF")},onDrop:function(a,b){var c=this.el.terminal;new Connector(b.drag.terminal,c).redraw()},onHover:function(){var a=this.el,b=a.terminal;if(b.connectors.length>0){var c=$("
").css({display:"none"}).appendTo("body").append($("
").append($("
").addClass("fa-icon-button fa fa-times").click(function(){$.each(b.connectors,function(a,b){b&&b.destroy()}),c.remove()}))).bind("mouseleave",function(){$(this).remove()});c.css({top:$(a).offset().top-2,left:$(a).offset().left-c.width(),"padding-right":$(a).width()}).show()}}}),InputTerminalView=BaseInputTerminalView.extend({terminalMappingClass:InputTerminalMapping,terminalMappingViewClass:InputTerminalMappingView,terminalForInput:function(a){return new InputTerminal({element:this.el,input:a})}}),InputCollectionTerminalView=BaseInputTerminalView.extend({terminalMappingClass:InputCollectionTerminalMapping,terminalMappingViewClass:InputCollectionTerminalMappingView,terminalForInput:function(a){return new InputCollectionTerminal({element:this.el,input:a})}}),BaseOutputTerminalView=TerminalView.extend({className:"terminal output-terminal",initialize:function(a){var b=a.node,c=a.output,d=c.name,e=this.terminalForOutput(c);this.setupMappingView(e),this.el.terminal=e,e.node=b,e.name=d,b.output_terminals[d]=e},events:{drag:"onDrag",dragstart:"onDragStart",dragend:"onDragEnd"},onDrag:function(a,b){var c=function(){var a=$(b.proxy).offsetParent().offset(),c=b.offsetX-a.left,d=b.offsetY-a.top;$(b.proxy).css({left:c,top:d}),b.proxy.terminal.redraw(),canvas_manager.update_viewport_overlay()};c(),$("#canvas-container").get(0).scroll_panel.test(a,c)},onDragStart:function(a,b){$(b.available).addClass("input-terminal-active"),workflow.check_changes_in_active_form();var c=$('
').appendTo("#canvas-container").get(0);c.terminal=new OutputTerminal({element:c});var d=new Connector;return d.dragging=!0,d.connect(this.el.terminal,c.terminal),c},onDragEnd:function(a,b){var c=b.proxy.terminal.connectors[0];c&&c.destroy(),$(b.proxy).remove(),$(b.available).removeClass("input-terminal-active"),$("#canvas-container").get(0).scroll_panel.stop()}}),OutputTerminalView=BaseOutputTerminalView.extend({terminalMappingClass:OutputTerminalMapping,terminalMappingViewClass:OutputTerminalMappingView,terminalForOutput:function(a){var b=a.extensions,c=new OutputTerminal({element:this.el,datatypes:b});return c}}),OutputCollectionTerminalView=BaseOutputTerminalView.extend({terminalMappingClass:OutputCollectionTerminalMapping,terminalMappingViewClass:OutputCollectionTerminalMappingView,terminalForOutput:function(a){var b=a.collection_type,c=new OutputCollectionTerminal({element:this.el,collection_type:b,datatypes:a.extensions});return c}});$.extend(ScrollPanel.prototype,{test:function(a,b){clearTimeout(this.timeout);var c=a.pageX,d=a.pageY,e=$(this.panel),f=e.position(),g=e.width(),h=e.height(),i=e.parent(),j=i.width(),k=i.height(),l=i.offset(),m=l.left,n=l.top,o=m+i.width(),p=n+i.height(),q=-(g-j/2),r=-(h-k/2),s=j/2,t=k/2,u=!1,v=5,w=23;if(m>c-v){if(f.lefto){if(f.left>q){var x=Math.min(w,f.left-q);e.css("left",f.left-x),u=!0}}else if(n>d-v){if(f.topp&&f.top>r){var x=Math.min(w,f.top-q);e.css("top",f.top-x+"px"),u=!0}if(u){b();var e=this;this.timeout=setTimeout(function(){e.test(a,b)},50)}},stop:function(){clearTimeout(this.timeout)}}),$.extend(CanvasManager.prototype,{init_drag:function(){var a=this,b=function(b,c){b=Math.min(b,a.cv.width()/2),b=Math.max(b,-a.cc.width()+a.cv.width()/2),c=Math.min(c,a.cv.height()/2),c=Math.max(c,-a.cc.height()+a.cv.height()/2),a.cc.css({left:b,top:c}),a.cv.css({"background-position-x":b,"background-position-y":c}),a.update_viewport_overlay()};this.cc.each(function(){this.scroll_panel=new ScrollPanel(this)});var c,d;this.cv.bind("dragstart",function(){var b=$(this).offset(),e=a.cc.position();d=e.top-b.top,c=e.left-b.left}).bind("drag",function(a,e){b(e.offsetX+c,e.offsetY+d)}).bind("dragend",function(){workflow.fit_canvas_to_nodes(),a.draw_overview(); - -}),this.ov.bind("drag",function(c,d){var e=a.cc.width(),f=a.cc.height(),g=a.oc.width(),h=a.oc.height(),i=$(this).offsetParent().offset(),j=d.offsetX-i.left,k=d.offsetY-i.top;b(-(j/g*e),-(k/h*f))}).bind("dragend",function(){workflow.fit_canvas_to_nodes(),a.draw_overview()}),$("#overview-border").bind("drag",function(b,c){var d=$(this).offsetParent(),e=d.offset(),f=Math.max(d.width()-(c.offsetX-e.left),d.height()-(c.offsetY-e.top));$(this).css({width:f,height:f}),a.draw_overview()}),$("#overview-border div").bind("drag",function(){})},update_viewport_overlay:function(){var a=this.cc,b=this.cv,c=this.oc,d=this.ov,e=a.width(),f=a.height(),g=c.width(),h=c.height(),i=a.position();d.css({left:-(i.left/e*g),top:-(i.top/f*h),width:b.width()/e*g-2,height:b.height()/f*h-2})},draw_overview:function(){var a,b,c,d,e=$("#overview-canvas"),f=e.parent().parent().width(),g=e.get(0).getContext("2d"),h=$("#canvas-container").width(),i=$("#canvas-container").height(),j=this.cv.width(),k=this.cv.height();j>h&&k>i?(c=h/j*f,d=(f-c)/2,a=i/k*f,b=(f-a)/2):i>h?(b=0,a=f,c=Math.ceil(a*h/i),d=(f-c)/2):(c=f,d=0,a=Math.ceil(c*i/h),b=(f-a)/2),e.parent().css({left:d,top:b,width:c,height:a}),e.attr("width",c),e.attr("height",a),$.each(workflow.nodes,function(b,d){g.fillStyle="#D2C099",g.strokeStyle="#D8B365",g.lineWidth=1;var e=$(d.element),f=e.position(),j=f.left/h*c,k=f.top/i*a,l=e.width()/h*c,m=e.height()/i*a;d.tool_errors?(g.fillStyle="#FFCCCC",g.strokeStyle="#AA6666"):void 0!=d.workflow_outputs&&d.workflow_outputs.length>0&&(g.fillStyle="#E8A92D",g.strokeStyle="#E8A92D"),g.fillRect(j,k,l,m),g.strokeRect(j,k,l,m)}),this.update_viewport_overlay()}}); +function CollectionTypeDescription(a){this.collectionType=a,this.isCollection=!0,this.rank=a.split(":").length}function Connector(a,b){this.canvas=null,this.dragging=!1,this.inner_color="#FFFFFF",this.outer_color="#D8B365",a&&b&&this.connect(a,b)}function Workflow(a){this.canvas_container=a,this.id_counter=0,this.nodes={},this.name=null,this.has_changes=!1,this.active_form_has_changes=!1}function fix_delta(a,b){return b>a||a>3*b?(new_pos=(Math.ceil(a%b/b)+1)*b,-(a-new_pos)):0}function round_up(a,b){return Math.ceil(a/b)*b}function prebuild_node(a,b,c){var d=$("
"),e=new Node({element:d});e.type=a,"tool"==a&&(e.tool_id=c);var f=$("
"+b+"
");d.append(f),d.css("left",$(window).scrollLeft()+20),d.css("top",$(window).scrollTop()+20);var g=$("
"),h="
loading tool info...
";g.append(h),e.form_html=h,d.append(g);var i=$("
");i.append($("
").addClass("fa-icon-button fa fa-times").click(function(){e.destroy()})),d.appendTo("#canvas-container");var j=$("#canvas-container").position(),k=$("#canvas-container").parent(),l=d.width(),m=d.height();return d.css({left:-j.left+k.width()/2-l/2,top:-j.top+k.height()/2-m/2}),i.prependTo(f),l+=i.width()+10,d.css("width",l),$(d).bind("dragstart",function(){workflow.activate_node(e)}).bind("dragend",function(){workflow.node_changed(this),workflow.fit_canvas_to_nodes(),canvas_manager.draw_overview()}).bind("dragclickonly",function(){workflow.activate_node(e)}).bind("drag",function(a,b){var c=$(this).offsetParent().offset(),d=b.offsetX-c.left,e=b.offsetY-c.top;$(this).css({left:d,top:e}),$(this).find(".terminal").each(function(){this.terminal.redraw()})}),e}function add_node(a,b,c){var d=prebuild_node(a,b,c);return workflow.add_node(d),workflow.fit_canvas_to_nodes(),canvas_manager.draw_overview(),workflow.activate_node(d),d}function issubtype(a,b){return a=ext_to_type[a],b=ext_to_type[b],type_to_type[a]&&b in type_to_type[a]}function populate_datatype_info(a){ext_to_type=a.ext_to_class_name,type_to_type=a.class_to_classes}function ScrollPanel(a){this.panel=a}function CanvasManager(a,b){this.cv=a,this.cc=this.cv.find("#canvas-container"),this.oc=b.find("#overview-canvas"),this.ov=b.find("#overview-viewport"),this.init_drag()}$.extend(CollectionTypeDescription.prototype,{append:function(a){return a===NULL_COLLECTION_TYPE_DESCRIPTION?this:a===ANY_COLLECTION_TYPE_DESCRIPTION?otherCollectionType:new CollectionTypeDescription(this.collectionType+":"+a.collectionType)},canMatch:function(a){return a===NULL_COLLECTION_TYPE_DESCRIPTION?!1:a===ANY_COLLECTION_TYPE_DESCRIPTION?!0:a.collectionType==this.collectionType},canMapOver:function(a){if(a===NULL_COLLECTION_TYPE_DESCRIPTION)return!1;if(a===ANY_COLLECTION_TYPE_DESCRIPTION)return!1;if(this.rank<=a.rank)return!1;var b=a.collectionType;return this._endsWith(this.collectionType,b)},effectiveMapOver:function(a){var b=a.collectionType,c=this.collectionType.substring(0,this.collectionType.length-b.length-1);return new CollectionTypeDescription(c)},equal:function(a){return a.collectionType==this.collectionType},toString:function(){return"CollectionType["+this.collectionType+"]"},_endsWith:function(a,b){return-1!==a.indexOf(b,a.length-b.length)}}),NULL_COLLECTION_TYPE_DESCRIPTION={isCollection:!1,canMatch:function(){return!1},canMapOver:function(){return!1},toString:function(){return"NullCollectionType[]"},append:function(a){return a},equal:function(a){return a===this}},ANY_COLLECTION_TYPE_DESCRIPTION={isCollection:!0,canMatch:function(a){return NULL_COLLECTION_TYPE_DESCRIPTION!==a},canMapOver:function(){return!1},toString:function(){return"AnyCollectionType[]"},append:function(){throw"Cannot append to ANY_COLLECTION_TYPE_DESCRIPTION"},equal:function(a){return a===this}};var TerminalMapping=Backbone.Model.extend({initialize:function(a){this.mapOver=a.mapOver||NULL_COLLECTION_TYPE_DESCRIPTION,this.terminal=a.terminal,this.terminal.terminalMapping=this},disableMapOver:function(){this.setMapOver(NULL_COLLECTION_TYPE_DESCRIPTION)},setMapOver:function(a){this.mapOver=a,this.trigger("change")}}),TerminalMappingView=Backbone.View.extend({tagName:"div",className:"fa-icon-button fa fa-folder-o",initialize:function(){var a="Run tool in parallel over collection";this.$el.tooltip({delay:500,title:a}),this.model.bind("change",_.bind(this.render,this))},render:function(){this.model.mapOver.isCollection?this.$el.show():this.$el.hide()}}),InputTerminalMappingView=TerminalMappingView.extend({events:{click:"onClick",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave"},onMouseEnter:function(){var a=this.model;!a.terminal.connected()&&a.mapOver.isCollection&&this.$el.css("color","red")},onMouseLeave:function(){this.$el.css("color","black")},onClick:function(){var a=this.model;!a.terminal.connected()&&a.mapOver.isCollection&&a.terminal.resetMapping()}}),InputTerminalMapping=TerminalMapping,InputCollectionTerminalMapping=TerminalMapping,OutputTerminalMapping=TerminalMapping,OutputTerminalMappingView=TerminalMappingView,InputCollectionTerminalMappingView=InputTerminalMappingView,OutputCollectionTerminalMapping=TerminalMapping,OutputCollectionTerminalMappingView=TerminalMappingView,Terminal=Backbone.Model.extend({initialize:function(a){this.element=a.element,this.connectors=[]},connect:function(a){this.connectors.push(a),this.node&&this.node.markChanged()},disconnect:function(a){this.connectors.splice($.inArray(a,this.connectors),1),this.node&&(this.node.markChanged(),this.resetMappingIfNeeded())},redraw:function(){$.each(this.connectors,function(a,b){b.redraw()})},destroy:function(){$.each(this.connectors.slice(),function(a,b){b.destroy()})},destroyInvalidConnections:function(){_.each(this.connectors,function(a){a.destroyIfInvalid()})},setMapOver:function(a){this.multiple||this.mapOver().equal(a)||(this.terminalMapping.setMapOver(a),_.each(this.node.output_terminals,function(b){b.setMapOver(a)}))},mapOver:function(){return this.terminalMapping?this.terminalMapping.mapOver:NULL_COLLECTION_TYPE_DESCRIPTION},isMappedOver:function(){return this.terminalMapping&&this.terminalMapping.mapOver.isCollection},resetMapping:function(){this.terminalMapping.disableMapOver()},resetMappingIfNeeded:function(){}}),OutputTerminal=Terminal.extend({initialize:function(a){Terminal.prototype.initialize.call(this,a),this.datatypes=a.datatypes},resetMappingIfNeeded:function(){this.node.hasConnectedOutputTerminals()||this.node.hasConnectedMappedInputTerminals()||_.each(this.node.mappedInputTerminals(),function(a){a.resetMappingIfNeeded()});var a=!this.node.hasMappedOverInputTerminals();a&&this.resetMapping()},resetMapping:function(){this.terminalMapping.disableMapOver(),_.each(this.connectors,function(a){var b=a.handle2;b&&(b.resetMappingIfNeeded(),a.destroyIfInvalid())})}}),BaseInputTerminal=Terminal.extend({initialize:function(a){Terminal.prototype.initialize.call(this,a),this.update(a.input)},canAccept:function(a){return this._inputFilled()?!1:this.attachable(a)},resetMappingIfNeeded:function(){var a=this.mapOver();if(a.isCollection){var b=this.node.hasConnectedMappedInputTerminals()||!this.node.hasConnectedOutputTerminals();b&&this.resetMapping()}},resetMapping:function(){this.terminalMapping.disableMapOver(),this.node.hasMappedOverInputTerminals()||_.each(this.node.output_terminals,function(a){a.resetMapping()})},connected:function(){return 0!==this.connectors.length},_inputFilled:function(){var a;return this.connected()?this.multiple?this._collectionAttached()?inputsFilled=!0:a=!1:a=!0:a=!1,a},_collectionAttached:function(){if(this.connected()){var a=this.connectors[0].handle1;return a&&(a.isCollection||a.isMappedOver()||a.datatypes.indexOf("input_collection")>0)?!0:!1}return!1},_mappingConstraints:function(){if(!this.node)return[];var a=this.mapOver();if(a.isCollection)return[a];var b=[];return this.node.hasConnectedOutputTerminals()?b.push(_.first(_.values(this.node.output_terminals)).mapOver()):_.each(this.node.connectedMappedInputTerminals(),function(a){b.push(a.mapOver())}),b},_producesAcceptableDatatype:function(a){for(var b in this.datatypes){var c=new Array;if(c=c.concat(a.datatypes),a.node.post_job_actions)for(var d in a.node.post_job_actions){var e=a.node.post_job_actions[d];"ChangeDatatypeAction"!=e.action_type||""!=e.output_name&&e.output_name!=a.name||!e.action_arguments||c.push(e.action_arguments.newtype)}for(var f in c){var g=c[f];if("input"==g||"input_collection"==g||issubtype(c[f],this.datatypes[b]))return!0}}return!1},_otherCollectionType:function(a){var b=NULL_COLLECTION_TYPE_DESCRIPTION;a.isCollection&&(b=a.collectionType);var c=a.mapOver();return c.isCollection&&(b=c.append(b)),b}}),InputTerminal=BaseInputTerminal.extend({update:function(a){this.datatypes=a.extensions,this.multiple=a.multiple,this.collection=!1},connect:function(a){BaseInputTerminal.prototype.connect.call(this,a);var b=a.handle1;if(b){var c=this._otherCollectionType(b);c.isCollection&&this.setMapOver(c)}},attachable:function(a){var b=this._otherCollectionType(a),c=this.mapOver();if(b.isCollection){if(this.multiple)return this.connected()&&!this._collectionAttached()?!1:1==b.rank?this._producesAcceptableDatatype(a):!1;if(c.isCollection&&c.canMatch(b))return this._producesAcceptableDatatype(a);var d=this._mappingConstraints();return d.every(_.bind(b.canMatch,b))?this._producesAcceptableDatatype(a):!1}return c.isCollection?!1:this._producesAcceptableDatatype(a)}}),InputCollectionTerminal=BaseInputTerminal.extend({update:function(a){this.multiple=!1,this.collection=!0,this.datatypes=a.extensions,this.collectionType=a.collection_type?new CollectionTypeDescription(a.collection_type):ANY_COLLECTION_TYPE_DESCRIPTION},connect:function(a){BaseInputTerminal.prototype.connect.call(this,a);var b=a.handle1;if(b){var c=this._effectiveMapOver(b);this.setMapOver(c)}},_effectiveMapOver:function(a){var b=this.collectionType,c=this._otherCollectionType(a);return b.canMatch(c)?NULL_COLLECTION_TYPE_DESCRIPTION:c.effectiveMapOver(b)},_effectiveCollectionType:function(){var a=this.collectionType,b=this.mapOver();return b.append(a)},attachable:function(a){var b=this._otherCollectionType(a);if(b.isCollection){var c=this._effectiveCollectionType(),d=this.mapOver();if(c.canMatch(b))return this._producesAcceptableDatatype(a);if(d.isCollection)return!1;if(b.canMapOver(this.collectionType)){var e=this._effectiveMapOver(a);if(!e.isCollection)return!1;var f=this._mappingConstraints();if(f.every(e.canMatch))return this._producesAcceptableDatatype(a)}}return!1}}),OutputCollectionTerminal=OutputTerminal.extend({initialize:function(a){Terminal.prototype.initialize.call(this,a),this.datatypes=a.datatypes,this.collectionType=new CollectionTypeDescription(a.collection_type),this.isCollection=!0},update:function(a){var b=new CollectionTypeDescription(a.collection_type);b.collectionType!=this.collectionType.collectionType&&_.each(this.connectors,function(a){a.destroy()}),this.collectionType=b}});$.extend(Connector.prototype,{connect:function(a,b){this.handle1=a,this.handle1&&this.handle1.connect(this),this.handle2=b,this.handle2&&this.handle2.connect(this)},destroy:function(){this.handle1&&this.handle1.disconnect(this),this.handle2&&this.handle2.disconnect(this),$(this.canvas).remove()},destroyIfInvalid:function(){this.handle1&&this.handle2&&!this.handle2.attachable(this.handle1)&&this.destroy()},redraw:function(){var a=$("#canvas-container");this.canvas||(this.canvas=document.createElement("canvas"),window.G_vmlCanvasManager&&G_vmlCanvasManager.initElement(this.canvas),a.append($(this.canvas)),this.dragging&&(this.canvas.style.zIndex="300"));var b=function(b){return $(b).offset().left-a.offset().left},c=function(b){return $(b).offset().top-a.offset().top};if(this.handle1&&this.handle2){var d=b(this.handle1.element)+5,e=c(this.handle1.element)+5,f=b(this.handle2.element)+5,g=c(this.handle2.element)+5,h=100,i=Math.min(d,f),j=Math.max(d,f),k=Math.min(e,g),l=Math.max(e,g),m=Math.min(Math.max(Math.abs(l-k)/2,100),300),n=i-h,o=k-h,p=j-i+2*h,q=l-k+2*h;this.canvas.style.left=n+"px",this.canvas.style.top=o+"px",this.canvas.setAttribute("width",p),this.canvas.setAttribute("height",q),d-=n,e-=o,f-=n,g-=o;var r=(this.canvas.getContext("2d"),null),s=null,t=1;if(this.handle1&&this.handle1.isMappedOver()){var r=[-6,-3,0,3,6];t=5}else var r=[0];if(this.handle2&&this.handle2.isMappedOver()){var s=[-6,-3,0,3,6];t=5}else var s=[0];for(var u=this,v=0;t>v;v++){var w=5,x=7;(r.length>1||s.length>1)&&(w=1,x=3),u.draw_outlined_curve(d,e,f,g,m,w,x,r[v%r.length],s[v%s.length])}}},draw_outlined_curve:function(a,b,c,d,e,f,g,h,i){var h=h||0,i=i||0,j=this.canvas.getContext("2d");j.lineCap="round",j.strokeStyle=this.outer_color,j.lineWidth=g,j.beginPath(),j.moveTo(a,b+h),j.bezierCurveTo(a+e,b+h,c-e,d+i,c,d+i),j.stroke(),j.strokeStyle=this.inner_color,j.lineWidth=f,j.beginPath(),j.moveTo(a,b+h),j.bezierCurveTo(a+e,b+h,c-e,d+i,c,d+i),j.stroke()}});var Node=Backbone.Model.extend({initialize:function(a){this.element=a.element,this.input_terminals={},this.output_terminals={},this.tool_errors={}},connectedOutputTerminals:function(){return this._connectedTerminals(this.output_terminals)},_connectedTerminals:function(a){var b=[];return $.each(a,function(a,c){c.connectors.length>0&&b.push(c)}),b},hasConnectedOutputTerminals:function(){var a=this.output_terminals;for(var b in a)if(a[b].connectors.length>0)return!0;return!1},connectedMappedInputTerminals:function(){return this._connectedMappedTerminals(this.input_terminals)},hasConnectedMappedInputTerminals:function(){var a=this.input_terminals;for(var b in a){var c=a[b];if(c.connectors.length>0&&c.isMappedOver())return!0}return!1},_connectedMappedTerminals:function(a){var b=[];return $.each(a,function(a,c){var d=c.mapOver();d.isCollection&&c.connectors.length>0&&b.push(c)}),b},mappedInputTerminals:function(){return this._mappedTerminals(this.input_terminals)},_mappedTerminals:function(a){var b=[];return $.each(a,function(a,c){var d=c.mapOver();d.isCollection&&b.push(c)}),b},hasMappedOverInputTerminals:function(){var a=!1;return _.each(this.input_terminals,function(b){var c=b.mapOver();c.isCollection&&(a=!0)}),a},redraw:function(){$.each(this.input_terminals,function(a,b){b.redraw()}),$.each(this.output_terminals,function(a,b){b.redraw()})},destroy:function(){$.each(this.input_terminals,function(a,b){b.destroy()}),$.each(this.output_terminals,function(a,b){b.destroy()}),workflow.remove_node(this),$(this.element).remove()},make_active:function(){$(this.element).addClass("toolForm-active")},make_inactive:function(){var a=this.element.get(0);!function(b){b.removeChild(a),b.appendChild(a)}(a.parentNode),$(a).removeClass("toolForm-active")},init_field_data:function(a){a.type&&(this.type=a.type),this.name=a.name,this.form_html=a.form_html,this.tool_state=a.tool_state,this.tool_errors=a.tool_errors,this.tooltip=a.tooltip?a.tooltip:"",this.annotation=a.annotation,this.post_job_actions=a.post_job_actions?a.post_job_actions:{},this.label=a.label,this.uuid=a.uuid,this.workflow_outputs=a.workflow_outputs?a.workflow_outputs:[];var b=this,c=new NodeView({el:this.element[0],node:b});b.nodeView=c,$.each(a.data_inputs,function(a,b){c.addDataInput(b)}),a.data_inputs.length>0&&a.data_outputs.length>0&&c.addRule(),$.each(a.data_outputs,function(a,b){c.addDataOutput(b)}),c.render(),workflow.node_changed(this,!0)},update_field_data:function(a){var b=this;if(nodeView=b.nodeView,this.tool_state=a.tool_state,this.form_html=a.form_html,this.tool_errors=a.tool_errors,this.annotation=a.annotation,"post_job_actions"in a){var c=$.parseJSON(a.post_job_actions);this.post_job_actions=c?c:{}}b.nodeView.renderToolErrors();var d=nodeView.$("div.inputs"),e=nodeView.newInputsDiv(),f={};_.each(a.data_inputs,function(a){var c=b.nodeView.addDataInput(a,e);f[a.name]=c}),_.each(_.difference(_.values(nodeView.terminalViews),_.values(f)),function(a){a.el.terminal.destroy()}),nodeView.terminalViews=f,1==a.data_outputs.length&&"collection_type"in a.data_outputs[0]&&nodeView.updateDataOutput(a.data_outputs[0]),d.replaceWith(e),this.markChanged(),this.redraw()},error:function(a){var b=$(this.element).find(".toolFormBody");b.find("div").remove();var c="
"+a+"
";this.form_html=c,b.html(c),workflow.node_changed(this)},markChanged:function(){workflow.node_changed(this)}});$.extend(Workflow.prototype,{add_node:function(a){a.id=this.id_counter,a.element.attr("id","wf-node-step-"+a.id),this.id_counter++,this.nodes[a.id]=a,this.has_changes=!0,a.workflow=this},remove_node:function(a){this.active_node==a&&this.clear_active_node(),delete this.nodes[a.id],this.has_changes=!0},remove_all:function(){wf=this,$.each(this.nodes,function(a,b){b.destroy(),wf.remove_node(b)})},rectify_workflow_outputs:function(){var a=!1,b=!1;$.each(this.nodes,function(c,d){d.workflow_outputs&&d.workflow_outputs.length>0&&(a=!0),$.each(d.post_job_actions,function(a,c){"HideDatasetAction"===c.action_type&&(b=!0)})}),(a!==!1||b!==!1)&&$.each(this.nodes,function(b,c){if("tool"===c.type){var d=!1;null==c.post_job_actions&&(c.post_job_actions={},d=!0);var e=[];$.each(c.post_job_actions,function(a,b){"HideDatasetAction"==b.action_type&&e.push(a)}),e.length>0&&$.each(e,function(a,b){d=!0,delete c.post_job_actions[b]}),a&&$.each(c.output_terminals,function(a,b){var e=!0;if($.each(c.workflow_outputs,function(a,c){b.name===c&&(e=!1)}),e===!0){d=!0;var f={action_type:"HideDatasetAction",output_name:b.name,action_arguments:{}};c.post_job_actions["HideDatasetAction"+b.name]=null,c.post_job_actions["HideDatasetAction"+b.name]=f}}),workflow.active_node==c&&d===!0&&workflow.reload_active_node()}})},to_simple:function(){var a={};return $.each(this.nodes,function(b,c){var d={};$.each(c.input_terminals,function(a,b){d[b.name]=null;var c=[];$.each(b.connectors,function(a,e){c[a]={id:e.handle1.node.id,output_name:e.handle1.name},d[b.name]=c})});var e={};c.post_job_actions&&$.each(c.post_job_actions,function(a,b){var c={action_type:b.action_type,output_name:b.output_name,action_arguments:b.action_arguments};e[b.action_type+b.output_name]=null,e[b.action_type+b.output_name]=c}),c.workflow_outputs||(c.workflow_outputs=[]);var f={id:c.id,type:c.type,tool_id:c.tool_id,tool_state:c.tool_state,tool_errors:c.tool_errors,input_connections:d,position:$(c.element).position(),annotation:c.annotation,post_job_actions:c.post_job_actions,uuid:c.uuid,label:c.label,workflow_outputs:c.workflow_outputs};a[c.id]=f}),{steps:a}},from_simple:function(a){wf=this;var b=0;wf.name=a.name;var c=!1;$.each(a.steps,function(a,d){var e=prebuild_node(d.type,d.name,d.tool_id);e.init_field_data(d),d.position&&e.element.css({top:d.position.top,left:d.position.left}),e.id=d.id,wf.nodes[e.id]=e,b=Math.max(b,parseInt(a)),c||"tool"!==e.type||(e.workflow_outputs.length>0?c=!0:$.each(e.post_job_actions,function(a,b){"HideDatasetAction"===b.action_type&&(c=!0)}))}),wf.id_counter=b+1,$.each(a.steps,function(a,b){var d=wf.nodes[a];$.each(b.input_connections,function(a,b){b&&($.isArray(b)||(b=[b]),$.each(b,function(b,c){var e=wf.nodes[c.id],f=new Connector;f.connect(e.output_terminals[c.output_name],d.input_terminals[a]),f.redraw()}))}),c&&"tool"===d.type&&$.each(d.output_terminals,function(a,b){void 0===d.post_job_actions["HideDatasetAction"+b.name]&&(d.workflow_outputs.push(b.name),callout=$(d.element).find(".callout."+b.name),callout.find("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small.png"),workflow.has_changes=!0)})})},check_changes_in_active_form:function(){this.active_form_has_changes&&(this.has_changes=!0,$("#right-content").find("form").submit(),this.active_form_has_changes=!1)},reload_active_node:function(){if(this.active_node){var a=this.active_node;this.clear_active_node(),this.activate_node(a)}},clear_active_node:function(a){this.active_node&&(this.active_node.make_inactive(),this.active_node=null),parent.__NEWTOOLFORM__?parent.show_tool_form("
No node selected
",{id:"no-node"},a):parent.show_form_for_tool("
No node selected
")},activate_node:function(a){this.active_node!=a&&(this.check_changes_in_active_form(),this.clear_active_node(),parent.__NEWTOOLFORM__?parent.show_tool_form(a.form_html,a):parent.show_form_for_tool(a.form_html+a.tooltip,a),a.make_active(),this.active_node=a)},node_changed:function(a,b){this.has_changes=!0,this.active_node!=a||parent.__NEWTOOLFORM__&&!b||(this.check_changes_in_active_form(),parent.__NEWTOOLFORM__?parent.show_tool_form(a.form_html,a):parent.show_form_for_tool(a.form_html+a.tooltip,a))},layout:function(){this.check_changes_in_active_form(),this.has_changes=!0;var a={},b={};for($.each(this.nodes,function(c){void 0===a[c]&&(a[c]=0),void 0===b[c]&&(b[c]=[])}),$.each(this.nodes,function(c,d){$.each(d.input_terminals,function(c,e){$.each(e.connectors,function(c,e){var f=e.handle1.node;a[d.id]+=1,b[f.id].push(d.id)})})}),node_ids_by_level=[];;){level_parents=[];for(var c in a)0==a[c]&&level_parents.push(c);if(0==level_parents.length)break;node_ids_by_level.push(level_parents);for(var d in level_parents){var e=level_parents[d];delete a[e];for(var f in b[e])a[b[e][f]]-=1}}if(!a.length){var g=this.nodes,h=80;v_pad=30;var i=h;$.each(node_ids_by_level,function(a,b){b.sort(function(a,b){return $(g[a].element).position().top-$(g[b].element).position().top});var c=0,d=v_pad;$.each(b,function(a,b){var e=g[b],f=$(e.element);$(f).css({top:d,left:i}),c=Math.max(c,$(f).width()),d+=$(f).height()+v_pad}),i+=c+h}),$.each(g,function(a,b){b.redraw()})}},bounds_for_all_nodes:function(){var a,b=1/0,c=-(1/0),d=1/0,f=-(1/0);return $.each(this.nodes,function(g,h){e=$(h.element),a=e.position(),b=Math.min(b,a.left),c=Math.max(c,a.left+e.width()),d=Math.min(d,a.top),f=Math.max(f,a.top+e.width())}),{xmin:b,xmax:c,ymin:d,ymax:f}},fit_canvas_to_nodes:function(){var a=this.bounds_for_all_nodes(),b=this.canvas_container.position(),c=this.canvas_container.parent(),d=fix_delta(a.xmin,100),e=fix_delta(a.ymin,100);d=Math.max(d,b.left),e=Math.max(e,b.top);var f=b.left-d,g=b.top-e,h=round_up(a.xmax+100,100)+d,i=round_up(a.ymax+100,100)+e;h=Math.max(h,-f+c.width()),i=Math.max(i,-g+c.height()),this.canvas_container.css({left:f,top:g,width:h,height:i}),this.canvas_container.children().each(function(){var a=$(this).position();$(this).css("left",a.left+d),$(this).css("top",a.top+e)})}});var ext_to_type=null,type_to_type=null,NodeView=Backbone.View.extend({initialize:function(a){this.node=a.node,this.output_width=Math.max(150,this.$el.width()),this.tool_body=this.$el.find(".toolFormBody"),this.tool_body.find("div").remove(),this.newInputsDiv().appendTo(this.tool_body),this.terminalViews={},this.outputTerminlViews={}},render:function(){this.renderToolErrors(),this.$el.css("width",Math.min(250,Math.max(this.$el.width(),this.output_width)))},renderToolErrors:function(){this.node.tool_errors?this.$el.addClass("tool-node-error"):this.$el.removeClass("tool-node-error")},newInputsDiv:function(){return $("
")},updateMaxWidth:function(a){this.output_width=Math.max(this.output_width,a)},addRule:function(){this.tool_body.append($("
"))},addDataInput:function(a,b){var c=!0;b||(b=this.$(".inputs"),c=!1);var d=this.terminalViews[a.name],e="dataset_collection"==a.input_type?InputCollectionTerminalView:InputTerminalView;if(!d||d instanceof e||(d.el.terminal.destroy(),d=null),d){var f=d.el.terminal;f.update(a),f.destroyInvalidConnections()}else d=new e({node:this.node,input:a});this.terminalViews[a.name]=d;var g=d.el,h=new DataInputView({terminalElement:g,input:a,nodeView:this,skipResize:c}),i=h.$el;return b.append(i.prepend(d.terminalElements())),d},addDataOutput:function(a){var b=a.collection?OutputCollectionTerminalView:OutputTerminalView,c=new b({node:this.node,output:a}),d=new DataOutputView({output:a,terminalElement:c.el,nodeView:this});this.tool_body.append(d.$el.append(c.terminalElements()))},updateDataOutput:function(a){var b=this.node.output_terminals[a.name];b.update(a)}}),DataInputView=Backbone.View.extend({className:"form-row dataRow input-data-row",initialize:function(a){this.input=a.input,this.nodeView=a.nodeView,this.terminalElement=a.terminalElement,this.$el.attr("name",this.input.name).html(this.input.label),a.skipResize||(this.$el.css({position:"absolute",left:-1e3,top:-1e3,display:"none"}),$("body").append(this.el),this.nodeView.updateMaxWidth(this.$el.outerWidth()),this.$el.css({position:"",left:"",top:"",display:""}),this.$el.remove())}}),OutputCalloutView=Backbone.View.extend({tagName:"div",initialize:function(a){this.label=a.label,this.node=a.node,this.output=a.output;var b=this;this.$el.attr("class","callout "+this.label).css({display:"none"}).append($("
").append($("").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small-outline.png").click(function(){-1!=$.inArray(b.output.name,b.node.workflow_outputs)?(b.node.workflow_outputs.splice($.inArray(b.output.name,b.node.workflow_outputs),1),b.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small-outline.png")):(b.node.workflow_outputs.push(b.output.name),b.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small.png")),workflow.has_changes=!0,canvas_manager.draw_overview()}))).tooltip({delay:500,title:"Mark dataset as a workflow output. All unmarked datasets will be hidden."}),this.$el.css({top:"50%",margin:"-8px 0px 0px 0px",right:8}),this.$el.show(),this.resetImage()},resetImage:function(){-1===$.inArray(this.output.name,this.node.workflow_outputs)?this.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small-outline.png"):this.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small.png")},hoverImage:function(){this.$("img").attr("src",galaxy_config.root+"static/images/fugue/asterisk-small-yellow.png")}}),DataOutputView=Backbone.View.extend({className:"form-row dataRow",initialize:function(a){this.output=a.output,this.terminalElement=a.terminalElement,this.nodeView=a.nodeView;var b=this.output,c=b.name,d=this.nodeView.node,e=b.extensions.indexOf("input")>=0||b.extensions.indexOf("input_collection")>=0;if(e||(c=c+" ("+b.extensions.join(", ")+")"),this.$el.html(c),"tool"==d.type){var f=new OutputCalloutView({label:c,output:b,node:d});this.$el.append(f.el),this.$el.hover(function(){f.hoverImage()},function(){f.resetImage()})}this.$el.css({position:"absolute",left:-1e3,top:-1e3,display:"none"}),$("body").append(this.el),this.nodeView.updateMaxWidth(this.$el.outerWidth()+17),this.$el.css({position:"",left:"",top:"",display:""}).detach()}}),TerminalView=Backbone.View.extend({setupMappingView:function(a){var b=new this.terminalMappingClass({terminal:a}),c=new this.terminalMappingViewClass({model:b});c.render(),a.terminalMappingView=c,this.terminalMappingView=c},terminalElements:function(){return this.terminalMappingView?[this.terminalMappingView.el,this.el]:[this.el]}}),BaseInputTerminalView=TerminalView.extend({className:"terminal input-terminal",initialize:function(a){var b=a.node,c=a.input,d=c.name,e=this.terminalForInput(c);e.multiple||this.setupMappingView(e),this.el.terminal=e,e.node=b,e.name=d,b.input_terminals[d]=e},events:{dropinit:"onDropInit",dropstart:"onDropStart",dropend:"onDropEnd",drop:"onDrop",hover:"onHover"},onDropInit:function(a,b){var c=this.el.terminal;return $(b.drag).hasClass("output-terminal")&&c.canAccept(b.drag.terminal)},onDropStart:function(a,b){b.proxy.terminal&&(b.proxy.terminal.connectors[0].inner_color="#BBFFBB")},onDropEnd:function(a,b){b.proxy.terminal&&(b.proxy.terminal.connectors[0].inner_color="#FFFFFF")},onDrop:function(a,b){var c=this.el.terminal;new Connector(b.drag.terminal,c).redraw()},onHover:function(){var a=this.el,b=a.terminal;if(b.connectors.length>0){var c=$("
").css({display:"none"}).appendTo("body").append($("
").append($("
").addClass("fa-icon-button fa fa-times").click(function(){$.each(b.connectors,function(a,b){b&&b.destroy()}),c.remove()}))).bind("mouseleave",function(){$(this).remove()});c.css({top:$(a).offset().top-2,left:$(a).offset().left-c.width(),"padding-right":$(a).width()}).show()}}}),InputTerminalView=BaseInputTerminalView.extend({terminalMappingClass:InputTerminalMapping,terminalMappingViewClass:InputTerminalMappingView,terminalForInput:function(a){return new InputTerminal({element:this.el,input:a})}}),InputCollectionTerminalView=BaseInputTerminalView.extend({terminalMappingClass:InputCollectionTerminalMapping,terminalMappingViewClass:InputCollectionTerminalMappingView,terminalForInput:function(a){return new InputCollectionTerminal({element:this.el,input:a})}}),BaseOutputTerminalView=TerminalView.extend({className:"terminal output-terminal",initialize:function(a){var b=a.node,c=a.output,d=c.name,e=this.terminalForOutput(c);this.setupMappingView(e),this.el.terminal=e,e.node=b,e.name=d,b.output_terminals[d]=e},events:{drag:"onDrag",dragstart:"onDragStart",dragend:"onDragEnd"},onDrag:function(a,b){var c=function(){var a=$(b.proxy).offsetParent().offset(),c=b.offsetX-a.left,d=b.offsetY-a.top;$(b.proxy).css({left:c,top:d}),b.proxy.terminal.redraw(),canvas_manager.update_viewport_overlay()};c(),$("#canvas-container").get(0).scroll_panel.test(a,c)},onDragStart:function(a,b){$(b.available).addClass("input-terminal-active"),workflow.check_changes_in_active_form();var c=$('
').appendTo("#canvas-container").get(0);c.terminal=new OutputTerminal({element:c});var d=new Connector;return d.dragging=!0,d.connect(this.el.terminal,c.terminal),c},onDragEnd:function(a,b){var c=b.proxy.terminal.connectors[0];c&&c.destroy(),$(b.proxy).remove(),$(b.available).removeClass("input-terminal-active"),$("#canvas-container").get(0).scroll_panel.stop()}}),OutputTerminalView=BaseOutputTerminalView.extend({terminalMappingClass:OutputTerminalMapping,terminalMappingViewClass:OutputTerminalMappingView,terminalForOutput:function(a){var b=a.extensions,c=new OutputTerminal({element:this.el,datatypes:b});return c}}),OutputCollectionTerminalView=BaseOutputTerminalView.extend({terminalMappingClass:OutputCollectionTerminalMapping,terminalMappingViewClass:OutputCollectionTerminalMappingView,terminalForOutput:function(a){var b=a.collection_type,c=new OutputCollectionTerminal({element:this.el,collection_type:b,datatypes:a.extensions});return c}});$.extend(ScrollPanel.prototype,{test:function(a,b){clearTimeout(this.timeout);var c=a.pageX,d=a.pageY,e=$(this.panel),f=e.position(),g=e.width(),h=e.height(),i=e.parent(),j=i.width(),k=i.height(),l=i.offset(),m=l.left,n=l.top,o=m+i.width(),p=n+i.height(),q=-(g-j/2),r=-(h-k/2),s=j/2,t=k/2,u=!1,v=5,w=23;if(m>c-v){if(f.lefto){if(f.left>q){var x=Math.min(w,f.left-q);e.css("left",f.left-x),u=!0}}else if(n>d-v){if(f.topp&&f.top>r){var x=Math.min(w,f.top-q);e.css("top",f.top-x+"px"),u=!0}if(u){b();var e=this;this.timeout=setTimeout(function(){e.test(a,b)},50)}},stop:function(){clearTimeout(this.timeout)}}),$.extend(CanvasManager.prototype,{init_drag:function(){var a=this,b=function(b,c){b=Math.min(b,a.cv.width()/2),b=Math.max(b,-a.cc.width()+a.cv.width()/2),c=Math.min(c,a.cv.height()/2),c=Math.max(c,-a.cc.height()+a.cv.height()/2),a.cc.css({left:b,top:c}),a.cv.css({"background-position-x":b,"background-position-y":c}),a.update_viewport_overlay()};this.cc.each(function(){this.scroll_panel=new ScrollPanel(this)});var c,d;this.cv.bind("dragstart",function(){var b=$(this).offset(),e=a.cc.position();d=e.top-b.top,c=e.left-b.left}).bind("drag",function(a,e){b(e.offsetX+c,e.offsetY+d)}).bind("dragend",function(){workflow.fit_canvas_to_nodes(),a.draw_overview()}),this.ov.bind("drag",function(c,d){ +var e=a.cc.width(),f=a.cc.height(),g=a.oc.width(),h=a.oc.height(),i=$(this).offsetParent().offset(),j=d.offsetX-i.left,k=d.offsetY-i.top;b(-(j/g*e),-(k/h*f))}).bind("dragend",function(){workflow.fit_canvas_to_nodes(),a.draw_overview()}),$("#overview-border").bind("drag",function(b,c){var d=$(this).offsetParent(),e=d.offset(),f=Math.max(d.width()-(c.offsetX-e.left),d.height()-(c.offsetY-e.top));$(this).css({width:f,height:f}),a.draw_overview()}),$("#overview-border div").bind("drag",function(){})},update_viewport_overlay:function(){var a=this.cc,b=this.cv,c=this.oc,d=this.ov,e=a.width(),f=a.height(),g=c.width(),h=c.height(),i=a.position();d.css({left:-(i.left/e*g),top:-(i.top/f*h),width:b.width()/e*g-2,height:b.height()/f*h-2})},draw_overview:function(){var a,b,c,d,e=$("#overview-canvas"),f=e.parent().parent().width(),g=e.get(0).getContext("2d"),h=$("#canvas-container").width(),i=$("#canvas-container").height(),j=this.cv.width(),k=this.cv.height();j>h&&k>i?(c=h/j*f,d=(f-c)/2,a=i/k*f,b=(f-a)/2):i>h?(b=0,a=f,c=Math.ceil(a*h/i),d=(f-c)/2):(c=f,d=0,a=Math.ceil(c*i/h),b=(f-a)/2),e.parent().css({left:d,top:b,width:c,height:a}),e.attr("width",c),e.attr("height",a),$.each(workflow.nodes,function(b,d){g.fillStyle="#D2C099",g.strokeStyle="#D8B365",g.lineWidth=1;var e=$(d.element),f=e.position(),j=f.left/h*c,k=f.top/i*a,l=e.width()/h*c,m=e.height()/i*a;d.tool_errors?(g.fillStyle="#FFCCCC",g.strokeStyle="#AA6666"):void 0!=d.workflow_outputs&&d.workflow_outputs.length>0&&(g.fillStyle="#E8A92D",g.strokeStyle="#E8A92D"),g.fillRect(j,k,l,m),g.strokeRect(j,k,l,m)}),this.update_viewport_overlay()}}); //# sourceMappingURL=../maps/galaxy.workflow_editor.canvas.js.map \ No newline at end of file diff --git a/test/qunit/tests/workflow_editor_tests.js b/test/qunit/tests/workflow_editor_tests.js index cfcdab8322a..693e0bf06c6 100644 --- a/test/qunit/tests/workflow_editor_tests.js +++ b/test/qunit/tests/workflow_editor_tests.js @@ -301,6 +301,37 @@ define([ } ); } ); + module( "Input collection terminal model test", { + setup: function( ) { + this.node = new Node( { } ); + this.input = { extensions: [ "txt" ], collection_type: "list" }; + this.input_terminal = new InputCollectionTerminal( { input: this.input } ); + this.input_terminal.node = this.node; + } + } ); + + test( "Collection output can connect to same collection input type", function() { + var self = this; + var inputTerminal = self.input_terminal; + var outputTerminal = new OutputCollectionTerminal( { + datatypes: 'txt', + collection_type: 'list' + } ); + outputTerminal.node = {}; + ok( this.input_terminal.canAccept( outputTerminal ) ); + } ); + + test( "Collection output cannot connect to different collection input type", function() { + var self = this; + var inputTerminal = self.input_terminal; + var outputTerminal = new OutputCollectionTerminal( { + datatypes: 'txt', + collection_type: 'paired' + } ); + outputTerminal.node = {}; + ok( ! this.input_terminal.canAccept( outputTerminal ) ); + } ); + module( "Node unit test", { setup: function() { this.input_terminal = { destroy: sinon.spy(), redraw: sinon.spy() }; @@ -797,27 +828,54 @@ define([ } return outputTerminal; }, + newOutputCollectionTerminal: function( collectionType, output, node, mapOver ) { + collectionType = collectionType || "list"; + output = output || {}; + node = node || this.newNode(); + if( ! ( 'extensions' in output ) ) { + output[ 'extensions'] = [ 'data' ]; + } + var outputEl = $("
")[ 0 ]; + var outputTerminal = new OutputCollectionTerminal( { element: outputEl, datatypes: output.extensions, collection_type: collectionType } ); + var outputTerminalMapping = new OutputCollectionTerminalMapping( { terminal: outputTerminal } ); + outputTerminal.node = node; + if( mapOver ) { + outputTerminal.setMapOver( new CollectionTypeDescription( mapOver ) ); + } + return outputTerminal; + }, newNode: function( ) { var nodeEl = $("
")[ 0 ]; var node = new Node( { element: nodeEl } ); return node; }, - addOutput: function( terminal, connected ) { + _addExistingOutput: function( terminal, output, connected ) { var self = this; - var connectedOutput = this.newOutputTerminal(); var node = terminal.node; if( connected ) { with_workflow_global( function() { var inputTerminal = self.newInputTerminal(); - new Connector( inputTerminal, connectedOutput ); + new Connector( inputTerminal, output ); } ); } - this._addTerminalTo( connectedOutput, node.output_terminals ); - return connectedOutput; + this._addTerminalTo( output, node.output_terminals ); + return output; + }, + addOutput: function( terminal, connected ) { + var connectedOutput = this.newOutputTerminal(); + return this._addExistingOutput( terminal, connectedOutput, connected ); + }, + addCollectionOutput: function( terminal, connected ) { + var collectionOutput = this.newOutputCollectionTerminal(); + return this._addExistingOutput( terminal, collectionOutput, connected ); }, addConnectedOutput: function( terminal ) { return this.addOutput( terminal, true ); }, + addConnectedCollectionOutput: function( terminal ) { + var connectedOutput = this.newOutputCollectionTerminal(); + return this._addExistingOutput( terminal, connectedOutput, true ); + }, addConnectedInput: function( terminal ) { var self = this; var connectedInput = this.newInputTerminal(); @@ -892,6 +950,54 @@ define([ this.verifyNotAttachable( inputTerminal1, "list" ); } ); + test( "unmapped input can be attached to by output collection if matching connected input terminals map type", function() { + var inputTerminal1 = this.newInputTerminal(); + var connectedInput1 = this.addConnectedInput( inputTerminal1 ); + var connectedInput2 = this.addConnectedInput( inputTerminal1 ); + connectedInput2.setMapOver( new CollectionTypeDescription( "list") ); + var outputTerminal = this.newOutputCollectionTerminal( "list" ); + this.verifyAttachable( inputTerminal1, outputTerminal ); + } ); + + test( "unmapped input cannot be attached to by output collection if matching connected input terminals don't match map type", function() { + var inputTerminal1 = this.newInputTerminal(); + var connectedInput1 = this.addConnectedInput( inputTerminal1 ); + var connectedInput2 = this.addConnectedInput( inputTerminal1 ); + connectedInput2.setMapOver( new CollectionTypeDescription( "list") ); + var outputTerminal = this.newOutputCollectionTerminal( "paired" ); + this.verifyNotAttachable( inputTerminal1, outputTerminal ); + } ); + + test( "unmapped input can be attached to by output collection if effective output type (output+mapover) is same as mapped over input", function() { + var inputTerminal1 = this.newInputTerminal(); + var connectedInput1 = this.addConnectedInput( inputTerminal1 ); + var connectedInput2 = this.addConnectedInput( inputTerminal1 ); + connectedInput2.setMapOver( new CollectionTypeDescription( "list:paired") ); + var outputTerminal = this.newOutputCollectionTerminal( "paired" ); + outputTerminal.setMapOver( new CollectionTypeDescription( "list" ) ); + this.verifyAttachable( inputTerminal1, outputTerminal ); + } ); + + test( "unmapped input cannot be attached to by output collection if effective output type (output+mapover) is not same as mapped over input (1)", function() { + var inputTerminal1 = this.newInputTerminal(); + var connectedInput1 = this.addConnectedInput( inputTerminal1 ); + var connectedInput2 = this.addConnectedInput( inputTerminal1 ); + connectedInput2.setMapOver( new CollectionTypeDescription( "list:paired") ); + var outputTerminal = this.newOutputCollectionTerminal( "list" ); + outputTerminal.setMapOver( new CollectionTypeDescription( "list" ) ); + this.verifyNotAttachable( inputTerminal1, outputTerminal ); + } ); + + test( "unmapped input cannot be attached to by output collection if effective output type (output+mapover) is not same as mapped over input (2)", function() { + var inputTerminal1 = this.newInputTerminal(); + var connectedInput1 = this.addConnectedInput( inputTerminal1 ); + var connectedInput2 = this.addConnectedInput( inputTerminal1 ); + connectedInput2.setMapOver( new CollectionTypeDescription( "list:paired") ); + var outputTerminal = this.newOutputCollectionTerminal( "list" ); + outputTerminal.setMapOver( new CollectionTypeDescription( "paired" ) ); + this.verifyNotAttachable( inputTerminal1, outputTerminal ); + } ); + test( "unmapped input with unmapped, connected outputs cannot be mapped over", function() { // It would invalidate the connections - someday maybe we could try to // recursively map over everything down the DAG - it would be expensive @@ -1010,6 +1116,14 @@ define([ this.verifyNotMappedOver( output ); } ); + test( "resetMappingIfNeeded an input resets node collection outputs if they not connected to anything", function() { + var inputTerminal1 = this.newInputTerminal( "list" ); + var output = this.addCollectionOutput( inputTerminal1 ); + output.setMapOver( new CollectionTypeDescription( "list" ) ); + inputTerminal1.resetMappingIfNeeded(); + this.verifyNotMappedOver( output ); + } ); + test( "resetMappingIfNeeded resets if not last mapped over input", function() { // Idea here is that other nodes are forcing output to still be mapped // over so don't need to disconnect output nodes. @@ -1028,4 +1142,19 @@ define([ this.verifyMappedOver( connectedOutput ); } ); + test( "simple mapping over collection outputs works correctly", function() { + var inputTerminal1 = this.newInputTerminal(); + var connectedOutput = this.addConnectedCollectionOutput( inputTerminal1 ); + inputTerminal1.setMapOver( new CollectionTypeDescription( "list" ) ); + + // Can attach list output of collection type list that is being mapped + // over another list to a list:list (because this is what it is) but not + // to a list:list:list. + var testTerminal2 = this.newInputTerminal( "list:list" ); + this.verifyAttachable( testTerminal2, connectedOutput ); + + var testTerminal1 = this.newInputTerminal( "list:list:list" ); + this.verifyNotAttachable( testTerminal1, connectedOutput ); + } ); + }); \ No newline at end of file