mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-16 15:45:04 +08:00
1 line
7.1 KiB
JavaScript
1 line
7.1 KiB
JavaScript
define([],function(){var g=Backbone.Model.extend({});var b=Backbone.Model.extend({defaults:{id:"",type:"",name:"",hda_ldda:"hda",metadata:null},initialize:function(){this._set_metadata();this.on("change",this._set_metadata,this)},_set_metadata:function(){var k=new g();_.each(_.keys(this.attributes),function(l){if(l.indexOf("metadata_")===0){var m=l.split("metadata_")[1];k.set(m,this.attributes[l]);delete this.attributes[l]}},this);this.set("metadata",k,{silent:true})},get_metadata:function(k){return this.attributes.metadata.get(k)},urlRoot:galaxy_config.root+"api/datasets"});var h=b.extend({defaults:_.extend({},b.prototype.defaults,{chunk_url:null,first_data_chunk:null,chunk_index:-1,at_eof:false}),initialize:function(k){b.prototype.initialize.call(this);this.attributes.chunk_index=(this.attributes.first_data_chunk?1:0)},get_next_chunk:function(){if(this.attributes.at_eof){return null}var k=this,l=$.Deferred();$.getJSON(this.attributes.chunk_url,{chunk:k.attributes.chunk_index++}).success(function(m){var n;if(m.ck_data!==""){n=m}else{k.attributes.at_eof=true;n=null}l.resolve(n)});return l}});var e=Backbone.Collection.extend({model:b});var a=Backbone.View.extend({initialize:function(k){this.row_count=0;this.header_color="#AAA";this.dark_row_color="#DDD";new d(k)},render:function(){var o=$("<table/>").attr({id:"content_table",cellpadding:0});this.$el.append(o);var k=this.model.get_metadata("column_names"),p=$("<tr/>").css("background-color",this.header_color).appendTo(o);if(k){p.append("<th>"+k.join("</th><th>")+"</th>")}var m=this.model.get("first_data_chunk");if(m){this._renderChunk(m)}var l=this,n=false;this.scroll_elt.scroll(function(){if(!n&&l.scrolled_to_bottom()){n=true;$.when(l.model.get_next_chunk()).then(function(q){if(q){l._renderChunk(q);n=false}})}});$("#loading_indicator").ajaxStart(function(){$(this).show()}).ajaxStop(function(){$(this).hide()})},scrolled_to_bottom:function(){return false},_renderCell:function(n,k,o){var l=$("<td>").text(n);var m=this.model.get_metadata("column_types");if(o!==undefined){l.attr("colspan",o).addClass("stringalign")}else{if(m){if(k<m.length){if(m[k]==="str"||m==="list"){l.addClass("stringalign")}}}}return l},_renderRow:function(k){var l=k.split("\t"),n=$("<tr>"),m=this.model.get_metadata("columns");if(this.row_count%2!==0){n.css("background-color",this.dark_row_color)}if(l.length===m){_.each(l,function(p,o){n.append(this._renderCell(p,o))},this)}else{if(l.length>m){_.each(l.slice(0,m-1),function(p,o){n.append(this._renderCell(p,o))},this);n.append(this._renderCell(l.slice(m-1).join("\t"),m-1))}else{if(m>5&&l.length===m-1){_.each(l,function(p,o){n.append(this._renderCell(p,o))},this);n.append($("<td>"))}else{n.append(this._renderCell(k,0,m))}}}this.row_count++;return n},_renderChunk:function(k){var l=this.$el.find("table");_.each(k.ck_data.split("\n"),function(m,n){l.append(this._renderRow(m))},this)}});var f=a.extend({initialize:function(k){a.prototype.initialize.call(this,k);scroll_elt=_.find(this.$el.parents(),function(l){return $(l).css("overflow")==="auto"});if(!scroll_elt){scroll_elt=window}this.scroll_elt=$(scroll_elt)},scrolled_to_bottom:function(){return(this.$el.height()-this.scroll_elt.scrollTop()-this.scroll_elt.height()<=0)}});var j=a.extend({initialize:function(k){a.prototype.initialize.call(this,k);this.scroll_elt=this.$el.css({position:"relative",overflow:"scroll",height:this.options.height||"500px"})},scrolled_to_bottom:function(){return this.$el.scrollTop()+this.$el.innerHeight()>=this.el.scrollHeight}});var d=Backbone.View.extend({col:{chrom:null,start:null,end:null},url_viz:null,dataset_id:null,genome_build:null,data_type:null,initialize:function(m){var l=m.model.attributes;var o=m.model.attributes.metadata.attributes;if(typeof l.data_type!=="undefined"){this.data_type=l.data_type}else{console.log("TabularButtonTrackster : Data type missing.")}if(this.data_type=="bed"){if(typeof o.chromCol!=="undefined"||typeof o.startCol!=="undefined"||typeof o.endCol!=="undefined"){this.col.chrom=o.chromCol-1;this.col.start=o.startCol-1;this.col.end=o.endCol-1}else{console.log("TabularButtonTrackster : Bed-file metadata incomplete.")}}if(this.data_type=="vcf"){function n(q,r){for(var p=0;p<r.length;p++){if(r[p].match(q)){return p}}return -1}this.col.chrom=n("Chrom",o.column_names);this.col.start=n("Pos",o.column_names);this.col.end=null;if(this.col.chrom==-1||this.col.start==-1){console.log("TabularButtonTrackster : VCF-file metadata incomplete.")}}if(this.col.chrom===null){return}if(typeof m.model.attributes.id==="undefined"){console.log("TabularButtonTrackster : Dataset identification is missing.")}else{this.dataset_id=m.model.attributes.id}if(typeof m.model.attributes.url_viz==="undefined"){console.log("TabularButtonTrackster : Url for visualization controller is missing.")}else{this.url_viz=m.model.attributes.url_viz}if(typeof m.model.attributes.genome_build!=="undefined"){this.genome_build=m.model.attributes.genome_build}var k=new IconButtonView({model:new IconButton({title:"Visualize",icon_class:"chart_curve",id:"btn_viz"})});this.$el.append(k.render().$el);$("#btn_viz").hide()},events:{"mouseover tr":"btn_viz_show",mouseleave:"btn_viz_hide"},btn_viz_show:function(p){function o(u){return !isNaN(parseFloat(u))&&isFinite(u)}if(this.col.chrom===null){return}var t=$(p.target).parent();var q=t.children().eq(this.col.chrom).html();var k=t.children().eq(this.col.start).html();var m=this.col.end?t.children().eq(this.col.end).html():k;if(!q.match("^#")&&q!==""&&o(k)){var s={dataset_id:this.dataset_id,gene_region:q+":"+k+"-"+m};var n=t.offset();var l=n.left-10;var r=n.top-$(window).scrollTop();$("#btn_viz").css({position:"fixed",top:r+"px",left:l+"px"});$("#btn_viz").off("click");$("#btn_viz").click(this.create_trackster_action(this.url_viz,s,this.genome_build));$("#btn_viz").show()}else{$("#btn_viz").hide()}},btn_viz_hide:function(){$("#btn_viz").hide()},create_trackster_action:function(k,m,l){return function(){var n={};if(l){n["f-dbkey"]=l}$.ajax({url:k+"/list_tracks?"+$.param(n),dataType:"html",error:function(){alert(("Could not add this dataset to browser")+".")},success:function(o){var p=window.parent;p.Galaxy.modal.show({title:"View Data in a New or Saved Visualization",buttons:{Cancel:function(){p.Galaxy.modal.hide()},"View in saved visualization":function(){p.Galaxy.modal.show({title:"Add Data to Saved Visualization",body:o,buttons:{Cancel:function(){p.Galaxy.modal.hide()},"Add to visualization":function(){$(p.document).find("input[name=id]:checked").each(function(){p.Galaxy.modal.hide();var q=$(this).val();m.id=q;p.Galaxy.frame.add({title:"Trackster",type:"url",content:k+"/trackster?"+$.param(m)})})}}})},"View in new visualization":function(){p.Galaxy.modal.hide();var q=k+"/trackster?"+$.param(m);p.Galaxy.frame.add({title:"Trackster",type:"url",content:q})}}})}});return false}}});var i=function(n,l,o,k){var m=new l({model:new n(o)});m.render();if(k){k.append(m.$el)}return m};var c=function(m){m.model=new h(m.dataset_config);var l=m.parent_elt;var n=m.embedded;delete m.embedded;delete m.parent_elt;delete m.dataset_config;var k=(n?new j(m):new f(m));k.render();if(l){l.append(k.$el)}return k};return{Dataset:b,TabularDataset:h,DatasetCollection:e,TabularDatasetChunkedView:a,createTabularDatasetChunkedView:c}}); |