Files
galaxy/static/scripts/mvc/dataset/data.js
T
2018-05-23 15:37:14 -04:00

1 line
6.7 KiB
JavaScript

define("mvc/dataset/data",["exports","utils/localization","mvc/ui/icon-button"],function(t,e,i){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(t,"__esModule",{value:!0});var a=n(e),l=n(i),o=Backbone.Model.extend({}),s=Backbone.Model.extend({defaults:{id:"",type:"",name:"",hda_ldda:"hda",metadata:null},initialize:function(){this.get("metadata")||this._set_metadata(),this.on("change",this._set_metadata,this)},_set_metadata:function(){var t=new o;_.each(_.keys(this.attributes),function(e){if(0===e.indexOf("metadata_")){var i=e.split("metadata_")[1];t.set(i,this.attributes[e]),delete this.attributes[e]}},this),this.set("metadata",t,{silent:!0})},get_metadata:function(t){return this.attributes.metadata.get(t)},urlRoot:Galaxy.root+"api/datasets"}),r=s.extend({defaults:_.extend({},s.prototype.defaults,{chunk_url:null,first_data_chunk:null,offset:0,at_eof:!1}),initialize:function(t){s.prototype.initialize.call(this),this.attributes.first_data_chunk&&(this.attributes.offset=this.attributes.first_data_chunk.offset),this.attributes.chunk_url=Galaxy.root+"dataset/display?dataset_id="+this.id,this.attributes.url_viz=Galaxy.root+"visualization"},get_next_chunk:function(){if(this.attributes.at_eof)return null;var t=this,e=$.Deferred();return $.getJSON(this.attributes.chunk_url,{offset:t.attributes.offset}).success(function(i){var n;""!==i.ck_data?(n=i,t.attributes.offset=i.offset):(t.attributes.at_eof=!0,n=null),e.resolve(n)}),e}}),d=Backbone.Collection.extend({model:s}),h=Backbone.View.extend({initialize:function(t){this.row_count=0,this.loading_chunk=!1,new f({model:t.model,$el:this.$el})},expand_to_container:function(){this.$el.height()<this.scroll_elt.height()&&this.attempt_to_fetch()},attempt_to_fetch:function(t){var e=this;!this.loading_chunk&&this.scrolled_to_bottom()&&(this.loading_chunk=!0,this.loading_indicator.show(),$.when(e.model.get_next_chunk()).then(function(t){t&&(e._renderChunk(t),e.loading_chunk=!1),e.loading_indicator.hide(),e.expand_to_container()}))},render:function(){this.loading_indicator=$("<div/>").attr("id","loading_indicator"),this.$el.append(this.loading_indicator);var t=$("<table/>").attr({id:"content_table",cellpadding:0});this.$el.append(t);var e=this.model.get_metadata("column_names"),i=$("<thead/>").appendTo(t),n=$("<tr/>").appendTo(i);if(e)n.append("<th>"+e.join("</th><th>")+"</th>");else for(var a=1;a<=this.model.get_metadata("columns");a++)n.append("<th>"+a+"</th>");var l=this,o=this.model.get("first_data_chunk");o?this._renderChunk(o):$.when(l.model.get_next_chunk()).then(function(t){l._renderChunk(t)}),this.scroll_elt.scroll(function(){l.attempt_to_fetch()})},scrolled_to_bottom:function(){return!1},_renderCell:function(t,e,i){var n=$("<td>").text(t),a=this.model.get_metadata("column_types");return void 0!==i?n.attr("colspan",i).addClass("stringalign"):a&&e<a.length&&("str"!==a[e]&&"list"!==a[e]||n.addClass("stringalign")),n},_renderRow:function(t){var e=t.split("\t"),i=$("<tr>"),n=this.model.get_metadata("columns");return this.row_count%2!=0&&i.addClass("dark_row"),e.length===n?_.each(e,function(t,e){i.append(this._renderCell(t,e))},this):e.length>n?(_.each(e.slice(0,n-1),function(t,e){i.append(this._renderCell(t,e))},this),i.append(this._renderCell(e.slice(n-1).join("\t"),n-1))):1===e.length?i.append(this._renderCell(t,0,n)):(_.each(e,function(t,e){i.append(this._renderCell(t,e))},this),_.each(_.range(n-e.length),function(){i.append($("<td>"))})),this.row_count++,i},_renderChunk:function(t){var e=this.$el.find("table");_.each(t.ck_data.split("\n"),function(t,i){""!==t&&e.append(this._renderRow(t))},this)}}),c=h.extend({initialize:function(t){h.prototype.initialize.call(this,t);var e=_.find(this.$el.parents(),function(t){return"auto"===$(t).css("overflow")});e||(e=window),this.scroll_elt=$(e)},scrolled_to_bottom:function(){return this.$el.height()-this.scroll_elt.scrollTop()-this.scroll_elt.height()<=0}}),u=h.extend({initialize:function(t){h.prototype.initialize.call(this,t),this.scroll_elt=this.$el.css({position:"relative",overflow:"scroll",height:t.height||"500px"})},scrolled_to_bottom:function(){return this.$el.scrollTop()+this.$el.innerHeight()>=this.el.scrollHeight}}),f=Backbone.View.extend({col:{chrom:null,start:null,end:null},url_viz:null,dataset_id:null,genome_build:null,file_ext:null,initialize:function(t){var e=parent.Galaxy;if(e&&e.modal&&(this.modal=e.modal),e&&e.frame&&(this.frame=e.frame),this.modal&&this.frame){var i=t.model,n=i.get("metadata");if(i.get("file_ext")){if(this.file_ext=i.get("file_ext"),"bed"==this.file_ext){if(!(n.get("chromCol")&&n.get("startCol")&&n.get("endCol")))return void console.log("TabularButtonTrackster : Bed-file metadata incomplete.");this.col.chrom=n.get("chromCol")-1,this.col.start=n.get("startCol")-1,this.col.end=n.get("endCol")-1}if("vcf"==this.file_ext){var o=function(t,e){for(var i=0;i<e.length;i++)if(e[i].match(t))return i;return-1};if(this.col.chrom=o("Chrom",n.get("column_names")),this.col.start=o("Pos",n.get("column_names")),this.col.end=null,-1==this.col.chrom||-1==this.col.start)return void console.log("TabularButtonTrackster : VCF-file metadata incomplete.")}if(void 0!==this.col.chrom)if(i.id)if(this.dataset_id=i.id,i.get("url_viz")){this.url_viz=i.get("url_viz"),i.get("genome_build")&&(this.genome_build=i.get("genome_build"));var s=new l.default.IconButtonView({model:new l.default.IconButton({title:(0,a.default)("Visualize"),icon_class:"chart_curve",id:"btn_viz"})});this.setElement(t.$el),this.$el.append(s.render().$el),this.hide()}else console.log("TabularButtonTrackster : Url for visualization controller is missing.");else console.log("TabularButtonTrackster : Dataset identification is missing.")}}},events:{"mouseover tr":"show",mouseleave:"hide"},show:function(t){var e=this;if(null!==this.col.chrom){var i=$(t.target).parent(),n=i.children().eq(this.col.chrom).html(),l=i.children().eq(this.col.start).html(),o=this.col.end?i.children().eq(this.col.end).html():l;if(!n.match("^#")&&""!==n&&function(t){return!isNaN(parseFloat(t))&&isFinite(t)}(l)){var s={dataset_id:this.dataset_id,gene_region:n+":"+l+"-"+o},r=i.offset(),d=r.left-10,h=r.top-$(window).scrollTop()+3;$("#btn_viz").css({position:"fixed",top:h+"px",left:d+"px"}),$("#btn_viz").off("click"),$("#btn_viz").click(function(){e.frame.add({title:(0,a.default)("Trackster"),url:e.url_viz+"/trackster?"+$.param(s)})}),$("#btn_viz").show()}else $("#btn_viz").hide()}},hide:function(){this.$("#btn_viz").hide()}});t.default={Dataset:s,TabularDataset:r,DatasetCollection:d,TabularDatasetChunkedView:h,createTabularDatasetChunkedView:function(t){t.model||(t.model=new r(t.dataset_config));var e=t.parent_elt,i=t.embedded;delete t.embedded,delete t.parent_elt,delete t.dataset_config;var n=i?new u(t):new c(t);return n.render(),e&&(e.append(n.$el),n.expand_to_container()),n}}});