mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
1 line
13 KiB
JavaScript
1 line
13 KiB
JavaScript
define("viz/visualization",["exports","utils/localization","libs/underscore","mvc/dataset/data","viz/trackster/util","utils/config","mvc/grid/grid-view","mvc/ui/ui-tabs","mvc/ui/ui-misc"],function(t,e,a,n,i,r,s,o,l){"use strict";function d(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(t,"__esModule",{value:!0});var u=d(e),_=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a),c=d(n),h=d(i),g=d(r),f=d(s),m=d(o),v=(d(l),{toJSON:function(){var t=this,e={};return _.each(t.constructor.to_json_keys,function(a){var n=t.get(a);a in t.constructor.to_json_mappers&&(n=t.constructor.to_json_mappers[a](n,t)),e[a]=n}),e}}),p=function(t){this.default_font=void 0!==t?t:"9px Monaco, Lucida Console, monospace",this.dummy_canvas=this.new_canvas(),this.dummy_context=this.dummy_canvas.getContext("2d"),this.dummy_context.font=this.default_font,this.char_width_px=this.dummy_context.measureText("A").width,this.patterns={},this.load_pattern("right_strand","/visualization/strand_right.png"),this.load_pattern("left_strand","/visualization/strand_left.png"),this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png"),this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};_.extend(p.prototype,{load_pattern:function(t,e){var a=this.patterns,n=this.dummy_context,i=new Image;i.src=Galaxy.root+"static/images"+e,i.onload=function(){a[t]=n.createPattern(i,"repeat")}},get_pattern:function(t){return this.patterns[t]},new_canvas:function(){var t=$("<canvas/>")[0];return t.manager=this,t}});var y=Backbone.Model.extend({defaults:{num_elements:20,obj_cache:null,key_ary:null},initialize:function(t){this.clear()},get_elt:function(t){var e=this.attributes.obj_cache,a=this.attributes.key_ary,n=t.toString(),i=_.indexOf(a,function(t){return t.toString()===n});return-1!==i&&(e[n].stale?(a.splice(i,1),delete e[n]):this.move_key_to_end(t,i)),e[n]},set_elt:function(t,e){var a=this.attributes.obj_cache,n=this.attributes.key_ary,i=t.toString(),r=this.attributes.num_elements;return a[i]||(n.length>=r&&delete a[n.shift().toString()],n.push(t)),a[i]=e,e},move_key_to_end:function(t,e){this.attributes.key_ary.splice(e,1),this.attributes.key_ary.push(t)},clear:function(){this.attributes.obj_cache={},this.attributes.key_ary=[]},size:function(){return this.attributes.key_ary.length},most_recently_added:function(){return 0===this.size()?null:this.attributes.key_ary[this.attributes.key_ary.length-1]}}),b=y.extend({defaults:_.extend({},y.prototype.defaults,{dataset:null,genome:null,init_data:null,min_region_size:200,filters_manager:null,data_type:"data",data_mode_compatible:function(t,e){return!0},can_subset:function(t){return!1}}),initialize:function(t){y.prototype.initialize.call(this);var e=this.get("init_data");e&&this.add_data(e)},add_data:function(t){this.get("num_elements")<t.length&&this.set("num_elements",t.length);var e=this;_.each(t,function(t){e.set_data(t.region,t)})},data_is_ready:function(){var t=this.get("dataset"),e=$.Deferred(),a="raw_data"===this.get("data_type")?"state":"data"===this.get("data_type")?"converted_datasets_state":"error",n=new h.default.ServerStateDeferred({ajax_settings:{url:this.get("dataset").url(),data:{hda_ldda:t.get("hda_ldda"),data_type:a},dataType:"json"},interval:5e3,success_fn:function(t){return"pending"!==t}});return $.when(n.go()).then(function(t){e.resolve("ok"===t||"data"===t)}),e},search_features:function(t){var e=this.get("dataset"),a={query:t,hda_ldda:e.get("hda_ldda"),data_type:"features"};return $.getJSON(e.url(),a)},load_data:function(t,e,a,n){var i=this.get("dataset"),r={data_type:this.get("data_type"),chrom:t.get("chrom"),low:t.get("start"),high:t.get("end"),mode:e,resolution:a,hda_ldda:i.get("hda_ldda")};$.extend(r,n);var s=this.get("filters_manager");if(s){for(var o=[],l=s.filters,d=0;d<l.length;d++)o.push(l[d].name);r.filter_cols=JSON.stringify(o)}var u=this,_=$.getJSON(i.url(),r,function(e){e.region=t,u.set_data(t,e)});return this.set_data(t,_),_},get_data:function(t,e,a,n){var i=this.get_elt(t);if(i&&(h.default.is_deferred(i)||this.get("data_mode_compatible")(i,e)))return i;for(var r,s,o=this.get("key_ary"),l=this.get("obj_cache"),d=0;d<o.length;d++)if((r=o[d]).contains(t)&&(s=!0,i=l[r.toString()],h.default.is_deferred(i)||this.get("data_mode_compatible")(i,e)&&this.get("can_subset")(i))){if(this.move_key_to_end(r,d),!h.default.is_deferred(i)){var u=this.subset_entry(i,t);this.set_data(t,u),i=u}return i}if(!s&&t.length()<this.attributes.min_region_size){t=t.copy();var _=this.most_recently_added();!_||t.get("start")>_.get("start")?t.set("end",t.get("start")+this.attributes.min_region_size):t.set("start",t.get("end")-this.attributes.min_region_size),t.set("genome",this.attributes.genome),t.trim()}return this.load_data(t,e,a,n)},set_data:function(t,e){this.set_elt(t,e)},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(t,e,a,n,i){var r=this._mark_stale(t);{if(r&&this.get("data_mode_compatible")(r,e)){var s=t.get("start");i===this.DEEP_DATA_REQ?$.extend(n,{start_val:r.data.length+1}):i===this.BROAD_DATA_REQ&&(s=(r.max_high?r.max_high:r.data[r.data.length-1][2])+1);var o=t.copy().set("start",s),l=this,d=this.load_data(o,e,a,n),u=$.Deferred();return this.set_data(t,u),$.when(d).then(function(e){e.data&&(e.data=r.data.concat(e.data),e.max_low&&(e.max_low=r.max_low),e.message&&(e.message=e.message.replace(/[0-9]+/,e.data.length))),l.set_data(t,e),u.resolve(e)}),u}console.log("ERROR: problem with getting more data: current data is not compatible")}},can_get_more_detailed_data:function(t){var e=this.get_elt(t);return"bigwig"===e.dataset_type&&e.data.length<8e3},get_more_detailed_data:function(t,e,a,n,i){var r=this._mark_stale(t);{if(r)return i||(i={}),"bigwig"===r.dataset_type&&(i.num_samples=1e3*n),this.load_data(t,e,a,i);console.log("ERROR getting more detailed data: no current data")}},_mark_stale:function(t){var e=this.get_elt(t);return e||console.log("ERROR: no data to mark as stale: ",this.get("dataset"),t.toString()),e.stale=!0,e},get_genome_wide_data:function(t){var e=this,a=!0,n=_.map(t.get("chroms_info").chrom_info,function(t){var n=e.get_elt(new x({chrom:t.chrom,start:0,end:t.len}));return n||(a=!1),n});if(a)return n;var i=$.Deferred();return $.getJSON(this.get("dataset").url(),{data_type:"genome_data"},function(t){e.add_data(t.data),i.resolve(t.data)}),i},subset_entry:function(t,e){var a={bigwig:function(t,e){return _.filter(t,function(t){return t[0]>=e.get("start")&&t[0]<=e.get("end")})},refseq:function(e,a){var n=a.get("start")-t.region.get("start");return t.data.slice(n,n+a.length())}},n=t.data;return!t.region.same(e)&&t.dataset_type in a&&(n=a[t.dataset_type](t.data,e)),{region:e,data:n,dataset_type:t.dataset_type}}}),k=b.extend({initialize:function(t){var e=new Backbone.Model;e.urlRoot=t.data_url,this.set("dataset",e)},load_data:function(t,e,a,n){return t.length()<=1e5?b.prototype.load_data.call(this,t,e,a,n):{data:null,region:t}}}),w=Backbone.Model.extend({defaults:{name:null,key:null,chroms_info:null},initialize:function(t){this.id=t.dbkey},get_chroms_info:function(){return this.attributes.chroms_info.chrom_info},get_chrom_region:function(t){var e=_.find(this.get_chroms_info(),function(e){return e.chrom===t});return new x({chrom:e.chrom,end:e.len})},get_chrom_len:function(t){return _.find(this.get_chroms_info(),function(e){return e.chrom===t}).len}}),x=Backbone.Model.extend({defaults:{chrom:null,start:0,end:0,str_val:null,genome:null},same:function(t){return this.attributes.chrom===t.get("chrom")&&this.attributes.start===t.get("start")&&this.attributes.end===t.get("end")},initialize:function(t){if(t.from_str){var e=t.from_str.split(":"),a=e[0],n=e[1].split("-");this.set({chrom:a,start:parseInt(n[0],10),end:parseInt(n[1],10)})}this.attributes.str_val=this.get("chrom")+":"+this.get("start")+"-"+this.get("end"),this.on("change",function(){this.attributes.str_val=this.get("chrom")+":"+this.get("start")+"-"+this.get("end")},this)},copy:function(){return new x({chrom:this.get("chrom"),start:this.get("start"),end:this.get("end")})},length:function(){return this.get("end")-this.get("start")},toString:function(){return this.attributes.str_val},toJSON:function(){return{chrom:this.get("chrom"),start:this.get("start"),end:this.get("end")}},compute_overlap:function(t){var e=this.get("chrom"),a=t.get("chrom"),n=this.get("start"),i=t.get("start"),r=this.get("end"),s=t.get("end");return e&&a&&e!==a?x.overlap_results.DIF_CHROMS:n<i?r<i?x.overlap_results.BEFORE:r<s?x.overlap_results.OVERLAP_START:x.overlap_results.CONTAINS:n>i?n>s?x.overlap_results.AFTER:r<=s?x.overlap_results.CONTAINED_BY:x.overlap_results.OVERLAP_END:r>=s?x.overlap_results.CONTAINS:x.overlap_results.CONTAINED_BY},trim:function(t){if(this.attributes.start<0&&(this.attributes.start=0),this.attributes.genome){var e=this.attributes.genome.get_chrom_len(this.attributes.chrom);this.attributes.end>e&&(this.attributes.end=e-1)}return this},contains:function(t){return this.compute_overlap(t)===x.overlap_results.CONTAINS},overlaps:function(t){return 0===_.intersection([this.compute_overlap(t)],[x.overlap_results.DIF_CHROMS,x.overlap_results.BEFORE,x.overlap_results.AFTER]).length}},{overlap_results:{DIF_CHROMS:1e3,BEFORE:1001,CONTAINS:1002,OVERLAP_START:1003,OVERLAP_END:1004,CONTAINED_BY:1005,AFTER:1006}}),R=Backbone.Collection.extend({model:x}),O=Backbone.Model.extend({defaults:{region:null,note:""},initialize:function(t){this.set("region",new x(t.region))}}),z=Backbone.Collection.extend({model:O}),A=Backbone.Model.extend(v).extend({defaults:{mode:"Auto"},initialize:function(t){this.set("dataset",new c.default.Dataset(t.dataset));var e=[{key:"name",default_value:this.get("dataset").get("name")},{key:"color"},{key:"min_value",label:"Min Value",type:"float",default_value:0},{key:"max_value",label:"Max Value",type:"float",default_value:1}];this.set("config",g.default.ConfigSettingCollection.from_models_and_saved_values(e,t.prefs));var a=this.get("preloaded_data");a=a?a.data:[],this.set("data_manager",new b({dataset:this.get("dataset"),init_data:a}))}},{to_json_keys:["track_type","dataset","prefs","mode","filters","tool_state"],to_json_mappers:{prefs:function(t,e){return 0===_.size(t)&&(t={name:e.get("config").get("name").get("value"),color:e.get("config").get("color").get("value")}),t},dataset:function(t){return{id:t.id,hda_ldda:t.get("hda_ldda")}}}}),E=Backbone.Collection.extend({model:A}),S=Backbone.Model.extend({defaults:{title:"",type:""},urlRoot:Galaxy.root+"api/visualizations",save:function(){return $.ajax({url:this.url(),type:"POST",dataType:"json",data:{vis_json:JSON.stringify(this)}})}}),B=S.extend(v).extend({defaults:_.extend({},S.prototype.defaults,{dbkey:"",drawables:null,bookmarks:null,viewport:null}),initialize:function(t){this.set("drawables",new E(t.tracks));var e=[];this.set("config",g.default.ConfigSettingCollection.from_models_and_saved_values(e,t.prefs)),this.unset("tracks"),this.get("drawables").each(function(t){t.unset("preloaded_data")})},add_tracks:function(t){this.get("drawables").add(t)}},{to_json_keys:["view","viewport","bookmarks"],to_json_mappers:{view:function(t,e){return{obj_type:"View",prefs:{name:e.get("title"),content_visible:!0},drawables:e.get("drawables")}}}}),T=Backbone.Router.extend({initialize:function(t){this.view=t.view,this.route(/([\w]+)$/,"change_location"),this.route(/([\w\+]+\:[\d,]+-[\d,]+)$/,"change_location");var e=this;e.view.on("navigate",function(t){e.navigate(t)})},change_location:function(t){this.view.go_to(t)}});t.default={BackboneTrack:A,BrowserBookmark:O,BrowserBookmarkCollection:z,Cache:y,CanvasManager:p,Genome:w,GenomeDataManager:b,GenomeRegion:x,GenomeRegionCollection:R,GenomeVisualization:B,GenomeReferenceDataManager:k,TrackBrowserRouter:T,Visualization:S,select_datasets:function(t,e){var a=new f.default({url_base:Galaxy.root+"visualization/list_history_datasets",filters:t,embedded:!0}),n=new f.default({url_base:Galaxy.root+"visualization/list_library_datasets",embedded:!0}),i=new m.default.View;i.add({id:"histories",title:(0,u.default)("Histories"),$el:$("<div/>").append(a.$el)}),i.add({id:"libraries",title:(0,u.default)("Libraries"),$el:$("<div/>").append(n.$el)}),Galaxy.modal.show({title:(0,u.default)("Select datasets for new tracks"),body:i.$el,closing_events:!0,buttons:{Cancel:function(){Galaxy.modal.hide()},Add:function(){var t=[];i.$("input.grid-row-select-checkbox[name=id]:checked").each(function(){window.console.log($(this).val()),t[t.length]=$.ajax({url:Galaxy.root+"api/datasets/"+$(this).val(),dataType:"json",data:{data_type:"track_config",hda_ldda:"histories"==i.current()?"hda":"ldda"}})}),$.when.apply($,t).then(function(){var t=arguments[0]instanceof Array?$.map(arguments,function(t){return t[0]}):[arguments[0]];e(t)}),Galaxy.modal.hide()}}})}}}); |