diff --git a/client/galaxy/scripts/mvc/workflow/workflow-terminals.js b/client/galaxy/scripts/mvc/workflow/workflow-terminals.js index 18fc3cdea5a5..75d60c6380fd 100644 --- a/client/galaxy/scripts/mvc/workflow/workflow-terminals.js +++ b/client/galaxy/scripts/mvc/workflow/workflow-terminals.js @@ -1,4 +1,5 @@ -import Globals from "mvc/workflow/workflow-globals"; +// TODO; tie into Galaxy state? +window.workflow_globals = window.workflow_globals || {}; function CollectionTypeDescription(collectionType) { this.collectionType = collectionType; this.isCollection = true; @@ -369,7 +370,7 @@ var BaseInputTerminal = Terminal.extend({ other_datatype == "input" || other_datatype == "_sniff_" || other_datatype == "input_collection" || - Globals.app.isSubType( + window.workflow_globals.app.isSubType( cat_outputs[other_datatype_i], thisDatatype ) diff --git a/client/galaxy/scripts/mvc/workflow/workflow-view-data.js b/client/galaxy/scripts/mvc/workflow/workflow-view-data.js index f2e62cdd2cfd..982f36bb39e1 100644 --- a/client/galaxy/scripts/mvc/workflow/workflow-view-data.js +++ b/client/galaxy/scripts/mvc/workflow/workflow-view-data.js @@ -1,4 +1,6 @@ -import Globals from "mvc/workflow/workflow-globals"; +// TODO; tie into Galaxy state? +window.workflow_globals = window.workflow_globals || {}; + var DataInputView = Backbone.View.extend({ className: "form-row dataRow input-data-row", @@ -132,8 +134,8 @@ var OutputCalloutView = Backbone.View.extend({ "static/images/fugue/asterisk-small.png" ); } - Globals.workflow.has_changes = true; - Globals.canvas_manager.draw_overview(); + window.workflow_globals.workflow.has_changes = true; + window.workflow_globals.canvas_manager.draw_overview(); }) ) ) diff --git a/client/galaxy/scripts/mvc/workflow/workflow-view-terminals.js b/client/galaxy/scripts/mvc/workflow/workflow-view-terminals.js index 810ec9386bb2..088774d0faae 100644 --- a/client/galaxy/scripts/mvc/workflow/workflow-view-terminals.js +++ b/client/galaxy/scripts/mvc/workflow/workflow-view-terminals.js @@ -1,6 +1,9 @@ -import Globals from "mvc/workflow/workflow-globals"; import Terminals from "mvc/workflow/workflow-terminals"; import Connector from "mvc/workflow/workflow-connector"; + +// TODO; tie into Galaxy state? +window.workflow_globals = window.workflow_globals || {}; + var TerminalMappingView = Backbone.View.extend({ tagName: "div", className: "fa-icon-button fa fa-folder-o", @@ -196,7 +199,7 @@ var BaseOutputTerminalView = TerminalView.extend({ $(d.proxy).css({ left: x, top: y }); d.proxy.terminal.redraw(); // FIXME: global - Globals.canvas_manager.update_viewport_overlay(); + window.workflow_globals.canvas_manager.update_viewport_overlay(); }; onmove(); $("#canvas-container") @@ -206,7 +209,7 @@ var BaseOutputTerminalView = TerminalView.extend({ onDragStart: function(e, d) { $(d.available).addClass("input-terminal-active"); // Save PJAs in the case of change datatype actions. - Globals.workflow.check_changes_in_active_form(); + window.workflow_globals.workflow.check_changes_in_active_form(); // Drag proxy div var h = $( '
' diff --git a/client/galaxy/scripts/mvc/workflow/workflow-view.js b/client/galaxy/scripts/mvc/workflow/workflow-view.js index 6a567b75281a..e85ffde97c58 100644 --- a/client/galaxy/scripts/mvc/workflow/workflow-view.js +++ b/client/galaxy/scripts/mvc/workflow/workflow-view.js @@ -1,5 +1,4 @@ import Utils from "utils/utils"; -import Globals from "mvc/workflow/workflow-globals"; import Workflow from "mvc/workflow/workflow-manager"; import WorkflowCanvas from "mvc/workflow/workflow-canvas"; import Node from "mvc/workflow/workflow-node"; @@ -9,6 +8,10 @@ import Ui from "mvc/ui/ui-misc"; import async_save_text from "utils/async-save-text"; import Toastr from "libs/toastr"; import "ui/editable-text"; + +// TODO; tie into Galaxy state? +window.workflow_globals = window.workflow_globals || {}; + // Reset tool search to start state. function reset_tool_search(initValue) { // Function may be called in top frame or in tool_menu_frame; @@ -54,7 +57,7 @@ function add_node_icon($to_el, nodeType) { // create form view export default Backbone.View.extend({ initialize: function(options) { - var self = (Globals.app = this); + var self = (window.workflow_globals.app = this); this.options = options; this.urls = (options && options.urls) || {}; var close_editor = function() { @@ -225,7 +228,7 @@ export default Backbone.View.extend({ }); // Canvas overview management - this.canvas_manager = Globals.canvas_manager = new WorkflowCanvas( + this.canvas_manager = window.workflow_globals.canvas_manager = new WorkflowCanvas( this, $("#canvas-viewport"), $("#overview") @@ -632,7 +635,7 @@ export default Backbone.View.extend({ // Global state for the whole workflow reset: function() { this.workflow && this.workflow.remove_all(); - this.workflow = Globals.workflow = new Workflow( + this.workflow = window.workflow_globals.workflow = new Workflow( this, $("#canvas-container") ); diff --git a/static/maps/mvc/workflow/workflow-terminals.js.map b/static/maps/mvc/workflow/workflow-terminals.js.map index d28fe5f11f31..08fa34f3d0ed 100644 --- a/static/maps/mvc/workflow/workflow-terminals.js.map +++ b/static/maps/mvc/workflow/workflow-terminals.js.map @@ -1 +1 @@ -{"version":3,"sources":["mvc/workflow/workflow-terminals.js"],"names":["CollectionTypeDescription","collectionType","this","isCollection","rank","split","length","NULL_COLLECTION_TYPE_DESCRIPTION","canMatch","other","canMapOver","toString","append","otherCollectionType","equal","ANY_COLLECTION_TYPE_DESCRIPTION","prototype","otherCollectionTypeDescription","requiredSuffix","effectiveCollectionType","effectiveMapOver","str","initialize","mapOver","_endsWith","terminal","terminalMapping","indexOf","suffix","setMapOver","Backbone","Model","extend","attr","collectionTypeDescription","trigger","disableMapOver","connect","Terminal","disconnect","element","connectors","node","resetMappingIfNeeded","markChanged","c","connector","splice","$","inArray","destroy","each","redraw","destroyInvalidConnections","_","slice","val","multiple","outputTerminal","resetMapping","isMappedOver","OutputTerminal","mappedInput","call","datatypes","hasConnectedOutputTerminals","connectedInput","handle2","BaseInputTerminal","destroyIfInvalid","update","input","canAccept","reset","attachable","hasMappedOverInputTerminals","connected","hasConnectedMappedInputTerminals","_inputFilled","inputFilled","_collectionAttached","inputsFilled","firstOutput","_mappingConstraints","handle1","constraints","thisDatatype","push","first","other_datatype","cat_outputs","other_datatype_i","pja","pja_i","inputTerminal","_producesAcceptableDatatype","t","_otherCollectionType","Array","otherMapOver","post_job_actions","action_type","output_name","name","extensions","action_arguments","other_output","InputTerminal","mappingConstraints","collection","InputCollectionTerminal","thisMapOver","collectionTypes","collectionTypeIndex","effectiveCollectionTypes","_effectiveCollectionTypes","some","_effectiveMapOver","OutputCollectionTerminal","collection_type","map","newCollectionType","collectionTypeSource","output","console","log","TerminalMapping","collection_type_source"],"mappings":"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","file":"../../../scripts/mvc/workflow/workflow-terminals.js","sourcesContent":["import Globals from \"mvc/workflow/workflow-globals\";\nfunction CollectionTypeDescription(collectionType) {\n this.collectionType = collectionType;\n this.isCollection = true;\n this.rank = collectionType.split(\":\").length;\n}\n\nvar NULL_COLLECTION_TYPE_DESCRIPTION = {\n isCollection: false,\n canMatch: function(other) {\n return false;\n },\n canMapOver: function(other) {\n return false;\n },\n toString: function() {\n return \"NullCollectionType[]\";\n },\n append: function(otherCollectionType) {\n return otherCollectionType;\n },\n equal: function(other) {\n return other === this;\n }\n};\n\nvar ANY_COLLECTION_TYPE_DESCRIPTION = {\n isCollection: true,\n canMatch: function(other) {\n return NULL_COLLECTION_TYPE_DESCRIPTION !== other;\n },\n canMapOver: function(other) {\n return false;\n },\n toString: function() {\n return \"AnyCollectionType[]\";\n },\n append: function(otherCollectionType) {\n throw \"Cannot append to ANY_COLLECTION_TYPE_DESCRIPTION\";\n },\n equal: function(other) {\n return other === this;\n }\n};\n\n$.extend(CollectionTypeDescription.prototype, {\n append: function(otherCollectionTypeDescription) {\n if (\n otherCollectionTypeDescription === NULL_COLLECTION_TYPE_DESCRIPTION\n ) {\n return this;\n }\n if (\n otherCollectionTypeDescription === ANY_COLLECTION_TYPE_DESCRIPTION\n ) {\n return otherCollectionType;\n }\n return new CollectionTypeDescription(\n this.collectionType +\n \":\" +\n otherCollectionTypeDescription.collectionType\n );\n },\n canMatch: function(otherCollectionTypeDescription) {\n if (\n otherCollectionTypeDescription === NULL_COLLECTION_TYPE_DESCRIPTION\n ) {\n return false;\n }\n if (\n otherCollectionTypeDescription === ANY_COLLECTION_TYPE_DESCRIPTION\n ) {\n return true;\n }\n return (\n otherCollectionTypeDescription.collectionType == this.collectionType\n );\n },\n canMapOver: function(otherCollectionTypeDescription) {\n if (\n otherCollectionTypeDescription === NULL_COLLECTION_TYPE_DESCRIPTION\n ) {\n return false;\n }\n if (\n otherCollectionTypeDescription === ANY_COLLECTION_TYPE_DESCRIPTION\n ) {\n return false;\n }\n if (this.rank <= otherCollectionTypeDescription.rank) {\n // Cannot map over self...\n return false;\n }\n var requiredSuffix = otherCollectionTypeDescription.collectionType;\n return this._endsWith(this.collectionType, requiredSuffix);\n },\n effectiveMapOver: function(otherCollectionTypeDescription) {\n var otherCollectionType = otherCollectionTypeDescription.collectionType;\n var effectiveCollectionType = this.collectionType.substring(\n 0,\n this.collectionType.length - otherCollectionType.length - 1\n );\n return new CollectionTypeDescription(effectiveCollectionType);\n },\n equal: function(otherCollectionTypeDescription) {\n return (\n otherCollectionTypeDescription.collectionType == this.collectionType\n );\n },\n toString: function() {\n return \"CollectionType[\" + this.collectionType + \"]\";\n },\n _endsWith: function(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n }\n});\n\nvar TerminalMapping = Backbone.Model.extend({\n initialize: function(attr) {\n this.mapOver = attr.mapOver || NULL_COLLECTION_TYPE_DESCRIPTION;\n this.terminal = attr.terminal;\n this.terminal.terminalMapping = this;\n },\n disableMapOver: function() {\n this.setMapOver(NULL_COLLECTION_TYPE_DESCRIPTION);\n },\n setMapOver: function(collectionTypeDescription) {\n // TODO: Can I use \"attributes\" or something to auto trigger \"change\"\n // event?\n this.mapOver = collectionTypeDescription;\n this.trigger(\"change\");\n }\n});\n\nvar Terminal = Backbone.Model.extend({\n initialize: function(attr) {\n this.element = attr.element;\n this.connectors = [];\n },\n connect: function(connector) {\n this.connectors.push(connector);\n if (this.node) {\n this.node.markChanged();\n }\n },\n disconnect: function(connector) {\n this.connectors.splice($.inArray(connector, this.connectors), 1);\n if (this.node) {\n this.node.markChanged();\n this.resetMappingIfNeeded();\n }\n },\n redraw: function() {\n $.each(this.connectors, function(_, c) {\n c.redraw();\n });\n },\n destroy: function() {\n $.each(this.connectors.slice(), function(_, c) {\n c.destroy();\n });\n },\n destroyInvalidConnections: function() {\n _.each(this.connectors, function(connector) {\n connector && connector.destroyIfInvalid();\n });\n },\n setMapOver: function(val) {\n if (this.multiple) {\n return; // Cannot set this to be multirun...\n }\n\n if (!this.mapOver().equal(val)) {\n this.terminalMapping.setMapOver(val);\n _.each(this.node.output_terminals, function(outputTerminal) {\n outputTerminal.setMapOver(val);\n });\n }\n },\n mapOver: function() {\n if (!this.terminalMapping) {\n return NULL_COLLECTION_TYPE_DESCRIPTION;\n } else {\n return this.terminalMapping.mapOver;\n }\n },\n isMappedOver: function() {\n return (\n this.terminalMapping && this.terminalMapping.mapOver.isCollection\n );\n },\n resetMapping: function() {\n this.terminalMapping.disableMapOver();\n },\n\n resetMappingIfNeeded: function() {} // Subclasses should override this...\n});\n\nvar OutputTerminal = Terminal.extend({\n initialize: function(attr) {\n Terminal.prototype.initialize.call(this, attr);\n this.datatypes = attr.datatypes;\n },\n\n resetMappingIfNeeded: function() {\n // If inputs were only mapped over to preserve\n // an output just disconnected reset these...\n if (\n !this.node.hasConnectedOutputTerminals() &&\n !this.node.hasConnectedMappedInputTerminals()\n ) {\n _.each(this.node.mappedInputTerminals(), function(mappedInput) {\n mappedInput.resetMappingIfNeeded();\n });\n }\n\n var noMappedInputs = !this.node.hasMappedOverInputTerminals();\n if (noMappedInputs) {\n this.resetMapping();\n }\n },\n\n resetMapping: function() {\n this.terminalMapping.disableMapOver();\n _.each(this.connectors, function(connector) {\n var connectedInput = connector.handle2;\n if (connectedInput) {\n // Not exactly right because this is still connected.\n // Either rewrite resetMappingIfNeeded or disconnect\n // and reconnect if valid.\n connectedInput.resetMappingIfNeeded();\n connector.destroyIfInvalid();\n }\n });\n }\n});\n\nvar BaseInputTerminal = Terminal.extend({\n initialize: function(attr) {\n Terminal.prototype.initialize.call(this, attr);\n this.update(attr.input); // subclasses should implement this...\n },\n canAccept: function(other) {\n if (this._inputFilled()) {\n return false;\n } else {\n return this.attachable(other);\n }\n },\n resetMappingIfNeeded: function() {\n var mapOver = this.mapOver();\n if (!mapOver.isCollection) {\n return;\n }\n // No output terminals are counting on this being mapped\n // over if connected inputs are still mapped over or if none\n // of the outputs are connected...\n var reset =\n this.node.hasConnectedMappedInputTerminals() ||\n !this.node.hasConnectedOutputTerminals();\n if (reset) {\n this.resetMapping();\n }\n },\n resetMapping: function() {\n this.terminalMapping.disableMapOver();\n if (!this.node.hasMappedOverInputTerminals()) {\n _.each(this.node.output_terminals, function(terminal) {\n // This shouldn't be called if there are mapped over\n // outputs.\n terminal.resetMapping();\n });\n }\n },\n connected: function() {\n return this.connectors.length !== 0;\n },\n _inputFilled: function() {\n var inputFilled;\n if (!this.connected()) {\n inputFilled = false;\n } else {\n if (this.multiple) {\n if (this._collectionAttached()) {\n // Can only attach one collection to multiple input\n // data parameter.\n inputsFilled = true;\n } else {\n inputFilled = false;\n }\n } else {\n inputFilled = true;\n }\n }\n return inputFilled;\n },\n _collectionAttached: function() {\n if (!this.connected()) {\n return false;\n } else {\n var firstOutput = this.connectors[0].handle1;\n if (!firstOutput) {\n return false;\n } else {\n if (\n firstOutput.isCollection ||\n firstOutput.isMappedOver() ||\n firstOutput.datatypes.indexOf(\"input_collection\") > 0\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n },\n _mappingConstraints: function() {\n // If this is a connected terminal, return list of collection types\n // other terminals connected to node are constraining mapping to.\n if (!this.node) {\n return []; // No node - completely unconstrained\n }\n var mapOver = this.mapOver();\n if (mapOver.isCollection) {\n return [mapOver];\n }\n\n var constraints = [];\n if (!this.node.hasConnectedOutputTerminals()) {\n _.each(this.node.connectedMappedInputTerminals(), function(\n inputTerminal\n ) {\n constraints.push(inputTerminal.mapOver());\n });\n } else {\n // All outputs should have same mapOver status - least specific.\n constraints.push(\n _.first(_.values(this.node.output_terminals)).mapOver()\n );\n }\n return constraints;\n },\n _producesAcceptableDatatype: function(other) {\n // other is a non-collection output...\n for (var t in this.datatypes) {\n var thisDatatype = this.datatypes[t];\n if (thisDatatype == \"input\") {\n return true;\n }\n var cat_outputs = new Array();\n cat_outputs = cat_outputs.concat(other.datatypes);\n if (other.node.post_job_actions) {\n for (var pja_i in other.node.post_job_actions) {\n var pja = other.node.post_job_actions[pja_i];\n if (\n pja.action_type == \"ChangeDatatypeAction\" &&\n (pja.output_name == \"\" ||\n pja.output_name == other.name) &&\n pja.action_arguments\n ) {\n cat_outputs.push(pja.action_arguments[\"newtype\"]);\n }\n }\n }\n // FIXME: No idea what to do about case when datatype is 'input'\n for (var other_datatype_i in cat_outputs) {\n var other_datatype = cat_outputs[other_datatype_i];\n if (\n other_datatype == \"input\" ||\n other_datatype == \"_sniff_\" ||\n other_datatype == \"input_collection\" ||\n Globals.app.isSubType(\n cat_outputs[other_datatype_i],\n thisDatatype\n )\n ) {\n return true;\n }\n }\n }\n return false;\n },\n _otherCollectionType: function(other) {\n var otherCollectionType = NULL_COLLECTION_TYPE_DESCRIPTION;\n if (other.isCollection) {\n otherCollectionType = other.collectionType;\n }\n var otherMapOver = other.mapOver();\n if (otherMapOver.isCollection) {\n otherCollectionType = otherMapOver.append(otherCollectionType);\n }\n return otherCollectionType;\n }\n});\n\nvar InputTerminal = BaseInputTerminal.extend({\n update: function(input) {\n this.datatypes = input.extensions;\n this.multiple = input.multiple;\n this.collection = false;\n },\n connect: function(connector) {\n BaseInputTerminal.prototype.connect.call(this, connector);\n var other_output = connector.handle1;\n if (!other_output) {\n return;\n }\n var otherCollectionType = this._otherCollectionType(other_output);\n if (otherCollectionType.isCollection) {\n this.setMapOver(otherCollectionType);\n }\n },\n attachable: function(other) {\n var otherCollectionType = this._otherCollectionType(other);\n var thisMapOver = this.mapOver();\n if (otherCollectionType.isCollection) {\n if (this.multiple) {\n if (this.connected() && !this._collectionAttached()) {\n // if single inputs attached, cannot also attach a\n // collection (yet...)\n return false;\n }\n if (otherCollectionType.rank == 1) {\n return this._producesAcceptableDatatype(other);\n } else {\n // TODO: Allow subcollection mapping over this as if it were\n // a list collection input.\n return false;\n }\n }\n if (\n thisMapOver.isCollection &&\n thisMapOver.canMatch(otherCollectionType)\n ) {\n return this._producesAcceptableDatatype(other);\n } else {\n // Need to check if this would break constraints...\n var mappingConstraints = this._mappingConstraints();\n if (\n mappingConstraints.every(\n _.bind(\n otherCollectionType.canMatch,\n otherCollectionType\n )\n )\n ) {\n return this._producesAcceptableDatatype(other);\n } else {\n return false;\n }\n }\n } else if (thisMapOver.isCollection) {\n // Attempting to match a non-collection output to an\n // explicitly collection input.\n return false;\n }\n return this._producesAcceptableDatatype(other);\n }\n});\n\nvar InputCollectionTerminal = BaseInputTerminal.extend({\n update: function(input) {\n this.multiple = false;\n this.collection = true;\n this.datatypes = input.extensions;\n var collectionTypes = [];\n if (input.collection_types) {\n _.each(input.collection_types, function(collectionType) {\n collectionTypes.push(\n new CollectionTypeDescription(collectionType)\n );\n });\n } else {\n collectionTypes.push(ANY_COLLECTION_TYPE_DESCRIPTION);\n }\n this.collectionTypes = collectionTypes;\n },\n connect: function(connector) {\n BaseInputTerminal.prototype.connect.call(this, connector);\n var other = connector.handle1;\n if (!other) {\n return;\n }\n\n var effectiveMapOver = this._effectiveMapOver(other);\n this.setMapOver(effectiveMapOver);\n },\n _effectiveMapOver: function(other) {\n var collectionTypes = this.collectionTypes;\n var otherCollectionType = this._otherCollectionType(other);\n var canMatch = _.some(collectionTypes, function(collectionType) {\n return collectionType.canMatch(otherCollectionType);\n });\n\n if (!canMatch) {\n for (var collectionTypeIndex in collectionTypes) {\n var collectionType = collectionTypes[collectionTypeIndex];\n if (otherCollectionType.canMapOver(collectionType)) {\n var effectiveMapOver = otherCollectionType.effectiveMapOver(\n collectionType\n );\n if (effectiveMapOver != NULL_COLLECTION_TYPE_DESCRIPTION) {\n return effectiveMapOver;\n }\n }\n }\n }\n return NULL_COLLECTION_TYPE_DESCRIPTION;\n },\n _effectiveCollectionTypes: function() {\n var thisMapOver = this.mapOver();\n return _.map(this.collectionTypes, function(t) {\n return thisMapOver.append(t);\n });\n },\n attachable: function(other) {\n var otherCollectionType = this._otherCollectionType(other);\n if (otherCollectionType.isCollection) {\n var effectiveCollectionTypes = this._effectiveCollectionTypes();\n var thisMapOver = this.mapOver();\n var canMatch = _.some(effectiveCollectionTypes, function(\n effectiveCollectionType\n ) {\n return effectiveCollectionType.canMatch(otherCollectionType);\n });\n if (canMatch) {\n // Only way a direct match...\n return this._producesAcceptableDatatype(other);\n // Otherwise we need to mapOver\n } else if (thisMapOver.isCollection) {\n // In this case, mapOver already set and we didn't match skipping...\n return false;\n } else if (\n _.some(this.collectionTypes, function(collectionType) {\n return otherCollectionType.canMapOver(collectionType);\n })\n ) {\n var effectiveMapOver = this._effectiveMapOver(other);\n if (!effectiveMapOver.isCollection) {\n return false;\n }\n // Need to check if this would break constraints...\n var mappingConstraints = this._mappingConstraints();\n if (mappingConstraints.every(effectiveMapOver.canMatch)) {\n return this._producesAcceptableDatatype(other);\n }\n }\n }\n return false;\n }\n});\n\nvar OutputCollectionTerminal = Terminal.extend({\n initialize: function(attr) {\n Terminal.prototype.initialize.call(this, attr);\n this.datatypes = attr.datatypes;\n if (attr.collection_type) {\n this.collectionType = new CollectionTypeDescription(\n attr.collection_type\n );\n } else {\n var collectionTypeSource = attr.collection_type_source;\n if (!collectionTypeSource) {\n console.log(\n \"Warning: No collection type or collection type source defined.\"\n );\n }\n this.collectionType = ANY_COLLECTION_TYPE_DESCRIPTION;\n }\n this.isCollection = true;\n },\n update: function(output) {\n var newCollectionType;\n if (output.collection_type) {\n newCollectionType = new CollectionTypeDescription(\n output.collection_type\n );\n } else {\n var collectionTypeSource = output.collection_type_source;\n if (!collectionTypeSource) {\n console.log(\n \"Warning: No collection type or collection type source defined.\"\n );\n }\n newCollectionType = ANY_COLLECTION_TYPE_DESCRIPTION;\n }\n\n if (\n newCollectionType.collectionType !=\n this.collectionType.collectionType\n ) {\n _.each(this.connectors, function(connector) {\n // TODO: consider checking if connection valid before removing...\n connector.destroy();\n });\n }\n this.collectionType = newCollectionType;\n }\n});\n\nexport default {\n InputTerminal: InputTerminal,\n OutputTerminal: OutputTerminal,\n InputCollectionTerminal: InputCollectionTerminal,\n OutputCollectionTerminal: OutputCollectionTerminal,\n TerminalMapping: TerminalMapping,\n\n // test export\n CollectionTypeDescription: CollectionTypeDescription,\n NULL_COLLECTION_TYPE_DESCRIPTION: NULL_COLLECTION_TYPE_DESCRIPTION,\n ANY_COLLECTION_TYPE_DESCRIPTION: ANY_COLLECTION_TYPE_DESCRIPTION\n};\n"]} \ No newline at end of file +{"version":3,"sources":["mvc/workflow/workflow-terminals.js"],"names":["CollectionTypeDescription","collectionType","this","isCollection","rank","split","length","window","workflow_globals","NULL_COLLECTION_TYPE_DESCRIPTION","canMatch","canMapOver","other","otherCollectionType","toString","ANY_COLLECTION_TYPE_DESCRIPTION","equal","$","extend","prototype","otherCollectionTypeDescription","effectiveMapOver","requiredSuffix","_endsWith","str","suffix","mapOver","substring","TerminalMapping","Backbone","terminal","disableMapOver","setMapOver","collectionTypeDescription","trigger","Model","initialize","attr","element","connectors","terminalMapping","node","Terminal","redraw","c","connect","connector","destroy","push","each","destroyInvalidConnections","_","markChanged","resetMappingIfNeeded","outputTerminal","val","multiple","resetMapping","output_terminals","OutputTerminal","isMappedOver","hasConnectedOutputTerminals","noMappedInputs","call","datatypes","connectedInput","mappedInputTerminals","mappedInput","update","attachable","handle2","destroyIfInvalid","BaseInputTerminal","input","canAccept","hasConnectedMappedInputTerminals","inputFilled","hasMappedOverInputTerminals","connected","_inputFilled","_collectionAttached","inputsFilled","_mappingConstraints","firstOutput","constraints","indexOf","cat_outputs","_otherCollectionType","other_datatype","other_datatype_i","inputTerminal","_producesAcceptableDatatype","otherMapOver","thisDatatype","t","Array","InputTerminal","post_job_actions","extensions","pja_i","pja","action_type","output_name","name","other_output","action_arguments","thisMapOver","app","isSubType","mappingConstraints","append","collection","handle1","collectionTypes","InputCollectionTerminal","collection_types","_effectiveMapOver","OutputCollectionTerminal","some","collectionTypeIndex","collectionTypeSource","collection_type_source","console","newCollectionType","_effectiveCollectionTypes","effectiveCollectionTypes","effectiveCollectionType","every","collection_type","log","output"],"mappings":"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","file":"../../../scripts/mvc/workflow/workflow-terminals.js","sourcesContent":["// TODO; tie into Galaxy state?\nwindow.workflow_globals = window.workflow_globals || {};\nfunction CollectionTypeDescription(collectionType) {\n this.collectionType = collectionType;\n this.isCollection = true;\n this.rank = collectionType.split(\":\").length;\n}\n\nvar NULL_COLLECTION_TYPE_DESCRIPTION = {\n isCollection: false,\n canMatch: function(other) {\n return false;\n },\n canMapOver: function(other) {\n return false;\n },\n toString: function() {\n return \"NullCollectionType[]\";\n },\n append: function(otherCollectionType) {\n return otherCollectionType;\n },\n equal: function(other) {\n return other === this;\n }\n};\n\nvar ANY_COLLECTION_TYPE_DESCRIPTION = {\n isCollection: true,\n canMatch: function(other) {\n return NULL_COLLECTION_TYPE_DESCRIPTION !== other;\n },\n canMapOver: function(other) {\n return false;\n },\n toString: function() {\n return \"AnyCollectionType[]\";\n },\n append: function(otherCollectionType) {\n throw \"Cannot append to ANY_COLLECTION_TYPE_DESCRIPTION\";\n },\n equal: function(other) {\n return other === this;\n }\n};\n\n$.extend(CollectionTypeDescription.prototype, {\n append: function(otherCollectionTypeDescription) {\n if (\n otherCollectionTypeDescription === NULL_COLLECTION_TYPE_DESCRIPTION\n ) {\n return this;\n }\n if (\n otherCollectionTypeDescription === ANY_COLLECTION_TYPE_DESCRIPTION\n ) {\n return otherCollectionType;\n }\n return new CollectionTypeDescription(\n this.collectionType +\n \":\" +\n otherCollectionTypeDescription.collectionType\n );\n },\n canMatch: function(otherCollectionTypeDescription) {\n if (\n otherCollectionTypeDescription === NULL_COLLECTION_TYPE_DESCRIPTION\n ) {\n return false;\n }\n if (\n otherCollectionTypeDescription === ANY_COLLECTION_TYPE_DESCRIPTION\n ) {\n return true;\n }\n return (\n otherCollectionTypeDescription.collectionType == this.collectionType\n );\n },\n canMapOver: function(otherCollectionTypeDescription) {\n if (\n otherCollectionTypeDescription === NULL_COLLECTION_TYPE_DESCRIPTION\n ) {\n return false;\n }\n if (\n otherCollectionTypeDescription === ANY_COLLECTION_TYPE_DESCRIPTION\n ) {\n return false;\n }\n if (this.rank <= otherCollectionTypeDescription.rank) {\n // Cannot map over self...\n return false;\n }\n var requiredSuffix = otherCollectionTypeDescription.collectionType;\n return this._endsWith(this.collectionType, requiredSuffix);\n },\n effectiveMapOver: function(otherCollectionTypeDescription) {\n var otherCollectionType = otherCollectionTypeDescription.collectionType;\n var effectiveCollectionType = this.collectionType.substring(\n 0,\n this.collectionType.length - otherCollectionType.length - 1\n );\n return new CollectionTypeDescription(effectiveCollectionType);\n },\n equal: function(otherCollectionTypeDescription) {\n return (\n otherCollectionTypeDescription.collectionType == this.collectionType\n );\n },\n toString: function() {\n return \"CollectionType[\" + this.collectionType + \"]\";\n },\n _endsWith: function(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n }\n});\n\nvar TerminalMapping = Backbone.Model.extend({\n initialize: function(attr) {\n this.mapOver = attr.mapOver || NULL_COLLECTION_TYPE_DESCRIPTION;\n this.terminal = attr.terminal;\n this.terminal.terminalMapping = this;\n },\n disableMapOver: function() {\n this.setMapOver(NULL_COLLECTION_TYPE_DESCRIPTION);\n },\n setMapOver: function(collectionTypeDescription) {\n // TODO: Can I use \"attributes\" or something to auto trigger \"change\"\n // event?\n this.mapOver = collectionTypeDescription;\n this.trigger(\"change\");\n }\n});\n\nvar Terminal = Backbone.Model.extend({\n initialize: function(attr) {\n this.element = attr.element;\n this.connectors = [];\n },\n connect: function(connector) {\n this.connectors.push(connector);\n if (this.node) {\n this.node.markChanged();\n }\n },\n disconnect: function(connector) {\n this.connectors.splice($.inArray(connector, this.connectors), 1);\n if (this.node) {\n this.node.markChanged();\n this.resetMappingIfNeeded();\n }\n },\n redraw: function() {\n $.each(this.connectors, function(_, c) {\n c.redraw();\n });\n },\n destroy: function() {\n $.each(this.connectors.slice(), function(_, c) {\n c.destroy();\n });\n },\n destroyInvalidConnections: function() {\n _.each(this.connectors, function(connector) {\n connector && connector.destroyIfInvalid();\n });\n },\n setMapOver: function(val) {\n if (this.multiple) {\n return; // Cannot set this to be multirun...\n }\n\n if (!this.mapOver().equal(val)) {\n this.terminalMapping.setMapOver(val);\n _.each(this.node.output_terminals, function(outputTerminal) {\n outputTerminal.setMapOver(val);\n });\n }\n },\n mapOver: function() {\n if (!this.terminalMapping) {\n return NULL_COLLECTION_TYPE_DESCRIPTION;\n } else {\n return this.terminalMapping.mapOver;\n }\n },\n isMappedOver: function() {\n return (\n this.terminalMapping && this.terminalMapping.mapOver.isCollection\n );\n },\n resetMapping: function() {\n this.terminalMapping.disableMapOver();\n },\n\n resetMappingIfNeeded: function() {} // Subclasses should override this...\n});\n\nvar OutputTerminal = Terminal.extend({\n initialize: function(attr) {\n Terminal.prototype.initialize.call(this, attr);\n this.datatypes = attr.datatypes;\n },\n\n resetMappingIfNeeded: function() {\n // If inputs were only mapped over to preserve\n // an output just disconnected reset these...\n if (\n !this.node.hasConnectedOutputTerminals() &&\n !this.node.hasConnectedMappedInputTerminals()\n ) {\n _.each(this.node.mappedInputTerminals(), function(mappedInput) {\n mappedInput.resetMappingIfNeeded();\n });\n }\n\n var noMappedInputs = !this.node.hasMappedOverInputTerminals();\n if (noMappedInputs) {\n this.resetMapping();\n }\n },\n\n resetMapping: function() {\n this.terminalMapping.disableMapOver();\n _.each(this.connectors, function(connector) {\n var connectedInput = connector.handle2;\n if (connectedInput) {\n // Not exactly right because this is still connected.\n // Either rewrite resetMappingIfNeeded or disconnect\n // and reconnect if valid.\n connectedInput.resetMappingIfNeeded();\n connector.destroyIfInvalid();\n }\n });\n }\n});\n\nvar BaseInputTerminal = Terminal.extend({\n initialize: function(attr) {\n Terminal.prototype.initialize.call(this, attr);\n this.update(attr.input); // subclasses should implement this...\n },\n canAccept: function(other) {\n if (this._inputFilled()) {\n return false;\n } else {\n return this.attachable(other);\n }\n },\n resetMappingIfNeeded: function() {\n var mapOver = this.mapOver();\n if (!mapOver.isCollection) {\n return;\n }\n // No output terminals are counting on this being mapped\n // over if connected inputs are still mapped over or if none\n // of the outputs are connected...\n var reset =\n this.node.hasConnectedMappedInputTerminals() ||\n !this.node.hasConnectedOutputTerminals();\n if (reset) {\n this.resetMapping();\n }\n },\n resetMapping: function() {\n this.terminalMapping.disableMapOver();\n if (!this.node.hasMappedOverInputTerminals()) {\n _.each(this.node.output_terminals, function(terminal) {\n // This shouldn't be called if there are mapped over\n // outputs.\n terminal.resetMapping();\n });\n }\n },\n connected: function() {\n return this.connectors.length !== 0;\n },\n _inputFilled: function() {\n var inputFilled;\n if (!this.connected()) {\n inputFilled = false;\n } else {\n if (this.multiple) {\n if (this._collectionAttached()) {\n // Can only attach one collection to multiple input\n // data parameter.\n inputsFilled = true;\n } else {\n inputFilled = false;\n }\n } else {\n inputFilled = true;\n }\n }\n return inputFilled;\n },\n _collectionAttached: function() {\n if (!this.connected()) {\n return false;\n } else {\n var firstOutput = this.connectors[0].handle1;\n if (!firstOutput) {\n return false;\n } else {\n if (\n firstOutput.isCollection ||\n firstOutput.isMappedOver() ||\n firstOutput.datatypes.indexOf(\"input_collection\") > 0\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n },\n _mappingConstraints: function() {\n // If this is a connected terminal, return list of collection types\n // other terminals connected to node are constraining mapping to.\n if (!this.node) {\n return []; // No node - completely unconstrained\n }\n var mapOver = this.mapOver();\n if (mapOver.isCollection) {\n return [mapOver];\n }\n\n var constraints = [];\n if (!this.node.hasConnectedOutputTerminals()) {\n _.each(this.node.connectedMappedInputTerminals(), function(\n inputTerminal\n ) {\n constraints.push(inputTerminal.mapOver());\n });\n } else {\n // All outputs should have same mapOver status - least specific.\n constraints.push(\n _.first(_.values(this.node.output_terminals)).mapOver()\n );\n }\n return constraints;\n },\n _producesAcceptableDatatype: function(other) {\n // other is a non-collection output...\n for (var t in this.datatypes) {\n var thisDatatype = this.datatypes[t];\n if (thisDatatype == \"input\") {\n return true;\n }\n var cat_outputs = new Array();\n cat_outputs = cat_outputs.concat(other.datatypes);\n if (other.node.post_job_actions) {\n for (var pja_i in other.node.post_job_actions) {\n var pja = other.node.post_job_actions[pja_i];\n if (\n pja.action_type == \"ChangeDatatypeAction\" &&\n (pja.output_name == \"\" ||\n pja.output_name == other.name) &&\n pja.action_arguments\n ) {\n cat_outputs.push(pja.action_arguments[\"newtype\"]);\n }\n }\n }\n // FIXME: No idea what to do about case when datatype is 'input'\n for (var other_datatype_i in cat_outputs) {\n var other_datatype = cat_outputs[other_datatype_i];\n if (\n other_datatype == \"input\" ||\n other_datatype == \"_sniff_\" ||\n other_datatype == \"input_collection\" ||\n window.workflow_globals.app.isSubType(\n cat_outputs[other_datatype_i],\n thisDatatype\n )\n ) {\n return true;\n }\n }\n }\n return false;\n },\n _otherCollectionType: function(other) {\n var otherCollectionType = NULL_COLLECTION_TYPE_DESCRIPTION;\n if (other.isCollection) {\n otherCollectionType = other.collectionType;\n }\n var otherMapOver = other.mapOver();\n if (otherMapOver.isCollection) {\n otherCollectionType = otherMapOver.append(otherCollectionType);\n }\n return otherCollectionType;\n }\n});\n\nvar InputTerminal = BaseInputTerminal.extend({\n update: function(input) {\n this.datatypes = input.extensions;\n this.multiple = input.multiple;\n this.collection = false;\n },\n connect: function(connector) {\n BaseInputTerminal.prototype.connect.call(this, connector);\n var other_output = connector.handle1;\n if (!other_output) {\n return;\n }\n var otherCollectionType = this._otherCollectionType(other_output);\n if (otherCollectionType.isCollection) {\n this.setMapOver(otherCollectionType);\n }\n },\n attachable: function(other) {\n var otherCollectionType = this._otherCollectionType(other);\n var thisMapOver = this.mapOver();\n if (otherCollectionType.isCollection) {\n if (this.multiple) {\n if (this.connected() && !this._collectionAttached()) {\n // if single inputs attached, cannot also attach a\n // collection (yet...)\n return false;\n }\n if (otherCollectionType.rank == 1) {\n return this._producesAcceptableDatatype(other);\n } else {\n // TODO: Allow subcollection mapping over this as if it were\n // a list collection input.\n return false;\n }\n }\n if (\n thisMapOver.isCollection &&\n thisMapOver.canMatch(otherCollectionType)\n ) {\n return this._producesAcceptableDatatype(other);\n } else {\n // Need to check if this would break constraints...\n var mappingConstraints = this._mappingConstraints();\n if (\n mappingConstraints.every(\n _.bind(\n otherCollectionType.canMatch,\n otherCollectionType\n )\n )\n ) {\n return this._producesAcceptableDatatype(other);\n } else {\n return false;\n }\n }\n } else if (thisMapOver.isCollection) {\n // Attempting to match a non-collection output to an\n // explicitly collection input.\n return false;\n }\n return this._producesAcceptableDatatype(other);\n }\n});\n\nvar InputCollectionTerminal = BaseInputTerminal.extend({\n update: function(input) {\n this.multiple = false;\n this.collection = true;\n this.datatypes = input.extensions;\n var collectionTypes = [];\n if (input.collection_types) {\n _.each(input.collection_types, function(collectionType) {\n collectionTypes.push(\n new CollectionTypeDescription(collectionType)\n );\n });\n } else {\n collectionTypes.push(ANY_COLLECTION_TYPE_DESCRIPTION);\n }\n this.collectionTypes = collectionTypes;\n },\n connect: function(connector) {\n BaseInputTerminal.prototype.connect.call(this, connector);\n var other = connector.handle1;\n if (!other) {\n return;\n }\n\n var effectiveMapOver = this._effectiveMapOver(other);\n this.setMapOver(effectiveMapOver);\n },\n _effectiveMapOver: function(other) {\n var collectionTypes = this.collectionTypes;\n var otherCollectionType = this._otherCollectionType(other);\n var canMatch = _.some(collectionTypes, function(collectionType) {\n return collectionType.canMatch(otherCollectionType);\n });\n\n if (!canMatch) {\n for (var collectionTypeIndex in collectionTypes) {\n var collectionType = collectionTypes[collectionTypeIndex];\n if (otherCollectionType.canMapOver(collectionType)) {\n var effectiveMapOver = otherCollectionType.effectiveMapOver(\n collectionType\n );\n if (effectiveMapOver != NULL_COLLECTION_TYPE_DESCRIPTION) {\n return effectiveMapOver;\n }\n }\n }\n }\n return NULL_COLLECTION_TYPE_DESCRIPTION;\n },\n _effectiveCollectionTypes: function() {\n var thisMapOver = this.mapOver();\n return _.map(this.collectionTypes, function(t) {\n return thisMapOver.append(t);\n });\n },\n attachable: function(other) {\n var otherCollectionType = this._otherCollectionType(other);\n if (otherCollectionType.isCollection) {\n var effectiveCollectionTypes = this._effectiveCollectionTypes();\n var thisMapOver = this.mapOver();\n var canMatch = _.some(effectiveCollectionTypes, function(\n effectiveCollectionType\n ) {\n return effectiveCollectionType.canMatch(otherCollectionType);\n });\n if (canMatch) {\n // Only way a direct match...\n return this._producesAcceptableDatatype(other);\n // Otherwise we need to mapOver\n } else if (thisMapOver.isCollection) {\n // In this case, mapOver already set and we didn't match skipping...\n return false;\n } else if (\n _.some(this.collectionTypes, function(collectionType) {\n return otherCollectionType.canMapOver(collectionType);\n })\n ) {\n var effectiveMapOver = this._effectiveMapOver(other);\n if (!effectiveMapOver.isCollection) {\n return false;\n }\n // Need to check if this would break constraints...\n var mappingConstraints = this._mappingConstraints();\n if (mappingConstraints.every(effectiveMapOver.canMatch)) {\n return this._producesAcceptableDatatype(other);\n }\n }\n }\n return false;\n }\n});\n\nvar OutputCollectionTerminal = Terminal.extend({\n initialize: function(attr) {\n Terminal.prototype.initialize.call(this, attr);\n this.datatypes = attr.datatypes;\n if (attr.collection_type) {\n this.collectionType = new CollectionTypeDescription(\n attr.collection_type\n );\n } else {\n var collectionTypeSource = attr.collection_type_source;\n if (!collectionTypeSource) {\n console.log(\n \"Warning: No collection type or collection type source defined.\"\n );\n }\n this.collectionType = ANY_COLLECTION_TYPE_DESCRIPTION;\n }\n this.isCollection = true;\n },\n update: function(output) {\n var newCollectionType;\n if (output.collection_type) {\n newCollectionType = new CollectionTypeDescription(\n output.collection_type\n );\n } else {\n var collectionTypeSource = output.collection_type_source;\n if (!collectionTypeSource) {\n console.log(\n \"Warning: No collection type or collection type source defined.\"\n );\n }\n newCollectionType = ANY_COLLECTION_TYPE_DESCRIPTION;\n }\n\n if (\n newCollectionType.collectionType !=\n this.collectionType.collectionType\n ) {\n _.each(this.connectors, function(connector) {\n // TODO: consider checking if connection valid before removing...\n connector.destroy();\n });\n }\n this.collectionType = newCollectionType;\n }\n});\n\nexport default {\n InputTerminal: InputTerminal,\n OutputTerminal: OutputTerminal,\n InputCollectionTerminal: InputCollectionTerminal,\n OutputCollectionTerminal: OutputCollectionTerminal,\n TerminalMapping: TerminalMapping,\n\n // test export\n CollectionTypeDescription: CollectionTypeDescription,\n NULL_COLLECTION_TYPE_DESCRIPTION: NULL_COLLECTION_TYPE_DESCRIPTION,\n ANY_COLLECTION_TYPE_DESCRIPTION: ANY_COLLECTION_TYPE_DESCRIPTION\n};\n"]} \ No newline at end of file diff --git a/static/maps/mvc/workflow/workflow-view-data.js.map b/static/maps/mvc/workflow/workflow-view-data.js.map index 9f35f391115a..c59169a70b74 100644 --- a/static/maps/mvc/workflow/workflow-view-data.js.map +++ b/static/maps/mvc/workflow/workflow-view-data.js.map @@ -1 +1 @@ -{"version":3,"sources":["mvc/workflow/workflow-view-data.js"],"names":["DataInputView","Backbone","View","extend","className","initialize","options","this","input","nodeView","terminalElement","$el","attr","name","html","label","skipResize","css","position","left","append","el","outerWidth","top","display","DataOutputView","$","output","remove","node","extensions","indexOf","join","calloutView","type","OutputCalloutView","isInput","hoverImage","updateMaxWidth","redrawWorkflowOutput","resetImage","tagName","view","outputName","isWorkflowOutput","addWorkflowOutput","Galaxy","root","_workflowGlobals2","default","workflow","has_changes","tooltip","delay","title","margin","show"],"mappings":"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","file":"../../../scripts/mvc/workflow/workflow-view-data.js","sourcesContent":["import Globals from \"mvc/workflow/workflow-globals\";\nvar DataInputView = Backbone.View.extend({\n className: \"form-row dataRow input-data-row\",\n\n initialize: function(options) {\n this.input = options.input;\n this.nodeView = options.nodeView;\n this.terminalElement = options.terminalElement;\n\n this.$el.attr(\"name\", this.input.name).html(this.input.label);\n\n if (!options.skipResize) {\n this.$el.css({\n position: \"absolute\",\n left: -1000,\n top: -1000,\n display: \"none\"\n });\n $(\"body\").append(this.el);\n this.nodeView.updateMaxWidth(this.$el.outerWidth());\n this.$el.css({\n position: \"\",\n left: \"\",\n top: \"\",\n display: \"\"\n });\n this.$el.remove();\n }\n }\n});\n\nvar DataOutputView = Backbone.View.extend({\n className: \"form-row dataRow\",\n\n initialize: function(options) {\n this.output = options.output;\n this.terminalElement = options.terminalElement;\n this.nodeView = options.nodeView;\n\n var output = this.output;\n var label = output.name;\n var node = this.nodeView.node;\n\n var isInput =\n output.extensions.indexOf(\"input\") >= 0 ||\n output.extensions.indexOf(\"input_collection\") >= 0;\n if (!isInput) {\n label = label + \" (\" + output.extensions.join(\", \") + \")\";\n }\n this.$el.html(label);\n this.calloutView = null;\n if ([\"tool\", \"subworkflow\"].indexOf(node.type) >= 0) {\n var calloutView = new OutputCalloutView({\n label: label,\n output: output,\n node: node\n });\n this.calloutView = calloutView;\n this.$el.append(calloutView.el);\n this.$el.hover(\n function() {\n calloutView.hoverImage();\n },\n function() {\n calloutView.resetImage();\n }\n );\n }\n this.$el.css({\n position: \"absolute\",\n left: -1000,\n top: -1000,\n display: \"none\"\n });\n $(\"body\").append(this.el);\n this.nodeView.updateMaxWidth(this.$el.outerWidth() + 17);\n this.$el\n .css({\n position: \"\",\n left: \"\",\n top: \"\",\n display: \"\"\n })\n .detach();\n },\n redrawWorkflowOutput: function() {\n if (this.calloutView) {\n this.calloutView.resetImage();\n }\n }\n});\n\nvar OutputCalloutView = Backbone.View.extend({\n tagName: \"div\",\n\n initialize: function(options) {\n this.label = options.label;\n this.node = options.node;\n this.output = options.output;\n\n var view = this;\n var node = this.node;\n this.$el\n .attr(\"class\", \"callout \" + this.label)\n .css({ display: \"none\" })\n .append(\n $(\"
\").append(\n $(\"\")\n .attr(\n \"src\",\n Galaxy.root +\n \"static/images/fugue/asterisk-small-outline.png\"\n )\n .click(function() {\n var outputName = view.output.name;\n if (node.isWorkflowOutput(outputName)) {\n node.removeWorkflowOutput(outputName);\n view\n .$(\"img\")\n .attr(\n \"src\",\n Galaxy.root +\n \"static/images/fugue/asterisk-small-outline.png\"\n );\n } else {\n node.addWorkflowOutput(outputName);\n view\n .$(\"img\")\n .attr(\n \"src\",\n Galaxy.root +\n \"static/images/fugue/asterisk-small.png\"\n );\n }\n Globals.workflow.has_changes = true;\n Globals.canvas_manager.draw_overview();\n })\n )\n )\n .tooltip({\n delay: 500,\n title:\n \"Mark dataset as a workflow output. All unmarked datasets will be hidden.\"\n });\n\n this.$el.css({\n top: \"50%\",\n margin: \"-8px 0px 0px 0px\",\n right: 8\n });\n this.$el.show();\n this.resetImage();\n },\n\n resetImage: function() {\n if (!this.node.isWorkflowOutput(this.output.name)) {\n this.$(\"img\").attr(\n \"src\",\n Galaxy.root + \"static/images/fugue/asterisk-small-outline.png\"\n );\n } else {\n this.$(\"img\").attr(\n \"src\",\n Galaxy.root + \"static/images/fugue/asterisk-small.png\"\n );\n }\n },\n\n hoverImage: function() {\n this.$(\"img\").attr(\n \"src\",\n Galaxy.root + \"static/images/fugue/asterisk-small-yellow.png\"\n );\n }\n});\n\nexport default {\n DataInputView: DataInputView,\n DataOutputView: DataOutputView\n};\n"]} \ No newline at end of file +{"version":3,"sources":["mvc/workflow/workflow-view-data.js"],"names":["window","workflow_globals","DataInputView","Backbone","View","extend","className","initialize","options","input","this","nodeView","$el","attr","name","html","label","position","terminalElement","left","top","display","$","el","outerWidth","DataOutputView","output","node","extensions","indexOf","join","isInput","calloutView","OutputCalloutView","hoverImage","css","append","detach","redrawWorkflowOutput","resetImage","tagName","view","isWorkflowOutput","outputName","removeWorkflowOutput","click","Galaxy","root","addWorkflowOutput","workflow","has_changes","canvas_manager","draw_overview","tooltip","margin","right","show"],"mappings":"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","file":"../../../scripts/mvc/workflow/workflow-view-data.js","sourcesContent":["// TODO; tie into Galaxy state?\nwindow.workflow_globals = window.workflow_globals || {};\n\nvar DataInputView = Backbone.View.extend({\n className: \"form-row dataRow input-data-row\",\n\n initialize: function(options) {\n this.input = options.input;\n this.nodeView = options.nodeView;\n this.terminalElement = options.terminalElement;\n\n this.$el.attr(\"name\", this.input.name).html(this.input.label);\n\n if (!options.skipResize) {\n this.$el.css({\n position: \"absolute\",\n left: -1000,\n top: -1000,\n display: \"none\"\n });\n $(\"body\").append(this.el);\n this.nodeView.updateMaxWidth(this.$el.outerWidth());\n this.$el.css({\n position: \"\",\n left: \"\",\n top: \"\",\n display: \"\"\n });\n this.$el.remove();\n }\n }\n});\n\nvar DataOutputView = Backbone.View.extend({\n className: \"form-row dataRow\",\n\n initialize: function(options) {\n this.output = options.output;\n this.terminalElement = options.terminalElement;\n this.nodeView = options.nodeView;\n\n var output = this.output;\n var label = output.name;\n var node = this.nodeView.node;\n\n var isInput =\n output.extensions.indexOf(\"input\") >= 0 ||\n output.extensions.indexOf(\"input_collection\") >= 0;\n if (!isInput) {\n label = label + \" (\" + output.extensions.join(\", \") + \")\";\n }\n this.$el.html(label);\n this.calloutView = null;\n if ([\"tool\", \"subworkflow\"].indexOf(node.type) >= 0) {\n var calloutView = new OutputCalloutView({\n label: label,\n output: output,\n node: node\n });\n this.calloutView = calloutView;\n this.$el.append(calloutView.el);\n this.$el.hover(\n function() {\n calloutView.hoverImage();\n },\n function() {\n calloutView.resetImage();\n }\n );\n }\n this.$el.css({\n position: \"absolute\",\n left: -1000,\n top: -1000,\n display: \"none\"\n });\n $(\"body\").append(this.el);\n this.nodeView.updateMaxWidth(this.$el.outerWidth() + 17);\n this.$el\n .css({\n position: \"\",\n left: \"\",\n top: \"\",\n display: \"\"\n })\n .detach();\n },\n redrawWorkflowOutput: function() {\n if (this.calloutView) {\n this.calloutView.resetImage();\n }\n }\n});\n\nvar OutputCalloutView = Backbone.View.extend({\n tagName: \"div\",\n\n initialize: function(options) {\n this.label = options.label;\n this.node = options.node;\n this.output = options.output;\n\n var view = this;\n var node = this.node;\n this.$el\n .attr(\"class\", \"callout \" + this.label)\n .css({ display: \"none\" })\n .append(\n $(\"
\").append(\n $(\"\")\n .attr(\n \"src\",\n Galaxy.root +\n \"static/images/fugue/asterisk-small-outline.png\"\n )\n .click(function() {\n var outputName = view.output.name;\n if (node.isWorkflowOutput(outputName)) {\n node.removeWorkflowOutput(outputName);\n view\n .$(\"img\")\n .attr(\n \"src\",\n Galaxy.root +\n \"static/images/fugue/asterisk-small-outline.png\"\n );\n } else {\n node.addWorkflowOutput(outputName);\n view\n .$(\"img\")\n .attr(\n \"src\",\n Galaxy.root +\n \"static/images/fugue/asterisk-small.png\"\n );\n }\n window.workflow_globals.workflow.has_changes = true;\n window.workflow_globals.canvas_manager.draw_overview();\n })\n )\n )\n .tooltip({\n delay: 500,\n title:\n \"Mark dataset as a workflow output. All unmarked datasets will be hidden.\"\n });\n\n this.$el.css({\n top: \"50%\",\n margin: \"-8px 0px 0px 0px\",\n right: 8\n });\n this.$el.show();\n this.resetImage();\n },\n\n resetImage: function() {\n if (!this.node.isWorkflowOutput(this.output.name)) {\n this.$(\"img\").attr(\n \"src\",\n Galaxy.root + \"static/images/fugue/asterisk-small-outline.png\"\n );\n } else {\n this.$(\"img\").attr(\n \"src\",\n Galaxy.root + \"static/images/fugue/asterisk-small.png\"\n );\n }\n },\n\n hoverImage: function() {\n this.$(\"img\").attr(\n \"src\",\n Galaxy.root + \"static/images/fugue/asterisk-small-yellow.png\"\n );\n }\n});\n\nexport default {\n DataInputView: DataInputView,\n DataOutputView: DataOutputView\n};\n"]} \ No newline at end of file diff --git a/static/maps/mvc/workflow/workflow-view-terminals.js.map b/static/maps/mvc/workflow/workflow-view-terminals.js.map index 0237ca9c7722..55eb7c0d6ea5 100644 --- a/static/maps/mvc/workflow/workflow-view-terminals.js.map +++ b/static/maps/mvc/workflow/workflow-view-terminals.js.map @@ -1 +1 @@ -{"version":3,"sources":["mvc/workflow/workflow-view-terminals.js"],"names":["TerminalMappingView","Backbone","View","extend","tagName","className","initialize","options","this","$el","tooltip","delay","title","model","bind","_","render","mapOver","isCollection","show","hide","mouseenter","mapText","mouseleave","onMouseEnter","e","terminal","onMouseLeave","css","onClick","InputTerminalMappingView","events","connected","resetMapping","TerminalView","setupMappingView","terminalMapping","terminalMappingClass","terminalMappingView","terminalMappingViewClass","terminalElements","el","BaseInputTerminalView","name","terminalForInput","input","node","input_terminals","drop","hover","onDropInit","d","multiple","drag","dropinit","dropstart","connectors","inner_color","proxy","onDrop","hasClass","_workflowConnector2","default","redraw","onHover","element","onDropEnd","length","display","appendTo","append","$","addClass","click","each","x","destroy","t","remove","top","offset","left","width","InputTerminalView","InputTerminal","InputCollectionTerminalView","InputCollectionTerminal","BaseOutputTerminalView","output","dragstart","onDrag","onmove","po","y","offsetY","_workflowGlobals2","canvas_manager","update_viewport_overlay","onDragStart","test","available","workflow","check_changes_in_active_form","h","c","get","connector","OutputTerminal","dragging","connect","terminalForOutput","type","scroll_panel","OutputTerminalView","_workflowTerminals2","TerminalMapping","OutputCollectionTerminalView","collection_type_source","datatypes","extensions","collection_type","OutputCollectionTerminal"],"mappings":"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","file":"../../../scripts/mvc/workflow/workflow-view-terminals.js","sourcesContent":["import Globals from \"mvc/workflow/workflow-globals\";\nimport Terminals from \"mvc/workflow/workflow-terminals\";\nimport Connector from \"mvc/workflow/workflow-connector\";\nvar TerminalMappingView = Backbone.View.extend({\n tagName: \"div\",\n className: \"fa-icon-button fa fa-folder-o\",\n initialize: function(options) {\n var mapText = \"Run tool in parallel over collection\";\n this.$el.tooltip({ delay: 500, title: mapText });\n this.model.bind(\"change\", _.bind(this.render, this));\n },\n render: function() {\n if (this.model.mapOver.isCollection) {\n this.$el.show();\n } else {\n this.$el.hide();\n }\n }\n});\n\nvar InputTerminalMappingView = TerminalMappingView.extend({\n events: {\n click: \"onClick\",\n mouseenter: \"onMouseEnter\",\n mouseleave: \"onMouseLeave\"\n },\n onMouseEnter: function(e) {\n var model = this.model;\n if (!model.terminal.connected() && model.mapOver.isCollection) {\n this.$el.css(\"color\", \"red\");\n }\n },\n onMouseLeave: function(e) {\n this.$el.css(\"color\", \"black\");\n },\n onClick: function(e) {\n var model = this.model;\n if (!model.terminal.connected() && model.mapOver.isCollection) {\n // TODO: Consider prompting...\n model.terminal.resetMapping();\n }\n }\n});\n\nvar TerminalView = Backbone.View.extend({\n setupMappingView: function(terminal) {\n var terminalMapping = new this.terminalMappingClass({\n terminal: terminal\n });\n var terminalMappingView = new this.terminalMappingViewClass({\n model: terminalMapping\n });\n terminalMappingView.render();\n terminal.terminalMappingView = terminalMappingView;\n this.terminalMappingView = terminalMappingView;\n },\n terminalElements: function() {\n if (this.terminalMappingView) {\n return [this.terminalMappingView.el, this.el];\n } else {\n return [this.el];\n }\n }\n});\n\nvar BaseInputTerminalView = TerminalView.extend({\n className: \"terminal input-terminal\",\n initialize: function(options) {\n var node = options.node;\n var input = options.input;\n var name = input.name;\n var terminal = this.terminalForInput(input);\n if (!terminal.multiple) {\n this.setupMappingView(terminal);\n }\n this.el.terminal = terminal;\n terminal.node = node;\n terminal.name = name;\n node.input_terminals[name] = terminal;\n },\n events: {\n dropinit: \"onDropInit\",\n dropstart: \"onDropStart\",\n dropend: \"onDropEnd\",\n drop: \"onDrop\",\n hover: \"onHover\"\n },\n onDropInit: function(e, d) {\n var terminal = this.el.terminal;\n // Accept a dragable if it is an output terminal and has a\n // compatible type\n return (\n $(d.drag).hasClass(\"output-terminal\") &&\n terminal.canAccept(d.drag.terminal)\n );\n },\n onDropStart: function(e, d) {\n if (d.proxy.terminal) {\n d.proxy.terminal.connectors[0].inner_color = \"#BBFFBB\";\n }\n },\n onDropEnd: function(e, d) {\n if (d.proxy.terminal) {\n d.proxy.terminal.connectors[0].inner_color = \"#FFFFFF\";\n }\n },\n onDrop: function(e, d) {\n var terminal = this.el.terminal;\n new Connector(d.drag.terminal, terminal).redraw();\n },\n onHover: function() {\n var element = this.el;\n var terminal = element.terminal;\n // If connected, create a popup to allow disconnection\n if (terminal.connectors.length > 0) {\n // Create callout\n var t = $(\"
\")\n .css({ display: \"none\" })\n .appendTo(\"body\")\n .append(\n $(\"
\").append(\n $(\"
\")\n .addClass(\"fa-icon-button fa fa-times\")\n .click(function() {\n $.each(terminal.connectors, function(_, x) {\n if (x) {\n x.destroy();\n }\n });\n t.remove();\n })\n )\n )\n .bind(\"mouseleave\", function() {\n $(this).remove();\n });\n // Position it and show\n t\n .css({\n top: $(element).offset().top - 2,\n left: $(element).offset().left - t.width(),\n \"padding-right\": $(element).width()\n })\n .show();\n }\n }\n});\n\nvar InputTerminalView = BaseInputTerminalView.extend({\n terminalMappingClass: Terminals.TerminalMapping,\n terminalMappingViewClass: InputTerminalMappingView,\n terminalForInput: function(input) {\n return new Terminals.InputTerminal({\n element: this.el,\n input: input\n });\n }\n});\n\nvar InputCollectionTerminalView = BaseInputTerminalView.extend({\n terminalMappingClass: Terminals.TerminalMapping,\n terminalMappingViewClass: InputTerminalMappingView,\n terminalForInput: function(input) {\n return new Terminals.InputCollectionTerminal({\n element: this.el,\n input: input\n });\n }\n});\n\nvar BaseOutputTerminalView = TerminalView.extend({\n className: \"terminal output-terminal\",\n initialize: function(options) {\n var node = options.node;\n var output = options.output;\n var name = output.name;\n var terminal = this.terminalForOutput(output);\n this.setupMappingView(terminal);\n this.el.terminal = terminal;\n terminal.node = node;\n terminal.name = name;\n node.output_terminals[name] = terminal;\n },\n events: {\n drag: \"onDrag\",\n dragstart: \"onDragStart\",\n dragend: \"onDragEnd\"\n },\n onDrag: function(e, d) {\n var onmove = function() {\n var po = $(d.proxy)\n .offsetParent()\n .offset(),\n x = d.offsetX - po.left,\n y = d.offsetY - po.top;\n $(d.proxy).css({ left: x, top: y });\n d.proxy.terminal.redraw();\n // FIXME: global\n Globals.canvas_manager.update_viewport_overlay();\n };\n onmove();\n $(\"#canvas-container\")\n .get(0)\n .scroll_panel.test(e, onmove);\n },\n onDragStart: function(e, d) {\n $(d.available).addClass(\"input-terminal-active\");\n // Save PJAs in the case of change datatype actions.\n Globals.workflow.check_changes_in_active_form();\n // Drag proxy div\n var h = $(\n '
'\n )\n .appendTo(\"#canvas-container\")\n .get(0);\n // Terminal and connection to display noodle while dragging\n h.terminal = new Terminals.OutputTerminal({ element: h });\n var c = new Connector();\n c.dragging = true;\n c.connect(this.el.terminal, h.terminal);\n return h;\n },\n onDragEnd: function(e, d) {\n var connector = d.proxy.terminal.connectors[0];\n // check_changes_in_active_form may change the state and cause a\n // the connection to have already been destroyed. There must be better\n // ways to handle this but the following check fixes some serious GUI\n // bugs for now.\n if (connector) {\n connector.destroy();\n }\n $(d.proxy).remove();\n $(d.available).removeClass(\"input-terminal-active\");\n $(\"#canvas-container\")\n .get(0)\n .scroll_panel.stop();\n }\n});\n\nvar OutputTerminalView = BaseOutputTerminalView.extend({\n terminalMappingClass: Terminals.TerminalMapping,\n terminalMappingViewClass: TerminalMappingView,\n terminalForOutput: function(output) {\n var type = output.extensions;\n var terminal = new Terminals.OutputTerminal({\n element: this.el,\n datatypes: type\n });\n return terminal;\n }\n});\n\nvar OutputCollectionTerminalView = BaseOutputTerminalView.extend({\n terminalMappingClass: Terminals.TerminalMapping,\n terminalMappingViewClass: TerminalMappingView,\n terminalForOutput: function(output) {\n var collection_type = output.collection_type;\n var collection_type_source = output.collection_type_source;\n var terminal = new Terminals.OutputCollectionTerminal({\n element: this.el,\n collection_type: collection_type,\n collection_type_source: collection_type_source,\n datatypes: output.extensions\n });\n return terminal;\n }\n});\n\nexport default {\n InputTerminalView: InputTerminalView,\n OutputTerminalView: OutputTerminalView,\n InputCollectionTerminalView: InputCollectionTerminalView,\n OutputCollectionTerminalView: OutputCollectionTerminalView\n};\n"]} \ No newline at end of file +{"version":3,"sources":["mvc/workflow/workflow-view-terminals.js"],"names":["window","workflow_globals","TerminalMappingView","Backbone","View","extend","tagName","className","initialize","options","this","$el","tooltip","delay","title","model","bind","_","render","mapOver","isCollection","show","events","click","mouseenter","mouseleave","onMouseEnter","terminal","connected","hide","onMouseLeave","e","css","resetMapping","TerminalView","setupMappingView","terminalMappingClass","onClick","terminalMappingViewClass","terminalMappingView","terminalElements","el","terminalMapping","BaseInputTerminalView","node","input","multiple","name","input_terminals","dropstart","dropend","drop","hover","onDropInit","canAccept","d","drag","connectors","inner_color","proxy","onDrop","onDropStart","_workflowConnector2","default","redraw","onHover","element","onDropEnd","length","t","$","display","append","addClass","each","x","destroy","remove","top","offset","left","width","padding-right","InputTerminalMappingView","terminalForInput","InputTerminal","InputCollectionTerminal","output","output_terminals","dragstart","dragend","onDrag","onmove","po","y","offsetY","canvas_manager","get","scroll_panel","onDragStart","h","available","workflow","check_changes_in_active_form","c","connect","onDragEnd","connector","_workflowTerminals2","OutputTerminal","dragging","removeClass","OutputTerminalView","terminalForOutput","extensions","datatypes","BaseOutputTerminalView","TerminalMapping","OutputCollectionTerminalView","collection_type","collection_type_source","InputTerminalView","InputCollectionTerminalView"],"mappings":"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","file":"../../../scripts/mvc/workflow/workflow-view-terminals.js","sourcesContent":["import Terminals from \"mvc/workflow/workflow-terminals\";\nimport Connector from \"mvc/workflow/workflow-connector\";\n\n// TODO; tie into Galaxy state?\nwindow.workflow_globals = window.workflow_globals || {};\n\nvar TerminalMappingView = Backbone.View.extend({\n tagName: \"div\",\n className: \"fa-icon-button fa fa-folder-o\",\n initialize: function(options) {\n var mapText = \"Run tool in parallel over collection\";\n this.$el.tooltip({ delay: 500, title: mapText });\n this.model.bind(\"change\", _.bind(this.render, this));\n },\n render: function() {\n if (this.model.mapOver.isCollection) {\n this.$el.show();\n } else {\n this.$el.hide();\n }\n }\n});\n\nvar InputTerminalMappingView = TerminalMappingView.extend({\n events: {\n click: \"onClick\",\n mouseenter: \"onMouseEnter\",\n mouseleave: \"onMouseLeave\"\n },\n onMouseEnter: function(e) {\n var model = this.model;\n if (!model.terminal.connected() && model.mapOver.isCollection) {\n this.$el.css(\"color\", \"red\");\n }\n },\n onMouseLeave: function(e) {\n this.$el.css(\"color\", \"black\");\n },\n onClick: function(e) {\n var model = this.model;\n if (!model.terminal.connected() && model.mapOver.isCollection) {\n // TODO: Consider prompting...\n model.terminal.resetMapping();\n }\n }\n});\n\nvar TerminalView = Backbone.View.extend({\n setupMappingView: function(terminal) {\n var terminalMapping = new this.terminalMappingClass({\n terminal: terminal\n });\n var terminalMappingView = new this.terminalMappingViewClass({\n model: terminalMapping\n });\n terminalMappingView.render();\n terminal.terminalMappingView = terminalMappingView;\n this.terminalMappingView = terminalMappingView;\n },\n terminalElements: function() {\n if (this.terminalMappingView) {\n return [this.terminalMappingView.el, this.el];\n } else {\n return [this.el];\n }\n }\n});\n\nvar BaseInputTerminalView = TerminalView.extend({\n className: \"terminal input-terminal\",\n initialize: function(options) {\n var node = options.node;\n var input = options.input;\n var name = input.name;\n var terminal = this.terminalForInput(input);\n if (!terminal.multiple) {\n this.setupMappingView(terminal);\n }\n this.el.terminal = terminal;\n terminal.node = node;\n terminal.name = name;\n node.input_terminals[name] = terminal;\n },\n events: {\n dropinit: \"onDropInit\",\n dropstart: \"onDropStart\",\n dropend: \"onDropEnd\",\n drop: \"onDrop\",\n hover: \"onHover\"\n },\n onDropInit: function(e, d) {\n var terminal = this.el.terminal;\n // Accept a dragable if it is an output terminal and has a\n // compatible type\n return (\n $(d.drag).hasClass(\"output-terminal\") &&\n terminal.canAccept(d.drag.terminal)\n );\n },\n onDropStart: function(e, d) {\n if (d.proxy.terminal) {\n d.proxy.terminal.connectors[0].inner_color = \"#BBFFBB\";\n }\n },\n onDropEnd: function(e, d) {\n if (d.proxy.terminal) {\n d.proxy.terminal.connectors[0].inner_color = \"#FFFFFF\";\n }\n },\n onDrop: function(e, d) {\n var terminal = this.el.terminal;\n new Connector(d.drag.terminal, terminal).redraw();\n },\n onHover: function() {\n var element = this.el;\n var terminal = element.terminal;\n // If connected, create a popup to allow disconnection\n if (terminal.connectors.length > 0) {\n // Create callout\n var t = $(\"
\")\n .css({ display: \"none\" })\n .appendTo(\"body\")\n .append(\n $(\"
\").append(\n $(\"
\")\n .addClass(\"fa-icon-button fa fa-times\")\n .click(function() {\n $.each(terminal.connectors, function(_, x) {\n if (x) {\n x.destroy();\n }\n });\n t.remove();\n })\n )\n )\n .bind(\"mouseleave\", function() {\n $(this).remove();\n });\n // Position it and show\n t\n .css({\n top: $(element).offset().top - 2,\n left: $(element).offset().left - t.width(),\n \"padding-right\": $(element).width()\n })\n .show();\n }\n }\n});\n\nvar InputTerminalView = BaseInputTerminalView.extend({\n terminalMappingClass: Terminals.TerminalMapping,\n terminalMappingViewClass: InputTerminalMappingView,\n terminalForInput: function(input) {\n return new Terminals.InputTerminal({\n element: this.el,\n input: input\n });\n }\n});\n\nvar InputCollectionTerminalView = BaseInputTerminalView.extend({\n terminalMappingClass: Terminals.TerminalMapping,\n terminalMappingViewClass: InputTerminalMappingView,\n terminalForInput: function(input) {\n return new Terminals.InputCollectionTerminal({\n element: this.el,\n input: input\n });\n }\n});\n\nvar BaseOutputTerminalView = TerminalView.extend({\n className: \"terminal output-terminal\",\n initialize: function(options) {\n var node = options.node;\n var output = options.output;\n var name = output.name;\n var terminal = this.terminalForOutput(output);\n this.setupMappingView(terminal);\n this.el.terminal = terminal;\n terminal.node = node;\n terminal.name = name;\n node.output_terminals[name] = terminal;\n },\n events: {\n drag: \"onDrag\",\n dragstart: \"onDragStart\",\n dragend: \"onDragEnd\"\n },\n onDrag: function(e, d) {\n var onmove = function() {\n var po = $(d.proxy)\n .offsetParent()\n .offset(),\n x = d.offsetX - po.left,\n y = d.offsetY - po.top;\n $(d.proxy).css({ left: x, top: y });\n d.proxy.terminal.redraw();\n // FIXME: global\n window.workflow_globals.canvas_manager.update_viewport_overlay();\n };\n onmove();\n $(\"#canvas-container\")\n .get(0)\n .scroll_panel.test(e, onmove);\n },\n onDragStart: function(e, d) {\n $(d.available).addClass(\"input-terminal-active\");\n // Save PJAs in the case of change datatype actions.\n window.workflow_globals.workflow.check_changes_in_active_form();\n // Drag proxy div\n var h = $(\n '
'\n )\n .appendTo(\"#canvas-container\")\n .get(0);\n // Terminal and connection to display noodle while dragging\n h.terminal = new Terminals.OutputTerminal({ element: h });\n var c = new Connector();\n c.dragging = true;\n c.connect(this.el.terminal, h.terminal);\n return h;\n },\n onDragEnd: function(e, d) {\n var connector = d.proxy.terminal.connectors[0];\n // check_changes_in_active_form may change the state and cause a\n // the connection to have already been destroyed. There must be better\n // ways to handle this but the following check fixes some serious GUI\n // bugs for now.\n if (connector) {\n connector.destroy();\n }\n $(d.proxy).remove();\n $(d.available).removeClass(\"input-terminal-active\");\n $(\"#canvas-container\")\n .get(0)\n .scroll_panel.stop();\n }\n});\n\nvar OutputTerminalView = BaseOutputTerminalView.extend({\n terminalMappingClass: Terminals.TerminalMapping,\n terminalMappingViewClass: TerminalMappingView,\n terminalForOutput: function(output) {\n var type = output.extensions;\n var terminal = new Terminals.OutputTerminal({\n element: this.el,\n datatypes: type\n });\n return terminal;\n }\n});\n\nvar OutputCollectionTerminalView = BaseOutputTerminalView.extend({\n terminalMappingClass: Terminals.TerminalMapping,\n terminalMappingViewClass: TerminalMappingView,\n terminalForOutput: function(output) {\n var collection_type = output.collection_type;\n var collection_type_source = output.collection_type_source;\n var terminal = new Terminals.OutputCollectionTerminal({\n element: this.el,\n collection_type: collection_type,\n collection_type_source: collection_type_source,\n datatypes: output.extensions\n });\n return terminal;\n }\n});\n\nexport default {\n InputTerminalView: InputTerminalView,\n OutputTerminalView: OutputTerminalView,\n InputCollectionTerminalView: InputCollectionTerminalView,\n OutputCollectionTerminalView: OutputCollectionTerminalView\n};\n"]} \ No newline at end of file diff --git a/static/maps/mvc/workflow/workflow-view.js.map b/static/maps/mvc/workflow/workflow-view.js.map index e033cd7a0e5a..81b20d2e6785 100644 --- a/static/maps/mvc/workflow/workflow-view.js.map +++ b/static/maps/mvc/workflow/workflow-view.js.map @@ -1 +1 @@ -{"version":3,"sources":["mvc/workflow/workflow-view.js"],"names":["reset_tool_search","initValue","tool_menu_frame","$","contents","length","document","this","removeClass","find","hide","show","each","attr","hasClass","val","nodeType","addClass","iconStyle","$to_el","before","$icon","Backbone","View","extend","initialize","options","self","jStorage","set","css","Galaxy","buttons","Cancel","urls","save_current_workflow","eventObj","has_changes","window","show_message","do_close","hide_modal","workflow","rectify_workflow_outputs","_utils2","default","request","url","root","id","type","location","success","data","body","text","message","check_changes_in_active_form","i","v","success_callback","append","errlist","name","show_modal","focus","select","value","lastValue","timer","setTimeout","get","tool_search","q","s","map","n","index","parent","this_label","next","no_visible_tools","datatypes","JSON","parse","canvas_manager","_workflowGlobals2","_workflowCanvas2","reset","ajax","_workflowLoadAjax","scroll_to_nodes","async","_","ext_to_type","datatypes_mapping","ext_to_class_name","upgrade_messages","details","upgrade_message","from_simple","showWorkflowParameters","steps","step","step_id","beforeSubmit","errors","m","make_popupmenu","parseInt","clear_active_node","close_editor","workflow_save_as","rename_name","Continue","rename_annotation","workflow_name","workflow_data","stringify","Save As","output_terminals","OK","new_content","node_id","workflowNode","output_name","workflow_annotation","addWorkflowOutput","removeWorkflowOutput","done","onbeforeunload","undefined","layout_editor","layout","alert","width","Auto Re-layout","last_expanded","draw_overview","Close","search_input","workflow_index","add_node_icon","overview_size","height","hide_overview","show_overview","bind","e","d","$section","offsetParent","op","new_size","max","copy","offsetX","opo","left","icon","offsetY","top","tooltip","click","copy_into_workflow","is","slideUp","_asyncSaveText2","rename_async","cv","_buildToolPanelWorkflows","workflows","_uiMisc2","ButtonIcon","request_data","node","init_field_data","update_field_data","modal","title","create_node","Copy","add_node_for_module","_moduleInitAjax","on","add_node_for_subworkflow","latest_id","get_pja_form","action_to_rem","closest","$add","active_node","workflowId","display_file_list","out_terminal","addlist","k","action_type","post_job_actions","nodes","vv","target","new_pja","display_pja","workflow_parameters","wf_parm_container","form_matches","matches","cc","arg_matches","merge","load_workflow","new_parameter_content","html","wf_parm_box","showAttributes","activate_node","add_node_for_tool","content","$container","$el","emit","content_id","isSubType","pja","prebuildNode","$f","scrollLeft","tmp","active_form_has_changes","o","offset","parameter_re","config_form","inputs","deepeach","match","concat","action_arguments","action_argument","element","inArray","push","substring","showForm","cls","_workflowIcons2","form_type","_workflowForms2","form","debug","scrollTop","child","type_to_type","title_text","$title","_workflowNode2","destroy","appendTo","position","p","prependTo","node_changed","fit_canvas_to_nodes","po","x","y","terminal","redraw"],"mappings":"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","file":"../../../scripts/mvc/workflow/workflow-view.js","sourcesContent":["import Utils from \"utils/utils\";\nimport Globals from \"mvc/workflow/workflow-globals\";\nimport Workflow from \"mvc/workflow/workflow-manager\";\nimport WorkflowCanvas from \"mvc/workflow/workflow-canvas\";\nimport Node from \"mvc/workflow/workflow-node\";\nimport WorkflowIcons from \"mvc/workflow/workflow-icons\";\nimport FormWrappers from \"mvc/workflow/workflow-forms\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport async_save_text from \"utils/async-save-text\";\nimport Toastr from \"libs/toastr\";\nimport \"ui/editable-text\";\n// Reset tool search to start state.\nfunction reset_tool_search(initValue) {\n // Function may be called in top frame or in tool_menu_frame;\n // in either case, get the tool menu frame.\n var tool_menu_frame = $(\"#galaxy_tools\").contents();\n if (tool_menu_frame.length === 0) {\n tool_menu_frame = $(document);\n // Remove classes that indicate searching is active.\n $(this).removeClass(\"search_active\");\n tool_menu_frame.find(\".toolTitle\").removeClass(\"search_match\");\n\n // Reset visibility of tools and labels.\n tool_menu_frame.find(\".toolSectionBody\").hide();\n tool_menu_frame.find(\".toolTitle\").show();\n tool_menu_frame.find(\".toolPanelLabel\").show();\n tool_menu_frame.find(\".toolSectionWrapper\").each(function() {\n if ($(this).attr(\"id\") !== \"recently_used_wrapper\") {\n // Default action.\n $(this).show();\n } else if ($(this).hasClass(\"user_pref_visible\")) {\n $(this).show();\n }\n });\n tool_menu_frame.find(\"#search-no-results\").hide();\n\n // Reset search input.\n tool_menu_frame.find(\"#search-spinner\").hide();\n if (initValue) {\n var search_input = tool_menu_frame.find(\"#tool-search-query\");\n search_input.val(\"search tools\");\n }\n }\n}\n\nfunction add_node_icon($to_el, nodeType) {\n var iconStyle = WorkflowIcons[nodeType];\n if (iconStyle) {\n var $icon = $(' ').addClass(iconStyle);\n $to_el.before($icon);\n }\n}\n\n// create form view\nexport default Backbone.View.extend({\n initialize: function(options) {\n var self = (Globals.app = this);\n this.options = options;\n this.urls = (options && options.urls) || {};\n var close_editor = function() {\n self.workflow.check_changes_in_active_form();\n if (workflow && self.workflow.has_changes) {\n var do_close = function() {\n window.onbeforeunload = undefined;\n window.document.location = self.urls.workflow_index;\n };\n window.show_modal(\n \"Close workflow editor\",\n \"There are unsaved changes to your workflow which will be lost.\",\n {\n Cancel: hide_modal,\n \"Save Changes\": function() {\n save_current_workflow(null, do_close);\n }\n },\n {\n \"Don't Save\": do_close\n }\n );\n } else {\n window.document.location = self.urls.workflow_index;\n }\n };\n var save_current_workflow = function(eventObj, success_callback) {\n show_message(\"Saving workflow\", \"progress\");\n self.workflow.check_changes_in_active_form();\n if (!self.workflow.has_changes) {\n hide_modal();\n if (success_callback) {\n success_callback();\n }\n return;\n }\n self.workflow.rectify_workflow_outputs();\n Utils.request({\n url: Galaxy.root + \"api/workflows/\" + self.options.id,\n type: \"PUT\",\n data: { workflow: self.workflow.to_simple() },\n success: function(data) {\n var body = $(\"
\").text(data.message);\n if (data.errors) {\n body.addClass(\"warningmark\");\n var errlist = $(\"