mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #4373 from mvdbeek/switch_versions_in_workflows
Allow switching tool versions in workflow editor
This commit is contained in:
@@ -156,7 +156,13 @@ define( [ 'utils/utils', 'utils/deferred', 'mvc/ui/ui-misc', 'mvc/form/form-view
|
||||
// queue model request
|
||||
self.deferred.reset();
|
||||
self.deferred.execute( function( process ) {
|
||||
self._buildModel( process, { id : id, version : version } )
|
||||
if ( options.hasOwnProperty( "workflow" ) ) {
|
||||
// this is needed for notifying the workflow editor form
|
||||
options.version = version;
|
||||
self.model.get( 'postchange' )( process, self );
|
||||
} else {
|
||||
self._buildModel( process, { id : id, version : version } );
|
||||
};
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -37,7 +37,6 @@ define( [ 'utils/utils', 'mvc/form/form-view', 'mvc/tool/tool-form-base' ], func
|
||||
text_disable : 'Set at Runtime',
|
||||
narrow : true,
|
||||
initial_errors : true,
|
||||
sustain_version : true,
|
||||
cls : 'ui-portlet-narrow',
|
||||
postchange : function( process, form ) {
|
||||
var options = form.model.attributes;
|
||||
|
||||
@@ -182,15 +182,16 @@ function( Connector, Toastr ) {
|
||||
id : node.id,
|
||||
type : node.type,
|
||||
content_id : node.content_id,
|
||||
tool_version : node.config_form.version,
|
||||
tool_state : node.tool_state,
|
||||
errors : node.errors,
|
||||
input_connections : input_connections,
|
||||
position : $(node.element).position(),
|
||||
annotation: node.annotation,
|
||||
post_job_actions: node.post_job_actions,
|
||||
uuid: node.uuid,
|
||||
label: node.label,
|
||||
workflow_outputs: node.workflow_outputs
|
||||
annotation : node.annotation,
|
||||
post_job_actions : node.post_job_actions,
|
||||
uuid : node.uuid,
|
||||
label : node.label,
|
||||
workflow_outputs : node.workflow_outputs
|
||||
};
|
||||
nodes[ node.id ] = node_data;
|
||||
});
|
||||
@@ -308,7 +309,7 @@ function( Connector, Toastr ) {
|
||||
if ( this.active_node == node && force ) {
|
||||
// Force changes to be saved even on new connection (previously dumped)
|
||||
this.check_changes_in_active_form();
|
||||
this.app.showForm( node.config_form, node );
|
||||
this.app.showForm( node.config_form, node, force );
|
||||
}
|
||||
this.app.showWorkflowParameters();
|
||||
},
|
||||
|
||||
@@ -154,6 +154,7 @@ define(['mvc/workflow/workflow-view-node'], function( NodeView ) {
|
||||
}
|
||||
this.name = data.name;
|
||||
this.config_form = data.config_form;
|
||||
this.tool_version = this.config_form && this.config_form.version;
|
||||
this.tool_state = data.tool_state;
|
||||
this.errors = data.errors;
|
||||
this.tooltip = data.tooltip ? data.tooltip : "";
|
||||
@@ -183,8 +184,51 @@ define(['mvc/workflow/workflow-view-node'], function( NodeView ) {
|
||||
update_field_data : function( data ) {
|
||||
var node = this;
|
||||
var nodeView = node.nodeView;
|
||||
// remove unused output views and remove pre-existing output views from data.data_outputs,
|
||||
// so that these are not added twice.
|
||||
var unused_outputs = [];
|
||||
// nodeView.outputViews contains pre-existing outputs,
|
||||
// while data.data_output contains what should be displayed.
|
||||
// Now we gather the unused outputs
|
||||
$.each(nodeView.outputViews, function(i, output_view) {
|
||||
var cur_name = output_view.output.name;
|
||||
var data_names = data.data_outputs;
|
||||
var cur_name_in_data_outputs = false;
|
||||
_.each(data_names, function(data_name) {
|
||||
if (data_name.name == cur_name) {
|
||||
cur_name_in_data_outputs = true;
|
||||
}
|
||||
});
|
||||
if (cur_name_in_data_outputs === false) {
|
||||
unused_outputs.push(cur_name)
|
||||
}
|
||||
});
|
||||
|
||||
// Remove the unused outputs
|
||||
_.each(unused_outputs, function(unused_output) {
|
||||
_.each(nodeView.outputViews[unused_output].terminalElement.terminal.connectors, function(x) {
|
||||
if (x) {
|
||||
x.destroy(); // Removes the noodle connectors
|
||||
}
|
||||
});
|
||||
nodeView.outputViews[unused_output].remove(); // removes the rendered output
|
||||
delete nodeView.outputViews[unused_output]; // removes the reference to the output
|
||||
delete node.output_terminals[unused_output]; // removes the output terminal
|
||||
});
|
||||
$.each( node.workflow_outputs, function(i, wf_output){
|
||||
if (wf_output && !node.output_terminals[wf_output.output_name]) {
|
||||
node.workflow_outputs.splice(i, 1); // removes output from list of workflow outputs
|
||||
}
|
||||
});
|
||||
$.each( data.data_outputs, function( i, output ) {
|
||||
if (!nodeView.outputViews[output.name]) {
|
||||
nodeView.addDataOutput(output); // add data output if it does not yet exist
|
||||
}
|
||||
});
|
||||
this.tool_state = data.tool_state;
|
||||
this.config_form = data.config_form;
|
||||
this.force_refresh = this.config_form && this.tool_version !== this.config_form.version;
|
||||
this.tool_version = this.config_form && this.config_form.version;
|
||||
this.errors = data.errors;
|
||||
this.annotation = data['annotation'];
|
||||
this.label = data.label;
|
||||
@@ -233,8 +277,8 @@ define(['mvc/workflow/workflow-view-node'], function( NodeView ) {
|
||||
this.app.workflow.node_changed( this );
|
||||
},
|
||||
markChanged: function() {
|
||||
this.app.workflow.node_changed( this );
|
||||
this.app.workflow.node_changed( this, this.force_refresh );
|
||||
}
|
||||
});
|
||||
return Node;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -653,11 +653,15 @@ define([
|
||||
$( '#edit-attributes' ).show();
|
||||
},
|
||||
|
||||
showForm: function ( content, node ) {
|
||||
showForm: function ( content, node, force ) {
|
||||
var self = this;
|
||||
var cls = 'right-content';
|
||||
var id = cls + '-' + node.id;
|
||||
var $container = $( '#' + cls );
|
||||
if (force) {
|
||||
$container.find( '#' + id ).remove();
|
||||
$( '<div id="' + id + '" class="' + cls + '"/>').remove();
|
||||
}
|
||||
if ( content && $container.find( '#' + id ).length == 0 ) {
|
||||
var $el = $( '<div id="' + id + '" class="' + cls + '"/>' );
|
||||
var form_wrapper = null;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
!function(t){function e(i){if(n[i])return n[i].exports;var s=n[i]={exports:{},id:i,loaded:!1};return t[i].call(s.exports,s,s.exports,e),s.loaded=!0,s.exports}var i=window.webpackJsonp;window.webpackJsonp=function(o,r){for(var a,l,u=0,c=[];u<o.length;u++)l=o[u],s[l]&&c.push.apply(c,s[l]),s[l]=0;for(a in r)Object.prototype.hasOwnProperty.call(r,a)&&(t[a]=r[a]);for(i&&i(o,r);c.length;)c.shift().call(null,e);if(r[0])return n[0]=0,e(0)};var n={},s={2:0};return e.e=function(t,i){if(0===s[t])return i.call(null,e);if(void 0!==s[t])s[t].push(i);else{s[t]=[i];var n=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.src=e.p+""+t+"."+({3:"analysis",4:"admin",5:"login"}[t]||t)+".bundled.js",n.appendChild(o)}},e.m=t,e.c=n,e.p="",e(0)}([function(t,e,i){i(147),i(1),i(117),i(77),i(74),i(75),i(76),i(114),i(73),i(111),i(72),i(113),i(115),i(3),i(2),i(94),i(71),i(51),t.exports=i(146)},function(t,e,i){var n,s;/*!
|
||||
!function(t){function e(i){if(n[i])return n[i].exports;var s=n[i]={exports:{},id:i,loaded:!1};return t[i].call(s.exports,s,s.exports,e),s.loaded=!0,s.exports}var i=window.webpackJsonp;window.webpackJsonp=function(o,r){for(var a,l,u=0,c=[];u<o.length;u++)l=o[u],s[l]&&c.push.apply(c,s[l]),s[l]=0;for(a in r)t[a]=r[a];for(i&&i(o,r);c.length;)c.shift().call(null,e);if(r[0])return n[0]=0,e(0)};var n={},s={2:0};return e.e=function(t,i){if(0===s[t])return i.call(null,e);if(void 0!==s[t])s[t].push(i);else{s[t]=[i];var n=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.src=e.p+""+t+"."+({3:"analysis",4:"admin",5:"login"}[t]||t)+".bundled.js",n.appendChild(o)}},e.m=t,e.c=n,e.p="",e(0)}([function(t,e,i){i(147),i(1),i(117),i(77),i(74),i(75),i(76),i(114),i(73),i(111),i(72),i(113),i(115),i(3),i(2),i(94),i(71),i(51),t.exports=i(146)},function(t,e,i){var n,s;/*!
|
||||
* jQuery JavaScript Library v1.12.4
|
||||
* http://jquery.com/
|
||||
*
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"version":3,"sources":["webpack:///login.bundled.js","webpack:///./galaxy/scripts/apps/login.js"],"names":["webpackJsonp","module","exports","__webpack_require__","Backbone","_","jQuery","$","GalaxyApp","_l","Page","window","app","options","bootstrapped","Galaxy","debug","redirect","encodeURI","show_welcome_with_login","params","param","use_panels","location","href","root","LoginPage","View","extend","initialize","page","this","model","Model","title","setElement","_template","render","prop","welcome_url","login_url","Right","call"],"mappings":"AAAAA,cAAc,IAER,SAAUC,EAAQC,EAASC,ICFjC,SAAAC,EAAAC,GAAA,GAAIC,GAASH,EAAS,GAClBI,EAAID,EACJE,EAAYL,EAAS,IAAWK,UAChCC,EAAKN,EAAS,GACdO,EAAOP,EAAS,GAEpBQ,QAAOC,IAAM,SAAcC,EAASC,GAChCH,OAAOI,OAAS,GAAIP,GAAWK,EAASC,GACxCC,OAAOC,MAAO,YACd,IAAIC,GAAWC,UAAWL,EAAQI,SAIlC,KAAKJ,EAAQM,wBAAyB,CAClC,GAAIC,GAASd,EAAOe,OAAQC,WAAa,OAAQL,SAAWA,GAE5D,aADAN,OAAOY,SAASC,KAAOT,OAAOU,KAAO,cAAgBL,GAIzD,GAAIM,GAAYtB,EAASuB,KAAKC,QAC1BC,WAAY,SAAUC,GAClBC,KAAKD,KAAOA,EACZC,KAAKC,MAAQ,GAAI5B,GAAS6B,OAAQC,MAAQzB,EAAI,oBAC9CsB,KAAKI,WAAYJ,KAAKK,cAE1BC,OAAQ,WACJN,KAAKD,KAAKvB,EAAG,gBAAiB+B,KAAM,MAAOzB,EAAQ0B,cAEvDH,UAAY,WACR,GAAII,GAAY3B,EAAQY,KAAO,cAAgBlB,EAAEc,OAASJ,SAAWA,GACrE,OAAO,gBAAkBuB,EAAY,2DAI7CjC,GAAE,WACEQ,OAAOe,KAAO,GAAIpB,GAAKiB,KAAMtB,EAAEuB,OAAQf,GACnC4B,MAAQf,UDQUgB,KAAKxC,EAASC,EAAoB,GAAIA,EAAoB","file":"login.bundled.js","sourcesContent":["webpackJsonp([5],[\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(Backbone, _) {var jQuery = __webpack_require__(1),\n\t $ = jQuery,\n\t GalaxyApp = __webpack_require__(49).GalaxyApp,\n\t _l = __webpack_require__(6),\n\t Page = __webpack_require__(50);\n\t\n\twindow.app = function app(options, bootstrapped) {\n\t window.Galaxy = new GalaxyApp(options, bootstrapped);\n\t Galaxy.debug('login app');\n\t var redirect = encodeURI(options.redirect);\n\t\n\t // TODO: remove iframe for user login (at least) and render login page from here\n\t // then remove this redirect\n\t if (!options.show_welcome_with_login) {\n\t var params = jQuery.param({ use_panels: 'True', redirect: redirect });\n\t window.location.href = Galaxy.root + 'user/login?' + params;\n\t return;\n\t }\n\t\n\t var LoginPage = Backbone.View.extend({\n\t initialize: function (page) {\n\t this.page = page;\n\t this.model = new Backbone.Model({ title: _l('Login required') });\n\t this.setElement(this._template());\n\t },\n\t render: function () {\n\t this.page.$('#galaxy_main').prop('src', options.welcome_url);\n\t },\n\t _template: function () {\n\t var login_url = options.root + 'user/login?' + $.param({ redirect: redirect });\n\t return '<iframe src=\"' + login_url + '\" frameborder=\"0\" style=\"width: 100%; height: 100%;\"/>';\n\t }\n\t });\n\t\n\t $(function () {\n\t Galaxy.page = new Page.View(_.extend(options, {\n\t Right: LoginPage\n\t }));\n\t });\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(3)))\n\n/***/ })\n]);\n\n\n// WEBPACK FOOTER //\n// login.bundled.js","var jQuery = require( 'jquery' ),\n $ = jQuery,\n GalaxyApp = require( 'galaxy' ).GalaxyApp,\n _l = require( 'utils/localization' ),\n Page = require( 'layout/page' );\n\nwindow.app = function app( options, bootstrapped ){\n window.Galaxy = new GalaxyApp( options, bootstrapped );\n Galaxy.debug( 'login app' );\n var redirect = encodeURI( options.redirect );\n\n // TODO: remove iframe for user login (at least) and render login page from here\n // then remove this redirect\n if( !options.show_welcome_with_login ){\n var params = jQuery.param({ use_panels : 'True', redirect : redirect });\n window.location.href = Galaxy.root + 'user/login?' + params;\n return;\n }\n\n var LoginPage = Backbone.View.extend({\n initialize: function( page ) {\n this.page = page;\n this.model = new Backbone.Model({ title : _l( 'Login required' ) } );\n this.setElement( this._template() );\n },\n render: function() {\n this.page.$( '#galaxy_main' ).prop( 'src', options.welcome_url );\n },\n _template : function() {\n var login_url = options.root + 'user/login?' + $.param( { redirect : redirect } );\n return '<iframe src=\"' + login_url + '\" frameborder=\"0\" style=\"width: 100%; height: 100%;\"/>';\n }\n });\n\n $(function(){\n Galaxy.page = new Page.View( _.extend( options, {\n Right : LoginPage\n } ) );\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/apps/login.js"],"sourceRoot":""}
|
||||
{"version":3,"sources":["webpack:///login.bundled.js","webpack:///./galaxy/scripts/apps/login.js"],"names":["webpackJsonp","module","exports","__webpack_require__","Backbone","_","jQuery","$","GalaxyApp","_l","Page","window","app","options","bootstrapped","Galaxy","debug","redirect","encodeURI","show_welcome_with_login","params","param","use_panels","location","href","root","LoginPage","View","extend","initialize","page","this","model","Model","title","setElement","_template","render","prop","welcome_url","login_url","Right","call"],"mappings":"AAAAA,cAAc,IAER,SAASC,EAAQC,EAASC,ICFhC,SAAAC,EAAAC,GAAA,GAAIC,GAASH,EAAS,GAClBI,EAAID,EACJE,EAAYL,EAAS,IAAWK,UAChCC,EAAKN,EAAS,GACdO,EAAOP,EAAS,GAEpBQ,QAAOC,IAAM,SAAcC,EAASC,GAChCH,OAAOI,OAAS,GAAIP,GAAWK,EAASC,GACxCC,OAAOC,MAAO,YACd,IAAIC,GAAWC,UAAWL,EAAQI,SAIlC,KAAKJ,EAAQM,wBAAyB,CAClC,GAAIC,GAASd,EAAOe,OAAQC,WAAa,OAAQL,SAAWA,GAE5D,aADAN,OAAOY,SAASC,KAAOT,OAAOU,KAAO,cAAgBL,GAIzD,GAAIM,GAAYtB,EAASuB,KAAKC,QAC1BC,WAAY,SAAUC,GAClBC,KAAKD,KAAOA,EACZC,KAAKC,MAAQ,GAAI5B,GAAS6B,OAAQC,MAAQzB,EAAI,oBAC9CsB,KAAKI,WAAYJ,KAAKK,cAE1BC,OAAQ,WACJN,KAAKD,KAAKvB,EAAG,gBAAiB+B,KAAM,MAAOzB,EAAQ0B,cAEvDH,UAAY,WACR,GAAII,GAAY3B,EAAQY,KAAO,cAAgBlB,EAAEc,OAASJ,SAAWA,GACrE,OAAO,gBAAkBuB,EAAY,2DAI7CjC,GAAE,WACEQ,OAAOe,KAAO,GAAIpB,GAAKiB,KAAMtB,EAAEuB,OAAQf,GACnC4B,MAAQf,UDQUgB,KAAKxC,EAASC,EAAoB,GAAIA,EAAoB","file":"login.bundled.js","sourcesContent":["webpackJsonp([5],[\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(Backbone, _) {var jQuery = __webpack_require__(1),\n\t $ = jQuery,\n\t GalaxyApp = __webpack_require__(49).GalaxyApp,\n\t _l = __webpack_require__(6),\n\t Page = __webpack_require__(50);\n\t\n\twindow.app = function app(options, bootstrapped) {\n\t window.Galaxy = new GalaxyApp(options, bootstrapped);\n\t Galaxy.debug('login app');\n\t var redirect = encodeURI(options.redirect);\n\t\n\t // TODO: remove iframe for user login (at least) and render login page from here\n\t // then remove this redirect\n\t if (!options.show_welcome_with_login) {\n\t var params = jQuery.param({ use_panels: 'True', redirect: redirect });\n\t window.location.href = Galaxy.root + 'user/login?' + params;\n\t return;\n\t }\n\t\n\t var LoginPage = Backbone.View.extend({\n\t initialize: function (page) {\n\t this.page = page;\n\t this.model = new Backbone.Model({ title: _l('Login required') });\n\t this.setElement(this._template());\n\t },\n\t render: function () {\n\t this.page.$('#galaxy_main').prop('src', options.welcome_url);\n\t },\n\t _template: function () {\n\t var login_url = options.root + 'user/login?' + $.param({ redirect: redirect });\n\t return '<iframe src=\"' + login_url + '\" frameborder=\"0\" style=\"width: 100%; height: 100%;\"/>';\n\t }\n\t });\n\t\n\t $(function () {\n\t Galaxy.page = new Page.View(_.extend(options, {\n\t Right: LoginPage\n\t }));\n\t });\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(3)))\n\n/***/ }\n]);\n\n\n// WEBPACK FOOTER //\n// login.bundled.js","var jQuery = require( 'jquery' ),\n $ = jQuery,\n GalaxyApp = require( 'galaxy' ).GalaxyApp,\n _l = require( 'utils/localization' ),\n Page = require( 'layout/page' );\n\nwindow.app = function app( options, bootstrapped ){\n window.Galaxy = new GalaxyApp( options, bootstrapped );\n Galaxy.debug( 'login app' );\n var redirect = encodeURI( options.redirect );\n\n // TODO: remove iframe for user login (at least) and render login page from here\n // then remove this redirect\n if( !options.show_welcome_with_login ){\n var params = jQuery.param({ use_panels : 'True', redirect : redirect });\n window.location.href = Galaxy.root + 'user/login?' + params;\n return;\n }\n\n var LoginPage = Backbone.View.extend({\n initialize: function( page ) {\n this.page = page;\n this.model = new Backbone.Model({ title : _l( 'Login required' ) } );\n this.setElement( this._template() );\n },\n render: function() {\n this.page.$( '#galaxy_main' ).prop( 'src', options.welcome_url );\n },\n _template : function() {\n var login_url = options.root + 'user/login?' + $.param( { redirect : redirect } );\n return '<iframe src=\"' + login_url + '\" frameborder=\"0\" style=\"width: 100%; height: 100%;\"/>';\n }\n });\n\n $(function(){\n Galaxy.page = new Page.View( _.extend( options, {\n Right : LoginPage\n } ) );\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/apps/login.js"],"sourceRoot":""}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user