dgenies={};dgenies.loading="#loading";dgenies.noise=true;dgenies.mode="webserver";dgenies.init=function(all_jobs,mode){dgenies.mode=mode;letcookies=$.cookie("results");if(mode==="webserver"){cookies=cookies!==undefined&&cookies.length>0?cookies.split("|"):[]}else{cookies=all_jobs;dgenies.save_cookies(cookies)}dgenies.update_results(cookies)};dgenies.save_cookies=function(cookies){$.cookie("results",cookies.join("|"),{path:"/"})};dgenies.update_results=function(results){letjob_list_item=$("ul.nav li.result ul");job_list_item.html("");if(results.length>0){for(leti=0;i<results.length;i++){letresult=results[i];job_list_item.append($("<li>").append($("<a>").attr("href",`/result/${result}`).text(result)))}}else{job_list_item.append($("<li>").append($("<a>").attr("href","/run").text("Please run a job!")))}};dgenies.notify=function(text,type="warning",delay=5000){$.notify({message:text},{type:type,placement:{from:"top",align:"center"},delay:delay,animate:{enter:"animated fadeInDown",exit:"animated fadeOutUp"},offset:55,newest_on_top:true})};dgenies.show_loading=function(message="Loading...",width=118){$("input,select").prop("disabled",true);d3.boxplot.all_disabled=true;$(dgenies.loading).find(".mylabel").html(message);$(dgenies.loading).find(".label").width(width);$(dgenies.loading).show();$(dgenies.loading).position({my:"center center",at:"center center",of:"#draw",collistion:"fit"})};dgenies.hide_loading=function(){$("input,select").prop("disabled",false);d3.boxplot.all_disabled=false;$(dgenies.loading).hide();dgenies.reset_loading_message()};dgenies.set_loading_message=function(message){$(dgenies.loading).find(".mylabel").html(message)};dgenies.reset_loading_message=function(){$(dgenies.loading).find(".mylabel").html("Loading...");$(dgenies.loading).find(".label").width(118)};dgenies.fill_select_zones=function(x_targets,y_contigs){letselect_contig=$("select#select-contig");select_contig.find("option[value!='###NONE###']").remove();for(leti=0;i<y_contigs.length;i++){letlabel=y_contigs[i];letvalue=label;if(label.startsWith("###MIX###")){letparts=label.substr(10).split("###");label="Mix: "+parts.slice(0,3).join(", ");if(parts.length>3){label+=", ..."}}select_contig.append($("<option>",{value:value,text:label}))}select_contig.chosen({disable_search_threshold:10,search_contains:true});select_contig.trigger("chosen:updated");letselect_target=$("select#select-target");select_target.find("option[value!='###NONE###']").remove();for(leti=0;i<x_targets.length;i++){letlabel=x_targets[i];letvalue=label;if(label.startsWith("###MIX###")){letparts=label.substr(10).split("###");label="Mix: "+parts.slice(0,3).join(", ");if(parts.length>3){label+=", ..."}}select_target.append($("<option>",{value:value,text:label}))}select_target.chosen({disable_search_threshold:10,search_contains:true});select_target.trigger("chosen:updated")};dgenies.numberWithCommas=function(x){returnx.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")};dgenies.ajax=function(url,data,success,error,method="POST"){$.ajax(url,{method:method,data:data,success:success,error:error||function(){dgenies.hide_loading();dgenies.notify("An error occurred! Please contact us to report the bug","danger")}})};dgenies.post=function(url,data,success,error,async=true){dgenies.ajax({url:url,data:data,success:success,error:error,type:"POST",async:async})};dgenies.get=function(url,data,success,error){dgenies.ajax(url,data,success,error,"GET")};
if(!dgenies){throw"dgenies wasn't included!"}dgenies.run={};// Init global variables:
dgenies.run.s_id=null;dgenies.run.allowed_ext=[];dgenies.run.max_upload_file_size=-1;dgenies.run.files=[undefined,undefined];dgenies.run.allow_upload=false;dgenies.run.ping_interval=null;dgenies.run.target_example="";dgenies.run.query_example="";dgenies.run.init=function(s_id,allowed_ext,max_upload_file_size=1073741824,target_example="",query_example=""){dgenies.run.s_id=s_id;dgenies.run.allowed_ext=allowed_ext;dgenies.run.max_upload_file_size=max_upload_file_size;dgenies.run.target_example=target_example;dgenies.run.query_example=query_example;dgenies.run.restore_form();dgenies.run.set_events();dgenies.run.init_fileuploads()};dgenies.run.restore_form=function(){dgenies.run.change_fasta_type("query",$("select.query").find(":selected").text().toLowerCase(),true);dgenies.run.change_fasta_type("target",$("select.target").find(":selected").text().toLowerCase(),true)};dgenies.run.upload_next=function(){letnext=dgenies.run.files.pop();while(next===undefined&&dgenies.run.files.length>0){next=dgenies.run.files.pop()}if(next!==undefined){next.submit();returntrue}dgenies.run.do_submit();returnfalse};dgenies.run.__upload_server_error=function(fasta,data){dgenies.notify("message"indata?data["message"]:`An error has occured when uploading <b>${fasta}</b> file. Please contact us to report the bug!`,"danger");dgenies.run.enable_form()};dgenies.run.allowed_file=function(filename){returnfilename.indexOf(".")!==-1&&(dgenies.run.allowed_ext.indexOf(filename.rsplit(".",1)[1].toLowerCase())!==-1||dgenies.run.allowed_ext.indexOf(filename.rsplit(".",2).splice(1).join(".").toLowerCase())!==-1)};dgenies.run.init_fileuploads=function(){$("input.file-query").fileupload({dataType:"json",formData:{"s_id":dgenies.run.s_id},add:function(e,data){letfilename=data.files[0].name;if(dgenies.run.allowed_file(filename))dgenies.run.files[0]=data;else{$("input.file-query").trigger("change");// The value is null after fired
dgenies.notify(`File <b>${filename}</b> is not supported!`,"danger",3000)}},progressall:function(e,data){varprogress=parseInt(data.loaded/data.total*100,10);$("#progress-query").find(".bar").css("width",progress+"%")},success:function(data,success){if(data["success"]!=="OK"){dgenies.run.__upload_server_error("query",data)}elseif("error"indata["files"][0]){dgenies.run.add_error("Query file: "+data["files"][0]["error"],"error");dgenies.run.enable_form()}else{$("input#query").val(data["files"][0]["name"]);dgenies.run.hide_loading("query");dgenies.run.show_success("query");dgenies.run.upload_next()}},error:function(data,success){dgenies.run.__upload_server_error("query",data)}});$("input.file-target").fileupload({dataType:"json",formData:{"s_id":dgenies.run.s_id},add:function(e,data){letfilename=data.files[0].name;if(dgenies.run.allowed_file(filename))dgenies.run.files[1]=data;else{$("input.file-target").trigger("change");// The value is null after fired
dgenies.notify(`File <b>${filename}</b> is not supported!`,"danger",3000)}},progressall:function(e,data){varprogress=parseInt(data.loaded/data.total*100,10);$("#progress-target").find(".bar").css("width",progress+"%")},success:function(data,success){if(data["success"]!=="OK"){dgenies.run.__upload_server_error("target",data)}elseif("error"indata["files"][0]){dgenies.run.add_error("Target file: "+data["files"][0]["error"],"error");dgenies.run.enable_form()}else{$("input#target").val(data["files"][0]["name"]);dgenies.run.hide_loading("target");dgenies.run.show_success("target");dgenies.run.upload_next()}},error:function(data,success){dgenies.run.__upload_server_error("target",data)}});//Trigger events on hidden file inputs:
$("button#button-query").click(function(){$("input.file-query").trigger("click")});$("button#button-target").click(function(){$("input.file-target").trigger("click")})};dgenies.run.get_file_size_str=function(size){if(size<1000){returnsize+" O"}elseif(size<1000000){returnMath.round(size/1024)+" Ko"}elseif(size<1000000000){returnMath.round(size/1048576)+" Mo"}returnMath.round(size/1073741824)+" Go"};dgenies.run.fill_examples=function(){$("select.target").val("1").trigger("change");$("input#target").val("example://"+dgenies.run.target_example);if(dgenies.run.query_example!==""){$("select.query").val("1").trigger("change");$("input#query").val("example://"+dgenies.run.query_example)}};dgenies.run.set_events=function(){letmax_file_size_txt=dgenies.run.get_file_size_str(dgenies.run.max_upload_file_size);$("input.file-query").change(function(){letfile_size_query=$("div.file-size.query");if(this.files.length>0){if(this.files[0].size<=dgenies.run.max_upload_file_size){file_size_query.html(dgenies.run.get_file_size_str(this.files[0].size));dgenies.run.set_filename(this.files[0].name,"query")}else{$(this).val("");dgenies.run.set_filename("","query");dgenies.notify(`File exceed the size limit (${max_file_size_txt})`,"danger",2000);file_size_query.html("")}}else{dgenies.run.set_filename("","query");file_size_query.html("")}});$("input.file-target").change(function(){letfile_size_target=$("div.file-size.target");if(this.files.length>0){if(this.files[0].size<=dgenies.run.max_upload_file_size){file_size_target.html(dgenies.run.get_file_size_str(this.files[0].size));dgenies.run.set_filename(this.files[0].name,"target")}else{$(this).val("");dgenies.run.set_filename("","target");dgenies.notify(`File exceed the size limit (${max_file_size_txt})`,"danger",2000);file_size_target.html("")}}else{dgenies.run.set_filename("","target");file_size_target.html("")}});$("button#submit").click(function(){dgenies.run.submit()});$("select.query").change(function(){dgenies.run.change_fasta_type("query",$("select.query").find(":selected").text().toLowerCase())});$("select.target").change(function(){dgenies.run.change_fasta_type("target",$("select.target").find(":selected").text().toLowerCase())});$("button#example").click(function(){dgenies.run.fill_examples()})};dgenies.run.change_fasta_type=function(fasta,type,keep_url=false){letbutton=$("button#button-"+fasta);letinput=$("input#"+fasta);letcontainer=$("div."+fasta+"-label");$("input.file-"+fasta).val("");if(type==="local"){button.show();input.prop("readonly",true);input.val("");container.width(300)}else{button.hide();input.prop("readonly",false);if(!keep_url)input.val("");container.width(348)}$("div.file-size."+fasta).html("")};dgenies.run.set_filename=function(name,fasta){$("input#"+fasta).val(name)};dgenies.run.disable_form=function(){$("input, select, button").prop("disabled",true)};dgenies.run.enable_form=function(){$(".progress").find(".bar").css("width","0%");$("input, select, button").prop("disabled",false);$("div#uploading-loading").hide();$("button#submit").show();dgenies.run.hide_loading("query");dgenies.run.hide_loading("target");dgenies.run.hide_success("query");dgenies.run.hide_success("target");dgenies.run.files=[undefined,undefined];dgenies.run.restore_form()};dgenies.run.do_submit=function(){$("div#uploading-loading").html("Submitting form...");dgenies.post("/launch_analysis",{"id_job":$("input#id_job").val(),"email":dgenies.mode==="webserver"?$("input#email").val():"","query":$("input#query").val(),"query_type":$("select.query").find(":selected").text().toLowerCase(),"target":$("input#target").val(),"target_type":$("select.target").find(":selected").text().toLowerCase(),"s_id":dgenies.run.s_id},function(data,status){if(data["success"]){window.location=data["redirect"]}else{if(dgenies.run.ping_interval!==null){clearInterval(dgenies.run.ping_interval);dgenies.run.ping_interval=null}if("errors"indata){for(leti=0;i<data["errors"].length;i++){dgenies.notify(data["errors"][i],"danger",3000)}}else{dgenies.notify("An error has occurred. Please contact the support","danger",3000)}dgenies.run.enable_form()}})};dgenies.run.add_error=function(error){$("div.errors-submit ul.flashes").append($("<li>").append(error))};dgenies.run.valid_form=function(){lethas_errors=false;// Check name:
if($("input#id_job").val().length===0){$("label.id-job").addClass("error");dgenies.run.add_error("Name of your job is required!");has_errors=true}// Check mail:
if(dgenies.mode==="webserver"){letemail=$("input#email").val();letmail_re=/^.+@.+\..+$/;if(email.match(mail_re)===null){$("label.email").addClass("error");if(email==="")dgenies.run.add_error("Email is required!");elsedgenies.run.add_error("Email is not correct!");has_errors=true}}//Check input target:
if($("input#target").val().length===0){$("label.file-target").addClass("error");dgenies.run.add_error("Target fasta is required!");has_errors=true}// Returns
return!has_errors};dgenies.run.show_loading=function(fasta){$(".loading-file."+fasta).show()};dgenies.run.hide_loading=function(fasta){$(".loading-file."+fasta).hide()};dgenies.run.show_success=function(fasta){$(".upload-success."+fasta).show()};dgenies.run.hide_success=function(fasta){$(".upload-success."+fasta).hide()};dgenies.run.reset_errors=function(){$("label").removeClass("error");$("div.errors-submit ul.flashes").find("li").remove()};dgenies.run.ask_for_upload=function(){console.log("Ask for upload...");dgenies.post("/ask-upload",{"s_id":dgenies.run.s_id},function(data,status){if(data["success"]){letallow_upload=data["allowed"];if(allow_upload){$("div#uploading-loading").html("Uploading files...");dgenies.run.ping_interval=window.setInterval(dgenies.run.ping_upload,15000);dgenies.run.upload_next()}else{window.setTimeout(dgenies.run.ask_for_upload,15000)}}else{dgenies.notify("message"indata?data["message"]:"An error has occurred. Please contact the support","danger",3000)}},undefined,false)};dgenies.run.ping_upload=function(){dgenies.post("/ping-upload",{"s_id":dgenies.run.s_id},function(data,status){})};dgenies.run.check_url=function(url){returnurl.startsWith("http://")||url.startsWith("https://")||url.startsWith("ftp://")||url.startsWith("example://")};dgenies.run.start_uploads=function(){letquery_type=parseInt($("select.query").val());lethas_uploads=false;letquery_val=$("input#query").val();if(query_type===0&&query_val.length>0){$("button#button-query").hide();dgenies.run.show_loading("query");has_uploads=true}else{dgenies.run.files[0]=undefined;if(query_val!==""&&!dgenies.run.check_url(query_val)){dgenies.run.add_error("Query file: invalid URL","error");dgenies.run.enable_form();returnfalse}}lettarget_type=parseInt($("select.target").val());lettarget_val=$("input#target").val();if(target_type===0&&target_val.length>0){$("button#button-target").hide();dgenies.run.show_loading("target");has_uploads=true}else{dgenies.run.files[1]=undefined;if(target_val!==""&&!dgenies.run.check_url(target_val)){dgenies.run.add_error("Target file: invalid URL","error");dgenies.run.enable_form();returnfalse}}if(has_uploads){$("div#uploading-loading").html("Asking for upload...");dgenies.run.ask_for_upload()}else{dgenies.run.upload_next()}};dgenies.run.show_global_loading=function(){$("button#submit").hide();$("button#example").hide();$("div#uploading-loading").show()};dgenies.run.submit=function(){dgenies.run.reset_errors();if(dgenies.run.valid_form()){dgenies.run.disable_form();dgenies.run.show_global_loading();dgenies.run.start_uploads()}};