From ca5f6053c7b13fa8f631f0a96f78a8aac544175c Mon Sep 17 00:00:00 2001 From: guerler Date: Wed, 20 Apr 2016 13:08:20 -0400 Subject: [PATCH] Fix tool action redirects for non-default tools displaying tool forms --- client/galaxy/scripts/mvc/tool/tool-form.js | 7 +++++++ lib/galaxy/tools/__init__.py | 5 ++++- static/maps/mvc/tool/tool-form.js.map | 2 +- static/scripts/bundled/analysis.bundled.js | 4 ++-- static/scripts/bundled/analysis.bundled.js.map | 2 +- static/scripts/bundled/libs.bundled.js.map | 2 +- static/scripts/mvc/tool/tool-form.js | 2 +- 7 files changed, 17 insertions(+), 7 deletions(-) diff --git a/client/galaxy/scripts/mvc/tool/tool-form.js b/client/galaxy/scripts/mvc/tool/tool-form.js index a09ac285969..336d36b6d6f 100644 --- a/client/galaxy/scripts/mvc/tool/tool-form.js +++ b/client/galaxy/scripts/mvc/tool/tool-form.js @@ -60,6 +60,13 @@ define(['utils/utils', 'mvc/ui/ui-misc', 'mvc/tool/tool-form-base', 'mvc/tool/to callback && callback(); return; } + if ( options.action !== Galaxy.root + 'tool_runner/index' ) { + var $f = $( '
' ).attr( { action: options.action, method: options.method, enctype: options.enctype } ); + _.each( job_def.inputs, function( value, key ) { $f.append( $( '' ).attr( { 'name': key, 'value': value } ) ) } ); + $f.hide().appendTo( 'body' ).submit().remove(); + callback && callback(); + return; + } Galaxy.emit.debug( 'tool-form::submit()', 'Validation complete.', job_def ); Utils.request({ type : 'POST', diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index 4ef93b4f857..18fdd813f66 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -1693,7 +1693,10 @@ class Tool( object, Dictifiable ): 'job_id' : trans.security.encode_id( job.id ) if job else None, 'job_remap' : self._get_job_remap( job ), 'history_id' : trans.security.encode_id( history.id ), - 'display' : self.display_interface + 'display' : self.display_interface, + 'action' : url_for( self.action ), + 'method' : self.method, + 'enctype' : self.enctype }) return tool_model diff --git a/static/maps/mvc/tool/tool-form.js.map b/static/maps/mvc/tool/tool-form.js.map index 193bdc3ba2e..83afd08c8f4 100644 --- a/static/maps/mvc/tool/tool-form.js.map +++ b/static/maps/mvc/tool/tool-form.js.map @@ -1 +1 @@ -{"version":3,"file":"tool-form.js","sources":["../../../src/mvc/tool/tool-form.js"],"names":["define","Utils","Ui","ToolFormBase","ToolTemplate","View","extend","initialize","options","self","this","prototype","call","merge","customize","buttons","execute","execute_btn","Button","icon","tooltip","name","version","title","cls","floating","onclick","wait","portlet","disable","submit","unwait","enable","job_id","job_remap","inputs","label","type","display","ignore","value","help","callback","job_def","tool_id","id","tool_version","data","create","trigger","validate","Galaxy","emit","debug","request","url","root","success","response","$el","empty","append","parent","currHistoryPanel","refreshContents","error","err_data","error_messages","matchResponse","input_id","highlight","modal","show","body","err_msg","Close","hide","job_inputs","batch_n","batch_src","job_input_id","input_value","match","input_field","field_list","input_def","input_list","optional","batch","n","values","length","src"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tool-form.js","sources":["../../../src/mvc/tool/tool-form.js"],"names":["define","Utils","Ui","ToolFormBase","ToolTemplate","View","extend","initialize","options","self","this","prototype","call","merge","customize","buttons","execute","execute_btn","Button","icon","tooltip","name","version","title","cls","floating","onclick","wait","portlet","disable","submit","unwait","enable","job_id","job_remap","inputs","label","type","display","ignore","value","help","callback","job_def","tool_id","id","tool_version","data","create","trigger","validate","Galaxy","emit","debug","action","root","$f","$","attr","method","enctype","_","each","key","append","hide","appendTo","remove","request","url","success","response","$el","empty","parent","currHistoryPanel","refreshContents","error","err_data","error_messages","matchResponse","input_id","highlight","modal","show","body","err_msg","Close","job_inputs","batch_n","batch_src","job_input_id","input_value","match","input_field","field_list","input_def","input_list","optional","batch","n","values","length","src"],"mappings":"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"} \ No newline at end of file diff --git a/static/scripts/bundled/analysis.bundled.js b/static/scripts/bundled/analysis.bundled.js index 923d6ca909d..d3828918582 100644 --- a/static/scripts/bundled/analysis.bundled.js +++ b/static/scripts/bundled/analysis.bundled.js @@ -1,5 +1,5 @@ -webpackJsonp([3,1],[function(t,e,i){(function(t,e){var n=i(1),s=n,o=i(59).GalaxyApp,a=i(57),r=i(11),l=i(88),c=i(87),d=i(61),h=i(19),u=i(46);window.app=function(i,n){window.Galaxy=new o(i,n),Galaxy.debug("analysis app");var p=i.config,g=new l({el:"#left",userIsAnonymous:Galaxy.user.isAnonymous(),search_url:p.search_url,toolbox:p.toolbox,toolbox_in_panel:p.toolbox_in_panel,stored_workflow_menu_entries:p.stored_workflow_menu_entries,nginx_upload_path:p.nginx_upload_path,ftp_upload_site:p.ftp_upload_site,default_genome:p.default_genome,default_extension:p.default_extension}),f=new r.CenterPanel({el:"#center"}),m=new c({el:"#right",galaxyRoot:Galaxy.root,userIsAnonymous:Galaxy.user.isAnonymous(),allow_user_dataset_purge:p.allow_user_dataset_purge}),v=new d.PageLayoutView(t.extend(i,{el:"body",left:g,center:f,right:m}));Galaxy.page=v,Galaxy.params=Galaxy.config.params,Galaxy.toolPanel=g.tool_panel,Galaxy.upload=g.uploadButton,Galaxy.currHistoryPanel=m.historyView,Galaxy.currHistoryPanel.listenToGalaxy(Galaxy),Galaxy.app={display:function(t,e){s(".select2-hidden-accessible").remove(),f.display(t)}};new(e.Router.extend({initialize:function(t){this.options=t},execute:function(t,e,i){Galaxy.debug("router execute:",t,e,i);var n=a.parse(e.pop());e.push(n),t&&t.apply(this,e)},routes:{"(/)":"home","(/)root*":"home","(/)tours(/)(:tour_id)":"show_tours"},show_tours:function(t){t?u.giveTour(t):f.display(new u.ToursView)},home:function(t){t.tool_id||t.job_id?"upload1"===t.tool_id?(Galaxy.upload.show(),this._loadCenterIframe("welcome")):this._loadToolForm(t):t.workflow_id?this._loadCenterIframe("workflow/run?id="+t.workflow_id):t.m_c?this._loadCenterIframe(t.m_c+"/"+t.m_a):this._loadCenterIframe("welcome")},_loadToolForm:function(t){t.id=t.tool_id,f.display(new h.View(t))},_loadCenterIframe:function(t,e){e=e||Galaxy.root,t=e+t,f.$("#galaxy_main").prop("src",t)}}))(i);s(function(){v.render().right.historyView.loadCurrentHistory(),Galaxy.listenTo(v.right.historyView,"history-size-change",function(){Galaxy.user.fetch({url:Galaxy.user.urlRoot()+"/"+(Galaxy.user.id||"current")})}),v.right.historyView.connectToQuotaMeter(v.masthead.quotaMeter),e.history.start({root:Galaxy.root,pushState:!0})})}}).call(e,i(3),i(2))},,,,,,,function(t,e,i){var n,s;(function(o,a){n=[i(4),i(23),i(53),i(22),i(49),i(13),i(8)],s=function(t,e,i,n,s,r,l){var c=o.View.extend({tagName:"label",initialize:function(t){this.model=t&&t.model||new o.Model(t),this.tagName=t.tagName||this.tagName,this.setElement(a("<"+this.tagName+"/>")),this.listenTo(this.model,"change",this.render,this),this.render()},title:function(t){this.model.set("title",t)},value:function(){return this.model.get("title")},render:function(){return this.$el.removeClass().addClass("ui-label").addClass(this.model.get("cls")).html(this.model.get("title")),this}}),d=o.View.extend({initialize:function(t){this.model=t&&t.model||new o.Model({message:null,status:"info",cls:"",persistent:!1}).set(t),this.listenTo(this.model,"change",this.render,this),this.render()},update:function(t){this.model.set(t)},render:function(){this.$el.removeClass().addClass("ui-message").addClass(this.model.get("cls"));var t=this.model.get("status");if(this.model.get("large")?this.$el.addClass(("success"==t&&"done"||"danger"==t&&"error"||t)+"messagelarge"):this.$el.addClass("alert").addClass("alert-"+t),this.model.get("message")){if(this.$el.html(this.model.get("message")),this.$el.fadeIn(),this.timeout&&window.clearTimeout(this.timeout),!this.model.get("persistent")){var e=this;this.timeout=window.setTimeout(function(){e.$el.fadeOut()},3e3)}}else this.$el.fadeOut();return this}}),h=o.View.extend({initialize:function(t){this.model=t&&t.model||new o.Model({type:"text",placeholder:"",disabled:!1,visible:!0,cls:"",area:!1}).set(t),this.tagName=this.model.get("area")?"textarea":"input",this.setElement(a("<"+this.tagName+"/>")),this.listenTo(this.model,"change",this.render,this),this.render()},events:{input:"_onchange"},value:function(t){return void 0!==t&&this.model.set("value","string"==typeof t?t:""),this.model.get("value")},render:function(){return this.$el.removeClass().addClass("ui-"+this.tagName).addClass(this.model.get("cls")).attr("id",this.model.id).attr("type",this.model.get("type")).attr("placeholder",this.model.get("placeholder")).val(this.model.get("value")),this.model.get("disabled")?this.$el.attr("disabled",!0):this.$el.removeAttr("disabled"),this.$el[this.model.get("visible")?"show":"hide"](),this},_onchange:function(){this.value(this.$el.val()),this.model.get("onchange")&&this.model.get("onchange")(this.model.get("value"))}}),u=o.View.extend({initialize:function(t){this.model=t&&t.model||new o.Model(t),this.setElement(a("
").append(this.$info=a("
")).append(this.$hidden=a("
"))),this.listenTo(this.model,"change",this.render,this),this.render()},value:function(t){return void 0!==t&&this.model.set("value",t),this.model.get("value")},render:function(){return this.$el.attr("id",this.model.id),this.$hidden.val(this.model.get("value")),this.model.get("info")?this.$info.show().html(this.model.get("info")):this.$info.hide(),this}});return{Button:r.ButtonDefault,ButtonIcon:r.ButtonIcon,ButtonCheck:r.ButtonCheck,ButtonMenu:r.ButtonMenu,ButtonLink:r.ButtonLink,Input:h,Label:c,Message:d,Modal:l,RadioButton:n.RadioButton,Checkbox:n.Checkbox,Radio:n.Radio,Select:e,Hidden:u,Slider:i,Drilldown:s}}.apply(e,n),!(void 0!==s&&(t.exports=s))}).call(e,i(2),i(1))},,function(t,e,i){var n,s;(function(o,a){n=[i(4)],s=function(t){var e=o.View.extend({visible:!1,initialize:function(e){var i=this;this.options=t.merge(e,{id:t.uid(),title:"",icon:"",buttons:null,body:null,scrollable:!0,nopadding:!1,operations:null,placement:"bottom",cls:"ui-portlet",operations_flt:"right",collapsible:!1,collapsed:!1}),this.setElement(this._template(this.options)),this.$body=this.$(".portlet-body"),this.$title=this.$(".portlet-title-text"),this.$header=this.$(".portlet-header"),this.$content=this.$(".portlet-content"),this.$footer=this.$(".portlet-footer"),this.options.nopadding&&(this.$content.css("padding","0px"),this.$body.css("padding","0px")),this.$buttons=this.$(".portlet-buttons"),this.options.buttons?a.each(this.options.buttons,function(t,e){e.$el.prop("id",t),i.$buttons.append(e.$el)}):this.$buttons.remove(),this.$operations=this.$(".portlet-operations"),this.options.operations&&a.each(this.options.operations,function(t,e){e.$el.prop("id",t),i.$operations.append(e.$el)}),this.options.body&&this.append(this.options.body),this.collapsed=!1,this.options.collapsible&&(this.$title.addClass("no-highlight").css({cursor:"pointer","text-decoration":"underline"}),this.$title.on("click",function(){i.collapsed?i.expand():i.collapse()}),this.options.collapsed&&this.collapse())},append:function(t){this.$body.append(t)},empty:function(){this.$body.empty()},header:function(){return this.$header},body:function(){return this.$body},footer:function(){return this.$footer},show:function(){this.visible=!0,this.$el.fadeIn("fast")},hide:function(){this.visible=!1,this.$el.fadeOut("fast")},enableButton:function(t){this.$buttons.find("#"+t).prop("disabled",!1)},disableButton:function(t){this.$buttons.find("#"+t).prop("disabled",!0)},hideOperation:function(t){this.$operations.find("#"+t).hide()},showOperation:function(t){this.$operations.find("#"+t).show()},setOperation:function(t,e){var i=this.$operations.find("#"+t);i.off("click"),i.on("click",e)},title:function(t){var e=this.$title;return t&&e.html(t),e.html()},collapse:function(){this.collapsed=!0,this.$content.height("0%"),this.$body.hide(),this.$footer.hide(),this.trigger("collapsed")},expand:function(){this.collapsed=!1,this.$content.height("100%"),this.$body.fadeIn("fast"),this.$footer.fadeIn("fast"),this.trigger("expanded")},disable:function(){this.$(".portlet-backdrop").show()},enable:function(){this.$(".portlet-backdrop").hide()},_template:function(t){var e='
';return t.title&&(e+='
',t.icon&&(e+=' '),e+=''+t.title+"
"),e+='
',"top"==t.placement&&(e+='
'),e+='
',"bottom"==t.placement&&(e+='
'),e+='