galaxy-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 15302 discussions

29 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/62d51750d7df/
changeset: 62d51750d7df
user: natefoo
date: 2011-08-29 15:32:26
summary: It turns out that our old version of SQLAlchemy already has the Postgres/MySQL BIGINT types, it just needed the BigInteger SQLAlchemy type and SQLite BIGINT. And fix a bug found by Jack Zhu.
affected #: 1 file (946 bytes)
--- a/lib/galaxy/model/custom_types.py Sun Aug 28 14:07:33 2011 -0400
+++ b/lib/galaxy/model/custom_types.py Mon Aug 29 09:32:26 2011 -0400
@@ -105,40 +105,12 @@
class BIGINT( BigInteger ):
"""The SQL BIGINT type."""
-class DBBigInteger( BigInteger ):
+class SLBigInteger( BigInteger ):
def get_col_spec( self ):
return "BIGINT"
-sqlalchemy.databases.postgres.PGBigInteger = DBBigInteger
-sqlalchemy.databases.postgres.colspecs[BigInteger] = DBBigInteger
-sqlalchemy.databases.sqlite.SLBigInteger = DBBigInteger
-sqlalchemy.databases.sqlite.colspecs[BigInteger] = DBBigInteger
-
-class MSBigInteger( BigInteger, sqlalchemy.databases.mysql.MSInteger ):
- """MySQL BIGINTEGER type."""
-
- def __init__(self, display_width=None, **kw):
- """Construct a BIGINTEGER.
-
- :param display_width: Optional, maximum display width for this number.
-
- :param unsigned: a boolean, optional.
-
- :param zerofill: Optional. If true, values will be stored as strings
- left-padded with zeros. Note that this does not effect the values
- returned by the underlying database API, which continue to be
- numeric.
-
- """
- self.display_width = display_width
- sqlalchemy.databases.mysql._NumericType.__init__(self, kw)
- BigInteger.__init__(self, **kw)
-
- def get_col_spec(self):
- if self.display_width is not None:
- return self._extend("BIGINT(%(display_width)s)" % {'display_width': self.display_width})
- else:
- return self._extend("BIGINT")
-
-sqlalchemy.databases.mysql.MSBigInteger = MSBigInteger
-sqlalchemy.databases.mysql.colspecs[BigInteger] = MSBigInteger
+sqlalchemy.databases.sqlite.SLBigInteger = SLBigInteger
+sqlalchemy.databases.sqlite.colspecs[BigInteger] = SLBigInteger
+sqlalchemy.databases.sqlite.ischema_names['BIGINT'] = SLBigInteger
+sqlalchemy.databases.postgres.colspecs[BigInteger] = sqlalchemy.databases.postgres.PGBigInteger
+sqlalchemy.databases.mysql.colspecs[BigInteger] = sqlalchemy.databases.mysql.MSBigInteger
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: add left_offset attribute to LineTrack so that line tracks can be set in overview.
by Bitbucket 28 Aug '11
by Bitbucket 28 Aug '11
28 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/434f99cdfd96/
changeset: 434f99cdfd96
user: jgoecks
date: 2011-08-28 20:07:33
summary: Trackster: add left_offset attribute to LineTrack so that line tracks can be set in overview.
affected #: 1 file (26 bytes)
--- a/static/scripts/trackster.js Fri Aug 26 17:45:50 2011 -0400
+++ b/static/scripts/trackster.js Sun Aug 28 14:07:33 2011 -0400
@@ -2598,6 +2598,7 @@
this.original_dataset_id = dataset_id;
this.data_manager = new DataManager(CACHED_DATA, this);
this.tile_cache = new Cache(CACHED_TILES_LINE);
+ this.left_offset = 0;
// Define track configuration
this.track_config = new TrackConfig( {
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

26 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/732ad7ebde0c/
changeset: 732ad7ebde0c
user: jgoecks
date: 2011-08-26 23:45:50
summary: Trackster: introduce collections of tracks. Track 'groups' can be created and tracks can be added or removed from groups. Currently groups do not have a dropdown menu and cannot be saved.
affected #: 6 files (5.2 KB)
--- a/static/june_2007_style/blue/trackster.css Fri Aug 26 16:04:53 2011 -0400
+++ b/static/june_2007_style/blue/trackster.css Fri Aug 26 17:45:50 2011 -0400
@@ -19,6 +19,8 @@
.viewport-canvas{width:100%;height:100px;}
.yaxislabel{color:#777;z-index:100;}
.line-track .track-content{border-top:1px solid #eee;border-bottom:1px solid #eee;}
+.group-handle{cursor:move;float:left;background:#eee url('/static/images/tracks/block.png');width:12px;height:12px;}
+.group{min-height:20px;border-top:2px solid #888;border-bottom:2px solid #888;}
.track{background:white;}
.track-header{text-align:left;padding:4px 0px;color:#666;}
.track-header .menubutton{margin-left:0px;}
--- a/static/june_2007_style/trackster.css.tmpl Fri Aug 26 16:04:53 2011 -0400
+++ b/static/june_2007_style/trackster.css.tmpl Fri Aug 26 17:45:50 2011 -0400
@@ -126,7 +126,19 @@
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
}
-
+
+.group-handle {
+ cursor: move;
+ float: left;
+ background: #eee url('/static/images/tracks/block.png');
+ width: 12px;
+ height: 12px;
+}
+.group {
+ min-height: 20px;
+ border-top: 2px solid #888;
+ border-bottom: 2px solid #888;
+}
.track {
/* border-top: solid #DDDDDD 1px; */
/* border-bottom: solid #DDDDDD 1px; */
--- a/static/scripts/packed/trackster.js Fri Aug 26 16:04:53 2011 -0400
+++ b/static/scripts/packed/trackster.js Fri Aug 26 17:45:50 2011 -0400
@@ -1,1 +1,1 @@
-var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var requestAnimationFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){window.setTimeout(b,1000/60)}})();var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,U){var n=f("class").extend,p=f("slotting"),I=f("painters");var ab=function(ac,ad){this.document=ac;this.default_font=ad!==undefined?ad:"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")};n(ab.prototype,{load_pattern:function(ac,ag){var ad=this.patterns,ae=this.dummy_context,af=new Image();af.src=image_path+ag;af.onload=function(){ad[ac]=ae.createPattern(af,"repeat")}},get_pattern:function(ac){return this.patterns[ac]},new_canvas:function(){var ac=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(ac)}ac.manager=this;return ac}});var C=function(ac,ad){ac.bind("drag",{handle:ad,relative:true},function(ah,ai){var ag=$(this).parent();var af=ag.children();var ae;for(ae=0;ae<af.length;ae++){if(ai.offsetY<$(af.get(ae)).position().top){break}}if(ae===af.length){if(this!==af.get(ae-1)){ag.append(this)}}else{if(this!==af.get(ae)){$(this).insertBefore(af.get(ae))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};U.sortable=C;var aa=16,D=9,A=20,P=D+2,w=100,F=12000,N=200,z=5,s=10,H=5000,t=100,m="There was an error in indexing this dataset. ",G="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",B="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",V="Ready for display",d=10,r=5,y=5;function u(ac){return Math.round(ac*1000)/1000}var c=function(ac){this.num_elements=ac;this.clear()};n(c.prototype,{get:function(ad){var ac=this.key_ary.indexOf(ad);if(ac!==-1){if(this.obj_cache[ad].stale){this.key_ary.splice(ac,1);delete this.obj_cache[ad]}else{this.move_key_to_end(ad,ac)}}return this.obj_cache[ad]},set:function(ad,ae){if(!this.obj_cache[ad]){if(this.key_ary.length>=this.num_elements){var ac=this.key_ary.shift();delete this.obj_cache[ac]}this.key_ary.push(ad)}this.obj_cache[ad]=ae;return ae},move_key_to_end:function(ad,ac){this.key_ary.splice(ac,1);this.key_ary.push(ad)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var O=function(ad,ac,ae){c.call(this,ad);this.track=ac;this.subset=(ae!==undefined?ae:true)};n(O.prototype,c.prototype,{load_data:function(al,ag,aj,ad,ai){var ak=this.track.view.chrom,af={chrom:ak,low:al,high:ag,mode:aj,resolution:ad,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(af,ai);if(this.track.filters_manager){var am=[];var ac=this.track.filters_manager.filters;for(var ah=0;ah<ac.length;ah++){am[am.length]=ac[ah].name}af.filter_cols=JSON.stringify(am)}var ae=this;return $.getJSON(this.track.data_url,af,function(an){ae.set_data(al,ag,aj,an)})},get_data:function(ac,ag,ah,ad,af){var ae=this.get_data_from_cache(ac,ag,ah);if(ae){return ae}ae=this.load_data(ac,ag,ah,ad,af);this.set_data(ac,ag,ah,ae);return ae},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(ak,af,aj,ae,ai,ag){var al=this.get_data_from_cache(ak,af,aj);if(!al){console.log("ERROR: no current data for: ",this.track,ak,af,aj,ae,ai);return}al.stale=true;var ad=ak;if(ag===this.DEEP_DATA_REQ){$.extend(ai,{start_val:al.data.length+1})}else{if(ag===this.BROAD_DATA_REQ){ad=al.data[al.data.length-1][2]+1}}var ac=this,ah=this.load_data(ad,af,aj,ae,ai);new_data_available=$.Deferred();this.set_data(ak,af,aj,new_data_available);$.when(ah).then(function(am){if(am.data){am.data=al.data.concat(am.data);if(am.message){am.message=am.message.replace(/[0-9]+/,am.data.length)}}ac.set_data(ak,af,aj,am);new_data_available.resolve(am)});return new_data_available},get_data_from_cache:function(ac,ad,ae){return this.get(this.gen_key(ac,ad,ae))},set_data:function(ad,ae,af,ac){return this.set(this.gen_key(ad,ae,af),ac)},gen_key:function(ac,ae,af){var ad=ac+"_"+ae+"_"+af;return ad},split_key:function(ac){return ac.split("_")}});var E=function(ad,ac,ae){O.call(this,ad,ac,ae)};n(E.prototype,O.prototype,c.prototype,{load_data:function(ae,ac,ag,ah,ad,af){if(ad>1){return}return O.prototype.load_data.call(this,ae,ac,ag,ah,ad,af)}});var Z=function(ac,af,ae,ad,ag){this.container=ac;this.chrom=null;this.vis_id=ae;this.dbkey=ad;this.title=af;this.tracks=[];this.label_tracks=[];this.tracks_to_be_redrawn=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ag);this.canvas_manager=new ab(ac.get(0).ownerDocument);this.reset()};n(Z.prototype,{init:function(ag){var ae=this.container,ac=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ae);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ae);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ae);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").appendTo(this.viewport_container).hide();var af=$("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function(){add_tracks()});this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var ad=function(ah){if(ah.type==="focusout"||(ah.keyCode||ah.which)===13||(ah.keyCode||ah.which)===27){if((ah.keyCode||ah.which)!==27){ac.go_to($(this).val())}$(this).hide();$(this).val("");ac.location_span.show();ac.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",ad).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.click(function(){ac.location_span.hide();ac.chrom_select.hide();ac.nav_input.val(ac.chrom+":"+ac.low+"-"+ac.high);ac.nav_input.css("display","inline-block");ac.nav_input.select();ac.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){ac.zoom_out();ac.request_redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){ac.zoom_in();ac.request_redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ag);this.chrom_select.bind("change",function(){ac.change_chrom(ac.chrom_select.val())});this.content_div.click(function(ah){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ah){ac.zoom_in(ah.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ah,ai){this.current_x=ai.offsetX}).bind("drag",function(ah,aj){var ak=aj.offsetX-this.current_x;this.current_x=aj.offsetX;var ai=Math.round(ak/ac.viewport_container.width()*(ac.max_high-ac.max_low));ac.move_delta(-ai)});this.overview_close.click(function(){ac.reset_overview()});this.viewport_container.bind("draginit",function(ah,ai){if(ah.clientX>ac.viewport_container.width()-16){return false}}).bind("dragstart",function(ah,ai){ai.original_low=ac.low;ai.current_height=ah.clientY;ai.current_x=ai.offsetX}).bind("drag",function(aj,al){var ah=$(this);var am=al.offsetX-al.current_x;var ai=ah.scrollTop()-(aj.clientY-al.current_height);ah.scrollTop(ai);al.current_height=aj.clientY;al.current_x=al.offsetX;var ak=Math.round(am/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}).bind("mousewheel",function(aj,al,ai,ah){if(ai){var ak=Math.round(-ai/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}});this.top_labeltrack.bind("dragstart",function(ah,ai){return $("<div />").css({height:ac.content_div.height()+ac.top_labeltrack.height()+ac.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(al,am){$(am.proxy).css({left:Math.min(al.pageX,am.startX),width:Math.abs(al.pageX-am.startX)});var ai=Math.min(al.pageX,am.startX)-ac.container.offset().left,ah=Math.max(al.pageX,am.startX)-ac.container.offset().left,ak=(ac.high-ac.low),aj=ac.viewport_container.width();ac.update_location(Math.round(ai/aj*ak)+ac.low,Math.round(ah/aj*ak)+ac.low)}).bind("dragend",function(am,an){var ai=Math.min(am.pageX,an.startX),ah=Math.max(am.pageX,an.startX),ak=(ac.high-ac.low),aj=ac.viewport_container.width(),al=ac.low;ac.low=Math.round(ai/aj*ak)+al;ac.high=Math.round(ah/aj*ak)+al;$(an.proxy).remove();ac.request_redraw()});this.add_label_track(new Y(this,this.top_labeltrack));this.add_label_track(new Y(this,this.nav_labeltrack));$(window).bind("resize",function(){ac.resize_window()});$(document).bind("redraw",function(){ac.redraw()});this.reset();$(window).trigger("resize");this.update_intro_div()},update_intro_div:function(){if(this.num_tracks===0){this.intro_div.show()}else{this.intro_div.hide()}},update_location:function(ac,ad){this.location_span.text(commatize(ac)+" - "+commatize(ad));this.nav_input.val(this.chrom+":"+commatize(ac)+"-"+commatize(ad))},load_chroms:function(ad,ae){ad.num=t;$.extend(ad,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var ac=this;$.ajax({url:chrom_url,data:ad,dataType:"json",success:function(ag){if(ag.chrom_info.length===0){alert("Invalid chromosome: "+ad.chrom);return}if(ag.reference){ac.add_label_track(new x(ac))}ac.chrom_data=ag.chrom_info;var aj='<option value="">Select Chrom/Contig</option>';for(var ai=0,af=ac.chrom_data.length;ai<af;ai++){var ah=ac.chrom_data[ai].chrom;aj+='<option value="'+ah+'">'+ah+"</option>"}if(ag.prev_chroms){aj+='<option value="previous">Previous '+t+"</option>"}if(ag.next_chroms){aj+='<option value="next">Next '+t+"</option>"}ac.chrom_select.html(aj);if(ae){ae()}ac.chrom_start_index=ag.start_index},error:function(){alert("Could not load chroms for this dbkey:",ac.dbkey)}})},change_chrom:function(ag,ad,ai){if(!ag||ag==="None"){return}var af=this;if(ag==="previous"){af.load_chroms({low:this.chrom_start_index-t});return}if(ag==="next"){af.load_chroms({low:this.chrom_start_index+t});return}var ah=$.grep(af.chrom_data,function(ak,al){return ak.chrom===ag})[0];if(ah===undefined){af.load_chroms({chrom:ag},function(){af.change_chrom(ag,ad,ai)});return}else{if(ag!==af.chrom){af.chrom=ag;af.chrom_select.val(af.chrom);af.max_high=ah.len-1;af.reset();af.request_redraw(true);for(var aj=0,ac=af.tracks.length;aj<ac;aj++){var ae=af.tracks[aj];if(ae.init){ae.init()}}}if(ad!==undefined&&ai!==undefined){af.low=Math.max(ad,0);af.high=Math.min(ai,af.max_high)}af.reset_overview();af.request_redraw()}},go_to:function(ag){var ak=this,ac,af,ad=ag.split(":"),ai=ad[0],aj=ad[1];if(aj!==undefined){try{var ah=aj.split("-");ac=parseInt(ah[0].replace(/,/g,""),10);af=parseInt(ah[1].replace(/,/g,""),10)}catch(ae){return false}}ak.change_chrom(ai,ac,af)},move_fraction:function(ae){var ac=this;var ad=ac.high-ac.low;this.move_delta(ae*ad)},move_delta:function(ae){var ac=this;var ad=ac.high-ac.low;if(ac.low-ae<ac.max_low){ac.low=ac.max_low;ac.high=ac.max_low+ad}else{if(ac.high-ae>ac.max_high){ac.high=ac.max_high;ac.low=ac.max_high-ad}else{ac.high-=ae;ac.low-=ae}}ac.request_redraw()},add_track:function(ac){ac.view=this;ac.track_id=this.track_id_counter;this.tracks.push(ac);if(ac.init){ac.init()}ac.container_div.attr("id","track_"+ac.track_id);C(ac.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1;this.has_changes=true;this.update_intro_div()},add_label_track:function(ac){ac.view=this;this.label_tracks.push(ac)},remove_track:function(ad){this.has_changes=true;delete this.tracks[this.tracks.indexOf(ad)];this.num_tracks-=1;var ac=this;ad.container_div.fadeOut("slow",function(){$(this).remove();ac.update_intro_div()})},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},request_redraw:function(ak,ac,aj,ad){var ai=this,ag=(ad?[ad]:ai.tracks),ae;var ad;for(var ah=0;ah<ag.length;ah++){ad=ag[ah];ae=-1;for(var af=0;af<ai.tracks_to_be_redrawn.length;af++){if(ai.tracks_to_be_redrawn[af][0]===ad){ae=af;break}}if(ae<0){ai.tracks_to_be_redrawn.push([ad,ac,aj])}else{ai.tracks_to_be_redrawn[ah][1]=ac;ai.tracks_to_be_redrawn[ah][2]=aj}}requestAnimationFrame(function(){ai._redraw(ak)})},_redraw:function(am){var aj=this.low,af=this.high;if(aj<this.max_low){aj=this.max_low}if(af>this.max_high){af=this.max_high}var al=this.high-this.low;if(this.high!==0&&al<this.min_separation){af=aj+this.min_separation}this.low=Math.floor(aj);this.high=Math.ceil(af);this.resolution=Math.pow(z,Math.ceil(Math.log((this.high-this.low)/N)/Math.log(z)));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var ac=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ai=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var an=13;this.overview_box.css({left:ac,width:Math.max(an,ai)}).show();if(ai<an){this.overview_box.css("left",ac-(an-ai)/2)}if(this.overview_highlight){this.overview_highlight.css({left:ac,width:ai})}this.update_location(this.low,this.high);if(!am){var ae,ad,ak;for(var ag=0,ah=this.tracks_to_be_redrawn.length;ag<ah;ag++){ae=this.tracks_to_be_redrawn[ag][0];ad=this.tracks_to_be_redrawn[ag][1];ak=this.tracks_to_be_redrawn[ag][2];if(ae&&ae.enabled){ae._draw(ad,ak)}}this.tracks_to_be_redrawn=[];for(ag=0,ah=this.label_tracks.length;ag<ah;ag++){this.label_tracks[ag]._draw()}}},zoom_in:function(ad,ae){if(this.max_high===0||this.high-this.low<this.min_separation){return}var af=this.high-this.low,ag=af/2+this.low,ac=(af/this.zoom_factor)/2;if(ad){ag=ad/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ag-ac);this.high=Math.round(ag+ac);this.request_redraw()},zoom_out:function(){if(this.max_high===0){return}var ad=this.high-this.low,ae=ad/2+this.low,ac=(ad*this.zoom_factor)/2;this.low=Math.round(ae-ac);this.high=Math.round(ae+ac);this.request_redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.request_redraw()},set_overview:function(ac){$.when(ac.get_overview_tile()).then(function(ad){view.overview_viewport.find(".track-tile").remove();view.overview_close.show();view.overview_viewport.append(ad.canvas);view.overview_highlight.show().height(ad.canvas.height());view.overview_viewport.height(ad.canvas.height()+view.overview_box.outerHeight());view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=ac;ac.set_is_overview(true)});view.has_changes=true},reset_overview:function(){this.overview_viewport.find(".track-tile").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide();view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=null}});var o=function(ae,ai){this.track=ae;this.name=ai.name;this.params=[];var ap=ai.params;for(var af=0;af<ap.length;af++){var ak=ap[af],ad=ak.name,ao=ak.label,ag=unescape(ak.html),aq=ak.value,am=ak.type;if(am==="number"){this.params[this.params.length]=new g(ad,ao,ag,aq,ak.min,ak.max)}else{if(am=="select"){this.params[this.params.length]=new K(ad,ao,ag,aq)}else{console.log("WARNING: unrecognized tool parameter type:",ad,am)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(at){at.stopPropagation()}).click(function(at){at.stopPropagation()}).bind("dblclick",function(at){at.stopPropagation()});var an=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var al=this.params;var aj=this;$.each(this.params,function(au,ax){var aw=$("<div>").addClass("param-row").appendTo(aj.parent_div);var at=$("<div>").addClass("param-label").text(ax.label).appendTo(aw);var av=$("<div/>").addClass("slider").html(ax.html).appendTo(aw);av.find(":input").val(ax.value);$("<div style='clear: both;'/>").appendTo(aw)});this.parent_div.find("input").click(function(){$(this).select()});var ar=$("<div>").addClass("param-row").appendTo(this.parent_div);var ah=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ar);var ac=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ar);var aj=this;ac.click(function(){aj.run_on_region()});ah.click(function(){aj.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var ac={};this.parent_div.find(":input").each(function(){var ad=$(this).attr("name"),ae=$(this).val();ac[ad]=JSON.stringify(ae)});return ac},get_param_values:function(){var ad=[];var ac={};this.parent_div.find(":input").each(function(){var ae=$(this).attr("name"),af=$(this).val();if(ae){ad[ad.length]=af}});return ad},run_on_dataset:function(){var ac=this;ac.run({dataset_id:this.track.original_dataset_id,tool_id:ac.name},null,function(ad){show_modal(ac.name+" is Running",ac.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var ac={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ae=this.track,ad=ac.tool_id+ae.tool_region_and_parameters_str(ac.chrom,ac.low,ac.high),af;if(ae instanceof e){af=new R(ad,view,ae.hda_ldda,undefined,{},{},ae);af.change_mode(ae.mode)}this.track.add_track(af);af.content_div.text("Starting job.");this.run(ac,af,function(ag){af.dataset_id=ag.dataset_id;af.content_div.text("Running job.");af.init()})},run:function(ad,ae,af){$.extend(ad,this.get_param_values_dict());var ac=function(){$.getJSON(rerun_tool_url,ad,function(ag){if(ag==="no converter"){ae.container_div.addClass("error");ae.content_div.text(G)}else{if(ag.error){ae.container_div.addClass("error");ae.content_div.text(v+ag.message)}else{if(ag==="pending"){ae.container_div.addClass("pending");ae.content_div.text("Converting input data so that it can be used quickly with tool.");setTimeout(ac,2000)}else{af(ag)}}}})};ac()}});var K=function(ad,ac,ae,af){this.name=ad;this.label=ac;this.html=ae;this.value=af};var g=function(ae,ad,ag,ah,af,ac){K.call(this,ae,ad,ag,ah);this.min=af;this.max=ac};var h=function(ad,ac,ae,af){this.name=ad;this.index=ac;this.tool_id=ae;this.tool_exp_name=af};var S=function(ad,ac,ae,af){h.call(this,ad,ac,ae,af);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.container=null;this.slider=null;this.slider_label=null};n(S.prototype,{applies_to:function(ac){if(ac.length>this.index){return true}return false},keep:function(ac){if(!this.applies_to(ac)){return true}var ad=parseFloat(ac[this.index]);return(isNaN(ad)||(ad>=this.low&&ad<=this.high))},update_attrs:function(ad){var ac=false;if(!this.applies_to(ad)){return ac}if(ad[this.index]<this.min){this.min=Math.floor(ad[this.index]);ac=true}if(ad[this.index]>this.max){this.max=Math.ceil(ad[this.index]);ac=true}return ac},update_ui_elt:function(){if(this.min!=this.max){this.container.show()}else{this.container.hide()}var ae=function(ah,af){var ag=af-ah;return(ag<=2?0.01:1)};var ad=this.slider.slider("option","min"),ac=this.slider.slider("option","max");if(this.min<ad||this.max>ac){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ae(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var X=function(am,at){this.track=am;this.filters=[];for(var an=0;an<at.length;an++){var ao=at[an],au=ao.name,ac=ao.type,af=ao.index,ar=ao.tool_id,aq=ao.tool_exp_name;if(ac==="int"||ac==="float"){this.filters[an]=new S(au,af,ar,aq)}else{console.log("ERROR: unsupported filter: ",au,ac)}}var ag=function(av,aw,ax){av.click(function(){var ay=aw.text();max=parseFloat(ax.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ax.slider("option","values")){input_size=2*input_size+1;multi_value=true}aw.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",ay).appendTo(aw).focus().select().click(function(az){az.stopPropagation()}).blur(function(){$(this).remove();aw.text(ay)}).keyup(function(aD){if(aD.keyCode===27){$(this).trigger("blur")}else{if(aD.keyCode===13){var aB=ax.slider("option","min"),az=ax.slider("option","max"),aC=function(aE){return(isNaN(aE)||aE>az||aE<aB)},aA=$(this).val();if(!multi_value){aA=parseFloat(aA);if(aC(aA)){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}else{aA=aA.split("-");aA=[parseFloat(aA[0]),parseFloat(aA[1])];if(aC(aA[0])||aC(aA[1])){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}ax.slider((multi_value?"values":"value"),aA)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(av){av.stopPropagation()}).click(function(av){av.stopPropagation()}).bind("dblclick",function(av){av.stopPropagation()}).bind("keydown",function(av){av.stopPropagation()});var ap=$("<div/>").addClass("sliders").appendTo(this.parent_div);var ak=this;$.each(this.filters,function(ay,aA){aA.container=$("<div/>").addClass("slider-row").appendTo(ap);var az=$("<div/>").addClass("elt-label").appendTo(aA.container);var ax=$("<span/>").addClass("slider-name").text(aA.name+" ").appendTo(az);var aw=$("<span/>");var aC=$("<span/>").addClass("slider-value").appendTo(az).append("[").append(aw).append("]");var av=$("<div/>").addClass("slider").appendTo(aA.container);aA.control_element=$("<div/>").attr("id",aA.name+"-filter-control").appendTo(av);var aB=[0,0];aA.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(aE,aF){var aD=aF.values;aw.text(aD[0]+"-"+aD[1]);aA.low=aD[0];aA.high=aD[1];ak.track.request_draw(true,true)},change:function(aD,aE){aA.control_element.slider("option","slide").call(aA.control_element,aD,aE)}});aA.slider=aA.control_element;aA.slider_label=aw;ag(aC,aw,aA.control_element);$("<div style='clear: both;'/>").appendTo(aA.container)});if(this.filters.length!==0){var ah=$("<div/>").addClass("param-row").appendTo(ap);var aj=$("<input type='submit'/>").attr("value","Run on complete dataset").appendTo(ah);var ae=this;aj.click(function(){ae.run_on_dataset()})}var al=$("<div/>").addClass("display-controls").appendTo(this.parent_div),ai=$("<span/>").addClass("elt-label").text("Transparency:").appendTo(al),ad=$("<select/>").attr("name","alpha_dropdown").appendTo(al);this.alpha_filter=null;$("<option/>").attr("value",-1).text("== None ==").appendTo(ad);for(var an=0;an<this.filters.length;an++){$("<option/>").attr("value",an).text(this.filters[an].name).appendTo(ad)}ad.change(function(){$(this).children("option:selected").each(function(){var av=parseInt($(this).val());ak.alpha_filter=(av>=0?ak.filters[av]:null);ak.track.request_draw(true,true)})});$("<div style='clear: both;'/>").appendTo(this.parent_div)};n(X.prototype,{reset_filters:function(){for(var ac=0;ac<this.filters.length;ac++){filter=this.filters[ac];filter.slider.slider("option","values",[filter.min,filter.max])}this.alpha_filter=null},run_on_dataset:function(){var ak=function(ao,am,an){if(!(am in ao)){ao[am]=an}return ao[am]};var ae={},ac,ad,af;for(var ag=0;ag<this.filters.length;ag++){ac=this.filters[ag];if(ac.tool_id){if(ac.min!=ac.low){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" >= "+ac.low}if(ac.max!=ac.high){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" <= "+ac.high}}}var ai=[];for(var al in ae){ai[ai.length]=[al,ae[al]]}var aj=ai.length;(function ah(at,ap){var an=ap[0],ao=an[0],ar=an[1],aq="("+ar.join(") and (")+")",am={cond:aq,input:at,target_dataset_id:at,tool_id:ao},ap=ap.slice(1);$.getJSON(run_tool_url,am,function(au){if(au.error){show_modal("Filter Dataset","Error running tool "+ao,{Close:hide_modal})}else{if(ap.length===0){show_modal("Filtering Dataset","Filter(s) are running on the complete dataset. Outputs are in dataset's history.",{Close:hide_modal})}else{ah(au.dataset_id,ap)}}})})(this.track.dataset_id,ai)}});var L=function(ad,ac){I.AlphaGenerator.call(this,ac);this.filter=ad};L.prototype.gen_alpha=function(ac){if(this.filter.high===Number.MAX_VALUE||this.filter.low===-Number.MAX_VALUE||this.filter.low===this.filter.high){return this.default_alpha}return((parseFloat(ac[this.filter.index])-this.filter.low)/(this.filter.high-this.filter.low))};var W=function(ac){this.track=ac.track;this.params=ac.params;this.values={};if(ac.saved_values){this.restore_values(ac.saved_values)}this.onchange=ac.onchange};n(W.prototype,{restore_values:function(ac){var ad=this;$.each(this.params,function(ae,af){if(ac[af.key]!==undefined){ad.values[af.key]=ac[af.key]}else{ad.values[af.key]=af.default_value}})},build_form:function(){var ad=this;var ac=$("<div />");$.each(this.params,function(ah,af){if(!af.hidden){var ae="param_"+ah;var am=$("<div class='form-row' />").appendTo(ac);am.append($("<label />").attr("for",ae).text(af.label+":"));if(af.type==="bool"){am.append($('<input type="checkbox" />').attr("id",ae).attr("name",ae).attr("checked",ad.values[af.key]))}else{if(af.type==="color"){var aj=ad.values[af.key];var ai=$("<input />").attr("id",ae).attr("name",ae).val(aj);var ak=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ag=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ak);var al=$("<div/>").appendTo(ag).farbtastic({width:100,height:100,callback:ai,color:aj});$("<div />").append(ai).append(ak).appendTo(am).bind("click",function(an){ak.css({left:$(this).position().left+($(ai).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ak.hide();$(document).unbind("click.color-picker")});an.stopPropagation()})}else{am.append($("<input />").attr("id",ae).attr("name",ae).val(ad.values[af.key]))}}}});return ac},update_from_form:function(ac){var ae=this;var ad=false;$.each(this.params,function(af,ah){if(!ah.hidden){var ai="param_"+af;var ag=ac.find("#"+ai).val();if(ah.type==="float"){ag=parseFloat(ag)}else{if(ah.type==="int"){ag=parseInt(ag)}else{if(ah.type==="bool"){ag=ac.find("#"+ai).is(":checked")}}}if(ag!==ae.values[ah.key]){ae.values[ah.key]=ag;ad=true}}});if(ad){this.onchange()}}});var b=function(ae,ad,ac,af){this.index=ae;this.low=ae*N*ad;this.high=(ae+1)*N*ad;this.resolution=ad;this.canvas=$("<div class='track-tile'/>").append(ac);this.data=af;this.stale=false};var l=function(ae,ad,ac,af,ag){b.call(this,ae,ad,ac,af);this.max_val=ag};var M=function(ae,ad,ac,ag,af){b.call(this,ae,ad,ac,ag);this.message=af};var j=function(ad,ac,ag,ae,af){this.name=ad;this.view=ac;this.parent_element=ag;this.data_url=(ae?ae:default_data_url);this.data_url_extra_params={};this.data_query_wait=(af?af:H);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{get_type:function(){if(this instanceof Y){return"LabelTrack"}else{if(this instanceof x){return"ReferenceTrack"}else{if(this instanceof k){return"LineTrack"}else{if(this instanceof T){return"ReadTrack"}else{if(this instanceof R){return"ToolDataFeatureTrack"}else{if(this instanceof Q){return"VcfTrack"}else{if(this instanceof e){return"FeatureTrack"}}}}}}}return""},init:function(){var ac=this;ac.enabled=false;ac.tile_cache.clear();ac.data_manager.clear();ac.initial_canvas=undefined;ac.content_div.css("height","auto");ac.container_div.removeClass("nodata error pending");if(!ac.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id,chrom:ac.view.chrom},function(ad){if(!ad||ad==="error"||ad.kind==="error"){ac.container_div.addClass("error");ac.content_div.text(m);if(ad.message){var af=ac.view.tracks.indexOf(ac);var ae=$(" <a href='javascript:void(0);'></a>").text("View error").click(function(){show_modal("Trackster Error","<pre>"+ad.message+"</pre>",{Close:hide_modal})});ac.content_div.append(ae)}}else{if(ad==="no converter"){ac.container_div.addClass("error");ac.content_div.text(G)}else{if(ad==="no data"||(ad.data!==undefined&&(ad.data===null||ad.data.length===0))){ac.container_div.addClass("nodata");ac.content_div.text(B)}else{if(ad==="pending"){ac.container_div.addClass("pending");ac.content_div.text(q);setTimeout(function(){ac.init()},ac.data_query_wait)}else{if(ad.status==="data"){if(ad.valid_chroms){ac.valid_chroms=ad.valid_chroms;ac.make_name_popup_menu()}ac.content_div.text(V);if(ac.view.chrom){ac.content_div.text("");ac.content_div.css("height",ac.height_px+"px");ac.enabled=true;$.when(ac.predraw_init()).done(function(){ac.container_div.removeClass("nodata error pending");ac.request_draw()})}}}}}}})},predraw_init:function(){},update_name:function(ac){this.old_name=this.name;this.name=ac;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var J=function(aj,ah,ak){var ad=this,al=ad.view;this.filters_manager=(aj!==undefined?new X(this,aj):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(ah!==undefined&&obj_length(ah)>0?new o(this,ah):undefined);this.is_overview=false;this.parent_track=ak;this.child_tracks=[];if(ad.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}ad.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();ad.container_div.append(ad.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(ad.display_modes!==undefined){if(ad.mode_div===undefined){ad.mode_div=$("<div class='right-float menubutton popup' />").appendTo(ad.header_div);var ae=(ad.track_config&&ad.track_config.values.mode?ad.track_config.values.mode:ad.display_modes[0]);ad.mode=ae;ad.mode_div.text(ae);var ac={};for(var af=0,ai=ad.display_modes.length;af<ai;af++){var ag=ad.display_modes[af];ac[ag]=function(am){return function(){ad.change_mode(am)}}(ag)}make_popupmenu(ad.mode_div,ac)}else{ad.mode_div.hide()}}this.make_name_popup_menu()};n(J.prototype,j.prototype,{change_mode:function(ad){var ac=this;ac.mode_div.text(ad);ac.mode=ad;ac.track_config.values.mode=ad;ac.tile_cache.clear();ac.request_draw()},make_name_popup_menu:function(){var ad=this;var ac={};ac[(this.is_overview?"Hide overview":"Set as overview")]=function(){if(ad.is_overview){ad.view.reset_overview()}else{ad.view.set_overview(ad)}};ac["Edit configuration"]=function(){var aj=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ah=function(){ad.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ai=function(ak){if((ak.keyCode||ak.which)===27){aj()}else{if((ak.keyCode||ak.which)===13){ah()}}};$(window).bind("keypress.check_enter_esc",ai);show_modal("Configure Track",ad.track_config.build_form(),{Cancel:aj,OK:ah})};if(ad.filters_available>0){var ag=(ad.filters_div.is(":visible")?"Hide filters":"Show filters");ac[ag]=function(){ad.filters_visible=(ad.filters_div.is(":visible"));if(ad.filters_visible){ad.filters_manager.reset_filters()}ad.filters_div.toggle();ad.make_name_popup_menu()}}if(ad.tool){var ag=(ad.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");ac[ag]=function(){if(!ad.dynamic_tool_div.is(":visible")){ad.update_name(ad.name+ad.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";ad.revert_name()}ad.dynamic_tool_div.toggle();ad.make_name_popup_menu()}}if(ad.valid_chroms){ac["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+ad.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ae=view;var af=function(){$("#no-tracks").show()};if(this.parent_track){ae=this.parent_track;af=function(){}}ac.Remove=function(){ae.remove_track(ad);if(ae.num_tracks===0){af()}};make_popupmenu(ad.name_div,ac)},set_is_overview:function(ac){this.is_overview=ac;this.make_name_popup_menu()},get_overview_tile:function(){var ac=this;view=ac.view,resolution=Math.pow(z,Math.ceil(Math.log((view.max_high-view.max_low)/N)/Math.log(z))),view_width=view.container.width(),w_scale=view_width/(view.max_high-view.max_low),overview_tile=$.Deferred();$.when(ac.data_manager.get_data(view.max_low,view.max_high,"Auto",resolution,ac.data_url_extra_params)).then(function(ad){var af=ac._gen_tile_cache_key(view_width,w_scale,0),ah=ac.tile_cache.get(af);if(!ah){ah=ac.draw_tile(ad,resolution,0,w_scale);ac.tile_cache.set(af,ah)}var ak=$(ah.canvas.find("canvas")),ag=ak.clone(),aj=ak.get(0).getContext("2d"),ae=ag.get(0).getContext("2d"),ai=aj.getImageData(0,0,aj.canvas.width,aj.canvas.height);ae.putImageData(ai,-ac.left_offset,(ah.data.dataset_type==="summary_tree"?P:0));new_tile=new b(-1,resolution,ag);overview_tile.resolve(new_tile)});return overview_tile},_gen_tile_cache_key:function(ad,ae,ac){return ad+"_"+ae+"_"+ac},request_draw:function(ad,ac){this.view.request_redraw(false,ad,ac,this)},_draw:function(ae,an){if(!this.dataset_id){return}var am=this.view.low,ai=this.view.high,ak=ai-am,af=this.view.container.width(),aq=af/ak,ah=this.view.resolution,ap=$("<div style='position: relative;'></div>");if(!an){this.content_div.children().remove()}this.content_div.append(ap);this.max_height=0;var ad=Math.floor(am/ah/N);var al=true;var ao=[];var ac=0;while((ad*N*ah)<ai){tile=this.draw_helper(ae,af,ad,ah,ap,aq);if(tile){ao.push(tile)}else{al=false}ad+=1;ac++}var ag=this;if(al){ag.postdraw_actions(ao,af,aq,an)}for(var aj=0;aj<this.child_tracks.length;aj++){this.child_tracks[aj].request_draw(ae,an)}},postdraw_actions:function(ag,ah,ai,ac){var ae=this;var af=false;for(var ad=0;ad<ag.length;ad++){if(ag[ad].message){af=true;break}}if(af){for(var ad=0;ad<ag.length;ad++){tile=ag[ad];if(!tile.message){tile.canvas.css("padding-top",A)}}}},draw_helper:function(ad,ae,af,ai,ao,at,ap,aj){var ag=this,an=this._gen_tile_cache_key(ae,at,af),ak=af*N*ai,ar=ak+N*ai;var al=(ad?undefined:ag.tile_cache.get(an));if(al){ag.show_tile(al,ao,at);return al}var am=function(au){return("isResolved" in au)};var ah=true;var ac=ag.data_manager.get_data(ak,ar,ag.mode,ai,ag.data_url_extra_params);if(am(ac)){ah=false}var aq;if(view.reference_track&&at>view.canvas_manager.char_width_px){aq=view.reference_track.data_manager.get_data(ak,ar,ag.mode,ai,view.reference_track.data_url_extra_params);if(am(aq)){ah=false}}if(ah){n(ac,aj);var al=ag.draw_tile(ac,ai,af,at,aq);ag.tile_cache.set(an,al);if(al!==undefined){ag.show_tile(al,ao,at)}return al}$.when(ac,aq).then(function(){view.request_redraw()});return null},show_tile:function(aj,al,am){var ae=this,ad=aj.canvas,ai=ad;if(aj.message){var an=$("<div/>"),ak=$("<div/>").addClass("tile-message").text(aj.message).css({height:A-1,width:aj.canvas.width}).appendTo(an),ag=$("<a href='javascript:void(0);'/>").addClass("icon more-down").appendTo(ak),ac=$("<a href='javascript:void(0);'/>").addClass("icon more-across").appendTo(ak);an.append(ad);ai=an;ag.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.DEEP_DATA_REQ);ae.request_draw()}).dblclick(function(ao){ao.stopPropagation()});ac.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.BROAD_DATA_REQ);ae.request_draw()}).dblclick(function(ao){ao.stopPropagation()})}var ah=this.view.high-this.view.low,af=(aj.low-this.view.low)*am;if(this.left_offset){af-=this.left_offset}ai.css({position:"absolute",top:0,left:af,height:""});al.append(ai);ae.max_height=Math.max(ae.max_height,ai.height());ae.content_div.css("height",ae.max_height+"px");al.children().css("height",ae.max_height+"px")},tool_region_and_parameters_str:function(ae,ac,af){var ad=this,ag=(ae!==undefined&&ac!==undefined&&af!==undefined?ae+":"+ac+"-"+af:"all");return" - region=["+ag+"], parameters=["+ad.tool.get_param_values().join(", ")+"]"},add_track:function(ac){ac.track_id=this.track_id+"_"+this.child_tracks.length;ac.container_div.attr("id","track_"+ac.track_id);this.child_tracks_container.append(ac.container_div);C(ac.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(ac);this.view.has_changes=true},remove_track:function(ac){ac.container_div.fadeOut("slow",function(){$(this).remove()})}});var Y=function(ac,ad){this.hidden=true;j.call(this,null,ac,ad);this.container_div.addClass("label-track")};n(Y.prototype,j.prototype,{_draw:function(){var ae=this.view,af=ae.high-ae.low,ai=Math.floor(Math.pow(10,Math.floor(Math.log(af)/Math.log(10)))),ac=Math.floor(ae.low/ai)*ai,ag=this.view.container.width(),ad=$("<div style='position: relative; height: 1.3em;'></div>");while(ac<ae.high){var ah=(ac-ae.low)/af*ag;ad.append($("<div class='label'>"+commatize(ac)+"</div>").css({position:"absolute",left:ah-1}));ac+=ai}this.content_div.children(":first").remove();this.content_div.append(ad)}});var x=function(ac){this.hidden=true;j.call(this,null,ac,ac.top_labeltrack);J.call(this);ac.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:ac.dbkey};this.data_manager=new E(y,this,false);this.tile_cache=new c(r)};n(x.prototype,J.prototype,{draw_tile:function(ak,ah,ad,am){var ag=this,ae=N*ah;if(am>this.view.canvas_manager.char_width_px){if(ak===null){ag.content_div.css("height","0px");return}var af=this.view.canvas_manager.new_canvas();var al=af.getContext("2d");af.width=Math.ceil(ae*am+ag.left_offset);af.height=ag.height_px;al.font=al.canvas.manager.default_font;al.textAlign="center";for(var ai=0,aj=ak.length;ai<aj;ai++){var ac=Math.round(ai*am);al.fillText(ak[ai],ac+ag.left_offset,10)}return new b(ad,ah,af,ak)}this.content_div.css("height","0px")}});var k=function(ag,ae,ah,ac,af){var ad=this;this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ag,ae,ae.viewport_container);J.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ah;this.dataset_id=ac;this.original_dataset_id=ac;this.data_manager=new O(y,this);this.tile_cache=new c(r);this.track_config=new W({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:af,onchange:function(){ad.vertical_range=ad.prefs.max_value-ad.prefs.min_value;$("#linetrack_"+ad.track_id+"_minval").text(ad.prefs.min_value);$("#linetrack_"+ad.track_id+"_maxval").text(ad.prefs.max_value);ad.tile_cache.clear();ad.request_draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,J.prototype,{add_resize_handle:function(){var ac=this;var af=false;var ae=false;var ad=$("<div class='track-resize'>");$(ac.container_div).hover(function(){af=true;ad.show()},function(){af=false;if(!ae){ad.hide()}});ad.hide().bind("dragstart",function(ag,ah){ae=true;ah.original_height=$(ac.content_div).height()}).bind("drag",function(ah,ai){var ag=Math.min(Math.max(ai.original_height+ai.deltaY,ac.min_height_px),ac.max_height_px);$(ac.content_div).css("height",ag);ac.height_px=ag;ac.request_draw(true)}).bind("dragend",function(ag,ah){ac.tile_cache.clear();ae=false;if(!af){ad.hide()}ac.track_config.values.height=ac.height_px}).appendTo(ac.container_div)},predraw_init:function(){var ac=this,ad=ac.view.tracks.indexOf(ac);ac.vertical_range=undefined;return $.getJSON(ac.data_url,{stats:true,chrom:ac.view.chrom,low:null,high:null,hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id},function(ae){ac.container_div.addClass("line-track");var ag=ae.data;if(isNaN(parseFloat(ac.prefs.min_value))||isNaN(parseFloat(ac.prefs.max_value))){ac.prefs.min_value=ag.min;ac.prefs.max_value=ag.max;$("#track_"+ad+"_minval").val(ac.prefs.min_value);$("#track_"+ad+"_maxval").val(ac.prefs.max_value)}ac.vertical_range=ac.prefs.max_value-ac.prefs.min_value;ac.total_frequency=ag.total_frequency;ac.container_div.find(".yaxislabel").remove();var ah=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_minval").text(u(ac.prefs.min_value));var af=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_maxval").text(u(ac.prefs.max_value));af.css({position:"absolute",top:"24px",left:"10px"});af.prependTo(ac.container_div);ah.css({position:"absolute",bottom:"2px",left:"10px"});ah.prependTo(ac.container_div)})},draw_tile:function(am,ag,ad,al){if(this.vertical_range===undefined){return}var ah=ad*N*ag,af=N*ag,ac=Math.ceil(af*al),aj=this.height_px;var ae=this.view.canvas_manager.new_canvas();ae.width=ac,ae.height=aj;var ak=ae.getContext("2d");var ai=new I.LinePainter(am.data,ah,ah+af,this.prefs,this.mode);ai.draw(ak,ac,aj);return new b(ad,ag,ae,am.data)}});var e=function(ac,ah,ag,ak,aj,ae,af,ai){var ad=this;this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:aj,onchange:function(){ad.tile_cache.clear();ad.request_draw()}});this.prefs=this.track_config.values;j.call(this,ac,ah,ah.viewport_container);J.call(this,ae,af,ai);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ag;this.dataset_id=ak;this.original_dataset_id=ak;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_manager=new O(20,this);this.left_offset=200;this.painter=I.LinkedFeaturePainter};n(e.prototype,J.prototype,{postdraw_actions:function(ar,ac,at,aq){J.prototype.postdraw_actions.call(this,ar,aq);var af=this;if(aq){var ah=af.content_div.children();var ai=false;for(var ag=ah.length-1,am=0;ag>=am;ag--){var ae=$(ah[ag]);if(ai){ae.remove()}else{if(ae.children().length!==0){ai=true}}}}if(af.mode=="Histogram"){var al=-1;for(var ag=0;ag<ar.length;ag++){var ap=ar[ag].max_val;if(ap>al){al=ap}}for(var ag=0;ag<ar.length;ag++){var ao=ar[ag];if(ao.max_val!==al){ao.canvas.remove();af.draw_helper(true,ac,ao.index,ao.resolution,ao.canvas.parent(),at,[],{max:al})}}}if(af.filters_manager){var ad=af.filters_manager.filters;for(var ak=0;ak<ad.length;ak++){ad[ak].update_ui_elt()}var aj=false,an;for(var ag=0;ag<ar.length;ag++){if(ar[ag].data.length){an=ar[ag].data[0];for(var ak=0;ak<ad.length;ak++){if(ad[ak].applies_to(an)){aj=true;break}}}}if(af.filters_available!==aj){af.filters_available=aj;if(!af.filters_available){af.filters_div.hide()}af.make_name_popup_menu()}}},update_auto_mode:function(ac){if(this.mode=="Auto"){if(ac=="no_detail"){ac="feature spans"}else{if(ac=="summary_tree"){ac="coverage histogram"}}this.mode_div.text("Auto ("+ac+")")}},incremental_slots:function(ag,ad,af){var ae=this.view.canvas_manager.dummy_context,ac=this.inc_slots[ag];if(!ac||(ac.mode!==af)){ac=new (p.FeatureSlotter)(ag,af==="Pack",w,function(ah){return ae.measureText(ah)});ac.mode=af;this.inc_slots[ag]=ac}return ac.slot_features(ad)},get_summary_tree_data:function(ag,aj,ae,ar){if(ar>ae-aj){ar=ae-aj}var an=Math.floor((ae-aj)/ar),aq=[],af=0;var ah=0,ai=0,am,ap=0,ak=[],ao,al;var ad=function(av,au,aw,at){av[0]=au+aw*at;av[1]=au+(aw+1)*at};while(ap<ar&&ah!==ag.length){var ac=false;for(;ap<ar&&!ac;ap++){ad(ak,aj,ap,an);for(ai=ah;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ac=true;break}}if(ac){break}}data_start_index=ai;aq[aq.length]=ao=[ak[0],0];for(;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ao[1]++}else{break}}if(ao[1]>af){af=ao[1]}ap++}return{max:af,delta:an,data:aq}},draw_tile:function(ap,ay,aC,al,af){var av=this,aE=aC*N*ay,ad=(aC+1)*N*ay,ar=ad-aE,aw=Math.ceil(ar*al),at=this.mode,aI=25,ag=this.left_offset,aq,ah;if(at==="Auto"){if(ap.dataset_type==="summary_tree"){at=ap.dataset_type}else{if(ap.extra_info==="no_detail"){at="no_detail"}else{var aH=ap.data;if(this.view.high-this.view.low>F){at="Squish"}else{at="Pack"}}}this.update_auto_mode(at)}if(at==="summary_tree"||at==="Histogram"){ah=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var ac=$("<div />").addClass("yaxislabel");ac.text(ap.max);ac.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});ac.prependTo(this.container_div);var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah+P;if(ap.dataset_type!="summary_tree"){var am=this.get_summary_tree_data(ap.data,aE,ad,200);if(ap.max){am.max=ap.max}ap=am}var aF=new I.SummaryTreePainter(ap,aE,ad,this.prefs);var ax=ae.getContext("2d");ax.translate(ag,P);aF.draw(ax,aw,ah);return new l(aC,ay,ae,ap.data,ap.max)}var aq,aj=1;if(at==="no_detail"||at==="Squish"||at==="Pack"){aj=this.incremental_slots(al,ap.data,at);aq=this.inc_slots[al].slots}var ak=[];if(ap.data){var an=this.filters_manager.filters;for(var az=0,aB=ap.data.length;az<aB;az++){var ai=ap.data[az];var aA=false;var ao;for(var aD=0,aG=an.length;aD<aG;aD++){ao=an[aD];ao.update_attrs(ai);if(!ao.keep(ai)){aA=true;break}}if(!aA){ak.push(ai)}}}var au=(this.filters_manager.alpha_filter?new L(this.filters_manager.alpha_filter):null);var aF=new (this.painter)(ak,aE,ad,this.prefs,at,au,af);var ah=Math.max(aa,aF.get_required_height(aj));var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah;var ax=ae.getContext("2d");ax.fillStyle=this.prefs.block_color;ax.font=ax.canvas.manager.default_font;ax.textAlign="right";this.container_div.find(".yaxislabel").remove();if(ap.data){ax.translate(ag,0);aF.draw(ax,aw,ah,aq)}return new M(aC,ay,ae,ap.data,ap.message)}});var Q=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.painter=I.VariantPainter};n(Q.prototype,J.prototype,e.prototype);var T=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ae,onchange:function(){this.track.tile_cache.clear();this.track.request_draw()}});this.prefs=this.track_config.values;this.painter=I.ReadPainter;this.make_name_popup_menu()};n(T.prototype,J.prototype,e.prototype);var R=function(ag,ae,ai,ac,af,ah,ad){e.call(this,ag,ae,ai,ac,af,ah,{},ad);this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(R.prototype,J.prototype,e.prototype,{predraw_init:function(){var ad=this;var ac=function(){if(ad.data_manager.size()===0){setTimeout(ac,300)}else{ad.data_url=default_data_url;ad.data_query_wait=H;ad.dataset_state_url=converted_datasets_state_url;$.getJSON(ad.dataset_state_url,{dataset_id:ad.dataset_id,hda_ldda:ad.hda_ldda},function(ae){})}};ac()}});U.View=Z;U.LineTrack=k;U.FeatureTrack=e;U.ReadTrack=T};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(k,x){var u=k("class").extend;var p=function(I,A,G,z,F,D){if(D===undefined){D=4}var C=z-A;var B=F-G;var E=Math.floor(Math.sqrt(C*C+B*B)/D);var J=C/E;var H=B/E;var y;for(y=0;y<E;y++,A+=J,G+=H){if(y%2!==0){continue}I.fillRect(A,G,D,1)}};var q=function(B,A,z,E){var D=A-E/2,C=A+E/2,F=z-Math.sqrt(E*3/2);B.beginPath();B.moveTo(D,F);B.lineTo(C,F);B.lineTo(A,z);B.lineTo(D,F);B.strokeStyle=this.fillStyle;B.fill();B.stroke();B.closePath()};var g=function(y){this.default_alpha=(y?y:1)};g.prototype.gen_alpha=function(y){return this.default_alpha};var n=function(A,C,y,z,B){this.data=A;this.view_start=C;this.view_end=y;this.prefs=u({},this.default_prefs,z);this.mode=B};n.prototype.default_prefs={};var v=function(A,C,y,z,B){n.call(this,A,C,y,z,B)};v.prototype.default_prefs={show_counts:false};v.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(y,C,E,F,A){n.call(this,y,C,E,F,A);if(this.prefs.min_value===undefined){var G=Infinity;for(var z=0,B=this.data.length;z<B;z++){G=Math.min(G,this.data[z][1])}this.prefs.min_value=G}if(this.prefs.max_value===undefined){var D=-Infinity;for(var z=0,B=this.data.length;z<B;z++){D=Math.max(D,this.data[z][1])}this.prefs.max_value=D}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(N,M,K){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,J=D-H,z=K,A=this.view_start,L=this.view_end-this.view_start,B=M/L,I=this.mode,T=this.data;N.save();var U=Math.round(K+H/J*K);if(I!=="Intensity"){N.fillStyle="#aaa";N.fillRect(0,U,M,1)}N.beginPath();var R,E,C;if(T.length>1){C=Math.ceil((T[1][0]-T[0][0])*B)}else{C=10}for(var O=0,P=T.length;O<P;O++){N.fillStyle=this.prefs.color;R=Math.round((T[O][0]-A)*B);E=T[O][1];var Q=false,G=false;if(E===null){if(F&&I==="Filled"){N.lineTo(R,z)}F=false;continue}if(E<H){G=true;E=H}else{if(E>D){Q=true;E=D}}if(I==="Histogram"){E=Math.round(E/J*z);N.fillRect(R,U,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/J*255);N.fillStyle="rgb("+E+","+E+","+E+")";N.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/J*z);if(F){N.lineTo(R,E)}else{F=true;if(I==="Filled"){N.moveTo(R,z);N.lineTo(R,E)}else{N.moveTo(R,E)}}}}N.fillStyle=this.prefs.overflow_color;if(Q||G){var S;if(I==="Histogram"||I==="Intensity"){S=C}else{R-=2;S=4}if(Q){N.fillRect(R,0,S,3)}if(G){N.fillRect(R,z-3,S,3)}}N.fillStyle=this.prefs.color}if(I==="Filled"){if(F){N.lineTo(R,U);N.lineTo(0,U)}N.fill()}else{N.stroke()}N.restore()};var o=function(B,D,y,A,C,z){n.call(this,B,D,y,A,C);this.alpha_generator=(z?z:new g())};o.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};u(o.prototype,{get_required_height:function(z){var y=y_scale=this.get_row_height(),A=this.mode;if(A==="no_detail"||A==="Squish"||A==="Pack"){y=z*y_scale}return y+Math.max(Math.round(y_scale/2),5)},draw:function(K,B,J,G){var E=this.data,H=this.view_start,L=this.view_end;K.save();K.fillStyle=this.prefs.block_color;K.textAlign="right";var O=this.view_end-this.view_start,N=B/O,A=this.get_row_height();for(var D=0,F=E.length;D<F;D++){var M=E[D],C=M[0],y=M[1],z=M[2],I=(G&&G[C]!==undefined?G[C]:null);if((y<L&&z>H)&&(this.mode=="Dense"||I!==null)){this.draw_element(K,this.mode,M,I,H,L,N,A,B)}}K.restore()},draw_element:function(E,A,G,C,B,D,F,z,y){console.log("WARNING: Unimplemented function.")}});var d=10,j=3,m=5,w=10,f=1,s=3,e=3,a=9,l=2,h="#ccc";var r=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(r.prototype,o.prototype,{get_row_height:function(){var z=this.mode,y;if(z==="Dense"){y=d}else{if(z==="no_detail"){y=j}else{if(z==="Squish"){y=m}else{y=w}}}return y},draw_element:function(K,D,S,F,M,ac,ag,ah,y){var P=S[0],ae=S[1],W=S[2],N=S[3],X=Math.floor(Math.max(0,(ae-M)*ag)),L=Math.ceil(Math.min(y,Math.max(0,(W-M)*ag))),V=(D==="Dense"?0:(0+F))*ah,J,aa,O=null,ai=null,B=this.prefs.block_color,Z=this.prefs.label_color;K.globalAlpha=this.alpha_generator.gen_alpha(S);if(D=="Dense"){F=1}if(D==="no_detail"){K.fillStyle=B;K.fillRect(X,V+5,L-X,f)}else{var I=S[4],U=S[5],Y=S[6],C=S[7];if(U&&Y){O=Math.floor(Math.max(0,(U-M)*ag));ai=Math.ceil(Math.min(y,Math.max(0,(Y-M)*ag)))}var af,Q;if(D==="Squish"||D==="Dense"){af=1;Q=e}else{af=5;Q=a}if(!C){if(S.strand){if(S.strand==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(S.strand==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}}else{K.fillStyle=B}K.fillRect(X,V,L-X,Q)}else{var H,R;if(D==="Squish"||D==="Dense"){K.fillStyle=h;H=V+Math.floor(e/2)+1;R=1}else{if(I){var H=V;var R=Q;if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand")}}}else{K.fillStyle=h;H+=(e/2)+1;R=1}}K.fillRect(X,H,L-X,R);for(var ad=0,A=C.length;ad<A;ad++){var E=C[ad],z=Math.floor(Math.max(0,(E[0]-M)*ag)),T=Math.ceil(Math.min(y,Math.max((E[1]-M)*ag)));if(z>T){continue}K.fillStyle=B;K.fillRect(z,V+(Q-af)/2+1,T-z,af);if(O!==undefined&&Y>U&&!(z>ai||T<O)){var ab=Math.max(z,O),G=Math.min(T,ai);K.fillRect(ab,V+1,G-ab,Q);if(C.length==1&&D=="Pack"){if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}if(ab+14<G){ab+=2;G-=2}K.fillRect(ab,V+1,G-ab,Q)}}}}if(D==="Pack"&&ae>M){K.fillStyle=Z;if(M===0&&X-K.measureText(N).width<0){K.textAlign="left";K.fillText(N,L+l,V+8)}else{K.textAlign="right";K.fillText(N,X-l,V+8)}}}K.globalAlpha=1}});var b=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(b.prototype,o.prototype,{draw_element:function(R,M,G,C,U,A,J,S,P){var G=data[i],I=G[0],Q=G[1],B=G[2],L=G[3],E=Math.floor(Math.max(0,(Q-U)*J)),H=Math.ceil(Math.min(P,Math.max(0,(B-U)*J))),D=(M==="Dense"?0:(0+C))*S,y,V,z=null,K=null;if(no_label){R.fillStyle=block_color;R.fillRect(E+left_offset,D+5,H-E,1)}else{var T=G[4],O=G[5],F=G[6];y=9;V=1;R.fillRect(E+left_offset,D,H-E,y);if(M!=="Dense"&&L!==undefined&&Q>U){R.fillStyle=label_color;if(U===0&&E-R.measureText(L).width<0){R.textAlign="left";R.fillText(L,H+2+left_offset,D+8)}else{R.textAlign="right";R.fillText(L,E-2+left_offset,D+8)}R.fillStyle=block_color}var N=T+" / "+O;if(Q>U&&R.measureText(N).width<(H-E)){R.fillStyle="white";R.textAlign="center";R.fillText(N,left_offset+E+(H-E)/2,D+8);R.fillStyle=block_color}}}});var t=function(C,E,y,B,D,z,A){o.call(this,C,E,y,B,D,z);this.ref_seq=A};t.prototype.default_prefs=u({},o.prototype.default_prefs,{show_insertions:false});u(t.prototype,o.prototype,{get_row_height:function(){var y,z=this.mode;if(z==="Dense"){y=d}else{if(z==="Squish"){y=m}else{y=w;if(this.prefs.show_insertions){y*=2}}}return y},draw_read:function(U,P,L,Z,A,T,I,F,E){U.textAlign="center";var S=this,z=[Z,A],O=0,V=0,R=0;ref_seq=this.ref_seq,char_width_px=U.canvas.manager.char_width_px;var ae=[];if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){R=Math.round(L/2)}if(!I){I=[[0,F.length]]}for(var M=0,X=I.length;M<X;M++){var J=I[M],B="MIDNSHP=X"[J[0]],N=J[1];if(B==="H"||B==="S"){O-=N}var G=T+O,ad=Math.floor(Math.max(0,(G-Z)*L)),H=Math.floor(Math.max(0,(G+N-Z)*L));if(ad===H){H+=1}switch(B){case"H":break;case"S":case"M":case"=":if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(R>0){U.fillStyle=this.prefs.block_color;U.fillRect(ad-R,E+1,H-ad,9);U.fillStyle=h;for(var ab=0,y=Q.length;ab<y;ab++){if(this.prefs.show_differences&&ref_seq){var K=ref_seq[G-Z+ab];if(!K||K.toLowerCase()===Q[ab].toLowerCase()){continue}}if(G+ab>=Z&&G+ab<=A){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac,E+9)}}}else{U.fillStyle=this.prefs.block_color;U.fillRect(ad,E+4,H-ad,e)}}V+=N;O+=N;break;case"N":U.fillStyle=h;U.fillRect(ad-R,E+5,H-ad,1);O+=N;break;case"D":U.fillStyle="red";U.fillRect(ad-R,E+4,H-ad,3);O+=N;break;case"P":break;case"I":var Y=ad-R;if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(this.prefs.show_insertions){var D=ad-(H-ad)/2;if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){U.fillStyle="yellow";U.fillRect(D-R,E-9,H-ad,9);ae[ae.length]={type:"triangle",data:[Y,E+4,5]};U.fillStyle=h;switch(seq_tile_overlap){case (OVERLAP_START):Q=Q.slice(Z-G);break;case (OVERLAP_END):Q=Q.slice(0,G-A);break;case (CONTAINED_BY):break;case (CONTAINS):Q=Q.slice(Z-G,G-A);break}for(var ab=0,y=Q.length;ab<y;ab++){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac-(H-ad)/2,E)}}else{U.fillStyle="yellow";U.fillRect(D,E+(this.mode!=="Dense"?2:5),H-ad,(P!=="Dense"?e:s))}}else{if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){ae[ae.length]={type:"text",data:[Q.length,Y,E+9]}}else{}}}V+=N;break;case"X":V+=N;break}}U.fillStyle="yellow";var aa,C,af;for(var W=0;W<ae.length;W++){aa=ae[W];C=aa.type;af=aa.data;if(C==="text"){U.save();U.font="bold "+U.font;U.fillText(af[0],af[1],af[2]);U.restore()}else{if(C=="triangle"){q(U,af[0],af[1],af[2])}}}},draw_element:function(R,M,E,B,U,z,I,S,P){var H=E[0],Q=E[1],A=E[2],J=E[3],D=Math.floor(Math.max(0,(Q-U)*I)),F=Math.ceil(Math.min(P,Math.max(0,(A-U)*I))),C=(M==="Dense"?0:(0+B))*S,V=this.prefs.block_color,G=this.prefs.label_color,O=0;if((M==="Pack"||this.mode==="Auto")&&I>R.canvas.manager.char_width_px){var O=Math.round(I/2)}R.fillStyle=V;if(E[5] instanceof Array){var N=Math.floor(Math.max(0,(E[4][0]-U)*I)),L=Math.ceil(Math.min(P,Math.max(0,(E[4][1]-U)*I))),K=Math.floor(Math.max(0,(E[5][0]-U)*I)),y=Math.ceil(Math.min(P,Math.max(0,(E[5][1]-U)*I)));if(E[4][1]>=U&&E[4][0]<=z&&E[4][2]){this.draw_read(R,M,I,U,z,E[4][0],E[4][2],E[4][3],C)}if(E[5][1]>=U&&E[5][0]<=z&&E[5][2]){this.draw_read(R,M,I,U,z,E[5][0],E[5][2],E[5][3],C)}if(K>L){R.fillStyle=h;p(R,L-O,C+5,K-O,C+5)}}else{R.fillStyle=V;this.draw_read(R,M,I,U,z,Q,E[4],E[5],C)}if(M==="Pack"&&Q>U){R.fillStyle=this.prefs.label_color;var T=1;if(T===0&&D-R.measureText(J).width<0){R.textAlign="left";R.fillText(J,F+l-O,C+8)}else{R.textAlign="right";R.fillText(J,D-l-O,C+8)}R.fillStyle=V}}});x.AlphaGenerator=g;x.SummaryTreePainter=v;x.LinePainter=c;x.LinkedFeaturePainter=r;x.ReadPainter=t;x.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
+var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var requestAnimationFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){window.setTimeout(b,1000/60)}})();var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,W){var p=f("class").extend,r=f("slotting"),K=f("painters");var ad=function(ae,af){this.document=ae;this.default_font=af!==undefined?af:"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")};p(ad.prototype,{load_pattern:function(ae,ai){var af=this.patterns,ag=this.dummy_context,ah=new Image();ah.src=image_path+ai;ah.onload=function(){af[ae]=ag.createPattern(ah,"repeat")}},get_pattern:function(ae){return this.patterns[ae]},new_canvas:function(){var ae=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(ae)}ae.manager=this;return ae}});var m=function(ae,ag,ah){ah=".group";var af={};ae.bind("drag",{handle:ag,relative:true},function(an,ao){var aq=$(this).parent(),al=aq.children(),ak,aj,ap,ai,am;aj=$(this).parents(ah);if(aj.length!==0){ap=aj.position().top;ai=ap+aj.outerHeight();if(ao.offsetY<ap){$(this).insertBefore(aj);return}else{if(ao.offsetY>ai){$(this).insertAfter(aj);return}}}aj=null;for(am=0;am<al.length;am++){ak=$(al.get(am));ap=ak.position().top;ai=ap+ak.outerHeight();if(ak.is(ah)&&this!==ak.get(0)&&ao.offsetY>=ap&&ao.offsetY<=ai){if(ao.offsetY-ap<ai-ao.offsetY){ak.find(".content-div").prepend(this)}else{ak.find(".content-div").append(this)}return}}for(am=0;am<al.length;am++){if(ao.offsetY<$(al.get(am)).position().top){break}}if(am===al.length){if(this!==al.get(am-1)){aq.append(this)}}else{if(this!==al.get(am)){$(this).insertBefore(al.get(am))}}}).bind("dragstart",function(){af["border-top"]=ae.css("border-top");af["border-bottom"]=ae.css("border-bottom");$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css(af)})};W.moveable=m;var ac=16,F=9,D=20,R=F+2,z=100,H=12000,P=200,C=5,u=10,J=5000,v=100,n="There was an error in indexing this dataset. ",I="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",E="No data for this chrom/contig.",s="Currently indexing... please wait",x="Tool cannot be rerun: ",a="Loading data...",X="Ready for display",d=10,t=5,B=5;function w(ae){return Math.round(ae*1000)/1000}var c=function(ae){this.num_elements=ae;this.clear()};p(c.prototype,{get:function(af){var ae=this.key_ary.indexOf(af);if(ae!==-1){if(this.obj_cache[af].stale){this.key_ary.splice(ae,1);delete this.obj_cache[af]}else{this.move_key_to_end(af,ae)}}return this.obj_cache[af]},set:function(af,ag){if(!this.obj_cache[af]){if(this.key_ary.length>=this.num_elements){var ae=this.key_ary.shift();delete this.obj_cache[ae]}this.key_ary.push(af)}this.obj_cache[af]=ag;return ag},move_key_to_end:function(af,ae){this.key_ary.splice(ae,1);this.key_ary.push(af)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var Q=function(af,ae,ag){c.call(this,af);this.track=ae;this.subset=(ag!==undefined?ag:true)};p(Q.prototype,c.prototype,{load_data:function(an,ai,al,af,ak){var am=this.track.view.chrom,ah={chrom:am,low:an,high:ai,mode:al,resolution:af,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ah,ak);if(this.track.filters_manager){var ao=[];var ae=this.track.filters_manager.filters;for(var aj=0;aj<ae.length;aj++){ao[ao.length]=ae[aj].name}ah.filter_cols=JSON.stringify(ao)}var ag=this;return $.getJSON(this.track.data_url,ah,function(ap){ag.set_data(an,ai,al,ap)})},get_data:function(ae,ai,aj,af,ah){var ag=this.get_data_from_cache(ae,ai,aj);if(ag){return ag}ag=this.load_data(ae,ai,aj,af,ah);this.set_data(ae,ai,aj,ag);return ag},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(am,ah,al,ag,ak,ai){var an=this.get_data_from_cache(am,ah,al);if(!an){console.log("ERROR: no current data for: ",this.track,am,ah,al,ag,ak);return}an.stale=true;var af=am;if(ai===this.DEEP_DATA_REQ){$.extend(ak,{start_val:an.data.length+1})}else{if(ai===this.BROAD_DATA_REQ){af=an.data[an.data.length-1][2]+1}}var ae=this,aj=this.load_data(af,ah,al,ag,ak);new_data_available=$.Deferred();this.set_data(am,ah,al,new_data_available);$.when(aj).then(function(ao){if(ao.data){ao.data=an.data.concat(ao.data);if(ao.message){ao.message=ao.message.replace(/[0-9]+/,ao.data.length)}}ae.set_data(am,ah,al,ao);new_data_available.resolve(ao)});return new_data_available},get_data_from_cache:function(ae,af,ag){return this.get(this.gen_key(ae,af,ag))},set_data:function(af,ag,ah,ae){return this.set(this.gen_key(af,ag,ah),ae)},gen_key:function(ae,ag,ah){var af=ae+"_"+ag+"_"+ah;return af},split_key:function(ae){return ae.split("_")}});var G=function(af,ae,ag){Q.call(this,af,ae,ag)};p(G.prototype,Q.prototype,c.prototype,{load_data:function(ag,ae,ai,aj,af,ah){if(af>1){return}return Q.prototype.load_data.call(this,ag,ae,ai,aj,af,ah)}});var ab=function(ae,ah,ag,af,ai){this.container=ae;this.chrom=null;this.vis_id=ag;this.dbkey=af;this.title=ah;this.tracks=[];this.label_tracks=[];this.tracks_to_be_redrawn=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ai);this.canvas_manager=new ad(ae.get(0).ownerDocument);this.reset()};p(ab.prototype,{init:function(ai){var ag=this.container,ae=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ag);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ag);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ag);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").appendTo(this.viewport_container).hide();var ah=$("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function(){add_tracks()});this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var af=function(aj){if(aj.type==="focusout"||(aj.keyCode||aj.which)===13||(aj.keyCode||aj.which)===27){if((aj.keyCode||aj.which)!==27){ae.go_to($(this).val())}$(this).hide();$(this).val("");ae.location_span.show();ae.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",af).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.click(function(){ae.location_span.hide();ae.chrom_select.hide();ae.nav_input.val(ae.chrom+":"+ae.low+"-"+ae.high);ae.nav_input.css("display","inline-block");ae.nav_input.select();ae.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){ae.zoom_out();ae.request_redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){ae.zoom_in();ae.request_redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ai);this.chrom_select.bind("change",function(){ae.change_chrom(ae.chrom_select.val())});this.content_div.click(function(aj){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(aj){ae.zoom_in(aj.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(aj,ak){this.current_x=ak.offsetX}).bind("drag",function(aj,al){var am=al.offsetX-this.current_x;this.current_x=al.offsetX;var ak=Math.round(am/ae.viewport_container.width()*(ae.max_high-ae.max_low));ae.move_delta(-ak)});this.overview_close.click(function(){ae.reset_overview()});this.viewport_container.bind("draginit",function(aj,ak){if(aj.clientX>ae.viewport_container.width()-16){return false}}).bind("dragstart",function(aj,ak){ak.original_low=ae.low;ak.current_height=aj.clientY;ak.current_x=ak.offsetX}).bind("drag",function(al,an){var aj=$(this);var ao=an.offsetX-an.current_x;var ak=aj.scrollTop()-(al.clientY-an.current_height);aj.scrollTop(ak);an.current_height=al.clientY;an.current_x=an.offsetX;var am=Math.round(ao/ae.viewport_container.width()*(ae.high-ae.low));ae.move_delta(am)}).bind("mousewheel",function(al,an,ak,aj){if(ak){var am=Math.round(-ak/ae.viewport_container.width()*(ae.high-ae.low));ae.move_delta(am)}});this.top_labeltrack.bind("dragstart",function(aj,ak){return $("<div />").css({height:ae.content_div.height()+ae.top_labeltrack.height()+ae.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(an,ao){$(ao.proxy).css({left:Math.min(an.pageX,ao.startX),width:Math.abs(an.pageX-ao.startX)});var ak=Math.min(an.pageX,ao.startX)-ae.container.offset().left,aj=Math.max(an.pageX,ao.startX)-ae.container.offset().left,am=(ae.high-ae.low),al=ae.viewport_container.width();ae.update_location(Math.round(ak/al*am)+ae.low,Math.round(aj/al*am)+ae.low)}).bind("dragend",function(ao,ap){var ak=Math.min(ao.pageX,ap.startX),aj=Math.max(ao.pageX,ap.startX),am=(ae.high-ae.low),al=ae.viewport_container.width(),an=ae.low;ae.low=Math.round(ak/al*am)+an;ae.high=Math.round(aj/al*am)+an;$(ap.proxy).remove();ae.request_redraw()});this.add_label_track(new aa(this,this.top_labeltrack));this.add_label_track(new aa(this,this.nav_labeltrack));$(window).bind("resize",function(){ae.resize_window()});$(document).bind("redraw",function(){ae.redraw()});this.reset();$(window).trigger("resize");this.update_intro_div()},update_intro_div:function(){if(this.num_tracks===0){this.intro_div.show()}else{this.intro_div.hide()}},update_location:function(ae,af){this.location_span.text(commatize(ae)+" - "+commatize(af));this.nav_input.val(this.chrom+":"+commatize(ae)+"-"+commatize(af))},load_chroms:function(af,ag){af.num=v;$.extend(af,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var ae=this;$.ajax({url:chrom_url,data:af,dataType:"json",success:function(ai){if(ai.chrom_info.length===0){alert("Invalid chromosome: "+af.chrom);return}if(ai.reference){ae.add_label_track(new A(ae))}ae.chrom_data=ai.chrom_info;var al='<option value="">Select Chrom/Contig</option>';for(var ak=0,ah=ae.chrom_data.length;ak<ah;ak++){var aj=ae.chrom_data[ak].chrom;al+='<option value="'+aj+'">'+aj+"</option>"}if(ai.prev_chroms){al+='<option value="previous">Previous '+v+"</option>"}if(ai.next_chroms){al+='<option value="next">Next '+v+"</option>"}ae.chrom_select.html(al);if(ag){ag()}ae.chrom_start_index=ai.start_index},error:function(){alert("Could not load chroms for this dbkey:",ae.dbkey)}})},change_chrom:function(ai,af,ak){if(!ai||ai==="None"){return}var ah=this;if(ai==="previous"){ah.load_chroms({low:this.chrom_start_index-v});return}if(ai==="next"){ah.load_chroms({low:this.chrom_start_index+v});return}var aj=$.grep(ah.chrom_data,function(am,an){return am.chrom===ai})[0];if(aj===undefined){ah.load_chroms({chrom:ai},function(){ah.change_chrom(ai,af,ak)});return}else{if(ai!==ah.chrom){ah.chrom=ai;ah.chrom_select.val(ah.chrom);ah.max_high=aj.len-1;ah.reset();ah.request_redraw(true);for(var al=0,ae=ah.tracks.length;al<ae;al++){var ag=ah.tracks[al];if(ag.init){ag.init()}}}if(af!==undefined&&ak!==undefined){ah.low=Math.max(af,0);ah.high=Math.min(ak,ah.max_high)}ah.reset_overview();ah.request_redraw()}},go_to:function(ai){var am=this,ae,ah,af=ai.split(":"),ak=af[0],al=af[1];if(al!==undefined){try{var aj=al.split("-");ae=parseInt(aj[0].replace(/,/g,""),10);ah=parseInt(aj[1].replace(/,/g,""),10)}catch(ag){return false}}am.change_chrom(ak,ae,ah)},move_fraction:function(ag){var ae=this;var af=ae.high-ae.low;this.move_delta(ag*af)},move_delta:function(ag){var ae=this;var af=ae.high-ae.low;if(ae.low-ag<ae.max_low){ae.low=ae.max_low;ae.high=ae.max_low+af}else{if(ae.high-ag>ae.max_high){ae.high=ae.max_high;ae.low=ae.max_high-af}else{ae.high-=ag;ae.low-=ag}}ae.request_redraw()},add_track:function(ae){ae.view=this;ae.track_id=this.track_id_counter;this.tracks.push(ae);if(ae.init){ae.init()}ae.container_div.attr("id","track_"+ae.track_id);m(ae.container_div,ae.drag_handle);this.track_id_counter+=1;this.num_tracks+=1;this.has_changes=true;this.update_intro_div()},add_label_track:function(ae){ae.view=this;this.label_tracks.push(ae)},remove_track:function(af){this.has_changes=true;delete this.tracks[this.tracks.indexOf(af)];this.num_tracks-=1;var ae=this;af.container_div.fadeOut("slow",function(){$(this).remove();ae.update_intro_div()})},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},request_redraw:function(am,ae,al,af){var ak=this,ai=(af?[af]:ak.tracks),ag;var af;for(var aj=0;aj<ai.length;aj++){af=ai[aj];ag=-1;for(var ah=0;ah<ak.tracks_to_be_redrawn.length;ah++){if(ak.tracks_to_be_redrawn[ah][0]===af){ag=ah;break}}if(ag<0){ak.tracks_to_be_redrawn.push([af,ae,al])}else{ak.tracks_to_be_redrawn[aj][1]=ae;ak.tracks_to_be_redrawn[aj][2]=al}}requestAnimationFrame(function(){ak._redraw(am)})},_redraw:function(ao){var al=this.low,ah=this.high;if(al<this.max_low){al=this.max_low}if(ah>this.max_high){ah=this.max_high}var an=this.high-this.low;if(this.high!==0&&an<this.min_separation){ah=al+this.min_separation}this.low=Math.floor(al);this.high=Math.ceil(ah);this.resolution=Math.pow(C,Math.ceil(Math.log((this.high-this.low)/P)/Math.log(C)));this.zoom_res=Math.pow(u,Math.max(0,Math.ceil(Math.log(this.resolution,u)/Math.log(u))));var ae=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ak=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ap=13;this.overview_box.css({left:ae,width:Math.max(ap,ak)}).show();if(ak<ap){this.overview_box.css("left",ae-(ap-ak)/2)}if(this.overview_highlight){this.overview_highlight.css({left:ae,width:ak})}this.update_location(this.low,this.high);if(!ao){var ag,af,am;for(var ai=0,aj=this.tracks_to_be_redrawn.length;ai<aj;ai++){ag=this.tracks_to_be_redrawn[ai][0];af=this.tracks_to_be_redrawn[ai][1];am=this.tracks_to_be_redrawn[ai][2];if(ag&&ag.enabled){ag._draw(af,am)}}this.tracks_to_be_redrawn=[];for(ai=0,aj=this.label_tracks.length;ai<aj;ai++){this.label_tracks[ai]._draw()}}},zoom_in:function(af,ag){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ah=this.high-this.low,ai=ah/2+this.low,ae=(ah/this.zoom_factor)/2;if(af){ai=af/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ai-ae);this.high=Math.round(ai+ae);this.request_redraw()},zoom_out:function(){if(this.max_high===0){return}var af=this.high-this.low,ag=af/2+this.low,ae=(af*this.zoom_factor)/2;this.low=Math.round(ag-ae);this.high=Math.round(ag+ae);this.request_redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.request_redraw()},set_overview:function(ae){$.when(ae.get_overview_tile()).then(function(af){view.overview_viewport.find(".track-tile").remove();view.overview_close.show();view.overview_viewport.append(af.canvas);view.overview_highlight.show().height(af.canvas.height());view.overview_viewport.height(af.canvas.height()+view.overview_box.outerHeight());view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=ae;ae.set_is_overview(true)});view.has_changes=true},reset_overview:function(){this.overview_viewport.find(".track-tile").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide();view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=null}});var q=function(ag,ak){this.track=ag;this.name=ak.name;this.params=[];var ar=ak.params;for(var ah=0;ah<ar.length;ah++){var am=ar[ah],af=am.name,aq=am.label,ai=unescape(am.html),at=am.value,ao=am.type;if(ao==="number"){this.params[this.params.length]=new g(af,aq,ai,at,am.min,am.max)}else{if(ao=="select"){this.params[this.params.length]=new M(af,aq,ai,at)}else{console.log("WARNING: unrecognized tool parameter type:",af,ao)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(av){av.stopPropagation()}).click(function(av){av.stopPropagation()}).bind("dblclick",function(av){av.stopPropagation()});var ap=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var an=this.params;var al=this;$.each(this.params,function(aw,az){var ay=$("<div>").addClass("param-row").appendTo(al.parent_div);var av=$("<div>").addClass("param-label").text(az.label).appendTo(ay);var ax=$("<div/>").addClass("slider").html(az.html).appendTo(ay);ax.find(":input").val(az.value);$("<div style='clear: both;'/>").appendTo(ay)});this.parent_div.find("input").click(function(){$(this).select()});var au=$("<div>").addClass("param-row").appendTo(this.parent_div);var aj=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(au);var ae=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(au);var al=this;ae.click(function(){al.run_on_region()});aj.click(function(){al.run_on_dataset()})};p(q.prototype,{get_param_values_dict:function(){var ae={};this.parent_div.find(":input").each(function(){var af=$(this).attr("name"),ag=$(this).val();ae[af]=JSON.stringify(ag)});return ae},get_param_values:function(){var af=[];var ae={};this.parent_div.find(":input").each(function(){var ag=$(this).attr("name"),ah=$(this).val();if(ag){af[af.length]=ah}});return af},run_on_dataset:function(){var ae=this;ae.run({dataset_id:this.track.original_dataset_id,tool_id:ae.name},null,function(af){show_modal(ae.name+" is Running",ae.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var ae={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ag=this.track,af=ae.tool_id+ag.tool_region_and_parameters_str(ae.chrom,ae.low,ae.high),ah;if(ag instanceof e){ah=new T(af,view,ag.hda_ldda,undefined,{},{},ag);ah.change_mode(ag.mode)}this.track.add_track(ah);ah.content_div.text("Starting job.");this.run(ae,ah,function(ai){ah.dataset_id=ai.dataset_id;ah.content_div.text("Running job.");ah.init()})},run:function(af,ag,ah){$.extend(af,this.get_param_values_dict());var ae=function(){$.getJSON(rerun_tool_url,af,function(ai){if(ai==="no converter"){ag.container_div.addClass("error");ag.content_div.text(I)}else{if(ai.error){ag.container_div.addClass("error");ag.content_div.text(x+ai.message)}else{if(ai==="pending"){ag.container_div.addClass("pending");ag.content_div.text("Converting input data so that it can be used quickly with tool.");setTimeout(ae,2000)}else{ah(ai)}}}})};ae()}});var M=function(af,ae,ag,ah){this.name=af;this.label=ae;this.html=ag;this.value=ah};var g=function(ag,af,ai,aj,ah,ae){M.call(this,ag,af,ai,aj);this.min=ah;this.max=ae};var h=function(af,ae,ag,ah){this.name=af;this.index=ae;this.tool_id=ag;this.tool_exp_name=ah};var U=function(af,ae,ag,ah){h.call(this,af,ae,ag,ah);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.container=null;this.slider=null;this.slider_label=null};p(U.prototype,{applies_to:function(ae){if(ae.length>this.index){return true}return false},keep:function(ae){if(!this.applies_to(ae)){return true}var af=parseFloat(ae[this.index]);return(isNaN(af)||(af>=this.low&&af<=this.high))},update_attrs:function(af){var ae=false;if(!this.applies_to(af)){return ae}if(af[this.index]<this.min){this.min=Math.floor(af[this.index]);ae=true}if(af[this.index]>this.max){this.max=Math.ceil(af[this.index]);ae=true}return ae},update_ui_elt:function(){if(this.min!=this.max){this.container.show()}else{this.container.hide()}var ag=function(aj,ah){var ai=ah-aj;return(ai<=2?0.01:1)};var af=this.slider.slider("option","min"),ae=this.slider.slider("option","max");if(this.min<af||this.max>ae){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ag(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var Z=function(ao,av){this.track=ao;this.filters=[];for(var ap=0;ap<av.length;ap++){var aq=av[ap],aw=aq.name,ae=aq.type,ah=aq.index,au=aq.tool_id,at=aq.tool_exp_name;if(ae==="int"||ae==="float"){this.filters[ap]=new U(aw,ah,au,at)}else{console.log("ERROR: unsupported filter: ",aw,ae)}}var ai=function(ax,ay,az){ax.click(function(){var aA=ay.text();max=parseFloat(az.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(az.slider("option","values")){input_size=2*input_size+1;multi_value=true}ay.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",aA).appendTo(ay).focus().select().click(function(aB){aB.stopPropagation()}).blur(function(){$(this).remove();ay.text(aA)}).keyup(function(aF){if(aF.keyCode===27){$(this).trigger("blur")}else{if(aF.keyCode===13){var aD=az.slider("option","min"),aB=az.slider("option","max"),aE=function(aG){return(isNaN(aG)||aG>aB||aG<aD)},aC=$(this).val();if(!multi_value){aC=parseFloat(aC);if(aE(aC)){alert("Parameter value must be in the range ["+aD+"-"+aB+"]");return $(this)}}else{aC=aC.split("-");aC=[parseFloat(aC[0]),parseFloat(aC[1])];if(aE(aC[0])||aE(aC[1])){alert("Parameter value must be in the range ["+aD+"-"+aB+"]");return $(this)}}az.slider((multi_value?"values":"value"),aC)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(ax){ax.stopPropagation()}).click(function(ax){ax.stopPropagation()}).bind("dblclick",function(ax){ax.stopPropagation()}).bind("keydown",function(ax){ax.stopPropagation()});var ar=$("<div/>").addClass("sliders").appendTo(this.parent_div);var am=this;$.each(this.filters,function(aA,aC){aC.container=$("<div/>").addClass("slider-row").appendTo(ar);var aB=$("<div/>").addClass("elt-label").appendTo(aC.container);var az=$("<span/>").addClass("slider-name").text(aC.name+" ").appendTo(aB);var ay=$("<span/>");var aE=$("<span/>").addClass("slider-value").appendTo(aB).append("[").append(ay).append("]");var ax=$("<div/>").addClass("slider").appendTo(aC.container);aC.control_element=$("<div/>").attr("id",aC.name+"-filter-control").appendTo(ax);var aD=[0,0];aC.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(aG,aH){var aF=aH.values;ay.text(aF[0]+"-"+aF[1]);aC.low=aF[0];aC.high=aF[1];am.track.request_draw(true,true)},change:function(aF,aG){aC.control_element.slider("option","slide").call(aC.control_element,aF,aG)}});aC.slider=aC.control_element;aC.slider_label=ay;ai(aE,ay,aC.control_element);$("<div style='clear: both;'/>").appendTo(aC.container)});if(this.filters.length!==0){var aj=$("<div/>").addClass("param-row").appendTo(ar);var al=$("<input type='submit'/>").attr("value","Run on complete dataset").appendTo(aj);var ag=this;al.click(function(){ag.run_on_dataset()})}var an=$("<div/>").addClass("display-controls").appendTo(this.parent_div),ak=$("<span/>").addClass("elt-label").text("Transparency:").appendTo(an),af=$("<select/>").attr("name","alpha_dropdown").appendTo(an);this.alpha_filter=null;$("<option/>").attr("value",-1).text("== None ==").appendTo(af);for(var ap=0;ap<this.filters.length;ap++){$("<option/>").attr("value",ap).text(this.filters[ap].name).appendTo(af)}af.change(function(){$(this).children("option:selected").each(function(){var ax=parseInt($(this).val());am.alpha_filter=(ax>=0?am.filters[ax]:null);am.track.request_draw(true,true)})});$("<div style='clear: both;'/>").appendTo(this.parent_div)};p(Z.prototype,{reset_filters:function(){for(var ae=0;ae<this.filters.length;ae++){filter=this.filters[ae];filter.slider.slider("option","values",[filter.min,filter.max])}this.alpha_filter=null},run_on_dataset:function(){var am=function(aq,ao,ap){if(!(ao in aq)){aq[ao]=ap}return aq[ao]};var ag={},ae,af,ah;for(var ai=0;ai<this.filters.length;ai++){ae=this.filters[ai];if(ae.tool_id){if(ae.min!=ae.low){af=am(ag,ae.tool_id,[]);af[af.length]=ae.tool_exp_name+" >= "+ae.low}if(ae.max!=ae.high){af=am(ag,ae.tool_id,[]);af[af.length]=ae.tool_exp_name+" <= "+ae.high}}}var ak=[];for(var an in ag){ak[ak.length]=[an,ag[an]]}var al=ak.length;(function aj(av,ar){var ap=ar[0],aq=ap[0],au=ap[1],at="("+au.join(") and (")+")",ao={cond:at,input:av,target_dataset_id:av,tool_id:aq},ar=ar.slice(1);$.getJSON(run_tool_url,ao,function(aw){if(aw.error){show_modal("Filter Dataset","Error running tool "+aq,{Close:hide_modal})}else{if(ar.length===0){show_modal("Filtering Dataset","Filter(s) are running on the complete dataset. Outputs are in dataset's history.",{Close:hide_modal})}else{aj(aw.dataset_id,ar)}}})})(this.track.dataset_id,ak)}});var N=function(af,ae){K.AlphaGenerator.call(this,ae);this.filter=af};N.prototype.gen_alpha=function(ae){if(this.filter.high===Number.MAX_VALUE||this.filter.low===-Number.MAX_VALUE||this.filter.low===this.filter.high){return this.default_alpha}return((parseFloat(ae[this.filter.index])-this.filter.low)/(this.filter.high-this.filter.low))};var Y=function(ae){this.track=ae.track;this.params=ae.params;this.values={};if(ae.saved_values){this.restore_values(ae.saved_values)}this.onchange=ae.onchange};p(Y.prototype,{restore_values:function(ae){var af=this;$.each(this.params,function(ag,ah){if(ae[ah.key]!==undefined){af.values[ah.key]=ae[ah.key]}else{af.values[ah.key]=ah.default_value}})},build_form:function(){var af=this;var ae=$("<div />");$.each(this.params,function(aj,ah){if(!ah.hidden){var ag="param_"+aj;var ao=$("<div class='form-row' />").appendTo(ae);ao.append($("<label />").attr("for",ag).text(ah.label+":"));if(ah.type==="bool"){ao.append($('<input type="checkbox" />').attr("id",ag).attr("name",ag).attr("checked",af.values[ah.key]))}else{if(ah.type==="color"){var al=af.values[ah.key];var ak=$("<input />").attr("id",ag).attr("name",ag).val(al);var am=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ai=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(am);var an=$("<div/>").appendTo(ai).farbtastic({width:100,height:100,callback:ak,color:al});$("<div />").append(ak).append(am).appendTo(ao).bind("click",function(ap){am.css({left:$(this).position().left+($(ak).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){am.hide();$(document).unbind("click.color-picker")});ap.stopPropagation()})}else{ao.append($("<input />").attr("id",ag).attr("name",ag).val(af.values[ah.key]))}}}});return ae},update_from_form:function(ae){var ag=this;var af=false;$.each(this.params,function(ah,aj){if(!aj.hidden){var ak="param_"+ah;var ai=ae.find("#"+ak).val();if(aj.type==="float"){ai=parseFloat(ai)}else{if(aj.type==="int"){ai=parseInt(ai)}else{if(aj.type==="bool"){ai=ae.find("#"+ak).is(":checked")}}}if(ai!==ag.values[aj.key]){ag.values[aj.key]=ai;af=true}}});if(af){this.onchange()}}});var b=function(ag,af,ae,ah){this.index=ag;this.low=ag*P*af;this.high=(ag+1)*P*af;this.resolution=af;this.canvas=$("<div class='track-tile'/>").append(ae);this.data=ah;this.stale=false};var l=function(ag,af,ae,ah,ai){b.call(this,ag,af,ae,ah);this.max_val=ai};var O=function(ag,af,ae,ai,ah){b.call(this,ag,af,ae,ai);this.message=ah};var o=function(af,ae){this.name=af;this.view=ae;this.parent_element=ae.viewport_container};o.prototype.request_draw=function(){};o.prototype.draw=function(){};var y=function(af,ae){o.call(this,af,ae);this.members=[];this.drag_handle_class="group-handle";this.container_div=$("<div/>").addClass("group").appendTo(this.parent_element);this.container_div.append($("<div/>").addClass(this.drag_handle_class));this.name_div=$("<div/>").addClass("group-name").text(this.name).appendTo(this.container_div);this.content_div=$("<div/>").addClass("content-div").appendTo(this.container_div)};p(y.prototype,o.prototype,{request_draw:function(af,ae){},draw:function(){}});var j=function(af,ae,ai,ag,ah){this.name=af;this.view=ae;this.parent_element=ai;this.data_url=(ag?ag:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ah?ah:J);this.dataset_check_url=converted_datasets_state_url;this.drag_handle_class="draghandle";this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div/>").addClass(this.drag_handle_class).appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};p(j.prototype,{get_type:function(){if(this instanceof aa){return"LabelTrack"}else{if(this instanceof A){return"ReferenceTrack"}else{if(this instanceof k){return"LineTrack"}else{if(this instanceof V){return"ReadTrack"}else{if(this instanceof T){return"ToolDataFeatureTrack"}else{if(this instanceof S){return"VcfTrack"}else{if(this instanceof e){return"FeatureTrack"}}}}}}}return""},init:function(){var ae=this;ae.enabled=false;ae.tile_cache.clear();ae.data_manager.clear();ae.initial_canvas=undefined;ae.content_div.css("height","auto");ae.container_div.removeClass("nodata error pending");if(!ae.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:ae.hda_ldda,dataset_id:ae.dataset_id,chrom:ae.view.chrom},function(af){if(!af||af==="error"||af.kind==="error"){ae.container_div.addClass("error");ae.content_div.text(n);if(af.message){var ah=ae.view.tracks.indexOf(ae);var ag=$(" <a href='javascript:void(0);'></a>").text("View error").click(function(){show_modal("Trackster Error","<pre>"+af.message+"</pre>",{Close:hide_modal})});ae.content_div.append(ag)}}else{if(af==="no converter"){ae.container_div.addClass("error");ae.content_div.text(I)}else{if(af==="no data"||(af.data!==undefined&&(af.data===null||af.data.length===0))){ae.container_div.addClass("nodata");ae.content_div.text(E)}else{if(af==="pending"){ae.container_div.addClass("pending");ae.content_div.text(s);setTimeout(function(){ae.init()},ae.data_query_wait)}else{if(af.status==="data"){if(af.valid_chroms){ae.valid_chroms=af.valid_chroms;ae.make_name_popup_menu()}ae.content_div.text(X);if(ae.view.chrom){ae.content_div.text("");ae.content_div.css("height",ae.height_px+"px");ae.enabled=true;$.when(ae.predraw_init()).done(function(){ae.container_div.removeClass("nodata error pending");ae.request_draw()})}}}}}}})},predraw_init:function(){},update_name:function(ae){this.old_name=this.name;this.name=ae;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var L=function(al,aj,am){var af=this,an=af.view;this.filters_manager=(al!==undefined?new Z(this,al):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(aj!==undefined&&obj_length(aj)>0?new q(this,aj):undefined);this.is_overview=false;this.parent_track=am;this.child_tracks=[];if(af.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}af.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();af.container_div.append(af.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(af.display_modes!==undefined){if(af.mode_div===undefined){af.mode_div=$("<div class='right-float menubutton popup' />").appendTo(af.header_div);var ag=(af.track_config&&af.track_config.values.mode?af.track_config.values.mode:af.display_modes[0]);af.mode=ag;af.mode_div.text(ag);var ae={};for(var ah=0,ak=af.display_modes.length;ah<ak;ah++){var ai=af.display_modes[ah];ae[ai]=function(ao){return function(){af.change_mode(ao)}}(ai)}make_popupmenu(af.mode_div,ae)}else{af.mode_div.hide()}}this.make_name_popup_menu()};p(L.prototype,j.prototype,{change_mode:function(af){var ae=this;ae.mode_div.text(af);ae.mode=af;ae.track_config.values.mode=af;ae.tile_cache.clear();ae.request_draw()},make_name_popup_menu:function(){var af=this;var ae={};ae[(this.is_overview?"Hide overview":"Set as overview")]=function(){if(af.is_overview){af.view.reset_overview()}else{af.view.set_overview(af)}};ae["Edit configuration"]=function(){var al=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},aj=function(){af.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ak=function(am){if((am.keyCode||am.which)===27){al()}else{if((am.keyCode||am.which)===13){aj()}}};$(window).bind("keypress.check_enter_esc",ak);show_modal("Configure Track",af.track_config.build_form(),{Cancel:al,OK:aj})};if(af.filters_available>0){var ai=(af.filters_div.is(":visible")?"Hide filters":"Show filters");ae[ai]=function(){af.filters_visible=(af.filters_div.is(":visible"));if(af.filters_visible){af.filters_manager.reset_filters()}af.filters_div.toggle();af.make_name_popup_menu()}}if(af.tool){var ai=(af.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");ae[ai]=function(){if(!af.dynamic_tool_div.is(":visible")){af.update_name(af.name+af.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";af.revert_name()}af.dynamic_tool_div.toggle();af.make_name_popup_menu()}}if(af.valid_chroms){ae["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+af.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ag=view;var ah=function(){$("#no-tracks").show()};if(this.parent_track){ag=this.parent_track;ah=function(){}}ae.Remove=function(){ag.remove_track(af);if(ag.num_tracks===0){ah()}};make_popupmenu(af.name_div,ae)},set_is_overview:function(ae){this.is_overview=ae;this.make_name_popup_menu()},get_overview_tile:function(){var ae=this;view=ae.view,resolution=Math.pow(C,Math.ceil(Math.log((view.max_high-view.max_low)/P)/Math.log(C))),view_width=view.container.width(),w_scale=view_width/(view.max_high-view.max_low),overview_tile=$.Deferred();$.when(ae.data_manager.get_data(view.max_low,view.max_high,"Auto",resolution,ae.data_url_extra_params)).then(function(af){var ah=ae._gen_tile_cache_key(view_width,w_scale,0),aj=ae.tile_cache.get(ah);if(!aj){aj=ae.draw_tile(af,resolution,0,w_scale);ae.tile_cache.set(ah,aj)}var am=$(aj.canvas.find("canvas")),ai=am.clone(),al=am.get(0).getContext("2d"),ag=ai.get(0).getContext("2d"),ak=al.getImageData(0,0,al.canvas.width,al.canvas.height);ag.putImageData(ak,-ae.left_offset,(aj.data.dataset_type==="summary_tree"?R:0));new_tile=new b(-1,resolution,ai);overview_tile.resolve(new_tile)});return overview_tile},_gen_tile_cache_key:function(af,ag,ae){return af+"_"+ag+"_"+ae},request_draw:function(af,ae){this.view.request_redraw(false,af,ae,this)},_draw:function(ag,ap){if(!this.dataset_id){return}var ao=this.view.low,ak=this.view.high,am=ak-ao,ah=this.view.container.width(),at=ah/am,aj=this.view.resolution,ar=$("<div style='position: relative;'></div>");if(!ap){this.content_div.children().remove()}this.content_div.append(ar);this.max_height=0;var af=Math.floor(ao/aj/P);var an=true;var aq=[];var ae=0;while((af*P*aj)<ak){tile=this.draw_helper(ag,ah,af,aj,ar,at);if(tile){aq.push(tile)}else{an=false}af+=1;ae++}var ai=this;if(an){ai.postdraw_actions(aq,ah,at,ap)}for(var al=0;al<this.child_tracks.length;al++){this.child_tracks[al].request_draw(ag,ap)}},postdraw_actions:function(ai,aj,ak,ae){var ag=this;var ah=false;for(var af=0;af<ai.length;af++){if(ai[af].message){ah=true;break}}if(ah){for(var af=0;af<ai.length;af++){tile=ai[af];if(!tile.message){tile.canvas.css("padding-top",D)}}}},draw_helper:function(af,ag,ah,ak,aq,av,ar,al){var ai=this,ap=this._gen_tile_cache_key(ag,av,ah),am=ah*P*ak,au=am+P*ak;var an=(af?undefined:ai.tile_cache.get(ap));if(an){ai.show_tile(an,aq,av);return an}var ao=function(aw){return("isResolved" in aw)};var aj=true;var ae=ai.data_manager.get_data(am,au,ai.mode,ak,ai.data_url_extra_params);if(ao(ae)){aj=false}var at;if(view.reference_track&&av>view.canvas_manager.char_width_px){at=view.reference_track.data_manager.get_data(am,au,ai.mode,ak,view.reference_track.data_url_extra_params);if(ao(at)){aj=false}}if(aj){p(ae,al);var an=ai.draw_tile(ae,ak,ah,av,at);ai.tile_cache.set(ap,an);if(an!==undefined){ai.show_tile(an,aq,av)}return an}$.when(ae,at).then(function(){view.request_redraw()});return null},show_tile:function(al,an,ao){var ag=this,af=al.canvas,ak=af;if(al.message){var ap=$("<div/>"),am=$("<div/>").addClass("tile-message").text(al.message).css({height:D-1,width:al.canvas.width}).appendTo(ap),ai=$("<a href='javascript:void(0);'/>").addClass("icon more-down").appendTo(am),ae=$("<a href='javascript:void(0);'/>").addClass("icon more-across").appendTo(am);ap.append(af);ak=ap;ai.click(function(){al.stale=true;ag.data_manager.get_more_data(al.low,al.high,ag.mode,al.resolution,{},ag.data_manager.DEEP_DATA_REQ);ag.request_draw()}).dblclick(function(aq){aq.stopPropagation()});ae.click(function(){al.stale=true;ag.data_manager.get_more_data(al.low,al.high,ag.mode,al.resolution,{},ag.data_manager.BROAD_DATA_REQ);ag.request_draw()}).dblclick(function(aq){aq.stopPropagation()})}var aj=this.view.high-this.view.low,ah=(al.low-this.view.low)*ao;if(this.left_offset){ah-=this.left_offset}ak.css({position:"absolute",top:0,left:ah,height:""});an.append(ak);ag.max_height=Math.max(ag.max_height,ak.height());ag.content_div.css("height",ag.max_height+"px");an.children().css("height",ag.max_height+"px")},tool_region_and_parameters_str:function(ag,ae,ah){var af=this,ai=(ag!==undefined&&ae!==undefined&&ah!==undefined?ag+":"+ae+"-"+ah:"all");return" - region=["+ai+"], parameters=["+af.tool.get_param_values().join(", ")+"]"},add_track:function(ae){ae.track_id=this.track_id+"_"+this.child_tracks.length;ae.container_div.attr("id","track_"+ae.track_id);this.child_tracks_container.append(ae.container_div);m(ae.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(ae);this.view.has_changes=true},remove_track:function(ae){ae.container_div.fadeOut("slow",function(){$(this).remove()})}});var aa=function(ae,af){this.hidden=true;j.call(this,null,ae,af);this.container_div.addClass("label-track")};p(aa.prototype,j.prototype,{_draw:function(){var ag=this.view,ah=ag.high-ag.low,ak=Math.floor(Math.pow(10,Math.floor(Math.log(ah)/Math.log(10)))),ae=Math.floor(ag.low/ak)*ak,ai=this.view.container.width(),af=$("<div style='position: relative; height: 1.3em;'></div>");while(ae<ag.high){var aj=(ae-ag.low)/ah*ai;af.append($("<div class='label'>"+commatize(ae)+"</div>").css({position:"absolute",left:aj-1}));ae+=ak}this.content_div.children(":first").remove();this.content_div.append(af)}});var A=function(ae){this.hidden=true;j.call(this,null,ae,ae.top_labeltrack);L.call(this);ae.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:ae.dbkey};this.data_manager=new G(B,this,false);this.tile_cache=new c(t)};p(A.prototype,L.prototype,{draw_tile:function(am,aj,af,ao){var ai=this,ag=P*aj;if(ao>this.view.canvas_manager.char_width_px){if(am===null){ai.content_div.css("height","0px");return}var ah=this.view.canvas_manager.new_canvas();var an=ah.getContext("2d");ah.width=Math.ceil(ag*ao+ai.left_offset);ah.height=ai.height_px;an.font=an.canvas.manager.default_font;an.textAlign="center";for(var ak=0,al=am.length;ak<al;ak++){var ae=Math.round(ak*ao);an.fillText(am[ak],ae+ai.left_offset,10)}return new b(af,aj,ah,am)}this.content_div.css("height","0px")}});var k=function(ai,ag,aj,ae,ah){var af=this;this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ai,ag,ag.viewport_container);L.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=aj;this.dataset_id=ae;this.original_dataset_id=ae;this.data_manager=new Q(B,this);this.tile_cache=new c(t);this.track_config=new Y({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ah,onchange:function(){af.vertical_range=af.prefs.max_value-af.prefs.min_value;$("#linetrack_"+af.track_id+"_minval").text(af.prefs.min_value);$("#linetrack_"+af.track_id+"_maxval").text(af.prefs.max_value);af.tile_cache.clear();af.request_draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};p(k.prototype,L.prototype,{add_resize_handle:function(){var ae=this;var ah=false;var ag=false;var af=$("<div class='track-resize'>");$(ae.container_div).hover(function(){ah=true;af.show()},function(){ah=false;if(!ag){af.hide()}});af.hide().bind("dragstart",function(ai,aj){ag=true;aj.original_height=$(ae.content_div).height()}).bind("drag",function(aj,ak){var ai=Math.min(Math.max(ak.original_height+ak.deltaY,ae.min_height_px),ae.max_height_px);$(ae.content_div).css("height",ai);ae.height_px=ai;ae.request_draw(true)}).bind("dragend",function(ai,aj){ae.tile_cache.clear();ag=false;if(!ah){af.hide()}ae.track_config.values.height=ae.height_px}).appendTo(ae.container_div)},predraw_init:function(){var ae=this,af=ae.view.tracks.indexOf(ae);ae.vertical_range=undefined;return $.getJSON(ae.data_url,{stats:true,chrom:ae.view.chrom,low:null,high:null,hda_ldda:ae.hda_ldda,dataset_id:ae.dataset_id},function(ag){ae.container_div.addClass("line-track");var ai=ag.data;if(isNaN(parseFloat(ae.prefs.min_value))||isNaN(parseFloat(ae.prefs.max_value))){ae.prefs.min_value=ai.min;ae.prefs.max_value=ai.max;$("#track_"+af+"_minval").val(ae.prefs.min_value);$("#track_"+af+"_maxval").val(ae.prefs.max_value)}ae.vertical_range=ae.prefs.max_value-ae.prefs.min_value;ae.total_frequency=ai.total_frequency;ae.container_div.find(".yaxislabel").remove();var aj=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+af+"_minval").text(w(ae.prefs.min_value));var ah=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+af+"_maxval").text(w(ae.prefs.max_value));ah.css({position:"absolute",top:"24px",left:"10px"});ah.prependTo(ae.container_div);aj.css({position:"absolute",bottom:"2px",left:"10px"});aj.prependTo(ae.container_div)})},draw_tile:function(ao,ai,af,an){if(this.vertical_range===undefined){return}var aj=af*P*ai,ah=P*ai,ae=Math.ceil(ah*an),al=this.height_px;var ag=this.view.canvas_manager.new_canvas();ag.width=ae,ag.height=al;var am=ag.getContext("2d");var ak=new K.LinePainter(ao.data,aj,aj+ah,this.prefs,this.mode);ak.draw(am,ae,al);return new b(af,ai,ag,ao.data)}});var e=function(ae,aj,ai,am,al,ag,ah,ak){var af=this;this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new Y({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:al,onchange:function(){af.tile_cache.clear();af.request_draw()}});this.prefs=this.track_config.values;j.call(this,ae,aj,aj.viewport_container);L.call(this,ag,ah,ak);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ai;this.dataset_id=am;this.original_dataset_id=am;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_manager=new Q(20,this);this.left_offset=200;this.painter=K.LinkedFeaturePainter};p(e.prototype,L.prototype,{postdraw_actions:function(au,ae,av,at){L.prototype.postdraw_actions.call(this,au,at);var ah=this;if(at){var aj=ah.content_div.children();var ak=false;for(var ai=aj.length-1,ao=0;ai>=ao;ai--){var ag=$(aj[ai]);if(ak){ag.remove()}else{if(ag.children().length!==0){ak=true}}}}if(ah.mode=="Histogram"){var an=-1;for(var ai=0;ai<au.length;ai++){var ar=au[ai].max_val;if(ar>an){an=ar}}for(var ai=0;ai<au.length;ai++){var aq=au[ai];if(aq.max_val!==an){aq.canvas.remove();ah.draw_helper(true,ae,aq.index,aq.resolution,aq.canvas.parent(),av,[],{max:an})}}}if(ah.filters_manager){var af=ah.filters_manager.filters;for(var am=0;am<af.length;am++){af[am].update_ui_elt()}var al=false,ap;for(var ai=0;ai<au.length;ai++){if(au[ai].data.length){ap=au[ai].data[0];for(var am=0;am<af.length;am++){if(af[am].applies_to(ap)){al=true;break}}}}if(ah.filters_available!==al){ah.filters_available=al;if(!ah.filters_available){ah.filters_div.hide()}ah.make_name_popup_menu()}}},update_auto_mode:function(ae){if(this.mode=="Auto"){if(ae=="no_detail"){ae="feature spans"}else{if(ae=="summary_tree"){ae="coverage histogram"}}this.mode_div.text("Auto ("+ae+")")}},incremental_slots:function(ai,af,ah){var ag=this.view.canvas_manager.dummy_context,ae=this.inc_slots[ai];if(!ae||(ae.mode!==ah)){ae=new (r.FeatureSlotter)(ai,ah==="Pack",z,function(aj){return ag.measureText(aj)});ae.mode=ah;this.inc_slots[ai]=ae}return ae.slot_features(af)},get_summary_tree_data:function(ai,al,ag,au){if(au>ag-al){au=ag-al}var ap=Math.floor((ag-al)/au),at=[],ah=0;var aj=0,ak=0,ao,ar=0,am=[],aq,an;var af=function(ax,aw,ay,av){ax[0]=aw+ay*av;ax[1]=aw+(ay+1)*av};while(ar<au&&aj!==ai.length){var ae=false;for(;ar<au&&!ae;ar++){af(am,al,ar,ap);for(ak=aj;ak<ai.length;ak++){ao=ai[ak].slice(1,3);if(is_overlap(ao,am)){ae=true;break}}if(ae){break}}data_start_index=ak;at[at.length]=aq=[am[0],0];for(;ak<ai.length;ak++){ao=ai[ak].slice(1,3);if(is_overlap(ao,am)){aq[1]++}else{break}}if(aq[1]>ah){ah=aq[1]}ar++}return{max:ah,delta:ap,data:at}},draw_tile:function(ar,aA,aE,an,ah){var ax=this,aG=aE*P*aA,af=(aE+1)*P*aA,au=af-aG,ay=Math.ceil(au*an),av=this.mode,aK=25,ai=this.left_offset,at,aj;if(av==="Auto"){if(ar.dataset_type==="summary_tree"){av=ar.dataset_type}else{if(ar.extra_info==="no_detail"){av="no_detail"}else{var aJ=ar.data;if(this.view.high-this.view.low>H){av="Squish"}else{av="Pack"}}}this.update_auto_mode(av)}if(av==="summary_tree"||av==="Histogram"){aj=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var ae=$("<div />").addClass("yaxislabel");ae.text(ar.max);ae.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});ae.prependTo(this.container_div);var ag=this.view.canvas_manager.new_canvas();ag.width=ay+ai;ag.height=aj+R;if(ar.dataset_type!="summary_tree"){var ao=this.get_summary_tree_data(ar.data,aG,af,200);if(ar.max){ao.max=ar.max}ar=ao}var aH=new K.SummaryTreePainter(ar,aG,af,this.prefs);var az=ag.getContext("2d");az.translate(ai,R);aH.draw(az,ay,aj);return new l(aE,aA,ag,ar.data,ar.max)}var at,al=1;if(av==="no_detail"||av==="Squish"||av==="Pack"){al=this.incremental_slots(an,ar.data,av);at=this.inc_slots[an].slots}var am=[];if(ar.data){var ap=this.filters_manager.filters;for(var aB=0,aD=ar.data.length;aB<aD;aB++){var ak=ar.data[aB];var aC=false;var aq;for(var aF=0,aI=ap.length;aF<aI;aF++){aq=ap[aF];aq.update_attrs(ak);if(!aq.keep(ak)){aC=true;break}}if(!aC){am.push(ak)}}}var aw=(this.filters_manager.alpha_filter?new N(this.filters_manager.alpha_filter):null);var aH=new (this.painter)(am,aG,af,this.prefs,av,aw,ah);var aj=Math.max(ac,aH.get_required_height(al));var ag=this.view.canvas_manager.new_canvas();ag.width=ay+ai;ag.height=aj;var az=ag.getContext("2d");az.fillStyle=this.prefs.block_color;az.font=az.canvas.manager.default_font;az.textAlign="right";this.container_div.find(".yaxislabel").remove();if(ar.data){az.translate(ai,0);aH.draw(az,ay,aj,at)}return new O(aE,aA,ag,ar.data,ar.message)}});var S=function(ah,af,aj,ae,ag,ai){e.call(this,ah,af,aj,ae,ag,ai);this.painter=K.VariantPainter};p(S.prototype,L.prototype,e.prototype);var V=function(ah,af,aj,ae,ag,ai){e.call(this,ah,af,aj,ae,ag,ai);this.track_config=new Y({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ag,onchange:function(){this.track.tile_cache.clear();this.track.request_draw()}});this.prefs=this.track_config.values;this.painter=K.ReadPainter;this.make_name_popup_menu()};p(V.prototype,L.prototype,e.prototype);var T=function(ai,ag,ak,ae,ah,aj,af){e.call(this,ai,ag,ak,ae,ah,aj,{},af);this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};p(T.prototype,L.prototype,e.prototype,{predraw_init:function(){var af=this;var ae=function(){if(af.data_manager.size()===0){setTimeout(ae,300)}else{af.data_url=default_data_url;af.data_query_wait=J;af.dataset_state_url=converted_datasets_state_url;$.getJSON(af.dataset_state_url,{dataset_id:af.dataset_id,hda_ldda:af.hda_ldda},function(ag){})}};ae()}});W.View=ab;W.DrawableCollection=y;W.LineTrack=k;W.FeatureTrack=e;W.ReadTrack=V};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(k,x){var u=k("class").extend;var p=function(I,A,G,z,F,D){if(D===undefined){D=4}var C=z-A;var B=F-G;var E=Math.floor(Math.sqrt(C*C+B*B)/D);var J=C/E;var H=B/E;var y;for(y=0;y<E;y++,A+=J,G+=H){if(y%2!==0){continue}I.fillRect(A,G,D,1)}};var q=function(B,A,z,E){var D=A-E/2,C=A+E/2,F=z-Math.sqrt(E*3/2);B.beginPath();B.moveTo(D,F);B.lineTo(C,F);B.lineTo(A,z);B.lineTo(D,F);B.strokeStyle=this.fillStyle;B.fill();B.stroke();B.closePath()};var g=function(y){this.default_alpha=(y?y:1)};g.prototype.gen_alpha=function(y){return this.default_alpha};var n=function(A,C,y,z,B){this.data=A;this.view_start=C;this.view_end=y;this.prefs=u({},this.default_prefs,z);this.mode=B};n.prototype.default_prefs={};var v=function(A,C,y,z,B){n.call(this,A,C,y,z,B)};v.prototype.default_prefs={show_counts:false};v.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(y,C,E,F,A){n.call(this,y,C,E,F,A);if(this.prefs.min_value===undefined){var G=Infinity;for(var z=0,B=this.data.length;z<B;z++){G=Math.min(G,this.data[z][1])}this.prefs.min_value=G}if(this.prefs.max_value===undefined){var D=-Infinity;for(var z=0,B=this.data.length;z<B;z++){D=Math.max(D,this.data[z][1])}this.prefs.max_value=D}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(N,M,K){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,J=D-H,z=K,A=this.view_start,L=this.view_end-this.view_start,B=M/L,I=this.mode,T=this.data;N.save();var U=Math.round(K+H/J*K);if(I!=="Intensity"){N.fillStyle="#aaa";N.fillRect(0,U,M,1)}N.beginPath();var R,E,C;if(T.length>1){C=Math.ceil((T[1][0]-T[0][0])*B)}else{C=10}for(var O=0,P=T.length;O<P;O++){N.fillStyle=this.prefs.color;R=Math.round((T[O][0]-A)*B);E=T[O][1];var Q=false,G=false;if(E===null){if(F&&I==="Filled"){N.lineTo(R,z)}F=false;continue}if(E<H){G=true;E=H}else{if(E>D){Q=true;E=D}}if(I==="Histogram"){E=Math.round(E/J*z);N.fillRect(R,U,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/J*255);N.fillStyle="rgb("+E+","+E+","+E+")";N.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/J*z);if(F){N.lineTo(R,E)}else{F=true;if(I==="Filled"){N.moveTo(R,z);N.lineTo(R,E)}else{N.moveTo(R,E)}}}}N.fillStyle=this.prefs.overflow_color;if(Q||G){var S;if(I==="Histogram"||I==="Intensity"){S=C}else{R-=2;S=4}if(Q){N.fillRect(R,0,S,3)}if(G){N.fillRect(R,z-3,S,3)}}N.fillStyle=this.prefs.color}if(I==="Filled"){if(F){N.lineTo(R,U);N.lineTo(0,U)}N.fill()}else{N.stroke()}N.restore()};var o=function(B,D,y,A,C,z){n.call(this,B,D,y,A,C);this.alpha_generator=(z?z:new g())};o.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};u(o.prototype,{get_required_height:function(z){var y=y_scale=this.get_row_height(),A=this.mode;if(A==="no_detail"||A==="Squish"||A==="Pack"){y=z*y_scale}return y+Math.max(Math.round(y_scale/2),5)},draw:function(K,B,J,G){var E=this.data,H=this.view_start,L=this.view_end;K.save();K.fillStyle=this.prefs.block_color;K.textAlign="right";var O=this.view_end-this.view_start,N=B/O,A=this.get_row_height();for(var D=0,F=E.length;D<F;D++){var M=E[D],C=M[0],y=M[1],z=M[2],I=(G&&G[C]!==undefined?G[C]:null);if((y<L&&z>H)&&(this.mode=="Dense"||I!==null)){this.draw_element(K,this.mode,M,I,H,L,N,A,B)}}K.restore()},draw_element:function(E,A,G,C,B,D,F,z,y){console.log("WARNING: Unimplemented function.")}});var d=10,j=3,m=5,w=10,f=1,s=3,e=3,a=9,l=2,h="#ccc";var r=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(r.prototype,o.prototype,{get_row_height:function(){var z=this.mode,y;if(z==="Dense"){y=d}else{if(z==="no_detail"){y=j}else{if(z==="Squish"){y=m}else{y=w}}}return y},draw_element:function(K,D,S,F,M,ac,ag,ah,y){var P=S[0],ae=S[1],W=S[2],N=S[3],X=Math.floor(Math.max(0,(ae-M)*ag)),L=Math.ceil(Math.min(y,Math.max(0,(W-M)*ag))),V=(D==="Dense"?0:(0+F))*ah,J,aa,O=null,ai=null,B=this.prefs.block_color,Z=this.prefs.label_color;K.globalAlpha=this.alpha_generator.gen_alpha(S);if(D=="Dense"){F=1}if(D==="no_detail"){K.fillStyle=B;K.fillRect(X,V+5,L-X,f)}else{var I=S[4],U=S[5],Y=S[6],C=S[7];if(U&&Y){O=Math.floor(Math.max(0,(U-M)*ag));ai=Math.ceil(Math.min(y,Math.max(0,(Y-M)*ag)))}var af,Q;if(D==="Squish"||D==="Dense"){af=1;Q=e}else{af=5;Q=a}if(!C){if(S.strand){if(S.strand==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(S.strand==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}}else{K.fillStyle=B}K.fillRect(X,V,L-X,Q)}else{var H,R;if(D==="Squish"||D==="Dense"){K.fillStyle=h;H=V+Math.floor(e/2)+1;R=1}else{if(I){var H=V;var R=Q;if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand")}}}else{K.fillStyle=h;H+=(e/2)+1;R=1}}K.fillRect(X,H,L-X,R);for(var ad=0,A=C.length;ad<A;ad++){var E=C[ad],z=Math.floor(Math.max(0,(E[0]-M)*ag)),T=Math.ceil(Math.min(y,Math.max((E[1]-M)*ag)));if(z>T){continue}K.fillStyle=B;K.fillRect(z,V+(Q-af)/2+1,T-z,af);if(O!==undefined&&Y>U&&!(z>ai||T<O)){var ab=Math.max(z,O),G=Math.min(T,ai);K.fillRect(ab,V+1,G-ab,Q);if(C.length==1&&D=="Pack"){if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}if(ab+14<G){ab+=2;G-=2}K.fillRect(ab,V+1,G-ab,Q)}}}}if(D==="Pack"&&ae>M){K.fillStyle=Z;if(M===0&&X-K.measureText(N).width<0){K.textAlign="left";K.fillText(N,L+l,V+8)}else{K.textAlign="right";K.fillText(N,X-l,V+8)}}}K.globalAlpha=1}});var b=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(b.prototype,o.prototype,{draw_element:function(R,M,G,C,U,A,J,S,P){var G=data[i],I=G[0],Q=G[1],B=G[2],L=G[3],E=Math.floor(Math.max(0,(Q-U)*J)),H=Math.ceil(Math.min(P,Math.max(0,(B-U)*J))),D=(M==="Dense"?0:(0+C))*S,y,V,z=null,K=null;if(no_label){R.fillStyle=block_color;R.fillRect(E+left_offset,D+5,H-E,1)}else{var T=G[4],O=G[5],F=G[6];y=9;V=1;R.fillRect(E+left_offset,D,H-E,y);if(M!=="Dense"&&L!==undefined&&Q>U){R.fillStyle=label_color;if(U===0&&E-R.measureText(L).width<0){R.textAlign="left";R.fillText(L,H+2+left_offset,D+8)}else{R.textAlign="right";R.fillText(L,E-2+left_offset,D+8)}R.fillStyle=block_color}var N=T+" / "+O;if(Q>U&&R.measureText(N).width<(H-E)){R.fillStyle="white";R.textAlign="center";R.fillText(N,left_offset+E+(H-E)/2,D+8);R.fillStyle=block_color}}}});var t=function(C,E,y,B,D,z,A){o.call(this,C,E,y,B,D,z);this.ref_seq=A};t.prototype.default_prefs=u({},o.prototype.default_prefs,{show_insertions:false});u(t.prototype,o.prototype,{get_row_height:function(){var y,z=this.mode;if(z==="Dense"){y=d}else{if(z==="Squish"){y=m}else{y=w;if(this.prefs.show_insertions){y*=2}}}return y},draw_read:function(U,P,L,Z,A,T,I,F,E){U.textAlign="center";var S=this,z=[Z,A],O=0,V=0,R=0;ref_seq=this.ref_seq,char_width_px=U.canvas.manager.char_width_px;var ae=[];if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){R=Math.round(L/2)}if(!I){I=[[0,F.length]]}for(var M=0,X=I.length;M<X;M++){var J=I[M],B="MIDNSHP=X"[J[0]],N=J[1];if(B==="H"||B==="S"){O-=N}var G=T+O,ad=Math.floor(Math.max(0,(G-Z)*L)),H=Math.floor(Math.max(0,(G+N-Z)*L));if(ad===H){H+=1}switch(B){case"H":break;case"S":case"M":case"=":if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(R>0){U.fillStyle=this.prefs.block_color;U.fillRect(ad-R,E+1,H-ad,9);U.fillStyle=h;for(var ab=0,y=Q.length;ab<y;ab++){if(this.prefs.show_differences&&ref_seq){var K=ref_seq[G-Z+ab];if(!K||K.toLowerCase()===Q[ab].toLowerCase()){continue}}if(G+ab>=Z&&G+ab<=A){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac,E+9)}}}else{U.fillStyle=this.prefs.block_color;U.fillRect(ad,E+4,H-ad,e)}}V+=N;O+=N;break;case"N":U.fillStyle=h;U.fillRect(ad-R,E+5,H-ad,1);O+=N;break;case"D":U.fillStyle="red";U.fillRect(ad-R,E+4,H-ad,3);O+=N;break;case"P":break;case"I":var Y=ad-R;if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(this.prefs.show_insertions){var D=ad-(H-ad)/2;if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){U.fillStyle="yellow";U.fillRect(D-R,E-9,H-ad,9);ae[ae.length]={type:"triangle",data:[Y,E+4,5]};U.fillStyle=h;switch(seq_tile_overlap){case (OVERLAP_START):Q=Q.slice(Z-G);break;case (OVERLAP_END):Q=Q.slice(0,G-A);break;case (CONTAINED_BY):break;case (CONTAINS):Q=Q.slice(Z-G,G-A);break}for(var ab=0,y=Q.length;ab<y;ab++){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac-(H-ad)/2,E)}}else{U.fillStyle="yellow";U.fillRect(D,E+(this.mode!=="Dense"?2:5),H-ad,(P!=="Dense"?e:s))}}else{if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){ae[ae.length]={type:"text",data:[Q.length,Y,E+9]}}else{}}}V+=N;break;case"X":V+=N;break}}U.fillStyle="yellow";var aa,C,af;for(var W=0;W<ae.length;W++){aa=ae[W];C=aa.type;af=aa.data;if(C==="text"){U.save();U.font="bold "+U.font;U.fillText(af[0],af[1],af[2]);U.restore()}else{if(C=="triangle"){q(U,af[0],af[1],af[2])}}}},draw_element:function(R,M,E,B,U,z,I,S,P){var H=E[0],Q=E[1],A=E[2],J=E[3],D=Math.floor(Math.max(0,(Q-U)*I)),F=Math.ceil(Math.min(P,Math.max(0,(A-U)*I))),C=(M==="Dense"?0:(0+B))*S,V=this.prefs.block_color,G=this.prefs.label_color,O=0;if((M==="Pack"||this.mode==="Auto")&&I>R.canvas.manager.char_width_px){var O=Math.round(I/2)}R.fillStyle=V;if(E[5] instanceof Array){var N=Math.floor(Math.max(0,(E[4][0]-U)*I)),L=Math.ceil(Math.min(P,Math.max(0,(E[4][1]-U)*I))),K=Math.floor(Math.max(0,(E[5][0]-U)*I)),y=Math.ceil(Math.min(P,Math.max(0,(E[5][1]-U)*I)));if(E[4][1]>=U&&E[4][0]<=z&&E[4][2]){this.draw_read(R,M,I,U,z,E[4][0],E[4][2],E[4][3],C)}if(E[5][1]>=U&&E[5][0]<=z&&E[5][2]){this.draw_read(R,M,I,U,z,E[5][0],E[5][2],E[5][3],C)}if(K>L){R.fillStyle=h;p(R,L-O,C+5,K-O,C+5)}}else{R.fillStyle=V;this.draw_read(R,M,I,U,z,Q,E[4],E[5],C)}if(M==="Pack"&&Q>U){R.fillStyle=this.prefs.label_color;var T=1;if(T===0&&D-R.measureText(J).width<0){R.textAlign="left";R.fillText(J,F+l-O,C+8)}else{R.textAlign="right";R.fillText(J,D-l-O,C+8)}R.fillStyle=V}}});x.AlphaGenerator=g;x.SummaryTreePainter=v;x.LinePainter=c;x.LinkedFeaturePainter=r;x.ReadPainter=t;x.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
--- a/static/scripts/trackster.js Fri Aug 26 16:04:53 2011 -0400
+++ b/static/scripts/trackster.js Fri Aug 26 17:45:50 2011 -0400
@@ -143,13 +143,66 @@
// ---- Web UI specific utilities ----
/**
- * Make `element` sortable in parent by dragging `handle` (a selector)
+ * Make `element` moveable within parent and sibling elements by dragging `handle` (a selector).
*/
-var sortable = function( element, handle ) {
+var moveable = function( element, handle, container_selector ) {
+ // HACK: set default value for container selector.
+ container_selector = ".group";
+ var css_border_props = {};
element.bind( "drag", { handle: handle, relative: true }, function ( e, d ) {
- var parent = $(this).parent();
- var children = parent.children();
- var i;
+ var
+ parent = $(this).parent(),
+ children = parent.children(),
+ child,
+ container,
+ top,
+ bottom,
+ i;
+
+ //
+ // Enable three types of dragging: (a) out of container; (b) into container;
+ // (c) sibling movement, aka sorting. Handle in this order for simplicity.
+ //
+
+ // Handle dragging out of container.
+ container = $(this).parents(container_selector);
+ if (container.length !== 0) {
+ top = container.position().top;
+ bottom = top + container.outerHeight();
+ if (d.offsetY < top) {
+ // Moving above container.
+ $(this).insertBefore(container);
+ return;
+ }
+ else if (d.offsetY > bottom) {
+ // Moving below container.
+ $(this).insertAfter(container);
+ return;
+ }
+ }
+
+ // Handle dragging into container.
+ container = null;
+ for ( i = 0; i < children.length; i++ ) {
+ child = $(children.get(i));
+ top = child.position().top;
+ bottom = top + child.outerHeight();
+ // Dragging into container if child is a container and offset is inside container.
+ if ( child.is(container_selector) && this !== child.get(0) &&
+ d.offsetY >= top && d.offsetY <= bottom ) {
+ // Append/prepend based on where offsetY is closest to and return.
+ if (d.offsetY - top < bottom - d.offsetY) {
+ child.find(".content-div").prepend(this);
+ }
+ else {
+ child.find(".content-div").append(this);
+ }
+ return;
+ }
+ }
+
+ // Handle sibling movement, aka sorting.
+
// Determine new position
for ( i = 0; i < children.length; i++ ) {
if ( d.offsetY < $(children.get(i)).position().top ) {
@@ -168,15 +221,19 @@
$(this).insertBefore( children.get(i) );
}
}).bind("dragstart", function() {
+ css_border_props["border-top"] = element.css("border-top");
+ css_border_props["border-bottom"] = element.css("border-bottom");
$(this).css({
"border-top": "1px solid blue",
"border-bottom": "1px solid blue"
});
}).bind("dragend", function() {
- $(this).css("border", "0px");
+ $(this).css(css_border_props);
});
};
-exports.sortable = sortable;
+
+// TODO: do we need to export?
+exports.moveable = moveable;
/**
* Init constants & functions used throughout trackster.
@@ -823,7 +880,7 @@
this.tracks.push(track);
if (track.init) { track.init(); }
track.container_div.attr('id', 'track_' + track.track_id);
- sortable( track.container_div, '.draghandle' );
+ moveable(track.container_div, track.drag_handle);
this.track_id_counter += 1;
this.num_tracks += 1;
this.has_changes = true;
@@ -1756,6 +1813,44 @@
};
/**
+ * Base interface for all drawable objects.
+ * TODO: Tracks should use this interface.
+ */
+var Drawable = function(name, view) {
+ this.name = name;
+ this.view = view;
+ this.parent_element = view.viewport_container;
+};
+
+Drawable.prototype.request_draw = function() {};
+Drawable.prototype.draw = function() {};
+
+/**
+ * A collection of drawable objects.
+ */
+var DrawableCollection = function(name, view) {
+ Drawable.call(this, name, view);
+
+ // Attribute init.
+ this.members = [];
+ this.drag_handle_class = "group-handle";
+
+ // HTML elements.
+ this.container_div = $("<div/>").addClass("group").appendTo(this.parent_element);
+ this.container_div.append($("<div/>").addClass(this.drag_handle_class));
+ this.name_div = $("<div/>").addClass("group-name").text(this.name).appendTo(this.container_div);
+ this.content_div = $("<div/>").addClass("content-div").appendTo(this.container_div);
+};
+extend(DrawableCollection.prototype, Drawable.prototype, {
+ request_draw: function(force, clear_after) {
+
+ },
+ draw: function() {
+
+ }
+});
+
+/**
* Tracks are objects can be added to the View.
*
* Track object hierarchy:
@@ -1780,6 +1875,7 @@
this.data_url_extra_params = {}
this.data_query_wait = (data_query_wait ? data_query_wait : DEFAULT_DATA_QUERY_WAIT);
this.dataset_check_url = converted_datasets_state_url;
+ this.drag_handle_class = "draghandle";
//
// Create HTML element structure for track.
@@ -1787,7 +1883,7 @@
this.container_div = $("<div />").addClass('track').css("position", "relative");
if (!this.hidden) {
this.header_div = $("<div class='track-header' />").appendTo(this.container_div);
- if (this.view.editor) { this.drag_div = $("<div class='draghandle' />").appendTo(this.header_div); }
+ if (this.view.editor) { this.drag_div = $("<div/>").addClass(this.drag_handle_class).appendTo(this.header_div); }
this.name_div = $("<div class='menubutton popup' />").appendTo(this.header_div);
this.name_div.text(this.name);
this.name_div.attr( "id", this.name.replace(/\s+/g,'-').replace(/[^a-zA-Z0-9\-]/g,'').toLowerCase() );
@@ -2399,7 +2495,7 @@
child_track.track_id = this.track_id + "_" + this.child_tracks.length;
child_track.container_div.attr('id', 'track_' + child_track.track_id);
this.child_tracks_container.append(child_track.container_div);
- sortable( child_track.container_div, '.child-track-icon' );
+ moveable( child_track.container_div, '.child-track-icon' );
if (!$(this.child_tracks_container).is(":visible")) {
this.child_tracks_container.show();
}
@@ -3082,6 +3178,7 @@
// Exports
exports.View = View;
+exports.DrawableCollection = DrawableCollection;
exports.LineTrack = LineTrack;
exports.FeatureTrack = FeatureTrack;
exports.ReadTrack = ReadTrack;
--- a/templates/tracks/browser.mako Fri Aug 26 16:04:53 2011 -0400
+++ b/templates/tracks/browser.mako Fri Aug 26 17:45:50 2011 -0400
@@ -197,6 +197,10 @@
$("#viz-actions-button").css( "position", "relative" );
make_popupmenu( $("#viz-actions-button"), {
"Add Tracks": add_tracks,
+ "Add Group": function() {
+ var group = new DrawableCollection("New Group", view);
+ view.add_track(group);
+ },
"Save": function() {
// Show saving dialog box
show_modal("Saving...", "<img src='${h.url_for('/static/images/yui/rel_interstitial_loading.gif')}'/>");
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: greg: Eliminate the code for the long-unused tool shed datatypes.
by Bitbucket 26 Aug '11
by Bitbucket 26 Aug '11
26 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/ef955e304925/
changeset: ef955e304925
user: greg
date: 2011-08-26 22:04:53
summary: Eliminate the code for the long-unused tool shed datatypes.
affected #: 3 files (247 bytes)
--- a/lib/galaxy/webapps/community/app.py Fri Aug 26 15:59:29 2011 -0400
+++ b/lib/galaxy/webapps/community/app.py Fri Aug 26 16:04:53 2011 -0400
@@ -13,8 +13,6 @@
self.config = config.Configuration( **kwargs )
self.config.check()
config.configure_logging( self.config )
- # Set up datatypes registry
- self.datatypes_registry = galaxy.datatypes.registry.Registry( self.config.root, self.config.datatypes_config )
# Determine the database url
if self.config.database_connection:
db_url = self.config.database_connection
--- a/lib/galaxy/webapps/community/config.py Fri Aug 26 15:59:29 2011 -0400
+++ b/lib/galaxy/webapps/community/config.py Fri Aug 26 16:04:53 2011 -0400
@@ -70,7 +70,6 @@
self.screencasts_url = kwargs.get( 'screencasts_url', None )
self.log_events = False
self.cloud_controller_instance = False
- self.datatypes_config = kwargs.get( 'datatypes_config_file', 'datatypes_conf.xml' )
# Proxy features
self.apache_xsendfile = kwargs.get( 'apache_xsendfile', False )
self.nginx_x_accel_redirect_base = kwargs.get( 'nginx_x_accel_redirect_base', False )
--- a/lib/galaxy/webapps/community/datatypes/__init__.py Fri Aug 26 15:59:29 2011 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,196 +0,0 @@
-import sys, logging, tarfile
-from galaxy.util import parse_xml
-from galaxy.util.bunch import Bunch
-
-log = logging.getLogger( __name__ )
-
-if sys.version_info[:2] == ( 2, 4 ):
- from galaxy import eggs
- eggs.require( 'ElementTree' )
- from elementtree import ElementTree
-else:
- from xml.etree import ElementTree
-
-class DatatypeVerificationError( Exception ):
- pass
-
-class Registry( object ):
- def __init__( self, root_dir=None, config=None ):
- self.datatypes_by_extension = {}
- if root_dir and config:
- # Parse datatypes_conf.xml
- tree = parse_xml( config )
- root = tree.getroot()
- # Load datatypes and converters from config
- log.debug( 'Loading datatypes from %s' % config )
- registration = root.find( 'registration' )
- for elem in registration.findall( 'datatype' ):
- try:
- extension = elem.get( 'extension', None )
- dtype = elem.get( 'type', None )
- model_object = elem.get( 'model', None )
- if extension and dtype:
- fields = dtype.split( ':' )
- datatype_module = fields[0]
- datatype_class = fields[1]
- fields = datatype_module.split( '.' )
- module = __import__( fields.pop(0) )
- for mod in fields:
- module = getattr( module, mod )
- self.datatypes_by_extension[extension] = getattr( module, datatype_class )()
- log.debug( 'Loaded datatype: %s' % dtype )
- if model_object:
- model_module, model_class = model_object.split( ':' )
- fields = model_module.split( '.' )
- module = __import__( fields.pop(0) )
- for mod in fields:
- module = getattr( module, mod )
- self.datatypes_by_extension[extension].model_object = getattr( module, model_class )
- log.debug( 'Added model class: %s to datatype: %s' % ( model_class, dtype ) )
- except Exception, e:
- log.warning( 'Error loading datatype "%s", problem: %s' % ( extension, str( e ) ) )
- def get_datatype_by_extension( self, ext ):
- return self.datatypes_by_extension.get( ext, None )
- def get_datatype_extensions( self ):
- rval = []
- for ext, datatype in self.datatypes_by_extension.items():
- rval.append( ext )
- return rval
-
-class Tool( object ):
- def __init__( self, model_object=None ):
- self.model_object = model_object
- self.label = 'Tool'
- def verify( self, f, xml_files=[], tool_tags={} ):
- # xml_files and tool_tags will only be received if we're called from the ToolSuite.verify() method.
- try:
- tar = tarfile.open( f.name )
- except tarfile.ReadError, e:
- raise DatatypeVerificationError( 'Error reading the archive, problem: %s' % str( e ) )
- if not xml_files:
- # Make sure we're not uploading a tool suite
- if filter( lambda x: x.lower().find( 'suite_config.xml' ) >= 0, tar.getnames() ):
- raise DatatypeVerificationError( 'The archive includes a suite_config.xml file, so set the upload type to "Tool Suite".' )
- xml_files = filter( lambda x: x.lower().endswith( '.xml' ), tar.getnames() )
- if not xml_files:
- raise DatatypeVerificationError( 'The archive does not contain any xml config files.' )
- for xml_file in xml_files:
- try:
- tree = ElementTree.parse( tar.extractfile( xml_file ) )
- root = tree.getroot()
- except Exception, e:
- raise DatatypeVerificationError( 'Error parsing file "%s", problem: %s' % ( str( xml_file ), str( e ) ) )
- if root.tag == 'tool':
- if 'id' not in root.keys():
- raise DatatypeVerificationError( "Tool xml file (%s) does not include the required 'id' attribute in the <tool> tag" % str( xml_file ) )
- if 'name' not in root.keys():
- raise DatatypeVerificationError( "Tool xml file (%s) does not include the required 'name' attribute in the <tool> tag" % str( xml_file ) )
- if 'version' not in root.keys():
- raise DatatypeVerificationError( "Tool xml file (%s) does not include the required 'version' attribute in the <tool> tag" % str( xml_file ) )
- if tool_tags:
- # We are verifying the tools inside a tool suite, so the current tag should have been found in the suite_config.xml
- # file parsed in the ToolSuite verify() method. The tool_tags dictionary should include a key matching the current
- # tool Id, and a tuple value matching the tool name and version.
- if root.attrib[ 'id' ] not in tool_tags:
- raise DatatypeVerificationError( 'Tool Id (%s) is not included in the suite_config.xml file.' % \
- ( str( root.attrib[ 'id' ] ) ) )
- tup = tool_tags[ root.attrib[ 'id' ] ]
- if root.attrib[ 'name' ] != tup[ 0 ]:
- raise DatatypeVerificationError( 'Tool name (%s) differs between suite_config.xml and the tool config file for tool Id (%s).' % \
- ( str( root.attrib[ 'name' ] ), str( root.attrib[ 'id' ] ) ) )
- if root.attrib[ 'version' ] != tup[ 1 ]:
- raise DatatypeVerificationError( 'Tool version (%s) differs between suite_config.xml and the tool config file for tool Id (%s).' % \
- ( str( root.attrib[ 'version' ] ), str( root.attrib[ 'id' ] ) ) )
- else:
- # We are not verifying a tool suite, so we'll create a bunch for returning to the caller.
- tool_bunch = Bunch()
- try:
- tool_bunch.id = root.attrib['id']
- tool_bunch.name = root.attrib['name']
- tool_bunch.version = root.attrib['version']
- except KeyError, e:
- raise DatatypeVerificationError( 'Tool XML file does not conform to the specification. Missing required <tool> tag attribute: %s' % str( e ) )
- tool_bunch.description = ''
- desc_tag = root.find( 'description' )
- if desc_tag is not None:
- description = desc_tag.text
- if description:
- tool_bunch.description = description.strip()
- tool_bunch.message = 'Tool: %s %s, Version: %s, Id: %s' % \
- ( str( tool_bunch.name ), str( tool_bunch.description ), str( tool_bunch.version ), str( tool_bunch.id ) )
- return tool_bunch
- else:
- # TODO: should we verify files that are not tool configs?
- log.debug( "The file named (%s) is not a tool config, so skipping verification." % str( xml_file ) )
- def create_model_object( self, datatype_bunch ):
- if self.model_object is None:
- raise Exception( 'No model object configured for %s, check the datatype configuration file' % self.__class__.__name__ )
- if datatype_bunch is None:
- # TODO: do it automatically
- raise Exception( 'Unable to create %s model object without passing in data' % self.__class__.__name__ )
- o = self.model_object()
- o.create_from_datatype( datatype_bunch )
- return o
-
-class ToolSuite( Tool ):
- def __init__( self, model_object=None ):
- self.model_object = model_object
- self.label = 'Tool Suite'
- def verify( self, f ):
- """
- A sample tool suite config:
- <suite id="onto_toolkit" name="ONTO Toolkit" version="1.0">
- <description>ONTO-Toolkit is a collection of Galaxy tools which support the manipulation of bio-ontologies.</description>
- <tool id="get_ancestor_terms" name="Get the ancestor terms of a given OBO term" version="1.0.0">
- <description>Collects the ancestor terms from a given term in the given OBO ontology</description>
- </tool>
- <tool id="get_child_terms" name="Get the child terms of a given OBO term" version="1.0.0">
- <description>Collects the child terms from a given term in the given OBO ontology</description>
- </tool>
- </suite>
- """
- try:
- tar = tarfile.open( f.name )
- except tarfile.ReadError:
- raise DatatypeVerificationError( 'The archive is not a readable tar file.' )
- suite_config = filter( lambda x: x.lower().find( 'suite_config.xml' ) >=0, tar.getnames() )
- if not suite_config:
- raise DatatypeVerificationError( 'The archive does not contain the required suite_config.xml config file. If you are uploading a single tool archive, set the upload type to "Tool".' )
- suite_config = suite_config[ 0 ]
- # Parse and verify suite_config
- archive_ok = False
- try:
- tree = ElementTree.parse( tar.extractfile( suite_config ) )
- root = tree.getroot()
- archive_ok = True
- except:
- log.exception( 'fail:' )
- if archive_ok and root.tag == 'suite':
- suite_bunch = Bunch()
- try:
- suite_bunch.id = root.attrib['id']
- suite_bunch.name = root.attrib['name']
- suite_bunch.version = root.attrib['version']
- except KeyError, e:
- raise DatatypeVerificationError( 'The file named tool-suite.xml does not conform to the specification. Missing required <suite> tag attribute: %s' % str( e ) )
- suite_bunch.description = ''
- desc_tag = root.find( 'description' )
- if desc_tag is not None:
- description = desc_tag.text
- if description:
- suite_bunch.description = description.strip()
- suite_bunch.message = 'Tool suite: %s %s, Version: %s, Id: %s' % \
- ( str( suite_bunch.name ), str( suite_bunch.description ), str( suite_bunch.version ), str( suite_bunch.id ) )
- # Create a dictionary of the tools in the suite where the keys are tool_ids and the
- # values are tuples of tool name and version
- tool_tags = {}
- for elem in root.findall( 'tool' ):
- tool_tags[ elem.attrib['id'] ] = ( elem.attrib['name'], elem.attrib['version'] )
- else:
- raise DatatypeVerificationError( "The file named %s is not a valid tool suite config." % str( suite_config ) )
- # Verify all included tool config files
- xml_files = filter( lambda x: x.lower().endswith( '.xml' ) and x.lower() != 'suite_config.xml', tar.getnames() )
- if not xml_files:
- raise DatatypeVerificationError( 'The archive does not contain any tool config (xml) files.' )
- Tool.verify( self, f, xml_files=xml_files, tool_tags=tool_tags )
- return suite_bunch
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Fix uploading sorted BAMs to libraries when using the link method rather than copying.
by Bitbucket 26 Aug '11
by Bitbucket 26 Aug '11
26 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/4b3fefa396cf/
changeset: 4b3fefa396cf
user: natefoo
date: 2011-08-26 21:59:29
summary: Fix uploading sorted BAMs to libraries when using the link method rather than copying.
affected #: 1 file (36 bytes)
--- a/tools/data_source/upload.py Fri Aug 26 15:53:16 2011 -0400
+++ b/tools/data_source/upload.py Fri Aug 26 15:59:29 2011 -0400
@@ -297,7 +297,7 @@
datatype = registry.get_datatype_by_extension( ext )
if dataset.type in ( 'server_dir', 'path_paste' ) and link_data_only == 'link_to_files':
# Never alter a file that will not be copied to Galaxy's local file store.
- if datatype.dataset_content_needs_grooming( output_path ):
+ if datatype.dataset_content_needs_grooming( dataset.path ):
err_msg = 'The uploaded files need grooming, so change your <b>Copy data into Galaxy?</b> selection to be ' + \
'<b>Copy files into Galaxy</b> instead of <b>Link to files without copying into Galaxy</b> so grooming can be performed.'
file_err( err_msg, dataset, json_file )
@@ -324,7 +324,7 @@
name = dataset.name,
line_count = line_count )
json_file.write( to_json_string( info ) + "\n" )
- if datatype.dataset_content_needs_grooming( output_path ):
+ if link_data_only == 'copy_files' and datatype.dataset_content_needs_grooming( output_path ):
# Groom the dataset content if necessary
datatype.groom_dataset_content( output_path )
def add_composite_file( dataset, registry, json_file, output_path, files_path ):
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/de634a2c3ed0/
changeset: de634a2c3ed0
user: dan
date: 2011-08-26 21:53:16
summary: Add SICER peak caller.
affected #: 28 files (50 bytes)
Diff too large to display.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

26 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/b35bf6a8c11f/
changeset: b35bf6a8c11f
user: natefoo
date: 2011-08-26 19:55:08
summary: API enhancements: Rename the 'contents' controller to 'library_contents', move (some) sanity and security checks to galaxy.web.api.util, add some enhancements to the histories code and some sample scripts for histories.
affected #: 9 files (2.6 KB)
--- a/lib/galaxy/web/api/contents.py Fri Aug 26 10:39:34 2011 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-"""
-API operations on the contents of a library.
-"""
-import logging, os, string, shutil, urllib, re, socket
-from cgi import escape, FieldStorage
-from galaxy import util, datatypes, jobs, web, util
-from galaxy.web.base.controller import *
-from galaxy.util.sanitize_html import sanitize_html
-from galaxy.model.orm import *
-
-log = logging.getLogger( __name__ )
-
-class ContentsController( BaseController ):
-
- @web.expose_api
- def index( self, trans, library_id, **kwd ):
- """
- GET /api/libraries/{encoded_library_id}/contents
- Displays a collection (list) of library contents (files and folders).
- """
- rval = []
- current_user_roles = trans.get_current_user_roles()
- def traverse( folder ):
- admin = trans.user_is_admin()
- rval = []
- for subfolder in folder.active_folders:
- if not admin:
- can_access, folder_ids = trans.app.security_agent.check_folder_contents( trans.user, current_user_roles, subfolder )
- if (admin or can_access) and not subfolder.deleted:
- subfolder.api_path = folder.api_path + '/' + subfolder.name
- subfolder.api_type = 'folder'
- rval.append( subfolder )
- rval.extend( traverse( subfolder ) )
- for ld in folder.datasets:
- if not admin:
- can_access = trans.app.security_agent.can_access_dataset( current_user_roles, ld.library_dataset_dataset_association.dataset )
- if (admin or can_access) and not ld.deleted:
- ld.api_path = folder.api_path + '/' + ld.name
- ld.api_type = 'file'
- rval.append( ld )
- return rval
- try:
- decoded_library_id = trans.security.decode_id( library_id )
- except TypeError:
- trans.response.status = 400
- return "Malformed library id ( %s ) specified, unable to decode." % str( library_id )
- try:
- library = trans.sa_session.query( trans.app.model.Library ).get( decoded_library_id )
- except:
- library = None
- if not library or not ( trans.user_is_admin() or trans.app.security_agent.can_access_library( current_user_roles, library ) ):
- trans.response.status = 400
- return "Invalid library id ( %s ) specified." % str( library_id )
- encoded_id = trans.security.encode_id( 'folder.%s' % library.root_folder.id )
- rval.append( dict( id = encoded_id,
- type = 'folder',
- name = '/',
- url = url_for( 'library_content', library_id=library_id, id=encoded_id ) ) )
- library.root_folder.api_path = ''
- for content in traverse( library.root_folder ):
- encoded_id = trans.security.encode_id( '%s.%s' % ( content.api_type, content.id ) )
- rval.append( dict( id = encoded_id,
- type = content.api_type,
- name = content.api_path,
- url = url_for( 'library_content', library_id=library_id, id=encoded_id, ) ) )
- return rval
-
- @web.expose_api
- def show( self, trans, id, library_id, **kwd ):
- """
- GET /api/libraries/{encoded_library_id}/contents/{encoded_content_type_and_id}
- Displays information about a library content (file or folder).
- """
- content_id = id
- try:
- decoded_type_and_id = trans.security.decode_string_id( content_id )
- content_type, decoded_content_id = decoded_type_and_id.split( '.' )
- except:
- trans.response.status = 400
- return "Malformed content id ( %s ) specified, unable to decode." % str( content_id )
- if content_type == 'folder':
- model_class = trans.app.model.LibraryFolder
- elif content_type == 'file':
- model_class = trans.app.model.LibraryDataset
- else:
- trans.response.status = 400
- return "Invalid type ( %s ) specified." % str( content_type )
- try:
- content = trans.sa_session.query( model_class ).get( decoded_content_id )
- except:
- content = None
- if not content or ( not trans.user_is_admin() and not trans.app.security_agent.can_access_library_item( trans.get_current_user_roles(), content, trans.user ) ):
- trans.response.status = 400
- return "Invalid %s id ( %s ) specified." % ( content_type, str( content_id ) )
- return content.get_api_value( view='element' )
-
- @web.expose_api
- def create( self, trans, library_id, payload, **kwd ):
- """
- POST /api/libraries/{encoded_library_id}/contents
- Creates a new library content item (file or folder).
- """
- create_type = None
- if 'create_type' not in payload:
- trans.response.status = 400
- return "Missing required 'create_type' parameter. Please consult the API documentation for help."
- else:
- create_type = payload.pop( 'create_type' )
- if create_type not in ( 'file', 'folder' ):
- trans.response.status = 400
- return "Invalid value for 'create_type' parameter ( %s ) specified. Please consult the API documentation for help." % create_type
- try:
- content_id = str( payload.pop( 'folder_id' ) )
- decoded_type_and_id = trans.security.decode_string_id( content_id )
- parent_type, decoded_parent_id = decoded_type_and_id.split( '.' )
- assert parent_type in ( 'folder', 'file' )
- except:
- trans.response.status = 400
- return "Malformed parent id ( %s ) specified, unable to decode." % content_id
- # "content" can be either a folder or a file, but the parent of new contents can only be folders.
- if parent_type == 'file':
- trans.response.status = 400
- try:
- # With admins or people who can access the dataset provided as the parent, be descriptive.
- dataset = trans.sa_session.query( trans.app.model.LibraryDataset ).get( decoded_parent_id ).library_dataset_dataset_association.dataset
- assert trans.user_is_admin() or trans.app.security_agent.can_access_dataset( trans.get_current_user_roles(), dataset )
- return "The parent id ( %s ) points to a file, not a folder." % content_id
- except:
- # If you can't access the parent we don't want to reveal its existence.
- return "Invalid parent folder id ( %s ) specified." % content_id
- # The rest of the security happens in the library_common controller.
- folder_id = trans.security.encode_id( decoded_parent_id )
- # Now create the desired content object, either file or folder.
- if create_type == 'file':
- status, output = trans.webapp.controllers['library_common'].upload_library_dataset( trans, 'api', library_id, folder_id, **payload )
- elif create_type == 'folder':
- status, output = trans.webapp.controllers['library_common'].create_folder( trans, 'api', folder_id, library_id, **payload )
- if status != 200:
- trans.response.status = status
- # We don't want to reveal the encoded folder_id since it's invalid
- # in the API context. Instead, return the content_id originally
- # supplied by the client.
- output = output.replace( folder_id, content_id )
- return output
- else:
- rval = []
- for k, v in output.items():
- if type( v ) == trans.app.model.LibraryDatasetDatasetAssociation:
- v = v.library_dataset
- encoded_id = trans.security.encode_id( create_type + '.' + str( v.id ) )
- rval.append( dict( id = encoded_id,
- name = v.name,
- url = url_for( 'library_content', library_id=library_id, id=encoded_id ) ) )
- return rval
--- a/lib/galaxy/web/api/histories.py Fri Aug 26 10:39:34 2011 -0400
+++ b/lib/galaxy/web/api/histories.py Fri Aug 26 13:55:08 2011 -0400
@@ -7,9 +7,9 @@
from galaxy.web.base.controller import *
from galaxy.util.sanitize_html import sanitize_html
from galaxy.model.orm import *
-from galaxy.model import Dataset
import galaxy.datatypes
from galaxy.util.bunch import Bunch
+from galaxy.web.api.util import *
log = logging.getLogger( __name__ )
@@ -21,21 +21,26 @@
GET /api/histories
Displays a collection (list) of histories.
"""
+ rval = []
+
try:
query = trans.sa_session.query( trans.app.model.History ).filter_by( user=trans.user, deleted=False ).order_by(
desc(trans.app.model.History.table.c.update_time)).all()
except Exception, e:
- log.debug("Error in history API: %s" % str(e))
+ rval = "Error in history API"
+ log.error( rval + ": %s" % str(e) )
+ trans.response.status = 500
- rval = []
- try:
- for history in query:
- item = history.get_api_value(value_mapper={'id':trans.security.encode_id})
- item['url'] = url_for( 'history', id=trans.security.encode_id( history.id ) )
- # item['id'] = trans.security.encode_id( item['id'] )
- rval.append( item )
- except Exception, e:
- log.debug("Error in history API at constructing return list: %s" % str(e))
+ if not rval:
+ try:
+ for history in query:
+ item = history.get_api_value(value_mapper={'id':trans.security.encode_id})
+ item['url'] = url_for( 'history', id=trans.security.encode_id( history.id ) )
+ rval.append( item )
+ except Exception, e:
+ rval = "Error in history API at constructing return list"
+ log.error( rval + ": %s" % str(e) )
+ trans.response.status = 500
return rval
@web.expose_api
@@ -49,42 +54,29 @@
def traverse( datasets ):
rval = {}
- states = Dataset.states
+ states = trans.app.model.Dataset.states
for key, state in states.items():
rval[state] = 0
- #log.debug("History API: Init rval %s" % rval)
for dataset in datasets:
item = dataset.get_api_value( view='element' )
- #log.debug("History API: Set rval %s" % item['state'])
if not item['deleted']:
rval[item['state']] = rval[item['state']] + 1
- return rval
+ return rval
try:
- decoded_history_id = trans.security.decode_id( history_id )
- except TypeError:
- trans.response.status = 400
- return "Malformed history id ( %s ) specified, unable to decode." % str( history_id )
- try:
- history = trans.sa_session.query(trans.app.model.History).get(decoded_history_id)
- if history.user != trans.user and not trans.user_is_admin():
- if trans.sa_session.query(trans.app.model.HistoryUserShareAssociation).filter_by(user=trans.user, history=history).count() == 0:
- trans.response.status = 400
- return("History is not owned by or shared with current user")
- except:
- trans.response.status = 400
- return "That history does not exist."
+ history = get_history_for_access( trans, history_id )
+ except Exception, e:
+ return str( e )
try:
item = history.get_api_value(view='element', value_mapper={'id':trans.security.encode_id})
num_sets = len( [hda.id for hda in history.datasets if not hda.deleted] )
- states = Dataset.states
+ states = trans.app.model.Dataset.states
state = states.ERROR
- if num_sets == 0:
+ if num_sets == 0:
state = states.NEW
else:
summary = traverse(history.datasets)
- #log.debug("History API: Status summary %s" % summary)
if summary[states.ERROR] > 0 or summary[states.FAILED_METADATA] > 0:
state = states.ERROR
elif summary[states.RUNNING] > 0 or summary[states.SETTING_METADATA] > 0:
@@ -93,13 +85,13 @@
state = states.QUEUED
elif summary[states.OK] == num_sets:
state = states.OK
- #item['user'] = item['user'].username
item['contents_url'] = url_for( 'history_contents', history_id=history_id )
- #item['datasets'] = len( item['datasets'] )
item['state'] = state
- #log.debug("History API: State %s for %d datasets" % (state, num_sets))
+ item['state_details'] = summary
except Exception, e:
- log.debug("Error in history API at showing history detail: %s" % str(e))
+ item = "Error in history API at showing history detail"
+ log.error(item + ": %s" % str(e))
+ trans.response.status = 500
return item
@web.expose_api
@@ -109,13 +101,16 @@
Creates a new history.
"""
params = util.Params( payload )
- hist_name = util.restore_text( params.get( 'name', None ) )
+ hist_name = None
+ if payload.get( 'name', None ):
+ hist_name = util.restore_text( payload['name'] )
new_history = trans.app.model.History( user=trans.user, name=hist_name )
trans.sa_session.add( new_history )
trans.sa_session.flush()
item = new_history.get_api_value(view='element', value_mapper={'id':trans.security.encode_id})
return item
+
@web.expose_api
def delete( self, trans, id, **kwd ):
"""
@@ -123,33 +118,31 @@
Deletes a history
"""
history_id = id
- params = util.Params( kwd )
+ # a request body is optional here
+ purge = False
+ if kwd.get( 'payload', None ):
+ purge = util.string_as_bool( kwd['payload'].get( 'purge', False ) )
try:
- decoded_history_id = trans.security.decode_id( history_id )
- except TypeError:
- trans.response.status = 400
- return "Malformed history id ( %s ) specified, unable to decode." % str( history_id )
- try:
- history = trans.sa_session.query(trans.app.model.History).get(decoded_history_id)
- if history.user != trans.user and not trans.user_is_admin():
- if trans.sa_session.query(trans.app.model.HistoryUserShareAssociation).filter_by(user=trans.user, history=history).count() == 0:
- trans.response.status = 400
- return("History is not owned by or shared with current user")
- except:
- trans.response.status = 400
- return "That history does not exist."
+ history = get_history_for_modification( trans, history_id )
+ except Exception, e:
+ return str( e )
+
history.deleted = True
- # If deleting the current history, make a new current.
- if history == trans.get_history():
- trans.new_history()
- if trans.app.config.allow_user_dataset_purge:
+ if purge and trans.app.config.allow_user_dataset_purge:
for hda in history.datasets:
+ if hda.purged:
+ continue
hda.purged = True
trans.sa_session.add( hda )
+ trans.sa_session.flush()
if hda.dataset.user_can_purge:
try:
hda.dataset.full_delete()
trans.sa_session.add( hda.dataset )
except:
- trans.sa_session.flush()
+ pass
+ trans.sa_session.flush()
+
+ trans.sa_session.flush()
+ return 'OK'
--- a/lib/galaxy/web/api/history_contents.py Fri Aug 26 10:39:34 2011 -0400
+++ b/lib/galaxy/web/api/history_contents.py Fri Aug 26 13:55:08 2011 -0400
@@ -7,6 +7,7 @@
from galaxy.web.base.controller import *
from galaxy.util.sanitize_html import sanitize_html
from galaxy.model.orm import *
+from galaxy.web.api.util import *
import pkg_resources
pkg_resources.require( "Routes" )
@@ -23,63 +24,36 @@
Displays a collection (list) of history contents
"""
try:
- decoded_history_id = trans.security.decode_id( history_id )
- except TypeError:
- trans.response.status = 400
- return "Malformed history id ( %s ) specified, unable to decode." % str( history_id )
- try:
- history = trans.sa_session.query(trans.app.model.History).get(decoded_history_id)
- if history.user != trans.user and not trans.user_is_admin():
- if trans.sa_session.query(trans.app.model.HistoryUserShareAssociation).filter_by(user=trans.user, history=history).count() == 0:
- trans.response.status = 400
- return("History is not owned by or shared with current user")
- except:
- trans.response.status = 400
- return "That history does not exist."
+ history = get_history_for_access( trans, history_id )
+ except Exception, e:
+ return str( e )
rval = []
try:
for dataset in history.datasets:
api_type = "file"
encoded_id = trans.security.encode_id( '%s.%s' % (api_type, dataset.id) )
- #log.debug("History dataset %s" % str(encoded_id))
rval.append( dict( id = encoded_id,
type = api_type,
name = dataset.name,
url = url_for( 'history_content', history_id=history_id, id=encoded_id, ) ) )
except Exception, e:
- log.debug("Error in history API at listing contents: %s" % str(e))
+ rval = "Error in history API at listing contents"
+ log.error( rval + ": %s" % str(e) )
+ trans.response.status = 500
return rval
@web.expose_api
def show( self, trans, id, history_id, **kwd ):
"""
GET /api/histories/{encoded_history_id}/contents/{encoded_content_type_and_id}
- Displays information about a history content dataset.
+ Displays information about a history content (dataset).
"""
- #log.debug("Entering Content API for history dataset with %s" % str(history_id))
try:
- content_id = id
- try:
- decoded_type_and_id = trans.security.decode_string_id( content_id )
- content_type, decoded_content_id = decoded_type_and_id.split( '.' )
- except:
- trans.response.status = 400
- return "Malformed content id ( %s ) specified, unable to decode." % str( content_id )
- if content_type == 'file':
- model_class = trans.app.model.HistoryDatasetAssociation
- else:
- trans.response.status = 400
- return "Invalid type ( %s ) specified." % str( content_type )
- try:
- content = trans.sa_session.query( model_class ).get( decoded_content_id )
- except:
- trans.response.status = 400
- return "Invalid %s id ( %s ) specified." % ( content_type, str( content_id ) )
- if content.history.user != trans.user and not trans.user_is_admin():
- if trans.sa_session.query(trans.app.model.HistoryUserShareAssociation).filter_by(user=trans.user, history=history).count() == 0:
- trans.response.status = 400
- return("History is not owned by or shared with current user")
+ content = get_history_content_for_access( trans, content_id )
+ except Exception, e:
+ return str( e )
+ try:
item = content.get_api_value( view='element' )
if not item['deleted']:
# Problem: Method url_for cannot use the dataset controller
@@ -87,23 +61,41 @@
url = routes.URLGenerator(trans.webapp.mapper, trans.environ)
# http://routes.groovie.org/generating.html
# url_for is being phased out, so new applications should use url
- item['download_url'] = url(controller='dataset', action='display', dataset_id=trans.security.encode_id(decoded_content_id), to_ext=content.ext)
+ item['download_url'] = url(controller='dataset', action='display', dataset_id=trans.security.encode_id(content.id), to_ext=content.ext)
except Exception, e:
- log.debug("Error in history API at listing dataset: %s" % str(e))
+ item = "Error in history API at listing dataset"
+ log.error( item + ": %s" % str(e) )
+ trans.response.status = 500
return item
@web.expose_api
def create( self, trans, history_id, payload, **kwd ):
"""
POST /api/libraries/{encoded_history_id}/contents
- Creates a new history content item. """
+ Creates a new history content item (file, aka HistoryDatasetAssociation).
+ """
params = util.Params( payload )
- history_id = util.restore_text( params.get( 'history_id', None ) )
- ldda_id = util.restore_text( params.get( 'ldda_id', None ) )
- add_to_history = True
- decoded_history_id = trans.security.decode_id( history_id )
- ld_t, ld_id = trans.security.decode_string_id(ldda_id).split('.')
- history = trans.sa_session.query(trans.app.model.History).get(decoded_history_id)
- ldda = trans.sa_session.query(self.app.model.LibraryDatasetDatasetAssociation).get(ld_id)
- hda = ldda.to_history_dataset_association(history, add_to_history=add_to_history)
- history.add_dataset(hda)
+ from_ld_id = payload.get( 'from_ld_id', None )
+
+ try:
+ history = get_history_for_modification( trans, history_id )
+ except Exception, e:
+ return str( e )
+
+ if from_ld_id:
+ try:
+ ld = get_library_content_for_access( trans, from_ld_id )
+ assert type( ld ) is trans.app.model.LibraryDataset, "Library content id ( %s ) is not a dataset" % from_ld_id
+ except AssertionError, e:
+ trans.response.status = 400
+ return str( e )
+ except Exception, e:
+ return str( e )
+ hda = ld.library_dataset_dataset_association.to_history_dataset_association( history, add_to_history=True )
+ history.add_dataset( hda )
+ trans.sa_session.flush()
+ return hda.get_api_value()
+ else:
+ # TODO: implement other "upload" methods here.
+ trans.response.status = 403
+ return "Not implemented."
--- a/lib/galaxy/web/buildapp.py Fri Aug 26 10:39:34 2011 -0400
+++ b/lib/galaxy/web/buildapp.py Fri Aug 26 13:55:08 2011 -0400
@@ -108,7 +108,7 @@
add_api_controllers( webapp, app )
webapp.api_mapper.resource( 'content',
'contents',
- controller='contents',
+ controller='library_contents',
name_prefix='library_',
path_prefix='/api/libraries/:library_id',
parent_resources=dict( member_name='library', collection_name='libraries' ) )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/81ee8622a9b5/
changeset: 81ee8622a9b5
user: natefoo
date: 2011-08-26 16:39:34
summary: Fix SOAPdenovo binary name
affected #: 1 file (2 bytes)
--- a/tools/ilmn_pacbio/soap_denovo.xml Thu Aug 25 11:37:07 2011 -0400
+++ b/tools/ilmn_pacbio/soap_denovo.xml Fri Aug 26 10:39:34 2011 -0400
@@ -1,12 +1,12 @@
<tool id="soap_denovo" name="SOAPdenovo" version="1.0.0"><description>Short-read de novo assembly</description><!--
- # SOAPdenovo127mer all -s ${soap_config} -o assembly -K ${k} -p 8 -d -D
+ # SOAPdenovo-127mer all -s ${soap_config} -o assembly -K ${k} -p 8 -d -D
# cat ${soap_config} > ${output1}
# cp ${soap_config} ${output1} &&
--><command>
- SOAPdenovo127mer all -s ${soap_config} -o assembly -K ${k} -p 24 -d -D -R
+ SOAPdenovo-127mer all -s ${soap_config} -o assembly -K ${k} -p 24 -d -D -R
</command><inputs><conditional name="inputs">
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: treat numbers as floats when dynamically filtering. Pack scripts.
by Bitbucket 25 Aug '11
by Bitbucket 25 Aug '11
25 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/4f992059bfeb/
changeset: 4f992059bfeb
user: jgoecks
date: 2011-08-25 17:37:07
summary: Trackster: treat numbers as floats when dynamically filtering. Pack scripts.
affected #: 3 files (26 bytes)
--- a/static/scripts/packed/trackster.js Thu Aug 25 11:28:01 2011 -0400
+++ b/static/scripts/packed/trackster.js Thu Aug 25 11:37:07 2011 -0400
@@ -1,1 +1,1 @@
-var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var requestAnimationFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){window.setTimeout(b,1000/60)}})();var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,U){var n=f("class").extend,p=f("slotting"),I=f("painters");var ab=function(ac,ad){this.document=ac;this.default_font=ad!==undefined?ad:"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")};n(ab.prototype,{load_pattern:function(ac,ag){var ad=this.patterns,ae=this.dummy_context,af=new Image();af.src=image_path+ag;af.onload=function(){ad[ac]=ae.createPattern(af,"repeat")}},get_pattern:function(ac){return this.patterns[ac]},new_canvas:function(){var ac=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(ac)}ac.manager=this;return ac}});var C=function(ac,ad){ac.bind("drag",{handle:ad,relative:true},function(ah,ai){var ag=$(this).parent();var af=ag.children();var ae;for(ae=0;ae<af.length;ae++){if(ai.offsetY<$(af.get(ae)).position().top){break}}if(ae===af.length){if(this!==af.get(ae-1)){ag.append(this)}}else{if(this!==af.get(ae)){$(this).insertBefore(af.get(ae))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};U.sortable=C;var aa=16,D=9,A=20,P=D+2,w=100,F=12000,N=200,z=5,s=10,H=5000,t=100,m="There was an error in indexing this dataset. ",G="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",B="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",V="Ready for display",d=10,r=5,y=5;function u(ac){return Math.round(ac*1000)/1000}var c=function(ac){this.num_elements=ac;this.clear()};n(c.prototype,{get:function(ad){var ac=this.key_ary.indexOf(ad);if(ac!==-1){if(this.obj_cache[ad].stale){this.key_ary.splice(ac,1);delete this.obj_cache[ad]}else{this.move_key_to_end(ad,ac)}}return this.obj_cache[ad]},set:function(ad,ae){if(!this.obj_cache[ad]){if(this.key_ary.length>=this.num_elements){var ac=this.key_ary.shift();delete this.obj_cache[ac]}this.key_ary.push(ad)}this.obj_cache[ad]=ae;return ae},move_key_to_end:function(ad,ac){this.key_ary.splice(ac,1);this.key_ary.push(ad)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var O=function(ad,ac,ae){c.call(this,ad);this.track=ac;this.subset=(ae!==undefined?ae:true)};n(O.prototype,c.prototype,{load_data:function(al,ag,aj,ad,ai){var ak=this.track.view.chrom,af={chrom:ak,low:al,high:ag,mode:aj,resolution:ad,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(af,ai);if(this.track.filters_manager){var am=[];var ac=this.track.filters_manager.filters;for(var ah=0;ah<ac.length;ah++){am[am.length]=ac[ah].name}af.filter_cols=JSON.stringify(am)}var ae=this;return $.getJSON(this.track.data_url,af,function(an){ae.set_data(al,ag,aj,an)})},get_data:function(ac,ag,ah,ad,af){var ae=this.get_data_from_cache(ac,ag,ah);if(ae){return ae}ae=this.load_data(ac,ag,ah,ad,af);this.set_data(ac,ag,ah,ae);return ae},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(ak,af,aj,ae,ai,ag){var al=this.get_data_from_cache(ak,af,aj);if(!al){console.log("ERROR: no current data for: ",this.track,ak,af,aj,ae,ai);return}al.stale=true;var ad=ak;if(ag===this.DEEP_DATA_REQ){$.extend(ai,{start_val:al.data.length+1})}else{if(ag===this.BROAD_DATA_REQ){ad=al.data[al.data.length-1][2]+1}}var ac=this,ah=this.load_data(ad,af,aj,ae,ai);new_data_available=$.Deferred();this.set_data(ak,af,aj,new_data_available);$.when(ah).then(function(am){if(am.data){am.data=al.data.concat(am.data);if(am.message){am.message=am.message.replace(/[0-9]+/,am.data.length)}}ac.set_data(ak,af,aj,am);new_data_available.resolve(am)});return new_data_available},get_data_from_cache:function(ac,ad,ae){return this.get(this.gen_key(ac,ad,ae))},set_data:function(ad,ae,af,ac){return this.set(this.gen_key(ad,ae,af),ac)},gen_key:function(ac,ae,af){var ad=ac+"_"+ae+"_"+af;return ad},split_key:function(ac){return ac.split("_")}});var E=function(ad,ac,ae){O.call(this,ad,ac,ae)};n(E.prototype,O.prototype,c.prototype,{load_data:function(ae,ac,ag,ah,ad,af){if(ad>1){return}return O.prototype.load_data.call(this,ae,ac,ag,ah,ad,af)}});var Z=function(ac,af,ae,ad,ag){this.container=ac;this.chrom=null;this.vis_id=ae;this.dbkey=ad;this.title=af;this.tracks=[];this.label_tracks=[];this.tracks_to_be_redrawn=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ag);this.canvas_manager=new ab(ac.get(0).ownerDocument);this.reset()};n(Z.prototype,{init:function(ag){var ae=this.container,ac=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ae);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ae);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ae);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").appendTo(this.viewport_container).hide();var af=$("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function(){add_tracks()});this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var ad=function(ah){if(ah.type==="focusout"||(ah.keyCode||ah.which)===13||(ah.keyCode||ah.which)===27){if((ah.keyCode||ah.which)!==27){ac.go_to($(this).val())}$(this).hide();$(this).val("");ac.location_span.show();ac.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",ad).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.click(function(){ac.location_span.hide();ac.chrom_select.hide();ac.nav_input.val(ac.chrom+":"+ac.low+"-"+ac.high);ac.nav_input.css("display","inline-block");ac.nav_input.select();ac.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){ac.zoom_out();ac.request_redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){ac.zoom_in();ac.request_redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ag);this.chrom_select.bind("change",function(){ac.change_chrom(ac.chrom_select.val())});this.content_div.click(function(ah){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ah){ac.zoom_in(ah.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ah,ai){this.current_x=ai.offsetX}).bind("drag",function(ah,aj){var ak=aj.offsetX-this.current_x;this.current_x=aj.offsetX;var ai=Math.round(ak/ac.viewport_container.width()*(ac.max_high-ac.max_low));ac.move_delta(-ai)});this.overview_close.click(function(){ac.reset_overview()});this.viewport_container.bind("draginit",function(ah,ai){if(ah.clientX>ac.viewport_container.width()-16){return false}}).bind("dragstart",function(ah,ai){ai.original_low=ac.low;ai.current_height=ah.clientY;ai.current_x=ai.offsetX}).bind("drag",function(aj,al){var ah=$(this);var am=al.offsetX-al.current_x;var ai=ah.scrollTop()-(aj.clientY-al.current_height);ah.scrollTop(ai);al.current_height=aj.clientY;al.current_x=al.offsetX;var ak=Math.round(am/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}).bind("mousewheel",function(aj,al,ai,ah){if(ai){var ak=Math.round(-ai/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}});this.top_labeltrack.bind("dragstart",function(ah,ai){return $("<div />").css({height:ac.content_div.height()+ac.top_labeltrack.height()+ac.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(al,am){$(am.proxy).css({left:Math.min(al.pageX,am.startX),width:Math.abs(al.pageX-am.startX)});var ai=Math.min(al.pageX,am.startX)-ac.container.offset().left,ah=Math.max(al.pageX,am.startX)-ac.container.offset().left,ak=(ac.high-ac.low),aj=ac.viewport_container.width();ac.update_location(Math.round(ai/aj*ak)+ac.low,Math.round(ah/aj*ak)+ac.low)}).bind("dragend",function(am,an){var ai=Math.min(am.pageX,an.startX),ah=Math.max(am.pageX,an.startX),ak=(ac.high-ac.low),aj=ac.viewport_container.width(),al=ac.low;ac.low=Math.round(ai/aj*ak)+al;ac.high=Math.round(ah/aj*ak)+al;$(an.proxy).remove();ac.request_redraw()});this.add_label_track(new Y(this,this.top_labeltrack));this.add_label_track(new Y(this,this.nav_labeltrack));$(window).bind("resize",function(){ac.resize_window()});$(document).bind("redraw",function(){ac.redraw()});this.reset();$(window).trigger("resize");this.update_intro_div()},update_intro_div:function(){if(this.num_tracks===0){this.intro_div.show()}else{this.intro_div.hide()}},update_location:function(ac,ad){this.location_span.text(commatize(ac)+" - "+commatize(ad));this.nav_input.val(this.chrom+":"+commatize(ac)+"-"+commatize(ad))},load_chroms:function(ad,ae){ad.num=t;$.extend(ad,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var ac=this;$.ajax({url:chrom_url,data:ad,dataType:"json",success:function(ag){if(ag.chrom_info.length===0){alert("Invalid chromosome: "+ad.chrom);return}if(ag.reference){ac.add_label_track(new x(ac))}ac.chrom_data=ag.chrom_info;var aj='<option value="">Select Chrom/Contig</option>';for(var ai=0,af=ac.chrom_data.length;ai<af;ai++){var ah=ac.chrom_data[ai].chrom;aj+='<option value="'+ah+'">'+ah+"</option>"}if(ag.prev_chroms){aj+='<option value="previous">Previous '+t+"</option>"}if(ag.next_chroms){aj+='<option value="next">Next '+t+"</option>"}ac.chrom_select.html(aj);if(ae){ae()}ac.chrom_start_index=ag.start_index},error:function(){alert("Could not load chroms for this dbkey:",ac.dbkey)}})},change_chrom:function(ag,ad,ai){if(!ag||ag==="None"){return}var af=this;if(ag==="previous"){af.load_chroms({low:this.chrom_start_index-t});return}if(ag==="next"){af.load_chroms({low:this.chrom_start_index+t});return}var ah=$.grep(af.chrom_data,function(ak,al){return ak.chrom===ag})[0];if(ah===undefined){af.load_chroms({chrom:ag},function(){af.change_chrom(ag,ad,ai)});return}else{if(ag!==af.chrom){af.chrom=ag;af.chrom_select.val(af.chrom);af.max_high=ah.len-1;af.reset();af.request_redraw(true);for(var aj=0,ac=af.tracks.length;aj<ac;aj++){var ae=af.tracks[aj];if(ae.init){ae.init()}}}if(ad!==undefined&&ai!==undefined){af.low=Math.max(ad,0);af.high=Math.min(ai,af.max_high)}af.reset_overview();af.request_redraw()}},go_to:function(ag){var ak=this,ac,af,ad=ag.split(":"),ai=ad[0],aj=ad[1];if(aj!==undefined){try{var ah=aj.split("-");ac=parseInt(ah[0].replace(/,/g,""),10);af=parseInt(ah[1].replace(/,/g,""),10)}catch(ae){return false}}ak.change_chrom(ai,ac,af)},move_fraction:function(ae){var ac=this;var ad=ac.high-ac.low;this.move_delta(ae*ad)},move_delta:function(ae){var ac=this;var ad=ac.high-ac.low;if(ac.low-ae<ac.max_low){ac.low=ac.max_low;ac.high=ac.max_low+ad}else{if(ac.high-ae>ac.max_high){ac.high=ac.max_high;ac.low=ac.max_high-ad}else{ac.high-=ae;ac.low-=ae}}ac.request_redraw()},add_track:function(ac){ac.view=this;ac.track_id=this.track_id_counter;this.tracks.push(ac);if(ac.init){ac.init()}ac.container_div.attr("id","track_"+ac.track_id);C(ac.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1;this.update_intro_div()},add_label_track:function(ac){ac.view=this;this.label_tracks.push(ac)},remove_track:function(ad){this.has_changes=true;delete this.tracks[this.tracks.indexOf(ad)];this.num_tracks-=1;var ac=this;ad.container_div.fadeOut("slow",function(){$(this).remove();ac.update_intro_div()})},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},request_redraw:function(ak,ac,aj,ad){var ai=this,ag=(ad?[ad]:ai.tracks),ae;var ad;for(var ah=0;ah<ag.length;ah++){ad=ag[ah];ae=-1;for(var af=0;af<ai.tracks_to_be_redrawn.length;af++){if(ai.tracks_to_be_redrawn[af][0]===ad){ae=af;break}}if(ae<0){ai.tracks_to_be_redrawn.push([ad,ac,aj])}else{ai.tracks_to_be_redrawn[ah][1]=ac;ai.tracks_to_be_redrawn[ah][2]=aj}}requestAnimationFrame(function(){ai._redraw(ak)})},_redraw:function(am){var aj=this.low,af=this.high;if(aj<this.max_low){aj=this.max_low}if(af>this.max_high){af=this.max_high}var al=this.high-this.low;if(this.high!==0&&al<this.min_separation){af=aj+this.min_separation}this.low=Math.floor(aj);this.high=Math.ceil(af);this.resolution=Math.pow(z,Math.ceil(Math.log((this.high-this.low)/N)/Math.log(z)));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var ac=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ai=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var an=13;this.overview_box.css({left:ac,width:Math.max(an,ai)}).show();if(ai<an){this.overview_box.css("left",ac-(an-ai)/2)}if(this.overview_highlight){this.overview_highlight.css({left:ac,width:ai})}this.update_location(this.low,this.high);if(!am){var ae,ad,ak;for(var ag=0,ah=this.tracks_to_be_redrawn.length;ag<ah;ag++){ae=this.tracks_to_be_redrawn[ag][0];ad=this.tracks_to_be_redrawn[ag][1];ak=this.tracks_to_be_redrawn[ag][2];if(ae&&ae.enabled){ae._draw(ad,ak)}}this.tracks_to_be_redrawn=[];for(ag=0,ah=this.label_tracks.length;ag<ah;ag++){this.label_tracks[ag]._draw()}}},zoom_in:function(ad,ae){if(this.max_high===0||this.high-this.low<this.min_separation){return}var af=this.high-this.low,ag=af/2+this.low,ac=(af/this.zoom_factor)/2;if(ad){ag=ad/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ag-ac);this.high=Math.round(ag+ac);this.request_redraw()},zoom_out:function(){if(this.max_high===0){return}var ad=this.high-this.low,ae=ad/2+this.low,ac=(ad*this.zoom_factor)/2;this.low=Math.round(ae-ac);this.high=Math.round(ae+ac);this.request_redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.request_redraw()},set_overview:function(ac){$.when(ac.get_overview_tile()).then(function(ad){view.overview_viewport.find(".track-tile").remove();view.overview_close.show();view.overview_viewport.append(ad.canvas);view.overview_highlight.show().height(ad.canvas.height());view.overview_viewport.height(ad.canvas.height()+view.overview_box.outerHeight());view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=ac;view.has_changes=true;ac.set_is_overview(true)})},reset_overview:function(){this.overview_viewport.find(".track-tile").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide();view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=null}});var o=function(ae,ai){this.track=ae;this.name=ai.name;this.params=[];var ap=ai.params;for(var af=0;af<ap.length;af++){var ak=ap[af],ad=ak.name,ao=ak.label,ag=unescape(ak.html),aq=ak.value,am=ak.type;if(am==="number"){this.params[this.params.length]=new g(ad,ao,ag,aq,ak.min,ak.max)}else{if(am=="select"){this.params[this.params.length]=new K(ad,ao,ag,aq)}else{console.log("WARNING: unrecognized tool parameter type:",ad,am)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(at){at.stopPropagation()}).click(function(at){at.stopPropagation()}).bind("dblclick",function(at){at.stopPropagation()});var an=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var al=this.params;var aj=this;$.each(this.params,function(au,ax){var aw=$("<div>").addClass("param-row").appendTo(aj.parent_div);var at=$("<div>").addClass("param-label").text(ax.label).appendTo(aw);var av=$("<div/>").addClass("slider").html(ax.html).appendTo(aw);av.find(":input").val(ax.value);$("<div style='clear: both;'/>").appendTo(aw)});this.parent_div.find("input").click(function(){$(this).select()});var ar=$("<div>").addClass("param-row").appendTo(this.parent_div);var ah=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ar);var ac=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ar);var aj=this;ac.click(function(){aj.run_on_region()});ah.click(function(){aj.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var ac={};this.parent_div.find(":input").each(function(){var ad=$(this).attr("name"),ae=$(this).val();ac[ad]=JSON.stringify(ae)});return ac},get_param_values:function(){var ad=[];var ac={};this.parent_div.find(":input").each(function(){var ae=$(this).attr("name"),af=$(this).val();if(ae){ad[ad.length]=af}});return ad},run_on_dataset:function(){var ac=this;ac.run({dataset_id:this.track.original_dataset_id,tool_id:ac.name},null,function(ad){show_modal(ac.name+" is Running",ac.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var ac={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ae=this.track,ad=ac.tool_id+ae.tool_region_and_parameters_str(ac.chrom,ac.low,ac.high),af;if(ae instanceof e){af=new R(ad,view,ae.hda_ldda,undefined,{},{},ae);af.change_mode(ae.mode)}this.track.add_track(af);af.content_div.text("Starting job.");this.run(ac,af,function(ag){af.dataset_id=ag.dataset_id;af.content_div.text("Running job.");af.init()})},run:function(ad,ae,af){$.extend(ad,this.get_param_values_dict());var ac=function(){$.getJSON(rerun_tool_url,ad,function(ag){if(ag==="no converter"){ae.container_div.addClass("error");ae.content_div.text(G)}else{if(ag.error){ae.container_div.addClass("error");ae.content_div.text(v+ag.message)}else{if(ag==="pending"){ae.container_div.addClass("pending");ae.content_div.text("Converting input data so that it can be used quickly with tool.");setTimeout(ac,2000)}else{af(ag)}}}})};ac()}});var K=function(ad,ac,ae,af){this.name=ad;this.label=ac;this.html=ae;this.value=af};var g=function(ae,ad,ag,ah,af,ac){K.call(this,ae,ad,ag,ah);this.min=af;this.max=ac};var h=function(ad,ac,ae,af){this.name=ad;this.index=ac;this.tool_id=ae;this.tool_exp_name=af};var S=function(ad,ac,ae,af){h.call(this,ad,ac,ae,af);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.container=null;this.slider=null;this.slider_label=null};n(S.prototype,{applies_to:function(ac){if(ac.length>this.index){return true}return false},keep:function(ac){if(!this.applies_to(ac)){return true}var ad=parseInt(ac[this.index]);return(isNaN(ad)||(ad>=this.low&&ad<=this.high))},update_attrs:function(ad){var ac=false;if(!this.applies_to(ad)){return ac}if(ad[this.index]<this.min){this.min=Math.floor(ad[this.index]);ac=true}if(ad[this.index]>this.max){this.max=Math.ceil(ad[this.index]);ac=true}return ac},update_ui_elt:function(){if(this.min!=this.max){this.container.show()}else{this.container.hide()}var ae=function(ah,af){var ag=af-ah;return(ag<=2?0.01:1)};var ad=this.slider.slider("option","min"),ac=this.slider.slider("option","max");if(this.min<ad||this.max>ac){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ae(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var X=function(am,at){this.track=am;this.filters=[];for(var an=0;an<at.length;an++){var ao=at[an],au=ao.name,ac=ao.type,af=ao.index,ar=ao.tool_id,aq=ao.tool_exp_name;if(ac==="int"||ac==="float"){this.filters[an]=new S(au,af,ar,aq)}else{console.log("ERROR: unsupported filter: ",au,ac)}}var ag=function(av,aw,ax){av.click(function(){var ay=aw.text();max=parseFloat(ax.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ax.slider("option","values")){input_size=2*input_size+1;multi_value=true}aw.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",ay).appendTo(aw).focus().select().click(function(az){az.stopPropagation()}).blur(function(){$(this).remove();aw.text(ay)}).keyup(function(aD){if(aD.keyCode===27){$(this).trigger("blur")}else{if(aD.keyCode===13){var aB=ax.slider("option","min"),az=ax.slider("option","max"),aC=function(aE){return(isNaN(aE)||aE>az||aE<aB)},aA=$(this).val();if(!multi_value){aA=parseFloat(aA);if(aC(aA)){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}else{aA=aA.split("-");aA=[parseFloat(aA[0]),parseFloat(aA[1])];if(aC(aA[0])||aC(aA[1])){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}ax.slider((multi_value?"values":"value"),aA)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(av){av.stopPropagation()}).click(function(av){av.stopPropagation()}).bind("dblclick",function(av){av.stopPropagation()}).bind("keydown",function(av){av.stopPropagation()});var ap=$("<div/>").addClass("sliders").appendTo(this.parent_div);var ak=this;$.each(this.filters,function(ay,aA){aA.container=$("<div/>").addClass("slider-row").appendTo(ap);var az=$("<div/>").addClass("elt-label").appendTo(aA.container);var ax=$("<span/>").addClass("slider-name").text(aA.name+" ").appendTo(az);var aw=$("<span/>");var aC=$("<span/>").addClass("slider-value").appendTo(az).append("[").append(aw).append("]");var av=$("<div/>").addClass("slider").appendTo(aA.container);aA.control_element=$("<div/>").attr("id",aA.name+"-filter-control").appendTo(av);var aB=[0,0];aA.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(aE,aF){var aD=aF.values;aw.text(aD[0]+"-"+aD[1]);aA.low=aD[0];aA.high=aD[1];ak.track.request_draw(true,true)},change:function(aD,aE){aA.control_element.slider("option","slide").call(aA.control_element,aD,aE)}});aA.slider=aA.control_element;aA.slider_label=aw;ag(aC,aw,aA.control_element);$("<div style='clear: both;'/>").appendTo(aA.container)});if(this.filters.length!==0){var ah=$("<div/>").addClass("param-row").appendTo(ap);var aj=$("<input type='submit'/>").attr("value","Run on complete dataset").appendTo(ah);var ae=this;aj.click(function(){ae.run_on_dataset()})}var al=$("<div/>").addClass("display-controls").appendTo(this.parent_div),ai=$("<span/>").addClass("elt-label").text("Transparency:").appendTo(al),ad=$("<select/>").attr("name","alpha_dropdown").appendTo(al);this.alpha_filter=null;$("<option/>").attr("value",-1).text("== None ==").appendTo(ad);for(var an=0;an<this.filters.length;an++){$("<option/>").attr("value",an).text(this.filters[an].name).appendTo(ad)}ad.change(function(){$(this).children("option:selected").each(function(){var av=parseInt($(this).val());ak.alpha_filter=(av>=0?ak.filters[av]:null);ak.track.request_draw(true,true)})});$("<div style='clear: both;'/>").appendTo(this.parent_div)};n(X.prototype,{reset_filters:function(){for(var ac=0;ac<this.filters.length;ac++){filter=this.filters[ac];filter.slider.slider("option","values",[filter.min,filter.max])}this.alpha_filter=null},run_on_dataset:function(){var ak=function(ao,am,an){if(!(am in ao)){ao[am]=an}return ao[am]};var ae={},ac,ad,af;for(var ag=0;ag<this.filters.length;ag++){ac=this.filters[ag];if(ac.tool_id){if(ac.min!=ac.low){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" >= "+ac.low}if(ac.max!=ac.high){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" <= "+ac.high}}}var ai=[];for(var al in ae){ai[ai.length]=[al,ae[al]]}var aj=ai.length;(function ah(at,ap){var an=ap[0],ao=an[0],ar=an[1],aq="("+ar.join(") and (")+")",am={cond:aq,input:at,target_dataset_id:at,tool_id:ao},ap=ap.slice(1);$.getJSON(run_tool_url,am,function(au){if(au.error){show_modal("Filter Dataset","Error running tool "+ao,{Close:hide_modal})}else{if(ap.length===0){show_modal("Filtering Dataset","Filter(s) are running on the complete dataset. Outputs are in dataset's history.",{Close:hide_modal})}else{ah(au.dataset_id,ap)}}})})(this.track.dataset_id,ai)}});var L=function(ad,ac){I.AlphaGenerator.call(this,ac);this.filter=ad};L.prototype.gen_alpha=function(ac){if(this.filter.high===Number.MAX_VALUE||this.filter.low===-Number.MAX_VALUE||this.filter.low===this.filter.high){return this.default_alpha}return((parseFloat(ac[this.filter.index])-this.filter.low)/(this.filter.high-this.filter.low))};var W=function(ac){this.track=ac.track;this.params=ac.params;this.values={};if(ac.saved_values){this.restore_values(ac.saved_values)}this.onchange=ac.onchange};n(W.prototype,{restore_values:function(ac){var ad=this;$.each(this.params,function(ae,af){if(ac[af.key]!==undefined){ad.values[af.key]=ac[af.key]}else{ad.values[af.key]=af.default_value}})},build_form:function(){var ad=this;var ac=$("<div />");$.each(this.params,function(ah,af){if(!af.hidden){var ae="param_"+ah;var am=$("<div class='form-row' />").appendTo(ac);am.append($("<label />").attr("for",ae).text(af.label+":"));if(af.type==="bool"){am.append($('<input type="checkbox" />').attr("id",ae).attr("name",ae).attr("checked",ad.values[af.key]))}else{if(af.type==="color"){var aj=ad.values[af.key];var ai=$("<input />").attr("id",ae).attr("name",ae).val(aj);var ak=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ag=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ak);var al=$("<div/>").appendTo(ag).farbtastic({width:100,height:100,callback:ai,color:aj});$("<div />").append(ai).append(ak).appendTo(am).bind("click",function(an){ak.css({left:$(this).position().left+($(ai).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ak.hide();$(document).unbind("click.color-picker")});an.stopPropagation()})}else{am.append($("<input />").attr("id",ae).attr("name",ae).val(ad.values[af.key]))}}}});return ac},update_from_form:function(ac){var ae=this;var ad=false;$.each(this.params,function(af,ah){if(!ah.hidden){var ai="param_"+af;var ag=ac.find("#"+ai).val();if(ah.type==="float"){ag=parseFloat(ag)}else{if(ah.type==="int"){ag=parseInt(ag)}else{if(ah.type==="bool"){ag=ac.find("#"+ai).is(":checked")}}}if(ag!==ae.values[ah.key]){ae.values[ah.key]=ag;ad=true}}});if(ad){this.onchange()}}});var b=function(ae,ad,ac,af){this.index=ae;this.low=ae*N*ad;this.high=(ae+1)*N*ad;this.resolution=ad;this.canvas=$("<div class='track-tile'/>").append(ac);this.data=af;this.stale=false};var l=function(ae,ad,ac,af,ag){b.call(this,ae,ad,ac,af);this.max_val=ag};var M=function(ae,ad,ac,ag,af){b.call(this,ae,ad,ac,ag);this.message=af};var j=function(ad,ac,ag,ae,af){this.name=ad;this.view=ac;this.parent_element=ag;this.data_url=(ae?ae:default_data_url);this.data_url_extra_params={};this.data_query_wait=(af?af:H);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{get_type:function(){if(this instanceof Y){return"LabelTrack"}else{if(this instanceof x){return"ReferenceTrack"}else{if(this instanceof k){return"LineTrack"}else{if(this instanceof T){return"ReadTrack"}else{if(this instanceof R){return"ToolDataFeatureTrack"}else{if(this instanceof Q){return"VcfTrack"}else{if(this instanceof e){return"FeatureTrack"}}}}}}}return""},init:function(){var ac=this;ac.enabled=false;ac.tile_cache.clear();ac.data_manager.clear();ac.initial_canvas=undefined;ac.content_div.css("height","auto");ac.container_div.removeClass("nodata error pending");if(!ac.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id,chrom:ac.view.chrom},function(ad){if(!ad||ad==="error"||ad.kind==="error"){ac.container_div.addClass("error");ac.content_div.text(m);if(ad.message){var af=ac.view.tracks.indexOf(ac);var ae=$(" <a href='javascript:void(0);'></a>").text("View error").click(function(){show_modal("Trackster Error","<pre>"+ad.message+"</pre>",{Close:hide_modal})});ac.content_div.append(ae)}}else{if(ad==="no converter"){ac.container_div.addClass("error");ac.content_div.text(G)}else{if(ad==="no data"||(ad.data!==undefined&&(ad.data===null||ad.data.length===0))){ac.container_div.addClass("nodata");ac.content_div.text(B)}else{if(ad==="pending"){ac.container_div.addClass("pending");ac.content_div.text(q);setTimeout(function(){ac.init()},ac.data_query_wait)}else{if(ad.status==="data"){if(ad.valid_chroms){ac.valid_chroms=ad.valid_chroms;ac.make_name_popup_menu()}ac.content_div.text(V);if(ac.view.chrom){ac.content_div.text("");ac.content_div.css("height",ac.height_px+"px");ac.enabled=true;$.when(ac.predraw_init()).done(function(){ac.container_div.removeClass("nodata error pending");ac.request_draw()})}}}}}}})},predraw_init:function(){},update_name:function(ac){this.old_name=this.name;this.name=ac;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var J=function(aj,ah,ak){var ad=this,al=ad.view;this.filters_manager=(aj!==undefined?new X(this,aj):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(ah!==undefined&&obj_length(ah)>0?new o(this,ah):undefined);this.is_overview=false;this.parent_track=ak;this.child_tracks=[];if(ad.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}ad.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();ad.container_div.append(ad.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(ad.display_modes!==undefined){if(ad.mode_div===undefined){ad.mode_div=$("<div class='right-float menubutton popup' />").appendTo(ad.header_div);var ae=(ad.track_config&&ad.track_config.values.mode?ad.track_config.values.mode:ad.display_modes[0]);ad.mode=ae;ad.mode_div.text(ae);var ac={};for(var af=0,ai=ad.display_modes.length;af<ai;af++){var ag=ad.display_modes[af];ac[ag]=function(am){return function(){ad.change_mode(am)}}(ag)}make_popupmenu(ad.mode_div,ac)}else{ad.mode_div.hide()}}this.make_name_popup_menu()};n(J.prototype,j.prototype,{change_mode:function(ad){var ac=this;ac.mode_div.text(ad);ac.mode=ad;ac.track_config.values.mode=ad;ac.tile_cache.clear();ac.request_draw()},make_name_popup_menu:function(){var ad=this;var ac={};ac[(this.is_overview?"Hide overview":"Set as overview")]=function(){if(ad.is_overview){ad.view.reset_overview()}else{ad.view.set_overview(ad)}};ac["Edit configuration"]=function(){var aj=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ah=function(){ad.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ai=function(ak){if((ak.keyCode||ak.which)===27){aj()}else{if((ak.keyCode||ak.which)===13){ah()}}};$(window).bind("keypress.check_enter_esc",ai);show_modal("Configure Track",ad.track_config.build_form(),{Cancel:aj,OK:ah})};if(ad.filters_available>0){var ag=(ad.filters_div.is(":visible")?"Hide filters":"Show filters");ac[ag]=function(){ad.filters_visible=(ad.filters_div.is(":visible"));if(ad.filters_visible){ad.filters_manager.reset_filters()}ad.filters_div.toggle();ad.make_name_popup_menu()}}if(ad.tool){var ag=(ad.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");ac[ag]=function(){if(!ad.dynamic_tool_div.is(":visible")){ad.update_name(ad.name+ad.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";ad.revert_name()}ad.dynamic_tool_div.toggle();ad.make_name_popup_menu()}}if(ad.valid_chroms){ac["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+ad.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ae=view;var af=function(){$("#no-tracks").show()};if(this.parent_track){ae=this.parent_track;af=function(){}}ac.Remove=function(){ae.remove_track(ad);if(ae.num_tracks===0){af()}};make_popupmenu(ad.name_div,ac)},set_is_overview:function(ac){this.is_overview=ac;this.make_name_popup_menu()},get_overview_tile:function(){var ac=this;view=ac.view,resolution=Math.pow(z,Math.ceil(Math.log((view.max_high-view.max_low)/N)/Math.log(z))),view_width=view.container.width(),w_scale=view_width/(view.max_high-view.max_low),overview_tile=$.Deferred();$.when(ac.data_manager.get_data(view.max_low,view.max_high,"Auto",resolution,ac.data_url_extra_params)).then(function(ad){var af=ac._gen_tile_cache_key(view_width,w_scale,0),ah=ac.tile_cache.get(af);if(!ah){ah=ac.draw_tile(ad,resolution,0,w_scale);ac.tile_cache.set(af,ah)}var ak=$(ah.canvas.find("canvas")),ag=ak.clone(),aj=ak.get(0).getContext("2d"),ae=ag.get(0).getContext("2d"),ai=aj.getImageData(0,0,aj.canvas.width,aj.canvas.height);ae.putImageData(ai,-ac.left_offset,(ah.data.dataset_type==="summary_tree"?P:0));new_tile=new b(-1,resolution,ag);overview_tile.resolve(new_tile)});return overview_tile},_gen_tile_cache_key:function(ad,ae,ac){return ad+"_"+ae+"_"+ac},request_draw:function(ad,ac){this.view.request_redraw(false,ad,ac,this)},_draw:function(ae,an){if(!this.dataset_id){return}var am=this.view.low,ai=this.view.high,ak=ai-am,af=this.view.container.width(),aq=af/ak,ah=this.view.resolution,ap=$("<div style='position: relative;'></div>");if(!an){this.content_div.children().remove()}this.content_div.append(ap);this.max_height=0;var ad=Math.floor(am/ah/N);var al=true;var ao=[];var ac=0;while((ad*N*ah)<ai){tile=this.draw_helper(ae,af,ad,ah,ap,aq);if(tile){ao.push(tile)}else{al=false}ad+=1;ac++}var ag=this;if(al){ag.postdraw_actions(ao,af,aq,an)}for(var aj=0;aj<this.child_tracks.length;aj++){this.child_tracks[aj].request_draw(ae,an)}},postdraw_actions:function(ag,ah,ai,ac){var ae=this;var af=false;for(var ad=0;ad<ag.length;ad++){if(ag[ad].message){af=true;break}}if(af){for(var ad=0;ad<ag.length;ad++){tile=ag[ad];if(!tile.message){tile.canvas.css("padding-top",A)}}}},draw_helper:function(ad,ae,af,ai,ao,at,ap,aj){var ag=this,an=this._gen_tile_cache_key(ae,at,af),ak=af*N*ai,ar=ak+N*ai;var al=(ad?undefined:ag.tile_cache.get(an));if(al){ag.show_tile(al,ao,at);return al}var am=function(au){return("isResolved" in au)};var ah=true;var ac=ag.data_manager.get_data(ak,ar,ag.mode,ai,ag.data_url_extra_params);if(am(ac)){ah=false}var aq;if(view.reference_track&&at>view.canvas_manager.char_width_px){aq=view.reference_track.data_manager.get_data(ak,ar,ag.mode,ai,view.reference_track.data_url_extra_params);if(am(aq)){ah=false}}if(ah){n(ac,aj);var al=ag.draw_tile(ac,ai,af,at,aq);ag.tile_cache.set(an,al);if(al!==undefined){ag.show_tile(al,ao,at)}return al}$.when(ac,aq).then(function(){view.request_redraw()});return null},show_tile:function(aj,al,am){var ae=this,ad=aj.canvas,ai=ad;if(aj.message){var an=$("<div/>"),ak=$("<div/>").addClass("tile-message").text(aj.message).css({height:A-1,width:aj.canvas.width}).appendTo(an),ag=$("<a href='javascript:void(0);'/>").addClass("icon more-down").appendTo(ak),ac=$("<a href='javascript:void(0);'/>").addClass("icon more-across").appendTo(ak);an.append(ad);ai=an;ag.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.DEEP_DATA_REQ);ae.request_draw()}).dblclick(function(ao){ao.stopPropagation()});ac.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.BROAD_DATA_REQ);ae.request_draw()}).dblclick(function(ao){ao.stopPropagation()})}var ah=this.view.high-this.view.low,af=(aj.low-this.view.low)*am;if(this.left_offset){af-=this.left_offset}ai.css({position:"absolute",top:0,left:af,height:""});al.append(ai);ae.max_height=Math.max(ae.max_height,ai.height());ae.content_div.css("height",ae.max_height+"px");al.children().css("height",ae.max_height+"px")},tool_region_and_parameters_str:function(ae,ac,af){var ad=this,ag=(ae!==undefined&&ac!==undefined&&af!==undefined?ae+":"+ac+"-"+af:"all");return" - region=["+ag+"], parameters=["+ad.tool.get_param_values().join(", ")+"]"},add_track:function(ac){ac.track_id=this.track_id+"_"+this.child_tracks.length;ac.container_div.attr("id","track_"+ac.track_id);this.child_tracks_container.append(ac.container_div);C(ac.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(ac);this.view.has_changes=true},remove_track:function(ac){ac.container_div.fadeOut("slow",function(){$(this).remove()})}});var Y=function(ac,ad){this.hidden=true;j.call(this,null,ac,ad);this.container_div.addClass("label-track")};n(Y.prototype,j.prototype,{_draw:function(){var ae=this.view,af=ae.high-ae.low,ai=Math.floor(Math.pow(10,Math.floor(Math.log(af)/Math.log(10)))),ac=Math.floor(ae.low/ai)*ai,ag=this.view.container.width(),ad=$("<div style='position: relative; height: 1.3em;'></div>");while(ac<ae.high){var ah=(ac-ae.low)/af*ag;ad.append($("<div class='label'>"+commatize(ac)+"</div>").css({position:"absolute",left:ah-1}));ac+=ai}this.content_div.children(":first").remove();this.content_div.append(ad)}});var x=function(ac){this.hidden=true;j.call(this,null,ac,ac.top_labeltrack);J.call(this);ac.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:ac.dbkey};this.data_manager=new E(y,this,false);this.tile_cache=new c(r)};n(x.prototype,J.prototype,{draw_tile:function(ak,ah,ad,am){var ag=this,ae=N*ah;if(am>this.view.canvas_manager.char_width_px){if(ak===null){ag.content_div.css("height","0px");return}var af=this.view.canvas_manager.new_canvas();var al=af.getContext("2d");af.width=Math.ceil(ae*am+ag.left_offset);af.height=ag.height_px;al.font=al.canvas.manager.default_font;al.textAlign="center";for(var ai=0,aj=ak.length;ai<aj;ai++){var ac=Math.round(ai*am);al.fillText(ak[ai],ac+ag.left_offset,10)}return new b(ad,ah,af,ak)}this.content_div.css("height","0px")}});var k=function(ag,ae,ah,ac,af){var ad=this;this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ag,ae,ae.viewport_container);J.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ah;this.dataset_id=ac;this.original_dataset_id=ac;this.data_manager=new O(y,this);this.tile_cache=new c(r);this.track_config=new W({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:af,onchange:function(){ad.vertical_range=ad.prefs.max_value-ad.prefs.min_value;$("#linetrack_"+ad.track_id+"_minval").text(ad.prefs.min_value);$("#linetrack_"+ad.track_id+"_maxval").text(ad.prefs.max_value);ad.tile_cache.clear();ad.request_draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,J.prototype,{add_resize_handle:function(){var ac=this;var af=false;var ae=false;var ad=$("<div class='track-resize'>");$(ac.container_div).hover(function(){af=true;ad.show()},function(){af=false;if(!ae){ad.hide()}});ad.hide().bind("dragstart",function(ag,ah){ae=true;ah.original_height=$(ac.content_div).height()}).bind("drag",function(ah,ai){var ag=Math.min(Math.max(ai.original_height+ai.deltaY,ac.min_height_px),ac.max_height_px);$(ac.content_div).css("height",ag);ac.height_px=ag;ac.request_draw(true)}).bind("dragend",function(ag,ah){ac.tile_cache.clear();ae=false;if(!af){ad.hide()}ac.track_config.values.height=ac.height_px}).appendTo(ac.container_div)},predraw_init:function(){var ac=this,ad=ac.view.tracks.indexOf(ac);ac.vertical_range=undefined;return $.getJSON(ac.data_url,{stats:true,chrom:ac.view.chrom,low:null,high:null,hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id},function(ae){ac.container_div.addClass("line-track");var ag=ae.data;if(isNaN(parseFloat(ac.prefs.min_value))||isNaN(parseFloat(ac.prefs.max_value))){ac.prefs.min_value=ag.min;ac.prefs.max_value=ag.max;$("#track_"+ad+"_minval").val(ac.prefs.min_value);$("#track_"+ad+"_maxval").val(ac.prefs.max_value)}ac.vertical_range=ac.prefs.max_value-ac.prefs.min_value;ac.total_frequency=ag.total_frequency;ac.container_div.find(".yaxislabel").remove();var ah=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_minval").text(u(ac.prefs.min_value));var af=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_maxval").text(u(ac.prefs.max_value));af.css({position:"absolute",top:"24px",left:"10px"});af.prependTo(ac.container_div);ah.css({position:"absolute",bottom:"2px",left:"10px"});ah.prependTo(ac.container_div)})},draw_tile:function(am,ag,ad,al){if(this.vertical_range===undefined){return}var ah=ad*N*ag,af=N*ag,ac=Math.ceil(af*al),aj=this.height_px;var ae=this.view.canvas_manager.new_canvas();ae.width=ac,ae.height=aj;var ak=ae.getContext("2d");var ai=new I.LinePainter(am.data,ah,ah+af,this.prefs,this.mode);ai.draw(ak,ac,aj);return new b(ad,ag,ae,am.data)}});var e=function(ac,ah,ag,ak,aj,ae,af,ai){var ad=this;this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:aj,onchange:function(){ad.tile_cache.clear();ad.request_draw()}});this.prefs=this.track_config.values;j.call(this,ac,ah,ah.viewport_container);J.call(this,ae,af,ai);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ag;this.dataset_id=ak;this.original_dataset_id=ak;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_manager=new O(20,this);this.left_offset=200;this.painter=I.LinkedFeaturePainter};n(e.prototype,J.prototype,{postdraw_actions:function(ar,ac,at,aq){J.prototype.postdraw_actions.call(this,ar,aq);var af=this;if(aq){var ah=af.content_div.children();var ai=false;for(var ag=ah.length-1,am=0;ag>=am;ag--){var ae=$(ah[ag]);if(ai){ae.remove()}else{if(ae.children().length!==0){ai=true}}}}if(af.mode=="Histogram"){var al=-1;for(var ag=0;ag<ar.length;ag++){var ap=ar[ag].max_val;if(ap>al){al=ap}}for(var ag=0;ag<ar.length;ag++){var ao=ar[ag];if(ao.max_val!==al){ao.canvas.remove();af.draw_helper(true,ac,ao.index,ao.resolution,ao.canvas.parent(),at,[],{max:al})}}}if(af.filters_manager){var ad=af.filters_manager.filters;for(var ak=0;ak<ad.length;ak++){ad[ak].update_ui_elt()}var aj=false,an;for(var ag=0;ag<ar.length;ag++){if(ar[ag].data.length){an=ar[ag].data[0];for(var ak=0;ak<ad.length;ak++){if(ad[ak].applies_to(an)){aj=true;break}}}}if(af.filters_available!==aj){af.filters_available=aj;if(!af.filters_available){af.filters_div.hide()}af.make_name_popup_menu()}}},update_auto_mode:function(ac){if(this.mode=="Auto"){if(ac=="no_detail"){ac="feature spans"}else{if(ac=="summary_tree"){ac="coverage histogram"}}this.mode_div.text("Auto ("+ac+")")}},incremental_slots:function(ag,ad,af){var ae=this.view.canvas_manager.dummy_context,ac=this.inc_slots[ag];if(!ac||(ac.mode!==af)){ac=new (p.FeatureSlotter)(ag,af==="Pack",w,function(ah){return ae.measureText(ah)});ac.mode=af;this.inc_slots[ag]=ac}return ac.slot_features(ad)},get_summary_tree_data:function(ag,aj,ae,ar){if(ar>ae-aj){ar=ae-aj}var an=Math.floor((ae-aj)/ar),aq=[],af=0;var ah=0,ai=0,am,ap=0,ak=[],ao,al;var ad=function(av,au,aw,at){av[0]=au+aw*at;av[1]=au+(aw+1)*at};while(ap<ar&&ah!==ag.length){var ac=false;for(;ap<ar&&!ac;ap++){ad(ak,aj,ap,an);for(ai=ah;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ac=true;break}}if(ac){break}}data_start_index=ai;aq[aq.length]=ao=[ak[0],0];for(;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ao[1]++}else{break}}if(ao[1]>af){af=ao[1]}ap++}return{max:af,delta:an,data:aq}},draw_tile:function(ap,ay,aC,al,af){var av=this,aE=aC*N*ay,ad=(aC+1)*N*ay,ar=ad-aE,aw=Math.ceil(ar*al),at=this.mode,aI=25,ag=this.left_offset,aq,ah;if(at==="Auto"){if(ap.dataset_type==="summary_tree"){at=ap.dataset_type}else{if(ap.extra_info==="no_detail"){at="no_detail"}else{var aH=ap.data;if(this.view.high-this.view.low>F){at="Squish"}else{at="Pack"}}}this.update_auto_mode(at)}if(at==="summary_tree"||at==="Histogram"){ah=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var ac=$("<div />").addClass("yaxislabel");ac.text(ap.max);ac.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});ac.prependTo(this.container_div);var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah+P;if(ap.dataset_type!="summary_tree"){var am=this.get_summary_tree_data(ap.data,aE,ad,200);if(ap.max){am.max=ap.max}ap=am}var aF=new I.SummaryTreePainter(ap,aE,ad,this.prefs);var ax=ae.getContext("2d");ax.translate(ag,P);aF.draw(ax,aw,ah);return new l(aC,ay,ae,ap.data,ap.max)}var aq,aj=1;if(at==="no_detail"||at==="Squish"||at==="Pack"){aj=this.incremental_slots(al,ap.data,at);aq=this.inc_slots[al].slots}var ak=[];if(ap.data){var an=this.filters_manager.filters;for(var az=0,aB=ap.data.length;az<aB;az++){var ai=ap.data[az];var aA=false;var ao;for(var aD=0,aG=an.length;aD<aG;aD++){ao=an[aD];ao.update_attrs(ai);if(!ao.keep(ai)){aA=true;break}}if(!aA){ak.push(ai)}}}var au=(this.filters_manager.alpha_filter?new L(this.filters_manager.alpha_filter):null);var aF=new (this.painter)(ak,aE,ad,this.prefs,at,au,af);var ah=Math.max(aa,aF.get_required_height(aj));var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah;var ax=ae.getContext("2d");ax.fillStyle=this.prefs.block_color;ax.font=ax.canvas.manager.default_font;ax.textAlign="right";this.container_div.find(".yaxislabel").remove();if(ap.data){ax.translate(ag,0);aF.draw(ax,aw,ah,aq)}return new M(aC,ay,ae,ap.data,ap.message)}});var Q=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.painter=I.VariantPainter};n(Q.prototype,J.prototype,e.prototype);var T=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ae,onchange:function(){this.track.tile_cache.clear();this.track.request_draw()}});this.prefs=this.track_config.values;this.painter=I.ReadPainter;this.make_name_popup_menu()};n(T.prototype,J.prototype,e.prototype);var R=function(ag,ae,ai,ac,af,ah,ad){e.call(this,ag,ae,ai,ac,af,ah,{},ad);this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(R.prototype,J.prototype,e.prototype,{predraw_init:function(){var ad=this;var ac=function(){if(ad.data_manager.size()===0){setTimeout(ac,300)}else{ad.data_url=default_data_url;ad.data_query_wait=H;ad.dataset_state_url=converted_datasets_state_url;$.getJSON(ad.dataset_state_url,{dataset_id:ad.dataset_id,hda_ldda:ad.hda_ldda},function(ae){})}};ac()}});U.View=Z;U.LineTrack=k;U.FeatureTrack=e;U.ReadTrack=T};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(k,x){var u=k("class").extend;var p=function(I,A,G,z,F,D){if(D===undefined){D=4}var C=z-A;var B=F-G;var E=Math.floor(Math.sqrt(C*C+B*B)/D);var J=C/E;var H=B/E;var y;for(y=0;y<E;y++,A+=J,G+=H){if(y%2!==0){continue}I.fillRect(A,G,D,1)}};var q=function(B,A,z,E){var D=A-E/2,C=A+E/2,F=z-Math.sqrt(E*3/2);B.beginPath();B.moveTo(D,F);B.lineTo(C,F);B.lineTo(A,z);B.lineTo(D,F);B.strokeStyle=this.fillStyle;B.fill();B.stroke();B.closePath()};var g=function(y){this.default_alpha=(y?y:1)};g.prototype.gen_alpha=function(y){return this.default_alpha};var n=function(A,C,y,z,B){this.data=A;this.view_start=C;this.view_end=y;this.prefs=u({},this.default_prefs,z);this.mode=B};n.prototype.default_prefs={};var v=function(A,C,y,z,B){n.call(this,A,C,y,z,B)};v.prototype.default_prefs={show_counts:false};v.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(y,C,E,F,A){n.call(this,y,C,E,F,A);if(this.prefs.min_value===undefined){var G=Infinity;for(var z=0,B=this.data.length;z<B;z++){G=Math.min(G,this.data[z][1])}this.prefs.min_value=G}if(this.prefs.max_value===undefined){var D=-Infinity;for(var z=0,B=this.data.length;z<B;z++){D=Math.max(D,this.data[z][1])}this.prefs.max_value=D}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(N,M,K){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,J=D-H,z=K,A=this.view_start,L=this.view_end-this.view_start,B=M/L,I=this.mode,T=this.data;N.save();var U=Math.round(K+H/J*K);if(I!=="Intensity"){N.fillStyle="#aaa";N.fillRect(0,U,M,1)}N.beginPath();var R,E,C;if(T.length>1){C=Math.ceil((T[1][0]-T[0][0])*B)}else{C=10}for(var O=0,P=T.length;O<P;O++){N.fillStyle=this.prefs.color;R=Math.round((T[O][0]-A)*B);E=T[O][1];var Q=false,G=false;if(E===null){if(F&&I==="Filled"){N.lineTo(R,z)}F=false;continue}if(E<H){G=true;E=H}else{if(E>D){Q=true;E=D}}if(I==="Histogram"){E=Math.round(E/J*z);N.fillRect(R,U,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/J*255);N.fillStyle="rgb("+E+","+E+","+E+")";N.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/J*z);if(F){N.lineTo(R,E)}else{F=true;if(I==="Filled"){N.moveTo(R,z);N.lineTo(R,E)}else{N.moveTo(R,E)}}}}N.fillStyle=this.prefs.overflow_color;if(Q||G){var S;if(I==="Histogram"||I==="Intensity"){S=C}else{R-=2;S=4}if(Q){N.fillRect(R,0,S,3)}if(G){N.fillRect(R,z-3,S,3)}}N.fillStyle=this.prefs.color}if(I==="Filled"){if(F){N.lineTo(R,U);N.lineTo(0,U)}N.fill()}else{N.stroke()}N.restore()};var o=function(B,D,y,A,C,z){n.call(this,B,D,y,A,C);this.alpha_generator=(z?z:new g())};o.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};u(o.prototype,{get_required_height:function(z){var y=y_scale=this.get_row_height(),A=this.mode;if(A==="no_detail"||A==="Squish"||A==="Pack"){y=z*y_scale}return y+Math.max(Math.round(y_scale/2),5)},draw:function(K,B,J,G){var E=this.data,H=this.view_start,L=this.view_end;K.save();K.fillStyle=this.prefs.block_color;K.textAlign="right";var O=this.view_end-this.view_start,N=B/O,A=this.get_row_height();for(var D=0,F=E.length;D<F;D++){var M=E[D],C=M[0],y=M[1],z=M[2],I=(G&&G[C]!==undefined?G[C]:null);if((y<L&&z>H)&&(this.mode=="Dense"||I!==null)){this.draw_element(K,this.mode,M,I,H,L,N,A,B)}}K.restore()},draw_element:function(E,A,G,C,B,D,F,z,y){console.log("WARNING: Unimplemented function.")}});var d=10,j=3,m=5,w=10,f=1,s=3,e=3,a=9,l=2,h="#ccc";var r=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(r.prototype,o.prototype,{get_row_height:function(){var z=this.mode,y;if(z==="Dense"){y=d}else{if(z==="no_detail"){y=j}else{if(z==="Squish"){y=m}else{y=w}}}return y},draw_element:function(K,D,S,F,M,ac,ag,ah,y){var P=S[0],ae=S[1],W=S[2],N=S[3],X=Math.floor(Math.max(0,(ae-M)*ag)),L=Math.ceil(Math.min(y,Math.max(0,(W-M)*ag))),V=(D==="Dense"?0:(0+F))*ah,J,aa,O=null,ai=null,B=this.prefs.block_color,Z=this.prefs.label_color;K.globalAlpha=this.alpha_generator.gen_alpha(S);if(D=="Dense"){F=1}if(D==="no_detail"){K.fillStyle=B;K.fillRect(X,V+5,L-X,f)}else{var I=S[4],U=S[5],Y=S[6],C=S[7];if(U&&Y){O=Math.floor(Math.max(0,(U-M)*ag));ai=Math.ceil(Math.min(y,Math.max(0,(Y-M)*ag)))}var af,Q;if(D==="Squish"||D==="Dense"){af=1;Q=e}else{af=5;Q=a}if(!C){if(S.strand){if(S.strand==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(S.strand==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}}else{K.fillStyle=B}K.fillRect(X,V,L-X,Q)}else{var H,R;if(D==="Squish"||D==="Dense"){K.fillStyle=h;H=V+Math.floor(e/2)+1;R=1}else{if(I){var H=V;var R=Q;if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand")}}}else{K.fillStyle=h;H+=(e/2)+1;R=1}}K.fillRect(X,H,L-X,R);for(var ad=0,A=C.length;ad<A;ad++){var E=C[ad],z=Math.floor(Math.max(0,(E[0]-M)*ag)),T=Math.ceil(Math.min(y,Math.max((E[1]-M)*ag)));if(z>T){continue}K.fillStyle=B;K.fillRect(z,V+(Q-af)/2+1,T-z,af);if(O!==undefined&&Y>U&&!(z>ai||T<O)){var ab=Math.max(z,O),G=Math.min(T,ai);K.fillRect(ab,V+1,G-ab,Q);if(C.length==1&&D=="Pack"){if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}if(ab+14<G){ab+=2;G-=2}K.fillRect(ab,V+1,G-ab,Q)}}}}if(D==="Pack"&&ae>M){K.fillStyle=Z;if(M===0&&X-K.measureText(N).width<0){K.textAlign="left";K.fillText(N,L+l,V+8)}else{K.textAlign="right";K.fillText(N,X-l,V+8)}}}K.globalAlpha=1}});var b=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(b.prototype,o.prototype,{draw_element:function(R,M,G,C,U,A,J,S,P){var G=data[i],I=G[0],Q=G[1],B=G[2],L=G[3],E=Math.floor(Math.max(0,(Q-U)*J)),H=Math.ceil(Math.min(P,Math.max(0,(B-U)*J))),D=(M==="Dense"?0:(0+C))*S,y,V,z=null,K=null;if(no_label){R.fillStyle=block_color;R.fillRect(E+left_offset,D+5,H-E,1)}else{var T=G[4],O=G[5],F=G[6];y=9;V=1;R.fillRect(E+left_offset,D,H-E,y);if(M!=="Dense"&&L!==undefined&&Q>U){R.fillStyle=label_color;if(U===0&&E-R.measureText(L).width<0){R.textAlign="left";R.fillText(L,H+2+left_offset,D+8)}else{R.textAlign="right";R.fillText(L,E-2+left_offset,D+8)}R.fillStyle=block_color}var N=T+" / "+O;if(Q>U&&R.measureText(N).width<(H-E)){R.fillStyle="white";R.textAlign="center";R.fillText(N,left_offset+E+(H-E)/2,D+8);R.fillStyle=block_color}}}});var t=function(C,E,y,B,D,z,A){o.call(this,C,E,y,B,D,z);this.ref_seq=A};t.prototype.default_prefs=u({},o.prototype.default_prefs,{show_insertions:false});u(t.prototype,o.prototype,{get_row_height:function(){var y,z=this.mode;if(z==="Dense"){y=d}else{if(z==="Squish"){y=m}else{y=w;if(this.prefs.show_insertions){y*=2}}}return y},draw_read:function(U,P,L,Z,A,T,I,F,E){U.textAlign="center";var S=this,z=[Z,A],O=0,V=0,R=0;ref_seq=this.ref_seq,char_width_px=U.canvas.manager.char_width_px;var ae=[];if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){R=Math.round(L/2)}if(!I){I=[[0,F.length]]}for(var M=0,X=I.length;M<X;M++){var J=I[M],B="MIDNSHP=X"[J[0]],N=J[1];if(B==="H"||B==="S"){O-=N}var G=T+O,ad=Math.floor(Math.max(0,(G-Z)*L)),H=Math.floor(Math.max(0,(G+N-Z)*L));if(ad===H){H+=1}switch(B){case"H":break;case"S":case"M":case"=":if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(R>0){U.fillStyle=this.prefs.block_color;U.fillRect(ad-R,E+1,H-ad,9);U.fillStyle=h;for(var ab=0,y=Q.length;ab<y;ab++){if(this.prefs.show_differences&&ref_seq){var K=ref_seq[G-Z+ab];if(!K||K.toLowerCase()===Q[ab].toLowerCase()){continue}}if(G+ab>=Z&&G+ab<=A){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac,E+9)}}}else{U.fillStyle=this.prefs.block_color;U.fillRect(ad,E+4,H-ad,e)}}V+=N;O+=N;break;case"N":U.fillStyle=h;U.fillRect(ad-R,E+5,H-ad,1);O+=N;break;case"D":U.fillStyle="red";U.fillRect(ad-R,E+4,H-ad,3);O+=N;break;case"P":break;case"I":var Y=ad-R;if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(this.prefs.show_insertions){var D=ad-(H-ad)/2;if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){U.fillStyle="yellow";U.fillRect(D-R,E-9,H-ad,9);ae[ae.length]={type:"triangle",data:[Y,E+4,5]};U.fillStyle=h;switch(seq_tile_overlap){case (OVERLAP_START):Q=Q.slice(Z-G);break;case (OVERLAP_END):Q=Q.slice(0,G-A);break;case (CONTAINED_BY):break;case (CONTAINS):Q=Q.slice(Z-G,G-A);break}for(var ab=0,y=Q.length;ab<y;ab++){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac-(H-ad)/2,E)}}else{U.fillStyle="yellow";U.fillRect(D,E+(this.mode!=="Dense"?2:5),H-ad,(P!=="Dense"?e:s))}}else{if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){ae[ae.length]={type:"text",data:[Q.length,Y,E+9]}}else{}}}V+=N;break;case"X":V+=N;break}}U.fillStyle="yellow";var aa,C,af;for(var W=0;W<ae.length;W++){aa=ae[W];C=aa.type;af=aa.data;if(C==="text"){U.save();U.font="bold "+U.font;U.fillText(af[0],af[1],af[2]);U.restore()}else{if(C=="triangle"){q(U,af[0],af[1],af[2])}}}},draw_element:function(R,M,E,B,U,z,I,S,P){var H=E[0],Q=E[1],A=E[2],J=E[3],D=Math.floor(Math.max(0,(Q-U)*I)),F=Math.ceil(Math.min(P,Math.max(0,(A-U)*I))),C=(M==="Dense"?0:(0+B))*S,V=this.prefs.block_color,G=this.prefs.label_color,O=0;if((M==="Pack"||this.mode==="Auto")&&I>R.canvas.manager.char_width_px){var O=Math.round(I/2)}R.fillStyle=V;if(E[5] instanceof Array){var N=Math.floor(Math.max(0,(E[4][0]-U)*I)),L=Math.ceil(Math.min(P,Math.max(0,(E[4][1]-U)*I))),K=Math.floor(Math.max(0,(E[5][0]-U)*I)),y=Math.ceil(Math.min(P,Math.max(0,(E[5][1]-U)*I)));if(E[4][1]>=U&&E[4][0]<=z&&E[4][2]){this.draw_read(R,M,I,U,z,E[4][0],E[4][2],E[4][3],C)}if(E[5][1]>=U&&E[5][0]<=z&&E[5][2]){this.draw_read(R,M,I,U,z,E[5][0],E[5][2],E[5][3],C)}if(K>L){R.fillStyle=h;p(R,L-O,C+5,K-O,C+5)}}else{R.fillStyle=V;this.draw_read(R,M,I,U,z,Q,E[4],E[5],C)}if(M==="Pack"&&Q>U){R.fillStyle=this.prefs.label_color;var T=1;if(T===0&&D-R.measureText(J).width<0){R.textAlign="left";R.fillText(J,F+l-O,C+8)}else{R.textAlign="right";R.fillText(J,D-l-O,C+8)}R.fillStyle=V}}});x.AlphaGenerator=g;x.SummaryTreePainter=v;x.LinePainter=c;x.LinkedFeaturePainter=r;x.ReadPainter=t;x.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
+var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var requestAnimationFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){window.setTimeout(b,1000/60)}})();var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,U){var n=f("class").extend,p=f("slotting"),I=f("painters");var ab=function(ac,ad){this.document=ac;this.default_font=ad!==undefined?ad:"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")};n(ab.prototype,{load_pattern:function(ac,ag){var ad=this.patterns,ae=this.dummy_context,af=new Image();af.src=image_path+ag;af.onload=function(){ad[ac]=ae.createPattern(af,"repeat")}},get_pattern:function(ac){return this.patterns[ac]},new_canvas:function(){var ac=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(ac)}ac.manager=this;return ac}});var C=function(ac,ad){ac.bind("drag",{handle:ad,relative:true},function(ah,ai){var ag=$(this).parent();var af=ag.children();var ae;for(ae=0;ae<af.length;ae++){if(ai.offsetY<$(af.get(ae)).position().top){break}}if(ae===af.length){if(this!==af.get(ae-1)){ag.append(this)}}else{if(this!==af.get(ae)){$(this).insertBefore(af.get(ae))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};U.sortable=C;var aa=16,D=9,A=20,P=D+2,w=100,F=12000,N=200,z=5,s=10,H=5000,t=100,m="There was an error in indexing this dataset. ",G="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",B="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",V="Ready for display",d=10,r=5,y=5;function u(ac){return Math.round(ac*1000)/1000}var c=function(ac){this.num_elements=ac;this.clear()};n(c.prototype,{get:function(ad){var ac=this.key_ary.indexOf(ad);if(ac!==-1){if(this.obj_cache[ad].stale){this.key_ary.splice(ac,1);delete this.obj_cache[ad]}else{this.move_key_to_end(ad,ac)}}return this.obj_cache[ad]},set:function(ad,ae){if(!this.obj_cache[ad]){if(this.key_ary.length>=this.num_elements){var ac=this.key_ary.shift();delete this.obj_cache[ac]}this.key_ary.push(ad)}this.obj_cache[ad]=ae;return ae},move_key_to_end:function(ad,ac){this.key_ary.splice(ac,1);this.key_ary.push(ad)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var O=function(ad,ac,ae){c.call(this,ad);this.track=ac;this.subset=(ae!==undefined?ae:true)};n(O.prototype,c.prototype,{load_data:function(al,ag,aj,ad,ai){var ak=this.track.view.chrom,af={chrom:ak,low:al,high:ag,mode:aj,resolution:ad,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(af,ai);if(this.track.filters_manager){var am=[];var ac=this.track.filters_manager.filters;for(var ah=0;ah<ac.length;ah++){am[am.length]=ac[ah].name}af.filter_cols=JSON.stringify(am)}var ae=this;return $.getJSON(this.track.data_url,af,function(an){ae.set_data(al,ag,aj,an)})},get_data:function(ac,ag,ah,ad,af){var ae=this.get_data_from_cache(ac,ag,ah);if(ae){return ae}ae=this.load_data(ac,ag,ah,ad,af);this.set_data(ac,ag,ah,ae);return ae},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(ak,af,aj,ae,ai,ag){var al=this.get_data_from_cache(ak,af,aj);if(!al){console.log("ERROR: no current data for: ",this.track,ak,af,aj,ae,ai);return}al.stale=true;var ad=ak;if(ag===this.DEEP_DATA_REQ){$.extend(ai,{start_val:al.data.length+1})}else{if(ag===this.BROAD_DATA_REQ){ad=al.data[al.data.length-1][2]+1}}var ac=this,ah=this.load_data(ad,af,aj,ae,ai);new_data_available=$.Deferred();this.set_data(ak,af,aj,new_data_available);$.when(ah).then(function(am){if(am.data){am.data=al.data.concat(am.data);if(am.message){am.message=am.message.replace(/[0-9]+/,am.data.length)}}ac.set_data(ak,af,aj,am);new_data_available.resolve(am)});return new_data_available},get_data_from_cache:function(ac,ad,ae){return this.get(this.gen_key(ac,ad,ae))},set_data:function(ad,ae,af,ac){return this.set(this.gen_key(ad,ae,af),ac)},gen_key:function(ac,ae,af){var ad=ac+"_"+ae+"_"+af;return ad},split_key:function(ac){return ac.split("_")}});var E=function(ad,ac,ae){O.call(this,ad,ac,ae)};n(E.prototype,O.prototype,c.prototype,{load_data:function(ae,ac,ag,ah,ad,af){if(ad>1){return}return O.prototype.load_data.call(this,ae,ac,ag,ah,ad,af)}});var Z=function(ac,af,ae,ad,ag){this.container=ac;this.chrom=null;this.vis_id=ae;this.dbkey=ad;this.title=af;this.tracks=[];this.label_tracks=[];this.tracks_to_be_redrawn=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ag);this.canvas_manager=new ab(ac.get(0).ownerDocument);this.reset()};n(Z.prototype,{init:function(ag){var ae=this.container,ac=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ae);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ae);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ae);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").appendTo(this.viewport_container).hide();var af=$("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function(){add_tracks()});this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var ad=function(ah){if(ah.type==="focusout"||(ah.keyCode||ah.which)===13||(ah.keyCode||ah.which)===27){if((ah.keyCode||ah.which)!==27){ac.go_to($(this).val())}$(this).hide();$(this).val("");ac.location_span.show();ac.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",ad).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.click(function(){ac.location_span.hide();ac.chrom_select.hide();ac.nav_input.val(ac.chrom+":"+ac.low+"-"+ac.high);ac.nav_input.css("display","inline-block");ac.nav_input.select();ac.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){ac.zoom_out();ac.request_redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){ac.zoom_in();ac.request_redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ag);this.chrom_select.bind("change",function(){ac.change_chrom(ac.chrom_select.val())});this.content_div.click(function(ah){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ah){ac.zoom_in(ah.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ah,ai){this.current_x=ai.offsetX}).bind("drag",function(ah,aj){var ak=aj.offsetX-this.current_x;this.current_x=aj.offsetX;var ai=Math.round(ak/ac.viewport_container.width()*(ac.max_high-ac.max_low));ac.move_delta(-ai)});this.overview_close.click(function(){ac.reset_overview()});this.viewport_container.bind("draginit",function(ah,ai){if(ah.clientX>ac.viewport_container.width()-16){return false}}).bind("dragstart",function(ah,ai){ai.original_low=ac.low;ai.current_height=ah.clientY;ai.current_x=ai.offsetX}).bind("drag",function(aj,al){var ah=$(this);var am=al.offsetX-al.current_x;var ai=ah.scrollTop()-(aj.clientY-al.current_height);ah.scrollTop(ai);al.current_height=aj.clientY;al.current_x=al.offsetX;var ak=Math.round(am/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}).bind("mousewheel",function(aj,al,ai,ah){if(ai){var ak=Math.round(-ai/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}});this.top_labeltrack.bind("dragstart",function(ah,ai){return $("<div />").css({height:ac.content_div.height()+ac.top_labeltrack.height()+ac.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(al,am){$(am.proxy).css({left:Math.min(al.pageX,am.startX),width:Math.abs(al.pageX-am.startX)});var ai=Math.min(al.pageX,am.startX)-ac.container.offset().left,ah=Math.max(al.pageX,am.startX)-ac.container.offset().left,ak=(ac.high-ac.low),aj=ac.viewport_container.width();ac.update_location(Math.round(ai/aj*ak)+ac.low,Math.round(ah/aj*ak)+ac.low)}).bind("dragend",function(am,an){var ai=Math.min(am.pageX,an.startX),ah=Math.max(am.pageX,an.startX),ak=(ac.high-ac.low),aj=ac.viewport_container.width(),al=ac.low;ac.low=Math.round(ai/aj*ak)+al;ac.high=Math.round(ah/aj*ak)+al;$(an.proxy).remove();ac.request_redraw()});this.add_label_track(new Y(this,this.top_labeltrack));this.add_label_track(new Y(this,this.nav_labeltrack));$(window).bind("resize",function(){ac.resize_window()});$(document).bind("redraw",function(){ac.redraw()});this.reset();$(window).trigger("resize");this.update_intro_div()},update_intro_div:function(){if(this.num_tracks===0){this.intro_div.show()}else{this.intro_div.hide()}},update_location:function(ac,ad){this.location_span.text(commatize(ac)+" - "+commatize(ad));this.nav_input.val(this.chrom+":"+commatize(ac)+"-"+commatize(ad))},load_chroms:function(ad,ae){ad.num=t;$.extend(ad,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var ac=this;$.ajax({url:chrom_url,data:ad,dataType:"json",success:function(ag){if(ag.chrom_info.length===0){alert("Invalid chromosome: "+ad.chrom);return}if(ag.reference){ac.add_label_track(new x(ac))}ac.chrom_data=ag.chrom_info;var aj='<option value="">Select Chrom/Contig</option>';for(var ai=0,af=ac.chrom_data.length;ai<af;ai++){var ah=ac.chrom_data[ai].chrom;aj+='<option value="'+ah+'">'+ah+"</option>"}if(ag.prev_chroms){aj+='<option value="previous">Previous '+t+"</option>"}if(ag.next_chroms){aj+='<option value="next">Next '+t+"</option>"}ac.chrom_select.html(aj);if(ae){ae()}ac.chrom_start_index=ag.start_index},error:function(){alert("Could not load chroms for this dbkey:",ac.dbkey)}})},change_chrom:function(ag,ad,ai){if(!ag||ag==="None"){return}var af=this;if(ag==="previous"){af.load_chroms({low:this.chrom_start_index-t});return}if(ag==="next"){af.load_chroms({low:this.chrom_start_index+t});return}var ah=$.grep(af.chrom_data,function(ak,al){return ak.chrom===ag})[0];if(ah===undefined){af.load_chroms({chrom:ag},function(){af.change_chrom(ag,ad,ai)});return}else{if(ag!==af.chrom){af.chrom=ag;af.chrom_select.val(af.chrom);af.max_high=ah.len-1;af.reset();af.request_redraw(true);for(var aj=0,ac=af.tracks.length;aj<ac;aj++){var ae=af.tracks[aj];if(ae.init){ae.init()}}}if(ad!==undefined&&ai!==undefined){af.low=Math.max(ad,0);af.high=Math.min(ai,af.max_high)}af.reset_overview();af.request_redraw()}},go_to:function(ag){var ak=this,ac,af,ad=ag.split(":"),ai=ad[0],aj=ad[1];if(aj!==undefined){try{var ah=aj.split("-");ac=parseInt(ah[0].replace(/,/g,""),10);af=parseInt(ah[1].replace(/,/g,""),10)}catch(ae){return false}}ak.change_chrom(ai,ac,af)},move_fraction:function(ae){var ac=this;var ad=ac.high-ac.low;this.move_delta(ae*ad)},move_delta:function(ae){var ac=this;var ad=ac.high-ac.low;if(ac.low-ae<ac.max_low){ac.low=ac.max_low;ac.high=ac.max_low+ad}else{if(ac.high-ae>ac.max_high){ac.high=ac.max_high;ac.low=ac.max_high-ad}else{ac.high-=ae;ac.low-=ae}}ac.request_redraw()},add_track:function(ac){ac.view=this;ac.track_id=this.track_id_counter;this.tracks.push(ac);if(ac.init){ac.init()}ac.container_div.attr("id","track_"+ac.track_id);C(ac.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1;this.has_changes=true;this.update_intro_div()},add_label_track:function(ac){ac.view=this;this.label_tracks.push(ac)},remove_track:function(ad){this.has_changes=true;delete this.tracks[this.tracks.indexOf(ad)];this.num_tracks-=1;var ac=this;ad.container_div.fadeOut("slow",function(){$(this).remove();ac.update_intro_div()})},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},request_redraw:function(ak,ac,aj,ad){var ai=this,ag=(ad?[ad]:ai.tracks),ae;var ad;for(var ah=0;ah<ag.length;ah++){ad=ag[ah];ae=-1;for(var af=0;af<ai.tracks_to_be_redrawn.length;af++){if(ai.tracks_to_be_redrawn[af][0]===ad){ae=af;break}}if(ae<0){ai.tracks_to_be_redrawn.push([ad,ac,aj])}else{ai.tracks_to_be_redrawn[ah][1]=ac;ai.tracks_to_be_redrawn[ah][2]=aj}}requestAnimationFrame(function(){ai._redraw(ak)})},_redraw:function(am){var aj=this.low,af=this.high;if(aj<this.max_low){aj=this.max_low}if(af>this.max_high){af=this.max_high}var al=this.high-this.low;if(this.high!==0&&al<this.min_separation){af=aj+this.min_separation}this.low=Math.floor(aj);this.high=Math.ceil(af);this.resolution=Math.pow(z,Math.ceil(Math.log((this.high-this.low)/N)/Math.log(z)));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var ac=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ai=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var an=13;this.overview_box.css({left:ac,width:Math.max(an,ai)}).show();if(ai<an){this.overview_box.css("left",ac-(an-ai)/2)}if(this.overview_highlight){this.overview_highlight.css({left:ac,width:ai})}this.update_location(this.low,this.high);if(!am){var ae,ad,ak;for(var ag=0,ah=this.tracks_to_be_redrawn.length;ag<ah;ag++){ae=this.tracks_to_be_redrawn[ag][0];ad=this.tracks_to_be_redrawn[ag][1];ak=this.tracks_to_be_redrawn[ag][2];if(ae&&ae.enabled){ae._draw(ad,ak)}}this.tracks_to_be_redrawn=[];for(ag=0,ah=this.label_tracks.length;ag<ah;ag++){this.label_tracks[ag]._draw()}}},zoom_in:function(ad,ae){if(this.max_high===0||this.high-this.low<this.min_separation){return}var af=this.high-this.low,ag=af/2+this.low,ac=(af/this.zoom_factor)/2;if(ad){ag=ad/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ag-ac);this.high=Math.round(ag+ac);this.request_redraw()},zoom_out:function(){if(this.max_high===0){return}var ad=this.high-this.low,ae=ad/2+this.low,ac=(ad*this.zoom_factor)/2;this.low=Math.round(ae-ac);this.high=Math.round(ae+ac);this.request_redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.request_redraw()},set_overview:function(ac){$.when(ac.get_overview_tile()).then(function(ad){view.overview_viewport.find(".track-tile").remove();view.overview_close.show();view.overview_viewport.append(ad.canvas);view.overview_highlight.show().height(ad.canvas.height());view.overview_viewport.height(ad.canvas.height()+view.overview_box.outerHeight());view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=ac;ac.set_is_overview(true)});view.has_changes=true},reset_overview:function(){this.overview_viewport.find(".track-tile").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide();view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=null}});var o=function(ae,ai){this.track=ae;this.name=ai.name;this.params=[];var ap=ai.params;for(var af=0;af<ap.length;af++){var ak=ap[af],ad=ak.name,ao=ak.label,ag=unescape(ak.html),aq=ak.value,am=ak.type;if(am==="number"){this.params[this.params.length]=new g(ad,ao,ag,aq,ak.min,ak.max)}else{if(am=="select"){this.params[this.params.length]=new K(ad,ao,ag,aq)}else{console.log("WARNING: unrecognized tool parameter type:",ad,am)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(at){at.stopPropagation()}).click(function(at){at.stopPropagation()}).bind("dblclick",function(at){at.stopPropagation()});var an=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var al=this.params;var aj=this;$.each(this.params,function(au,ax){var aw=$("<div>").addClass("param-row").appendTo(aj.parent_div);var at=$("<div>").addClass("param-label").text(ax.label).appendTo(aw);var av=$("<div/>").addClass("slider").html(ax.html).appendTo(aw);av.find(":input").val(ax.value);$("<div style='clear: both;'/>").appendTo(aw)});this.parent_div.find("input").click(function(){$(this).select()});var ar=$("<div>").addClass("param-row").appendTo(this.parent_div);var ah=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ar);var ac=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ar);var aj=this;ac.click(function(){aj.run_on_region()});ah.click(function(){aj.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var ac={};this.parent_div.find(":input").each(function(){var ad=$(this).attr("name"),ae=$(this).val();ac[ad]=JSON.stringify(ae)});return ac},get_param_values:function(){var ad=[];var ac={};this.parent_div.find(":input").each(function(){var ae=$(this).attr("name"),af=$(this).val();if(ae){ad[ad.length]=af}});return ad},run_on_dataset:function(){var ac=this;ac.run({dataset_id:this.track.original_dataset_id,tool_id:ac.name},null,function(ad){show_modal(ac.name+" is Running",ac.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var ac={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ae=this.track,ad=ac.tool_id+ae.tool_region_and_parameters_str(ac.chrom,ac.low,ac.high),af;if(ae instanceof e){af=new R(ad,view,ae.hda_ldda,undefined,{},{},ae);af.change_mode(ae.mode)}this.track.add_track(af);af.content_div.text("Starting job.");this.run(ac,af,function(ag){af.dataset_id=ag.dataset_id;af.content_div.text("Running job.");af.init()})},run:function(ad,ae,af){$.extend(ad,this.get_param_values_dict());var ac=function(){$.getJSON(rerun_tool_url,ad,function(ag){if(ag==="no converter"){ae.container_div.addClass("error");ae.content_div.text(G)}else{if(ag.error){ae.container_div.addClass("error");ae.content_div.text(v+ag.message)}else{if(ag==="pending"){ae.container_div.addClass("pending");ae.content_div.text("Converting input data so that it can be used quickly with tool.");setTimeout(ac,2000)}else{af(ag)}}}})};ac()}});var K=function(ad,ac,ae,af){this.name=ad;this.label=ac;this.html=ae;this.value=af};var g=function(ae,ad,ag,ah,af,ac){K.call(this,ae,ad,ag,ah);this.min=af;this.max=ac};var h=function(ad,ac,ae,af){this.name=ad;this.index=ac;this.tool_id=ae;this.tool_exp_name=af};var S=function(ad,ac,ae,af){h.call(this,ad,ac,ae,af);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.container=null;this.slider=null;this.slider_label=null};n(S.prototype,{applies_to:function(ac){if(ac.length>this.index){return true}return false},keep:function(ac){if(!this.applies_to(ac)){return true}var ad=parseFloat(ac[this.index]);return(isNaN(ad)||(ad>=this.low&&ad<=this.high))},update_attrs:function(ad){var ac=false;if(!this.applies_to(ad)){return ac}if(ad[this.index]<this.min){this.min=Math.floor(ad[this.index]);ac=true}if(ad[this.index]>this.max){this.max=Math.ceil(ad[this.index]);ac=true}return ac},update_ui_elt:function(){if(this.min!=this.max){this.container.show()}else{this.container.hide()}var ae=function(ah,af){var ag=af-ah;return(ag<=2?0.01:1)};var ad=this.slider.slider("option","min"),ac=this.slider.slider("option","max");if(this.min<ad||this.max>ac){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ae(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var X=function(am,at){this.track=am;this.filters=[];for(var an=0;an<at.length;an++){var ao=at[an],au=ao.name,ac=ao.type,af=ao.index,ar=ao.tool_id,aq=ao.tool_exp_name;if(ac==="int"||ac==="float"){this.filters[an]=new S(au,af,ar,aq)}else{console.log("ERROR: unsupported filter: ",au,ac)}}var ag=function(av,aw,ax){av.click(function(){var ay=aw.text();max=parseFloat(ax.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ax.slider("option","values")){input_size=2*input_size+1;multi_value=true}aw.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",ay).appendTo(aw).focus().select().click(function(az){az.stopPropagation()}).blur(function(){$(this).remove();aw.text(ay)}).keyup(function(aD){if(aD.keyCode===27){$(this).trigger("blur")}else{if(aD.keyCode===13){var aB=ax.slider("option","min"),az=ax.slider("option","max"),aC=function(aE){return(isNaN(aE)||aE>az||aE<aB)},aA=$(this).val();if(!multi_value){aA=parseFloat(aA);if(aC(aA)){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}else{aA=aA.split("-");aA=[parseFloat(aA[0]),parseFloat(aA[1])];if(aC(aA[0])||aC(aA[1])){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}ax.slider((multi_value?"values":"value"),aA)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(av){av.stopPropagation()}).click(function(av){av.stopPropagation()}).bind("dblclick",function(av){av.stopPropagation()}).bind("keydown",function(av){av.stopPropagation()});var ap=$("<div/>").addClass("sliders").appendTo(this.parent_div);var ak=this;$.each(this.filters,function(ay,aA){aA.container=$("<div/>").addClass("slider-row").appendTo(ap);var az=$("<div/>").addClass("elt-label").appendTo(aA.container);var ax=$("<span/>").addClass("slider-name").text(aA.name+" ").appendTo(az);var aw=$("<span/>");var aC=$("<span/>").addClass("slider-value").appendTo(az).append("[").append(aw).append("]");var av=$("<div/>").addClass("slider").appendTo(aA.container);aA.control_element=$("<div/>").attr("id",aA.name+"-filter-control").appendTo(av);var aB=[0,0];aA.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(aE,aF){var aD=aF.values;aw.text(aD[0]+"-"+aD[1]);aA.low=aD[0];aA.high=aD[1];ak.track.request_draw(true,true)},change:function(aD,aE){aA.control_element.slider("option","slide").call(aA.control_element,aD,aE)}});aA.slider=aA.control_element;aA.slider_label=aw;ag(aC,aw,aA.control_element);$("<div style='clear: both;'/>").appendTo(aA.container)});if(this.filters.length!==0){var ah=$("<div/>").addClass("param-row").appendTo(ap);var aj=$("<input type='submit'/>").attr("value","Run on complete dataset").appendTo(ah);var ae=this;aj.click(function(){ae.run_on_dataset()})}var al=$("<div/>").addClass("display-controls").appendTo(this.parent_div),ai=$("<span/>").addClass("elt-label").text("Transparency:").appendTo(al),ad=$("<select/>").attr("name","alpha_dropdown").appendTo(al);this.alpha_filter=null;$("<option/>").attr("value",-1).text("== None ==").appendTo(ad);for(var an=0;an<this.filters.length;an++){$("<option/>").attr("value",an).text(this.filters[an].name).appendTo(ad)}ad.change(function(){$(this).children("option:selected").each(function(){var av=parseInt($(this).val());ak.alpha_filter=(av>=0?ak.filters[av]:null);ak.track.request_draw(true,true)})});$("<div style='clear: both;'/>").appendTo(this.parent_div)};n(X.prototype,{reset_filters:function(){for(var ac=0;ac<this.filters.length;ac++){filter=this.filters[ac];filter.slider.slider("option","values",[filter.min,filter.max])}this.alpha_filter=null},run_on_dataset:function(){var ak=function(ao,am,an){if(!(am in ao)){ao[am]=an}return ao[am]};var ae={},ac,ad,af;for(var ag=0;ag<this.filters.length;ag++){ac=this.filters[ag];if(ac.tool_id){if(ac.min!=ac.low){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" >= "+ac.low}if(ac.max!=ac.high){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" <= "+ac.high}}}var ai=[];for(var al in ae){ai[ai.length]=[al,ae[al]]}var aj=ai.length;(function ah(at,ap){var an=ap[0],ao=an[0],ar=an[1],aq="("+ar.join(") and (")+")",am={cond:aq,input:at,target_dataset_id:at,tool_id:ao},ap=ap.slice(1);$.getJSON(run_tool_url,am,function(au){if(au.error){show_modal("Filter Dataset","Error running tool "+ao,{Close:hide_modal})}else{if(ap.length===0){show_modal("Filtering Dataset","Filter(s) are running on the complete dataset. Outputs are in dataset's history.",{Close:hide_modal})}else{ah(au.dataset_id,ap)}}})})(this.track.dataset_id,ai)}});var L=function(ad,ac){I.AlphaGenerator.call(this,ac);this.filter=ad};L.prototype.gen_alpha=function(ac){if(this.filter.high===Number.MAX_VALUE||this.filter.low===-Number.MAX_VALUE||this.filter.low===this.filter.high){return this.default_alpha}return((parseFloat(ac[this.filter.index])-this.filter.low)/(this.filter.high-this.filter.low))};var W=function(ac){this.track=ac.track;this.params=ac.params;this.values={};if(ac.saved_values){this.restore_values(ac.saved_values)}this.onchange=ac.onchange};n(W.prototype,{restore_values:function(ac){var ad=this;$.each(this.params,function(ae,af){if(ac[af.key]!==undefined){ad.values[af.key]=ac[af.key]}else{ad.values[af.key]=af.default_value}})},build_form:function(){var ad=this;var ac=$("<div />");$.each(this.params,function(ah,af){if(!af.hidden){var ae="param_"+ah;var am=$("<div class='form-row' />").appendTo(ac);am.append($("<label />").attr("for",ae).text(af.label+":"));if(af.type==="bool"){am.append($('<input type="checkbox" />').attr("id",ae).attr("name",ae).attr("checked",ad.values[af.key]))}else{if(af.type==="color"){var aj=ad.values[af.key];var ai=$("<input />").attr("id",ae).attr("name",ae).val(aj);var ak=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ag=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ak);var al=$("<div/>").appendTo(ag).farbtastic({width:100,height:100,callback:ai,color:aj});$("<div />").append(ai).append(ak).appendTo(am).bind("click",function(an){ak.css({left:$(this).position().left+($(ai).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ak.hide();$(document).unbind("click.color-picker")});an.stopPropagation()})}else{am.append($("<input />").attr("id",ae).attr("name",ae).val(ad.values[af.key]))}}}});return ac},update_from_form:function(ac){var ae=this;var ad=false;$.each(this.params,function(af,ah){if(!ah.hidden){var ai="param_"+af;var ag=ac.find("#"+ai).val();if(ah.type==="float"){ag=parseFloat(ag)}else{if(ah.type==="int"){ag=parseInt(ag)}else{if(ah.type==="bool"){ag=ac.find("#"+ai).is(":checked")}}}if(ag!==ae.values[ah.key]){ae.values[ah.key]=ag;ad=true}}});if(ad){this.onchange()}}});var b=function(ae,ad,ac,af){this.index=ae;this.low=ae*N*ad;this.high=(ae+1)*N*ad;this.resolution=ad;this.canvas=$("<div class='track-tile'/>").append(ac);this.data=af;this.stale=false};var l=function(ae,ad,ac,af,ag){b.call(this,ae,ad,ac,af);this.max_val=ag};var M=function(ae,ad,ac,ag,af){b.call(this,ae,ad,ac,ag);this.message=af};var j=function(ad,ac,ag,ae,af){this.name=ad;this.view=ac;this.parent_element=ag;this.data_url=(ae?ae:default_data_url);this.data_url_extra_params={};this.data_query_wait=(af?af:H);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{get_type:function(){if(this instanceof Y){return"LabelTrack"}else{if(this instanceof x){return"ReferenceTrack"}else{if(this instanceof k){return"LineTrack"}else{if(this instanceof T){return"ReadTrack"}else{if(this instanceof R){return"ToolDataFeatureTrack"}else{if(this instanceof Q){return"VcfTrack"}else{if(this instanceof e){return"FeatureTrack"}}}}}}}return""},init:function(){var ac=this;ac.enabled=false;ac.tile_cache.clear();ac.data_manager.clear();ac.initial_canvas=undefined;ac.content_div.css("height","auto");ac.container_div.removeClass("nodata error pending");if(!ac.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id,chrom:ac.view.chrom},function(ad){if(!ad||ad==="error"||ad.kind==="error"){ac.container_div.addClass("error");ac.content_div.text(m);if(ad.message){var af=ac.view.tracks.indexOf(ac);var ae=$(" <a href='javascript:void(0);'></a>").text("View error").click(function(){show_modal("Trackster Error","<pre>"+ad.message+"</pre>",{Close:hide_modal})});ac.content_div.append(ae)}}else{if(ad==="no converter"){ac.container_div.addClass("error");ac.content_div.text(G)}else{if(ad==="no data"||(ad.data!==undefined&&(ad.data===null||ad.data.length===0))){ac.container_div.addClass("nodata");ac.content_div.text(B)}else{if(ad==="pending"){ac.container_div.addClass("pending");ac.content_div.text(q);setTimeout(function(){ac.init()},ac.data_query_wait)}else{if(ad.status==="data"){if(ad.valid_chroms){ac.valid_chroms=ad.valid_chroms;ac.make_name_popup_menu()}ac.content_div.text(V);if(ac.view.chrom){ac.content_div.text("");ac.content_div.css("height",ac.height_px+"px");ac.enabled=true;$.when(ac.predraw_init()).done(function(){ac.container_div.removeClass("nodata error pending");ac.request_draw()})}}}}}}})},predraw_init:function(){},update_name:function(ac){this.old_name=this.name;this.name=ac;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var J=function(aj,ah,ak){var ad=this,al=ad.view;this.filters_manager=(aj!==undefined?new X(this,aj):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(ah!==undefined&&obj_length(ah)>0?new o(this,ah):undefined);this.is_overview=false;this.parent_track=ak;this.child_tracks=[];if(ad.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}ad.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();ad.container_div.append(ad.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(ad.display_modes!==undefined){if(ad.mode_div===undefined){ad.mode_div=$("<div class='right-float menubutton popup' />").appendTo(ad.header_div);var ae=(ad.track_config&&ad.track_config.values.mode?ad.track_config.values.mode:ad.display_modes[0]);ad.mode=ae;ad.mode_div.text(ae);var ac={};for(var af=0,ai=ad.display_modes.length;af<ai;af++){var ag=ad.display_modes[af];ac[ag]=function(am){return function(){ad.change_mode(am)}}(ag)}make_popupmenu(ad.mode_div,ac)}else{ad.mode_div.hide()}}this.make_name_popup_menu()};n(J.prototype,j.prototype,{change_mode:function(ad){var ac=this;ac.mode_div.text(ad);ac.mode=ad;ac.track_config.values.mode=ad;ac.tile_cache.clear();ac.request_draw()},make_name_popup_menu:function(){var ad=this;var ac={};ac[(this.is_overview?"Hide overview":"Set as overview")]=function(){if(ad.is_overview){ad.view.reset_overview()}else{ad.view.set_overview(ad)}};ac["Edit configuration"]=function(){var aj=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ah=function(){ad.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ai=function(ak){if((ak.keyCode||ak.which)===27){aj()}else{if((ak.keyCode||ak.which)===13){ah()}}};$(window).bind("keypress.check_enter_esc",ai);show_modal("Configure Track",ad.track_config.build_form(),{Cancel:aj,OK:ah})};if(ad.filters_available>0){var ag=(ad.filters_div.is(":visible")?"Hide filters":"Show filters");ac[ag]=function(){ad.filters_visible=(ad.filters_div.is(":visible"));if(ad.filters_visible){ad.filters_manager.reset_filters()}ad.filters_div.toggle();ad.make_name_popup_menu()}}if(ad.tool){var ag=(ad.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");ac[ag]=function(){if(!ad.dynamic_tool_div.is(":visible")){ad.update_name(ad.name+ad.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";ad.revert_name()}ad.dynamic_tool_div.toggle();ad.make_name_popup_menu()}}if(ad.valid_chroms){ac["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+ad.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ae=view;var af=function(){$("#no-tracks").show()};if(this.parent_track){ae=this.parent_track;af=function(){}}ac.Remove=function(){ae.remove_track(ad);if(ae.num_tracks===0){af()}};make_popupmenu(ad.name_div,ac)},set_is_overview:function(ac){this.is_overview=ac;this.make_name_popup_menu()},get_overview_tile:function(){var ac=this;view=ac.view,resolution=Math.pow(z,Math.ceil(Math.log((view.max_high-view.max_low)/N)/Math.log(z))),view_width=view.container.width(),w_scale=view_width/(view.max_high-view.max_low),overview_tile=$.Deferred();$.when(ac.data_manager.get_data(view.max_low,view.max_high,"Auto",resolution,ac.data_url_extra_params)).then(function(ad){var af=ac._gen_tile_cache_key(view_width,w_scale,0),ah=ac.tile_cache.get(af);if(!ah){ah=ac.draw_tile(ad,resolution,0,w_scale);ac.tile_cache.set(af,ah)}var ak=$(ah.canvas.find("canvas")),ag=ak.clone(),aj=ak.get(0).getContext("2d"),ae=ag.get(0).getContext("2d"),ai=aj.getImageData(0,0,aj.canvas.width,aj.canvas.height);ae.putImageData(ai,-ac.left_offset,(ah.data.dataset_type==="summary_tree"?P:0));new_tile=new b(-1,resolution,ag);overview_tile.resolve(new_tile)});return overview_tile},_gen_tile_cache_key:function(ad,ae,ac){return ad+"_"+ae+"_"+ac},request_draw:function(ad,ac){this.view.request_redraw(false,ad,ac,this)},_draw:function(ae,an){if(!this.dataset_id){return}var am=this.view.low,ai=this.view.high,ak=ai-am,af=this.view.container.width(),aq=af/ak,ah=this.view.resolution,ap=$("<div style='position: relative;'></div>");if(!an){this.content_div.children().remove()}this.content_div.append(ap);this.max_height=0;var ad=Math.floor(am/ah/N);var al=true;var ao=[];var ac=0;while((ad*N*ah)<ai){tile=this.draw_helper(ae,af,ad,ah,ap,aq);if(tile){ao.push(tile)}else{al=false}ad+=1;ac++}var ag=this;if(al){ag.postdraw_actions(ao,af,aq,an)}for(var aj=0;aj<this.child_tracks.length;aj++){this.child_tracks[aj].request_draw(ae,an)}},postdraw_actions:function(ag,ah,ai,ac){var ae=this;var af=false;for(var ad=0;ad<ag.length;ad++){if(ag[ad].message){af=true;break}}if(af){for(var ad=0;ad<ag.length;ad++){tile=ag[ad];if(!tile.message){tile.canvas.css("padding-top",A)}}}},draw_helper:function(ad,ae,af,ai,ao,at,ap,aj){var ag=this,an=this._gen_tile_cache_key(ae,at,af),ak=af*N*ai,ar=ak+N*ai;var al=(ad?undefined:ag.tile_cache.get(an));if(al){ag.show_tile(al,ao,at);return al}var am=function(au){return("isResolved" in au)};var ah=true;var ac=ag.data_manager.get_data(ak,ar,ag.mode,ai,ag.data_url_extra_params);if(am(ac)){ah=false}var aq;if(view.reference_track&&at>view.canvas_manager.char_width_px){aq=view.reference_track.data_manager.get_data(ak,ar,ag.mode,ai,view.reference_track.data_url_extra_params);if(am(aq)){ah=false}}if(ah){n(ac,aj);var al=ag.draw_tile(ac,ai,af,at,aq);ag.tile_cache.set(an,al);if(al!==undefined){ag.show_tile(al,ao,at)}return al}$.when(ac,aq).then(function(){view.request_redraw()});return null},show_tile:function(aj,al,am){var ae=this,ad=aj.canvas,ai=ad;if(aj.message){var an=$("<div/>"),ak=$("<div/>").addClass("tile-message").text(aj.message).css({height:A-1,width:aj.canvas.width}).appendTo(an),ag=$("<a href='javascript:void(0);'/>").addClass("icon more-down").appendTo(ak),ac=$("<a href='javascript:void(0);'/>").addClass("icon more-across").appendTo(ak);an.append(ad);ai=an;ag.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.DEEP_DATA_REQ);ae.request_draw()}).dblclick(function(ao){ao.stopPropagation()});ac.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.BROAD_DATA_REQ);ae.request_draw()}).dblclick(function(ao){ao.stopPropagation()})}var ah=this.view.high-this.view.low,af=(aj.low-this.view.low)*am;if(this.left_offset){af-=this.left_offset}ai.css({position:"absolute",top:0,left:af,height:""});al.append(ai);ae.max_height=Math.max(ae.max_height,ai.height());ae.content_div.css("height",ae.max_height+"px");al.children().css("height",ae.max_height+"px")},tool_region_and_parameters_str:function(ae,ac,af){var ad=this,ag=(ae!==undefined&&ac!==undefined&&af!==undefined?ae+":"+ac+"-"+af:"all");return" - region=["+ag+"], parameters=["+ad.tool.get_param_values().join(", ")+"]"},add_track:function(ac){ac.track_id=this.track_id+"_"+this.child_tracks.length;ac.container_div.attr("id","track_"+ac.track_id);this.child_tracks_container.append(ac.container_div);C(ac.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(ac);this.view.has_changes=true},remove_track:function(ac){ac.container_div.fadeOut("slow",function(){$(this).remove()})}});var Y=function(ac,ad){this.hidden=true;j.call(this,null,ac,ad);this.container_div.addClass("label-track")};n(Y.prototype,j.prototype,{_draw:function(){var ae=this.view,af=ae.high-ae.low,ai=Math.floor(Math.pow(10,Math.floor(Math.log(af)/Math.log(10)))),ac=Math.floor(ae.low/ai)*ai,ag=this.view.container.width(),ad=$("<div style='position: relative; height: 1.3em;'></div>");while(ac<ae.high){var ah=(ac-ae.low)/af*ag;ad.append($("<div class='label'>"+commatize(ac)+"</div>").css({position:"absolute",left:ah-1}));ac+=ai}this.content_div.children(":first").remove();this.content_div.append(ad)}});var x=function(ac){this.hidden=true;j.call(this,null,ac,ac.top_labeltrack);J.call(this);ac.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:ac.dbkey};this.data_manager=new E(y,this,false);this.tile_cache=new c(r)};n(x.prototype,J.prototype,{draw_tile:function(ak,ah,ad,am){var ag=this,ae=N*ah;if(am>this.view.canvas_manager.char_width_px){if(ak===null){ag.content_div.css("height","0px");return}var af=this.view.canvas_manager.new_canvas();var al=af.getContext("2d");af.width=Math.ceil(ae*am+ag.left_offset);af.height=ag.height_px;al.font=al.canvas.manager.default_font;al.textAlign="center";for(var ai=0,aj=ak.length;ai<aj;ai++){var ac=Math.round(ai*am);al.fillText(ak[ai],ac+ag.left_offset,10)}return new b(ad,ah,af,ak)}this.content_div.css("height","0px")}});var k=function(ag,ae,ah,ac,af){var ad=this;this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ag,ae,ae.viewport_container);J.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ah;this.dataset_id=ac;this.original_dataset_id=ac;this.data_manager=new O(y,this);this.tile_cache=new c(r);this.track_config=new W({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:af,onchange:function(){ad.vertical_range=ad.prefs.max_value-ad.prefs.min_value;$("#linetrack_"+ad.track_id+"_minval").text(ad.prefs.min_value);$("#linetrack_"+ad.track_id+"_maxval").text(ad.prefs.max_value);ad.tile_cache.clear();ad.request_draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,J.prototype,{add_resize_handle:function(){var ac=this;var af=false;var ae=false;var ad=$("<div class='track-resize'>");$(ac.container_div).hover(function(){af=true;ad.show()},function(){af=false;if(!ae){ad.hide()}});ad.hide().bind("dragstart",function(ag,ah){ae=true;ah.original_height=$(ac.content_div).height()}).bind("drag",function(ah,ai){var ag=Math.min(Math.max(ai.original_height+ai.deltaY,ac.min_height_px),ac.max_height_px);$(ac.content_div).css("height",ag);ac.height_px=ag;ac.request_draw(true)}).bind("dragend",function(ag,ah){ac.tile_cache.clear();ae=false;if(!af){ad.hide()}ac.track_config.values.height=ac.height_px}).appendTo(ac.container_div)},predraw_init:function(){var ac=this,ad=ac.view.tracks.indexOf(ac);ac.vertical_range=undefined;return $.getJSON(ac.data_url,{stats:true,chrom:ac.view.chrom,low:null,high:null,hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id},function(ae){ac.container_div.addClass("line-track");var ag=ae.data;if(isNaN(parseFloat(ac.prefs.min_value))||isNaN(parseFloat(ac.prefs.max_value))){ac.prefs.min_value=ag.min;ac.prefs.max_value=ag.max;$("#track_"+ad+"_minval").val(ac.prefs.min_value);$("#track_"+ad+"_maxval").val(ac.prefs.max_value)}ac.vertical_range=ac.prefs.max_value-ac.prefs.min_value;ac.total_frequency=ag.total_frequency;ac.container_div.find(".yaxislabel").remove();var ah=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_minval").text(u(ac.prefs.min_value));var af=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_maxval").text(u(ac.prefs.max_value));af.css({position:"absolute",top:"24px",left:"10px"});af.prependTo(ac.container_div);ah.css({position:"absolute",bottom:"2px",left:"10px"});ah.prependTo(ac.container_div)})},draw_tile:function(am,ag,ad,al){if(this.vertical_range===undefined){return}var ah=ad*N*ag,af=N*ag,ac=Math.ceil(af*al),aj=this.height_px;var ae=this.view.canvas_manager.new_canvas();ae.width=ac,ae.height=aj;var ak=ae.getContext("2d");var ai=new I.LinePainter(am.data,ah,ah+af,this.prefs,this.mode);ai.draw(ak,ac,aj);return new b(ad,ag,ae,am.data)}});var e=function(ac,ah,ag,ak,aj,ae,af,ai){var ad=this;this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:aj,onchange:function(){ad.tile_cache.clear();ad.request_draw()}});this.prefs=this.track_config.values;j.call(this,ac,ah,ah.viewport_container);J.call(this,ae,af,ai);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ag;this.dataset_id=ak;this.original_dataset_id=ak;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_manager=new O(20,this);this.left_offset=200;this.painter=I.LinkedFeaturePainter};n(e.prototype,J.prototype,{postdraw_actions:function(ar,ac,at,aq){J.prototype.postdraw_actions.call(this,ar,aq);var af=this;if(aq){var ah=af.content_div.children();var ai=false;for(var ag=ah.length-1,am=0;ag>=am;ag--){var ae=$(ah[ag]);if(ai){ae.remove()}else{if(ae.children().length!==0){ai=true}}}}if(af.mode=="Histogram"){var al=-1;for(var ag=0;ag<ar.length;ag++){var ap=ar[ag].max_val;if(ap>al){al=ap}}for(var ag=0;ag<ar.length;ag++){var ao=ar[ag];if(ao.max_val!==al){ao.canvas.remove();af.draw_helper(true,ac,ao.index,ao.resolution,ao.canvas.parent(),at,[],{max:al})}}}if(af.filters_manager){var ad=af.filters_manager.filters;for(var ak=0;ak<ad.length;ak++){ad[ak].update_ui_elt()}var aj=false,an;for(var ag=0;ag<ar.length;ag++){if(ar[ag].data.length){an=ar[ag].data[0];for(var ak=0;ak<ad.length;ak++){if(ad[ak].applies_to(an)){aj=true;break}}}}if(af.filters_available!==aj){af.filters_available=aj;if(!af.filters_available){af.filters_div.hide()}af.make_name_popup_menu()}}},update_auto_mode:function(ac){if(this.mode=="Auto"){if(ac=="no_detail"){ac="feature spans"}else{if(ac=="summary_tree"){ac="coverage histogram"}}this.mode_div.text("Auto ("+ac+")")}},incremental_slots:function(ag,ad,af){var ae=this.view.canvas_manager.dummy_context,ac=this.inc_slots[ag];if(!ac||(ac.mode!==af)){ac=new (p.FeatureSlotter)(ag,af==="Pack",w,function(ah){return ae.measureText(ah)});ac.mode=af;this.inc_slots[ag]=ac}return ac.slot_features(ad)},get_summary_tree_data:function(ag,aj,ae,ar){if(ar>ae-aj){ar=ae-aj}var an=Math.floor((ae-aj)/ar),aq=[],af=0;var ah=0,ai=0,am,ap=0,ak=[],ao,al;var ad=function(av,au,aw,at){av[0]=au+aw*at;av[1]=au+(aw+1)*at};while(ap<ar&&ah!==ag.length){var ac=false;for(;ap<ar&&!ac;ap++){ad(ak,aj,ap,an);for(ai=ah;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ac=true;break}}if(ac){break}}data_start_index=ai;aq[aq.length]=ao=[ak[0],0];for(;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ao[1]++}else{break}}if(ao[1]>af){af=ao[1]}ap++}return{max:af,delta:an,data:aq}},draw_tile:function(ap,ay,aC,al,af){var av=this,aE=aC*N*ay,ad=(aC+1)*N*ay,ar=ad-aE,aw=Math.ceil(ar*al),at=this.mode,aI=25,ag=this.left_offset,aq,ah;if(at==="Auto"){if(ap.dataset_type==="summary_tree"){at=ap.dataset_type}else{if(ap.extra_info==="no_detail"){at="no_detail"}else{var aH=ap.data;if(this.view.high-this.view.low>F){at="Squish"}else{at="Pack"}}}this.update_auto_mode(at)}if(at==="summary_tree"||at==="Histogram"){ah=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var ac=$("<div />").addClass("yaxislabel");ac.text(ap.max);ac.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});ac.prependTo(this.container_div);var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah+P;if(ap.dataset_type!="summary_tree"){var am=this.get_summary_tree_data(ap.data,aE,ad,200);if(ap.max){am.max=ap.max}ap=am}var aF=new I.SummaryTreePainter(ap,aE,ad,this.prefs);var ax=ae.getContext("2d");ax.translate(ag,P);aF.draw(ax,aw,ah);return new l(aC,ay,ae,ap.data,ap.max)}var aq,aj=1;if(at==="no_detail"||at==="Squish"||at==="Pack"){aj=this.incremental_slots(al,ap.data,at);aq=this.inc_slots[al].slots}var ak=[];if(ap.data){var an=this.filters_manager.filters;for(var az=0,aB=ap.data.length;az<aB;az++){var ai=ap.data[az];var aA=false;var ao;for(var aD=0,aG=an.length;aD<aG;aD++){ao=an[aD];ao.update_attrs(ai);if(!ao.keep(ai)){aA=true;break}}if(!aA){ak.push(ai)}}}var au=(this.filters_manager.alpha_filter?new L(this.filters_manager.alpha_filter):null);var aF=new (this.painter)(ak,aE,ad,this.prefs,at,au,af);var ah=Math.max(aa,aF.get_required_height(aj));var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah;var ax=ae.getContext("2d");ax.fillStyle=this.prefs.block_color;ax.font=ax.canvas.manager.default_font;ax.textAlign="right";this.container_div.find(".yaxislabel").remove();if(ap.data){ax.translate(ag,0);aF.draw(ax,aw,ah,aq)}return new M(aC,ay,ae,ap.data,ap.message)}});var Q=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.painter=I.VariantPainter};n(Q.prototype,J.prototype,e.prototype);var T=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ae,onchange:function(){this.track.tile_cache.clear();this.track.request_draw()}});this.prefs=this.track_config.values;this.painter=I.ReadPainter;this.make_name_popup_menu()};n(T.prototype,J.prototype,e.prototype);var R=function(ag,ae,ai,ac,af,ah,ad){e.call(this,ag,ae,ai,ac,af,ah,{},ad);this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(R.prototype,J.prototype,e.prototype,{predraw_init:function(){var ad=this;var ac=function(){if(ad.data_manager.size()===0){setTimeout(ac,300)}else{ad.data_url=default_data_url;ad.data_query_wait=H;ad.dataset_state_url=converted_datasets_state_url;$.getJSON(ad.dataset_state_url,{dataset_id:ad.dataset_id,hda_ldda:ad.hda_ldda},function(ae){})}};ac()}});U.View=Z;U.LineTrack=k;U.FeatureTrack=e;U.ReadTrack=T};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(k,x){var u=k("class").extend;var p=function(I,A,G,z,F,D){if(D===undefined){D=4}var C=z-A;var B=F-G;var E=Math.floor(Math.sqrt(C*C+B*B)/D);var J=C/E;var H=B/E;var y;for(y=0;y<E;y++,A+=J,G+=H){if(y%2!==0){continue}I.fillRect(A,G,D,1)}};var q=function(B,A,z,E){var D=A-E/2,C=A+E/2,F=z-Math.sqrt(E*3/2);B.beginPath();B.moveTo(D,F);B.lineTo(C,F);B.lineTo(A,z);B.lineTo(D,F);B.strokeStyle=this.fillStyle;B.fill();B.stroke();B.closePath()};var g=function(y){this.default_alpha=(y?y:1)};g.prototype.gen_alpha=function(y){return this.default_alpha};var n=function(A,C,y,z,B){this.data=A;this.view_start=C;this.view_end=y;this.prefs=u({},this.default_prefs,z);this.mode=B};n.prototype.default_prefs={};var v=function(A,C,y,z,B){n.call(this,A,C,y,z,B)};v.prototype.default_prefs={show_counts:false};v.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(y,C,E,F,A){n.call(this,y,C,E,F,A);if(this.prefs.min_value===undefined){var G=Infinity;for(var z=0,B=this.data.length;z<B;z++){G=Math.min(G,this.data[z][1])}this.prefs.min_value=G}if(this.prefs.max_value===undefined){var D=-Infinity;for(var z=0,B=this.data.length;z<B;z++){D=Math.max(D,this.data[z][1])}this.prefs.max_value=D}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(N,M,K){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,J=D-H,z=K,A=this.view_start,L=this.view_end-this.view_start,B=M/L,I=this.mode,T=this.data;N.save();var U=Math.round(K+H/J*K);if(I!=="Intensity"){N.fillStyle="#aaa";N.fillRect(0,U,M,1)}N.beginPath();var R,E,C;if(T.length>1){C=Math.ceil((T[1][0]-T[0][0])*B)}else{C=10}for(var O=0,P=T.length;O<P;O++){N.fillStyle=this.prefs.color;R=Math.round((T[O][0]-A)*B);E=T[O][1];var Q=false,G=false;if(E===null){if(F&&I==="Filled"){N.lineTo(R,z)}F=false;continue}if(E<H){G=true;E=H}else{if(E>D){Q=true;E=D}}if(I==="Histogram"){E=Math.round(E/J*z);N.fillRect(R,U,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/J*255);N.fillStyle="rgb("+E+","+E+","+E+")";N.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/J*z);if(F){N.lineTo(R,E)}else{F=true;if(I==="Filled"){N.moveTo(R,z);N.lineTo(R,E)}else{N.moveTo(R,E)}}}}N.fillStyle=this.prefs.overflow_color;if(Q||G){var S;if(I==="Histogram"||I==="Intensity"){S=C}else{R-=2;S=4}if(Q){N.fillRect(R,0,S,3)}if(G){N.fillRect(R,z-3,S,3)}}N.fillStyle=this.prefs.color}if(I==="Filled"){if(F){N.lineTo(R,U);N.lineTo(0,U)}N.fill()}else{N.stroke()}N.restore()};var o=function(B,D,y,A,C,z){n.call(this,B,D,y,A,C);this.alpha_generator=(z?z:new g())};o.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};u(o.prototype,{get_required_height:function(z){var y=y_scale=this.get_row_height(),A=this.mode;if(A==="no_detail"||A==="Squish"||A==="Pack"){y=z*y_scale}return y+Math.max(Math.round(y_scale/2),5)},draw:function(K,B,J,G){var E=this.data,H=this.view_start,L=this.view_end;K.save();K.fillStyle=this.prefs.block_color;K.textAlign="right";var O=this.view_end-this.view_start,N=B/O,A=this.get_row_height();for(var D=0,F=E.length;D<F;D++){var M=E[D],C=M[0],y=M[1],z=M[2],I=(G&&G[C]!==undefined?G[C]:null);if((y<L&&z>H)&&(this.mode=="Dense"||I!==null)){this.draw_element(K,this.mode,M,I,H,L,N,A,B)}}K.restore()},draw_element:function(E,A,G,C,B,D,F,z,y){console.log("WARNING: Unimplemented function.")}});var d=10,j=3,m=5,w=10,f=1,s=3,e=3,a=9,l=2,h="#ccc";var r=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(r.prototype,o.prototype,{get_row_height:function(){var z=this.mode,y;if(z==="Dense"){y=d}else{if(z==="no_detail"){y=j}else{if(z==="Squish"){y=m}else{y=w}}}return y},draw_element:function(K,D,S,F,M,ac,ag,ah,y){var P=S[0],ae=S[1],W=S[2],N=S[3],X=Math.floor(Math.max(0,(ae-M)*ag)),L=Math.ceil(Math.min(y,Math.max(0,(W-M)*ag))),V=(D==="Dense"?0:(0+F))*ah,J,aa,O=null,ai=null,B=this.prefs.block_color,Z=this.prefs.label_color;K.globalAlpha=this.alpha_generator.gen_alpha(S);if(D=="Dense"){F=1}if(D==="no_detail"){K.fillStyle=B;K.fillRect(X,V+5,L-X,f)}else{var I=S[4],U=S[5],Y=S[6],C=S[7];if(U&&Y){O=Math.floor(Math.max(0,(U-M)*ag));ai=Math.ceil(Math.min(y,Math.max(0,(Y-M)*ag)))}var af,Q;if(D==="Squish"||D==="Dense"){af=1;Q=e}else{af=5;Q=a}if(!C){if(S.strand){if(S.strand==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(S.strand==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}}else{K.fillStyle=B}K.fillRect(X,V,L-X,Q)}else{var H,R;if(D==="Squish"||D==="Dense"){K.fillStyle=h;H=V+Math.floor(e/2)+1;R=1}else{if(I){var H=V;var R=Q;if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand")}}}else{K.fillStyle=h;H+=(e/2)+1;R=1}}K.fillRect(X,H,L-X,R);for(var ad=0,A=C.length;ad<A;ad++){var E=C[ad],z=Math.floor(Math.max(0,(E[0]-M)*ag)),T=Math.ceil(Math.min(y,Math.max((E[1]-M)*ag)));if(z>T){continue}K.fillStyle=B;K.fillRect(z,V+(Q-af)/2+1,T-z,af);if(O!==undefined&&Y>U&&!(z>ai||T<O)){var ab=Math.max(z,O),G=Math.min(T,ai);K.fillRect(ab,V+1,G-ab,Q);if(C.length==1&&D=="Pack"){if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}if(ab+14<G){ab+=2;G-=2}K.fillRect(ab,V+1,G-ab,Q)}}}}if(D==="Pack"&&ae>M){K.fillStyle=Z;if(M===0&&X-K.measureText(N).width<0){K.textAlign="left";K.fillText(N,L+l,V+8)}else{K.textAlign="right";K.fillText(N,X-l,V+8)}}}K.globalAlpha=1}});var b=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(b.prototype,o.prototype,{draw_element:function(R,M,G,C,U,A,J,S,P){var G=data[i],I=G[0],Q=G[1],B=G[2],L=G[3],E=Math.floor(Math.max(0,(Q-U)*J)),H=Math.ceil(Math.min(P,Math.max(0,(B-U)*J))),D=(M==="Dense"?0:(0+C))*S,y,V,z=null,K=null;if(no_label){R.fillStyle=block_color;R.fillRect(E+left_offset,D+5,H-E,1)}else{var T=G[4],O=G[5],F=G[6];y=9;V=1;R.fillRect(E+left_offset,D,H-E,y);if(M!=="Dense"&&L!==undefined&&Q>U){R.fillStyle=label_color;if(U===0&&E-R.measureText(L).width<0){R.textAlign="left";R.fillText(L,H+2+left_offset,D+8)}else{R.textAlign="right";R.fillText(L,E-2+left_offset,D+8)}R.fillStyle=block_color}var N=T+" / "+O;if(Q>U&&R.measureText(N).width<(H-E)){R.fillStyle="white";R.textAlign="center";R.fillText(N,left_offset+E+(H-E)/2,D+8);R.fillStyle=block_color}}}});var t=function(C,E,y,B,D,z,A){o.call(this,C,E,y,B,D,z);this.ref_seq=A};t.prototype.default_prefs=u({},o.prototype.default_prefs,{show_insertions:false});u(t.prototype,o.prototype,{get_row_height:function(){var y,z=this.mode;if(z==="Dense"){y=d}else{if(z==="Squish"){y=m}else{y=w;if(this.prefs.show_insertions){y*=2}}}return y},draw_read:function(U,P,L,Z,A,T,I,F,E){U.textAlign="center";var S=this,z=[Z,A],O=0,V=0,R=0;ref_seq=this.ref_seq,char_width_px=U.canvas.manager.char_width_px;var ae=[];if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){R=Math.round(L/2)}if(!I){I=[[0,F.length]]}for(var M=0,X=I.length;M<X;M++){var J=I[M],B="MIDNSHP=X"[J[0]],N=J[1];if(B==="H"||B==="S"){O-=N}var G=T+O,ad=Math.floor(Math.max(0,(G-Z)*L)),H=Math.floor(Math.max(0,(G+N-Z)*L));if(ad===H){H+=1}switch(B){case"H":break;case"S":case"M":case"=":if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(R>0){U.fillStyle=this.prefs.block_color;U.fillRect(ad-R,E+1,H-ad,9);U.fillStyle=h;for(var ab=0,y=Q.length;ab<y;ab++){if(this.prefs.show_differences&&ref_seq){var K=ref_seq[G-Z+ab];if(!K||K.toLowerCase()===Q[ab].toLowerCase()){continue}}if(G+ab>=Z&&G+ab<=A){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac,E+9)}}}else{U.fillStyle=this.prefs.block_color;U.fillRect(ad,E+4,H-ad,e)}}V+=N;O+=N;break;case"N":U.fillStyle=h;U.fillRect(ad-R,E+5,H-ad,1);O+=N;break;case"D":U.fillStyle="red";U.fillRect(ad-R,E+4,H-ad,3);O+=N;break;case"P":break;case"I":var Y=ad-R;if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(this.prefs.show_insertions){var D=ad-(H-ad)/2;if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){U.fillStyle="yellow";U.fillRect(D-R,E-9,H-ad,9);ae[ae.length]={type:"triangle",data:[Y,E+4,5]};U.fillStyle=h;switch(seq_tile_overlap){case (OVERLAP_START):Q=Q.slice(Z-G);break;case (OVERLAP_END):Q=Q.slice(0,G-A);break;case (CONTAINED_BY):break;case (CONTAINS):Q=Q.slice(Z-G,G-A);break}for(var ab=0,y=Q.length;ab<y;ab++){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac-(H-ad)/2,E)}}else{U.fillStyle="yellow";U.fillRect(D,E+(this.mode!=="Dense"?2:5),H-ad,(P!=="Dense"?e:s))}}else{if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){ae[ae.length]={type:"text",data:[Q.length,Y,E+9]}}else{}}}V+=N;break;case"X":V+=N;break}}U.fillStyle="yellow";var aa,C,af;for(var W=0;W<ae.length;W++){aa=ae[W];C=aa.type;af=aa.data;if(C==="text"){U.save();U.font="bold "+U.font;U.fillText(af[0],af[1],af[2]);U.restore()}else{if(C=="triangle"){q(U,af[0],af[1],af[2])}}}},draw_element:function(R,M,E,B,U,z,I,S,P){var H=E[0],Q=E[1],A=E[2],J=E[3],D=Math.floor(Math.max(0,(Q-U)*I)),F=Math.ceil(Math.min(P,Math.max(0,(A-U)*I))),C=(M==="Dense"?0:(0+B))*S,V=this.prefs.block_color,G=this.prefs.label_color,O=0;if((M==="Pack"||this.mode==="Auto")&&I>R.canvas.manager.char_width_px){var O=Math.round(I/2)}R.fillStyle=V;if(E[5] instanceof Array){var N=Math.floor(Math.max(0,(E[4][0]-U)*I)),L=Math.ceil(Math.min(P,Math.max(0,(E[4][1]-U)*I))),K=Math.floor(Math.max(0,(E[5][0]-U)*I)),y=Math.ceil(Math.min(P,Math.max(0,(E[5][1]-U)*I)));if(E[4][1]>=U&&E[4][0]<=z&&E[4][2]){this.draw_read(R,M,I,U,z,E[4][0],E[4][2],E[4][3],C)}if(E[5][1]>=U&&E[5][0]<=z&&E[5][2]){this.draw_read(R,M,I,U,z,E[5][0],E[5][2],E[5][3],C)}if(K>L){R.fillStyle=h;p(R,L-O,C+5,K-O,C+5)}}else{R.fillStyle=V;this.draw_read(R,M,I,U,z,Q,E[4],E[5],C)}if(M==="Pack"&&Q>U){R.fillStyle=this.prefs.label_color;var T=1;if(T===0&&D-R.measureText(J).width<0){R.textAlign="left";R.fillText(J,F+l-O,C+8)}else{R.textAlign="right";R.fillText(J,D-l-O,C+8)}R.fillStyle=V}}});x.AlphaGenerator=g;x.SummaryTreePainter=v;x.LinePainter=c;x.LinkedFeaturePainter=r;x.ReadPainter=t;x.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
--- a/static/scripts/trackster.js Thu Aug 25 11:28:01 2011 -0400
+++ b/static/scripts/trackster.js Thu Aug 25 11:37:07 2011 -0400
@@ -1280,7 +1280,7 @@
// No element to filter on.
return true;
}
- var val = parseInt(element[this.index]);
+ var val = parseFloat(element[this.index]);
return (isNaN(val) || (val >= this.low && val <= this.high));
},
/**
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: create a set of shared functions for managing the user interface and use functions in both visualization editor and display.
by Bitbucket 25 Aug '11
by Bitbucket 25 Aug '11
25 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/cf761c5af7b3/
changeset: cf761c5af7b3
user: jgoecks
date: 2011-08-25 17:28:01
summary: Trackster: create a set of shared functions for managing the user interface and use functions in both visualization editor and display.
affected #: 4 files (6.2 KB)
--- a/static/scripts/trackster.js Thu Aug 25 10:37:18 2011 -0400
+++ b/static/scripts/trackster.js Thu Aug 25 11:28:01 2011 -0400
@@ -464,7 +464,7 @@
/**
* View object manages complete viz view, including tracks and user interactions.
*/
-var View = function( container, title, vis_id, dbkey, callback ) {
+var View = function(container, title, vis_id, dbkey, callback) {
this.container = container;
this.chrom = null;
this.vis_id = vis_id;
@@ -826,6 +826,7 @@
sortable( track.container_div, '.draghandle' );
this.track_id_counter += 1;
this.num_tracks += 1;
+ this.has_changes = true;
this.update_intro_div();
},
add_label_track: function (label_track) {
@@ -993,9 +994,9 @@
view.overview_track.set_is_overview(false);
}
view.overview_track = track;
- view.has_changes = true;
track.set_is_overview(true);
});
+ view.has_changes = true;
},
/** Close and reset overview. */
reset_overview: function() {
--- a/templates/tracks/browser.mako Thu Aug 25 10:37:18 2011 -0400
+++ b/templates/tracks/browser.mako Thu Aug 25 11:28:01 2011 -0400
@@ -42,7 +42,7 @@
<script type='text/javascript' src="${h.url_for('/static/scripts/excanvas.js')}"></script><![endif]-->
-${h.js( "galaxy.base", "galaxy.panels", "json2", "jquery", "jstorage", "jquery.event.drag", "jquery.mousewheel", "jquery.autocomplete", "trackster", "jquery.ui.sortable.slider", "jquery.scrollTo", "farbtastic" )}
+${h.js( "galaxy.base", "galaxy.panels", "json2", "jquery", "jstorage", "jquery.event.drag", "jquery.mousewheel", "jquery.autocomplete", "trackster", "trackster_ui", "jquery.ui.sortable.slider", "jquery.scrollTo", "farbtastic" )}
<script type="text/javascript">
@@ -57,51 +57,8 @@
chrom_url = "${h.url_for( action='chroms' )}",
dataset_state_url = "${h.url_for( action='dataset_state' )}",
converted_datasets_state_url = "${h.url_for( action='converted_datasets_state' )}",
- addable_track_types = { "LineTrack": LineTrack, "FeatureTrack": FeatureTrack, "ReadTrack": ReadTrack },
view;
-
- /**
- * Add bookmark.
- */
- var add_bookmark = function(position, annotation) {
- var
- bookmarks_container = $("#bookmarks-container"),
- new_bookmark = $("<div/>").addClass("bookmark").appendTo(bookmarks_container),
- delete_icon_container = $("<div/>").addClass("delete-icon-container").appendTo(new_bookmark).click(function (){
- // Remove bookmark.
- new_bookmark.slideUp("fast");
- new_bookmark.remove();
- view.has_changes = true;
- return false;
- }),
- delete_icon = $("<a href=''/>").addClass("icon-button delete").appendTo(delete_icon_container),
- position_div = $("<div/>").addClass("position").appendTo(new_bookmark),
- position_link = $("<a href=''/>").text(position).appendTo(position_div).click(function() {
- view.go_to(position);
- return false;
- });
- annotation_div = get_editable_text_elt(annotation, true).addClass("annotation").appendTo(new_bookmark);
- view.has_changes = true;
- return new_bookmark;
- };
-
- /**
- * Use track data to add a track to a view.
- * TODO: rename function?
- */
- var add_async_success = function(track_data) {
- var td = track_data,
- new_track = new addable_track_types[track_data.track_type](
- track_data.name, view, track_data.hda_ldda, track_data.dataset_id,
- track_data.prefs, track_data.filters, track_data.tool );
- view.add_track(new_track);
- // Should replace with live event but can't get working
- sortable(new_track.container_div, ".draghandle");
- view.has_changes = true;
- $("#no-tracks").hide();
- };
-
/**
* Use a popup grid to add more tracks.
*/
@@ -144,7 +101,7 @@
[ arguments[0] ]
);
for (var i= 0; i < track_defs.length; i++) {
- add_async_success(track_defs[i]);
+ view.add_track( track_from_dict(track_defs[i]) );
}
});
hide_modal();
@@ -165,6 +122,7 @@
%if config:
var callback;
%if 'viewport' in config:
+ // TODO: find better way to handle this code.
var callback = function() {
view.change_chrom( '${config['viewport']['chrom']}', ${config['viewport']['start']}, ${config['viewport']['end']} );
// Set overview.
@@ -180,51 +138,20 @@
}
}
%endif
- }
+ view.has_changes = false;
+ };
%endif
- view = new View( $("#browser-container"), "${config.get('title') | h}", "${config.get('vis_id')}", "${config.get('dbkey')}", callback );
- view.editor = true;
- ## A little ugly and redundant, but it gets the job done moving the config from python to JS:
- var tracks_config = JSON.parse('${ h.to_json_string( config.get('tracks') ) }');
- var track_config, track, parent_track, parent_obj;
- for (var i = 0; i < tracks_config.length; i++) {
- track_config = tracks_config[i];
- track = new addable_track_types[track_config["track_type"]](
- track_config['name'],
- view,
- track_config['hda_ldda'],
- track_config['dataset_id'],
- track_config['prefs'],
- track_config['filters'],
- track_config['tool'],
- (track_config.is_child ? parent_track : undefined));
- parent_obj = view;
- if (track_config.is_child) {
- parent_obj = parent_track;
- }
- else {
- // New parent track is this track.
- parent_track = track;
- }
- parent_obj.add_track(track);
- }
- init();
-
- // Load bookmarks.
- var bookmarks = JSON.parse('${ h.to_json_string( config.get('bookmarks') ) }'),
- bookmark;
- for (var i = 0; i < bookmarks.length; i++) {
- bookmark = bookmarks[i];
- add_bookmark(bookmark['position'], bookmark['annotation']);
- }
-
- // View has no changes as of yet.
- view.has_changes = false;
+ view = create_visualization( $("#browser-container"), "${config.get('title') | h}",
+ "${config.get('vis_id')}", "${config.get('dbkey')}", callback,
+ JSON.parse('${ h.to_json_string( config.get('tracks') ) }'),
+ JSON.parse('${ h.to_json_string( config.get('bookmarks') ) }')
+ );
+ init_editor();
%else:
var continue_fn = function() {
- view = new View( $("#browser-container"), $("#new-title").val(), undefined, $("#new-dbkey").val() );
+ view = create_visualization( $("#browser-container"), $("#new-title").val(), undefined, $("#new-dbkey").val() );
view.editor = true;
- init();
+ init_editor();
hide_modal();
};
$.ajax({
@@ -242,11 +169,10 @@
});
%endif
- // Execute initializer for EDITOR specific javascript
- function init() {
- if (view.num_tracks === 0) {
- $("#no-tracks").show();
- }
+ /**
+ * Initialization for editor-specific functions.
+ */
+ function init_editor() {
$("#title").text(view.title + " (" + view.dbkey + ")");
window.onbeforeunload = function() {
@@ -260,13 +186,16 @@
url: "${h.url_for( action='add_track_async' )}",
data: { hda_id: "${add_dataset}" },
dataType: "json",
- success: add_async_success
+ success: function(track_data) { view.add_track( track_from_dict(track_data) ) }
});
%endif
- $("#viz-options-button").css( "position", "relative" );
- make_popupmenu( $("#viz-options-button"), {
+ //
+ // Make actions menu.
+ //
+ $("#viz-actions-button").css( "position", "relative" );
+ make_popupmenu( $("#viz-actions-button"), {
"Add Tracks": add_tracks,
"Save": function() {
// Show saving dialog box
@@ -344,34 +273,8 @@
annotation = "Bookmark description";
return add_bookmark(position, annotation);
});
-
- //
- // Keyboard navigation. Scroll ~7% of height when scrolling up/down.
- //
- $(document).keydown(function(e) {
- // Do not navigate if arrow keys used in input element.
- if ($(e.srcElement).is(':input')) {
- return;
- }
-
- // Key codes: left == 37, up == 38, right == 39, down == 40
- switch(e.which) {
- case 37:
- view.move_fraction(0.25);
- break
- case 38:
- var change = Math.round(view.viewport_container.height()/15.0);
- view.viewport_container.scrollTo('-=' + change + 'px');
- break;
- case 39:
- view.move_fraction(-0.25);
- break;
- case 40:
- var change = Math.round(view.viewport_container.height()/15.0);
- view.viewport_container.scrollTo('+=' + change + 'px');
- break;
- }
- });
+
+ init_keyboard_nav(view);
};
});
@@ -384,7 +287,7 @@
<div class="unified-panel-header-inner"><div style="float:left;" id="title"></div><div style="float: right">
- <a id="viz-options-button" class='panel-header-button popup' href="javascript:void(0)" target="galaxy_main">${_('Options')}</a>
+ <a id="viz-actions-button" class='panel-header-button popup' href="javascript:void(0)" target="galaxy_main">${_('Actions')}</a></div></div></div>
--- a/templates/visualization/display.mako Thu Aug 25 10:37:18 2011 -0400
+++ b/templates/visualization/display.mako Thu Aug 25 11:28:01 2011 -0400
@@ -8,7 +8,7 @@
<script type='text/javascript' src="${h.url_for('/static/scripts/excanvas.js')}"></script><![endif]-->
- ${h.js( "jquery.event.drag", "jquery.autocomplete", "jquery.mousewheel", "jquery.autocomplete", "trackster", "jquery.ui.sortable.slider", "jquery.scrollTo", "farbtastic" )}
+ ${h.js( "jquery.event.drag", "jquery.autocomplete", "jquery.mousewheel", "jquery.autocomplete", "trackster", "trackster_ui", "jquery.ui.sortable.slider", "jquery.scrollTo", "farbtastic" )}
</%def><%def name="stylesheets()">
@@ -86,64 +86,19 @@
$("#right-border").click(function() { view.resize_window(); });
}
- // Create view and add tracks.
+ // Create visualization.
var callback;
%if 'viewport' in config:
var callback = function() { view.change_chrom( '${config['viewport']['chrom']}', ${config['viewport']['start']}, ${config['viewport']['end']} ); }
%endif
- view = new View(container_element, "${config.get('title') | h}", "${config.get('vis_id')}", "${config.get('dbkey')}", callback);
- ## A little ugly and redundant, but it gets the job done moving the config from python to JS:
- var tracks_config = JSON.parse('${ h.to_json_string( config.get('tracks') ) }');
- var track_config, track, parent_track, parent_obj;
- for (var i = 0; i < tracks_config.length; i++) {
- track_config = tracks_config[i];
- track = new addable_track_types[track_config["track_type"]](
- track_config['name'],
- view,
- track_config['hda_ldda'],
- track_config['dataset_id'],
- track_config['prefs'],
- track_config['filters'],
- track_config['tool'],
- (track_config.is_child ? parent_track : undefined));
- parent_obj = view;
- if (track_config.is_child) {
- parent_obj = parent_track;
- }
- else {
- // New parent track is this track.
- parent_track = track;
- }
- parent_obj.add_track(track);
- }
+ view = create_visualization( container_element, "${config.get('title') | h}",
+ "${config.get('vis_id')}", "${config.get('dbkey')}", callback,
+ JSON.parse('${ h.to_json_string( config.get('tracks') ) }'),
+ JSON.parse('${ h.to_json_string( config.get('bookmarks') ) }')
+ );
- //
- // Keyboard navigation. Scroll ~7% of height when scrolling up/down.
- //
- $(document).keydown(function(e) {
- // Do not navigate if arrow keys used in input element.
- if ($(e.srcElement).is(':input')) {
- return;
- }
-
- // Key codes: left == 37, up == 38, right == 39, down == 40
- switch(e.which) {
- case 37:
- view.move_fraction(0.25);
- break
- case 38:
- var change = Math.round(view.viewport_container.height()/15.0);
- view.viewport_container.scrollTo('-=' + change + 'px');
- break;
- case 39:
- view.move_fraction(-0.25);
- break;
- case 40:
- var change = Math.round(view.viewport_container.height()/15.0);
- view.viewport_container.scrollTo('+=' + change + 'px');
- break;
- }
- });
+ // Set up keyboard navigation.
+ init_keyboard_nav(view);
});
</script>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: John Duddy: APIs to add histories, add items to histories, and list the status
by Bitbucket 25 Aug '11
by Bitbucket 25 Aug '11
25 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/317d2d4b1f7d/
changeset: 317d2d4b1f7d
user: John Duddy
date: 2011-08-22 21:29:49
summary: APIs to add histories, add items to histories, and list the status
of datasets within a history
affected #: 2 files (4.1 KB)
--- a/lib/galaxy/web/api/histories.py Mon Aug 22 10:45:22 2011 -0400
+++ b/lib/galaxy/web/api/histories.py Mon Aug 22 12:29:49 2011 -0700
@@ -7,6 +7,9 @@
from galaxy.web.base.controller import *
from galaxy.util.sanitize_html import sanitize_html
from galaxy.model.orm import *
+from galaxy.model import Dataset
+import galaxy.datatypes
+from galaxy.util.bunch import Bunch
log = logging.getLogger( __name__ )
@@ -17,20 +20,19 @@
"""
GET /api/histories
Displays a collection (list) of histories.
- """
- try:
- query = trans.sa_session.query( trans.app.model.History ).filter( trans.app.model.History.table.c.deleted == False )
- current_user_role_ids = [ role.id for role in trans.get_current_user_roles() ]
- user = trans.get_user()
- query = query.filter_by( user=user, deleted=False )
+ """
+ try:
+ query = trans.sa_session.query( trans.app.model.History ).filter_by( user=trans.user, deleted=False ).order_by(
+ desc(trans.app.model.History.table.c.update_time)).all()
except Exception, e:
log.debug("Error in history API: %s" % str(e))
+
rval = []
try:
for history in query:
- item = history.get_api_value()
+ item = history.get_api_value(value_mapper={'id':trans.security.encode_id})
item['url'] = url_for( 'history', id=trans.security.encode_id( history.id ) )
- item['id'] = trans.security.encode_id( item['id'] )
+ # item['id'] = trans.security.encode_id( item['id'] )
rval.append( item )
except Exception, e:
log.debug("Error in history API at constructing return list: %s" % str(e))
@@ -39,26 +41,63 @@
@web.expose_api
def show( self, trans, id, **kwd ):
"""
- GET /api/histories/{encoded_library_id}
+ GET /api/histories/{encoded_history_id}
Displays information about a history.
"""
history_id = id
params = util.Params( kwd )
+
+ def traverse( datasets ):
+ rval = {}
+ states = Dataset.states
+ for key, state in states.items():
+ rval[state] = 0
+ #log.debug("History API: Init rval %s" % rval)
+ for dataset in datasets:
+ item = dataset.get_api_value( view='element' )
+ #log.debug("History API: Set rval %s" % item['state'])
+ if not item['deleted']:
+ rval[item['state']] = rval[item['state']] + 1
+ return rval
+
try:
decoded_history_id = trans.security.decode_id( history_id )
except TypeError:
trans.response.status = 400
- return "Malformed history id ( %s ) specified, unable to decode." % str( library_id )
+ return "Malformed history id ( %s ) specified, unable to decode." % str( history_id )
try:
- history = trans.sa_session.query( trans.app.model.History ).get( decoded_history_id )
+ history = trans.sa_session.query(trans.app.model.History).get(decoded_history_id)
+ if history.user != trans.user and not trans.user_is_admin():
+ if trans.sa_session.query(trans.app.model.HistoryUserShareAssociation).filter_by(user=trans.user, history=history).count() == 0:
+ trans.response.status = 400
+ return("History is not owned by or shared with current user")
except:
- history = None
+ trans.response.status = 400
+ return "That history does not exist."
+
try:
- if not history or not ( trans.user_is_admin() or trans.app.security_agent.can_access_history( trans.get_current_user_roles(), history ) ):
- trans.response.status = 400
- return "Invalid history id ( %s ) specified." % str( history_id )
- item = history.get_api_value( view='element' )
+ item = history.get_api_value(view='element', value_mapper={'id':trans.security.encode_id})
+ num_sets = len( [hda.id for hda in history.datasets if not hda.deleted] )
+ states = Dataset.states
+ state = states.ERROR
+ if num_sets == 0:
+ state = states.NEW
+ else:
+ summary = traverse(history.datasets)
+ #log.debug("History API: Status summary %s" % summary)
+ if summary[states.ERROR] > 0 or summary[states.FAILED_METADATA] > 0:
+ state = states.ERROR
+ elif summary[states.RUNNING] > 0 or summary[states.SETTING_METADATA] > 0:
+ state = states.RUNNING
+ elif summary[states.QUEUED] > 0:
+ state = states.QUEUED
+ elif summary[states.OK] == num_sets:
+ state = states.OK
+ #item['user'] = item['user'].username
item['contents_url'] = url_for( 'history_contents', history_id=history_id )
+ #item['datasets'] = len( item['datasets'] )
+ item['state'] = state
+ #log.debug("History API: State %s for %d datasets" % (state, num_sets))
except Exception, e:
log.debug("Error in history API at showing history detail: %s" % str(e))
return item
@@ -69,5 +108,48 @@
POST /api/histories
Creates a new history.
"""
- trans.response.status = 403
- return "Not implemented."
+ params = util.Params( payload )
+ hist_name = util.restore_text( params.get( 'name', None ) )
+ new_history = trans.app.model.History( user=trans.user, name=hist_name )
+
+ trans.sa_session.add( new_history )
+ trans.sa_session.flush()
+ item = new_history.get_api_value(view='element', value_mapper={'id':trans.security.encode_id})
+ return item
+ @web.expose_api
+ def delete( self, trans, id, **kwd ):
+ """
+ DELETE /api/histories/{encoded_history_id}
+ Deletes a history
+ """
+ history_id = id
+ params = util.Params( kwd )
+
+ try:
+ decoded_history_id = trans.security.decode_id( history_id )
+ except TypeError:
+ trans.response.status = 400
+ return "Malformed history id ( %s ) specified, unable to decode." % str( history_id )
+ try:
+ history = trans.sa_session.query(trans.app.model.History).get(decoded_history_id)
+ if history.user != trans.user and not trans.user_is_admin():
+ if trans.sa_session.query(trans.app.model.HistoryUserShareAssociation).filter_by(user=trans.user, history=history).count() == 0:
+ trans.response.status = 400
+ return("History is not owned by or shared with current user")
+ except:
+ trans.response.status = 400
+ return "That history does not exist."
+ history.deleted = True
+ # If deleting the current history, make a new current.
+ if history == trans.get_history():
+ trans.new_history()
+ if trans.app.config.allow_user_dataset_purge:
+ for hda in history.datasets:
+ hda.purged = True
+ trans.sa_session.add( hda )
+ if hda.dataset.user_can_purge:
+ try:
+ hda.dataset.full_delete()
+ trans.sa_session.add( hda.dataset )
+ except:
+ trans.sa_session.flush()
--- a/lib/galaxy/web/api/history_contents.py Mon Aug 22 10:45:22 2011 -0400
+++ b/lib/galaxy/web/api/history_contents.py Mon Aug 22 12:29:49 2011 -0700
@@ -21,42 +21,23 @@
"""
GET /api/histories/{encoded_history_id}/contents
Displays a collection (list) of history contents
- """
- rval = []
- current_user_roles = trans.get_current_user_roles()
- def traverse( folder ):
- admin = trans.user_is_admin()
- rval = []
- for subfolder in folder.active_folders:
- if not admin:
- can_access, folder_ids = trans.app.security_agent.check_folder_contents( trans.user, current_user_roles, subfolder )
- if (admin or can_access) and not subfolder.deleted:
- subfolder.api_path = folder.api_path + '/' + subfolder.name
- subfolder.api_type = 'folder'
- rval.append( subfolder )
- rval.extend( traverse( subfolder ) )
- for ld in folder.datasets:
- if not admin:
- can_access = trans.app.security_agent.can_access_dataset( current_user_roles, ld.library_dataset_dataset_association.dataset )
- if (admin or can_access) and not ld.deleted:
- ld.api_path = folder.api_path + '/' + ld.name
- ld.api_type = 'file'
- rval.append( ld )
- return rval
- #log.debug("Entering Content API for history with %s" % str(history_id))
+ """
try:
decoded_history_id = trans.security.decode_id( history_id )
except TypeError:
trans.response.status = 400
return "Malformed history id ( %s ) specified, unable to decode." % str( history_id )
try:
- history = trans.sa_session.query( trans.app.model.History ).get( decoded_history_id )
+ history = trans.sa_session.query(trans.app.model.History).get(decoded_history_id)
+ if history.user != trans.user and not trans.user_is_admin():
+ if trans.sa_session.query(trans.app.model.HistoryUserShareAssociation).filter_by(user=trans.user, history=history).count() == 0:
+ trans.response.status = 400
+ return("History is not owned by or shared with current user")
except:
- history = None
- if not history or not ( trans.user_is_admin() or trans.app.security_agent.can_access_history( current_user_roles, history ) ):
trans.response.status = 400
- return "Invalid history id ( %s ) specified." % str( history_id )
- #log.debug("History item %s" % str(history))
+ return "That history does not exist."
+
+ rval = []
try:
for dataset in history.datasets:
api_type = "file"
@@ -93,10 +74,12 @@
try:
content = trans.sa_session.query( model_class ).get( decoded_content_id )
except:
- content = None
- if not content or ( not trans.user_is_admin() and not trans.app.security_agent.can_access_library_item( trans.get_current_user_roles(), content, trans.user ) ):
trans.response.status = 400
return "Invalid %s id ( %s ) specified." % ( content_type, str( content_id ) )
+ if content.history.user != trans.user and not trans.user_is_admin():
+ if trans.sa_session.query(trans.app.model.HistoryUserShareAssociation).filter_by(user=trans.user, history=history).count() == 0:
+ trans.response.status = 400
+ return("History is not owned by or shared with current user")
item = content.get_api_value( view='element' )
if not item['deleted']:
# Problem: Method url_for cannot use the dataset controller
@@ -106,14 +89,21 @@
# url_for is being phased out, so new applications should use url
item['download_url'] = url(controller='dataset', action='display', dataset_id=trans.security.encode_id(decoded_content_id), to_ext=content.ext)
except Exception, e:
- log.debug("Error in history API at listing dataset: %s" % str(e))
+ log.debug("Error in history API at listing dataset: %s" % str(e))
return item
@web.expose_api
def create( self, trans, history_id, payload, **kwd ):
"""
- POST /api/libraries/{encoded_library_id}/contents
- Creates a new history content item (file or folder).
- """
- trans.response.status = 403
- return "Not implemented."
+ POST /api/libraries/{encoded_history_id}/contents
+ Creates a new history content item. """
+ params = util.Params( payload )
+ history_id = util.restore_text( params.get( 'history_id', None ) )
+ ldda_id = util.restore_text( params.get( 'ldda_id', None ) )
+ add_to_history = True
+ decoded_history_id = trans.security.decode_id( history_id )
+ ld_t, ld_id = trans.security.decode_string_id(ldda_id).split('.')
+ history = trans.sa_session.query(trans.app.model.History).get(decoded_history_id)
+ ldda = trans.sa_session.query(self.app.model.LibraryDatasetDatasetAssociation).get(ld_id)
+ hda = ldda.to_history_dataset_association(history, add_to_history=add_to_history)
+ history.add_dataset(hda)
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/d57affe81874/
changeset: d57affe81874
user: dan
date: 2011-08-25 16:00:09
summary: Minor tool help updates.
affected #: 28 files (7.7 KB)
--- a/tools/fastq/fastq_combiner.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_combiner.xml Thu Aug 25 10:00:09 2011 -0400
@@ -66,5 +66,12 @@
Specifying a set of quality scores is optional; when not provided, the output will be fastqsanger or fastqcssanger (when a csfasta is provided) with each quality score being the maximal allowed value (93).
Use this tool, for example, to convert 454-type output to FASTQ.
+
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
</help></tool>
--- a/tools/fastq/fastq_filter.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_filter.xml Thu Aug 25 10:00:09 2011 -0400
@@ -307,5 +307,12 @@
Adapter bases in color space reads are excluded from filtering.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_groomer.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_groomer.xml Thu Aug 25 10:00:09 2011 -0400
@@ -358,6 +358,12 @@
Diagram adapted from http://en.wikipedia.org/wiki/FASTQ_format
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
.. _Cock PJ, Fields CJ, Goto N, Heuer ML, Rice PM. The Sanger FASTQ file format for sequences with quality scores, and the Solexa/Illumina FASTQ variants. Nucleic Acids Res. 2009 Dec 16.: http://www.ncbi.nlm.nih.gov/pubmed/20015970
--- a/tools/fastq/fastq_manipulation.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_manipulation.xml Thu Aug 25 10:00:09 2011 -0400
@@ -417,5 +417,13 @@
2. Click **Add new Manipulate Reads**, change **Manipulate Reads on** to "Sequence Content", set **Sequence Manipulation Type** to "Change Adapter Base" and set **New Adapter** to "" (an empty text field).
3. Click **Add new Manipulate Reads**, change **Manipulate Reads on** to "Sequence Content", set **Sequence Manipulation Type** to "String Translate" and set **From** to "0123." and **To** to "ACGTN".
4. Click Execute. The new history item will contained double-encoded psuedo-nucleotide space reads.
+
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_masker_by_quality.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_masker_by_quality.xml Thu Aug 25 10:00:09 2011 -0400
@@ -49,5 +49,12 @@
This tool is not available for use on color space (csSanger) formats.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_paired_end_joiner.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_paired_end_joiner.xml Thu Aug 25 10:00:09 2011 -0400
@@ -51,5 +51,12 @@
+HWI-EAS91_1_30788AAXX:7:21:1542:1758
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh`hfhhVZSWehR
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_paired_end_splitter.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_paired_end_splitter.xml Thu Aug 25 10:00:09 2011 -0400
@@ -52,5 +52,12 @@
+HWI-EAS91_1_30788AAXX:7:21:1542:1758/2
hhhhhhhhhhhhhhhhhhhhhhhh`hfhhVZSWehR
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_stats.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_stats.xml Thu Aug 25 10:00:09 2011 -0400
@@ -60,5 +60,12 @@
Adapter bases in color space reads are excluded from statistics.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_to_fasta.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_to_fasta.xml Thu Aug 25 10:00:09 2011 -0400
@@ -29,5 +29,12 @@
This tool converts FASTQ sequencing reads to FASTA sequences.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_to_tabular.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_to_tabular.xml Thu Aug 25 10:00:09 2011 -0400
@@ -90,5 +90,12 @@
Note the sequences and quality strings have been truncated for display purposes in the above tables.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_trimmer.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_trimmer.xml Thu Aug 25 10:00:09 2011 -0400
@@ -109,5 +109,12 @@
Trimming a color space read will cause any adapter base to be lost.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/fastq_trimmer_by_quality.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/fastq_trimmer_by_quality.xml Thu Aug 25 10:00:09 2011 -0400
@@ -134,5 +134,12 @@
Trimming a color space read will cause any adapter base to be lost.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/fastq/tabular_to_fastq.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/fastq/tabular_to_fastq.xml Thu Aug 25 10:00:09 2011 -0400
@@ -33,5 +33,12 @@
This tool attempts to convert a tabular file containing sequencing read data to a FASTQ formatted file. The FASTQ Groomer tool should always be used on the output of this tool.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Gordon A, Von Kuster G, Coraor N, Taylor J, Nekrutenko A; Galaxy Team. Manipulation of FASTQ data with Galaxy. Bioinformatics. 2010 Jul 15;26(14):1783-5. <http://www.ncbi.nlm.nih.gov/pubmed/20562416>`_
+
+
</help></tool>
--- a/tools/maf/genebed_maf_to_fasta.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/genebed_maf_to_fasta.xml Thu Aug 25 10:00:09 2011 -0400
@@ -87,6 +87,12 @@
* stitches blocks together and resolves overlaps based on alignment score;
* outputs alignments in FASTA format.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
</help></tool>
--- a/tools/maf/interval2maf.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/interval2maf.xml Thu Aug 25 10:00:09 2011 -0400
@@ -283,5 +283,12 @@
s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/interval2maf_pairwise.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/interval2maf_pairwise.xml Thu Aug 25 10:00:09 2011 -0400
@@ -39,5 +39,12 @@
.. image:: ./static/images/maf_icons/interval2maf.png
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/interval_maf_to_merged_fasta.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/interval_maf_to_merged_fasta.xml Thu Aug 25 10:00:09 2011 -0400
@@ -103,5 +103,12 @@
.. image:: ./static/images/maf_icons/stitchMaf.png
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/maf_by_block_number.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_by_block_number.xml Thu Aug 25 10:00:09 2011 -0400
@@ -28,5 +28,13 @@
**What it does**
This tool takes a list of block numbers, one per line, and extracts the corresponding MAF blocks from the provided file. Block numbers start at 0.
+
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/maf_filter.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_filter.xml Thu Aug 25 10:00:09 2011 -0400
@@ -191,5 +191,12 @@
You can also provide a size range and limit your output to the MAF blocks which fall within the specified range.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/maf_limit_size.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_limit_size.xml Thu Aug 25 10:00:09 2011 -0400
@@ -24,5 +24,13 @@
**What it does**
This tool takes a MAF file and a size range and extracts the MAF blocks which fall within the specified range.
+
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/maf_limit_to_species.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_limit_to_species.xml Thu Aug 25 10:00:09 2011 -0400
@@ -39,6 +39,13 @@
* **Exclude blocks with have only one species** - if this option is set to **YES** all single sequence alignment blocks WILL NOT be returned.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/maf_reverse_complement.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_reverse_complement.xml Thu Aug 25 10:00:09 2011 -0400
@@ -41,5 +41,13 @@
s hg17.chr7 31156555 58 - 158628139 CCTCTTCCACTATAGACCTCCTTAAACAAAATAATGAAAAATGAATAAACCACAAATT
s panTro1.chr6 31691510 58 - 161576975 CCTCTTCCACTATAGACCTCCTTAAACAAAATAATGAAAAACGAATAAACCACAAATT
s mm5.chr6 120816549 54 - 149721531 CCTCTTCCACTGAGGAATTTCTTTTTTTAAATGATGAGCAATCAATGAAACG----TT
+
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/maf_split_by_species.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_split_by_species.xml Thu Aug 25 10:00:09 2011 -0400
@@ -211,6 +211,13 @@
- An "i" line containing information about what is in the aligned species DNA before and after the immediately preceding "s" line;
- An "e" line containing information about the size of the gap between the alignments that span the current block.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/maf_stats.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_stats.xml Thu Aug 25 10:00:09 2011 -0400
@@ -108,5 +108,13 @@
======== =========== ========
where **coverage** is the number of nucleotides divided by the total length of the provided intervals.
+
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
+
</help></tool>
--- a/tools/maf/maf_thread_for_species.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_thread_for_species.xml Thu Aug 25 10:00:09 2011 -0400
@@ -48,6 +48,11 @@
s hg17.chr7 127471195 389 + 158628139 gtttgccatcttttgctgctctagggaatccagcagctgtcaccatgtaaacaagcccaggctagaccaGTTACCCTCATCATCTTAGCTGATAGCCAGCCAGCCACCACAGGCAtgagtcaggccatattgctggacccacagaattatgagctaaataaatagtcttgggttaagccactaagttttaggcatagtgtgttatgtaTCTCACAAACATATAAGACTGTGTGTTTGTTGACTGGAGGAAGAGATGCTATAAAGACCACCTTTTAAAACTTCCCAAATACTGCCACTGATGTCCTGATGGAGGTATGAAAACATCCACTAAAATTTGTGGTTTATTCATTTTTCATTATTTTGTTTAAGGAGGTCTATAGTGGAAGAGG
s panTro1.chr6 129885076 389 + 161576975 gtttgccatcttttgctgctcttgggaatccagcagctgtcaccatgtaaacaagcccaggctagaccaGTTACCCTCATCATCTTAGCTGATAGCCAGCCAGCCACCACAGGCAtgagtcaggccatattgctggacccacagaattatgagctaaataaatagtcttgggttaagccactaagttttaggcatagtgtgttatgtaTCTCACAAACATATAAGACTGTGTGTTTGTTGACTGGAGGAAGAGATGCTATAAAGACCACCTTTTGAAACTTCCCAAATACTGCCACTGATGTCCTGATGGAGGTATGAAAACATCCACTAAAATTTGTGGTTTATTCGTTTTTCATTATTTTGTTTAAGGAGGTCTATAGTGGAAGAGG
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
</help>
--- a/tools/maf/maf_to_bed.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_to_bed.xml Thu Aug 25 10:00:09 2011 -0400
@@ -123,6 +123,12 @@
5. score - A score between 0 and 1000.
6. strand - Defines the strand - either '+' or '-'.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
</help><code file="maf_to_bed_code.py"/>
--- a/tools/maf/maf_to_fasta.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_to_fasta.xml Thu Aug 25 10:00:09 2011 -0400
@@ -188,6 +188,12 @@
- An "i" line containing information about what is in the aligned species DNA before and after the immediately preceding "s" line;
- An "e" line containing information about the size of the gap between the alignments that span the current block.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
</help></tool>
--- a/tools/maf/maf_to_interval.xml Wed Aug 24 17:15:34 2011 -0400
+++ b/tools/maf/maf_to_interval.xml Thu Aug 25 10:00:09 2011 -0400
@@ -121,6 +121,12 @@
- An "i" line containing information about what is in the aligned species DNA before and after the immediately preceding "s" line;
- An "e" line containing information about the size of the gap between the alignments that span the current block.
+------
+
+**Citation**
+
+If you use this tool, please cite `Blankenberg D, Taylor J, Nekrutenko A; The Galaxy Team. Making whole genome multiple alignments usable for biologists. Bioinformatics. 2011 Sep 1;27(17):2426-2428. <http://www.ncbi.nlm.nih.gov/pubmed/21775304>`_
+
</help></tool>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/9986212ed733/
changeset: 9986212ed733
user: jgoecks
date: 2011-08-24 23:15:34
summary: Cleanup display of shared visualizations.
affected #: 1 file (7 bytes)
--- a/templates/visualization/display.mako Wed Aug 24 16:43:02 2011 -0400
+++ b/templates/visualization/display.mako Wed Aug 24 17:15:34 2011 -0400
@@ -58,7 +58,7 @@
</%def><%def name="render_item( visualization, config )">
- <div id="${visualization.id}" class="unified-panel-body" style="overflow:none;top:0px;"></div>
+ <div id="${trans.security.encode_id( visualization.id )}" class="unified-panel-body" style="overflow:none;top:0px;"></div><script type="text/javascript">
// TODO: much of this code is copied from browser.mako -- create shared base and use in both places.
@@ -76,15 +76,14 @@
converted_datasets_state_url = "${h.url_for( controller='/tracks', action='converted_datasets_state' )}",
addable_track_types = { "LineTrack": LineTrack, "FeatureTrack": FeatureTrack, "ReadTrack": ReadTrack },
view,
- container_element = $("#${visualization.id}");
+ container_element = $("#${trans.security.encode_id( visualization.id )}");
$(function() {
if (container_element.parents(".item-content").length > 0) { // Embedded viz
container_element.parents(".item-content").css( { "max-height": "none", "overflow": "visible" } );
} else { // Viewing just one shared viz
- // TODO: need live or just bind click?
- $("#right-border").live("click", function() { view.resize_window(); });
+ $("#right-border").click(function() { view.resize_window(); });
}
// Create view and add tracks.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/606085ebe5f5/
changeset: 606085ebe5f5
user: kanwei
date: 2011-08-24 22:43:02
summary: sam2interval: Add read_name column
affected #: 4 files (18.4 KB)
--- a/test-data/sam2interval_noprintAll.dat Wed Aug 24 15:33:07 2011 -0400
+++ b/test-data/sam2interval_noprintAll.dat Wed Aug 24 16:43:02 2011 -0400
@@ -1,7 +1,7 @@
-#chrom start end strand
-ref 6 22 +
-ref 8 19 +
-ref 8 14 +
-ref 15 40 +
-ref 28 33 -
-ref 36 45 -
+#chrom start end strand read_name
+ref 6 22 + r001
+ref 8 19 + r002
+ref 8 14 + r003
+ref 15 40 + r004
+ref 28 33 - r003
+ref 36 45 - r001
--- a/test-data/sam2interval_printAll.dat Wed Aug 24 15:33:07 2011 -0400
+++ b/test-data/sam2interval_printAll.dat Wed Aug 24 16:43:02 2011 -0400
@@ -1,4 +1,4 @@
-#chrom start end strand
+#chrom start end strand read_name
ref 6 22 + r001 163 ref 7 30 8M2I4M1D3M = 37 39 TTAGATAAAGGATACTA *
ref 8 19 + r002 0 ref 9 30 3S6M1P1I4M * 0 0 AAAAGATAAGGATA *
ref 8 14 + r003 0 ref 9 30 5H6M * 0 0 AGCTAA * NM:i:1
--- a/test-data/sam2interval_with_unmapped_reads_noprintAll.dat Wed Aug 24 15:33:07 2011 -0400
+++ b/test-data/sam2interval_with_unmapped_reads_noprintAll.dat Wed Aug 24 16:43:02 2011 -0400
@@ -1,927 +1,927 @@
-#chrom start end strand
-chrM 6565 6641 -
-chrM 4096 4172 -
-chrM 14759 14835 -
-chrM 1244 1320 -
-chrM 5317 5393 +
-chrM 10934 11010 -
-chr1 567534 567610 -
-chrM 16407 16483 -
-chrM 8684 8760 +
-chrM 4952 5028 -
-chr1 567927 568003 -
-chrM 6830 6906 -
-chrM 7432 7508 +
-chrM 5342 5418 -
-chrM 3199 3275 -
-chrM 1392 1468 +
-chrM 7909 7985 +
-chr2 49456941 49457017 -
-chrM 16239 16315 +
-chrM 11515 11591 -
-chrM 7343 7419 -
-chrM 5628 5704 +
-chrM 9238 9314 +
-chrM 202 278 -
-chrM 10065 10141 +
-chrM 9875 9951 +
-chrM 9031 9107 -
-chr1 564778 564854 -
-chrM 5333 5409 -
-chrM 435 511 +
-chrM 4066 4142 +
-chrM 6214 6290 +
-chrM 7217 7293 -
-chrM 11261 11337 -
-chrM 14521 14597 -
-chrM 3593 3669 -
-chr17 22023720 22023796 -
-chrM 12846 12922 -
-chrM 7047 7123 -
-chrM 2693 2769 +
-chrM 8062 8138 -
-chrM 6159 6235 +
-chr1 566417 566493 -
-chrM 3031 3107 -
-chrM 6276 6352 +
-chrM 14786 14862 -
-chrM 10589 10665 +
-chrM 16248 16324 -
-chrM 7319 7395 +
-chrM 3527 3603 +
-chrM 13998 14074 +
-chrM 13229 13305 +
-chrM 7456 7532 -
-chrM 5109 5185 -
-chrM 2909 2985 +
-chr13 110076579 110076655 +
-chr1 566432 566508 -
-chr1 565743 565819 -
-chrM 3155 3231 -
-chrM 4657 4733 +
-chrM 7368 7444 +
-chrM 5329 5405 -
-chrM 2171 2247 -
-chr1 568282 568358 +
-chrM 4376 4452 +
-chrM 14645 14721 -
-chrM 4694 4770 -
-chrM 2412 2488 +
-chrM 9057 9133 -
-chrM 10527 10603 +
-chr1 564493 564569 -
-chrM 7102 7178 +
-chrM 10896 10972 -
-chrM 13626 13702 +
-chrM 5609 5685 +
-chrM 7666 7742 -
-chrM 14730 14806 +
-chrM 10682 10758 +
-chrM 5069 5145 +
-chr1 566474 566550 -
-chrM 9140 9216 +
-chrM 16340 16416 -
-chr1 565718 565794 -
-chrM 6732 6808 +
-chrM 16239 16315 +
-chrM 3180 3256 -
-chrM 13789 13865 +
-chrM 10350 10426 +
-chrM 10519 10595 -
-chrM 5391 5467 +
-chrM 6420 6496 -
-chrM 745 821 -
-chrM 1023 1099 +
-chr1 569720 569796 +
-chr1 569272 569348 +
-chrM 10091 10167 +
-chrM 10937 11013 -
-chrM 6460 6536 -
-chrM 12342 12418 +
-chrM 8694 8770 -
-chrM 2104 2180 +
-chrM 16386 16462 -
-chrM 3224 3300 +
-chr1 564901 564977 -
-chr1 564729 564805 -
-chrM 6453 6529 -
-chrM 9602 9678 -
-chrM 5756 5832 +
-chrM 10562 10638 +
-chrM 2816 2892 +
-chrM 9681 9757 -
-chrM 11237 11313 -
-chrM 3920 3996 -
-chrM 8192 8268 +
-chrM 1720 1796 -
-chrM 14707 14783 -
-chrM 11125 11201 -
-chr1 569107 569183 +
-chrM 9111 9187 +
-chrM 3908 3984 +
-chrM 14018 14094 -
-chrM 11284 11360 -
-chrM 3592 3668 -
-chrM 14471 14547 +
-chrM 2865 2941 -
-chrM 9703 9779 +
-chrM 16034 16110 -
-chr5 134262582 134262658 -
-chrM 2197 2273 -
-chrM 15072 15148 -
-chrM 13030 13106 -
-chrM 12457 12533 -
-chrM 1868 1944 -
-chrM 10249 10325 +
-chrM 12210 12286 +
-chrM 4022 4098 -
-chrM 16199 16275 +
-chrM 13120 13196 -
-chrM 13023 13099 -
-chrM 8719 8795 -
-chrM 8674 8750 -
-chr1 569410 569486 -
-chrM 16066 16142 -
-chr11 10529687 10529763 -
-chrM 7208 7284 -
-chrM 10193 10269 +
-chrM 1280 1356 -
-chrM 14135 14211 -
-chrM 131 207 -
-chrM 847 923 -
-chrM 8651 8727 -
-chrM 14879 14955 +
-chrM 15558 15634 -
-chrM 2986 3062 -
-chrM 2502 2578 +
-chrM 9781 9857 -
-chrM 13380 13456 -
-chr3 96335987 96336063 -
-chrM 7094 7170 -
-chrM 15731 15807 -
-chrM 12004 12080 +
-chrM 12835 12911 +
-chrM 3314 3390 -
-chrM 4030 4106 +
-chr1 569884 569960 -
-chrM 6647 6723 +
-chr1 566600 566676 -
-chrM 2430 2506 +
-chrM 12833 12909 +
-chr1 568256 568332 +
-chrM 13222 13298 -
-chrM 10321 10397 -
-chrM 8614 8690 -
-chrM 6581 6657 +
-chrM 3526 3602 +
-chrM 11413 11489 +
-chrM 9826 9902 -
-chr5 134259175 134259251 -
-chrM 3314 3390 -
-chrM 11146 11222 -
-chrM 2735 2811 +
-chrM 1695 1771 +
-chrM 3333 3409 -
-chr1 567391 567467 -
-chrM 3110 3186 -
-chr1 567574 567650 -
-chrM 15552 15628 +
-chrX 125606487 125606563 -
-chrM 9205 9281 +
-chr5 134260176 134260252 -
-chrM 3023 3099 -
-chr1 566110 566186 +
-chr1 569285 569361 -
-chrM 12692 12768 +
-chrM 10442 10518 +
-chrM 8008 8084 +
-chr1 567269 567345 +
-chrM 10796 10872 +
-chrM 2903 2979 -
-chrM 10349 10425 +
-chr13 110076645 110076721 -
-chrM 9283 9359 -
-chrM 2816 2892 +
-chrM 2816 2892 +
-chrM 6529 6605 +
-chrM 16312 16388 -
-chrM 5295 5371 +
-chrM 4061 4137 -
-chrM 5949 6025 +
-chrM 2680 2756 -
-chrM 4032 4108 +
-chrM 13081 13157 +
-chrM 2979 3055 -
-chrM 2335 2411 +
-chr1 567560 567636 +
-chrM 14790 14866 +
-chrM 1316 1392 -
-chr1 568495 568571 -
-chrM 15907 15983 +
-chrM 3937 4013 +
-chrM 2357 2433 +
-chr1 567258 567334 +
-chrM 10600 10676 -
-chrM 8474 8550 -
-chrM 11515 11591 -
-chr1 567287 567363 +
-chrM 11167 11243 +
-chrM 15521 15597 -
-chrM 10943 11019 -
-chrM 6201 6277 +
-chrM 12696 12772 -
-chrM 10796 10872 +
-chrM 2960 3036 -
-chrM 14774 14850 +
-chrM 9545 9621 +
-chrM 1007 1083 -
-chrM 14806 14882 -
-chrM 14909 14985 -
-chrM 9123 9199 +
-chrM 7198 7274 -
-chr1 568855 568931 -
-chrM 11186 11262 -
-chrM 1094 1170 +
-chrM 1754 1830 +
-chrM 6393 6469 +
-chrM 8906 8982 -
-chrM 3919 3995 -
-chrM 10951 11027 +
-chrM 6624 6700 -
-chrM 7883 7959 +
-chr1 567275 567351 +
-chrM 6483 6559 +
-chrM 9937 10013 -
-chrM 6529 6605 -
-chrM 3650 3726 -
-chrM 10905 10981 -
-chrM 8023 8099 +
-chrM 10902 10978 +
-chrM 6461 6537 +
-chrM 13049 13125 -
-chrM 11515 11591 -
-chrM 5360 5436 -
-chrM 11605 11681 +
-chrM 2357 2433 -
-chrM 6309 6385 +
-chr1 567281 567357 +
-chr7 45291595 45291671 -
-chrM 14614 14690 -
-chrM 2978 3054 -
-chrM 7048 7124 -
-chrM 11084 11160 -
-chrM 2259 2335 -
-chrM 5416 5492 -
-chr5 134263614 134263690 -
-chrM 14179 14255 -
-chr1 566599 566675 +
-chrM 14895 14971 -
-chr13 110076472 110076548 +
-chrM 7849 7925 -
-chrM 14822 14898 +
-chr1 569878 569954 +
-chrM 3272 3348 -
-chrM 12276 12352 -
-chrM 5839 5915 +
-chrM 9009 9085 +
-chr1 569321 569397 -
-chrM 11416 11492 -
-chrM 3866 3942 -
-chrM 11415 11491 -
-chrM 9583 9659 -
-chrM 10422 10498 -
-chrM 9066 9142 +
-chrM 11515 11591 -
-chrM 15452 15528 +
-chrM 239 315 +
-chrM 16322 16398 +
-chrM 1012 1088 -
-chrM 6176 6252 -
-chrM 10809 10885 +
-chr1 568094 568170 -
-chrM 13321 13397 -
-chrM 5752 5828 -
-chrM 4132 4208 +
-chrM 16250 16326 -
-chrM 10796 10872 +
-chrM 11898 11974 -
-chr1 564877 564953 +
-chrM 8256 8332 +
-chrM 15488 15564 +
-chrM 2804 2880 +
-chrM 4878 4954 +
-chrM 11258 11334 -
-chrM 4153 4229 +
-chrM 11225 11301 -
-chrM 892 968 -
-chrM 4399 4475 -
-chr18 45379660 45379736 -
-chrM 9171 9247 -
-chrM 3176 3252 +
-chrM 1013 1089 -
-chrM 6704 6780 +
-chrM 8749 8825 -
-chrM 7066 7142 +
-chrM 11180 11256 +
-chrM 8322 8398 +
-chr1 567957 568033 +
-chrM 12819 12895 -
-chr5 134260214 134260290 +
-chrM 420 496 +
-chrM 3397 3473 -
-chrM 9718 9794 -
-chr5 134263411 134263487 -
-chrM 14912 14988 -
-chr1 568792 568868 -
-chrM 14376 14452 -
-chrM 15473 15549 -
-chrM 4212 4288 +
-chrM 235 311 +
-chrM 5094 5170 +
-chrM 4701 4777 -
-chr1 567602 567678 -
-chrM 10938 11014 +
-chrM 420 496 +
-chrM 5114 5190 +
-chrM 11791 11867 -
-chrM 11390 11466 +
-chrM 1225 1301 -
-chrM 3047 3123 -
-chrM 4385 4461 -
-chrM 11200 11276 -
-chrM 3851 3927 -
-chrM 4926 5002 +
-chrM 2816 2892 +
-chrM 7291 7367 +
-chrM 11092 11168 -
-chrM 26 102 +
-chrM 10355 10431 +
-chrM 1568 1644 +
-chrM 11392 11468 +
-chrM 5798 5874 -
-chrM 14694 14770 +
-chrM 13875 13951 -
-chr1 567902 567978 -
-chr1 568804 568880 -
-chrM 4812 4888 -
-chr1 568073 568149 +
-chrM 4558 4634 -
-chrM 6420 6496 +
-chrM 12281 12357 +
-chr1 567571 567647 -
-chrM 4033 4109 -
-chrM 15496 15572 +
-chrM 3602 3678 +
-chrM 9106 9182 -
-chr5 134263406 134263482 -
-chrM 16051 16127 -
-chrM 10840 10916 +
-chrM 6801 6877 +
-chrM 2799 2875 -
-chrM 12419 12495 +
-chrM 1101 1177 +
-chrM 10421 10497 +
-chrM 11275 11351 -
-chrM 11075 11151 +
-chrM 7886 7962 -
-chrM 16033 16109 +
-chrM 4255 4331 -
-chrM 13766 13842 -
-chrM 15943 16019 -
-chrM 6064 6140 -
-chr1 567894 567970 +
-chrM 10668 10744 -
-chrM 8496 8572 +
-chrM 16271 16347 -
-chr1 569382 569458 -
-chrM 7950 8026 -
-chrM 7717 7793 +
-chrM 9241 9317 -
-chrM 13783 13859 -
-chrM 4885 4961 -
-chrM 3929 4005 -
-chrM 3741 3817 +
-chr9 33658974 33659050 -
-chrM 11889 11965 +
-chrM 13119 13195 -
-chrM 3874 3950 +
-chrM 3422 3498 +
-chr5 134259813 134259889 -
-chrM 15043 15119 +
-chrM 6634 6710 -
-chrM 11221 11297 +
-chrM 13462 13538 +
-chrM 10796 10872 +
-chrM 5955 6031 +
-chr11 10529688 10529764 -
-chrM 2862 2938 -
-chrM 8157 8233 +
-chrM 6781 6857 +
-chr1 567555 567631 +
-chrM 2089 2165 -
-chrM 10663 10739 -
-chrM 13240 13316 -
-chrM 15437 15513 +
-chr1 566620 566696 +
-chrM 5680 5756 -
-chrM 77 153 -
-chrM 9139 9215 +
-chr1 564695 564771 +
-chrM 3155 3231 +
-chrM 2816 2892 +
-chrM 7477 7553 +
-chrM 8879 8955 +
-chrM 8860 8936 +
-chrM 4706 4782 +
-chrM 6466 6542 -
-chrM 13439 13515 +
-chrM 4166 4242 +
-chrM 9147 9223 -
-chr3 96336311 96336387 -
-chrM 9272 9348 -
-chrM 10928 11004 -
-chrM 5040 5116 +
-chrM 10030 10106 +
-chrM 14452 14528 -
-chrM 13808 13884 -
-chrM 310 386 -
-chrM 6445 6521 -
-chrM 9707 9783 -
-chrM 6447 6523 -
-chrM 7578 7654 +
-chrM 4896 4972 +
-chrM 11515 11591 -
-chrM 10946 11022 -
-chrM 6842 6918 +
-chrM 495 571 +
-chrM 5505 5581 -
-chrM 11721 11797 +
-chrM 15651 15727 -
-chrM 2110 2186 +
-chr1 568855 568931 -
-chrM 8051 8127 -
-chrM 14308 14384 -
-chr1 567878 567954 +
-chrM 6304 6380 -
-chrM 7969 8045 -
-chrM 6293 6369 -
-chrM 818 894 +
-chrM 14261 14337 -
-chrM 11374 11450 +
-chrM 8045 8121 -
-chrM 8681 8757 +
-chrM 3486 3562 -
-chr1 566494 566570 +
-chrM 9878 9954 -
-chr1 564505 564581 +
-chrM 11417 11493 +
-chrM 15652 15728 +
-chrM 5104 5180 +
-chrM 3164 3240 +
-chrM 11719 11795 -
-chrM 395 471 +
-chrM 3166 3242 +
-chrM 9042 9118 +
-chrM 10915 10991 +
-chrM 8037 8113 -
-chrM 10604 10680 -
-chrM 15976 16052 +
-chrM 7775 7851 -
-chrM 11581 11657 -
-chrM 773 849 -
-chrM 16288 16364 -
-chrM 1281 1357 +
-chrM 1657 1733 +
-chrM 10176 10252 -
-chrM 3185 3261 -
-chrM 6377 6453 -
-chrM 11399 11475 +
-chrM 10678 10754 -
-chrM 1452 1528 -
-chrM 11618 11694 -
-chrM 13579 13655 -
-chrM 15858 15934 +
-chrM 9293 9369 -
-chrM 1083 1159 +
-chrM 2816 2892 +
-chrM 2730 2806 +
-chrM 8902 8978 +
-chrM 4252 4328 +
-chrM 11609 11685 -
-chrM 10880 10956 +
-chrM 13288 13364 -
-chrM 676 752 +
-chrM 793 869 -
-chrM 8931 9007 +
-chrM 3544 3620 +
-chrM 3696 3772 +
-chrM 9368 9444 -
-chrM 2816 2892 +
-chrM 9102 9178 +
-chrM 2980 3056 -
-chr1 567271 567347 +
-chrM 9582 9658 -
-chrM 13325 13401 -
-chrM 7896 7972 +
-chrM 3345 3421 -
-chrM 16365 16441 +
-chrM 10811 10887 -
-chr1 569902 569978 -
-chrM 3314 3390 -
-chrM 15883 15959 -
-chr1 564724 564800 -
-chrM 4714 4790 -
-chrM 16468 16544 -
-chrM 6558 6634 -
-chrM 8279 8355 +
-chrM 1881 1957 +
-chrM 10313 10389 -
-chrM 12145 12221 +
-chrM 12198 12274 +
-chrM 13527 13603 -
-chrM 11054 11130 -
-chrM 2819 2895 +
-chrM 15764 15840 +
-chrM 13208 13284 +
-chrM 516 592 +
-chrM 14986 15062 +
-chrM 6236 6312 +
-chrM 9719 9795 +
-chrM 10293 10369 -
-chrM 11050 11126 +
-chrM 1352 1428 -
-chrM 843 919 +
-chr5 79947252 79947328 -
-chrM 4199 4275 -
-chrM 14674 14750 -
-chrM 15289 15365 -
-chrM 13553 13629 -
-chrM 2816 2892 +
-chrM 10274 10350 -
-chrM 691 767 -
-chrM 3523 3599 +
-chr1 567903 567979 +
-chrM 11291 11367 +
-chrM 9494 9570 -
-chrM 9917 9993 -
-chrM 2184 2260 +
-chrM 2202 2278 -
-chrM 14827 14903 +
-chrM 9116 9192 -
-chrM 12049 12125 -
-chr6 62284081 62284157 +
-chrM 8153 8229 +
-chrM 6592 6668 -
-chrM 7578 7654 +
-chrM 3314 3390 -
-chrM 12063 12139 -
-chrM 7082 7158 -
-chrM 13050 13126 -
-chrM 3747 3823 -
-chrM 10833 10909 -
-chrM 10742 10818 -
-chrM 11066 11142 -
-chrM 2816 2892 +
-chrM 3553 3629 -
-chr1 569068 569144 -
-chrM 9590 9666 +
-chrM 2048 2124 -
-chrM 9815 9891 +
-chrM 3314 3390 -
-chrM 13055 13131 +
-chrM 2760 2836 -
-chrM 3779 3855 -
-chrM 10951 11027 -
-chrM 1532 1608 -
-chrM 11772 11848 +
-chrM 1359 1435 +
-chrM 15988 16064 -
-chrM 4956 5032 +
-chrM 2963 3039 -
-chr1 567336 567412 -
-chrM 2110 2186 -
-chrM 3258 3334 +
-chr5 134263454 134263530 -
-chrM 8869 8945 +
-chrM 9229 9305 +
-chrM 6579 6655 -
-chrM 5779 5855 -
-chrM 12474 12550 +
-chrM 2034 2110 -
-chrM 3141 3217 -
-chrM 12218 12294 -
-chrM 9137 9213 +
-chrM 942 1018 -
-chrM 2929 3005 +
-chrM 1414 1490 -
-chrM 5327 5403 -
-chr17 22023721 22023797 -
-chrM 11067 11143 +
-chrM 12329 12405 +
-chrM 12612 12688 +
-chr1 567541 567617 +
-chrM 2818 2894 +
-chrM 12488 12564 -
-chrM 5293 5369 +
-chrM 8194 8270 +
-chrM 11313 11389 -
-chrM 15065 15141 -
-chrM 14965 15041 -
-chrM 10333 10409 -
-chrM 8351 8427 +
-chrM 3535 3611 -
-chrM 6366 6442 -
-chrM 2738 2814 -
-chr17 22023745 22023821 +
-chrM 16084 16160 -
-chr1 569903 569979 +
-chrM 832 908 -
-chrM 5348 5424 -
-chrM 15288 15364 -
-chrM 12508 12584 -
-chrM 5346 5422 +
-chrM 5850 5926 -
-chrM 7255 7331 -
-chrM 13798 13874 +
-chr1 564464 564540 -
-chrM 8421 8497 +
-chrM 6910 6986 -
-chrM 15124 15200 -
-chrM 7287 7363 +
-chrM 4946 5022 +
-chrM 14314 14390 +
-chrM 15363 15439 -
-chrM 2346 2422 +
-chrM 11124 11200 +
-chr1 567514 567590 +
-chrM 4665 4741 -
-chrM 3366 3442 -
-chr1 569857 569933 -
-chrM 4786 4862 -
-chrM 3536 3612 -
-chrM 8273 8349 -
-chrM 10604 10680 +
-chrM 8343 8419 +
-chrM 7121 7197 -
-chrM 2816 2892 +
-chrM 1589 1665 -
-chrM 5372 5448 -
-chr1 568483 568559 -
-chrM 15853 15929 -
-chrM 2861 2937 +
-chrM 7209 7285 +
-chrM 9836 9912 -
-chrM 12185 12261 -
-chrM 13832 13908 -
-chrM 7789 7865 +
-chrM 4318 4394 -
-chrM 9787 9863 +
-chrM 14017 14093 -
-chrM 13058 13134 -
-chrM 6046 6122 -
-chrM 2350 2426 +
-chrM 7201 7277 -
-chrM 11145 11221 +
-chrM 6757 6833 -
-chrM 9485 9561 +
-chrM 12688 12764 -
-chrM 5083 5159 +
-chrM 11354 11430 -
-chrM 16485 16561 -
-chrM 12347 12423 +
-chrM 7204 7280 +
-chrM 8040 8116 -
-chrM 3701 3777 -
-chrM 400 476 -
-chrM 10483 10559 +
-chr1 569286 569362 -
-chrM 7122 7198 -
-chrM 7081 7157 -
-chr5 134259841 134259917 -
-chrM 10965 11041 +
-chrM 708 784 +
-chrM 4655 4731 -
-chrM 1182 1258 -
-chrM 2748 2824 +
-chr1 565770 565846 +
-chrM 5147 5223 +
-chrM 5507 5583 +
-chrM 1750 1826 -
-chrM 11017 11093 -
-chrM 11224 11300 -
-chrM 3825 3901 -
-chrM 15613 15689 -
-chrM 7536 7612 -
-chrM 13045 13121 -
-chrM 14403 14479 -
-chrM 12541 12617 -
-chrM 13561 13637 -
-chrM 110 186 +
-chrM 7145 7221 -
-chr17 22023719 22023795 -
-chrM 3397 3473 -
-chrM 3390 3466 +
-chrM 2344 2420 -
-chrM 7891 7967 -
-chrM 10934 11010 -
-chrM 15433 15509 -
-chrM 3337 3413 +
-chrM 6474 6550 -
-chrM 11837 11913 +
-chrM 13862 13938 +
-chrM 5411 5487 -
-chrM 10514 10590 +
-chrM 8413 8489 +
-chrM 15375 15451 -
-chr1 569717 569793 +
-chrM 11380 11456 +
-chr1 566164 566240 -
-chr1 566667 566743 +
-chrM 3173 3249 +
-chrM 10233 10309 -
-chrM 3992 4068 -
-chrM 16338 16414 +
-chrM 9010 9086 -
-chrM 12729 12805 +
-chrM 6394 6470 -
-chrM 6142 6218 +
-chrM 4363 4439 -
-chrM 2944 3020 -
-chr5 134263378 134263454 -
-chrM 13831 13907 -
-chrM 13023 13099 -
-chrM 10640 10716 +
-chrM 2145 2221 -
-chrM 12006 12082 -
-chrM 5093 5169 -
-chrM 9773 9849 +
-chrM 1591 1667 +
-chrM 443 519 +
-chrM 10852 10928 -
-chrM 16255 16331 -
-chrM 15014 15090 +
-chrM 11515 11591 -
-chrM 2816 2892 +
-chrM 12031 12107 +
-chrM 3700 3776 +
-chrM 7218 7294 -
-chrM 3314 3390 -
-chrM 3935 4011 -
-chrM 9536 9612 -
-chrM 3994 4070 -
-chrM 9513 9589 +
-chrM 4616 4692 -
-chr11 10530763 10530839 +
-chrM 13156 13232 +
-chrM 12212 12288 +
-chrM 1964 2040 -
-chr1 567269 567345 -
-chrM 5448 5524 +
-chrM 978 1054 -
-chrM 4651 4727 -
-chr3 96336206 96336282 -
-chrM 10537 10613 +
-chrM 10640 10716 +
-chrM 12895 12971 -
-chr1 566580 566656 +
-chrM 2816 2892 +
-chrM 7637 7713 -
-chrM 3874 3950 +
-chr5 134263381 134263457 -
-chr5 79947212 79947288 -
-chrM 3041 3117 +
-chr1 564478 564554 -
-chrM 8018 8094 -
-chrM 11377 11453 +
-chrM 2600 2676 -
-chrM 6442 6518 +
-chrM 465 541 +
-chrM 10317 10393 -
-chrM 13465 13541 -
-chrM 2687 2763 -
-chrM 1579 1655 +
-chrM 5460 5536 +
-chrM 54 130 +
-chrM 8424 8500 -
-chrM 6234 6310 -
-chrM 11515 11591 -
-chrM 3784 3860 -
-chrM 2816 2892 +
-chrM 8859 8935 +
-chrM 5082 5158 +
-chrM 6666 6742 +
-chrM 14287 14363 +
-chrM 4369 4445 +
-chrM 12361 12437 +
-chrM 3314 3390 -
-chrM 2148 2224 +
-chr5 134259835 134259911 +
-chrM 12519 12595 -
-chrM 3582 3658 +
-chrM 11384 11460 +
-chrM 11431 11507 +
-chrM 11288 11364 -
-chrM 1805 1881 -
-chrM 10179 10255 +
-chrM 3314 3390 -
-chrM 8780 8856 -
-chrM 3734 3810 +
-chr11 10530095 10530171 +
-chrM 1385 1461 +
-chrM 9675 9751 +
-chrM 11084 11160 +
-chrM 8583 8659 +
-chrM 3305 3381 +
-chrM 8512 8588 -
-chrM 11287 11363 -
-chrM 4790 4866 +
-chrM 1435 1511 -
-chr1 567255 567331 -
-chrM 566 642 -
-chrM 13143 13219 -
-chrM 12171 12247 -
-chrM 11264 11340 +
-chrM 9209 9285 -
-chrM 10940 11016 -
-chrM 11515 11591 -
-chrM 6685 6761 -
-chrM 184 260 -
-chrM 31 107 +
-chrM 11170 11246 +
-chrM 15089 15165 -
-chrM 8123 8199 -
-chrM 12144 12220 -
-chrM 5813 5889 -
-chrM 15487 15563 +
-chrM 7975 8051 -
-chrM 14369 14445 +
-chrM 4772 4848 +
-chrM 16483 16559 -
-chrM 8096 8172 -
-chrM 34 110 -
-chrM 10347 10423 +
-chrM 14112 14188 +
-chrM 6575 6651 +
-chrM 696 772 +
-chrM 11790 11866 -
-chrM 16268 16344 -
-chr13 110076567 110076643 +
-chrM 1687 1763 +
-chrM 10936 11012 -
-chrM 3994 4070 +
-chr1 566609 566685 +
-chrM 3842 3918 +
-chrM 9306 9382 -
-chrM 16224 16300 -
-chrM 3903 3979 -
-chrM 2943 3019 -
-chrM 14533 14609 -
-chrM 11515 11591 -
-chrM 8482 8558 -
-chrM 11515 11591 -
-chr1 565758 565834 +
-chrM 8485 8561 -
-chrM 3314 3390 -
-chrM 11316 11392 -
-chrM 2370 2446 -
-chrM 14762 14838 +
-chr1 568483 568559 -
-chrM 3019 3095 +
-chr1 564926 565002 -
-chrM 12573 12649 -
-chrM 2816 2892 +
-chrM 14111 14187 -
-chrM 2462 2538 -
-chrM 8469 8545 +
-chrM 11092 11168 -
-chrM 6473 6549 +
-chrM 16220 16296 -
-chrM 4832 4908 +
-chr17 22023725 22023801 -
-chr1 567374 567450 -
-chrM 11821 11897 +
-chrM 8061 8137 -
-chr5 134260199 134260275 -
-chrM 9877 9953 -
-chrM 11833 11909 +
-chrM 3658 3734 -
-chrM 861 937 -
-chrM 5607 5683 +
-chrM 8622 8698 -
-chrM 9468 9544 +
-chrM 10362 10438 -
-chrM 3138 3214 +
-chrM 4320 4396 -
-chr1 567521 567597 -
-chrM 8468 8544 +
-chrM 3891 3967 -
-chrM 13657 13733 -
-chrM 9922 9998 -
-chrM 15865 15941 +
-chrM 5353 5429 -
-chrM 8744 8820 +
-chrM 5339 5415 +
-chrM 3734 3810 +
-chrM 4252 4328 +
-chrM 13502 13578 +
-chrM 16346 16422 +
+#chrom start end strand read_name
+chrM 6565 6641 - GA5:3:1:24:1745#0/1
+chrM 4096 4172 - GA5:3:1:23:263#0/1
+chrM 14759 14835 - GA5:3:1:24:1658#0/1
+chrM 1244 1320 - GA5:3:1:24:1108#0/1
+chrM 5317 5393 + GA5:3:1:24:1272#0/1
+chrM 10934 11010 - GA5:3:1:25:1989#0/1
+chr1 567534 567610 - GA5:3:1:25:1877#0/1
+chrM 16407 16483 - GA5:3:1:25:1203#0/1
+chrM 8684 8760 + GA5:3:1:24:1720#0/1
+chrM 4952 5028 - GA5:3:1:25:74#0/1
+chr1 567927 568003 - GA5:3:1:26:129#0/1
+chrM 6830 6906 - GA5:3:1:27:1860#0/1
+chrM 7432 7508 + GA5:3:1:26:303#0/1
+chrM 5342 5418 - GA5:3:1:27:509#0/1
+chrM 3199 3275 - GA5:3:1:27:1876#0/1
+chrM 1392 1468 + GA5:3:1:27:462#0/1
+chrM 7909 7985 + GA5:3:1:27:1826#0/1
+chr2 49456941 49457017 - GA5:3:1:28:1961#0/1
+chrM 16239 16315 + GA5:3:1:25:1902#0/1
+chrM 11515 11591 - GA5:3:1:28:704#0/1
+chrM 7343 7419 - GA5:3:1:29:78#0/1
+chrM 5628 5704 + GA5:3:1:29:65#0/1
+chrM 9238 9314 + GA5:3:1:30:571#0/1
+chrM 202 278 - GA5:3:1:30:1418#0/1
+chrM 10065 10141 + GA5:3:1:31:1998#0/1
+chrM 9875 9951 + GA5:3:1:32:1159#0/1
+chrM 9031 9107 - GA5:3:1:32:1723#0/1
+chr1 564778 564854 - GA5:3:1:32:1365#0/1
+chrM 5333 5409 - GA5:3:1:33:300#0/1
+chrM 435 511 + GA5:3:1:33:625#0/1
+chrM 4066 4142 + GA5:3:1:33:1597#0/1
+chrM 6214 6290 + GA5:3:1:32:1051#0/1
+chrM 7217 7293 - GA5:3:1:33:1476#0/1
+chrM 11261 11337 - GA5:3:1:34:1493#0/1
+chrM 14521 14597 - GA5:3:1:35:718#0/1
+chrM 3593 3669 - GA5:3:1:35:1074#0/1
+chr17 22023720 22023796 - GA5:3:1:35:1946#0/1
+chrM 12846 12922 - GA5:3:1:36:143#0/1
+chrM 7047 7123 - GA5:3:1:38:1282#0/1
+chrM 2693 2769 + GA5:3:1:36:258#0/1
+chrM 8062 8138 - GA5:3:1:38:1622#0/1
+chrM 6159 6235 + GA5:3:1:39:651#0/1
+chr1 566417 566493 - GA5:3:1:40:1756#0/1
+chrM 3031 3107 - GA5:3:1:41:277#0/1
+chrM 6276 6352 + GA5:3:1:41:24#0/1
+chrM 14786 14862 - GA5:3:1:42:1739#0/1
+chrM 10589 10665 + GA5:3:1:44:1997#0/1
+chrM 16248 16324 - GA5:3:1:42:449#0/1
+chrM 7319 7395 + GA5:3:1:44:1202#0/1
+chrM 3527 3603 + GA5:3:1:44:1689#0/1
+chrM 13998 14074 + GA5:3:1:45:1004#0/1
+chrM 13229 13305 + GA5:3:1:46:1996#0/1
+chrM 7456 7532 - GA5:3:1:46:1624#0/1
+chrM 5109 5185 - GA5:3:1:47:148#0/1
+chrM 2909 2985 + GA5:3:1:46:1928#0/1
+chr13 110076579 110076655 + GA5:3:1:48:345#0/1
+chr1 566432 566508 - GA5:3:1:49:208#0/1
+chr1 565743 565819 - GA5:3:1:48:1620#0/1
+chrM 3155 3231 - GA5:3:1:48:1536#0/1
+chrM 4657 4733 + GA5:3:1:49:1377#0/1
+chrM 7368 7444 + GA5:3:1:51:1072#0/1
+chrM 5329 5405 - GA5:3:1:51:78#0/1
+chrM 2171 2247 - GA5:3:1:51:851#0/1
+chr1 568282 568358 + GA5:3:1:52:518#0/1
+chrM 4376 4452 + GA5:3:1:52:796#0/1
+chrM 14645 14721 - GA5:3:1:52:192#0/1
+chrM 4694 4770 - GA5:3:1:55:1412#0/1
+chrM 2412 2488 + GA5:3:1:53:1458#0/1
+chrM 9057 9133 - GA5:3:1:55:1305#0/1
+chrM 10527 10603 + GA5:3:1:55:855#0/1
+chr1 564493 564569 - GA5:3:1:55:451#0/1
+chrM 7102 7178 + GA5:3:1:55:299#0/1
+chrM 10896 10972 - GA5:3:1:55:1194#0/1
+chrM 13626 13702 + GA5:3:1:56:1499#0/1
+chrM 5609 5685 + GA5:3:1:57:959#0/1
+chrM 7666 7742 - GA5:3:1:56:473#0/1
+chrM 14730 14806 + GA5:3:1:56:636#0/1
+chrM 10682 10758 + GA5:3:1:57:1408#0/1
+chrM 5069 5145 + GA5:3:1:58:763#0/1
+chr1 566474 566550 - GA5:3:1:59:688#0/1
+chrM 9140 9216 + GA5:3:1:59:791#0/1
+chrM 16340 16416 - GA5:3:1:59:503#0/1
+chr1 565718 565794 - GA5:3:1:61:1190#0/1
+chrM 6732 6808 + GA5:3:1:58:1920#0/1
+chrM 16239 16315 + GA5:3:1:57:1111#0/1
+chrM 3180 3256 - GA5:3:1:61:1838#0/1
+chrM 13789 13865 + GA5:3:1:61:722#0/1
+chrM 10350 10426 + GA5:3:1:62:1796#0/1
+chrM 10519 10595 - GA5:3:1:62:1469#0/1
+chrM 5391 5467 + GA5:3:1:63:1214#0/1
+chrM 6420 6496 - GA5:3:1:61:594#0/1
+chrM 745 821 - GA5:3:1:62:1922#0/1
+chrM 1023 1099 + GA5:3:1:63:762#0/1
+chr1 569720 569796 + GA5:3:1:61:900#0/1
+chr1 569272 569348 + GA5:3:1:63:462#0/1
+chrM 10091 10167 + GA5:3:1:63:709#0/1
+chrM 10937 11013 - GA5:3:1:63:1686#0/1
+chrM 6460 6536 - GA5:3:1:64:1185#0/1
+chrM 12342 12418 + GA5:3:1:64:1804#0/1
+chrM 8694 8770 - GA5:3:1:67:480#0/1
+chrM 2104 2180 + GA5:3:1:65:500#0/1
+chrM 16386 16462 - GA5:3:1:68:398#0/1
+chrM 3224 3300 + GA5:3:1:67:298#0/1
+chr1 564901 564977 - GA5:3:1:67:612#0/1
+chr1 564729 564805 - GA5:3:1:68:336#0/1
+chrM 6453 6529 - GA5:3:1:68:1266#0/1
+chrM 9602 9678 - GA5:3:1:68:1282#0/1
+chrM 5756 5832 + GA5:3:1:72:332#0/1
+chrM 10562 10638 + GA5:3:1:72:1394#0/1
+chrM 2816 2892 + GA5:3:1:69:117#0/1
+chrM 9681 9757 - GA5:3:1:72:1576#0/1
+chrM 11237 11313 - GA5:3:1:72:1817#0/1
+chrM 3920 3996 - GA5:3:1:72:1884#0/1
+chrM 8192 8268 + GA5:3:1:73:1128#0/1
+chrM 1720 1796 - GA5:3:1:73:1334#0/1
+chrM 14707 14783 - GA5:3:1:73:870#0/1
+chrM 11125 11201 - GA5:3:1:73:743#0/1
+chr1 569107 569183 + GA5:3:1:73:124#0/1
+chrM 9111 9187 + GA5:3:1:73:1774#0/1
+chrM 3908 3984 + GA5:3:1:74:276#0/1
+chrM 14018 14094 - GA5:3:1:74:1707#0/1
+chrM 11284 11360 - GA5:3:1:75:739#0/1
+chrM 3592 3668 - GA5:3:1:75:1808#0/1
+chrM 14471 14547 + GA5:3:1:75:1740#0/1
+chrM 2865 2941 - GA5:3:1:76:1071#0/1
+chrM 9703 9779 + GA5:3:1:78:1517#0/1
+chrM 16034 16110 - GA5:3:1:77:509#0/1
+chr5 134262582 134262658 - GA5:3:1:77:84#0/1
+chrM 2197 2273 - GA5:3:1:77:137#0/1
+chrM 15072 15148 - GA5:3:1:79:1703#0/1
+chrM 13030 13106 - GA5:3:1:78:1438#0/1
+chrM 12457 12533 - GA5:3:1:80:1988#0/1
+chrM 1868 1944 - GA5:3:1:79:708#0/1
+chrM 10249 10325 + GA5:3:1:81:1195#0/1
+chrM 12210 12286 + GA5:3:1:82:274#0/1
+chrM 4022 4098 - GA5:3:1:82:806#0/1
+chrM 16199 16275 + GA5:3:1:83:1274#0/1
+chrM 13120 13196 - GA5:3:1:83:13#0/1
+chrM 13023 13099 - GA5:3:1:83:466#0/1
+chrM 8719 8795 - GA5:3:1:82:161#0/1
+chrM 8674 8750 - GA5:3:1:84:1918#0/1
+chr1 569410 569486 - GA5:3:1:86:1188#0/1
+chrM 16066 16142 - GA5:3:1:85:383#0/1
+chr11 10529687 10529763 - GA5:3:1:85:419#0/1
+chrM 7208 7284 - GA5:3:1:86:1840#0/1
+chrM 10193 10269 + GA5:3:1:86:1396#0/1
+chrM 1280 1356 - GA5:3:1:86:1670#0/1
+chrM 14135 14211 - GA5:3:1:87:1553#0/1
+chrM 131 207 - GA5:3:1:87:968#0/1
+chrM 847 923 - GA5:3:1:88:944#0/1
+chrM 8651 8727 - GA5:3:1:88:722#0/1
+chrM 14879 14955 + GA5:3:1:88:1905#0/1
+chrM 15558 15634 - GA5:3:1:90:183#0/1
+chrM 2986 3062 - GA5:3:1:91:1288#0/1
+chrM 2502 2578 + GA5:3:1:91:1865#0/1
+chrM 9781 9857 - GA5:3:1:93:1339#0/1
+chrM 13380 13456 - GA5:3:1:93:289#0/1
+chr3 96335987 96336063 - GA5:3:1:91:1901#0/1
+chrM 7094 7170 - GA5:3:1:93:31#0/1
+chrM 15731 15807 - GA5:3:1:93:607#0/1
+chrM 12004 12080 + GA5:3:1:90:1958#0/1
+chrM 12835 12911 + GA5:3:1:93:1806#0/1
+chrM 3314 3390 - GA5:3:1:94:1167#0/1
+chrM 4030 4106 + GA5:3:1:94:636#0/1
+chr1 569884 569960 - GA5:3:1:93:1176#0/1
+chrM 6647 6723 + GA5:3:1:94:131#0/1
+chr1 566600 566676 - GA5:3:1:95:952#0/1
+chrM 2430 2506 + GA5:3:1:94:989#0/1
+chrM 12833 12909 + GA5:3:1:94:703#0/1
+chr1 568256 568332 + GA5:3:1:95:1072#0/1
+chrM 13222 13298 - GA5:3:1:95:866#0/1
+chrM 10321 10397 - GA5:3:1:96:1665#0/1
+chrM 8614 8690 - GA5:3:1:96:1702#0/1
+chrM 6581 6657 + GA5:3:1:97:734#0/1
+chrM 3526 3602 + GA5:3:1:97:239#0/1
+chrM 11413 11489 + GA5:3:1:98:1829#0/1
+chrM 9826 9902 - GA5:3:1:98:1819#0/1
+chr5 134259175 134259251 - GA5:3:1:98:222#0/1
+chrM 3314 3390 - GA5:3:1:99:476#0/1
+chrM 11146 11222 - GA5:3:1:98:271#0/1
+chrM 2735 2811 + GA5:3:1:98:770#0/1
+chrM 1695 1771 + GA5:3:1:100:1425#0/1
+chrM 3333 3409 - GA5:3:1:99:1469#0/1
+chr1 567391 567467 - GA5:3:1:100:1178#0/1
+chrM 3110 3186 - GA5:3:1:101:849#0/1
+chr1 567574 567650 - GA5:3:1:102:707#0/1
+chrM 15552 15628 + GA5:3:1:103:1995#0/1
+chrX 125606487 125606563 - GA5:3:1:99:740#0/1
+chrM 9205 9281 + GA5:3:1:103:300#0/1
+chr5 134260176 134260252 - GA5:3:1:103:505#0/1
+chrM 3023 3099 - GA5:3:1:103:1266#0/1
+chr1 566110 566186 + GA5:3:1:103:637#0/1
+chr1 569285 569361 - GA5:3:1:104:856#0/1
+chrM 12692 12768 + GA5:3:1:100:1609#0/1
+chrM 10442 10518 + GA5:3:1:104:645#0/1
+chrM 8008 8084 + GA5:3:1:104:948#0/1
+chr1 567269 567345 + GA5:3:1:105:775#0/1
+chrM 10796 10872 + GA5:3:1:104:1070#0/1
+chrM 2903 2979 - GA5:3:1:104:1800#0/1
+chrM 10349 10425 + GA5:3:1:106:1608#0/1
+chr13 110076645 110076721 - GA5:3:1:108:1351#0/1
+chrM 9283 9359 - GA5:3:1:107:1114#0/1
+chrM 2816 2892 + GA5:3:1:108:1305#0/1
+chrM 2816 2892 + GA5:3:1:108:615#0/1
+chrM 6529 6605 + GA5:3:1:110:954#0/1
+chrM 16312 16388 - GA5:3:1:111:941#0/1
+chrM 5295 5371 + GA5:3:1:111:207#0/1
+chrM 4061 4137 - GA5:3:1:112:1363#0/1
+chrM 5949 6025 + GA5:3:1:112:974#0/1
+chrM 2680 2756 - GA5:3:1:113:519#0/1
+chrM 4032 4108 + GA5:3:1:112:1748#0/1
+chrM 13081 13157 + GA5:3:1:113:728#0/1
+chrM 2979 3055 - GA5:3:1:113:1888#0/1
+chrM 2335 2411 + GA5:3:1:113:1937#0/1
+chr1 567560 567636 + GA5:3:1:114:1152#0/1
+chrM 14790 14866 + GA5:3:1:114:1895#0/1
+chrM 1316 1392 - GA5:3:1:114:910#0/1
+chr1 568495 568571 - GA5:3:1:114:1273#0/1
+chrM 15907 15983 + GA5:3:1:115:1736#0/1
+chrM 3937 4013 + GA5:3:1:116:1034#0/1
+chrM 2357 2433 + GA5:3:1:116:1207#0/1
+chr1 567258 567334 + GA5:3:1:115:454#0/1
+chrM 10600 10676 - GA5:3:1:116:898#0/1
+chrM 8474 8550 - GA5:3:1:116:1215#0/1
+chrM 11515 11591 - GA5:3:1:117:1182#0/1
+chr1 567287 567363 + GA5:3:1:117:422#0/1
+chrM 11167 11243 + GA5:3:1:118:1611#0/1
+chrM 15521 15597 - GA5:3:1:117:643#0/1
+chrM 10943 11019 - GA5:3:1:118:598#0/1
+chrM 6201 6277 + GA5:3:1:118:1255#0/1
+chrM 12696 12772 - GA5:3:1:120:134#0/1
+chrM 10796 10872 + GA5:3:1:119:783#0/1
+chrM 2960 3036 - GA5:3:1:120:1597#0/1
+chrM 14774 14850 + GA5:3:1:120:122#0/1
+chrM 9545 9621 + GA5:3:1:121:1197#0/1
+chrM 1007 1083 - GA5:3:1:121:1070#0/1
+chrM 14806 14882 - GA5:3:1:121:277#0/1
+chrM 14909 14985 - GA5:3:1:122:604#0/1
+chrM 9123 9199 + GA5:3:1:123:334#0/1
+chrM 7198 7274 - GA5:3:1:123:1597#0/1
+chr1 568855 568931 - GA5:3:1:122:153#0/1
+chrM 11186 11262 - GA5:3:1:123:1737#0/1
+chrM 1094 1170 + GA5:3:1:125:126#0/1
+chrM 1754 1830 + GA5:3:1:125:1359#0/1
+chrM 6393 6469 + GA5:3:1:126:1749#0/1
+chrM 8906 8982 - GA5:3:1:126:102#0/1
+chrM 3919 3995 - GA5:3:1:127:288#0/1
+chrM 10951 11027 + GA5:3:1:126:1454#0/1
+chrM 6624 6700 - GA5:3:1:127:711#0/1
+chrM 7883 7959 + GA5:3:1:130:1391#0/1
+chr1 567275 567351 + GA5:3:1:129:1716#0/1
+chrM 6483 6559 + GA5:3:1:131:1895#0/1
+chrM 9937 10013 - GA5:3:1:132:1632#0/1
+chrM 6529 6605 - GA5:3:1:132:1866#0/1
+chrM 3650 3726 - GA5:3:1:131:1555#0/1
+chrM 10905 10981 - GA5:3:1:133:152#0/1
+chrM 8023 8099 + GA5:3:1:133:261#0/1
+chrM 10902 10978 + GA5:3:1:133:884#0/1
+chrM 6461 6537 + GA5:3:1:133:793#0/1
+chrM 13049 13125 - GA5:3:1:134:409#0/1
+chrM 11515 11591 - GA5:3:1:134:937#0/1
+chrM 5360 5436 - GA5:3:1:135:4#0/1
+chrM 11605 11681 + GA5:3:1:136:764#0/1
+chrM 2357 2433 - GA5:3:1:136:1126#0/1
+chrM 6309 6385 + GA5:3:1:137:774#0/1
+chr1 567281 567357 + GA5:3:1:136:1459#0/1
+chr7 45291595 45291671 - GA5:3:1:137:385#0/1
+chrM 14614 14690 - GA5:3:1:138:1810#0/1
+chrM 2978 3054 - GA5:3:1:138:422#0/1
+chrM 7048 7124 - GA5:3:1:138:1360#0/1
+chrM 11084 11160 - GA5:3:1:139:124#0/1
+chrM 2259 2335 - GA5:3:1:139:1525#0/1
+chrM 5416 5492 - GA5:3:1:140:1536#0/1
+chr5 134263614 134263690 - GA5:3:1:140:1015#0/1
+chrM 14179 14255 - GA5:3:1:140:1072#0/1
+chr1 566599 566675 + GA5:3:1:141:9#0/1
+chrM 14895 14971 - GA5:3:1:141:734#0/1
+chr13 110076472 110076548 + GA5:3:1:141:473#0/1
+chrM 7849 7925 - GA5:3:1:141:1890#0/1
+chrM 14822 14898 + GA5:3:1:143:1226#0/1
+chr1 569878 569954 + GA5:3:1:142:635#0/1
+chrM 3272 3348 - GA5:3:1:141:548#0/1
+chrM 12276 12352 - GA5:3:1:143:1775#0/1
+chrM 5839 5915 + GA5:3:1:144:603#0/1
+chrM 9009 9085 + GA5:3:1:143:1215#0/1
+chr1 569321 569397 - GA5:3:1:145:350#0/1
+chrM 11416 11492 - GA5:3:1:145:644#0/1
+chrM 3866 3942 - GA5:3:1:146:75#0/1
+chrM 11415 11491 - GA5:3:1:145:1743#0/1
+chrM 9583 9659 - GA5:3:1:146:229#0/1
+chrM 10422 10498 - GA5:3:1:146:1848#0/1
+chrM 9066 9142 + GA5:3:1:147:11#0/1
+chrM 11515 11591 - GA5:3:1:147:148#0/1
+chrM 15452 15528 + GA5:3:1:148:1088#0/1
+chrM 239 315 + GA5:3:1:147:1796#0/1
+chrM 16322 16398 + GA5:3:1:148:200#0/1
+chrM 1012 1088 - GA5:3:1:149:607#0/1
+chrM 6176 6252 - GA5:3:1:150:1681#0/1
+chrM 10809 10885 + GA5:3:1:145:528#0/1
+chr1 568094 568170 - GA5:3:1:151:1905#0/1
+chrM 13321 13397 - GA5:3:1:152:1759#0/1
+chrM 5752 5828 - GA5:3:1:151:117#0/1
+chrM 4132 4208 + GA5:3:1:152:348#0/1
+chrM 16250 16326 - GA5:3:1:150:1406#0/1
+chrM 10796 10872 + GA5:3:1:153:1969#0/1
+chrM 11898 11974 - GA5:3:1:155:1916#0/1
+chr1 564877 564953 + GA5:3:1:154:190#0/1
+chrM 8256 8332 + GA5:3:1:155:1870#0/1
+chrM 15488 15564 + GA5:3:1:156:1707#0/1
+chrM 2804 2880 + GA5:3:1:157:280#0/1
+chrM 4878 4954 + GA5:3:1:156:977#0/1
+chrM 11258 11334 - GA5:3:1:157:1848#0/1
+chrM 4153 4229 + GA5:3:1:158:172#0/1
+chrM 11225 11301 - GA5:3:1:158:451#0/1
+chrM 892 968 - GA5:3:1:159:1719#0/1
+chrM 4399 4475 - GA5:3:1:158:1248#0/1
+chr18 45379660 45379736 - GA5:3:1:158:147#0/1
+chrM 9171 9247 - GA5:3:1:160:1547#0/1
+chrM 3176 3252 + GA5:3:1:160:687#0/1
+chrM 1013 1089 - GA5:3:1:161:170#0/1
+chrM 6704 6780 + GA5:3:1:161:1744#0/1
+chrM 8749 8825 - GA5:3:1:161:1370#0/1
+chrM 7066 7142 + GA5:3:1:161:786#0/1
+chrM 11180 11256 + GA5:3:1:163:213#0/1
+chrM 8322 8398 + GA5:3:1:163:300#0/1
+chr1 567957 568033 + GA5:3:1:163:493#0/1
+chrM 12819 12895 - GA5:3:1:163:1069#0/1
+chr5 134260214 134260290 + GA5:3:1:165:1929#0/1
+chrM 420 496 + GA5:3:1:164:263#0/1
+chrM 3397 3473 - GA5:3:1:164:1037#0/1
+chrM 9718 9794 - GA5:3:1:166:14#0/1
+chr5 134263411 134263487 - GA5:3:1:167:897#0/1
+chrM 14912 14988 - GA5:3:1:166:1121#0/1
+chr1 568792 568868 - GA5:3:1:168:466#0/1
+chrM 14376 14452 - GA5:3:1:169:469#0/1
+chrM 15473 15549 - GA5:3:1:170:1990#0/1
+chrM 4212 4288 + GA5:3:1:168:531#0/1
+chrM 235 311 + GA5:3:1:169:257#0/1
+chrM 5094 5170 + GA5:3:1:170:206#0/1
+chrM 4701 4777 - GA5:3:1:174:968#0/1
+chr1 567602 567678 - GA5:3:1:174:359#0/1
+chrM 10938 11014 + GA5:3:1:174:1235#0/1
+chrM 420 496 + GA5:3:1:174:1870#0/1
+chrM 5114 5190 + GA5:3:1:175:842#0/1
+chrM 11791 11867 - GA5:3:1:176:1895#0/1
+chrM 11390 11466 + GA5:3:1:179:872#0/1
+chrM 1225 1301 - GA5:3:1:178:724#0/1
+chrM 3047 3123 - GA5:3:1:180:469#0/1
+chrM 4385 4461 - GA5:3:1:179:0#0/1
+chrM 11200 11276 - GA5:3:1:183:1380#0/1
+chrM 3851 3927 - GA5:3:1:181:113#0/1
+chrM 4926 5002 + GA5:3:1:183:1147#0/1
+chrM 2816 2892 + GA5:3:1:178:594#0/1
+chrM 7291 7367 + GA5:3:1:184:1316#0/1
+chrM 11092 11168 - GA5:3:1:184:595#0/1
+chrM 26 102 + GA5:3:1:184:321#0/1
+chrM 10355 10431 + GA5:3:1:185:1665#0/1
+chrM 1568 1644 + GA5:3:1:185:1489#0/1
+chrM 11392 11468 + GA5:3:1:186:48#0/1
+chrM 5798 5874 - GA5:3:1:186:1149#0/1
+chrM 14694 14770 + GA5:3:1:185:695#0/1
+chrM 13875 13951 - GA5:3:1:186:79#0/1
+chr1 567902 567978 - GA5:3:1:188:1579#0/1
+chr1 568804 568880 - GA5:3:1:188:143#0/1
+chrM 4812 4888 - GA5:3:1:189:54#0/1
+chr1 568073 568149 + GA5:3:1:190:47#0/1
+chrM 4558 4634 - GA5:3:1:190:942#0/1
+chrM 6420 6496 + GA5:3:1:190:1501#0/1
+chrM 12281 12357 + GA5:3:1:190:10#0/1
+chr1 567571 567647 - GA5:3:1:190:115#0/1
+chrM 4033 4109 - GA5:3:1:191:1028#0/1
+chrM 15496 15572 + GA5:3:1:191:679#0/1
+chrM 3602 3678 + GA5:3:1:191:1675#0/1
+chrM 9106 9182 - GA5:3:1:191:1941#0/1
+chr5 134263406 134263482 - GA5:3:1:192:946#0/1
+chrM 16051 16127 - GA5:3:1:192:307#0/1
+chrM 10840 10916 + GA5:3:1:192:907#0/1
+chrM 6801 6877 + GA5:3:1:192:632#0/1
+chrM 2799 2875 - GA5:3:1:193:1404#0/1
+chrM 12419 12495 + GA5:3:1:193:1223#0/1
+chrM 1101 1177 + GA5:3:1:194:286#0/1
+chrM 10421 10497 + GA5:3:1:194:290#0/1
+chrM 11275 11351 - GA5:3:1:194:1585#0/1
+chrM 11075 11151 + GA5:3:1:195:193#0/1
+chrM 7886 7962 - GA5:3:1:194:1786#0/1
+chrM 16033 16109 + GA5:3:1:196:162#0/1
+chrM 4255 4331 - GA5:3:1:195:1872#0/1
+chrM 13766 13842 - GA5:3:1:196:137#0/1
+chrM 15943 16019 - GA5:3:1:196:1042#0/1
+chrM 6064 6140 - GA5:3:1:196:1036#0/1
+chr1 567894 567970 + GA5:3:1:196:367#0/1
+chrM 10668 10744 - GA5:3:1:197:1705#0/1
+chrM 8496 8572 + GA5:3:1:198:1613#0/1
+chrM 16271 16347 - GA5:3:1:196:1626#0/1
+chr1 569382 569458 - GA5:3:1:199:1635#0/1
+chrM 7950 8026 - GA5:3:1:200:1321#0/1
+chrM 7717 7793 + GA5:3:1:201:872#0/1
+chrM 9241 9317 - GA5:3:1:202:100#0/1
+chrM 13783 13859 - GA5:3:1:202:706#0/1
+chrM 4885 4961 - GA5:3:1:202:865#0/1
+chrM 3929 4005 - GA5:3:1:203:1231#0/1
+chrM 3741 3817 + GA5:3:1:204:528#0/1
+chr9 33658974 33659050 - GA5:3:1:204:1789#0/1
+chrM 11889 11965 + GA5:3:1:205:1026#0/1
+chrM 13119 13195 - GA5:3:1:204:1298#0/1
+chrM 3874 3950 + GA5:3:1:206:68#0/1
+chrM 3422 3498 + GA5:3:1:201:1544#0/1
+chr5 134259813 134259889 - GA5:3:1:206:918#0/1
+chrM 15043 15119 + GA5:3:1:206:600#0/1
+chrM 6634 6710 - GA5:3:1:206:155#0/1
+chrM 11221 11297 + GA5:3:1:206:1358#0/1
+chrM 13462 13538 + GA5:3:1:206:749#0/1
+chrM 10796 10872 + GA5:3:1:207:1409#0/1
+chrM 5955 6031 + GA5:3:1:208:683#0/1
+chr11 10529688 10529764 - GA5:3:1:207:1021#0/1
+chrM 2862 2938 - GA5:3:1:207:1762#0/1
+chrM 8157 8233 + GA5:3:1:209:281#0/1
+chrM 6781 6857 + GA5:3:1:208:655#0/1
+chr1 567555 567631 + GA5:3:1:210:1081#0/1
+chrM 2089 2165 - GA5:3:1:208:1256#0/1
+chrM 10663 10739 - GA5:3:1:210:680#0/1
+chrM 13240 13316 - GA5:3:1:211:142#0/1
+chrM 15437 15513 + GA5:3:1:212:1819#0/1
+chr1 566620 566696 + GA5:3:1:212:226#0/1
+chrM 5680 5756 - GA5:3:1:212:276#0/1
+chrM 77 153 - GA5:3:1:210:1710#0/1
+chrM 9139 9215 + GA5:3:1:213:1377#0/1
+chr1 564695 564771 + GA5:3:1:214:617#0/1
+chrM 3155 3231 + GA5:3:1:214:175#0/1
+chrM 2816 2892 + GA5:3:1:214:1567#0/1
+chrM 7477 7553 + GA5:3:1:214:262#0/1
+chrM 8879 8955 + GA5:3:1:214:933#0/1
+chrM 8860 8936 + GA5:3:1:214:217#0/1
+chrM 4706 4782 + GA5:3:1:216:1701#0/1
+chrM 6466 6542 - GA5:3:1:217:891#0/1
+chrM 13439 13515 + GA5:3:1:215:1144#0/1
+chrM 4166 4242 + GA5:3:1:217:568#0/1
+chrM 9147 9223 - GA5:3:1:217:1664#0/1
+chr3 96336311 96336387 - GA5:3:1:217:1833#0/1
+chrM 9272 9348 - GA5:3:1:218:216#0/1
+chrM 10928 11004 - GA5:3:1:218:1358#0/1
+chrM 5040 5116 + GA5:3:1:218:1630#0/1
+chrM 10030 10106 + GA5:3:1:219:1693#0/1
+chrM 14452 14528 - GA5:3:1:219:677#0/1
+chrM 13808 13884 - GA5:3:1:219:1089#0/1
+chrM 310 386 - GA5:3:1:220:1479#0/1
+chrM 6445 6521 - GA5:3:1:220:184#0/1
+chrM 9707 9783 - GA5:3:1:221:910#0/1
+chrM 6447 6523 - GA5:3:1:221:216#0/1
+chrM 7578 7654 + GA5:3:1:221:1614#0/1
+chrM 4896 4972 + GA5:3:1:221:147#0/1
+chrM 11515 11591 - GA5:3:1:223:1221#0/1
+chrM 10946 11022 - GA5:3:1:222:1733#0/1
+chrM 6842 6918 + GA5:3:1:225:1169#0/1
+chrM 495 571 + GA5:3:1:220:485#0/1
+chrM 5505 5581 - GA5:3:1:224:1266#0/1
+chrM 11721 11797 + GA5:3:1:219:833#0/1
+chrM 15651 15727 - GA5:3:1:225:1130#0/1
+chrM 2110 2186 + GA5:3:1:226:398#0/1
+chr1 568855 568931 - GA5:3:1:227:1794#0/1
+chrM 8051 8127 - GA5:3:1:227:995#0/1
+chrM 14308 14384 - GA5:3:1:225:1174#0/1
+chr1 567878 567954 + GA5:3:1:227:1815#0/1
+chrM 6304 6380 - GA5:3:1:229:1982#0/1
+chrM 7969 8045 - GA5:3:1:228:1113#0/1
+chrM 6293 6369 - GA5:3:1:230:1016#0/1
+chrM 818 894 + GA5:3:1:231:1353#0/1
+chrM 14261 14337 - GA5:3:1:232:1298#0/1
+chrM 11374 11450 + GA5:3:1:232:514#0/1
+chrM 8045 8121 - GA5:3:1:233:1217#0/1
+chrM 8681 8757 + GA5:3:1:232:1971#0/1
+chrM 3486 3562 - GA5:3:1:233:1277#0/1
+chr1 566494 566570 + GA5:3:1:233:903#0/1
+chrM 9878 9954 - GA5:3:1:233:970#0/1
+chr1 564505 564581 + GA5:3:1:234:1415#0/1
+chrM 11417 11493 + GA5:3:1:234:1143#0/1
+chrM 15652 15728 + GA5:3:1:235:1863#0/1
+chrM 5104 5180 + GA5:3:1:235:1036#0/1
+chrM 3164 3240 + GA5:3:1:235:1129#0/1
+chrM 11719 11795 - GA5:3:1:235:4#0/1
+chrM 395 471 + GA5:3:1:235:1636#0/1
+chrM 3166 3242 + GA5:3:1:236:962#0/1
+chrM 9042 9118 + GA5:3:1:233:1838#0/1
+chrM 10915 10991 + GA5:3:1:235:1166#0/1
+chrM 8037 8113 - GA5:3:1:237:525#0/1
+chrM 10604 10680 - GA5:3:1:237:37#0/1
+chrM 15976 16052 + GA5:3:1:237:967#0/1
+chrM 7775 7851 - GA5:3:1:237:1496#0/1
+chrM 11581 11657 - GA5:3:1:237:1125#0/1
+chrM 773 849 - GA5:3:1:239:1057#0/1
+chrM 16288 16364 - GA5:3:1:238:1759#0/1
+chrM 1281 1357 + GA5:3:1:239:855#0/1
+chrM 1657 1733 + GA5:3:1:240:348#0/1
+chrM 10176 10252 - GA5:3:1:240:94#0/1
+chrM 3185 3261 - GA5:3:1:241:1734#0/1
+chrM 6377 6453 - GA5:3:1:241:968#0/1
+chrM 11399 11475 + GA5:3:1:244:198#0/1
+chrM 10678 10754 - GA5:3:1:244:1599#0/1
+chrM 1452 1528 - GA5:3:1:244:1912#0/1
+chrM 11618 11694 - GA5:3:1:245:362#0/1
+chrM 13579 13655 - GA5:3:1:244:1135#0/1
+chrM 15858 15934 + GA5:3:1:244:1621#0/1
+chrM 9293 9369 - GA5:3:1:245:1065#0/1
+chrM 1083 1159 + GA5:3:1:246:764#0/1
+chrM 2816 2892 + GA5:3:1:246:701#0/1
+chrM 2730 2806 + GA5:3:1:247:437#0/1
+chrM 8902 8978 + GA5:3:1:247:26#0/1
+chrM 4252 4328 + GA5:3:1:247:820#0/1
+chrM 11609 11685 - GA5:3:1:248:1725#0/1
+chrM 10880 10956 + GA5:3:1:247:565#0/1
+chrM 13288 13364 - GA5:3:1:250:163#0/1
+chrM 676 752 + GA5:3:1:250:1216#0/1
+chrM 793 869 - GA5:3:1:250:872#0/1
+chrM 8931 9007 + GA5:3:1:252:1164#0/1
+chrM 3544 3620 + GA5:3:1:251:243#0/1
+chrM 3696 3772 + GA5:3:1:253:1759#0/1
+chrM 9368 9444 - GA5:3:1:253:92#0/1
+chrM 2816 2892 + GA5:3:1:255:789#0/1
+chrM 9102 9178 + GA5:3:1:252:1110#0/1
+chrM 2980 3056 - GA5:3:1:254:530#0/1
+chr1 567271 567347 + GA5:3:1:256:840#0/1
+chrM 9582 9658 - GA5:3:1:255:732#0/1
+chrM 13325 13401 - GA5:3:1:256:794#0/1
+chrM 7896 7972 + GA5:3:1:258:1864#0/1
+chrM 3345 3421 - GA5:3:1:257:1754#0/1
+chrM 16365 16441 + GA5:3:1:258:566#0/1
+chrM 10811 10887 - GA5:3:1:257:1992#0/1
+chr1 569902 569978 - GA5:3:1:259:193#0/1
+chrM 3314 3390 - GA5:3:1:259:466#0/1
+chrM 15883 15959 - GA5:3:1:259:841#0/1
+chr1 564724 564800 - GA5:3:1:259:1579#0/1
+chrM 4714 4790 - GA5:3:1:261:1344#0/1
+chrM 16468 16544 - GA5:3:1:261:260#0/1
+chrM 6558 6634 - GA5:3:1:262:807#0/1
+chrM 8279 8355 + GA5:3:1:262:1989#0/1
+chrM 1881 1957 + GA5:3:1:263:989#0/1
+chrM 10313 10389 - GA5:3:1:263:1859#0/1
+chrM 12145 12221 + GA5:3:1:265:357#0/1
+chrM 12198 12274 + GA5:3:1:265:1168#0/1
+chrM 13527 13603 - GA5:3:1:266:1591#0/1
+chrM 11054 11130 - GA5:3:1:267:532#0/1
+chrM 2819 2895 + GA5:3:1:267:178#0/1
+chrM 15764 15840 + GA5:3:1:268:587#0/1
+chrM 13208 13284 + GA5:3:1:261:133#0/1
+chrM 516 592 + GA5:3:1:268:1979#0/1
+chrM 14986 15062 + GA5:3:1:265:1679#0/1
+chrM 6236 6312 + GA5:3:1:269:0#0/1
+chrM 9719 9795 + GA5:3:1:271:508#0/1
+chrM 10293 10369 - GA5:3:1:273:745#0/1
+chrM 11050 11126 + GA5:3:1:273:1161#0/1
+chrM 1352 1428 - GA5:3:1:273:1629#0/1
+chrM 843 919 + GA5:3:1:273:1611#0/1
+chr5 79947252 79947328 - GA5:3:1:273:1624#0/1
+chrM 4199 4275 - GA5:3:1:273:1799#0/1
+chrM 14674 14750 - GA5:3:1:274:687#0/1
+chrM 15289 15365 - GA5:3:1:275:50#0/1
+chrM 13553 13629 - GA5:3:1:275:1970#0/1
+chrM 2816 2892 + GA5:3:1:277:718#0/1
+chrM 10274 10350 - GA5:3:1:276:84#0/1
+chrM 691 767 - GA5:3:1:276:1892#0/1
+chrM 3523 3599 + GA5:3:1:277:1982#0/1
+chr1 567903 567979 + GA5:3:1:276:1692#0/1
+chrM 11291 11367 + GA5:3:1:277:1664#0/1
+chrM 9494 9570 - GA5:3:1:277:675#0/1
+chrM 9917 9993 - GA5:3:1:279:1440#0/1
+chrM 2184 2260 + GA5:3:1:280:910#0/1
+chrM 2202 2278 - GA5:3:1:281:1665#0/1
+chrM 14827 14903 + GA5:3:1:281:1721#0/1
+chrM 9116 9192 - GA5:3:1:281:1007#0/1
+chrM 12049 12125 - GA5:3:1:281:410#0/1
+chr6 62284081 62284157 + GA5:3:1:281:1663#0/1
+chrM 8153 8229 + GA5:3:1:282:874#0/1
+chrM 6592 6668 - GA5:3:1:281:517#0/1
+chrM 7578 7654 + GA5:3:1:283:920#0/1
+chrM 3314 3390 - GA5:3:1:284:512#0/1
+chrM 12063 12139 - GA5:3:1:285:1895#0/1
+chrM 7082 7158 - GA5:3:1:283:1465#0/1
+chrM 13050 13126 - GA5:3:1:285:854#0/1
+chrM 3747 3823 - GA5:3:1:285:1775#0/1
+chrM 10833 10909 - GA5:3:1:286:905#0/1
+chrM 10742 10818 - GA5:3:1:289:717#0/1
+chrM 11066 11142 - GA5:3:1:290:290#0/1
+chrM 2816 2892 + GA5:3:1:290:211#0/1
+chrM 3553 3629 - GA5:3:1:291:533#0/1
+chr1 569068 569144 - GA5:3:1:291:102#0/1
+chrM 9590 9666 + GA5:3:1:292:1628#0/1
+chrM 2048 2124 - GA5:3:1:291:832#0/1
+chrM 9815 9891 + GA5:3:1:292:992#0/1
+chrM 3314 3390 - GA5:3:1:292:1448#0/1
+chrM 13055 13131 + GA5:3:1:293:912#0/1
+chrM 2760 2836 - GA5:3:1:294:548#0/1
+chrM 3779 3855 - GA5:3:1:294:1438#0/1
+chrM 10951 11027 - GA5:3:1:294:431#0/1
+chrM 1532 1608 - GA5:3:1:295:1615#0/1
+chrM 11772 11848 + GA5:3:1:296:711#0/1
+chrM 1359 1435 + GA5:3:1:295:1527#0/1
+chrM 15988 16064 - GA5:3:1:298:1240#0/1
+chrM 4956 5032 + GA5:3:1:299:1039#0/1
+chrM 2963 3039 - GA5:3:1:297:1448#0/1
+chr1 567336 567412 - GA5:3:1:300:1225#0/1
+chrM 2110 2186 - GA5:3:1:301:1093#0/1
+chrM 3258 3334 + GA5:3:1:301:1802#0/1
+chr5 134263454 134263530 - GA5:3:1:301:1236#0/1
+chrM 8869 8945 + GA5:3:1:301:363#0/1
+chrM 9229 9305 + GA5:3:1:301:751#0/1
+chrM 6579 6655 - GA5:3:1:302:403#0/1
+chrM 5779 5855 - GA5:3:1:302:560#0/1
+chrM 12474 12550 + GA5:3:1:302:1689#0/1
+chrM 2034 2110 - GA5:3:1:302:958#0/1
+chrM 3141 3217 - GA5:3:1:303:1216#0/1
+chrM 12218 12294 - GA5:3:1:304:1597#0/1
+chrM 9137 9213 + GA5:3:1:304:715#0/1
+chrM 942 1018 - GA5:3:1:304:207#0/1
+chrM 2929 3005 + GA5:3:1:306:340#0/1
+chrM 1414 1490 - GA5:3:1:307:1969#0/1
+chrM 5327 5403 - GA5:3:1:307:1941#0/1
+chr17 22023721 22023797 - GA5:3:1:309:428#0/1
+chrM 11067 11143 + GA5:3:1:310:278#0/1
+chrM 12329 12405 + GA5:3:1:312:1973#0/1
+chrM 12612 12688 + GA5:3:1:310:1459#0/1
+chr1 567541 567617 + GA5:3:1:313:706#0/1
+chrM 2818 2894 + GA5:3:1:314:1246#0/1
+chrM 12488 12564 - GA5:3:1:313:1472#0/1
+chrM 5293 5369 + GA5:3:1:315:338#0/1
+chrM 8194 8270 + GA5:3:1:314:132#0/1
+chrM 11313 11389 - GA5:3:1:316:472#0/1
+chrM 15065 15141 - GA5:3:1:316:1193#0/1
+chrM 14965 15041 - GA5:3:1:315:772#0/1
+chrM 10333 10409 - GA5:3:1:314:418#0/1
+chrM 8351 8427 + GA5:3:1:316:938#0/1
+chrM 3535 3611 - GA5:3:1:316:1359#0/1
+chrM 6366 6442 - GA5:3:1:317:1923#0/1
+chrM 2738 2814 - GA5:3:1:317:60#0/1
+chr17 22023745 22023821 + GA5:3:1:316:537#0/1
+chrM 16084 16160 - GA5:3:1:317:897#0/1
+chr1 569903 569979 + GA5:3:1:318:574#0/1
+chrM 832 908 - GA5:3:1:318:1958#0/1
+chrM 5348 5424 - GA5:3:1:318:305#0/1
+chrM 15288 15364 - GA5:3:1:319:671#0/1
+chrM 12508 12584 - GA5:3:1:319:15#0/1
+chrM 5346 5422 + GA5:3:1:320:1170#0/1
+chrM 5850 5926 - GA5:3:1:320:1921#0/1
+chrM 7255 7331 - GA5:3:1:318:1966#0/1
+chrM 13798 13874 + GA5:3:1:320:1346#0/1
+chr1 564464 564540 - GA5:3:1:320:380#0/1
+chrM 8421 8497 + GA5:3:1:322:241#0/1
+chrM 6910 6986 - GA5:3:1:322:946#0/1
+chrM 15124 15200 - GA5:3:1:322:1386#0/1
+chrM 7287 7363 + GA5:3:1:323:711#0/1
+chrM 4946 5022 + GA5:3:1:324:1685#0/1
+chrM 14314 14390 + GA5:3:1:324:375#0/1
+chrM 15363 15439 - GA5:3:1:324:1120#0/1
+chrM 2346 2422 + GA5:3:1:319:1499#0/1
+chrM 11124 11200 + GA5:3:1:324:466#0/1
+chr1 567514 567590 + GA5:3:1:324:1231#0/1
+chrM 4665 4741 - GA5:3:1:325:1750#0/1
+chrM 3366 3442 - GA5:3:1:325:41#0/1
+chr1 569857 569933 - GA5:3:1:325:13#0/1
+chrM 4786 4862 - GA5:3:1:325:1334#0/1
+chrM 3536 3612 - GA5:3:1:326:1009#0/1
+chrM 8273 8349 - GA5:3:1:326:785#0/1
+chrM 10604 10680 + GA5:3:1:326:827#0/1
+chrM 8343 8419 + GA5:3:1:325:1773#0/1
+chrM 7121 7197 - GA5:3:1:326:1761#0/1
+chrM 2816 2892 + GA5:3:1:327:1725#0/1
+chrM 1589 1665 - GA5:3:1:327:1413#0/1
+chrM 5372 5448 - GA5:3:1:327:426#0/1
+chr1 568483 568559 - GA5:3:1:329:486#0/1
+chrM 15853 15929 - GA5:3:1:328:806#0/1
+chrM 2861 2937 + GA5:3:1:329:1087#0/1
+chrM 7209 7285 + GA5:3:1:329:842#0/1
+chrM 9836 9912 - GA5:3:1:329:478#0/1
+chrM 12185 12261 - GA5:3:1:330:1136#0/1
+chrM 13832 13908 - GA5:3:1:330:166#0/1
+chrM 7789 7865 + GA5:3:1:331:1027#0/1
+chrM 4318 4394 - GA5:3:1:331:810#0/1
+chrM 9787 9863 + GA5:3:1:331:278#0/1
+chrM 14017 14093 - GA5:3:1:331:1947#0/1
+chrM 13058 13134 - GA5:3:1:332:325#0/1
+chrM 6046 6122 - GA5:3:1:333:155#0/1
+chrM 2350 2426 + GA5:3:1:327:364#0/1
+chrM 7201 7277 - GA5:3:1:333:1601#0/1
+chrM 11145 11221 + GA5:3:1:334:1026#0/1
+chrM 6757 6833 - GA5:3:1:333:1545#0/1
+chrM 9485 9561 + GA5:3:1:335:1755#0/1
+chrM 12688 12764 - GA5:3:1:335:1597#0/1
+chrM 5083 5159 + GA5:3:1:335:941#0/1
+chrM 11354 11430 - GA5:3:1:336:1945#0/1
+chrM 16485 16561 - GA5:3:1:336:87#0/1
+chrM 12347 12423 + GA5:3:1:336:221#0/1
+chrM 7204 7280 + GA5:3:1:336:1091#0/1
+chrM 8040 8116 - GA5:3:1:336:1916#0/1
+chrM 3701 3777 - GA5:3:1:336:531#0/1
+chrM 400 476 - GA5:3:1:337:420#0/1
+chrM 10483 10559 + GA5:3:1:338:1754#0/1
+chr1 569286 569362 - GA5:3:1:338:1991#0/1
+chrM 7122 7198 - GA5:3:1:339:1836#0/1
+chrM 7081 7157 - GA5:3:1:339:1286#0/1
+chr5 134259841 134259917 - GA5:3:1:340:1081#0/1
+chrM 10965 11041 + GA5:3:1:340:385#0/1
+chrM 708 784 + GA5:3:1:341:78#0/1
+chrM 4655 4731 - GA5:3:1:341:366#0/1
+chrM 1182 1258 - GA5:3:1:342:1207#0/1
+chrM 2748 2824 + GA5:3:1:342:1904#0/1
+chr1 565770 565846 + GA5:3:1:342:1812#0/1
+chrM 5147 5223 + GA5:3:1:344:169#0/1
+chrM 5507 5583 + GA5:3:1:343:17#0/1
+chrM 1750 1826 - GA5:3:1:343:800#0/1
+chrM 11017 11093 - GA5:3:1:344:692#0/1
+chrM 11224 11300 - GA5:3:1:345:1886#0/1
+chrM 3825 3901 - GA5:3:1:346:432#0/1
+chrM 15613 15689 - GA5:3:1:349:1448#0/1
+chrM 7536 7612 - GA5:3:1:347:786#0/1
+chrM 13045 13121 - GA5:3:1:349:804#0/1
+chrM 14403 14479 - GA5:3:1:349:1239#0/1
+chrM 12541 12617 - GA5:3:1:350:754#0/1
+chrM 13561 13637 - GA5:3:1:350:38#0/1
+chrM 110 186 + GA5:3:1:350:918#0/1
+chrM 7145 7221 - GA5:3:1:351:999#0/1
+chr17 22023719 22023795 - GA5:3:1:351:950#0/1
+chrM 3397 3473 - GA5:3:1:352:1006#0/1
+chrM 3390 3466 + GA5:3:1:351:312#0/1
+chrM 2344 2420 - GA5:3:1:352:1832#0/1
+chrM 7891 7967 - GA5:3:1:352:1360#0/1
+chrM 10934 11010 - GA5:3:1:353:352#0/1
+chrM 15433 15509 - GA5:3:1:352:63#0/1
+chrM 3337 3413 + GA5:3:1:353:844#0/1
+chrM 6474 6550 - GA5:3:1:354:1491#0/1
+chrM 11837 11913 + GA5:3:1:353:1239#0/1
+chrM 13862 13938 + GA5:3:1:354:768#0/1
+chrM 5411 5487 - GA5:3:1:354:27#0/1
+chrM 10514 10590 + GA5:3:1:354:1355#0/1
+chrM 8413 8489 + GA5:3:1:356:1541#0/1
+chrM 15375 15451 - GA5:3:1:356:1351#0/1
+chr1 569717 569793 + GA5:3:1:356:611#0/1
+chrM 11380 11456 + GA5:3:1:357:1820#0/1
+chr1 566164 566240 - GA5:3:1:357:1690#0/1
+chr1 566667 566743 + GA5:3:1:357:1552#0/1
+chrM 3173 3249 + GA5:3:1:358:1526#0/1
+chrM 10233 10309 - GA5:3:1:358:1454#0/1
+chrM 3992 4068 - GA5:3:1:358:1695#0/1
+chrM 16338 16414 + GA5:3:1:359:766#0/1
+chrM 9010 9086 - GA5:3:1:358:230#0/1
+chrM 12729 12805 + GA5:3:1:356:1079#0/1
+chrM 6394 6470 - GA5:3:1:359:1358#0/1
+chrM 6142 6218 + GA5:3:1:360:524#0/1
+chrM 4363 4439 - GA5:3:1:361:850#0/1
+chrM 2944 3020 - GA5:3:1:361:1260#0/1
+chr5 134263378 134263454 - GA5:3:1:359:470#0/1
+chrM 13831 13907 - GA5:3:1:362:271#0/1
+chrM 13023 13099 - GA5:3:1:362:103#0/1
+chrM 10640 10716 + GA5:3:1:362:514#0/1
+chrM 2145 2221 - GA5:3:1:362:795#0/1
+chrM 12006 12082 - GA5:3:1:362:1043#0/1
+chrM 5093 5169 - GA5:3:1:363:1544#0/1
+chrM 9773 9849 + GA5:3:1:363:1013#0/1
+chrM 1591 1667 + GA5:3:1:363:1219#0/1
+chrM 443 519 + GA5:3:1:363:1680#0/1
+chrM 10852 10928 - GA5:3:1:362:1409#0/1
+chrM 16255 16331 - GA5:3:1:363:1573#0/1
+chrM 15014 15090 + GA5:3:1:363:392#0/1
+chrM 11515 11591 - GA5:3:1:364:678#0/1
+chrM 2816 2892 + GA5:3:1:364:591#0/1
+chrM 12031 12107 + GA5:3:1:364:940#0/1
+chrM 3700 3776 + GA5:3:1:364:738#0/1
+chrM 7218 7294 - GA5:3:1:364:1037#0/1
+chrM 3314 3390 - GA5:3:1:365:1803#0/1
+chrM 3935 4011 - GA5:3:1:365:1779#0/1
+chrM 9536 9612 - GA5:3:1:365:997#0/1
+chrM 3994 4070 - GA5:3:1:365:284#0/1
+chrM 9513 9589 + GA5:3:1:365:1695#0/1
+chrM 4616 4692 - GA5:3:1:365:754#0/1
+chr11 10530763 10530839 + GA5:3:1:367:1331#0/1
+chrM 13156 13232 + GA5:3:1:367:431#0/1
+chrM 12212 12288 + GA5:3:1:369:624#0/1
+chrM 1964 2040 - GA5:3:1:369:1920#0/1
+chr1 567269 567345 - GA5:3:1:369:424#0/1
+chrM 5448 5524 + GA5:3:1:370:1782#0/1
+chrM 978 1054 - GA5:3:1:370:600#0/1
+chrM 4651 4727 - GA5:3:1:370:288#0/1
+chr3 96336206 96336282 - GA5:3:1:370:1039#0/1
+chrM 10537 10613 + GA5:3:1:370:1508#0/1
+chrM 10640 10716 + GA5:3:1:370:534#0/1
+chrM 12895 12971 - GA5:3:1:370:355#0/1
+chr1 566580 566656 + GA5:3:1:371:462#0/1
+chrM 2816 2892 + GA5:3:1:373:1838#0/1
+chrM 7637 7713 - GA5:3:1:372:98#0/1
+chrM 3874 3950 + GA5:3:1:374:721#0/1
+chr5 134263381 134263457 - GA5:3:1:372:440#0/1
+chr5 79947212 79947288 - GA5:3:1:374:1080#0/1
+chrM 3041 3117 + GA5:3:1:375:1437#0/1
+chr1 564478 564554 - GA5:3:1:375:612#0/1
+chrM 8018 8094 - GA5:3:1:376:1174#0/1
+chrM 11377 11453 + GA5:3:1:376:67#0/1
+chrM 2600 2676 - GA5:3:1:376:558#0/1
+chrM 6442 6518 + GA5:3:1:377:685#0/1
+chrM 465 541 + GA5:3:1:376:1630#0/1
+chrM 10317 10393 - GA5:3:1:377:444#0/1
+chrM 13465 13541 - GA5:3:1:377:1241#0/1
+chrM 2687 2763 - GA5:3:1:378:252#0/1
+chrM 1579 1655 + GA5:3:1:379:967#0/1
+chrM 5460 5536 + GA5:3:1:383:215#0/1
+chrM 54 130 + GA5:3:1:381:1161#0/1
+chrM 8424 8500 - GA5:3:1:383:837#0/1
+chrM 6234 6310 - GA5:3:1:384:782#0/1
+chrM 11515 11591 - GA5:3:1:384:317#0/1
+chrM 3784 3860 - GA5:3:1:385:117#0/1
+chrM 2816 2892 + GA5:3:1:385:153#0/1
+chrM 8859 8935 + GA5:3:1:385:1135#0/1
+chrM 5082 5158 + GA5:3:1:386:1152#0/1
+chrM 6666 6742 + GA5:3:1:387:1466#0/1
+chrM 14287 14363 + GA5:3:1:387:1263#0/1
+chrM 4369 4445 + GA5:3:1:386:884#0/1
+chrM 12361 12437 + GA5:3:1:389:597#0/1
+chrM 3314 3390 - GA5:3:1:389:1104#0/1
+chrM 2148 2224 + GA5:3:1:390:1824#0/1
+chr5 134259835 134259911 + GA5:3:1:390:1946#0/1
+chrM 12519 12595 - GA5:3:1:391:1187#0/1
+chrM 3582 3658 + GA5:3:1:390:1884#0/1
+chrM 11384 11460 + GA5:3:1:391:272#0/1
+chrM 11431 11507 + GA5:3:1:392:1874#0/1
+chrM 11288 11364 - GA5:3:1:393:162#0/1
+chrM 1805 1881 - GA5:3:1:392:1394#0/1
+chrM 10179 10255 + GA5:3:1:393:1056#0/1
+chrM 3314 3390 - GA5:3:1:393:860#0/1
+chrM 8780 8856 - GA5:3:1:394:1561#0/1
+chrM 3734 3810 + GA5:3:1:395:207#0/1
+chr11 10530095 10530171 + GA5:3:1:390:112#0/1
+chrM 1385 1461 + GA5:3:1:397:1357#0/1
+chrM 9675 9751 + GA5:3:1:398:1207#0/1
+chrM 11084 11160 + GA5:3:1:398:12#0/1
+chrM 8583 8659 + GA5:3:1:399:941#0/1
+chrM 3305 3381 + GA5:3:1:399:1072#0/1
+chrM 8512 8588 - GA5:3:1:399:1299#0/1
+chrM 11287 11363 - GA5:3:1:400:488#0/1
+chrM 4790 4866 + GA5:3:1:399:542#0/1
+chrM 1435 1511 - GA5:3:1:400:748#0/1
+chr1 567255 567331 - GA5:3:1:401:673#0/1
+chrM 566 642 - GA5:3:1:402:1934#0/1
+chrM 13143 13219 - GA5:3:1:402:1807#0/1
+chrM 12171 12247 - GA5:3:1:402:283#0/1
+chrM 11264 11340 + GA5:3:1:399:1484#0/1
+chrM 9209 9285 - GA5:3:1:402:1896#0/1
+chrM 10940 11016 - GA5:3:1:403:1595#0/1
+chrM 11515 11591 - GA5:3:1:404:1551#0/1
+chrM 6685 6761 - GA5:3:1:405:1600#0/1
+chrM 184 260 - GA5:3:1:403:1870#0/1
+chrM 31 107 + GA5:3:1:404:716#0/1
+chrM 11170 11246 + GA5:3:1:405:1184#0/1
+chrM 15089 15165 - GA5:3:1:406:336#0/1
+chrM 8123 8199 - GA5:3:1:405:1223#0/1
+chrM 12144 12220 - GA5:3:1:406:283#0/1
+chrM 5813 5889 - GA5:3:1:406:97#0/1
+chrM 15487 15563 + GA5:3:1:407:686#0/1
+chrM 7975 8051 - GA5:3:1:406:381#0/1
+chrM 14369 14445 + GA5:3:1:407:315#0/1
+chrM 4772 4848 + GA5:3:1:407:846#0/1
+chrM 16483 16559 - GA5:3:1:407:692#0/1
+chrM 8096 8172 - GA5:3:1:408:761#0/1
+chrM 34 110 - GA5:3:1:408:87#0/1
+chrM 10347 10423 + GA5:3:1:408:1553#0/1
+chrM 14112 14188 + GA5:3:1:409:1433#0/1
+chrM 6575 6651 + GA5:3:1:409:571#0/1
+chrM 696 772 + GA5:3:1:412:395#0/1
+chrM 11790 11866 - GA5:3:1:410:1990#0/1
+chrM 16268 16344 - GA5:3:1:411:1317#0/1
+chr13 110076567 110076643 + GA5:3:1:412:346#0/1
+chrM 1687 1763 + GA5:3:1:412:1157#0/1
+chrM 10936 11012 - GA5:3:1:414:1810#0/1
+chrM 3994 4070 + GA5:3:1:414:1062#0/1
+chr1 566609 566685 + GA5:3:1:414:1864#0/1
+chrM 3842 3918 + GA5:3:1:414:976#0/1
+chrM 9306 9382 - GA5:3:1:413:1773#0/1
+chrM 16224 16300 - GA5:3:1:415:897#0/1
+chrM 3903 3979 - GA5:3:1:416:214#0/1
+chrM 2943 3019 - GA5:3:1:415:549#0/1
+chrM 14533 14609 - GA5:3:1:417:1892#0/1
+chrM 11515 11591 - GA5:3:1:417:1023#0/1
+chrM 8482 8558 - GA5:3:1:418:1783#0/1
+chrM 11515 11591 - GA5:3:1:419:1023#0/1
+chr1 565758 565834 + GA5:3:1:419:1785#0/1
+chrM 8485 8561 - GA5:3:1:419:892#0/1
+chrM 3314 3390 - GA5:3:1:420:168#0/1
+chrM 11316 11392 - GA5:3:1:420:617#0/1
+chrM 2370 2446 - GA5:3:1:421:271#0/1
+chrM 14762 14838 + GA5:3:1:417:1426#0/1
+chr1 568483 568559 - GA5:3:1:423:731#0/1
+chrM 3019 3095 + GA5:3:1:424:54#0/1
+chr1 564926 565002 - GA5:3:1:424:1669#0/1
+chrM 12573 12649 - GA5:3:1:424:594#0/1
+chrM 2816 2892 + GA5:3:1:425:382#0/1
+chrM 14111 14187 - GA5:3:1:425:932#0/1
+chrM 2462 2538 - GA5:3:1:425:1589#0/1
+chrM 8469 8545 + GA5:3:1:421:1967#0/1
+chrM 11092 11168 - GA5:3:1:425:162#0/1
+chrM 6473 6549 + GA5:3:1:426:1489#0/1
+chrM 16220 16296 - GA5:3:1:427:1426#0/1
+chrM 4832 4908 + GA5:3:1:427:1780#0/1
+chr17 22023725 22023801 - GA5:3:1:427:1140#0/1
+chr1 567374 567450 - GA5:3:1:427:420#0/1
+chrM 11821 11897 + GA5:3:1:429:1694#0/1
+chrM 8061 8137 - GA5:3:1:430:378#0/1
+chr5 134260199 134260275 - GA5:3:1:429:1507#0/1
+chrM 9877 9953 - GA5:3:1:431:248#0/1
+chrM 11833 11909 + GA5:3:1:428:1466#0/1
+chrM 3658 3734 - GA5:3:1:432:1011#0/1
+chrM 861 937 - GA5:3:1:432:381#0/1
+chrM 5607 5683 + GA5:3:1:432:886#0/1
+chrM 8622 8698 - GA5:3:1:433:1453#0/1
+chrM 9468 9544 + GA5:3:1:433:1188#0/1
+chrM 10362 10438 - GA5:3:1:434:1170#0/1
+chrM 3138 3214 + GA5:3:1:436:428#0/1
+chrM 4320 4396 - GA5:3:1:435:1711#0/1
+chr1 567521 567597 - GA5:3:1:436:1244#0/1
+chrM 8468 8544 + GA5:3:1:437:1704#0/1
+chrM 3891 3967 - GA5:3:1:437:1581#0/1
+chrM 13657 13733 - GA5:3:1:438:1005#0/1
+chrM 9922 9998 - GA5:3:1:439:1607#0/1
+chrM 15865 15941 + GA5:3:1:438:1116#0/1
+chrM 5353 5429 - GA5:3:1:437:120#0/1
+chrM 8744 8820 + GA5:3:1:440:1464#0/1
+chrM 5339 5415 + GA5:3:1:440:140#0/1
+chrM 3734 3810 + GA5:3:1:440:823#0/1
+chrM 4252 4328 + GA5:3:1:441:633#0/1
+chrM 13502 13578 + GA5:3:1:442:1663#0/1
+chrM 16346 16422 + GA5:3:1:443:1999#0/1
--- a/tools/samtools/sam2interval.py Wed Aug 24 15:33:07 2011 -0400
+++ b/tools/samtools/sam2interval.py Wed Aug 24 16:43:02 2011 -0400
@@ -68,7 +68,7 @@
cigar = re.compile( '\d+M|\d+N|\d+D|\d+P' )
- print '#chrom\tstart\tend\tstrand' # provide a (partial) header so that strand is automatically set in metadata
+ print '#chrom\tstart\tend\tstrand\tread_name' # provide a (partial) header so that strand is automatically set in metadata
for line in infile:
line = line.rstrip( '\r\n' )
@@ -90,7 +90,7 @@
if options.prt_all:
print '%s\t%s\t%s\t%s\t%s' % (ref_name, str(start), str(end+start), strand, line)
else:
- print '%s\t%s\t%s\t%s' % (ref_name, str(start), str(end+start), strand)
+ print '%s\t%s\t%s\t%s\t%s' % (ref_name, str(start), str(end+start), strand, read_name)
if __name__ == "__main__": main()
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Fix sending mail when the receipient is a list (as in sample tracking mail routines).
by Bitbucket 24 Aug '11
by Bitbucket 24 Aug '11
24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/d0c9c238ddbf/
changeset: d0c9c238ddbf
user: natefoo
date: 2011-08-24 21:33:07
summary: Fix sending mail when the receipient is a list (as in sample tracking mail routines).
affected #: 1 file (93 bytes)
--- a/lib/galaxy/util/__init__.py Wed Aug 24 14:42:56 2011 -0400
+++ b/lib/galaxy/util/__init__.py Wed Aug 24 15:33:07 2011 -0400
@@ -572,8 +572,11 @@
"""
Sends an email.
"""
+ header_to = to
+ if isinstance( to, list ):
+ header_to = ', '.join( to )
msg = MIMEText( body )
- msg[ 'To' ] = to
+ msg[ 'To' ] = header_to
msg[ 'From' ] = frm
msg[ 'Subject' ] = subject
if config.smtp_server is None:
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/dc5884c1be86/
changeset: dc5884c1be86
user: jgoecks
date: 2011-08-24 20:42:56
summary: Pack scripts.
affected #: 1 file (521 bytes)
--- a/static/scripts/packed/trackster.js Wed Aug 24 14:38:29 2011 -0400
+++ b/static/scripts/packed/trackster.js Wed Aug 24 14:42:56 2011 -0400
@@ -1,1 +1,1 @@
-var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var requestAnimationFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){window.setTimeout(b,1000/60)}})();var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,U){var n=f("class").extend,p=f("slotting"),I=f("painters");var ab=function(ac,ad){this.document=ac;this.default_font=ad!==undefined?ad:"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")};n(ab.prototype,{load_pattern:function(ac,ag){var ad=this.patterns,ae=this.dummy_context,af=new Image();af.src=image_path+ag;af.onload=function(){ad[ac]=ae.createPattern(af,"repeat")}},get_pattern:function(ac){return this.patterns[ac]},new_canvas:function(){var ac=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(ac)}ac.manager=this;return ac}});var C=function(ac,ad){ac.bind("drag",{handle:ad,relative:true},function(ah,ai){var ag=$(this).parent();var af=ag.children();var ae;for(ae=0;ae<af.length;ae++){if(ai.offsetY<$(af.get(ae)).position().top){break}}if(ae===af.length){if(this!==af.get(ae-1)){ag.append(this)}}else{if(this!==af.get(ae)){$(this).insertBefore(af.get(ae))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};U.sortable=C;var aa=16,D=9,A=20,P=D+2,w=100,F=12000,N=200,z=5,s=10,H=5000,t=100,m="There was an error in indexing this dataset. ",G="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",B="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",V="Ready for display",d=10,r=5,y=5;function u(ac){return Math.round(ac*1000)/1000}var c=function(ac){this.num_elements=ac;this.clear()};n(c.prototype,{get:function(ad){var ac=this.key_ary.indexOf(ad);if(ac!==-1){if(this.obj_cache[ad].stale){this.key_ary.splice(ac,1);delete this.obj_cache[ad]}else{this.move_key_to_end(ad,ac)}}return this.obj_cache[ad]},set:function(ad,ae){if(!this.obj_cache[ad]){if(this.key_ary.length>=this.num_elements){var ac=this.key_ary.shift();delete this.obj_cache[ac]}this.key_ary.push(ad)}this.obj_cache[ad]=ae;return ae},move_key_to_end:function(ad,ac){this.key_ary.splice(ac,1);this.key_ary.push(ad)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var O=function(ad,ac,ae){c.call(this,ad);this.track=ac;this.subset=(ae!==undefined?ae:true)};n(O.prototype,c.prototype,{load_data:function(al,ag,aj,ad,ai){var ak=this.track.view.chrom,af={chrom:ak,low:al,high:ag,mode:aj,resolution:ad,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(af,ai);if(this.track.filters_manager){var am=[];var ac=this.track.filters_manager.filters;for(var ah=0;ah<ac.length;ah++){am[am.length]=ac[ah].name}af.filter_cols=JSON.stringify(am)}var ae=this;return $.getJSON(this.track.data_url,af,function(an){ae.set_data(al,ag,aj,an)})},get_data:function(ac,ag,ah,ad,af){var ae=this.get_data_from_cache(ac,ag,ah);if(ae){return ae}ae=this.load_data(ac,ag,ah,ad,af);this.set_data(ac,ag,ah,ae);return ae},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(ak,af,aj,ae,ai,ag){var al=this.get_data_from_cache(ak,af,aj);if(!al){console.log("ERROR: no current data for: ",this.track,ak,af,aj,ae,ai);return}al.stale=true;var ad=ak;if(ag===this.DEEP_DATA_REQ){$.extend(ai,{start_val:al.data.length+1})}else{if(ag===this.BROAD_DATA_REQ){ad=al.data[al.data.length-1][2]+1}}var ac=this,ah=this.load_data(ad,af,aj,ae,ai);new_data_available=$.Deferred();this.set_data(ak,af,aj,new_data_available);$.when(ah).then(function(am){if(am.data){am.data=al.data.concat(am.data);if(am.message){am.message=am.message.replace(/[0-9]+/,am.data.length)}}ac.set_data(ak,af,aj,am);new_data_available.resolve(am)});return new_data_available},get_data_from_cache:function(ac,ad,ae){return this.get(this.gen_key(ac,ad,ae))},set_data:function(ad,ae,af,ac){return this.set(this.gen_key(ad,ae,af),ac)},gen_key:function(ac,ae,af){var ad=ac+"_"+ae+"_"+af;return ad},split_key:function(ac){return ac.split("_")}});var E=function(ad,ac,ae){O.call(this,ad,ac,ae)};n(E.prototype,O.prototype,c.prototype,{load_data:function(ae,ac,ag,ah,ad,af){if(ad>1){return}return O.prototype.load_data.call(this,ae,ac,ag,ah,ad,af)}});var Z=function(ac,af,ae,ad,ag){this.container=ac;this.chrom=null;this.vis_id=ae;this.dbkey=ad;this.title=af;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ag);this.canvas_manager=new ab(ac.get(0).ownerDocument);this.reset()};n(Z.prototype,{init:function(ag){var ae=this.container,ac=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ae);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ae);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ae);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").appendTo(this.viewport_container).hide();var af=$("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function(){add_tracks()});this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var ad=function(ah){if(ah.type==="focusout"||(ah.keyCode||ah.which)===13||(ah.keyCode||ah.which)===27){if((ah.keyCode||ah.which)!==27){ac.go_to($(this).val())}$(this).hide();$(this).val("");ac.location_span.show();ac.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",ad).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.click(function(){ac.location_span.hide();ac.chrom_select.hide();ac.nav_input.val(ac.chrom+":"+ac.low+"-"+ac.high);ac.nav_input.css("display","inline-block");ac.nav_input.select();ac.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){ac.zoom_out();ac.request_redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){ac.zoom_in();ac.request_redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ag);this.chrom_select.bind("change",function(){ac.change_chrom(ac.chrom_select.val())});this.content_div.click(function(ah){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ah){ac.zoom_in(ah.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ah,ai){this.current_x=ai.offsetX}).bind("drag",function(ah,aj){var ak=aj.offsetX-this.current_x;this.current_x=aj.offsetX;var ai=Math.round(ak/ac.viewport_container.width()*(ac.max_high-ac.max_low));ac.move_delta(-ai)});this.overview_close.click(function(){ac.reset_overview()});this.viewport_container.bind("draginit",function(ah,ai){if(ah.clientX>ac.viewport_container.width()-16){return false}}).bind("dragstart",function(ah,ai){ai.original_low=ac.low;ai.current_height=ah.clientY;ai.current_x=ai.offsetX}).bind("drag",function(aj,al){var ah=$(this);var am=al.offsetX-al.current_x;var ai=ah.scrollTop()-(aj.clientY-al.current_height);ah.scrollTop(ai);al.current_height=aj.clientY;al.current_x=al.offsetX;var ak=Math.round(am/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}).bind("mousewheel",function(aj,al,ai,ah){if(ai){var ak=Math.round(-ai/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}});this.top_labeltrack.bind("dragstart",function(ah,ai){return $("<div />").css({height:ac.content_div.height()+ac.top_labeltrack.height()+ac.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(al,am){$(am.proxy).css({left:Math.min(al.pageX,am.startX),width:Math.abs(al.pageX-am.startX)});var ai=Math.min(al.pageX,am.startX)-ac.container.offset().left,ah=Math.max(al.pageX,am.startX)-ac.container.offset().left,ak=(ac.high-ac.low),aj=ac.viewport_container.width();ac.update_location(Math.round(ai/aj*ak)+ac.low,Math.round(ah/aj*ak)+ac.low)}).bind("dragend",function(am,an){var ai=Math.min(am.pageX,an.startX),ah=Math.max(am.pageX,an.startX),ak=(ac.high-ac.low),aj=ac.viewport_container.width(),al=ac.low;ac.low=Math.round(ai/aj*ak)+al;ac.high=Math.round(ah/aj*ak)+al;$(an.proxy).remove();ac.request_redraw()});this.add_label_track(new Y(this,this.top_labeltrack));this.add_label_track(new Y(this,this.nav_labeltrack));$(window).bind("resize",function(){ac.resize_window()});$(document).bind("redraw",function(){ac.redraw()});this.reset();$(window).trigger("resize");this.update_intro_div()},update_intro_div:function(){if(this.num_tracks===0){this.intro_div.show()}else{this.intro_div.hide()}},update_location:function(ac,ad){this.location_span.text(commatize(ac)+" - "+commatize(ad));this.nav_input.val(this.chrom+":"+commatize(ac)+"-"+commatize(ad))},load_chroms:function(ad,ae){ad.num=t;$.extend(ad,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var ac=this;$.ajax({url:chrom_url,data:ad,dataType:"json",success:function(ag){if(ag.chrom_info.length===0){alert("Invalid chromosome: "+ad.chrom);return}if(ag.reference){ac.add_label_track(new x(ac))}ac.chrom_data=ag.chrom_info;var aj='<option value="">Select Chrom/Contig</option>';for(var ai=0,af=ac.chrom_data.length;ai<af;ai++){var ah=ac.chrom_data[ai].chrom;aj+='<option value="'+ah+'">'+ah+"</option>"}if(ag.prev_chroms){aj+='<option value="previous">Previous '+t+"</option>"}if(ag.next_chroms){aj+='<option value="next">Next '+t+"</option>"}ac.chrom_select.html(aj);if(ae){ae()}ac.chrom_start_index=ag.start_index},error:function(){alert("Could not load chroms for this dbkey:",ac.dbkey)}})},change_chrom:function(ag,ad,ai){if(!ag||ag==="None"){return}var af=this;if(ag==="previous"){af.load_chroms({low:this.chrom_start_index-t});return}if(ag==="next"){af.load_chroms({low:this.chrom_start_index+t});return}var ah=$.grep(af.chrom_data,function(ak,al){return ak.chrom===ag})[0];if(ah===undefined){af.load_chroms({chrom:ag},function(){af.change_chrom(ag,ad,ai)});return}else{if(ag!==af.chrom){af.chrom=ag;af.chrom_select.val(af.chrom);af.max_high=ah.len-1;af.reset();af.request_redraw(true);for(var aj=0,ac=af.tracks.length;aj<ac;aj++){var ae=af.tracks[aj];if(ae.init){ae.init()}}}if(ad!==undefined&&ai!==undefined){af.low=Math.max(ad,0);af.high=Math.min(ai,af.max_high)}af.reset_overview();af.request_redraw()}},go_to:function(ag){var ak=this,ac,af,ad=ag.split(":"),ai=ad[0],aj=ad[1];if(aj!==undefined){try{var ah=aj.split("-");ac=parseInt(ah[0].replace(/,/g,""),10);af=parseInt(ah[1].replace(/,/g,""),10)}catch(ae){return false}}ak.change_chrom(ai,ac,af)},move_fraction:function(ae){var ac=this;var ad=ac.high-ac.low;this.move_delta(ae*ad)},move_delta:function(ae){var ac=this;var ad=ac.high-ac.low;if(ac.low-ae<ac.max_low){ac.low=ac.max_low;ac.high=ac.max_low+ad}else{if(ac.high-ae>ac.max_high){ac.high=ac.max_high;ac.low=ac.max_high-ad}else{ac.high-=ae;ac.low-=ae}}ac.request_redraw()},add_track:function(ac){ac.view=this;ac.track_id=this.track_id_counter;this.tracks.push(ac);if(ac.init){ac.init()}ac.container_div.attr("id","track_"+ac.track_id);C(ac.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1;this.update_intro_div()},add_label_track:function(ac){ac.view=this;this.label_tracks.push(ac)},remove_track:function(ad){this.has_changes=true;delete this.tracks[this.tracks.indexOf(ad)];this.num_tracks-=1;var ac=this;ad.container_div.fadeOut("slow",function(){$(this).remove();ac.update_intro_div()})},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},request_redraw:function(ad){var ac=this;requestAnimationFrame(function(){ac.redraw(ad)})},redraw:function(aj){var ah=this.low,ad=this.high;if(ah<this.max_low){ah=this.max_low}if(ad>this.max_high){ad=this.max_high}var ai=this.high-this.low;if(this.high!==0&&ai<this.min_separation){ad=ah+this.min_separation}this.low=Math.floor(ah);this.high=Math.ceil(ad);this.resolution=Math.pow(z,Math.ceil(Math.log((this.high-this.low)/N)/Math.log(z)));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var ac=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ag=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ak=13;this.overview_box.css({left:ac,width:Math.max(ak,ag)}).show();if(ag<ak){this.overview_box.css("left",ac-(ak-ag)/2)}if(this.overview_highlight){this.overview_highlight.css({left:ac,width:ag})}this.update_location(this.low,this.high);if(!aj){for(var ae=0,af=this.tracks.length;ae<af;ae++){if(this.tracks[ae]&&this.tracks[ae].enabled){this.tracks[ae].draw()}}for(ae=0,af=this.label_tracks.length;ae<af;ae++){this.label_tracks[ae].draw()}}},zoom_in:function(ad,ae){if(this.max_high===0||this.high-this.low<this.min_separation){return}var af=this.high-this.low,ag=af/2+this.low,ac=(af/this.zoom_factor)/2;if(ad){ag=ad/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ag-ac);this.high=Math.round(ag+ac);this.request_redraw()},zoom_out:function(){if(this.max_high===0){return}var ad=this.high-this.low,ae=ad/2+this.low,ac=(ad*this.zoom_factor)/2;this.low=Math.round(ae-ac);this.high=Math.round(ae+ac);this.request_redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.request_redraw()},set_overview:function(ac){$.when(ac.get_overview_tile()).then(function(ad){view.overview_viewport.find(".track-tile").remove();view.overview_close.show();view.overview_viewport.append(ad.canvas);view.overview_highlight.show().height(ad.canvas.height());view.overview_viewport.height(ad.canvas.height()+view.overview_box.outerHeight());view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=ac;view.has_changes=true;ac.set_is_overview(true)})},reset_overview:function(){this.overview_viewport.find(".track-tile").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide();view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=null}});var o=function(ae,ai){this.track=ae;this.name=ai.name;this.params=[];var ap=ai.params;for(var af=0;af<ap.length;af++){var ak=ap[af],ad=ak.name,ao=ak.label,ag=unescape(ak.html),aq=ak.value,am=ak.type;if(am==="number"){this.params[this.params.length]=new g(ad,ao,ag,aq,ak.min,ak.max)}else{if(am=="select"){this.params[this.params.length]=new K(ad,ao,ag,aq)}else{console.log("WARNING: unrecognized tool parameter type:",ad,am)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(at){at.stopPropagation()}).click(function(at){at.stopPropagation()}).bind("dblclick",function(at){at.stopPropagation()});var an=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var al=this.params;var aj=this;$.each(this.params,function(au,ax){var aw=$("<div>").addClass("param-row").appendTo(aj.parent_div);var at=$("<div>").addClass("param-label").text(ax.label).appendTo(aw);var av=$("<div/>").addClass("slider").html(ax.html).appendTo(aw);av.find(":input").val(ax.value);$("<div style='clear: both;'/>").appendTo(aw)});this.parent_div.find("input").click(function(){$(this).select()});var ar=$("<div>").addClass("param-row").appendTo(this.parent_div);var ah=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ar);var ac=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ar);var aj=this;ac.click(function(){aj.run_on_region()});ah.click(function(){aj.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var ac={};this.parent_div.find(":input").each(function(){var ad=$(this).attr("name"),ae=$(this).val();ac[ad]=JSON.stringify(ae)});return ac},get_param_values:function(){var ad=[];var ac={};this.parent_div.find(":input").each(function(){var ae=$(this).attr("name"),af=$(this).val();if(ae){ad[ad.length]=af}});return ad},run_on_dataset:function(){var ac=this;ac.run({dataset_id:this.track.original_dataset_id,tool_id:ac.name},null,function(ad){show_modal(ac.name+" is Running",ac.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var ac={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ae=this.track,ad=ac.tool_id+ae.tool_region_and_parameters_str(ac.chrom,ac.low,ac.high),af;if(ae instanceof e){af=new R(ad,view,ae.hda_ldda,undefined,{},{},ae);af.change_mode(ae.mode)}this.track.add_track(af);af.content_div.text("Starting job.");this.run(ac,af,function(ag){af.dataset_id=ag.dataset_id;af.content_div.text("Running job.");af.init()})},run:function(ad,ae,af){$.extend(ad,this.get_param_values_dict());var ac=function(){$.getJSON(rerun_tool_url,ad,function(ag){if(ag==="no converter"){ae.container_div.addClass("error");ae.content_div.text(G)}else{if(ag.error){ae.container_div.addClass("error");ae.content_div.text(v+ag.message)}else{if(ag==="pending"){ae.container_div.addClass("pending");ae.content_div.text("Converting input data so that it can be used quickly with tool.");setTimeout(ac,2000)}else{af(ag)}}}})};ac()}});var K=function(ad,ac,ae,af){this.name=ad;this.label=ac;this.html=ae;this.value=af};var g=function(ae,ad,ag,ah,af,ac){K.call(this,ae,ad,ag,ah);this.min=af;this.max=ac};var h=function(ad,ac,ae,af){this.name=ad;this.index=ac;this.tool_id=ae;this.tool_exp_name=af};var S=function(ad,ac,ae,af){h.call(this,ad,ac,ae,af);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.container=null;this.slider=null;this.slider_label=null};n(S.prototype,{applies_to:function(ac){if(ac.length>this.index){return true}return false},keep:function(ac){if(!this.applies_to(ac)){return true}var ad=parseInt(ac[this.index]);return(isNaN(ad)||(ad>=this.low&&ad<=this.high))},update_attrs:function(ad){var ac=false;if(!this.applies_to(ad)){return ac}if(ad[this.index]<this.min){this.min=Math.floor(ad[this.index]);ac=true}if(ad[this.index]>this.max){this.max=Math.ceil(ad[this.index]);ac=true}return ac},update_ui_elt:function(){if(this.min!=this.max){this.container.show()}else{this.container.hide()}var ae=function(ah,af){var ag=af-ah;return(ag<=2?0.01:1)};var ad=this.slider.slider("option","min"),ac=this.slider.slider("option","max");if(this.min<ad||this.max>ac){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ae(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var X=function(am,at){this.track=am;this.filters=[];for(var an=0;an<at.length;an++){var ao=at[an],au=ao.name,ac=ao.type,af=ao.index,ar=ao.tool_id,aq=ao.tool_exp_name;if(ac==="int"||ac==="float"){this.filters[an]=new S(au,af,ar,aq)}else{console.log("ERROR: unsupported filter: ",au,ac)}}var ag=function(av,aw,ax){av.click(function(){var ay=aw.text();max=parseFloat(ax.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ax.slider("option","values")){input_size=2*input_size+1;multi_value=true}aw.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",ay).appendTo(aw).focus().select().click(function(az){az.stopPropagation()}).blur(function(){$(this).remove();aw.text(ay)}).keyup(function(aD){if(aD.keyCode===27){$(this).trigger("blur")}else{if(aD.keyCode===13){var aB=ax.slider("option","min"),az=ax.slider("option","max"),aC=function(aE){return(isNaN(aE)||aE>az||aE<aB)},aA=$(this).val();if(!multi_value){aA=parseFloat(aA);if(aC(aA)){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}else{aA=aA.split("-");aA=[parseFloat(aA[0]),parseFloat(aA[1])];if(aC(aA[0])||aC(aA[1])){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}ax.slider((multi_value?"values":"value"),aA)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(av){av.stopPropagation()}).click(function(av){av.stopPropagation()}).bind("dblclick",function(av){av.stopPropagation()}).bind("keydown",function(av){av.stopPropagation()});var ap=$("<div/>").addClass("sliders").appendTo(this.parent_div);var ak=this;$.each(this.filters,function(ay,aA){aA.container=$("<div/>").addClass("slider-row").appendTo(ap);var az=$("<div/>").addClass("elt-label").appendTo(aA.container);var ax=$("<span/>").addClass("slider-name").text(aA.name+" ").appendTo(az);var aw=$("<span/>");var aC=$("<span/>").addClass("slider-value").appendTo(az).append("[").append(aw).append("]");var av=$("<div/>").addClass("slider").appendTo(aA.container);aA.control_element=$("<div/>").attr("id",aA.name+"-filter-control").appendTo(av);var aB=[0,0];aA.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(aD,aE){aB=aE.values;aw.text(aE.values[0]+"-"+aE.values[1]);setTimeout(function(){if(aE.values[0]==aB[0]&&aE.values[1]==aB[1]){var aF=aE.values;aw.text(aF[0]+"-"+aF[1]);aA.low=aF[0];aA.high=aF[1];ak.track.draw(true,true)}},50)},change:function(aD,aE){aA.control_element.slider("option","slide").call(aA.control_element,aD,aE)}});aA.slider=aA.control_element;aA.slider_label=aw;ag(aC,aw,aA.control_element);$("<div style='clear: both;'/>").appendTo(aA.container)});if(this.filters.length!==0){var ah=$("<div/>").addClass("param-row").appendTo(ap);var aj=$("<input type='submit'/>").attr("value","Run on complete dataset").appendTo(ah);var ae=this;aj.click(function(){ae.run_on_dataset()})}var al=$("<div/>").addClass("display-controls").appendTo(this.parent_div),ai=$("<span/>").addClass("elt-label").text("Transparency:").appendTo(al),ad=$("<select/>").attr("name","alpha_dropdown").appendTo(al);this.alpha_filter=null;$("<option/>").attr("value",-1).text("== None ==").appendTo(ad);for(var an=0;an<this.filters.length;an++){$("<option/>").attr("value",an).text(this.filters[an].name).appendTo(ad)}ad.change(function(){$(this).children("option:selected").each(function(){var av=parseInt($(this).val());ak.alpha_filter=(av>=0?ak.filters[av]:null);ak.track.draw(true,true)})});$("<div style='clear: both;'/>").appendTo(this.parent_div)};n(X.prototype,{reset_filters:function(){for(var ac=0;ac<this.filters.length;ac++){filter=this.filters[ac];filter.slider.slider("option","values",[filter.min,filter.max])}this.alpha_filter=null},run_on_dataset:function(){var ak=function(ao,am,an){if(!(am in ao)){ao[am]=an}return ao[am]};var ae={},ac,ad,af;for(var ag=0;ag<this.filters.length;ag++){ac=this.filters[ag];if(ac.tool_id){if(ac.min!=ac.low){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" >= "+ac.low}if(ac.max!=ac.high){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" <= "+ac.high}}}var ai=[];for(var al in ae){ai[ai.length]=[al,ae[al]]}var aj=ai.length;(function ah(at,ap){var an=ap[0],ao=an[0],ar=an[1],aq="("+ar.join(") and (")+")",am={cond:aq,input:at,target_dataset_id:at,tool_id:ao},ap=ap.slice(1);$.getJSON(run_tool_url,am,function(au){if(au.error){show_modal("Filter Dataset","Error running tool "+ao,{Close:hide_modal})}else{if(ap.length===0){show_modal("Filtering Dataset","Filter(s) are running on the complete dataset. Outputs are in dataset's history.",{Close:hide_modal})}else{ah(au.dataset_id,ap)}}})})(this.track.dataset_id,ai)}});var L=function(ad,ac){I.AlphaGenerator.call(this,ac);this.filter=ad};L.prototype.gen_alpha=function(ac){if(this.filter.high===Number.MAX_VALUE||this.filter.low===-Number.MAX_VALUE||this.filter.low===this.filter.high){return this.default_alpha}return((parseFloat(ac[this.filter.index])-this.filter.low)/(this.filter.high-this.filter.low))};var W=function(ac){this.track=ac.track;this.params=ac.params;this.values={};if(ac.saved_values){this.restore_values(ac.saved_values)}this.onchange=ac.onchange};n(W.prototype,{restore_values:function(ac){var ad=this;$.each(this.params,function(ae,af){if(ac[af.key]!==undefined){ad.values[af.key]=ac[af.key]}else{ad.values[af.key]=af.default_value}})},build_form:function(){var ad=this;var ac=$("<div />");$.each(this.params,function(ah,af){if(!af.hidden){var ae="param_"+ah;var am=$("<div class='form-row' />").appendTo(ac);am.append($("<label />").attr("for",ae).text(af.label+":"));if(af.type==="bool"){am.append($('<input type="checkbox" />').attr("id",ae).attr("name",ae).attr("checked",ad.values[af.key]))}else{if(af.type==="color"){var aj=ad.values[af.key];var ai=$("<input />").attr("id",ae).attr("name",ae).val(aj);var ak=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ag=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ak);var al=$("<div/>").appendTo(ag).farbtastic({width:100,height:100,callback:ai,color:aj});$("<div />").append(ai).append(ak).appendTo(am).bind("click",function(an){ak.css({left:$(this).position().left+($(ai).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ak.hide();$(document).unbind("click.color-picker")});an.stopPropagation()})}else{am.append($("<input />").attr("id",ae).attr("name",ae).val(ad.values[af.key]))}}}});return ac},update_from_form:function(ac){var ae=this;var ad=false;$.each(this.params,function(af,ah){if(!ah.hidden){var ai="param_"+af;var ag=ac.find("#"+ai).val();if(ah.type==="float"){ag=parseFloat(ag)}else{if(ah.type==="int"){ag=parseInt(ag)}else{if(ah.type==="bool"){ag=ac.find("#"+ai).is(":checked")}}}if(ag!==ae.values[ah.key]){ae.values[ah.key]=ag;ad=true}}});if(ad){this.onchange()}}});var b=function(ae,ad,ac,af){this.index=ae;this.low=ae*N*ad;this.high=(ae+1)*N*ad;this.resolution=ad;this.canvas=$("<div class='track-tile'/>").append(ac);this.data=af;this.stale=false};var l=function(ae,ad,ac,af,ag){b.call(this,ae,ad,ac,af);this.max_val=ag};var M=function(ae,ad,ac,ag,af){b.call(this,ae,ad,ac,ag);this.message=af};var j=function(ad,ac,ag,ae,af){this.name=ad;this.view=ac;this.parent_element=ag;this.data_url=(ae?ae:default_data_url);this.data_url_extra_params={};this.data_query_wait=(af?af:H);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{get_type:function(){if(this instanceof Y){return"LabelTrack"}else{if(this instanceof x){return"ReferenceTrack"}else{if(this instanceof k){return"LineTrack"}else{if(this instanceof T){return"ReadTrack"}else{if(this instanceof R){return"ToolDataFeatureTrack"}else{if(this instanceof Q){return"VcfTrack"}else{if(this instanceof e){return"FeatureTrack"}}}}}}}return""},init:function(){var ac=this;ac.enabled=false;ac.tile_cache.clear();ac.data_manager.clear();ac.initial_canvas=undefined;ac.content_div.css("height","auto");ac.container_div.removeClass("nodata error pending");if(!ac.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id,chrom:ac.view.chrom},function(ad){if(!ad||ad==="error"||ad.kind==="error"){ac.container_div.addClass("error");ac.content_div.text(m);if(ad.message){var af=ac.view.tracks.indexOf(ac);var ae=$(" <a href='javascript:void(0);'></a>").text("View error").click(function(){show_modal("Trackster Error","<pre>"+ad.message+"</pre>",{Close:hide_modal})});ac.content_div.append(ae)}}else{if(ad==="no converter"){ac.container_div.addClass("error");ac.content_div.text(G)}else{if(ad==="no data"||(ad.data!==undefined&&(ad.data===null||ad.data.length===0))){ac.container_div.addClass("nodata");ac.content_div.text(B)}else{if(ad==="pending"){ac.container_div.addClass("pending");ac.content_div.text(q);setTimeout(function(){ac.init()},ac.data_query_wait)}else{if(ad.status==="data"){if(ad.valid_chroms){ac.valid_chroms=ad.valid_chroms;ac.make_name_popup_menu()}ac.content_div.text(V);if(ac.view.chrom){ac.content_div.text("");ac.content_div.css("height",ac.height_px+"px");ac.enabled=true;$.when(ac.predraw_init()).done(function(){ac.container_div.removeClass("nodata error pending");ac.draw()})}}}}}}})},predraw_init:function(){},update_name:function(ac){this.old_name=this.name;this.name=ac;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var J=function(aj,ah,ak){var ad=this,al=ad.view;this.filters_manager=(aj!==undefined?new X(this,aj):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(ah!==undefined&&obj_length(ah)>0?new o(this,ah):undefined);this.is_overview=false;this.parent_track=ak;this.child_tracks=[];if(ad.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}ad.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();ad.container_div.append(ad.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(ad.display_modes!==undefined){if(ad.mode_div===undefined){ad.mode_div=$("<div class='right-float menubutton popup' />").appendTo(ad.header_div);var ae=(ad.track_config&&ad.track_config.values.mode?ad.track_config.values.mode:ad.display_modes[0]);ad.mode=ae;ad.mode_div.text(ae);var ac={};for(var af=0,ai=ad.display_modes.length;af<ai;af++){var ag=ad.display_modes[af];ac[ag]=function(am){return function(){ad.change_mode(am)}}(ag)}make_popupmenu(ad.mode_div,ac)}else{ad.mode_div.hide()}}this.make_name_popup_menu()};n(J.prototype,j.prototype,{change_mode:function(ad){var ac=this;ac.mode_div.text(ad);ac.mode=ad;ac.track_config.values.mode=ad;ac.tile_cache.clear();ac.draw()},make_name_popup_menu:function(){var ad=this;var ac={};ac[(this.is_overview?"Hide overview":"Set as overview")]=function(){if(ad.is_overview){ad.view.reset_overview()}else{ad.view.set_overview(ad)}};ac["Edit configuration"]=function(){var aj=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ah=function(){ad.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ai=function(ak){if((ak.keyCode||ak.which)===27){aj()}else{if((ak.keyCode||ak.which)===13){ah()}}};$(window).bind("keypress.check_enter_esc",ai);show_modal("Configure Track",ad.track_config.build_form(),{Cancel:aj,OK:ah})};if(ad.filters_available>0){var ag=(ad.filters_div.is(":visible")?"Hide filters":"Show filters");ac[ag]=function(){ad.filters_visible=(ad.filters_div.is(":visible"));if(ad.filters_visible){ad.filters_manager.reset_filters()}ad.filters_div.toggle();ad.make_name_popup_menu()}}if(ad.tool){var ag=(ad.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");ac[ag]=function(){if(!ad.dynamic_tool_div.is(":visible")){ad.update_name(ad.name+ad.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";ad.revert_name()}ad.dynamic_tool_div.toggle();ad.make_name_popup_menu()}}if(ad.valid_chroms){ac["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+ad.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ae=view;var af=function(){$("#no-tracks").show()};if(this.parent_track){ae=this.parent_track;af=function(){}}ac.Remove=function(){ae.remove_track(ad);if(ae.num_tracks===0){af()}};make_popupmenu(ad.name_div,ac)},set_is_overview:function(ac){this.is_overview=ac;this.make_name_popup_menu()},get_overview_tile:function(){var ac=this;view=ac.view,resolution=Math.pow(z,Math.ceil(Math.log((view.max_high-view.max_low)/N)/Math.log(z))),view_width=view.container.width(),w_scale=view_width/(view.max_high-view.max_low),overview_tile=$.Deferred();$.when(ac.data_manager.get_data(view.max_low,view.max_high,"Auto",resolution,ac.data_url_extra_params)).then(function(ad){var af=ac._gen_tile_cache_key(view_width,w_scale,0),ah=ac.tile_cache.get(af);if(!ah){ah=ac.draw_tile(ad,resolution,0,w_scale);ac.tile_cache.set(af,ah)}var ak=$(ah.canvas.find("canvas")),ag=ak.clone(),aj=ak.get(0).getContext("2d"),ae=ag.get(0).getContext("2d"),ai=aj.getImageData(0,0,aj.canvas.width,aj.canvas.height);ae.putImageData(ai,-ac.left_offset,(ah.data.dataset_type==="summary_tree"?P:0));new_tile=new b(-1,resolution,ag);overview_tile.resolve(new_tile)});return overview_tile},_gen_tile_cache_key:function(ad,ae,ac){return ad+"_"+ae+"_"+ac},draw:function(ae,an){if(!this.dataset_id){return}var am=this.view.low,ai=this.view.high,ak=ai-am,af=this.view.container.width(),aq=af/ak,ah=this.view.resolution,ap=$("<div style='position: relative;'></div>");if(!an){this.content_div.children().remove()}this.content_div.append(ap);this.max_height=0;var ad=Math.floor(am/ah/N);var al=true;var ao=[];var ac=0;while((ad*N*ah)<ai){tile=this.draw_helper(ae,af,ad,ah,ap,aq);if(tile){ao.push(tile)}else{al=false}ad+=1;ac++}var ag=this;if(al){ag.postdraw_actions(ao,af,aq,an)}for(var aj=0;aj<this.child_tracks.length;aj++){this.child_tracks[aj].draw(ae,an)}},postdraw_actions:function(ag,ah,ai,ac){var ae=this;var af=false;for(var ad=0;ad<ag.length;ad++){if(ag[ad].message){af=true;break}}if(af){for(var ad=0;ad<ag.length;ad++){tile=ag[ad];if(!tile.message){tile.canvas.css("padding-top",A)}}}},draw_helper:function(ad,ae,af,ai,ao,at,ap,aj){var ag=this,an=this._gen_tile_cache_key(ae,at,af),ak=af*N*ai,ar=ak+N*ai;var al=(ad?undefined:ag.tile_cache.get(an));if(al){ag.show_tile(al,ao,at);return al}var am=function(au){return("isResolved" in au)};var ah=true;var ac=ag.data_manager.get_data(ak,ar,ag.mode,ai,ag.data_url_extra_params);if(am(ac)){ah=false}var aq;if(view.reference_track&&at>view.canvas_manager.char_width_px){aq=view.reference_track.data_manager.get_data(ak,ar,ag.mode,ai,view.reference_track.data_url_extra_params);if(am(aq)){ah=false}}if(ah){n(ac,aj);var al=ag.draw_tile(ac,ai,af,at,aq);ag.tile_cache.set(an,al);if(al!==undefined){ag.show_tile(al,ao,at)}return al}$.when(ac,aq).then(function(){view.request_redraw()});return null},show_tile:function(aj,al,am){var ae=this,ad=aj.canvas,ai=ad;if(aj.message){var an=$("<div/>"),ak=$("<div/>").addClass("tile-message").text(aj.message).css({height:A-1,width:aj.canvas.width}).appendTo(an),ag=$("<a href='javascript:void(0);'/>").addClass("icon more-down").appendTo(ak),ac=$("<a href='javascript:void(0);'/>").addClass("icon more-across").appendTo(ak);an.append(ad);ai=an;ag.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.DEEP_DATA_REQ);ae.draw()}).dblclick(function(ao){ao.stopPropagation()});ac.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.BROAD_DATA_REQ);ae.draw()}).dblclick(function(ao){ao.stopPropagation()})}var ah=this.view.high-this.view.low,af=(aj.low-this.view.low)*am;if(this.left_offset){af-=this.left_offset}ai.css({position:"absolute",top:0,left:af,height:""});al.append(ai);ae.max_height=Math.max(ae.max_height,ai.height());ae.content_div.css("height",ae.max_height+"px");al.children().css("height",ae.max_height+"px")},tool_region_and_parameters_str:function(ae,ac,af){var ad=this,ag=(ae!==undefined&&ac!==undefined&&af!==undefined?ae+":"+ac+"-"+af:"all");return" - region=["+ag+"], parameters=["+ad.tool.get_param_values().join(", ")+"]"},add_track:function(ac){ac.track_id=this.track_id+"_"+this.child_tracks.length;ac.container_div.attr("id","track_"+ac.track_id);this.child_tracks_container.append(ac.container_div);C(ac.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(ac);this.view.has_changes=true},remove_track:function(ac){ac.container_div.fadeOut("slow",function(){$(this).remove()})}});var Y=function(ac,ad){this.hidden=true;j.call(this,null,ac,ad);this.container_div.addClass("label-track")};n(Y.prototype,j.prototype,{draw:function(){var ae=this.view,af=ae.high-ae.low,ai=Math.floor(Math.pow(10,Math.floor(Math.log(af)/Math.log(10)))),ac=Math.floor(ae.low/ai)*ai,ag=this.view.container.width(),ad=$("<div style='position: relative; height: 1.3em;'></div>");while(ac<ae.high){var ah=(ac-ae.low)/af*ag;ad.append($("<div class='label'>"+commatize(ac)+"</div>").css({position:"absolute",left:ah-1}));ac+=ai}this.content_div.children(":first").remove();this.content_div.append(ad)}});var x=function(ac){this.hidden=true;j.call(this,null,ac,ac.top_labeltrack);J.call(this);ac.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:ac.dbkey};this.data_manager=new E(y,this,false);this.tile_cache=new c(r)};n(x.prototype,J.prototype,{draw_tile:function(ak,ah,ad,am){var ag=this,ae=N*ah;if(am>this.view.canvas_manager.char_width_px){if(ak===null){ag.content_div.css("height","0px");return}var af=this.view.canvas_manager.new_canvas();var al=af.getContext("2d");af.width=Math.ceil(ae*am+ag.left_offset);af.height=ag.height_px;al.font=al.canvas.manager.default_font;al.textAlign="center";for(var ai=0,aj=ak.length;ai<aj;ai++){var ac=Math.round(ai*am);al.fillText(ak[ai],ac+ag.left_offset,10)}return new b(ad,ah,af,ak)}this.content_div.css("height","0px")}});var k=function(ag,ae,ah,ac,af){var ad=this;this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ag,ae,ae.viewport_container);J.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ah;this.dataset_id=ac;this.original_dataset_id=ac;this.data_manager=new O(y,this);this.tile_cache=new c(r);this.track_config=new W({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:af,onchange:function(){ad.vertical_range=ad.prefs.max_value-ad.prefs.min_value;$("#linetrack_"+ad.track_id+"_minval").text(ad.prefs.min_value);$("#linetrack_"+ad.track_id+"_maxval").text(ad.prefs.max_value);ad.tile_cache.clear();ad.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,J.prototype,{add_resize_handle:function(){var ac=this;var af=false;var ae=false;var ad=$("<div class='track-resize'>");$(ac.container_div).hover(function(){af=true;ad.show()},function(){af=false;if(!ae){ad.hide()}});ad.hide().bind("dragstart",function(ag,ah){ae=true;ah.original_height=$(ac.content_div).height()}).bind("drag",function(ah,ai){var ag=Math.min(Math.max(ai.original_height+ai.deltaY,ac.min_height_px),ac.max_height_px);$(ac.content_div).css("height",ag);ac.height_px=ag;ac.draw(true)}).bind("dragend",function(ag,ah){ac.tile_cache.clear();ae=false;if(!af){ad.hide()}ac.track_config.values.height=ac.height_px}).appendTo(ac.container_div)},predraw_init:function(){var ac=this,ad=ac.view.tracks.indexOf(ac);ac.vertical_range=undefined;return $.getJSON(ac.data_url,{stats:true,chrom:ac.view.chrom,low:null,high:null,hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id},function(ae){ac.container_div.addClass("line-track");var ag=ae.data;if(isNaN(parseFloat(ac.prefs.min_value))||isNaN(parseFloat(ac.prefs.max_value))){ac.prefs.min_value=ag.min;ac.prefs.max_value=ag.max;$("#track_"+ad+"_minval").val(ac.prefs.min_value);$("#track_"+ad+"_maxval").val(ac.prefs.max_value)}ac.vertical_range=ac.prefs.max_value-ac.prefs.min_value;ac.total_frequency=ag.total_frequency;ac.container_div.find(".yaxislabel").remove();var ah=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_minval").text(u(ac.prefs.min_value));var af=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_maxval").text(u(ac.prefs.max_value));af.css({position:"absolute",top:"24px",left:"10px"});af.prependTo(ac.container_div);ah.css({position:"absolute",bottom:"2px",left:"10px"});ah.prependTo(ac.container_div)})},draw_tile:function(am,ag,ad,al){if(this.vertical_range===undefined){return}var ah=ad*N*ag,af=N*ag,ac=Math.ceil(af*al),aj=this.height_px;var ae=this.view.canvas_manager.new_canvas();ae.width=ac,ae.height=aj;var ak=ae.getContext("2d");var ai=new I.LinePainter(am.data,ah,ah+af,this.prefs,this.mode);ai.draw(ak,ac,aj);return new b(ad,ag,ae,am.data)}});var e=function(ac,ah,ag,ak,aj,ae,af,ai){var ad=this;this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:aj,onchange:function(){ad.tile_cache.clear();ad.draw()}});this.prefs=this.track_config.values;j.call(this,ac,ah,ah.viewport_container);J.call(this,ae,af,ai);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ag;this.dataset_id=ak;this.original_dataset_id=ak;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_manager=new O(20,this);this.left_offset=200;this.painter=I.LinkedFeaturePainter};n(e.prototype,J.prototype,{postdraw_actions:function(ar,ac,at,aq){J.prototype.postdraw_actions.call(this,ar,aq);var af=this;if(aq){var ah=af.content_div.children();var ai=false;for(var ag=ah.length-1,am=0;ag>=am;ag--){var ae=$(ah[ag]);if(ai){ae.remove()}else{if(ae.children().length!==0){ai=true}}}}if(af.mode=="Histogram"){var al=-1;for(var ag=0;ag<ar.length;ag++){var ap=ar[ag].max_val;if(ap>al){al=ap}}for(var ag=0;ag<ar.length;ag++){var ao=ar[ag];if(ao.max_val!==al){ao.canvas.remove();af.draw_helper(true,ac,ao.index,ao.resolution,ao.canvas.parent(),at,[],{max:al})}}}if(af.filters_manager){var ad=af.filters_manager.filters;for(var ak=0;ak<ad.length;ak++){ad[ak].update_ui_elt()}var aj=false,an;for(var ag=0;ag<ar.length;ag++){if(ar[ag].data.length){an=ar[ag].data[0];for(var ak=0;ak<ad.length;ak++){if(ad[ak].applies_to(an)){aj=true;break}}}}if(af.filters_available!==aj){af.filters_available=aj;if(!af.filters_available){af.filters_div.hide()}af.make_name_popup_menu()}}},update_auto_mode:function(ac){if(this.mode=="Auto"){if(ac=="no_detail"){ac="feature spans"}else{if(ac=="summary_tree"){ac="coverage histogram"}}this.mode_div.text("Auto ("+ac+")")}},incremental_slots:function(ag,ad,af){var ae=this.view.canvas_manager.dummy_context,ac=this.inc_slots[ag];if(!ac||(ac.mode!==af)){ac=new (p.FeatureSlotter)(ag,af==="Pack",w,function(ah){return ae.measureText(ah)});ac.mode=af;this.inc_slots[ag]=ac}return ac.slot_features(ad)},get_summary_tree_data:function(ag,aj,ae,ar){if(ar>ae-aj){ar=ae-aj}var an=Math.floor((ae-aj)/ar),aq=[],af=0;var ah=0,ai=0,am,ap=0,ak=[],ao,al;var ad=function(av,au,aw,at){av[0]=au+aw*at;av[1]=au+(aw+1)*at};while(ap<ar&&ah!==ag.length){var ac=false;for(;ap<ar&&!ac;ap++){ad(ak,aj,ap,an);for(ai=ah;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ac=true;break}}if(ac){break}}data_start_index=ai;aq[aq.length]=ao=[ak[0],0];for(;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ao[1]++}else{break}}if(ao[1]>af){af=ao[1]}ap++}return{max:af,delta:an,data:aq}},draw_tile:function(ap,ay,aC,al,af){var av=this,aE=aC*N*ay,ad=(aC+1)*N*ay,ar=ad-aE,aw=Math.ceil(ar*al),at=this.mode,aI=25,ag=this.left_offset,aq,ah;if(at==="Auto"){if(ap.dataset_type==="summary_tree"){at=ap.dataset_type}else{if(ap.extra_info==="no_detail"){at="no_detail"}else{var aH=ap.data;if(this.view.high-this.view.low>F){at="Squish"}else{at="Pack"}}}this.update_auto_mode(at)}if(at==="summary_tree"||at==="Histogram"){ah=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var ac=$("<div />").addClass("yaxislabel");ac.text(ap.max);ac.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});ac.prependTo(this.container_div);var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah+P;if(ap.dataset_type!="summary_tree"){var am=this.get_summary_tree_data(ap.data,aE,ad,200);if(ap.max){am.max=ap.max}ap=am}var aF=new I.SummaryTreePainter(ap,aE,ad,this.prefs);var ax=ae.getContext("2d");ax.translate(ag,P);aF.draw(ax,aw,ah);return new l(aC,ay,ae,ap.data,ap.max)}var aq,aj=1;if(at==="no_detail"||at==="Squish"||at==="Pack"){aj=this.incremental_slots(al,ap.data,at);aq=this.inc_slots[al].slots}var ak=[];if(ap.data){var an=this.filters_manager.filters;for(var az=0,aB=ap.data.length;az<aB;az++){var ai=ap.data[az];var aA=false;var ao;for(var aD=0,aG=an.length;aD<aG;aD++){ao=an[aD];ao.update_attrs(ai);if(!ao.keep(ai)){aA=true;break}}if(!aA){ak.push(ai)}}}var au=(this.filters_manager.alpha_filter?new L(this.filters_manager.alpha_filter):null);var aF=new (this.painter)(ak,aE,ad,this.prefs,at,au,af);var ah=Math.max(aa,aF.get_required_height(aj));var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah;var ax=ae.getContext("2d");ax.fillStyle=this.prefs.block_color;ax.font=ax.canvas.manager.default_font;ax.textAlign="right";this.container_div.find(".yaxislabel").remove();if(ap.data){ax.translate(ag,0);aF.draw(ax,aw,ah,aq)}return new M(aC,ay,ae,ap.data,ap.message)}});var Q=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.painter=I.VariantPainter};n(Q.prototype,J.prototype,e.prototype);var T=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ae,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.painter=I.ReadPainter;this.make_name_popup_menu()};n(T.prototype,J.prototype,e.prototype);var R=function(ag,ae,ai,ac,af,ah,ad){e.call(this,ag,ae,ai,ac,af,ah,{},ad);this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(R.prototype,J.prototype,e.prototype,{predraw_init:function(){var ad=this;var ac=function(){if(ad.data_manager.size()===0){setTimeout(ac,300)}else{ad.data_url=default_data_url;ad.data_query_wait=H;ad.dataset_state_url=converted_datasets_state_url;$.getJSON(ad.dataset_state_url,{dataset_id:ad.dataset_id,hda_ldda:ad.hda_ldda},function(ae){})}};ac()}});U.View=Z;U.LineTrack=k;U.FeatureTrack=e;U.ReadTrack=T};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(k,x){var u=k("class").extend;var p=function(I,A,G,z,F,D){if(D===undefined){D=4}var C=z-A;var B=F-G;var E=Math.floor(Math.sqrt(C*C+B*B)/D);var J=C/E;var H=B/E;var y;for(y=0;y<E;y++,A+=J,G+=H){if(y%2!==0){continue}I.fillRect(A,G,D,1)}};var q=function(B,A,z,E){var D=A-E/2,C=A+E/2,F=z-Math.sqrt(E*3/2);B.beginPath();B.moveTo(D,F);B.lineTo(C,F);B.lineTo(A,z);B.lineTo(D,F);B.strokeStyle=this.fillStyle;B.fill();B.stroke();B.closePath()};var g=function(y){this.default_alpha=(y?y:1)};g.prototype.gen_alpha=function(y){return this.default_alpha};var n=function(A,C,y,z,B){this.data=A;this.view_start=C;this.view_end=y;this.prefs=u({},this.default_prefs,z);this.mode=B};n.prototype.default_prefs={};var v=function(A,C,y,z,B){n.call(this,A,C,y,z,B)};v.prototype.default_prefs={show_counts:false};v.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(y,C,E,F,A){n.call(this,y,C,E,F,A);if(this.prefs.min_value===undefined){var G=Infinity;for(var z=0,B=this.data.length;z<B;z++){G=Math.min(G,this.data[z][1])}this.prefs.min_value=G}if(this.prefs.max_value===undefined){var D=-Infinity;for(var z=0,B=this.data.length;z<B;z++){D=Math.max(D,this.data[z][1])}this.prefs.max_value=D}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(N,M,K){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,J=D-H,z=K,A=this.view_start,L=this.view_end-this.view_start,B=M/L,I=this.mode,T=this.data;N.save();var U=Math.round(K+H/J*K);if(I!=="Intensity"){N.fillStyle="#aaa";N.fillRect(0,U,M,1)}N.beginPath();var R,E,C;if(T.length>1){C=Math.ceil((T[1][0]-T[0][0])*B)}else{C=10}for(var O=0,P=T.length;O<P;O++){N.fillStyle=this.prefs.color;R=Math.round((T[O][0]-A)*B);E=T[O][1];var Q=false,G=false;if(E===null){if(F&&I==="Filled"){N.lineTo(R,z)}F=false;continue}if(E<H){G=true;E=H}else{if(E>D){Q=true;E=D}}if(I==="Histogram"){E=Math.round(E/J*z);N.fillRect(R,U,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/J*255);N.fillStyle="rgb("+E+","+E+","+E+")";N.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/J*z);if(F){N.lineTo(R,E)}else{F=true;if(I==="Filled"){N.moveTo(R,z);N.lineTo(R,E)}else{N.moveTo(R,E)}}}}N.fillStyle=this.prefs.overflow_color;if(Q||G){var S;if(I==="Histogram"||I==="Intensity"){S=C}else{R-=2;S=4}if(Q){N.fillRect(R,0,S,3)}if(G){N.fillRect(R,z-3,S,3)}}N.fillStyle=this.prefs.color}if(I==="Filled"){if(F){N.lineTo(R,U);N.lineTo(0,U)}N.fill()}else{N.stroke()}N.restore()};var o=function(B,D,y,A,C,z){n.call(this,B,D,y,A,C);this.alpha_generator=(z?z:new g())};o.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};u(o.prototype,{get_required_height:function(z){var y=y_scale=this.get_row_height(),A=this.mode;if(A==="no_detail"||A==="Squish"||A==="Pack"){y=z*y_scale}return y+Math.max(Math.round(y_scale/2),5)},draw:function(K,B,J,G){var E=this.data,H=this.view_start,L=this.view_end;K.save();K.fillStyle=this.prefs.block_color;K.textAlign="right";var O=this.view_end-this.view_start,N=B/O,A=this.get_row_height();for(var D=0,F=E.length;D<F;D++){var M=E[D],C=M[0],y=M[1],z=M[2],I=(G&&G[C]!==undefined?G[C]:null);if((y<L&&z>H)&&(this.mode=="Dense"||I!==null)){this.draw_element(K,this.mode,M,I,H,L,N,A,B)}}K.restore()},draw_element:function(E,A,G,C,B,D,F,z,y){console.log("WARNING: Unimplemented function.")}});var d=10,j=3,m=5,w=10,f=1,s=3,e=3,a=9,l=2,h="#ccc";var r=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(r.prototype,o.prototype,{get_row_height:function(){var z=this.mode,y;if(z==="Dense"){y=d}else{if(z==="no_detail"){y=j}else{if(z==="Squish"){y=m}else{y=w}}}return y},draw_element:function(K,D,S,F,M,ac,ag,ah,y){var P=S[0],ae=S[1],W=S[2],N=S[3],X=Math.floor(Math.max(0,(ae-M)*ag)),L=Math.ceil(Math.min(y,Math.max(0,(W-M)*ag))),V=(D==="Dense"?0:(0+F))*ah,J,aa,O=null,ai=null,B=this.prefs.block_color,Z=this.prefs.label_color;K.globalAlpha=this.alpha_generator.gen_alpha(S);if(D=="Dense"){F=1}if(D==="no_detail"){K.fillStyle=B;K.fillRect(X,V+5,L-X,f)}else{var I=S[4],U=S[5],Y=S[6],C=S[7];if(U&&Y){O=Math.floor(Math.max(0,(U-M)*ag));ai=Math.ceil(Math.min(y,Math.max(0,(Y-M)*ag)))}var af,Q;if(D==="Squish"||D==="Dense"){af=1;Q=e}else{af=5;Q=a}if(!C){if(S.strand){if(S.strand==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(S.strand==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}}else{K.fillStyle=B}K.fillRect(X,V,L-X,Q)}else{var H,R;if(D==="Squish"||D==="Dense"){K.fillStyle=h;H=V+Math.floor(e/2)+1;R=1}else{if(I){var H=V;var R=Q;if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand")}}}else{K.fillStyle=h;H+=(e/2)+1;R=1}}K.fillRect(X,H,L-X,R);for(var ad=0,A=C.length;ad<A;ad++){var E=C[ad],z=Math.floor(Math.max(0,(E[0]-M)*ag)),T=Math.ceil(Math.min(y,Math.max((E[1]-M)*ag)));if(z>T){continue}K.fillStyle=B;K.fillRect(z,V+(Q-af)/2+1,T-z,af);if(O!==undefined&&Y>U&&!(z>ai||T<O)){var ab=Math.max(z,O),G=Math.min(T,ai);K.fillRect(ab,V+1,G-ab,Q);if(C.length==1&&D=="Pack"){if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}if(ab+14<G){ab+=2;G-=2}K.fillRect(ab,V+1,G-ab,Q)}}}}if(D==="Pack"&&ae>M){K.fillStyle=Z;if(M===0&&X-K.measureText(N).width<0){K.textAlign="left";K.fillText(N,L+l,V+8)}else{K.textAlign="right";K.fillText(N,X-l,V+8)}}}K.globalAlpha=1}});var b=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(b.prototype,o.prototype,{draw_element:function(R,M,G,C,U,A,J,S,P){var G=data[i],I=G[0],Q=G[1],B=G[2],L=G[3],E=Math.floor(Math.max(0,(Q-U)*J)),H=Math.ceil(Math.min(P,Math.max(0,(B-U)*J))),D=(M==="Dense"?0:(0+C))*S,y,V,z=null,K=null;if(no_label){R.fillStyle=block_color;R.fillRect(E+left_offset,D+5,H-E,1)}else{var T=G[4],O=G[5],F=G[6];y=9;V=1;R.fillRect(E+left_offset,D,H-E,y);if(M!=="Dense"&&L!==undefined&&Q>U){R.fillStyle=label_color;if(U===0&&E-R.measureText(L).width<0){R.textAlign="left";R.fillText(L,H+2+left_offset,D+8)}else{R.textAlign="right";R.fillText(L,E-2+left_offset,D+8)}R.fillStyle=block_color}var N=T+" / "+O;if(Q>U&&R.measureText(N).width<(H-E)){R.fillStyle="white";R.textAlign="center";R.fillText(N,left_offset+E+(H-E)/2,D+8);R.fillStyle=block_color}}}});var t=function(C,E,y,B,D,z,A){o.call(this,C,E,y,B,D,z);this.ref_seq=A};t.prototype.default_prefs=u({},o.prototype.default_prefs,{show_insertions:false});u(t.prototype,o.prototype,{get_row_height:function(){var y,z=this.mode;if(z==="Dense"){y=d}else{if(z==="Squish"){y=m}else{y=w;if(this.prefs.show_insertions){y*=2}}}return y},draw_read:function(U,P,L,Z,A,T,I,F,E){U.textAlign="center";var S=this,z=[Z,A],O=0,V=0,R=0;ref_seq=this.ref_seq,char_width_px=U.canvas.manager.char_width_px;var ae=[];if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){R=Math.round(L/2)}if(!I){I=[[0,F.length]]}for(var M=0,X=I.length;M<X;M++){var J=I[M],B="MIDNSHP=X"[J[0]],N=J[1];if(B==="H"||B==="S"){O-=N}var G=T+O,ad=Math.floor(Math.max(0,(G-Z)*L)),H=Math.floor(Math.max(0,(G+N-Z)*L));if(ad===H){H+=1}switch(B){case"H":break;case"S":case"M":case"=":if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(R>0){U.fillStyle=this.prefs.block_color;U.fillRect(ad-R,E+1,H-ad,9);U.fillStyle=h;for(var ab=0,y=Q.length;ab<y;ab++){if(this.prefs.show_differences&&ref_seq){var K=ref_seq[G-Z+ab];if(!K||K.toLowerCase()===Q[ab].toLowerCase()){continue}}if(G+ab>=Z&&G+ab<=A){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac,E+9)}}}else{U.fillStyle=this.prefs.block_color;U.fillRect(ad,E+4,H-ad,e)}}V+=N;O+=N;break;case"N":U.fillStyle=h;U.fillRect(ad-R,E+5,H-ad,1);O+=N;break;case"D":U.fillStyle="red";U.fillRect(ad-R,E+4,H-ad,3);O+=N;break;case"P":break;case"I":var Y=ad-R;if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(this.prefs.show_insertions){var D=ad-(H-ad)/2;if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){U.fillStyle="yellow";U.fillRect(D-R,E-9,H-ad,9);ae[ae.length]={type:"triangle",data:[Y,E+4,5]};U.fillStyle=h;switch(seq_tile_overlap){case (OVERLAP_START):Q=Q.slice(Z-G);break;case (OVERLAP_END):Q=Q.slice(0,G-A);break;case (CONTAINED_BY):break;case (CONTAINS):Q=Q.slice(Z-G,G-A);break}for(var ab=0,y=Q.length;ab<y;ab++){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac-(H-ad)/2,E)}}else{U.fillStyle="yellow";U.fillRect(D,E+(this.mode!=="Dense"?2:5),H-ad,(P!=="Dense"?e:s))}}else{if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){ae[ae.length]={type:"text",data:[Q.length,Y,E+9]}}else{}}}V+=N;break;case"X":V+=N;break}}U.fillStyle="yellow";var aa,C,af;for(var W=0;W<ae.length;W++){aa=ae[W];C=aa.type;af=aa.data;if(C==="text"){U.save();U.font="bold "+U.font;U.fillText(af[0],af[1],af[2]);U.restore()}else{if(C=="triangle"){q(U,af[0],af[1],af[2])}}}},draw_element:function(R,M,E,B,U,z,I,S,P){var H=E[0],Q=E[1],A=E[2],J=E[3],D=Math.floor(Math.max(0,(Q-U)*I)),F=Math.ceil(Math.min(P,Math.max(0,(A-U)*I))),C=(M==="Dense"?0:(0+B))*S,V=this.prefs.block_color,G=this.prefs.label_color,O=0;if((M==="Pack"||this.mode==="Auto")&&I>R.canvas.manager.char_width_px){var O=Math.round(I/2)}R.fillStyle=V;if(E[5] instanceof Array){var N=Math.floor(Math.max(0,(E[4][0]-U)*I)),L=Math.ceil(Math.min(P,Math.max(0,(E[4][1]-U)*I))),K=Math.floor(Math.max(0,(E[5][0]-U)*I)),y=Math.ceil(Math.min(P,Math.max(0,(E[5][1]-U)*I)));if(E[4][1]>=U&&E[4][0]<=z&&E[4][2]){this.draw_read(R,M,I,U,z,E[4][0],E[4][2],E[4][3],C)}if(E[5][1]>=U&&E[5][0]<=z&&E[5][2]){this.draw_read(R,M,I,U,z,E[5][0],E[5][2],E[5][3],C)}if(K>L){R.fillStyle=h;p(R,L-O,C+5,K-O,C+5)}}else{R.fillStyle=V;this.draw_read(R,M,I,U,z,Q,E[4],E[5],C)}if(M==="Pack"&&Q>U){R.fillStyle=this.prefs.label_color;var T=1;if(T===0&&D-R.measureText(J).width<0){R.textAlign="left";R.fillText(J,F+l-O,C+8)}else{R.textAlign="right";R.fillText(J,D-l-O,C+8)}R.fillStyle=V}}});x.AlphaGenerator=g;x.SummaryTreePainter=v;x.LinePainter=c;x.LinkedFeaturePainter=r;x.ReadPainter=t;x.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
+var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var requestAnimationFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){window.setTimeout(b,1000/60)}})();var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,U){var n=f("class").extend,p=f("slotting"),I=f("painters");var ab=function(ac,ad){this.document=ac;this.default_font=ad!==undefined?ad:"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")};n(ab.prototype,{load_pattern:function(ac,ag){var ad=this.patterns,ae=this.dummy_context,af=new Image();af.src=image_path+ag;af.onload=function(){ad[ac]=ae.createPattern(af,"repeat")}},get_pattern:function(ac){return this.patterns[ac]},new_canvas:function(){var ac=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(ac)}ac.manager=this;return ac}});var C=function(ac,ad){ac.bind("drag",{handle:ad,relative:true},function(ah,ai){var ag=$(this).parent();var af=ag.children();var ae;for(ae=0;ae<af.length;ae++){if(ai.offsetY<$(af.get(ae)).position().top){break}}if(ae===af.length){if(this!==af.get(ae-1)){ag.append(this)}}else{if(this!==af.get(ae)){$(this).insertBefore(af.get(ae))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};U.sortable=C;var aa=16,D=9,A=20,P=D+2,w=100,F=12000,N=200,z=5,s=10,H=5000,t=100,m="There was an error in indexing this dataset. ",G="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",B="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",V="Ready for display",d=10,r=5,y=5;function u(ac){return Math.round(ac*1000)/1000}var c=function(ac){this.num_elements=ac;this.clear()};n(c.prototype,{get:function(ad){var ac=this.key_ary.indexOf(ad);if(ac!==-1){if(this.obj_cache[ad].stale){this.key_ary.splice(ac,1);delete this.obj_cache[ad]}else{this.move_key_to_end(ad,ac)}}return this.obj_cache[ad]},set:function(ad,ae){if(!this.obj_cache[ad]){if(this.key_ary.length>=this.num_elements){var ac=this.key_ary.shift();delete this.obj_cache[ac]}this.key_ary.push(ad)}this.obj_cache[ad]=ae;return ae},move_key_to_end:function(ad,ac){this.key_ary.splice(ac,1);this.key_ary.push(ad)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var O=function(ad,ac,ae){c.call(this,ad);this.track=ac;this.subset=(ae!==undefined?ae:true)};n(O.prototype,c.prototype,{load_data:function(al,ag,aj,ad,ai){var ak=this.track.view.chrom,af={chrom:ak,low:al,high:ag,mode:aj,resolution:ad,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(af,ai);if(this.track.filters_manager){var am=[];var ac=this.track.filters_manager.filters;for(var ah=0;ah<ac.length;ah++){am[am.length]=ac[ah].name}af.filter_cols=JSON.stringify(am)}var ae=this;return $.getJSON(this.track.data_url,af,function(an){ae.set_data(al,ag,aj,an)})},get_data:function(ac,ag,ah,ad,af){var ae=this.get_data_from_cache(ac,ag,ah);if(ae){return ae}ae=this.load_data(ac,ag,ah,ad,af);this.set_data(ac,ag,ah,ae);return ae},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(ak,af,aj,ae,ai,ag){var al=this.get_data_from_cache(ak,af,aj);if(!al){console.log("ERROR: no current data for: ",this.track,ak,af,aj,ae,ai);return}al.stale=true;var ad=ak;if(ag===this.DEEP_DATA_REQ){$.extend(ai,{start_val:al.data.length+1})}else{if(ag===this.BROAD_DATA_REQ){ad=al.data[al.data.length-1][2]+1}}var ac=this,ah=this.load_data(ad,af,aj,ae,ai);new_data_available=$.Deferred();this.set_data(ak,af,aj,new_data_available);$.when(ah).then(function(am){if(am.data){am.data=al.data.concat(am.data);if(am.message){am.message=am.message.replace(/[0-9]+/,am.data.length)}}ac.set_data(ak,af,aj,am);new_data_available.resolve(am)});return new_data_available},get_data_from_cache:function(ac,ad,ae){return this.get(this.gen_key(ac,ad,ae))},set_data:function(ad,ae,af,ac){return this.set(this.gen_key(ad,ae,af),ac)},gen_key:function(ac,ae,af){var ad=ac+"_"+ae+"_"+af;return ad},split_key:function(ac){return ac.split("_")}});var E=function(ad,ac,ae){O.call(this,ad,ac,ae)};n(E.prototype,O.prototype,c.prototype,{load_data:function(ae,ac,ag,ah,ad,af){if(ad>1){return}return O.prototype.load_data.call(this,ae,ac,ag,ah,ad,af)}});var Z=function(ac,af,ae,ad,ag){this.container=ac;this.chrom=null;this.vis_id=ae;this.dbkey=ad;this.title=af;this.tracks=[];this.label_tracks=[];this.tracks_to_be_redrawn=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ag);this.canvas_manager=new ab(ac.get(0).ownerDocument);this.reset()};n(Z.prototype,{init:function(ag){var ae=this.container,ac=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ae);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ae);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ae);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").appendTo(this.viewport_container).hide();var af=$("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function(){add_tracks()});this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var ad=function(ah){if(ah.type==="focusout"||(ah.keyCode||ah.which)===13||(ah.keyCode||ah.which)===27){if((ah.keyCode||ah.which)!==27){ac.go_to($(this).val())}$(this).hide();$(this).val("");ac.location_span.show();ac.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",ad).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.click(function(){ac.location_span.hide();ac.chrom_select.hide();ac.nav_input.val(ac.chrom+":"+ac.low+"-"+ac.high);ac.nav_input.css("display","inline-block");ac.nav_input.select();ac.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){ac.zoom_out();ac.request_redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){ac.zoom_in();ac.request_redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ag);this.chrom_select.bind("change",function(){ac.change_chrom(ac.chrom_select.val())});this.content_div.click(function(ah){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ah){ac.zoom_in(ah.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ah,ai){this.current_x=ai.offsetX}).bind("drag",function(ah,aj){var ak=aj.offsetX-this.current_x;this.current_x=aj.offsetX;var ai=Math.round(ak/ac.viewport_container.width()*(ac.max_high-ac.max_low));ac.move_delta(-ai)});this.overview_close.click(function(){ac.reset_overview()});this.viewport_container.bind("draginit",function(ah,ai){if(ah.clientX>ac.viewport_container.width()-16){return false}}).bind("dragstart",function(ah,ai){ai.original_low=ac.low;ai.current_height=ah.clientY;ai.current_x=ai.offsetX}).bind("drag",function(aj,al){var ah=$(this);var am=al.offsetX-al.current_x;var ai=ah.scrollTop()-(aj.clientY-al.current_height);ah.scrollTop(ai);al.current_height=aj.clientY;al.current_x=al.offsetX;var ak=Math.round(am/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}).bind("mousewheel",function(aj,al,ai,ah){if(ai){var ak=Math.round(-ai/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}});this.top_labeltrack.bind("dragstart",function(ah,ai){return $("<div />").css({height:ac.content_div.height()+ac.top_labeltrack.height()+ac.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(al,am){$(am.proxy).css({left:Math.min(al.pageX,am.startX),width:Math.abs(al.pageX-am.startX)});var ai=Math.min(al.pageX,am.startX)-ac.container.offset().left,ah=Math.max(al.pageX,am.startX)-ac.container.offset().left,ak=(ac.high-ac.low),aj=ac.viewport_container.width();ac.update_location(Math.round(ai/aj*ak)+ac.low,Math.round(ah/aj*ak)+ac.low)}).bind("dragend",function(am,an){var ai=Math.min(am.pageX,an.startX),ah=Math.max(am.pageX,an.startX),ak=(ac.high-ac.low),aj=ac.viewport_container.width(),al=ac.low;ac.low=Math.round(ai/aj*ak)+al;ac.high=Math.round(ah/aj*ak)+al;$(an.proxy).remove();ac.request_redraw()});this.add_label_track(new Y(this,this.top_labeltrack));this.add_label_track(new Y(this,this.nav_labeltrack));$(window).bind("resize",function(){ac.resize_window()});$(document).bind("redraw",function(){ac.redraw()});this.reset();$(window).trigger("resize");this.update_intro_div()},update_intro_div:function(){if(this.num_tracks===0){this.intro_div.show()}else{this.intro_div.hide()}},update_location:function(ac,ad){this.location_span.text(commatize(ac)+" - "+commatize(ad));this.nav_input.val(this.chrom+":"+commatize(ac)+"-"+commatize(ad))},load_chroms:function(ad,ae){ad.num=t;$.extend(ad,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var ac=this;$.ajax({url:chrom_url,data:ad,dataType:"json",success:function(ag){if(ag.chrom_info.length===0){alert("Invalid chromosome: "+ad.chrom);return}if(ag.reference){ac.add_label_track(new x(ac))}ac.chrom_data=ag.chrom_info;var aj='<option value="">Select Chrom/Contig</option>';for(var ai=0,af=ac.chrom_data.length;ai<af;ai++){var ah=ac.chrom_data[ai].chrom;aj+='<option value="'+ah+'">'+ah+"</option>"}if(ag.prev_chroms){aj+='<option value="previous">Previous '+t+"</option>"}if(ag.next_chroms){aj+='<option value="next">Next '+t+"</option>"}ac.chrom_select.html(aj);if(ae){ae()}ac.chrom_start_index=ag.start_index},error:function(){alert("Could not load chroms for this dbkey:",ac.dbkey)}})},change_chrom:function(ag,ad,ai){if(!ag||ag==="None"){return}var af=this;if(ag==="previous"){af.load_chroms({low:this.chrom_start_index-t});return}if(ag==="next"){af.load_chroms({low:this.chrom_start_index+t});return}var ah=$.grep(af.chrom_data,function(ak,al){return ak.chrom===ag})[0];if(ah===undefined){af.load_chroms({chrom:ag},function(){af.change_chrom(ag,ad,ai)});return}else{if(ag!==af.chrom){af.chrom=ag;af.chrom_select.val(af.chrom);af.max_high=ah.len-1;af.reset();af.request_redraw(true);for(var aj=0,ac=af.tracks.length;aj<ac;aj++){var ae=af.tracks[aj];if(ae.init){ae.init()}}}if(ad!==undefined&&ai!==undefined){af.low=Math.max(ad,0);af.high=Math.min(ai,af.max_high)}af.reset_overview();af.request_redraw()}},go_to:function(ag){var ak=this,ac,af,ad=ag.split(":"),ai=ad[0],aj=ad[1];if(aj!==undefined){try{var ah=aj.split("-");ac=parseInt(ah[0].replace(/,/g,""),10);af=parseInt(ah[1].replace(/,/g,""),10)}catch(ae){return false}}ak.change_chrom(ai,ac,af)},move_fraction:function(ae){var ac=this;var ad=ac.high-ac.low;this.move_delta(ae*ad)},move_delta:function(ae){var ac=this;var ad=ac.high-ac.low;if(ac.low-ae<ac.max_low){ac.low=ac.max_low;ac.high=ac.max_low+ad}else{if(ac.high-ae>ac.max_high){ac.high=ac.max_high;ac.low=ac.max_high-ad}else{ac.high-=ae;ac.low-=ae}}ac.request_redraw()},add_track:function(ac){ac.view=this;ac.track_id=this.track_id_counter;this.tracks.push(ac);if(ac.init){ac.init()}ac.container_div.attr("id","track_"+ac.track_id);C(ac.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1;this.update_intro_div()},add_label_track:function(ac){ac.view=this;this.label_tracks.push(ac)},remove_track:function(ad){this.has_changes=true;delete this.tracks[this.tracks.indexOf(ad)];this.num_tracks-=1;var ac=this;ad.container_div.fadeOut("slow",function(){$(this).remove();ac.update_intro_div()})},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},request_redraw:function(ak,ac,aj,ad){var ai=this,ag=(ad?[ad]:ai.tracks),ae;var ad;for(var ah=0;ah<ag.length;ah++){ad=ag[ah];ae=-1;for(var af=0;af<ai.tracks_to_be_redrawn.length;af++){if(ai.tracks_to_be_redrawn[af][0]===ad){ae=af;break}}if(ae<0){ai.tracks_to_be_redrawn.push([ad,ac,aj])}else{ai.tracks_to_be_redrawn[ah][1]=ac;ai.tracks_to_be_redrawn[ah][2]=aj}}requestAnimationFrame(function(){ai._redraw(ak)})},_redraw:function(am){var aj=this.low,af=this.high;if(aj<this.max_low){aj=this.max_low}if(af>this.max_high){af=this.max_high}var al=this.high-this.low;if(this.high!==0&&al<this.min_separation){af=aj+this.min_separation}this.low=Math.floor(aj);this.high=Math.ceil(af);this.resolution=Math.pow(z,Math.ceil(Math.log((this.high-this.low)/N)/Math.log(z)));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var ac=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ai=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var an=13;this.overview_box.css({left:ac,width:Math.max(an,ai)}).show();if(ai<an){this.overview_box.css("left",ac-(an-ai)/2)}if(this.overview_highlight){this.overview_highlight.css({left:ac,width:ai})}this.update_location(this.low,this.high);if(!am){var ae,ad,ak;for(var ag=0,ah=this.tracks_to_be_redrawn.length;ag<ah;ag++){ae=this.tracks_to_be_redrawn[ag][0];ad=this.tracks_to_be_redrawn[ag][1];ak=this.tracks_to_be_redrawn[ag][2];if(ae&&ae.enabled){ae._draw(ad,ak)}}this.tracks_to_be_redrawn=[];for(ag=0,ah=this.label_tracks.length;ag<ah;ag++){this.label_tracks[ag]._draw()}}},zoom_in:function(ad,ae){if(this.max_high===0||this.high-this.low<this.min_separation){return}var af=this.high-this.low,ag=af/2+this.low,ac=(af/this.zoom_factor)/2;if(ad){ag=ad/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ag-ac);this.high=Math.round(ag+ac);this.request_redraw()},zoom_out:function(){if(this.max_high===0){return}var ad=this.high-this.low,ae=ad/2+this.low,ac=(ad*this.zoom_factor)/2;this.low=Math.round(ae-ac);this.high=Math.round(ae+ac);this.request_redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.request_redraw()},set_overview:function(ac){$.when(ac.get_overview_tile()).then(function(ad){view.overview_viewport.find(".track-tile").remove();view.overview_close.show();view.overview_viewport.append(ad.canvas);view.overview_highlight.show().height(ad.canvas.height());view.overview_viewport.height(ad.canvas.height()+view.overview_box.outerHeight());view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=ac;view.has_changes=true;ac.set_is_overview(true)})},reset_overview:function(){this.overview_viewport.find(".track-tile").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide();view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=null}});var o=function(ae,ai){this.track=ae;this.name=ai.name;this.params=[];var ap=ai.params;for(var af=0;af<ap.length;af++){var ak=ap[af],ad=ak.name,ao=ak.label,ag=unescape(ak.html),aq=ak.value,am=ak.type;if(am==="number"){this.params[this.params.length]=new g(ad,ao,ag,aq,ak.min,ak.max)}else{if(am=="select"){this.params[this.params.length]=new K(ad,ao,ag,aq)}else{console.log("WARNING: unrecognized tool parameter type:",ad,am)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(at){at.stopPropagation()}).click(function(at){at.stopPropagation()}).bind("dblclick",function(at){at.stopPropagation()});var an=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var al=this.params;var aj=this;$.each(this.params,function(au,ax){var aw=$("<div>").addClass("param-row").appendTo(aj.parent_div);var at=$("<div>").addClass("param-label").text(ax.label).appendTo(aw);var av=$("<div/>").addClass("slider").html(ax.html).appendTo(aw);av.find(":input").val(ax.value);$("<div style='clear: both;'/>").appendTo(aw)});this.parent_div.find("input").click(function(){$(this).select()});var ar=$("<div>").addClass("param-row").appendTo(this.parent_div);var ah=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ar);var ac=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ar);var aj=this;ac.click(function(){aj.run_on_region()});ah.click(function(){aj.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var ac={};this.parent_div.find(":input").each(function(){var ad=$(this).attr("name"),ae=$(this).val();ac[ad]=JSON.stringify(ae)});return ac},get_param_values:function(){var ad=[];var ac={};this.parent_div.find(":input").each(function(){var ae=$(this).attr("name"),af=$(this).val();if(ae){ad[ad.length]=af}});return ad},run_on_dataset:function(){var ac=this;ac.run({dataset_id:this.track.original_dataset_id,tool_id:ac.name},null,function(ad){show_modal(ac.name+" is Running",ac.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var ac={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ae=this.track,ad=ac.tool_id+ae.tool_region_and_parameters_str(ac.chrom,ac.low,ac.high),af;if(ae instanceof e){af=new R(ad,view,ae.hda_ldda,undefined,{},{},ae);af.change_mode(ae.mode)}this.track.add_track(af);af.content_div.text("Starting job.");this.run(ac,af,function(ag){af.dataset_id=ag.dataset_id;af.content_div.text("Running job.");af.init()})},run:function(ad,ae,af){$.extend(ad,this.get_param_values_dict());var ac=function(){$.getJSON(rerun_tool_url,ad,function(ag){if(ag==="no converter"){ae.container_div.addClass("error");ae.content_div.text(G)}else{if(ag.error){ae.container_div.addClass("error");ae.content_div.text(v+ag.message)}else{if(ag==="pending"){ae.container_div.addClass("pending");ae.content_div.text("Converting input data so that it can be used quickly with tool.");setTimeout(ac,2000)}else{af(ag)}}}})};ac()}});var K=function(ad,ac,ae,af){this.name=ad;this.label=ac;this.html=ae;this.value=af};var g=function(ae,ad,ag,ah,af,ac){K.call(this,ae,ad,ag,ah);this.min=af;this.max=ac};var h=function(ad,ac,ae,af){this.name=ad;this.index=ac;this.tool_id=ae;this.tool_exp_name=af};var S=function(ad,ac,ae,af){h.call(this,ad,ac,ae,af);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.container=null;this.slider=null;this.slider_label=null};n(S.prototype,{applies_to:function(ac){if(ac.length>this.index){return true}return false},keep:function(ac){if(!this.applies_to(ac)){return true}var ad=parseInt(ac[this.index]);return(isNaN(ad)||(ad>=this.low&&ad<=this.high))},update_attrs:function(ad){var ac=false;if(!this.applies_to(ad)){return ac}if(ad[this.index]<this.min){this.min=Math.floor(ad[this.index]);ac=true}if(ad[this.index]>this.max){this.max=Math.ceil(ad[this.index]);ac=true}return ac},update_ui_elt:function(){if(this.min!=this.max){this.container.show()}else{this.container.hide()}var ae=function(ah,af){var ag=af-ah;return(ag<=2?0.01:1)};var ad=this.slider.slider("option","min"),ac=this.slider.slider("option","max");if(this.min<ad||this.max>ac){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ae(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var X=function(am,at){this.track=am;this.filters=[];for(var an=0;an<at.length;an++){var ao=at[an],au=ao.name,ac=ao.type,af=ao.index,ar=ao.tool_id,aq=ao.tool_exp_name;if(ac==="int"||ac==="float"){this.filters[an]=new S(au,af,ar,aq)}else{console.log("ERROR: unsupported filter: ",au,ac)}}var ag=function(av,aw,ax){av.click(function(){var ay=aw.text();max=parseFloat(ax.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ax.slider("option","values")){input_size=2*input_size+1;multi_value=true}aw.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",ay).appendTo(aw).focus().select().click(function(az){az.stopPropagation()}).blur(function(){$(this).remove();aw.text(ay)}).keyup(function(aD){if(aD.keyCode===27){$(this).trigger("blur")}else{if(aD.keyCode===13){var aB=ax.slider("option","min"),az=ax.slider("option","max"),aC=function(aE){return(isNaN(aE)||aE>az||aE<aB)},aA=$(this).val();if(!multi_value){aA=parseFloat(aA);if(aC(aA)){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}else{aA=aA.split("-");aA=[parseFloat(aA[0]),parseFloat(aA[1])];if(aC(aA[0])||aC(aA[1])){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}ax.slider((multi_value?"values":"value"),aA)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(av){av.stopPropagation()}).click(function(av){av.stopPropagation()}).bind("dblclick",function(av){av.stopPropagation()}).bind("keydown",function(av){av.stopPropagation()});var ap=$("<div/>").addClass("sliders").appendTo(this.parent_div);var ak=this;$.each(this.filters,function(ay,aA){aA.container=$("<div/>").addClass("slider-row").appendTo(ap);var az=$("<div/>").addClass("elt-label").appendTo(aA.container);var ax=$("<span/>").addClass("slider-name").text(aA.name+" ").appendTo(az);var aw=$("<span/>");var aC=$("<span/>").addClass("slider-value").appendTo(az).append("[").append(aw).append("]");var av=$("<div/>").addClass("slider").appendTo(aA.container);aA.control_element=$("<div/>").attr("id",aA.name+"-filter-control").appendTo(av);var aB=[0,0];aA.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(aE,aF){var aD=aF.values;aw.text(aD[0]+"-"+aD[1]);aA.low=aD[0];aA.high=aD[1];ak.track.request_draw(true,true)},change:function(aD,aE){aA.control_element.slider("option","slide").call(aA.control_element,aD,aE)}});aA.slider=aA.control_element;aA.slider_label=aw;ag(aC,aw,aA.control_element);$("<div style='clear: both;'/>").appendTo(aA.container)});if(this.filters.length!==0){var ah=$("<div/>").addClass("param-row").appendTo(ap);var aj=$("<input type='submit'/>").attr("value","Run on complete dataset").appendTo(ah);var ae=this;aj.click(function(){ae.run_on_dataset()})}var al=$("<div/>").addClass("display-controls").appendTo(this.parent_div),ai=$("<span/>").addClass("elt-label").text("Transparency:").appendTo(al),ad=$("<select/>").attr("name","alpha_dropdown").appendTo(al);this.alpha_filter=null;$("<option/>").attr("value",-1).text("== None ==").appendTo(ad);for(var an=0;an<this.filters.length;an++){$("<option/>").attr("value",an).text(this.filters[an].name).appendTo(ad)}ad.change(function(){$(this).children("option:selected").each(function(){var av=parseInt($(this).val());ak.alpha_filter=(av>=0?ak.filters[av]:null);ak.track.request_draw(true,true)})});$("<div style='clear: both;'/>").appendTo(this.parent_div)};n(X.prototype,{reset_filters:function(){for(var ac=0;ac<this.filters.length;ac++){filter=this.filters[ac];filter.slider.slider("option","values",[filter.min,filter.max])}this.alpha_filter=null},run_on_dataset:function(){var ak=function(ao,am,an){if(!(am in ao)){ao[am]=an}return ao[am]};var ae={},ac,ad,af;for(var ag=0;ag<this.filters.length;ag++){ac=this.filters[ag];if(ac.tool_id){if(ac.min!=ac.low){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" >= "+ac.low}if(ac.max!=ac.high){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" <= "+ac.high}}}var ai=[];for(var al in ae){ai[ai.length]=[al,ae[al]]}var aj=ai.length;(function ah(at,ap){var an=ap[0],ao=an[0],ar=an[1],aq="("+ar.join(") and (")+")",am={cond:aq,input:at,target_dataset_id:at,tool_id:ao},ap=ap.slice(1);$.getJSON(run_tool_url,am,function(au){if(au.error){show_modal("Filter Dataset","Error running tool "+ao,{Close:hide_modal})}else{if(ap.length===0){show_modal("Filtering Dataset","Filter(s) are running on the complete dataset. Outputs are in dataset's history.",{Close:hide_modal})}else{ah(au.dataset_id,ap)}}})})(this.track.dataset_id,ai)}});var L=function(ad,ac){I.AlphaGenerator.call(this,ac);this.filter=ad};L.prototype.gen_alpha=function(ac){if(this.filter.high===Number.MAX_VALUE||this.filter.low===-Number.MAX_VALUE||this.filter.low===this.filter.high){return this.default_alpha}return((parseFloat(ac[this.filter.index])-this.filter.low)/(this.filter.high-this.filter.low))};var W=function(ac){this.track=ac.track;this.params=ac.params;this.values={};if(ac.saved_values){this.restore_values(ac.saved_values)}this.onchange=ac.onchange};n(W.prototype,{restore_values:function(ac){var ad=this;$.each(this.params,function(ae,af){if(ac[af.key]!==undefined){ad.values[af.key]=ac[af.key]}else{ad.values[af.key]=af.default_value}})},build_form:function(){var ad=this;var ac=$("<div />");$.each(this.params,function(ah,af){if(!af.hidden){var ae="param_"+ah;var am=$("<div class='form-row' />").appendTo(ac);am.append($("<label />").attr("for",ae).text(af.label+":"));if(af.type==="bool"){am.append($('<input type="checkbox" />').attr("id",ae).attr("name",ae).attr("checked",ad.values[af.key]))}else{if(af.type==="color"){var aj=ad.values[af.key];var ai=$("<input />").attr("id",ae).attr("name",ae).val(aj);var ak=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ag=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ak);var al=$("<div/>").appendTo(ag).farbtastic({width:100,height:100,callback:ai,color:aj});$("<div />").append(ai).append(ak).appendTo(am).bind("click",function(an){ak.css({left:$(this).position().left+($(ai).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ak.hide();$(document).unbind("click.color-picker")});an.stopPropagation()})}else{am.append($("<input />").attr("id",ae).attr("name",ae).val(ad.values[af.key]))}}}});return ac},update_from_form:function(ac){var ae=this;var ad=false;$.each(this.params,function(af,ah){if(!ah.hidden){var ai="param_"+af;var ag=ac.find("#"+ai).val();if(ah.type==="float"){ag=parseFloat(ag)}else{if(ah.type==="int"){ag=parseInt(ag)}else{if(ah.type==="bool"){ag=ac.find("#"+ai).is(":checked")}}}if(ag!==ae.values[ah.key]){ae.values[ah.key]=ag;ad=true}}});if(ad){this.onchange()}}});var b=function(ae,ad,ac,af){this.index=ae;this.low=ae*N*ad;this.high=(ae+1)*N*ad;this.resolution=ad;this.canvas=$("<div class='track-tile'/>").append(ac);this.data=af;this.stale=false};var l=function(ae,ad,ac,af,ag){b.call(this,ae,ad,ac,af);this.max_val=ag};var M=function(ae,ad,ac,ag,af){b.call(this,ae,ad,ac,ag);this.message=af};var j=function(ad,ac,ag,ae,af){this.name=ad;this.view=ac;this.parent_element=ag;this.data_url=(ae?ae:default_data_url);this.data_url_extra_params={};this.data_query_wait=(af?af:H);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{get_type:function(){if(this instanceof Y){return"LabelTrack"}else{if(this instanceof x){return"ReferenceTrack"}else{if(this instanceof k){return"LineTrack"}else{if(this instanceof T){return"ReadTrack"}else{if(this instanceof R){return"ToolDataFeatureTrack"}else{if(this instanceof Q){return"VcfTrack"}else{if(this instanceof e){return"FeatureTrack"}}}}}}}return""},init:function(){var ac=this;ac.enabled=false;ac.tile_cache.clear();ac.data_manager.clear();ac.initial_canvas=undefined;ac.content_div.css("height","auto");ac.container_div.removeClass("nodata error pending");if(!ac.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id,chrom:ac.view.chrom},function(ad){if(!ad||ad==="error"||ad.kind==="error"){ac.container_div.addClass("error");ac.content_div.text(m);if(ad.message){var af=ac.view.tracks.indexOf(ac);var ae=$(" <a href='javascript:void(0);'></a>").text("View error").click(function(){show_modal("Trackster Error","<pre>"+ad.message+"</pre>",{Close:hide_modal})});ac.content_div.append(ae)}}else{if(ad==="no converter"){ac.container_div.addClass("error");ac.content_div.text(G)}else{if(ad==="no data"||(ad.data!==undefined&&(ad.data===null||ad.data.length===0))){ac.container_div.addClass("nodata");ac.content_div.text(B)}else{if(ad==="pending"){ac.container_div.addClass("pending");ac.content_div.text(q);setTimeout(function(){ac.init()},ac.data_query_wait)}else{if(ad.status==="data"){if(ad.valid_chroms){ac.valid_chroms=ad.valid_chroms;ac.make_name_popup_menu()}ac.content_div.text(V);if(ac.view.chrom){ac.content_div.text("");ac.content_div.css("height",ac.height_px+"px");ac.enabled=true;$.when(ac.predraw_init()).done(function(){ac.container_div.removeClass("nodata error pending");ac.request_draw()})}}}}}}})},predraw_init:function(){},update_name:function(ac){this.old_name=this.name;this.name=ac;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var J=function(aj,ah,ak){var ad=this,al=ad.view;this.filters_manager=(aj!==undefined?new X(this,aj):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(ah!==undefined&&obj_length(ah)>0?new o(this,ah):undefined);this.is_overview=false;this.parent_track=ak;this.child_tracks=[];if(ad.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}ad.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();ad.container_div.append(ad.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(ad.display_modes!==undefined){if(ad.mode_div===undefined){ad.mode_div=$("<div class='right-float menubutton popup' />").appendTo(ad.header_div);var ae=(ad.track_config&&ad.track_config.values.mode?ad.track_config.values.mode:ad.display_modes[0]);ad.mode=ae;ad.mode_div.text(ae);var ac={};for(var af=0,ai=ad.display_modes.length;af<ai;af++){var ag=ad.display_modes[af];ac[ag]=function(am){return function(){ad.change_mode(am)}}(ag)}make_popupmenu(ad.mode_div,ac)}else{ad.mode_div.hide()}}this.make_name_popup_menu()};n(J.prototype,j.prototype,{change_mode:function(ad){var ac=this;ac.mode_div.text(ad);ac.mode=ad;ac.track_config.values.mode=ad;ac.tile_cache.clear();ac.request_draw()},make_name_popup_menu:function(){var ad=this;var ac={};ac[(this.is_overview?"Hide overview":"Set as overview")]=function(){if(ad.is_overview){ad.view.reset_overview()}else{ad.view.set_overview(ad)}};ac["Edit configuration"]=function(){var aj=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ah=function(){ad.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ai=function(ak){if((ak.keyCode||ak.which)===27){aj()}else{if((ak.keyCode||ak.which)===13){ah()}}};$(window).bind("keypress.check_enter_esc",ai);show_modal("Configure Track",ad.track_config.build_form(),{Cancel:aj,OK:ah})};if(ad.filters_available>0){var ag=(ad.filters_div.is(":visible")?"Hide filters":"Show filters");ac[ag]=function(){ad.filters_visible=(ad.filters_div.is(":visible"));if(ad.filters_visible){ad.filters_manager.reset_filters()}ad.filters_div.toggle();ad.make_name_popup_menu()}}if(ad.tool){var ag=(ad.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");ac[ag]=function(){if(!ad.dynamic_tool_div.is(":visible")){ad.update_name(ad.name+ad.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";ad.revert_name()}ad.dynamic_tool_div.toggle();ad.make_name_popup_menu()}}if(ad.valid_chroms){ac["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+ad.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ae=view;var af=function(){$("#no-tracks").show()};if(this.parent_track){ae=this.parent_track;af=function(){}}ac.Remove=function(){ae.remove_track(ad);if(ae.num_tracks===0){af()}};make_popupmenu(ad.name_div,ac)},set_is_overview:function(ac){this.is_overview=ac;this.make_name_popup_menu()},get_overview_tile:function(){var ac=this;view=ac.view,resolution=Math.pow(z,Math.ceil(Math.log((view.max_high-view.max_low)/N)/Math.log(z))),view_width=view.container.width(),w_scale=view_width/(view.max_high-view.max_low),overview_tile=$.Deferred();$.when(ac.data_manager.get_data(view.max_low,view.max_high,"Auto",resolution,ac.data_url_extra_params)).then(function(ad){var af=ac._gen_tile_cache_key(view_width,w_scale,0),ah=ac.tile_cache.get(af);if(!ah){ah=ac.draw_tile(ad,resolution,0,w_scale);ac.tile_cache.set(af,ah)}var ak=$(ah.canvas.find("canvas")),ag=ak.clone(),aj=ak.get(0).getContext("2d"),ae=ag.get(0).getContext("2d"),ai=aj.getImageData(0,0,aj.canvas.width,aj.canvas.height);ae.putImageData(ai,-ac.left_offset,(ah.data.dataset_type==="summary_tree"?P:0));new_tile=new b(-1,resolution,ag);overview_tile.resolve(new_tile)});return overview_tile},_gen_tile_cache_key:function(ad,ae,ac){return ad+"_"+ae+"_"+ac},request_draw:function(ad,ac){this.view.request_redraw(false,ad,ac,this)},_draw:function(ae,an){if(!this.dataset_id){return}var am=this.view.low,ai=this.view.high,ak=ai-am,af=this.view.container.width(),aq=af/ak,ah=this.view.resolution,ap=$("<div style='position: relative;'></div>");if(!an){this.content_div.children().remove()}this.content_div.append(ap);this.max_height=0;var ad=Math.floor(am/ah/N);var al=true;var ao=[];var ac=0;while((ad*N*ah)<ai){tile=this.draw_helper(ae,af,ad,ah,ap,aq);if(tile){ao.push(tile)}else{al=false}ad+=1;ac++}var ag=this;if(al){ag.postdraw_actions(ao,af,aq,an)}for(var aj=0;aj<this.child_tracks.length;aj++){this.child_tracks[aj].request_draw(ae,an)}},postdraw_actions:function(ag,ah,ai,ac){var ae=this;var af=false;for(var ad=0;ad<ag.length;ad++){if(ag[ad].message){af=true;break}}if(af){for(var ad=0;ad<ag.length;ad++){tile=ag[ad];if(!tile.message){tile.canvas.css("padding-top",A)}}}},draw_helper:function(ad,ae,af,ai,ao,at,ap,aj){var ag=this,an=this._gen_tile_cache_key(ae,at,af),ak=af*N*ai,ar=ak+N*ai;var al=(ad?undefined:ag.tile_cache.get(an));if(al){ag.show_tile(al,ao,at);return al}var am=function(au){return("isResolved" in au)};var ah=true;var ac=ag.data_manager.get_data(ak,ar,ag.mode,ai,ag.data_url_extra_params);if(am(ac)){ah=false}var aq;if(view.reference_track&&at>view.canvas_manager.char_width_px){aq=view.reference_track.data_manager.get_data(ak,ar,ag.mode,ai,view.reference_track.data_url_extra_params);if(am(aq)){ah=false}}if(ah){n(ac,aj);var al=ag.draw_tile(ac,ai,af,at,aq);ag.tile_cache.set(an,al);if(al!==undefined){ag.show_tile(al,ao,at)}return al}$.when(ac,aq).then(function(){view.request_redraw()});return null},show_tile:function(aj,al,am){var ae=this,ad=aj.canvas,ai=ad;if(aj.message){var an=$("<div/>"),ak=$("<div/>").addClass("tile-message").text(aj.message).css({height:A-1,width:aj.canvas.width}).appendTo(an),ag=$("<a href='javascript:void(0);'/>").addClass("icon more-down").appendTo(ak),ac=$("<a href='javascript:void(0);'/>").addClass("icon more-across").appendTo(ak);an.append(ad);ai=an;ag.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.DEEP_DATA_REQ);ae.request_draw()}).dblclick(function(ao){ao.stopPropagation()});ac.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.BROAD_DATA_REQ);ae.request_draw()}).dblclick(function(ao){ao.stopPropagation()})}var ah=this.view.high-this.view.low,af=(aj.low-this.view.low)*am;if(this.left_offset){af-=this.left_offset}ai.css({position:"absolute",top:0,left:af,height:""});al.append(ai);ae.max_height=Math.max(ae.max_height,ai.height());ae.content_div.css("height",ae.max_height+"px");al.children().css("height",ae.max_height+"px")},tool_region_and_parameters_str:function(ae,ac,af){var ad=this,ag=(ae!==undefined&&ac!==undefined&&af!==undefined?ae+":"+ac+"-"+af:"all");return" - region=["+ag+"], parameters=["+ad.tool.get_param_values().join(", ")+"]"},add_track:function(ac){ac.track_id=this.track_id+"_"+this.child_tracks.length;ac.container_div.attr("id","track_"+ac.track_id);this.child_tracks_container.append(ac.container_div);C(ac.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(ac);this.view.has_changes=true},remove_track:function(ac){ac.container_div.fadeOut("slow",function(){$(this).remove()})}});var Y=function(ac,ad){this.hidden=true;j.call(this,null,ac,ad);this.container_div.addClass("label-track")};n(Y.prototype,j.prototype,{_draw:function(){var ae=this.view,af=ae.high-ae.low,ai=Math.floor(Math.pow(10,Math.floor(Math.log(af)/Math.log(10)))),ac=Math.floor(ae.low/ai)*ai,ag=this.view.container.width(),ad=$("<div style='position: relative; height: 1.3em;'></div>");while(ac<ae.high){var ah=(ac-ae.low)/af*ag;ad.append($("<div class='label'>"+commatize(ac)+"</div>").css({position:"absolute",left:ah-1}));ac+=ai}this.content_div.children(":first").remove();this.content_div.append(ad)}});var x=function(ac){this.hidden=true;j.call(this,null,ac,ac.top_labeltrack);J.call(this);ac.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:ac.dbkey};this.data_manager=new E(y,this,false);this.tile_cache=new c(r)};n(x.prototype,J.prototype,{draw_tile:function(ak,ah,ad,am){var ag=this,ae=N*ah;if(am>this.view.canvas_manager.char_width_px){if(ak===null){ag.content_div.css("height","0px");return}var af=this.view.canvas_manager.new_canvas();var al=af.getContext("2d");af.width=Math.ceil(ae*am+ag.left_offset);af.height=ag.height_px;al.font=al.canvas.manager.default_font;al.textAlign="center";for(var ai=0,aj=ak.length;ai<aj;ai++){var ac=Math.round(ai*am);al.fillText(ak[ai],ac+ag.left_offset,10)}return new b(ad,ah,af,ak)}this.content_div.css("height","0px")}});var k=function(ag,ae,ah,ac,af){var ad=this;this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ag,ae,ae.viewport_container);J.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ah;this.dataset_id=ac;this.original_dataset_id=ac;this.data_manager=new O(y,this);this.tile_cache=new c(r);this.track_config=new W({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:af,onchange:function(){ad.vertical_range=ad.prefs.max_value-ad.prefs.min_value;$("#linetrack_"+ad.track_id+"_minval").text(ad.prefs.min_value);$("#linetrack_"+ad.track_id+"_maxval").text(ad.prefs.max_value);ad.tile_cache.clear();ad.request_draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,J.prototype,{add_resize_handle:function(){var ac=this;var af=false;var ae=false;var ad=$("<div class='track-resize'>");$(ac.container_div).hover(function(){af=true;ad.show()},function(){af=false;if(!ae){ad.hide()}});ad.hide().bind("dragstart",function(ag,ah){ae=true;ah.original_height=$(ac.content_div).height()}).bind("drag",function(ah,ai){var ag=Math.min(Math.max(ai.original_height+ai.deltaY,ac.min_height_px),ac.max_height_px);$(ac.content_div).css("height",ag);ac.height_px=ag;ac.request_draw(true)}).bind("dragend",function(ag,ah){ac.tile_cache.clear();ae=false;if(!af){ad.hide()}ac.track_config.values.height=ac.height_px}).appendTo(ac.container_div)},predraw_init:function(){var ac=this,ad=ac.view.tracks.indexOf(ac);ac.vertical_range=undefined;return $.getJSON(ac.data_url,{stats:true,chrom:ac.view.chrom,low:null,high:null,hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id},function(ae){ac.container_div.addClass("line-track");var ag=ae.data;if(isNaN(parseFloat(ac.prefs.min_value))||isNaN(parseFloat(ac.prefs.max_value))){ac.prefs.min_value=ag.min;ac.prefs.max_value=ag.max;$("#track_"+ad+"_minval").val(ac.prefs.min_value);$("#track_"+ad+"_maxval").val(ac.prefs.max_value)}ac.vertical_range=ac.prefs.max_value-ac.prefs.min_value;ac.total_frequency=ag.total_frequency;ac.container_div.find(".yaxislabel").remove();var ah=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_minval").text(u(ac.prefs.min_value));var af=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_maxval").text(u(ac.prefs.max_value));af.css({position:"absolute",top:"24px",left:"10px"});af.prependTo(ac.container_div);ah.css({position:"absolute",bottom:"2px",left:"10px"});ah.prependTo(ac.container_div)})},draw_tile:function(am,ag,ad,al){if(this.vertical_range===undefined){return}var ah=ad*N*ag,af=N*ag,ac=Math.ceil(af*al),aj=this.height_px;var ae=this.view.canvas_manager.new_canvas();ae.width=ac,ae.height=aj;var ak=ae.getContext("2d");var ai=new I.LinePainter(am.data,ah,ah+af,this.prefs,this.mode);ai.draw(ak,ac,aj);return new b(ad,ag,ae,am.data)}});var e=function(ac,ah,ag,ak,aj,ae,af,ai){var ad=this;this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:aj,onchange:function(){ad.tile_cache.clear();ad.request_draw()}});this.prefs=this.track_config.values;j.call(this,ac,ah,ah.viewport_container);J.call(this,ae,af,ai);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ag;this.dataset_id=ak;this.original_dataset_id=ak;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_manager=new O(20,this);this.left_offset=200;this.painter=I.LinkedFeaturePainter};n(e.prototype,J.prototype,{postdraw_actions:function(ar,ac,at,aq){J.prototype.postdraw_actions.call(this,ar,aq);var af=this;if(aq){var ah=af.content_div.children();var ai=false;for(var ag=ah.length-1,am=0;ag>=am;ag--){var ae=$(ah[ag]);if(ai){ae.remove()}else{if(ae.children().length!==0){ai=true}}}}if(af.mode=="Histogram"){var al=-1;for(var ag=0;ag<ar.length;ag++){var ap=ar[ag].max_val;if(ap>al){al=ap}}for(var ag=0;ag<ar.length;ag++){var ao=ar[ag];if(ao.max_val!==al){ao.canvas.remove();af.draw_helper(true,ac,ao.index,ao.resolution,ao.canvas.parent(),at,[],{max:al})}}}if(af.filters_manager){var ad=af.filters_manager.filters;for(var ak=0;ak<ad.length;ak++){ad[ak].update_ui_elt()}var aj=false,an;for(var ag=0;ag<ar.length;ag++){if(ar[ag].data.length){an=ar[ag].data[0];for(var ak=0;ak<ad.length;ak++){if(ad[ak].applies_to(an)){aj=true;break}}}}if(af.filters_available!==aj){af.filters_available=aj;if(!af.filters_available){af.filters_div.hide()}af.make_name_popup_menu()}}},update_auto_mode:function(ac){if(this.mode=="Auto"){if(ac=="no_detail"){ac="feature spans"}else{if(ac=="summary_tree"){ac="coverage histogram"}}this.mode_div.text("Auto ("+ac+")")}},incremental_slots:function(ag,ad,af){var ae=this.view.canvas_manager.dummy_context,ac=this.inc_slots[ag];if(!ac||(ac.mode!==af)){ac=new (p.FeatureSlotter)(ag,af==="Pack",w,function(ah){return ae.measureText(ah)});ac.mode=af;this.inc_slots[ag]=ac}return ac.slot_features(ad)},get_summary_tree_data:function(ag,aj,ae,ar){if(ar>ae-aj){ar=ae-aj}var an=Math.floor((ae-aj)/ar),aq=[],af=0;var ah=0,ai=0,am,ap=0,ak=[],ao,al;var ad=function(av,au,aw,at){av[0]=au+aw*at;av[1]=au+(aw+1)*at};while(ap<ar&&ah!==ag.length){var ac=false;for(;ap<ar&&!ac;ap++){ad(ak,aj,ap,an);for(ai=ah;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ac=true;break}}if(ac){break}}data_start_index=ai;aq[aq.length]=ao=[ak[0],0];for(;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ao[1]++}else{break}}if(ao[1]>af){af=ao[1]}ap++}return{max:af,delta:an,data:aq}},draw_tile:function(ap,ay,aC,al,af){var av=this,aE=aC*N*ay,ad=(aC+1)*N*ay,ar=ad-aE,aw=Math.ceil(ar*al),at=this.mode,aI=25,ag=this.left_offset,aq,ah;if(at==="Auto"){if(ap.dataset_type==="summary_tree"){at=ap.dataset_type}else{if(ap.extra_info==="no_detail"){at="no_detail"}else{var aH=ap.data;if(this.view.high-this.view.low>F){at="Squish"}else{at="Pack"}}}this.update_auto_mode(at)}if(at==="summary_tree"||at==="Histogram"){ah=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var ac=$("<div />").addClass("yaxislabel");ac.text(ap.max);ac.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});ac.prependTo(this.container_div);var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah+P;if(ap.dataset_type!="summary_tree"){var am=this.get_summary_tree_data(ap.data,aE,ad,200);if(ap.max){am.max=ap.max}ap=am}var aF=new I.SummaryTreePainter(ap,aE,ad,this.prefs);var ax=ae.getContext("2d");ax.translate(ag,P);aF.draw(ax,aw,ah);return new l(aC,ay,ae,ap.data,ap.max)}var aq,aj=1;if(at==="no_detail"||at==="Squish"||at==="Pack"){aj=this.incremental_slots(al,ap.data,at);aq=this.inc_slots[al].slots}var ak=[];if(ap.data){var an=this.filters_manager.filters;for(var az=0,aB=ap.data.length;az<aB;az++){var ai=ap.data[az];var aA=false;var ao;for(var aD=0,aG=an.length;aD<aG;aD++){ao=an[aD];ao.update_attrs(ai);if(!ao.keep(ai)){aA=true;break}}if(!aA){ak.push(ai)}}}var au=(this.filters_manager.alpha_filter?new L(this.filters_manager.alpha_filter):null);var aF=new (this.painter)(ak,aE,ad,this.prefs,at,au,af);var ah=Math.max(aa,aF.get_required_height(aj));var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah;var ax=ae.getContext("2d");ax.fillStyle=this.prefs.block_color;ax.font=ax.canvas.manager.default_font;ax.textAlign="right";this.container_div.find(".yaxislabel").remove();if(ap.data){ax.translate(ag,0);aF.draw(ax,aw,ah,aq)}return new M(aC,ay,ae,ap.data,ap.message)}});var Q=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.painter=I.VariantPainter};n(Q.prototype,J.prototype,e.prototype);var T=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ae,onchange:function(){this.track.tile_cache.clear();this.track.request_draw()}});this.prefs=this.track_config.values;this.painter=I.ReadPainter;this.make_name_popup_menu()};n(T.prototype,J.prototype,e.prototype);var R=function(ag,ae,ai,ac,af,ah,ad){e.call(this,ag,ae,ai,ac,af,ah,{},ad);this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(R.prototype,J.prototype,e.prototype,{predraw_init:function(){var ad=this;var ac=function(){if(ad.data_manager.size()===0){setTimeout(ac,300)}else{ad.data_url=default_data_url;ad.data_query_wait=H;ad.dataset_state_url=converted_datasets_state_url;$.getJSON(ad.dataset_state_url,{dataset_id:ad.dataset_id,hda_ldda:ad.hda_ldda},function(ae){})}};ac()}});U.View=Z;U.LineTrack=k;U.FeatureTrack=e;U.ReadTrack=T};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(k,x){var u=k("class").extend;var p=function(I,A,G,z,F,D){if(D===undefined){D=4}var C=z-A;var B=F-G;var E=Math.floor(Math.sqrt(C*C+B*B)/D);var J=C/E;var H=B/E;var y;for(y=0;y<E;y++,A+=J,G+=H){if(y%2!==0){continue}I.fillRect(A,G,D,1)}};var q=function(B,A,z,E){var D=A-E/2,C=A+E/2,F=z-Math.sqrt(E*3/2);B.beginPath();B.moveTo(D,F);B.lineTo(C,F);B.lineTo(A,z);B.lineTo(D,F);B.strokeStyle=this.fillStyle;B.fill();B.stroke();B.closePath()};var g=function(y){this.default_alpha=(y?y:1)};g.prototype.gen_alpha=function(y){return this.default_alpha};var n=function(A,C,y,z,B){this.data=A;this.view_start=C;this.view_end=y;this.prefs=u({},this.default_prefs,z);this.mode=B};n.prototype.default_prefs={};var v=function(A,C,y,z,B){n.call(this,A,C,y,z,B)};v.prototype.default_prefs={show_counts:false};v.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(y,C,E,F,A){n.call(this,y,C,E,F,A);if(this.prefs.min_value===undefined){var G=Infinity;for(var z=0,B=this.data.length;z<B;z++){G=Math.min(G,this.data[z][1])}this.prefs.min_value=G}if(this.prefs.max_value===undefined){var D=-Infinity;for(var z=0,B=this.data.length;z<B;z++){D=Math.max(D,this.data[z][1])}this.prefs.max_value=D}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(N,M,K){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,J=D-H,z=K,A=this.view_start,L=this.view_end-this.view_start,B=M/L,I=this.mode,T=this.data;N.save();var U=Math.round(K+H/J*K);if(I!=="Intensity"){N.fillStyle="#aaa";N.fillRect(0,U,M,1)}N.beginPath();var R,E,C;if(T.length>1){C=Math.ceil((T[1][0]-T[0][0])*B)}else{C=10}for(var O=0,P=T.length;O<P;O++){N.fillStyle=this.prefs.color;R=Math.round((T[O][0]-A)*B);E=T[O][1];var Q=false,G=false;if(E===null){if(F&&I==="Filled"){N.lineTo(R,z)}F=false;continue}if(E<H){G=true;E=H}else{if(E>D){Q=true;E=D}}if(I==="Histogram"){E=Math.round(E/J*z);N.fillRect(R,U,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/J*255);N.fillStyle="rgb("+E+","+E+","+E+")";N.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/J*z);if(F){N.lineTo(R,E)}else{F=true;if(I==="Filled"){N.moveTo(R,z);N.lineTo(R,E)}else{N.moveTo(R,E)}}}}N.fillStyle=this.prefs.overflow_color;if(Q||G){var S;if(I==="Histogram"||I==="Intensity"){S=C}else{R-=2;S=4}if(Q){N.fillRect(R,0,S,3)}if(G){N.fillRect(R,z-3,S,3)}}N.fillStyle=this.prefs.color}if(I==="Filled"){if(F){N.lineTo(R,U);N.lineTo(0,U)}N.fill()}else{N.stroke()}N.restore()};var o=function(B,D,y,A,C,z){n.call(this,B,D,y,A,C);this.alpha_generator=(z?z:new g())};o.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};u(o.prototype,{get_required_height:function(z){var y=y_scale=this.get_row_height(),A=this.mode;if(A==="no_detail"||A==="Squish"||A==="Pack"){y=z*y_scale}return y+Math.max(Math.round(y_scale/2),5)},draw:function(K,B,J,G){var E=this.data,H=this.view_start,L=this.view_end;K.save();K.fillStyle=this.prefs.block_color;K.textAlign="right";var O=this.view_end-this.view_start,N=B/O,A=this.get_row_height();for(var D=0,F=E.length;D<F;D++){var M=E[D],C=M[0],y=M[1],z=M[2],I=(G&&G[C]!==undefined?G[C]:null);if((y<L&&z>H)&&(this.mode=="Dense"||I!==null)){this.draw_element(K,this.mode,M,I,H,L,N,A,B)}}K.restore()},draw_element:function(E,A,G,C,B,D,F,z,y){console.log("WARNING: Unimplemented function.")}});var d=10,j=3,m=5,w=10,f=1,s=3,e=3,a=9,l=2,h="#ccc";var r=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(r.prototype,o.prototype,{get_row_height:function(){var z=this.mode,y;if(z==="Dense"){y=d}else{if(z==="no_detail"){y=j}else{if(z==="Squish"){y=m}else{y=w}}}return y},draw_element:function(K,D,S,F,M,ac,ag,ah,y){var P=S[0],ae=S[1],W=S[2],N=S[3],X=Math.floor(Math.max(0,(ae-M)*ag)),L=Math.ceil(Math.min(y,Math.max(0,(W-M)*ag))),V=(D==="Dense"?0:(0+F))*ah,J,aa,O=null,ai=null,B=this.prefs.block_color,Z=this.prefs.label_color;K.globalAlpha=this.alpha_generator.gen_alpha(S);if(D=="Dense"){F=1}if(D==="no_detail"){K.fillStyle=B;K.fillRect(X,V+5,L-X,f)}else{var I=S[4],U=S[5],Y=S[6],C=S[7];if(U&&Y){O=Math.floor(Math.max(0,(U-M)*ag));ai=Math.ceil(Math.min(y,Math.max(0,(Y-M)*ag)))}var af,Q;if(D==="Squish"||D==="Dense"){af=1;Q=e}else{af=5;Q=a}if(!C){if(S.strand){if(S.strand==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(S.strand==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}}else{K.fillStyle=B}K.fillRect(X,V,L-X,Q)}else{var H,R;if(D==="Squish"||D==="Dense"){K.fillStyle=h;H=V+Math.floor(e/2)+1;R=1}else{if(I){var H=V;var R=Q;if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand")}}}else{K.fillStyle=h;H+=(e/2)+1;R=1}}K.fillRect(X,H,L-X,R);for(var ad=0,A=C.length;ad<A;ad++){var E=C[ad],z=Math.floor(Math.max(0,(E[0]-M)*ag)),T=Math.ceil(Math.min(y,Math.max((E[1]-M)*ag)));if(z>T){continue}K.fillStyle=B;K.fillRect(z,V+(Q-af)/2+1,T-z,af);if(O!==undefined&&Y>U&&!(z>ai||T<O)){var ab=Math.max(z,O),G=Math.min(T,ai);K.fillRect(ab,V+1,G-ab,Q);if(C.length==1&&D=="Pack"){if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}if(ab+14<G){ab+=2;G-=2}K.fillRect(ab,V+1,G-ab,Q)}}}}if(D==="Pack"&&ae>M){K.fillStyle=Z;if(M===0&&X-K.measureText(N).width<0){K.textAlign="left";K.fillText(N,L+l,V+8)}else{K.textAlign="right";K.fillText(N,X-l,V+8)}}}K.globalAlpha=1}});var b=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(b.prototype,o.prototype,{draw_element:function(R,M,G,C,U,A,J,S,P){var G=data[i],I=G[0],Q=G[1],B=G[2],L=G[3],E=Math.floor(Math.max(0,(Q-U)*J)),H=Math.ceil(Math.min(P,Math.max(0,(B-U)*J))),D=(M==="Dense"?0:(0+C))*S,y,V,z=null,K=null;if(no_label){R.fillStyle=block_color;R.fillRect(E+left_offset,D+5,H-E,1)}else{var T=G[4],O=G[5],F=G[6];y=9;V=1;R.fillRect(E+left_offset,D,H-E,y);if(M!=="Dense"&&L!==undefined&&Q>U){R.fillStyle=label_color;if(U===0&&E-R.measureText(L).width<0){R.textAlign="left";R.fillText(L,H+2+left_offset,D+8)}else{R.textAlign="right";R.fillText(L,E-2+left_offset,D+8)}R.fillStyle=block_color}var N=T+" / "+O;if(Q>U&&R.measureText(N).width<(H-E)){R.fillStyle="white";R.textAlign="center";R.fillText(N,left_offset+E+(H-E)/2,D+8);R.fillStyle=block_color}}}});var t=function(C,E,y,B,D,z,A){o.call(this,C,E,y,B,D,z);this.ref_seq=A};t.prototype.default_prefs=u({},o.prototype.default_prefs,{show_insertions:false});u(t.prototype,o.prototype,{get_row_height:function(){var y,z=this.mode;if(z==="Dense"){y=d}else{if(z==="Squish"){y=m}else{y=w;if(this.prefs.show_insertions){y*=2}}}return y},draw_read:function(U,P,L,Z,A,T,I,F,E){U.textAlign="center";var S=this,z=[Z,A],O=0,V=0,R=0;ref_seq=this.ref_seq,char_width_px=U.canvas.manager.char_width_px;var ae=[];if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){R=Math.round(L/2)}if(!I){I=[[0,F.length]]}for(var M=0,X=I.length;M<X;M++){var J=I[M],B="MIDNSHP=X"[J[0]],N=J[1];if(B==="H"||B==="S"){O-=N}var G=T+O,ad=Math.floor(Math.max(0,(G-Z)*L)),H=Math.floor(Math.max(0,(G+N-Z)*L));if(ad===H){H+=1}switch(B){case"H":break;case"S":case"M":case"=":if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(R>0){U.fillStyle=this.prefs.block_color;U.fillRect(ad-R,E+1,H-ad,9);U.fillStyle=h;for(var ab=0,y=Q.length;ab<y;ab++){if(this.prefs.show_differences&&ref_seq){var K=ref_seq[G-Z+ab];if(!K||K.toLowerCase()===Q[ab].toLowerCase()){continue}}if(G+ab>=Z&&G+ab<=A){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac,E+9)}}}else{U.fillStyle=this.prefs.block_color;U.fillRect(ad,E+4,H-ad,e)}}V+=N;O+=N;break;case"N":U.fillStyle=h;U.fillRect(ad-R,E+5,H-ad,1);O+=N;break;case"D":U.fillStyle="red";U.fillRect(ad-R,E+4,H-ad,3);O+=N;break;case"P":break;case"I":var Y=ad-R;if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(this.prefs.show_insertions){var D=ad-(H-ad)/2;if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){U.fillStyle="yellow";U.fillRect(D-R,E-9,H-ad,9);ae[ae.length]={type:"triangle",data:[Y,E+4,5]};U.fillStyle=h;switch(seq_tile_overlap){case (OVERLAP_START):Q=Q.slice(Z-G);break;case (OVERLAP_END):Q=Q.slice(0,G-A);break;case (CONTAINED_BY):break;case (CONTAINS):Q=Q.slice(Z-G,G-A);break}for(var ab=0,y=Q.length;ab<y;ab++){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac-(H-ad)/2,E)}}else{U.fillStyle="yellow";U.fillRect(D,E+(this.mode!=="Dense"?2:5),H-ad,(P!=="Dense"?e:s))}}else{if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){ae[ae.length]={type:"text",data:[Q.length,Y,E+9]}}else{}}}V+=N;break;case"X":V+=N;break}}U.fillStyle="yellow";var aa,C,af;for(var W=0;W<ae.length;W++){aa=ae[W];C=aa.type;af=aa.data;if(C==="text"){U.save();U.font="bold "+U.font;U.fillText(af[0],af[1],af[2]);U.restore()}else{if(C=="triangle"){q(U,af[0],af[1],af[2])}}}},draw_element:function(R,M,E,B,U,z,I,S,P){var H=E[0],Q=E[1],A=E[2],J=E[3],D=Math.floor(Math.max(0,(Q-U)*I)),F=Math.ceil(Math.min(P,Math.max(0,(A-U)*I))),C=(M==="Dense"?0:(0+B))*S,V=this.prefs.block_color,G=this.prefs.label_color,O=0;if((M==="Pack"||this.mode==="Auto")&&I>R.canvas.manager.char_width_px){var O=Math.round(I/2)}R.fillStyle=V;if(E[5] instanceof Array){var N=Math.floor(Math.max(0,(E[4][0]-U)*I)),L=Math.ceil(Math.min(P,Math.max(0,(E[4][1]-U)*I))),K=Math.floor(Math.max(0,(E[5][0]-U)*I)),y=Math.ceil(Math.min(P,Math.max(0,(E[5][1]-U)*I)));if(E[4][1]>=U&&E[4][0]<=z&&E[4][2]){this.draw_read(R,M,I,U,z,E[4][0],E[4][2],E[4][3],C)}if(E[5][1]>=U&&E[5][0]<=z&&E[5][2]){this.draw_read(R,M,I,U,z,E[5][0],E[5][2],E[5][3],C)}if(K>L){R.fillStyle=h;p(R,L-O,C+5,K-O,C+5)}}else{R.fillStyle=V;this.draw_read(R,M,I,U,z,Q,E[4],E[5],C)}if(M==="Pack"&&Q>U){R.fillStyle=this.prefs.label_color;var T=1;if(T===0&&D-R.measureText(J).width<0){R.textAlign="left";R.fillText(J,F+l-O,C+8)}else{R.textAlign="right";R.fillText(J,D-l-O,C+8)}R.fillStyle=V}}});x.AlphaGenerator=g;x.SummaryTreePainter=v;x.LinePainter=c;x.LinkedFeaturePainter=r;x.ReadPainter=t;x.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Remove unspecified build validator from aggregate_scores_in_intervals2 tool because it can work with a custom fasta.
by Bitbucket 24 Aug '11
by Bitbucket 24 Aug '11
24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/08859d106924/
changeset: 08859d106924
user: natefoo
date: 2011-08-24 20:38:29
summary: Remove unspecified build validator from aggregate_scores_in_intervals2 tool because it can work with a custom fasta.
affected #: 1 file (415 bytes)
--- a/tools/stats/aggregate_binned_scores_in_intervals.xml Wed Aug 24 13:58:48 2011 -0400
+++ b/tools/stats/aggregate_binned_scores_in_intervals.xml Wed Aug 24 14:38:29 2011 -0400
@@ -1,4 +1,4 @@
-<tool id="aggregate_scores_in_intervals2" description="such as phastCons, GERP, binCons, and others for a set of genomic intervals" name="Aggregate datapoints" version="1.1.2">
+<tool id="aggregate_scores_in_intervals2" description="such as phastCons, GERP, binCons, and others for a set of genomic intervals" name="Aggregate datapoints" version="1.1.3"><description>Appends the average, min, max of datapoints per interval</description><command interpreter="python">
#if $score_source_type.score_source == "user" #aggregate_scores_in_intervals.py $score_source_type.input2 $input1 ${input1.metadata.chromCol} ${input1.metadata.startCol} ${input1.metadata.endCol} $out_file1 --chrom_buffer=3
@@ -6,11 +6,7 @@
#end if#
</command><inputs>
- <param format="interval" name="input1" type="data" label="Interval file">
- <validator type="unspecified_build" message="Unspecified build, this tool works with data from genome builds hg16, hg17 or hg18. Click the pencil icon in your history item to set the genome build."/>
- <validator type="dataset_metadata_in_file" filename="binned_scores.loc" metadata_name="dbkey" metadata_column="0" message="Data is currently not available for the specified build." />
-
- </param>
+ <param format="interval" name="input1" type="data" label="Interval file"/><conditional name="score_source_type"><param name="score_source" type="select" label="Score Source"><option value="cached" selected="true">Locally Cached Scores</option>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: Grouping tool: use system numpy if provided, otherwise use bundled numpy egg
by Bitbucket 24 Aug '11
by Bitbucket 24 Aug '11
24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/a609a7af3fb6/
changeset: a609a7af3fb6
user: kanwei
date: 2011-08-24 19:58:48
summary: Grouping tool: use system numpy if provided, otherwise use bundled numpy egg
affected #: 1 file (35 bytes)
--- a/tools/stats/grouping.py Wed Aug 24 13:14:49 2011 -0400
+++ b/tools/stats/grouping.py Wed Aug 24 13:58:48 2011 -0400
@@ -6,9 +6,12 @@
This tool provides the SQL "group by" functionality.
"""
import sys, commands, tempfile, random
-import pkg_resources
-pkg_resources.require( "numpy" )
-import numpy
+try:
+ import numpy
+except:
+ from galaxy import eggs
+ eggs.require( "numpy" )
+ import numpy
from itertools import groupby
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/298b3077412d/
changeset: 298b3077412d
user: kanwei
date: 2011-08-24 19:14:49
summary: Fix sam2interval.py bug due to tab spacing
affected #: 1 file (83 bytes)
--- a/tools/samtools/sam2interval.py Wed Aug 24 10:19:38 2011 -0400
+++ b/tools/samtools/sam2interval.py Wed Aug 24 13:14:49 2011 -0400
@@ -44,7 +44,7 @@
'-r','--ref_column',
dest='ref_col',
default = '3',
- help='Column containing name of the refernce sequence coordinate. 1-based')
+ help='Column containing name of the reference sequence coordinate. 1-based')
parser.add_option(
'-e','--read_column',
@@ -53,26 +53,18 @@
help='Column containing read name. 1-based')
parser.add_option(
- '-d','--debug',
- dest='debug',
- action='store_true',
- default = False,
- help='Print debugging info')
-
- parser.add_option(
'-p','--print_all',
dest='prt_all',
action='store_true',
default = False,
help='Print coordinates and original SAM?')
-
-
+
options, args = parser.parse_args()
if options.input_sam:
- infile = open ( options.input_sam, 'r')
+ infile = open ( options.input_sam, 'r')
else:
- infile = sys.stdin
+ infile = sys.stdin
cigar = re.compile( '\d+M|\d+N|\d+D|\d+P' )
@@ -93,12 +85,12 @@
read_name = fields[ int( options.read_col ) - 1 ]
ref_name = fields[ int( options.ref_col ) - 1 ]
- if not ref_name == '*':
- # Do not print lines with unmapped reads that contain '*' instead of chromosome name
- if options.prt_all:
- print '%s\t%s\t%s\t%s\t%s' % (ref_name, str(start), str(end+start), strand, line)
- else:
- print '%s\t%s\t%s\t%s' % (ref_name, str(start), str(end+start), strand)
+ if ref_name != '*':
+ # Do not print lines with unmapped reads that contain '*' instead of chromosome name
+ if options.prt_all:
+ print '%s\t%s\t%s\t%s\t%s' % (ref_name, str(start), str(end+start), strand, line)
+ else:
+ print '%s\t%s\t%s\t%s' % (ref_name, str(start), str(end+start), strand)
if __name__ == "__main__": main()
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: route track drawing through requestAnimationFrame framework.
by Bitbucket 24 Aug '11
by Bitbucket 24 Aug '11
24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/708bcc6dd9ef/
changeset: 708bcc6dd9ef
user: jgoecks
date: 2011-08-24 16:19:38
summary: Trackster: route track drawing through requestAnimationFrame framework.
affected #: 1 file (2.2 KB)
--- a/static/scripts/trackster.js Wed Aug 24 01:11:54 2011 -0400
+++ b/static/scripts/trackster.js Wed Aug 24 10:19:38 2011 -0400
@@ -472,6 +472,7 @@
this.title = title;
this.tracks = [];
this.label_tracks = [];
+ this.tracks_to_be_redrawn = [];
this.max_low = 0;
this.max_high = 0;
this.num_tracks = 0;
@@ -479,7 +480,7 @@
this.zoom_factor = 3;
this.min_separation = 30;
this.has_changes = false;
- this.init( callback );
+ this.init(callback);
this.canvas_manager = new CanvasManager( container.get(0).ownerDocument );
this.reset();
};
@@ -849,11 +850,51 @@
this.high = this.max_high;
this.viewport_container.find(".yaxislabel").remove();
},
- request_redraw: function( nodraw ) {
- var view = this;
- requestAnimationFrame( function() { view.redraw( nodraw ) } );
+ /**
+ * Request that view redraw some or all tracks. If a track is not specificied, redraw all tracks.
+ */
+ request_redraw: function(nodraw, force, clear_after, track) {
+ var
+ view = this,
+ // Either redrawing a single track or all view's tracks.
+ track_list = (track ? [track] : view.tracks),
+ track_index;
+
+ // Add/update tracks in track list to redraw list.
+ var track;
+ for (var i = 0; i < track_list.length; i++) {
+ track = track_list[i];
+
+ // Because list elements are arrays, need to look for track index manually.
+ track_index = -1;
+ for (var j = 0; j < view.tracks_to_be_redrawn.length; j++) {
+ if (view.tracks_to_be_redrawn[j][0] === track) {
+ track_index = j;
+ break;
+ }
+ }
+
+ // Add track to list or update draw parameters.
+ if (track_index < 0) {
+ // Track not in list yet.
+ view.tracks_to_be_redrawn.push([track, force, clear_after]);
+ }
+ else {
+ // Track already in list; update force and clear_after.
+ view.tracks_to_be_redrawn[i][1] = force;
+ view.tracks_to_be_redrawn[i][2] = clear_after;
+ }
+ }
+
+ // Set up redraw.
+ requestAnimationFrame(function() { view._redraw(nodraw) });
},
- redraw: function(nodraw) {
+ /**
+ * Redraws view and tracks.
+ * NOTE: this method should never be called directly; request_redraw() should be used so
+ * that requestAnimationFrame can manage redrawing.
+ */
+ _redraw: function(nodraw) {
var low = this.low,
high = this.high;
@@ -890,13 +931,18 @@
this.update_location(this.low, this.high);
if (!nodraw) {
- for (var i = 0, len = this.tracks.length; i < len; i++) {
- if (this.tracks[i] && this.tracks[i].enabled) {
- this.tracks[i].draw();
+ var track, force, clear_after;
+ for (var i = 0, len = this.tracks_to_be_redrawn.length; i < len; i++) {
+ track = this.tracks_to_be_redrawn[i][0];
+ force = this.tracks_to_be_redrawn[i][1];
+ clear_after = this.tracks_to_be_redrawn[i][2];
+ if (track && track.enabled) {
+ track._draw(force, clear_after);
}
}
+ this.tracks_to_be_redrawn = [];
for (i = 0, len = this.label_tracks.length; i < len; i++) {
- this.label_tracks[i].draw();
+ this.label_tracks[i]._draw();
}
}
},
@@ -1426,7 +1472,7 @@
filter.low = values[0];
filter.high = values[1];
// Redraw track.
- manager.track.draw(true, true);
+ manager.track.request_draw(true, true);
},
change: function(event, ui) {
filter.control_element.slider("option", "slide").call(filter.control_element, event, ui);
@@ -1470,7 +1516,7 @@
$(this).children("option:selected").each(function() {
var filterIndex = parseInt($(this).val());
manager.alpha_filter = (filterIndex >= 0 ? manager.filters[filterIndex] : null);
- manager.track.draw(true, true);
+ manager.track.request_draw(true, true);
})
});
@@ -1840,7 +1886,7 @@
// predraw_init may be asynchronous, wait for it and then draw
$.when(track.predraw_init()).done(function() {
track.container_div.removeClass("nodata error pending");
- track.draw()
+ track.request_draw()
});
}
}
@@ -1956,7 +2002,7 @@
track.mode = name;
track.track_config.values['mode'] = name;
track.tile_cache.clear();
- track.draw();
+ track.request_draw();
},
/**
* Make popup menu for track name.
@@ -2124,10 +2170,18 @@
return width + '_' + w_scale + '_' + tile_index;
},
/**
+ * Request that track be drawn.
+ */
+ request_draw: function(force, clear_after) {
+ this.view.request_redraw(false, force, clear_after, this);
+ },
+ /**
* Draw track. It is possible to force a redraw rather than use cached tiles and/or clear old
* tiles after drawing new tiles.
+ * NOTE: this function should never be called directly; use request_draw() so that requestAnimationFrame
+ * can manage drawing.
*/
- draw: function(force, clear_after) {
+ _draw: function(force, clear_after) {
// Cannot draw without dataset_id; dataset_id may not be set if track dynamically created
// and is waiting for dataset.
if (!this.dataset_id) { return; }
@@ -2164,12 +2218,12 @@
// Use interval to check if tiles have been drawn. When all tiles are drawn, call post-draw actions.
var track = this;
- if ( all_tiles_drawn ) {
+ if (all_tiles_drawn) {
track.postdraw_actions(drawn_tiles, width, w_scale, clear_after);
}
// Draw child tracks.
for (var i = 0; i < this.child_tracks.length; i++) {
- this.child_tracks[i].draw(force, clear_after);
+ this.child_tracks[i].request_draw(force, clear_after);
}
},
/**
@@ -2291,7 +2345,7 @@
// Mark tile as stale, request more data, and redraw track.
tile.stale = true;
track.data_manager.get_more_data(tile.low, tile.high, track.mode, tile.resolution, {}, track.data_manager.DEEP_DATA_REQ);
- track.draw();
+ track.request_draw();
}).dblclick(function(e) {
// Do not propogate as this would normally zoom in.
e.stopPropagation();
@@ -2301,7 +2355,7 @@
// Mark tile as stale, request more data, and redraw track.
tile.stale = true;
track.data_manager.get_more_data(tile.low, tile.high, track.mode, tile.resolution, {}, track.data_manager.BROAD_DATA_REQ);
- track.draw();
+ track.request_draw();
}).dblclick(function(e) {
// Do not propogate as this would normally zoom in.
e.stopPropagation();
@@ -2364,8 +2418,8 @@
Track.call( this, null, view, parent_element );
this.container_div.addClass( "label-track" );
};
-extend( LabelTrack.prototype, Track.prototype, {
- draw: function() {
+extend(LabelTrack.prototype, Track.prototype, {
+ _draw: function() {
var view = this.view,
range = view.high - view.low,
tickDistance = Math.floor( Math.pow( 10, Math.floor( Math.log( range ) / Math.log( 10 ) ) ) ),
@@ -2465,7 +2519,7 @@
$('#linetrack_' + track.track_id + '_minval').text(track.prefs.min_value);
$('#linetrack_' + track.track_id + '_maxval').text(track.prefs.max_value);
track.tile_cache.clear();
- track.draw();
+ track.request_draw();
}
});
@@ -2501,13 +2555,13 @@
var new_height = Math.min( Math.max( d.original_height + d.deltaY, track.min_height_px ), track.max_height_px );
$(track.content_div).css( 'height', new_height );
track.height_px = new_height;
- track.draw( true );
+ track.request_draw(true);
}).bind( "dragend", function( e, d ) {
track.tile_cache.clear();
in_drag = false;
- if ( ! in_handle ) { drag_control.hide(); }
+ if (!in_handle) { drag_control.hide(); }
track.track_config.values.height = track.height_px;
- }).appendTo( track.container_div );
+ }).appendTo(track.container_div);
},
predraw_init: function() {
var track = this,
@@ -2587,7 +2641,7 @@
saved_values: prefs,
onchange: function() {
track.tile_cache.clear();
- track.draw();
+ track.request_draw();
}
});
this.prefs = this.track_config.values;
@@ -2976,7 +3030,7 @@
saved_values: prefs,
onchange: function() {
this.track.tile_cache.clear();
- this.track.draw();
+ this.track.request_draw();
}
});
this.prefs = this.track_config.values;
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: Simplified Custom Builds page... show less by default
by Bitbucket 24 Aug '11
by Bitbucket 24 Aug '11
24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/e85b513b66be/
changeset: e85b513b66be
user: kanwei
date: 2011-08-24 07:11:54
summary: Simplified Custom Builds page... show less by default
affected #: 1 file (261 bytes)
--- a/templates/user/dbkeys.mako Wed Aug 24 00:45:31 2011 -0400
+++ b/templates/user/dbkeys.mako Wed Aug 24 01:11:54 2011 -0400
@@ -56,6 +56,10 @@
pre.toggle();
});
});
+ $("#installed_builds").hide();
+ $("#show_installed_builds").click(function() {
+ $("#installed_builds").show();
+ });
});
</script>
@@ -72,10 +76,8 @@
% elif lines_skipped > 0:
<div class="warningmessagelarge">Skipped ${lines_skipped} lines that could not be parsed. (Line was either blank or not 2-column, with 2nd column being an integer)</div>
% endif
-
- <h2>Custom Database/Builds</h2>
- <p>Current custom builds:</p>
+ <h3>Current Custom Builds:</h3>
% if dbkeys:
<table id="custom_dbkeys" class="colored" cellspacing="0" cellpadding="0">
@@ -110,12 +112,17 @@
% else:
<p>You currently have no custom builds.</p>
% endif
- <p>Builds with system-installed len files: <em>${installed_len_files}</em></p>
- <br />
+ <p>
+ <a id="show_installed_builds" href="javascript:void(0);">Show loaded, system-installed builds</a>
+ <blockquote id="installed_builds">${installed_len_files}</blockquote>
+ </p>
+
+ <hr />
+ <h3>Add a Custom Build</h3><form action="dbkeys" method="post" enctype="multipart/form-data"><div class="toolForm" style="float: left;">
- <div class="toolFormTitle">Add a Custom Build</div>
+ <div class="toolFormTitle">New Build</div><div class="toolFormBody"><div class="form-row"><label for="name">Build Name (eg: Mouse):</label>
@@ -128,8 +135,8 @@
<div class="form-row"><label for="len_file">Upload .len file:</label><input type="file" id="len_file" name="len_file" /><br />
- <label for="len_text">Or paste length info below:</label>
- <textarea id="len_text" name="len_text" cols="30" rows="10"></textarea>
+ <label for="len_text">Or enter/paste length info below:</label>
+ <textarea id="len_text" name="len_text" cols="30" rows="8"></textarea></div><div class="form-row"><input type="submit" name="add" value="Submit"/></div>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: Tool versioning: now store version information in hda/ldda tables. Information is kept when copied between hda/ldda, and now displayed in the "Show Info" pages for hdas and lddas.
by Bitbucket 24 Aug '11
by Bitbucket 24 Aug '11
24 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/f3a18916bfd4/
changeset: f3a18916bfd4
user: kanwei
date: 2011-08-24 06:45:31
summary: Tool versioning: now store version information in hda/ldda tables. Information is kept when copied between hda/ldda, and now displayed in the "Show Info" pages for hdas and lddas.
affected #: 6 files (761 bytes)
--- a/lib/galaxy/jobs/__init__.py Tue Aug 23 17:27:58 2011 -0400
+++ b/lib/galaxy/jobs/__init__.py Wed Aug 24 00:45:31 2011 -0400
@@ -534,7 +534,7 @@
if self.version_string_cmd:
version_filename = self.get_version_string_path()
if os.path.exists(version_filename):
- self.version_string = "Tool version: %s" % open(version_filename).read()
+ self.version_string = open(version_filename).read()
os.unlink(version_filename)
if self.app.config.outputs_to_working_directory:
@@ -587,7 +587,8 @@
dataset.blurb = 'done'
dataset.peek = 'no peek'
- dataset.info = context['stdout'] + context['stderr'] + self.version_string
+ dataset.info = context['stdout'] + context['stderr']
+ dataset.tool_version = self.version_string
dataset.set_size()
if context['stderr']:
dataset.blurb = "error"
--- a/lib/galaxy/model/__init__.py Tue Aug 23 17:27:58 2011 -0400
+++ b/lib/galaxy/model/__init__.py Wed Aug 24 00:45:31 2011 -0400
@@ -753,7 +753,7 @@
"""A base class for all 'dataset instances', HDAs, LDAs, etc"""
states = Dataset.states
permitted_actions = Dataset.permitted_actions
- def __init__( self, id=None, hid=None, name=None, info=None, blurb=None, peek=None, extension=None,
+ def __init__( self, id=None, hid=None, name=None, info=None, blurb=None, peek=None, tool_version=None, extension=None,
dbkey=None, metadata=None, history=None, dataset=None, deleted=False, designation=None,
parent_id=None, validation_errors=None, visible=True, create_dataset=False, sa_session=None ):
self.name = name or "Unnamed dataset"
@@ -761,6 +761,7 @@
self.info = info
self.blurb = blurb
self.peek = peek
+ self.tool_version = tool_version
self.extension = extension
self.designation = designation
self.metadata = metadata or dict()
@@ -1020,6 +1021,7 @@
info=self.info,
blurb=self.blurb,
peek=self.peek,
+ tool_version=self.tool_version,
extension=self.extension,
dbkey=self.dbkey,
dataset = self.dataset,
@@ -1057,6 +1059,7 @@
info=self.info,
blurb=self.blurb,
peek=self.peek,
+ tool_version=self.tool_version,
extension=self.extension,
dbkey=self.dbkey,
dataset=self.dataset,
@@ -1410,6 +1413,7 @@
info=self.info,
blurb=self.blurb,
peek=self.peek,
+ tool_version=self.tool_version,
extension=self.extension,
dbkey=self.dbkey,
dataset=self.dataset,
@@ -1434,6 +1438,7 @@
info=self.info,
blurb=self.blurb,
peek=self.peek,
+ tool_version=self.tool_version,
extension=self.extension,
dbkey=self.dbkey,
dataset=self.dataset,
--- a/lib/galaxy/model/mapping.py Tue Aug 23 17:27:58 2011 -0400
+++ b/lib/galaxy/model/mapping.py Wed Aug 24 00:45:31 2011 -0400
@@ -113,6 +113,7 @@
Column( "info", TrimmedString( 255 ) ),
Column( "blurb", TrimmedString( 255 ) ),
Column( "peek" , TEXT ),
+ Column( "tool_version" , TEXT ),
Column( "extension", TrimmedString( 64 ) ),
Column( "metadata", MetadataType(), key="_metadata" ),
Column( "parent_id", Integer, ForeignKey( "history_dataset_association.id" ), nullable=True ),
@@ -305,6 +306,7 @@
Column( "info", TrimmedString( 255 ) ),
Column( "blurb", TrimmedString( 255 ) ),
Column( "peek" , TEXT ),
+ Column( "tool_version" , TEXT ),
Column( "extension", TrimmedString( 64 ) ),
Column( "metadata", MetadataType(), key="_metadata" ),
Column( "parent_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), nullable=True ),
--- a/templates/library/common/ldda_info.mako Tue Aug 23 17:27:58 2011 -0400
+++ b/templates/library/common/ldda_info.mako Wed Aug 24 00:45:31 2011 -0400
@@ -100,6 +100,13 @@
${ldda.get_size( nice_size=True )}
<div style="clear: both"></div></div>
+ %if ldda.tool_version:
+ <div class="form-row">
+ <label>Tool version:</label>
+ ${ldda.tool_version}
+ <div style="clear: both"></div>
+ </div>
+ %endif
<div class="form-row"><label>Data type:</label>
${ldda.ext}
@@ -154,7 +161,7 @@
%endfor
%if ldda.peek != "no peek":
<div class="form-row">
- <div id="info${ldda.id}" class="historyItemBody">
+ <div id="info${ldda.id}" class="historyItemBody"><label>Peek:</label><div><pre id="peek${ldda.id}" class="peek">${ldda.display_peek()}</pre></div></div>
--- a/templates/show_params.mako Tue Aug 23 17:27:58 2011 -0400
+++ b/templates/show_params.mako Wed Aug 24 00:45:31 2011 -0400
@@ -49,6 +49,7 @@
<tr><td>Filesize:</td><td>${nice_size(hda.dataset.file_size)}</td></tr><tr><td>Dbkey:</td><td>${hda.dbkey}</td></tr><tr><td>Format:</td><td>${hda.ext}</td></tr>
+ <tr><td>Tool Version:</td><td>${hda.tool_version}</td></tr></table><br /><table class="tabletip">
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: remove throttling during dynamic filtering because it's not needed with requestAnimationFrame.
by Bitbucket 23 Aug '11
by Bitbucket 23 Aug '11
23 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/1447e4ebe7c8/
changeset: 1447e4ebe7c8
user: jgoecks
date: 2011-08-23 23:27:58
summary: Trackster: remove throttling during dynamic filtering because it's not needed with requestAnimationFrame.
affected #: 1 file (645 bytes)
--- a/static/scripts/trackster.js Tue Aug 23 17:21:37 2011 -0400
+++ b/static/scripts/trackster.js Tue Aug 23 17:27:58 2011 -0400
@@ -1419,25 +1419,14 @@
max: -Number.MIN_VALUE,
values: [0, 0],
slide: function(event, ui) {
- //
- // Always update UI values, but set timeout for doing more--especially drawing--
- // so that viz is more responsive.
- // TODO: remove this because it's no longer necessary as we have requestAnimationFrame().
- //
- prev_values = ui.values;
- values_span.text(ui.values[0] + "-" + ui.values[1]);
- setTimeout(function() {
- if (ui.values[0] == prev_values[0] && ui.values[1] == prev_values[1]) {
- var values = ui.values;
- // Set new values in UI.
- values_span.text(values[0] + "-" + values[1]);
- // Set new values in filter.
- filter.low = values[0];
- filter.high = values[1];
- // Redraw track.
- manager.track.draw(true, true);
- }
- }, 50);
+ var values = ui.values;
+ // Set new values in UI.
+ values_span.text(values[0] + "-" + values[1]);
+ // Set new values in filter.
+ filter.low = values[0];
+ filter.high = values[1];
+ // Redraw track.
+ manager.track.draw(true, true);
},
change: function(event, ui) {
filter.control_element.slider("option", "slide").call(filter.control_element, event, ui);
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: make it possible to set features' transparency based on attribute values.
by Bitbucket 23 Aug '11
by Bitbucket 23 Aug '11
23 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/dbc0cf838411/
changeset: dbc0cf838411
user: jgoecks
date: 2011-08-23 23:21:37
summary: Trackster: make it possible to set features' transparency based on attribute values.
affected #: 4 files (4.8 KB)
--- a/static/june_2007_style/blue/trackster.css Mon Aug 22 16:31:50 2011 -0400
+++ b/static/june_2007_style/blue/trackster.css Tue Aug 23 17:21:37 2011 -0400
@@ -39,9 +39,12 @@
.top-labeltrack{position:relative;border-bottom:solid #999 1px;}
.nav-labeltrack{border-top:solid #999 1px;border-bottom:solid #333 1px;}
input{font:10px verdana;}
-.dynamic-tool,.filters{width:410px;margin-left:0.25em;padding-bottom:0.5em;}
+.dynamic-tool,.filters{margin-left:0.25em;padding-bottom:0.5em;}
+.filters>.sliders,.display-controls{float:left;margin:1em;}
+.sliders{width:410px;}
+.display-controls{border-left:solid 2px #DDDDDD;padding-left:1em}
.slider-row{margin-top:0.4em;margin-left:1em;}
-.slider-label{float:left;font-weight:bold;}
+.elt-label{float:left;font-weight:bold;margin-right:1em;}
.slider{float:right;width:200px;position:relative;}
.tool-name{font-size:110%;font-weight:bold;}
.param-row{margin-top:0.2em;margin-left:1em;}
--- a/static/june_2007_style/trackster.css.tmpl Mon Aug 22 16:31:50 2011 -0400
+++ b/static/june_2007_style/trackster.css.tmpl Tue Aug 23 17:21:37 2011 -0400
@@ -231,17 +231,28 @@
font: 10px verdana;
}
.dynamic-tool, .filters {
- width: 410px;
margin-left: 0.25em;
padding-bottom:0.5em;
}
+.filters > .sliders, .display-controls {
+ float: left;
+ margin: 1em;
+}
+.sliders{
+ width: 410px;
+}
+.display-controls{
+ border-left: solid 2px #DDDDDD;
+ padding-left: 1em
+}
.slider-row {
margin-top: 0.4em;
margin-left: 1em;
}
-.slider-label {
+.elt-label {
float: left;
font-weight: bold;
+ margin-right: 1em;
}
.slider {
float: right;
--- a/static/scripts/packed/trackster.js Mon Aug 22 16:31:50 2011 -0400
+++ b/static/scripts/packed/trackster.js Tue Aug 23 17:21:37 2011 -0400
@@ -1,1 +1,1 @@
-var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,T){var n=f("class").extend,p=f("slotting"),I=f("painters");var Z=function(aa,ab){this.document=aa;this.default_font=ab!==undefined?ab:"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")};n(Z.prototype,{load_pattern:function(aa,ae){var ab=this.patterns,ac=this.dummy_context,ad=new Image();ad.src=image_path+ae;ad.onload=function(){ab[aa]=ac.createPattern(ad,"repeat")}},get_pattern:function(aa){return this.patterns[aa]},new_canvas:function(){var aa=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(aa)}aa.manager=this;return aa}});var C=function(aa,ab){aa.bind("drag",{handle:ab,relative:true},function(af,ag){var ae=$(this).parent();var ad=ae.children();var ac;for(ac=0;ac<ad.length;ac++){if(ag.offsetY<$(ad.get(ac)).position().top){break}}if(ac===ad.length){if(this!==ad.get(ac-1)){ae.append(this)}}else{if(this!==ad.get(ac)){$(this).insertBefore(ad.get(ac))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};T.sortable=C;var D=9,A=20,O=D+2,w=100,F=12000,M=200,z=5,s=10,H=5000,t=100,m="There was an error in indexing this dataset. ",G="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",B="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",U="Ready for display",d=10,r=5,y=5;function u(aa){return Math.round(aa*1000)/1000}var c=function(aa){this.num_elements=aa;this.clear()};n(c.prototype,{get:function(ab){var aa=this.key_ary.indexOf(ab);if(aa!==-1){if(this.obj_cache[ab].stale){this.key_ary.splice(aa,1);delete this.obj_cache[ab]}else{this.move_key_to_end(ab,aa)}}return this.obj_cache[ab]},set:function(ab,ac){if(!this.obj_cache[ab]){if(this.key_ary.length>=this.num_elements){var aa=this.key_ary.shift();delete this.obj_cache[aa]}this.key_ary.push(ab)}this.obj_cache[ab]=ac;return ac},move_key_to_end:function(ab,aa){this.key_ary.splice(aa,1);this.key_ary.push(ab)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var N=function(ab,aa,ac){c.call(this,ab);this.track=aa;this.subset=(ac!==undefined?ac:true)};n(N.prototype,c.prototype,{load_data:function(aj,ae,ah,ab,ag){var ai=this.track.view.chrom,ad={chrom:ai,low:aj,high:ae,mode:ah,resolution:ab,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ad,ag);if(this.track.filters_manager){var ak=[];var aa=this.track.filters_manager.filters;for(var af=0;af<aa.length;af++){ak[ak.length]=aa[af].name}ad.filter_cols=JSON.stringify(ak)}var ac=this;return $.getJSON(this.track.data_url,ad,function(al){ac.set_data(aj,ae,ah,al)})},get_data:function(aa,ae,af,ab,ad){var ac=this.get_data_from_cache(aa,ae,af);if(ac){return ac}ac=this.load_data(aa,ae,af,ab,ad);this.set_data(aa,ae,af,ac);return ac},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(ai,ad,ah,ac,ag,ae){var aj=this.get_data_from_cache(ai,ad,ah);if(!aj){console.log("ERROR: no current data for: ",this.track,ai,ad,ah,ac,ag);return}aj.stale=true;var ab=ai;if(ae===this.DEEP_DATA_REQ){$.extend(ag,{start_val:aj.data.length+1})}else{if(ae===this.BROAD_DATA_REQ){ab=aj.data[aj.data.length-1][2]+1}}var aa=this,af=this.load_data(ab,ad,ah,ac,ag);new_data_available=$.Deferred();this.set_data(ai,ad,ah,new_data_available);$.when(af).then(function(ak){if(ak.data){ak.data=aj.data.concat(ak.data);if(ak.message){ak.message=ak.message.replace(/[0-9]+/,ak.data.length)}}aa.set_data(ai,ad,ah,ak);new_data_available.resolve(ak)});return new_data_available},get_data_from_cache:function(aa,ab,ac){return this.get(this.gen_key(aa,ab,ac))},set_data:function(ab,ac,ad,aa){return this.set(this.gen_key(ab,ac,ad),aa)},gen_key:function(aa,ac,ad){var ab=aa+"_"+ac+"_"+ad;return ab},split_key:function(aa){return aa.split("_")}});var E=function(ab,aa,ac){N.call(this,ab,aa,ac)};n(E.prototype,N.prototype,c.prototype,{load_data:function(ac,aa,ae,af,ab,ad){if(ab>1){return}return N.prototype.load_data.call(this,ac,aa,ae,af,ab,ad)}});var Y=function(aa,ad,ac,ab,ae){this.container=aa;this.chrom=null;this.vis_id=ac;this.dbkey=ab;this.title=ad;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ae);this.canvas_manager=new Z(aa.get(0).ownerDocument);this.reset()};n(Y.prototype,{init:function(ae){var ac=this.container,aa=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ac);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ac);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ac);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").appendTo(this.viewport_container).hide();var ad=$("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function(){add_tracks()});this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var ab=function(af){if(af.type==="focusout"||(af.keyCode||af.which)===13||(af.keyCode||af.which)===27){if((af.keyCode||af.which)!==27){aa.go_to($(this).val())}$(this).hide();$(this).val("");aa.location_span.show();aa.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",ab).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.click(function(){aa.location_span.hide();aa.chrom_select.hide();aa.nav_input.val(aa.chrom+":"+aa.low+"-"+aa.high);aa.nav_input.css("display","inline-block");aa.nav_input.select();aa.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){aa.zoom_out();aa.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){aa.zoom_in();aa.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ae);this.chrom_select.bind("change",function(){aa.change_chrom(aa.chrom_select.val())});this.content_div.click(function(af){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(af){aa.zoom_in(af.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(af,ag){this.current_x=ag.offsetX}).bind("drag",function(af,ah){var ai=ah.offsetX-this.current_x;this.current_x=ah.offsetX;var ag=Math.round(ai/aa.viewport_container.width()*(aa.max_high-aa.max_low));aa.move_delta(-ag)});this.overview_close.click(function(){aa.reset_overview()});this.viewport_container.bind("draginit",function(af,ag){if(af.clientX>aa.viewport_container.width()-16){return false}}).bind("dragstart",function(af,ag){ag.original_low=aa.low;ag.current_height=af.clientY;ag.current_x=ag.offsetX}).bind("drag",function(ah,aj){var af=$(this);var ak=aj.offsetX-aj.current_x;var ag=af.scrollTop()-(ah.clientY-aj.current_height);af.scrollTop(ag);aj.current_height=ah.clientY;aj.current_x=aj.offsetX;var ai=Math.round(ak/aa.viewport_container.width()*(aa.high-aa.low));aa.move_delta(ai)}).bind("mousewheel",function(ah,aj,ag,af){if(ag){var ai=Math.round(-ag/aa.viewport_container.width()*(aa.high-aa.low));aa.move_delta(ai)}});this.top_labeltrack.bind("dragstart",function(af,ag){return $("<div />").css({height:aa.content_div.height()+aa.top_labeltrack.height()+aa.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(aj,ak){$(ak.proxy).css({left:Math.min(aj.pageX,ak.startX),width:Math.abs(aj.pageX-ak.startX)});var ag=Math.min(aj.pageX,ak.startX)-aa.container.offset().left,af=Math.max(aj.pageX,ak.startX)-aa.container.offset().left,ai=(aa.high-aa.low),ah=aa.viewport_container.width();aa.update_location(Math.round(ag/ah*ai)+aa.low,Math.round(af/ah*ai)+aa.low)}).bind("dragend",function(ak,al){var ag=Math.min(ak.pageX,al.startX),af=Math.max(ak.pageX,al.startX),ai=(aa.high-aa.low),ah=aa.viewport_container.width(),aj=aa.low;aa.low=Math.round(ag/ah*ai)+aj;aa.high=Math.round(af/ah*ai)+aj;$(al.proxy).remove();aa.redraw()});this.add_label_track(new X(this,this.top_labeltrack));this.add_label_track(new X(this,this.nav_labeltrack));$(window).bind("resize",function(){aa.resize_window()});$(document).bind("redraw",function(){aa.redraw()});this.reset();$(window).trigger("resize");this.update_intro_div()},update_intro_div:function(){if(this.num_tracks===0){this.intro_div.show()}else{this.intro_div.hide()}},update_location:function(aa,ab){this.location_span.text(commatize(aa)+" - "+commatize(ab));this.nav_input.val(this.chrom+":"+commatize(aa)+"-"+commatize(ab))},load_chroms:function(ab,ac){ab.num=t;$.extend(ab,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var aa=this;$.ajax({url:chrom_url,data:ab,dataType:"json",success:function(ae){if(ae.chrom_info.length===0){alert("Invalid chromosome: "+ab.chrom);return}if(ae.reference){aa.add_label_track(new x(aa))}aa.chrom_data=ae.chrom_info;var ah='<option value="">Select Chrom/Contig</option>';for(var ag=0,ad=aa.chrom_data.length;ag<ad;ag++){var af=aa.chrom_data[ag].chrom;ah+='<option value="'+af+'">'+af+"</option>"}if(ae.prev_chroms){ah+='<option value="previous">Previous '+t+"</option>"}if(ae.next_chroms){ah+='<option value="next">Next '+t+"</option>"}aa.chrom_select.html(ah);if(ac){ac()}aa.chrom_start_index=ae.start_index},error:function(){alert("Could not load chroms for this dbkey:",aa.dbkey)}})},change_chrom:function(ae,ab,ag){if(!ae||ae==="None"){return}var ad=this;if(ae==="previous"){ad.load_chroms({low:this.chrom_start_index-t});return}if(ae==="next"){ad.load_chroms({low:this.chrom_start_index+t});return}var af=$.grep(ad.chrom_data,function(ai,aj){return ai.chrom===ae})[0];if(af===undefined){ad.load_chroms({chrom:ae},function(){ad.change_chrom(ae,ab,ag)});return}else{if(ae!==ad.chrom){ad.chrom=ae;ad.chrom_select.val(ad.chrom);ad.max_high=af.len-1;ad.reset();ad.redraw(true);for(var ah=0,aa=ad.tracks.length;ah<aa;ah++){var ac=ad.tracks[ah];if(ac.init){ac.init()}}}if(ab!==undefined&&ag!==undefined){ad.low=Math.max(ab,0);ad.high=Math.min(ag,ad.max_high)}ad.reset_overview();ad.redraw()}},go_to:function(ae){var ai=this,aa,ad,ab=ae.split(":"),ag=ab[0],ah=ab[1];if(ah!==undefined){try{var af=ah.split("-");aa=parseInt(af[0].replace(/,/g,""),10);ad=parseInt(af[1].replace(/,/g,""),10)}catch(ac){return false}}ai.change_chrom(ag,aa,ad)},move_fraction:function(ac){var aa=this;var ab=aa.high-aa.low;this.move_delta(ac*ab)},move_delta:function(ac){var aa=this;var ab=aa.high-aa.low;if(aa.low-ac<aa.max_low){aa.low=aa.max_low;aa.high=aa.max_low+ab}else{if(aa.high-ac>aa.max_high){aa.high=aa.max_high;aa.low=aa.max_high-ab}else{aa.high-=ac;aa.low-=ac}}aa.redraw()},add_track:function(aa){aa.view=this;aa.track_id=this.track_id_counter;this.tracks.push(aa);if(aa.init){aa.init()}aa.container_div.attr("id","track_"+aa.track_id);C(aa.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1;this.update_intro_div()},add_label_track:function(aa){aa.view=this;this.label_tracks.push(aa)},remove_track:function(ab){this.has_changes=true;delete this.tracks[this.tracks.indexOf(ab)];this.num_tracks-=1;var aa=this;ab.container_div.fadeOut("slow",function(){$(this).remove();aa.update_intro_div()})},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ah){var ag=this.high-this.low,af=this.low,ab=this.high;if(af<this.max_low){af=this.max_low}if(ab>this.max_high){ab=this.max_high}if(this.high!==0&&ag<this.min_separation){ab=af+this.min_separation}this.low=Math.floor(af);this.high=Math.ceil(ab);this.resolution=Math.pow(z,Math.ceil(Math.log((this.high-this.low)/M)/Math.log(z)));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var aa=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ae=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ai=13;this.overview_box.css({left:aa,width:Math.max(ai,ae)}).show();if(ae<ai){this.overview_box.css("left",aa-(ai-ae)/2)}if(this.overview_highlight){this.overview_highlight.css({left:aa,width:ae})}this.update_location(this.low,this.high);if(!ah){for(var ac=0,ad=this.tracks.length;ac<ad;ac++){if(this.tracks[ac]&&this.tracks[ac].enabled){this.tracks[ac].draw()}}for(ac=0,ad=this.label_tracks.length;ac<ad;ac++){this.label_tracks[ac].draw()}}},zoom_in:function(ab,ac){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ad=this.high-this.low,ae=ad/2+this.low,aa=(ad/this.zoom_factor)/2;if(ab){ae=ab/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ae-aa);this.high=Math.round(ae+aa);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var ab=this.high-this.low,ac=ab/2+this.low,aa=(ab*this.zoom_factor)/2;this.low=Math.round(ac-aa);this.high=Math.round(ac+aa);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},set_overview:function(aa){$.when(aa.get_overview_tile()).then(function(ab){view.overview_viewport.find(".track-tile").remove();view.overview_close.show();view.overview_viewport.append(ab.canvas);view.overview_highlight.show().height(ab.canvas.height());view.overview_viewport.height(ab.canvas.height()+view.overview_box.height());view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=aa;view.has_changes=true;aa.set_is_overview(true)})},reset_overview:function(){this.overview_viewport.find(".track-tile").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide();view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=null}});var o=function(ac,ag){this.track=ac;this.name=ag.name;this.params=[];var an=ag.params;for(var ad=0;ad<an.length;ad++){var ai=an[ad],ab=ai.name,am=ai.label,ae=unescape(ai.html),ao=ai.value,ak=ai.type;if(ak==="number"){this.params[this.params.length]=new g(ab,am,ae,ao,ai.min,ai.max)}else{if(ak=="select"){this.params[this.params.length]=new K(ab,am,ae,ao)}else{console.log("WARNING: unrecognized tool parameter type:",ab,ak)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(aq){aq.stopPropagation()}).click(function(aq){aq.stopPropagation()}).bind("dblclick",function(aq){aq.stopPropagation()});var al=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var aj=this.params;var ah=this;$.each(this.params,function(ar,av){var au=$("<div>").addClass("param-row").appendTo(ah.parent_div);var aq=$("<div>").addClass("param-label").text(av.label).appendTo(au);var at=$("<div/>").addClass("slider").html(av.html).appendTo(au);at.find(":input").val(av.value);$("<div style='clear: both;'/>").appendTo(au)});this.parent_div.find("input").click(function(){$(this).select()});var ap=$("<div>").addClass("param-row").appendTo(this.parent_div);var af=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ap);var aa=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ap);var ah=this;aa.click(function(){ah.run_on_region()});af.click(function(){ah.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var aa={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();aa[ab]=JSON.stringify(ac)});return aa},get_param_values:function(){var ab=[];var aa={};this.parent_div.find(":input").each(function(){var ac=$(this).attr("name"),ad=$(this).val();if(ac){ab[ab.length]=ad}});return ab},run_on_dataset:function(){var aa=this;aa.run({dataset_id:this.track.original_dataset_id,tool_id:aa.name},null,function(ab){show_modal(aa.name+" is Running",aa.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var aa={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ac=this.track,ab=aa.tool_id+ac.tool_region_and_parameters_str(aa.chrom,aa.low,aa.high),ad;if(ac instanceof e){ad=new Q(ab,view,ac.hda_ldda,undefined,{},{},ac);ad.change_mode(ac.mode)}this.track.add_track(ad);ad.content_div.text("Starting job.");this.run(aa,ad,function(ae){ad.dataset_id=ae.dataset_id;ad.content_div.text("Running job.");ad.init()})},run:function(ab,ac,ad){$.extend(ab,this.get_param_values_dict());var aa=function(){$.getJSON(rerun_tool_url,ab,function(ae){if(ae==="no converter"){ac.container_div.addClass("error");ac.content_div.text(G)}else{if(ae.error){ac.container_div.addClass("error");ac.content_div.text(v+ae.message)}else{if(ae==="pending"){ac.container_div.addClass("pending");ac.content_div.text("Converting input data so that it can be used quickly with tool.");setTimeout(aa,2000)}else{ad(ae)}}}})};aa()}});var K=function(ab,aa,ac,ad){this.name=ab;this.label=aa;this.html=ac;this.value=ad};var g=function(ac,ab,ae,af,ad,aa){K.call(this,ac,ab,ae,af);this.min=ad;this.max=aa};var h=function(ab,aa,ac,ad){this.name=ab;this.index=aa;this.tool_id=ac;this.tool_exp_name=ad};var R=function(ab,aa,ac,ad){h.call(this,ab,aa,ac,ad);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.container=null;this.slider=null;this.slider_label=null};n(R.prototype,{applies_to:function(aa){if(aa.length>this.index){return true}return false},keep:function(aa){if(!this.applies_to(aa)){return true}var ab=parseInt(aa[this.index]);return(isNaN(ab)||(ab>=this.low&&ab<=this.high))},update_attrs:function(ab){var aa=false;if(!this.applies_to(ab)){return aa}if(ab[this.index]<this.min){this.min=Math.floor(ab[this.index]);aa=true}if(ab[this.index]>this.max){this.max=Math.ceil(ab[this.index]);aa=true}return aa},update_ui_elt:function(){if(this.min!=this.max){this.container.show()}else{this.container.hide()}var ac=function(af,ad){var ae=ad-af;return(ae<=2?0.01:1)};var ab=this.slider.slider("option","min"),aa=this.slider.slider("option","max");if(this.min<ab||this.max>aa){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ac(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var W=function(ac,al){this.track=ac;this.filters=[];for(var ag=0;ag<al.length;ag++){var aa=al[ag],ab=aa.name,ak=aa.type,ai=aa.index,an=aa.tool_id,ad=aa.tool_exp_name;if(ak==="int"||ak==="float"){this.filters[ag]=new R(ab,ai,an,ad)}else{console.log("ERROR: unsupported filter: ",ab,ak)}}var aj=function(ao,ap,aq){ao.click(function(){var ar=ap.text();max=parseFloat(aq.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(aq.slider("option","values")){input_size=2*input_size+1;multi_value=true}ap.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",ar).appendTo(ap).focus().select().click(function(at){at.stopPropagation()}).blur(function(){$(this).remove();ap.text(ar)}).keyup(function(ax){if(ax.keyCode===27){$(this).trigger("blur")}else{if(ax.keyCode===13){var av=aq.slider("option","min"),at=aq.slider("option","max"),aw=function(ay){return(isNaN(ay)||ay>at||ay<av)},au=$(this).val();if(!multi_value){au=parseFloat(au);if(aw(au)){alert("Parameter value must be in the range ["+av+"-"+at+"]");return $(this)}}else{au=au.split("-");au=[parseFloat(au[0]),parseFloat(au[1])];if(aw(au[0])||aw(au[1])){alert("Parameter value must be in the range ["+av+"-"+at+"]");return $(this)}}aq.slider((multi_value?"values":"value"),au)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(ao){ao.stopPropagation()}).click(function(ao){ao.stopPropagation()}).bind("dblclick",function(ao){ao.stopPropagation()}).bind("keydown",function(ao){ao.stopPropagation()});var ae=this;$.each(this.filters,function(ar,au){au.container=$("<div/>").addClass("slider-row").appendTo(ae.parent_div);var at=$("<div/>").addClass("slider-label").appendTo(au.container);var aq=$("<span/>").addClass("slider-name").text(au.name+" ").appendTo(at);var ap=$("<span/>");var aw=$("<span/>").addClass("slider-value").appendTo(at).append("[").append(ap).append("]");var ao=$("<div/>").addClass("slider").appendTo(au.container);au.control_element=$("<div/>").attr("id",au.name+"-filter-control").appendTo(ao);var av=[0,0];au.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(ax,ay){av=ay.values;ap.text(ay.values[0]+"-"+ay.values[1]);setTimeout(function(){if(ay.values[0]==av[0]&&ay.values[1]==av[1]){var az=ay.values;ap.text(az[0]+"-"+az[1]);au.low=az[0];au.high=az[1];ae.track.draw(true,true)}},50)},change:function(ax,ay){au.control_element.slider("option","slide").call(au.control_element,ax,ay)}});au.slider=au.control_element;au.slider_label=ap;aj(aw,ap,au.control_element);$("<div style='clear: both;'/>").appendTo(au.container)});if(this.filters.length!=0){var am=$("<div>").addClass("param-row").appendTo(this.parent_div);var ah=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(am);var af=this;ah.click(function(){af.run_on_dataset()})}};n(W.prototype,{reset_filters:function(){for(var aa=0;aa<this.filters.length;aa++){filter=this.filters[aa];filter.slider.slider("option","values",[filter.min,filter.max])}},run_on_dataset:function(){var ai=function(am,ak,al){if(!(ak in am)){am[ak]=al}return am[ak]};var ac={},aa,ab,ad;for(var ae=0;ae<this.filters.length;ae++){aa=this.filters[ae];if(aa.tool_id){if(aa.min!=aa.low){ab=ai(ac,aa.tool_id,[]);ab[ab.length]=aa.tool_exp_name+" >= "+aa.low}if(aa.max!=aa.high){ab=ai(ac,aa.tool_id,[]);ab[ab.length]=aa.tool_exp_name+" <= "+aa.high}}}var ag=[];for(var aj in ac){ag[ag.length]=[aj,ac[aj]]}var ah=ag.length;(function af(aq,an){var al=an[0],am=al[0],ap=al[1],ao="("+ap.join(") and (")+")",ak={cond:ao,input:aq,target_dataset_id:aq,tool_id:am},an=an.slice(1);$.getJSON(run_tool_url,ak,function(ar){if(ar.error){show_modal("Filter Dataset","Error running tool "+am,{Close:hide_modal})}else{if(an.length===0){show_modal("Filtering Dataset","Filter(s) are running on the complete dataset. Outputs are in dataset's history.",{Close:hide_modal})}else{af(ar.dataset_id,an)}}})})(this.track.dataset_id,ag)}});var V=function(aa){this.track=aa.track;this.params=aa.params;this.values={};if(aa.saved_values){this.restore_values(aa.saved_values)}this.onchange=aa.onchange};n(V.prototype,{restore_values:function(aa){var ab=this;$.each(this.params,function(ac,ad){if(aa[ad.key]!==undefined){ab.values[ad.key]=aa[ad.key]}else{ab.values[ad.key]=ad.default_value}})},build_form:function(){var ab=this;var aa=$("<div />");$.each(this.params,function(af,ad){if(!ad.hidden){var ac="param_"+af;var ak=$("<div class='form-row' />").appendTo(aa);ak.append($("<label />").attr("for",ac).text(ad.label+":"));if(ad.type==="bool"){ak.append($('<input type="checkbox" />').attr("id",ac).attr("name",ac).attr("checked",ab.values[ad.key]))}else{if(ad.type==="color"){var ah=ab.values[ad.key];var ag=$("<input />").attr("id",ac).attr("name",ac).val(ah);var ai=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ae=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ai);var aj=$("<div/>").appendTo(ae).farbtastic({width:100,height:100,callback:ag,color:ah});$("<div />").append(ag).append(ai).appendTo(ak).bind("click",function(al){ai.css({left:$(this).position().left+($(ag).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ai.hide();$(document).unbind("click.color-picker")});al.stopPropagation()})}else{ak.append($("<input />").attr("id",ac).attr("name",ac).val(ab.values[ad.key]))}}}});return aa},update_from_form:function(aa){var ac=this;var ab=false;$.each(this.params,function(ad,af){if(!af.hidden){var ag="param_"+ad;var ae=aa.find("#"+ag).val();if(af.type==="float"){ae=parseFloat(ae)}else{if(af.type==="int"){ae=parseInt(ae)}else{if(af.type==="bool"){ae=aa.find("#"+ag).is(":checked")}}}if(ae!==ac.values[af.key]){ac.values[af.key]=ae;ab=true}}});if(ab){this.onchange()}}});var b=function(ac,ab,aa,ad){this.index=ac;this.low=ac*M*ab;this.high=(ac+1)*M*ab;this.resolution=ab;this.canvas=$("<div class='track-tile'/>").append(aa);this.data=ad;this.stale=false};var l=function(ac,ab,aa,ad,ae){b.call(this,ac,ab,aa,ad);this.max_val=ae};var L=function(ac,ab,aa,ae,ad){b.call(this,ac,ab,aa,ae);this.message=ad};var j=function(ab,aa,ae,ac,ad){this.name=ab;this.view=aa;this.parent_element=ae;this.data_url=(ac?ac:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ad?ad:H);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{get_type:function(){if(this instanceof X){return"LabelTrack"}else{if(this instanceof x){return"ReferenceTrack"}else{if(this instanceof k){return"LineTrack"}else{if(this instanceof S){return"ReadTrack"}else{if(this instanceof Q){return"ToolDataFeatureTrack"}else{if(this instanceof P){return"VcfTrack"}else{if(this instanceof e){return"FeatureTrack"}}}}}}}return""},init:function(){var aa=this;aa.enabled=false;aa.tile_cache.clear();aa.data_manager.clear();aa.initial_canvas=undefined;aa.content_div.css("height","auto");aa.container_div.removeClass("nodata error pending");if(!aa.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:aa.hda_ldda,dataset_id:aa.dataset_id,chrom:aa.view.chrom},function(ab){if(!ab||ab==="error"||ab.kind==="error"){aa.container_div.addClass("error");aa.content_div.text(m);if(ab.message){var ad=aa.view.tracks.indexOf(aa);var ac=$(" <a href='javascript:void(0);'></a>").text("View error").click(function(){show_modal("Trackster Error","<pre>"+ab.message+"</pre>",{Close:hide_modal})});aa.content_div.append(ac)}}else{if(ab==="no converter"){aa.container_div.addClass("error");aa.content_div.text(G)}else{if(ab==="no data"||(ab.data!==undefined&&(ab.data===null||ab.data.length===0))){aa.container_div.addClass("nodata");aa.content_div.text(B)}else{if(ab==="pending"){aa.container_div.addClass("pending");aa.content_div.text(q);setTimeout(function(){aa.init()},aa.data_query_wait)}else{if(ab.status==="data"){if(ab.valid_chroms){aa.valid_chroms=ab.valid_chroms;aa.make_name_popup_menu()}aa.content_div.text(U);if(aa.view.chrom){aa.content_div.text("");aa.content_div.css("height",aa.height_px+"px");aa.enabled=true;$.when(aa.predraw_init()).done(function(){aa.container_div.removeClass("nodata error pending");aa.draw()})}}}}}}})},predraw_init:function(){},update_name:function(aa){this.old_name=this.name;this.name=aa;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var J=function(ah,af,ai){var ab=this,aj=ab.view;this.filters_manager=(ah!==undefined?new W(this,ah):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(af!==undefined&&obj_length(af)>0?new o(this,af):undefined);this.is_overview=false;this.parent_track=ai;this.child_tracks=[];if(ab.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}ab.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();ab.container_div.append(ab.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(ab.display_modes!==undefined){if(ab.mode_div===undefined){ab.mode_div=$("<div class='right-float menubutton popup' />").appendTo(ab.header_div);var ac=(ab.track_config&&ab.track_config.values.mode?ab.track_config.values.mode:ab.display_modes[0]);ab.mode=ac;ab.mode_div.text(ac);var aa={};for(var ad=0,ag=ab.display_modes.length;ad<ag;ad++){var ae=ab.display_modes[ad];aa[ae]=function(ak){return function(){ab.change_mode(ak)}}(ae)}make_popupmenu(ab.mode_div,aa)}else{ab.mode_div.hide()}}this.make_name_popup_menu()};n(J.prototype,j.prototype,{change_mode:function(ab){var aa=this;aa.mode_div.text(ab);aa.mode=ab;aa.track_config.values.mode=ab;aa.tile_cache.clear();aa.draw()},make_name_popup_menu:function(){var ab=this;var aa={};aa[(this.is_overview?"Hide overview":"Set as overview")]=function(){if(ab.is_overview){ab.view.reset_overview()}else{ab.view.set_overview(ab)}};aa["Edit configuration"]=function(){var ah=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(){ab.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ag=function(ai){if((ai.keyCode||ai.which)===27){ah()}else{if((ai.keyCode||ai.which)===13){af()}}};$(window).bind("keypress.check_enter_esc",ag);show_modal("Configure Track",ab.track_config.build_form(),{Cancel:ah,OK:af})};if(ab.filters_available>0){var ae=(ab.filters_div.is(":visible")?"Hide filters":"Show filters");aa[ae]=function(){ab.filters_visible=(ab.filters_div.is(":visible"));if(ab.filters_visible){ab.filters_manager.reset_filters()}ab.filters_div.toggle();ab.make_name_popup_menu()}}if(ab.tool){var ae=(ab.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");aa[ae]=function(){if(!ab.dynamic_tool_div.is(":visible")){ab.update_name(ab.name+ab.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";ab.revert_name()}ab.dynamic_tool_div.toggle();ab.make_name_popup_menu()}}if(ab.valid_chroms){aa["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+ab.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ac=view;var ad=function(){$("#no-tracks").show()};if(this.parent_track){ac=this.parent_track;ad=function(){}}aa.Remove=function(){ac.remove_track(ab);if(ac.num_tracks===0){ad()}};make_popupmenu(ab.name_div,aa)},set_is_overview:function(aa){this.is_overview=aa;this.make_name_popup_menu()},get_overview_tile:function(){var aa=this;view=aa.view,resolution=Math.pow(z,Math.ceil(Math.log((view.max_high-view.max_low)/M)/Math.log(z))),view_width=view.container.width(),w_scale=view_width/(view.max_high-view.max_low),overview_tile=$.Deferred();$.when(aa.data_manager.get_data(view.max_low,view.max_high,"Auto",resolution,aa.data_url_extra_params)).then(function(ab){var ad=aa._gen_tile_cache_key(view_width,w_scale,0),af=aa.tile_cache.get(ad);if(af){var ai=$(af.canvas.find("canvas")),ae=ai.clone(),ah=ai.get(0).getContext("2d"),ac=ae.get(0).getContext("2d"),ag=ah.getImageData(0,0,ah.canvas.width,ah.canvas.height);ac.putImageData(ag,-aa.left_offset,(af.data.dataset_type==="summary_tree"?O:0));af=new b(-1,resolution,ae)}else{af=aa.draw_tile(ab,resolution,null,w_scale,null,true);aa.tile_cache.set(ad,af)}overview_tile.resolve(af)});return overview_tile},_gen_tile_cache_key:function(ab,ac,aa){return ab+"_"+ac+"_"+aa},draw:function(aa,ac){if(!this.dataset_id){return}var at=this.view.low,ag=this.view.high,ai=ag-at,ak=this.view.container.width(),ae=ak/ai,al=this.view.resolution,ad=$("<div style='position: relative;'></div>");if(!ac){this.content_div.children().remove()}this.content_div.append(ad);this.max_height=0;var an=Math.floor(at/al/M);var af=[];var ao=0;while((an*M*al)<ag){var ar=this._gen_tile_cache_key(ak,ae,an);var ah=this.tile_cache.get(ar);var ap=an*M*this.view.resolution;var ab=ap+M*this.view.resolution;if(!aa&&ah){af.push(ah);this.show_tile(ah,ad,ae)}else{this.delayed_draw(aa,ar,an,al,ad,ae,af)}an+=1;ao++}var aj=this;var aq=setInterval(function(){if(af.length===ao){clearInterval(aq);aj.postdraw_actions(af,ac)}},50);for(var am=0;am<this.child_tracks.length;am++){this.child_tracks[am].draw(aa,ac)}},postdraw_actions:function(ae,aa){var ac=this;var ad=false;for(var ab=0;ab<ae.length;ab++){if(ae[ab].message){ad=true;break}}if(ad){for(var ab=0;ab<ae.length;ab++){tile=ae[ab];if(!tile.message){tile.canvas.css("padding-top",A)}}}},delayed_draw:function(ab,ai,ac,ae,aj,am,ak,af){var ad=this,ag=ac*M*ae,al=ag+M*ae;var ah=function(av,an,ap,ao,at,au,aq){var ar=ad.draw_tile(an,ap,ao,au,aq);ad.tile_cache.set(ai,ar);if(ar===undefined){return}ad.show_tile(ar,at,au);ak.push(ar)};var aa=setTimeout(function(){if(ag<=ad.view.high&&al>=ad.view.low){var an=(ab?undefined:ad.tile_cache.get(ai));if(an){ad.show_tile(an,aj,am);ak.push(an)}else{$.when(ad.data_manager.get_data(ag,al,ad.mode,ae,ad.data_url_extra_params)).then(function(ao){n(ao,af);if(view.reference_track&&am>view.canvas_manager.char_width_px){$.when(view.reference_track.data_manager.get_data(ag,al,ad.mode,ae,view.reference_track.data_url_extra_params)).then(function(ap){ah(aa,ao,ae,ac,aj,am,ap)})}else{ah(aa,ao,ae,ac,aj,am)}})}}},50)},show_tile:function(ah,aj,ak){var ac=this,ab=ah.canvas,ag=ab;if(ah.message){var al=$("<div/>"),ai=$("<div/>").addClass("tile-message").text(ah.message).css({height:A-1,width:ah.canvas.width}).appendTo(al),ae=$("<a href='javascript:void(0);'/>").addClass("icon more-down").appendTo(ai),aa=$("<a href='javascript:void(0);'/>").addClass("icon more-across").appendTo(ai);al.append(ab);ag=al;ae.click(function(){ah.stale=true;ac.data_manager.get_more_data(ah.low,ah.high,ac.mode,ah.resolution,{},ac.data_manager.DEEP_DATA_REQ);ac.draw()}).dblclick(function(am){am.stopPropagation()});aa.click(function(){ah.stale=true;ac.data_manager.get_more_data(ah.low,ah.high,ac.mode,ah.resolution,{},ac.data_manager.BROAD_DATA_REQ);ac.draw()}).dblclick(function(am){am.stopPropagation()})}var af=this.view.high-this.view.low,ad=(ah.low-this.view.low)*ak;if(this.left_offset){ad-=this.left_offset}ag.css({position:"absolute",top:0,left:ad,height:""});aj.append(ag);ac.max_height=Math.max(ac.max_height,ag.height());ac.content_div.css("height",ac.max_height+"px");aj.children().css("height",ac.max_height+"px")},tool_region_and_parameters_str:function(ac,aa,ad){var ab=this,ae=(ac!==undefined&&aa!==undefined&&ad!==undefined?ac+":"+aa+"-"+ad:"all");return" - region=["+ae+"], parameters=["+ab.tool.get_param_values().join(", ")+"]"},add_track:function(aa){aa.track_id=this.track_id+"_"+this.child_tracks.length;aa.container_div.attr("id","track_"+aa.track_id);this.child_tracks_container.append(aa.container_div);C(aa.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(aa);this.view.has_changes=true},remove_track:function(aa){aa.container_div.fadeOut("slow",function(){$(this).remove()})}});var X=function(aa,ab){this.hidden=true;j.call(this,null,aa,ab);this.container_div.addClass("label-track")};n(X.prototype,j.prototype,{draw:function(){var ac=this.view,ad=ac.high-ac.low,ag=Math.floor(Math.pow(10,Math.floor(Math.log(ad)/Math.log(10)))),aa=Math.floor(ac.low/ag)*ag,ae=this.view.container.width(),ab=$("<div style='position: relative; height: 1.3em;'></div>");while(aa<ac.high){var af=(aa-ac.low)/ad*ae;ab.append($("<div class='label'>"+commatize(aa)+"</div>").css({position:"absolute",left:af-1}));aa+=ag}this.content_div.children(":first").remove();this.content_div.append(ab)}});var x=function(aa){this.hidden=true;j.call(this,null,aa,aa.top_labeltrack);J.call(this);aa.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:aa.dbkey};this.data_manager=new E(y,this,false);this.tile_cache=new c(r)};n(x.prototype,J.prototype,{draw_tile:function(ai,af,ab,ak){var ae=this,ac=M*af;if(ak>this.view.canvas_manager.char_width_px){if(ai===null){ae.content_div.css("height","0px");return}var ad=this.view.canvas_manager.new_canvas();var aj=ad.getContext("2d");ad.width=Math.ceil(ac*ak+ae.left_offset);ad.height=ae.height_px;aj.font=aj.canvas.manager.default_font;aj.textAlign="center";for(var ag=0,ah=ai.length;ag<ah;ag++){var aa=Math.round(ag*ak);aj.fillText(ai[ag],aa+ae.left_offset,10)}return new b(ab,af,ad,ai)}this.content_div.css("height","0px")}});var k=function(ae,ac,af,aa,ad){var ab=this;this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ae,ac,ac.viewport_container);J.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=af;this.dataset_id=aa;this.original_dataset_id=aa;this.data_manager=new N(y,this);this.tile_cache=new c(r);this.track_config=new V({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ad,onchange:function(){ab.vertical_range=ab.prefs.max_value-ab.prefs.min_value;$("#linetrack_"+ab.track_id+"_minval").text(ab.prefs.min_value);$("#linetrack_"+ab.track_id+"_maxval").text(ab.prefs.max_value);ab.tile_cache.clear();ab.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,J.prototype,{add_resize_handle:function(){var aa=this;var ad=false;var ac=false;var ab=$("<div class='track-resize'>");$(aa.container_div).hover(function(){ad=true;ab.show()},function(){ad=false;if(!ac){ab.hide()}});ab.hide().bind("dragstart",function(ae,af){ac=true;af.original_height=$(aa.content_div).height()}).bind("drag",function(af,ag){var ae=Math.min(Math.max(ag.original_height+ag.deltaY,aa.min_height_px),aa.max_height_px);$(aa.content_div).css("height",ae);aa.height_px=ae;aa.draw(true)}).bind("dragend",function(ae,af){aa.tile_cache.clear();ac=false;if(!ad){ab.hide()}aa.track_config.values.height=aa.height_px}).appendTo(aa.container_div)},predraw_init:function(){var aa=this,ab=aa.view.tracks.indexOf(aa);aa.vertical_range=undefined;return $.getJSON(aa.data_url,{stats:true,chrom:aa.view.chrom,low:null,high:null,hda_ldda:aa.hda_ldda,dataset_id:aa.dataset_id},function(ac){aa.container_div.addClass("line-track");var ae=ac.data;if(isNaN(parseFloat(aa.prefs.min_value))||isNaN(parseFloat(aa.prefs.max_value))){aa.prefs.min_value=ae.min;aa.prefs.max_value=ae.max;$("#track_"+ab+"_minval").val(aa.prefs.min_value);$("#track_"+ab+"_maxval").val(aa.prefs.max_value)}aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;aa.total_frequency=ae.total_frequency;aa.container_div.find(".yaxislabel").remove();var af=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ab+"_minval").text(u(aa.prefs.min_value));var ad=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ab+"_maxval").text(u(aa.prefs.max_value));ad.css({position:"absolute",top:"24px",left:"10px"});ad.prependTo(aa.container_div);af.css({position:"absolute",bottom:"2px",left:"10px"});af.prependTo(aa.container_div)})},draw_tile:function(ak,ae,ab,aj){if(this.vertical_range===undefined){return}var af=ab*M*ae,ad=M*ae,aa=Math.ceil(ad*aj),ah=this.height_px;var ac=this.view.canvas_manager.new_canvas();ac.width=aa,ac.height=ah;var ai=ac.getContext("2d");var ag=new I.LinePainter(ak.data,af,af+ad,this.prefs,this.mode);ag.draw(ai,aa,ah);return new b(ab,ae,ac,ak.data)}});var e=function(aa,af,ae,ai,ah,ac,ad,ag){var ab=this;this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new V({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ah,onchange:function(){ab.tile_cache.clear();ab.draw()}});this.prefs=this.track_config.values;j.call(this,aa,af,af.viewport_container);J.call(this,ac,ad,ag);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ae;this.dataset_id=ai;this.original_dataset_id=ai;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_manager=new N(20,this);this.left_offset=200;this.painter=I.LinkedFeaturePainter};n(e.prototype,J.prototype,{postdraw_actions:function(ao,an){J.prototype.postdraw_actions.call(this,ao,an);var ac=this;if(an){var ae=ac.content_div.children();var af=false;for(var ad=ae.length-1,aj=0;ad>=aj;ad--){var ab=$(ae[ad]);if(af){ab.remove()}else{if(ab.children().length!==0){af=true}}}}if(ac.mode=="Histogram"){var ai=-1;for(var ad=0;ad<ao.length;ad++){var am=ao[ad].max_val;if(am>ai){ai=am}}for(var ad=0;ad<ao.length;ad++){if(ao[ad].max_val!==ai){var al=ao[ad];al.canvas.remove();ac.delayed_draw(true,ac._gen_tile_cache_key(width,w_scale,al.index),al.index,al.resolution,parent_element,w_scale,[],{max:ai})}}}if(ac.filters_manager){var aa=ac.filters_manager.filters;for(var ah=0;ah<aa.length;ah++){aa[ah].update_ui_elt()}var ag=false,ak;for(var ad=0;ad<ao.length;ad++){if(ao[ad].data.length){ak=ao[ad].data[0];for(var ah=0;ah<aa.length;ah++){if(aa[ah].applies_to(ak)){ag=true;break}}}}if(ac.filters_available!==ag){ac.filters_available=ag;if(!ac.filters_available){ac.filters_div.hide()}ac.make_name_popup_menu()}}},update_auto_mode:function(aa){if(this.mode=="Auto"){if(aa=="no_detail"){aa="feature spans"}else{if(aa=="summary_tree"){aa="coverage histogram"}}this.mode_div.text("Auto ("+aa+")")}},incremental_slots:function(ae,ab,ad){var ac=this.view.canvas_manager.dummy_context,aa=this.inc_slots[ae];if(!aa||(aa.mode!==ad)){aa=new (p.FeatureSlotter)(ae,ad==="Pack",w,function(af){return ac.measureText(af)});aa.mode=ad;this.inc_slots[ae]=aa}return aa.slot_features(ab)},get_summary_tree_data:function(ae,ah,ac,ap){if(ap>ac-ah){ap=ac-ah}var al=Math.floor((ac-ah)/ap),ao=[],ad=0;var af=0,ag=0,ak,an=0,ai=[],am,aj;var ab=function(at,ar,au,aq){at[0]=ar+au*aq;at[1]=ar+(au+1)*aq};while(an<ap&&af!==ae.length){var aa=false;for(;an<ap&&!aa;an++){ab(ai,ah,an,al);for(ag=af;ag<ae.length;ag++){ak=ae[ag].slice(1,3);if(is_overlap(ak,ai)){aa=true;break}}if(aa){break}}data_start_index=ag;ao[ao.length]=am=[ai[0],0];for(;ag<ae.length;ag++){ak=ae[ag].slice(1,3);if(is_overlap(ak,ai)){am[1]++}else{break}}if(am[1]>ad){ad=am[1]}an++}return{max:ad,delta:al,data:ao}},draw_tile:function(an,aw,aA,aj,ad,ar){var at=this,aC=aA*M*aw,ab=(aA+1)*M*aw,ap=ab-aC,au=Math.ceil(ap*aj),aq=this.mode,aG=25,ae=this.left_offset,ao,af;if(aq==="Auto"){if(an.dataset_type==="summary_tree"){aq=an.dataset_type}else{if(an.extra_info==="no_detail"){aq="no_detail"}else{var aF=an.data;if(this.view.high-this.view.low>F){aq="Squish"}else{aq="Pack"}}}this.update_auto_mode(aq)}if(aq==="summary_tree"||aq==="Histogram"){af=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var aa=$("<div />").addClass("yaxislabel");aa.text(an.max);aa.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});aa.prependTo(this.container_div);var ac=this.view.canvas_manager.new_canvas();ac.width=au+ae;ac.height=af+(!ar?O:0);if(an.dataset_type!="summary_tree"){var ak=this.get_summary_tree_data(an.data,aC,ab,200);if(an.max){ak.max=an.max}an=ak}var aD=new I.SummaryTreePainter(an,aC,ab,this.prefs);var av=ac.getContext("2d");if(!ar){av.translate(ae,O)}aD.draw(av,au,af);return new l(aA,aw,ac,an.data,an.max)}var ao,ah=1;if(aq==="no_detail"||aq==="Squish"||aq==="Pack"){ah=this.incremental_slots(aj,an.data,aq);ao=this.inc_slots[aj].slots}var ai=[];if(an.data){var al=this.filters_manager.filters;for(var ax=0,az=an.data.length;ax<az;ax++){var ag=an.data[ax];var ay=false;var am;for(var aB=0,aE=al.length;aB<aE;aB++){am=al[aB];am.update_attrs(ag);if(!am.keep(ag)){ay=true;break}}if(!ay){ai.push(ag)}}}var aD=new (this.painter)(ai,aC,ab,this.prefs,aq,ad);var af=aD.get_required_height(ah);var ac=this.view.canvas_manager.new_canvas();ac.width=au+ae;ac.height=af;var av=ac.getContext("2d");av.fillStyle=this.prefs.block_color;av.font=av.canvas.manager.default_font;av.textAlign="right";this.container_div.find(".yaxislabel").remove();if(an.data){if(!ar){av.translate(ae,0)}aD.draw(av,au,af,ao)}return new L(aA,aw,ac,an.data,an.message)}});var P=function(ad,ab,af,aa,ac,ae){e.call(this,ad,ab,af,aa,ac,ae);this.painter=I.VariantPainter};n(P.prototype,J.prototype,e.prototype);var S=function(ad,ab,af,aa,ac,ae){e.call(this,ad,ab,af,aa,ac,ae);this.track_config=new V({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ac,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.painter=I.ReadPainter;this.make_name_popup_menu()};n(S.prototype,J.prototype,e.prototype);var Q=function(ae,ac,ag,aa,ad,af,ab){e.call(this,ae,ac,ag,aa,ad,af,{},ab);this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(Q.prototype,J.prototype,e.prototype,{predraw_init:function(){var ab=this;var aa=function(){if(ab.data_manager.size()===0){setTimeout(aa,300)}else{ab.data_url=default_data_url;ab.data_query_wait=H;ab.dataset_state_url=converted_datasets_state_url;$.getJSON(ab.dataset_state_url,{dataset_id:ab.dataset_id,hda_ldda:ab.hda_ldda},function(ac){})}};aa()}});T.View=Y;T.LineTrack=k;T.FeatureTrack=e;T.ReadTrack=S};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(x,B,D,E,z){m.call(this,x,B,D,E,z);if(this.prefs.min_value===undefined){var F=Infinity;for(var y=0,A=this.data.length;y<A;y++){F=Math.min(F,this.data[y][1])}this.prefs.min_value=F}if(this.prefs.max_value===undefined){var C=-Infinity;for(var y=0,A=this.data.length;y<A;y++){C=Math.max(C,this.data[y][1])}this.prefs.max_value=C}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(M,L,J){var E=false,G=this.prefs.min_value,C=this.prefs.max_value,I=C-G,x=J,z=this.view_start,K=this.view_end-this.view_start,A=L/K,H=this.mode,S=this.data;M.save();var T=Math.round(J+G/I*J);if(H!=="Intensity"){M.fillStyle="#aaa";M.fillRect(0,T,L,1)}M.beginPath();var Q,D,B;if(S.length>1){B=Math.ceil((S[1][0]-S[0][0])*A)}else{B=10}for(var N=0,O=S.length;N<O;N++){M.fillStyle=this.prefs.color;Q=Math.round((S[N][0]-z)*A);D=S[N][1];var P=false,F=false;if(D===null){if(E&&H==="Filled"){M.lineTo(Q,x)}E=false;continue}if(D<G){F=true;D=G}else{if(D>C){P=true;D=C}}if(H==="Histogram"){D=Math.round(D/I*x);M.fillRect(Q,T,B,-D)}else{if(H==="Intensity"){D=255-Math.floor((D-G)/I*255);M.fillStyle="rgb("+D+","+D+","+D+")";M.fillRect(Q,0,B,x)}else{D=Math.round(x-(D-G)/I*x);if(E){M.lineTo(Q,D)}else{E=true;if(H==="Filled"){M.moveTo(Q,x);M.lineTo(Q,D)}else{M.moveTo(Q,D)}}}}M.fillStyle=this.prefs.overflow_color;if(P||F){var R;if(H==="Histogram"||H==="Intensity"){R=B}else{Q-=2;R=4}if(P){M.fillRect(Q,0,R,3)}if(F){M.fillRect(Q,x-3,R,3)}}M.fillStyle=this.prefs.color}if(H==="Filled"){if(E){M.lineTo(Q,T);M.lineTo(0,T)}M.fill()}else{M.stroke()}M.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()},draw_element:function(D,z,F,B,A,C,E,y,x){}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
+var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var requestAnimationFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){window.setTimeout(b,1000/60)}})();var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,U){var n=f("class").extend,p=f("slotting"),I=f("painters");var ab=function(ac,ad){this.document=ac;this.default_font=ad!==undefined?ad:"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")};n(ab.prototype,{load_pattern:function(ac,ag){var ad=this.patterns,ae=this.dummy_context,af=new Image();af.src=image_path+ag;af.onload=function(){ad[ac]=ae.createPattern(af,"repeat")}},get_pattern:function(ac){return this.patterns[ac]},new_canvas:function(){var ac=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(ac)}ac.manager=this;return ac}});var C=function(ac,ad){ac.bind("drag",{handle:ad,relative:true},function(ah,ai){var ag=$(this).parent();var af=ag.children();var ae;for(ae=0;ae<af.length;ae++){if(ai.offsetY<$(af.get(ae)).position().top){break}}if(ae===af.length){if(this!==af.get(ae-1)){ag.append(this)}}else{if(this!==af.get(ae)){$(this).insertBefore(af.get(ae))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};U.sortable=C;var aa=16,D=9,A=20,P=D+2,w=100,F=12000,N=200,z=5,s=10,H=5000,t=100,m="There was an error in indexing this dataset. ",G="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",B="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",V="Ready for display",d=10,r=5,y=5;function u(ac){return Math.round(ac*1000)/1000}var c=function(ac){this.num_elements=ac;this.clear()};n(c.prototype,{get:function(ad){var ac=this.key_ary.indexOf(ad);if(ac!==-1){if(this.obj_cache[ad].stale){this.key_ary.splice(ac,1);delete this.obj_cache[ad]}else{this.move_key_to_end(ad,ac)}}return this.obj_cache[ad]},set:function(ad,ae){if(!this.obj_cache[ad]){if(this.key_ary.length>=this.num_elements){var ac=this.key_ary.shift();delete this.obj_cache[ac]}this.key_ary.push(ad)}this.obj_cache[ad]=ae;return ae},move_key_to_end:function(ad,ac){this.key_ary.splice(ac,1);this.key_ary.push(ad)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var O=function(ad,ac,ae){c.call(this,ad);this.track=ac;this.subset=(ae!==undefined?ae:true)};n(O.prototype,c.prototype,{load_data:function(al,ag,aj,ad,ai){var ak=this.track.view.chrom,af={chrom:ak,low:al,high:ag,mode:aj,resolution:ad,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(af,ai);if(this.track.filters_manager){var am=[];var ac=this.track.filters_manager.filters;for(var ah=0;ah<ac.length;ah++){am[am.length]=ac[ah].name}af.filter_cols=JSON.stringify(am)}var ae=this;return $.getJSON(this.track.data_url,af,function(an){ae.set_data(al,ag,aj,an)})},get_data:function(ac,ag,ah,ad,af){var ae=this.get_data_from_cache(ac,ag,ah);if(ae){return ae}ae=this.load_data(ac,ag,ah,ad,af);this.set_data(ac,ag,ah,ae);return ae},DEEP_DATA_REQ:"deep",BROAD_DATA_REQ:"breadth",get_more_data:function(ak,af,aj,ae,ai,ag){var al=this.get_data_from_cache(ak,af,aj);if(!al){console.log("ERROR: no current data for: ",this.track,ak,af,aj,ae,ai);return}al.stale=true;var ad=ak;if(ag===this.DEEP_DATA_REQ){$.extend(ai,{start_val:al.data.length+1})}else{if(ag===this.BROAD_DATA_REQ){ad=al.data[al.data.length-1][2]+1}}var ac=this,ah=this.load_data(ad,af,aj,ae,ai);new_data_available=$.Deferred();this.set_data(ak,af,aj,new_data_available);$.when(ah).then(function(am){if(am.data){am.data=al.data.concat(am.data);if(am.message){am.message=am.message.replace(/[0-9]+/,am.data.length)}}ac.set_data(ak,af,aj,am);new_data_available.resolve(am)});return new_data_available},get_data_from_cache:function(ac,ad,ae){return this.get(this.gen_key(ac,ad,ae))},set_data:function(ad,ae,af,ac){return this.set(this.gen_key(ad,ae,af),ac)},gen_key:function(ac,ae,af){var ad=ac+"_"+ae+"_"+af;return ad},split_key:function(ac){return ac.split("_")}});var E=function(ad,ac,ae){O.call(this,ad,ac,ae)};n(E.prototype,O.prototype,c.prototype,{load_data:function(ae,ac,ag,ah,ad,af){if(ad>1){return}return O.prototype.load_data.call(this,ae,ac,ag,ah,ad,af)}});var Z=function(ac,af,ae,ad,ag){this.container=ac;this.chrom=null;this.vis_id=ae;this.dbkey=ad;this.title=af;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ag);this.canvas_manager=new ab(ac.get(0).ownerDocument);this.reset()};n(Z.prototype,{init:function(ag){var ae=this.container,ac=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ae);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ae);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ae);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").appendTo(this.viewport_container).hide();var af=$("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function(){add_tracks()});this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var ad=function(ah){if(ah.type==="focusout"||(ah.keyCode||ah.which)===13||(ah.keyCode||ah.which)===27){if((ah.keyCode||ah.which)!==27){ac.go_to($(this).val())}$(this).hide();$(this).val("");ac.location_span.show();ac.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",ad).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.click(function(){ac.location_span.hide();ac.chrom_select.hide();ac.nav_input.val(ac.chrom+":"+ac.low+"-"+ac.high);ac.nav_input.css("display","inline-block");ac.nav_input.select();ac.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){ac.zoom_out();ac.request_redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){ac.zoom_in();ac.request_redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ag);this.chrom_select.bind("change",function(){ac.change_chrom(ac.chrom_select.val())});this.content_div.click(function(ah){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ah){ac.zoom_in(ah.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ah,ai){this.current_x=ai.offsetX}).bind("drag",function(ah,aj){var ak=aj.offsetX-this.current_x;this.current_x=aj.offsetX;var ai=Math.round(ak/ac.viewport_container.width()*(ac.max_high-ac.max_low));ac.move_delta(-ai)});this.overview_close.click(function(){ac.reset_overview()});this.viewport_container.bind("draginit",function(ah,ai){if(ah.clientX>ac.viewport_container.width()-16){return false}}).bind("dragstart",function(ah,ai){ai.original_low=ac.low;ai.current_height=ah.clientY;ai.current_x=ai.offsetX}).bind("drag",function(aj,al){var ah=$(this);var am=al.offsetX-al.current_x;var ai=ah.scrollTop()-(aj.clientY-al.current_height);ah.scrollTop(ai);al.current_height=aj.clientY;al.current_x=al.offsetX;var ak=Math.round(am/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}).bind("mousewheel",function(aj,al,ai,ah){if(ai){var ak=Math.round(-ai/ac.viewport_container.width()*(ac.high-ac.low));ac.move_delta(ak)}});this.top_labeltrack.bind("dragstart",function(ah,ai){return $("<div />").css({height:ac.content_div.height()+ac.top_labeltrack.height()+ac.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(al,am){$(am.proxy).css({left:Math.min(al.pageX,am.startX),width:Math.abs(al.pageX-am.startX)});var ai=Math.min(al.pageX,am.startX)-ac.container.offset().left,ah=Math.max(al.pageX,am.startX)-ac.container.offset().left,ak=(ac.high-ac.low),aj=ac.viewport_container.width();ac.update_location(Math.round(ai/aj*ak)+ac.low,Math.round(ah/aj*ak)+ac.low)}).bind("dragend",function(am,an){var ai=Math.min(am.pageX,an.startX),ah=Math.max(am.pageX,an.startX),ak=(ac.high-ac.low),aj=ac.viewport_container.width(),al=ac.low;ac.low=Math.round(ai/aj*ak)+al;ac.high=Math.round(ah/aj*ak)+al;$(an.proxy).remove();ac.request_redraw()});this.add_label_track(new Y(this,this.top_labeltrack));this.add_label_track(new Y(this,this.nav_labeltrack));$(window).bind("resize",function(){ac.resize_window()});$(document).bind("redraw",function(){ac.redraw()});this.reset();$(window).trigger("resize");this.update_intro_div()},update_intro_div:function(){if(this.num_tracks===0){this.intro_div.show()}else{this.intro_div.hide()}},update_location:function(ac,ad){this.location_span.text(commatize(ac)+" - "+commatize(ad));this.nav_input.val(this.chrom+":"+commatize(ac)+"-"+commatize(ad))},load_chroms:function(ad,ae){ad.num=t;$.extend(ad,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var ac=this;$.ajax({url:chrom_url,data:ad,dataType:"json",success:function(ag){if(ag.chrom_info.length===0){alert("Invalid chromosome: "+ad.chrom);return}if(ag.reference){ac.add_label_track(new x(ac))}ac.chrom_data=ag.chrom_info;var aj='<option value="">Select Chrom/Contig</option>';for(var ai=0,af=ac.chrom_data.length;ai<af;ai++){var ah=ac.chrom_data[ai].chrom;aj+='<option value="'+ah+'">'+ah+"</option>"}if(ag.prev_chroms){aj+='<option value="previous">Previous '+t+"</option>"}if(ag.next_chroms){aj+='<option value="next">Next '+t+"</option>"}ac.chrom_select.html(aj);if(ae){ae()}ac.chrom_start_index=ag.start_index},error:function(){alert("Could not load chroms for this dbkey:",ac.dbkey)}})},change_chrom:function(ag,ad,ai){if(!ag||ag==="None"){return}var af=this;if(ag==="previous"){af.load_chroms({low:this.chrom_start_index-t});return}if(ag==="next"){af.load_chroms({low:this.chrom_start_index+t});return}var ah=$.grep(af.chrom_data,function(ak,al){return ak.chrom===ag})[0];if(ah===undefined){af.load_chroms({chrom:ag},function(){af.change_chrom(ag,ad,ai)});return}else{if(ag!==af.chrom){af.chrom=ag;af.chrom_select.val(af.chrom);af.max_high=ah.len-1;af.reset();af.request_redraw(true);for(var aj=0,ac=af.tracks.length;aj<ac;aj++){var ae=af.tracks[aj];if(ae.init){ae.init()}}}if(ad!==undefined&&ai!==undefined){af.low=Math.max(ad,0);af.high=Math.min(ai,af.max_high)}af.reset_overview();af.request_redraw()}},go_to:function(ag){var ak=this,ac,af,ad=ag.split(":"),ai=ad[0],aj=ad[1];if(aj!==undefined){try{var ah=aj.split("-");ac=parseInt(ah[0].replace(/,/g,""),10);af=parseInt(ah[1].replace(/,/g,""),10)}catch(ae){return false}}ak.change_chrom(ai,ac,af)},move_fraction:function(ae){var ac=this;var ad=ac.high-ac.low;this.move_delta(ae*ad)},move_delta:function(ae){var ac=this;var ad=ac.high-ac.low;if(ac.low-ae<ac.max_low){ac.low=ac.max_low;ac.high=ac.max_low+ad}else{if(ac.high-ae>ac.max_high){ac.high=ac.max_high;ac.low=ac.max_high-ad}else{ac.high-=ae;ac.low-=ae}}ac.request_redraw()},add_track:function(ac){ac.view=this;ac.track_id=this.track_id_counter;this.tracks.push(ac);if(ac.init){ac.init()}ac.container_div.attr("id","track_"+ac.track_id);C(ac.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1;this.update_intro_div()},add_label_track:function(ac){ac.view=this;this.label_tracks.push(ac)},remove_track:function(ad){this.has_changes=true;delete this.tracks[this.tracks.indexOf(ad)];this.num_tracks-=1;var ac=this;ad.container_div.fadeOut("slow",function(){$(this).remove();ac.update_intro_div()})},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},request_redraw:function(ad){var ac=this;requestAnimationFrame(function(){ac.redraw(ad)})},redraw:function(aj){var ah=this.low,ad=this.high;if(ah<this.max_low){ah=this.max_low}if(ad>this.max_high){ad=this.max_high}var ai=this.high-this.low;if(this.high!==0&&ai<this.min_separation){ad=ah+this.min_separation}this.low=Math.floor(ah);this.high=Math.ceil(ad);this.resolution=Math.pow(z,Math.ceil(Math.log((this.high-this.low)/N)/Math.log(z)));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var ac=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ag=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ak=13;this.overview_box.css({left:ac,width:Math.max(ak,ag)}).show();if(ag<ak){this.overview_box.css("left",ac-(ak-ag)/2)}if(this.overview_highlight){this.overview_highlight.css({left:ac,width:ag})}this.update_location(this.low,this.high);if(!aj){for(var ae=0,af=this.tracks.length;ae<af;ae++){if(this.tracks[ae]&&this.tracks[ae].enabled){this.tracks[ae].draw()}}for(ae=0,af=this.label_tracks.length;ae<af;ae++){this.label_tracks[ae].draw()}}},zoom_in:function(ad,ae){if(this.max_high===0||this.high-this.low<this.min_separation){return}var af=this.high-this.low,ag=af/2+this.low,ac=(af/this.zoom_factor)/2;if(ad){ag=ad/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ag-ac);this.high=Math.round(ag+ac);this.request_redraw()},zoom_out:function(){if(this.max_high===0){return}var ad=this.high-this.low,ae=ad/2+this.low,ac=(ad*this.zoom_factor)/2;this.low=Math.round(ae-ac);this.high=Math.round(ae+ac);this.request_redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.request_redraw()},set_overview:function(ac){$.when(ac.get_overview_tile()).then(function(ad){view.overview_viewport.find(".track-tile").remove();view.overview_close.show();view.overview_viewport.append(ad.canvas);view.overview_highlight.show().height(ad.canvas.height());view.overview_viewport.height(ad.canvas.height()+view.overview_box.outerHeight());view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=ac;view.has_changes=true;ac.set_is_overview(true)})},reset_overview:function(){this.overview_viewport.find(".track-tile").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide();view.resize_window();if(view.overview_track){view.overview_track.set_is_overview(false)}view.overview_track=null}});var o=function(ae,ai){this.track=ae;this.name=ai.name;this.params=[];var ap=ai.params;for(var af=0;af<ap.length;af++){var ak=ap[af],ad=ak.name,ao=ak.label,ag=unescape(ak.html),aq=ak.value,am=ak.type;if(am==="number"){this.params[this.params.length]=new g(ad,ao,ag,aq,ak.min,ak.max)}else{if(am=="select"){this.params[this.params.length]=new K(ad,ao,ag,aq)}else{console.log("WARNING: unrecognized tool parameter type:",ad,am)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(at){at.stopPropagation()}).click(function(at){at.stopPropagation()}).bind("dblclick",function(at){at.stopPropagation()});var an=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var al=this.params;var aj=this;$.each(this.params,function(au,ax){var aw=$("<div>").addClass("param-row").appendTo(aj.parent_div);var at=$("<div>").addClass("param-label").text(ax.label).appendTo(aw);var av=$("<div/>").addClass("slider").html(ax.html).appendTo(aw);av.find(":input").val(ax.value);$("<div style='clear: both;'/>").appendTo(aw)});this.parent_div.find("input").click(function(){$(this).select()});var ar=$("<div>").addClass("param-row").appendTo(this.parent_div);var ah=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ar);var ac=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ar);var aj=this;ac.click(function(){aj.run_on_region()});ah.click(function(){aj.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var ac={};this.parent_div.find(":input").each(function(){var ad=$(this).attr("name"),ae=$(this).val();ac[ad]=JSON.stringify(ae)});return ac},get_param_values:function(){var ad=[];var ac={};this.parent_div.find(":input").each(function(){var ae=$(this).attr("name"),af=$(this).val();if(ae){ad[ad.length]=af}});return ad},run_on_dataset:function(){var ac=this;ac.run({dataset_id:this.track.original_dataset_id,tool_id:ac.name},null,function(ad){show_modal(ac.name+" is Running",ac.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var ac={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ae=this.track,ad=ac.tool_id+ae.tool_region_and_parameters_str(ac.chrom,ac.low,ac.high),af;if(ae instanceof e){af=new R(ad,view,ae.hda_ldda,undefined,{},{},ae);af.change_mode(ae.mode)}this.track.add_track(af);af.content_div.text("Starting job.");this.run(ac,af,function(ag){af.dataset_id=ag.dataset_id;af.content_div.text("Running job.");af.init()})},run:function(ad,ae,af){$.extend(ad,this.get_param_values_dict());var ac=function(){$.getJSON(rerun_tool_url,ad,function(ag){if(ag==="no converter"){ae.container_div.addClass("error");ae.content_div.text(G)}else{if(ag.error){ae.container_div.addClass("error");ae.content_div.text(v+ag.message)}else{if(ag==="pending"){ae.container_div.addClass("pending");ae.content_div.text("Converting input data so that it can be used quickly with tool.");setTimeout(ac,2000)}else{af(ag)}}}})};ac()}});var K=function(ad,ac,ae,af){this.name=ad;this.label=ac;this.html=ae;this.value=af};var g=function(ae,ad,ag,ah,af,ac){K.call(this,ae,ad,ag,ah);this.min=af;this.max=ac};var h=function(ad,ac,ae,af){this.name=ad;this.index=ac;this.tool_id=ae;this.tool_exp_name=af};var S=function(ad,ac,ae,af){h.call(this,ad,ac,ae,af);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.container=null;this.slider=null;this.slider_label=null};n(S.prototype,{applies_to:function(ac){if(ac.length>this.index){return true}return false},keep:function(ac){if(!this.applies_to(ac)){return true}var ad=parseInt(ac[this.index]);return(isNaN(ad)||(ad>=this.low&&ad<=this.high))},update_attrs:function(ad){var ac=false;if(!this.applies_to(ad)){return ac}if(ad[this.index]<this.min){this.min=Math.floor(ad[this.index]);ac=true}if(ad[this.index]>this.max){this.max=Math.ceil(ad[this.index]);ac=true}return ac},update_ui_elt:function(){if(this.min!=this.max){this.container.show()}else{this.container.hide()}var ae=function(ah,af){var ag=af-ah;return(ag<=2?0.01:1)};var ad=this.slider.slider("option","min"),ac=this.slider.slider("option","max");if(this.min<ad||this.max>ac){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ae(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var X=function(am,at){this.track=am;this.filters=[];for(var an=0;an<at.length;an++){var ao=at[an],au=ao.name,ac=ao.type,af=ao.index,ar=ao.tool_id,aq=ao.tool_exp_name;if(ac==="int"||ac==="float"){this.filters[an]=new S(au,af,ar,aq)}else{console.log("ERROR: unsupported filter: ",au,ac)}}var ag=function(av,aw,ax){av.click(function(){var ay=aw.text();max=parseFloat(ax.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ax.slider("option","values")){input_size=2*input_size+1;multi_value=true}aw.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",ay).appendTo(aw).focus().select().click(function(az){az.stopPropagation()}).blur(function(){$(this).remove();aw.text(ay)}).keyup(function(aD){if(aD.keyCode===27){$(this).trigger("blur")}else{if(aD.keyCode===13){var aB=ax.slider("option","min"),az=ax.slider("option","max"),aC=function(aE){return(isNaN(aE)||aE>az||aE<aB)},aA=$(this).val();if(!multi_value){aA=parseFloat(aA);if(aC(aA)){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}else{aA=aA.split("-");aA=[parseFloat(aA[0]),parseFloat(aA[1])];if(aC(aA[0])||aC(aA[1])){alert("Parameter value must be in the range ["+aB+"-"+az+"]");return $(this)}}ax.slider((multi_value?"values":"value"),aA)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(av){av.stopPropagation()}).click(function(av){av.stopPropagation()}).bind("dblclick",function(av){av.stopPropagation()}).bind("keydown",function(av){av.stopPropagation()});var ap=$("<div/>").addClass("sliders").appendTo(this.parent_div);var ak=this;$.each(this.filters,function(ay,aA){aA.container=$("<div/>").addClass("slider-row").appendTo(ap);var az=$("<div/>").addClass("elt-label").appendTo(aA.container);var ax=$("<span/>").addClass("slider-name").text(aA.name+" ").appendTo(az);var aw=$("<span/>");var aC=$("<span/>").addClass("slider-value").appendTo(az).append("[").append(aw).append("]");var av=$("<div/>").addClass("slider").appendTo(aA.container);aA.control_element=$("<div/>").attr("id",aA.name+"-filter-control").appendTo(av);var aB=[0,0];aA.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(aD,aE){aB=aE.values;aw.text(aE.values[0]+"-"+aE.values[1]);setTimeout(function(){if(aE.values[0]==aB[0]&&aE.values[1]==aB[1]){var aF=aE.values;aw.text(aF[0]+"-"+aF[1]);aA.low=aF[0];aA.high=aF[1];ak.track.draw(true,true)}},50)},change:function(aD,aE){aA.control_element.slider("option","slide").call(aA.control_element,aD,aE)}});aA.slider=aA.control_element;aA.slider_label=aw;ag(aC,aw,aA.control_element);$("<div style='clear: both;'/>").appendTo(aA.container)});if(this.filters.length!==0){var ah=$("<div/>").addClass("param-row").appendTo(ap);var aj=$("<input type='submit'/>").attr("value","Run on complete dataset").appendTo(ah);var ae=this;aj.click(function(){ae.run_on_dataset()})}var al=$("<div/>").addClass("display-controls").appendTo(this.parent_div),ai=$("<span/>").addClass("elt-label").text("Transparency:").appendTo(al),ad=$("<select/>").attr("name","alpha_dropdown").appendTo(al);this.alpha_filter=null;$("<option/>").attr("value",-1).text("== None ==").appendTo(ad);for(var an=0;an<this.filters.length;an++){$("<option/>").attr("value",an).text(this.filters[an].name).appendTo(ad)}ad.change(function(){$(this).children("option:selected").each(function(){var av=parseInt($(this).val());ak.alpha_filter=(av>=0?ak.filters[av]:null);ak.track.draw(true,true)})});$("<div style='clear: both;'/>").appendTo(this.parent_div)};n(X.prototype,{reset_filters:function(){for(var ac=0;ac<this.filters.length;ac++){filter=this.filters[ac];filter.slider.slider("option","values",[filter.min,filter.max])}this.alpha_filter=null},run_on_dataset:function(){var ak=function(ao,am,an){if(!(am in ao)){ao[am]=an}return ao[am]};var ae={},ac,ad,af;for(var ag=0;ag<this.filters.length;ag++){ac=this.filters[ag];if(ac.tool_id){if(ac.min!=ac.low){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" >= "+ac.low}if(ac.max!=ac.high){ad=ak(ae,ac.tool_id,[]);ad[ad.length]=ac.tool_exp_name+" <= "+ac.high}}}var ai=[];for(var al in ae){ai[ai.length]=[al,ae[al]]}var aj=ai.length;(function ah(at,ap){var an=ap[0],ao=an[0],ar=an[1],aq="("+ar.join(") and (")+")",am={cond:aq,input:at,target_dataset_id:at,tool_id:ao},ap=ap.slice(1);$.getJSON(run_tool_url,am,function(au){if(au.error){show_modal("Filter Dataset","Error running tool "+ao,{Close:hide_modal})}else{if(ap.length===0){show_modal("Filtering Dataset","Filter(s) are running on the complete dataset. Outputs are in dataset's history.",{Close:hide_modal})}else{ah(au.dataset_id,ap)}}})})(this.track.dataset_id,ai)}});var L=function(ad,ac){I.AlphaGenerator.call(this,ac);this.filter=ad};L.prototype.gen_alpha=function(ac){if(this.filter.high===Number.MAX_VALUE||this.filter.low===-Number.MAX_VALUE||this.filter.low===this.filter.high){return this.default_alpha}return((parseFloat(ac[this.filter.index])-this.filter.low)/(this.filter.high-this.filter.low))};var W=function(ac){this.track=ac.track;this.params=ac.params;this.values={};if(ac.saved_values){this.restore_values(ac.saved_values)}this.onchange=ac.onchange};n(W.prototype,{restore_values:function(ac){var ad=this;$.each(this.params,function(ae,af){if(ac[af.key]!==undefined){ad.values[af.key]=ac[af.key]}else{ad.values[af.key]=af.default_value}})},build_form:function(){var ad=this;var ac=$("<div />");$.each(this.params,function(ah,af){if(!af.hidden){var ae="param_"+ah;var am=$("<div class='form-row' />").appendTo(ac);am.append($("<label />").attr("for",ae).text(af.label+":"));if(af.type==="bool"){am.append($('<input type="checkbox" />').attr("id",ae).attr("name",ae).attr("checked",ad.values[af.key]))}else{if(af.type==="color"){var aj=ad.values[af.key];var ai=$("<input />").attr("id",ae).attr("name",ae).val(aj);var ak=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ag=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ak);var al=$("<div/>").appendTo(ag).farbtastic({width:100,height:100,callback:ai,color:aj});$("<div />").append(ai).append(ak).appendTo(am).bind("click",function(an){ak.css({left:$(this).position().left+($(ai).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ak.hide();$(document).unbind("click.color-picker")});an.stopPropagation()})}else{am.append($("<input />").attr("id",ae).attr("name",ae).val(ad.values[af.key]))}}}});return ac},update_from_form:function(ac){var ae=this;var ad=false;$.each(this.params,function(af,ah){if(!ah.hidden){var ai="param_"+af;var ag=ac.find("#"+ai).val();if(ah.type==="float"){ag=parseFloat(ag)}else{if(ah.type==="int"){ag=parseInt(ag)}else{if(ah.type==="bool"){ag=ac.find("#"+ai).is(":checked")}}}if(ag!==ae.values[ah.key]){ae.values[ah.key]=ag;ad=true}}});if(ad){this.onchange()}}});var b=function(ae,ad,ac,af){this.index=ae;this.low=ae*N*ad;this.high=(ae+1)*N*ad;this.resolution=ad;this.canvas=$("<div class='track-tile'/>").append(ac);this.data=af;this.stale=false};var l=function(ae,ad,ac,af,ag){b.call(this,ae,ad,ac,af);this.max_val=ag};var M=function(ae,ad,ac,ag,af){b.call(this,ae,ad,ac,ag);this.message=af};var j=function(ad,ac,ag,ae,af){this.name=ad;this.view=ac;this.parent_element=ag;this.data_url=(ae?ae:default_data_url);this.data_url_extra_params={};this.data_query_wait=(af?af:H);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{get_type:function(){if(this instanceof Y){return"LabelTrack"}else{if(this instanceof x){return"ReferenceTrack"}else{if(this instanceof k){return"LineTrack"}else{if(this instanceof T){return"ReadTrack"}else{if(this instanceof R){return"ToolDataFeatureTrack"}else{if(this instanceof Q){return"VcfTrack"}else{if(this instanceof e){return"FeatureTrack"}}}}}}}return""},init:function(){var ac=this;ac.enabled=false;ac.tile_cache.clear();ac.data_manager.clear();ac.initial_canvas=undefined;ac.content_div.css("height","auto");ac.container_div.removeClass("nodata error pending");if(!ac.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id,chrom:ac.view.chrom},function(ad){if(!ad||ad==="error"||ad.kind==="error"){ac.container_div.addClass("error");ac.content_div.text(m);if(ad.message){var af=ac.view.tracks.indexOf(ac);var ae=$(" <a href='javascript:void(0);'></a>").text("View error").click(function(){show_modal("Trackster Error","<pre>"+ad.message+"</pre>",{Close:hide_modal})});ac.content_div.append(ae)}}else{if(ad==="no converter"){ac.container_div.addClass("error");ac.content_div.text(G)}else{if(ad==="no data"||(ad.data!==undefined&&(ad.data===null||ad.data.length===0))){ac.container_div.addClass("nodata");ac.content_div.text(B)}else{if(ad==="pending"){ac.container_div.addClass("pending");ac.content_div.text(q);setTimeout(function(){ac.init()},ac.data_query_wait)}else{if(ad.status==="data"){if(ad.valid_chroms){ac.valid_chroms=ad.valid_chroms;ac.make_name_popup_menu()}ac.content_div.text(V);if(ac.view.chrom){ac.content_div.text("");ac.content_div.css("height",ac.height_px+"px");ac.enabled=true;$.when(ac.predraw_init()).done(function(){ac.container_div.removeClass("nodata error pending");ac.draw()})}}}}}}})},predraw_init:function(){},update_name:function(ac){this.old_name=this.name;this.name=ac;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var J=function(aj,ah,ak){var ad=this,al=ad.view;this.filters_manager=(aj!==undefined?new X(this,aj):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(ah!==undefined&&obj_length(ah)>0?new o(this,ah):undefined);this.is_overview=false;this.parent_track=ak;this.child_tracks=[];if(ad.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}ad.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();ad.container_div.append(ad.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(ad.display_modes!==undefined){if(ad.mode_div===undefined){ad.mode_div=$("<div class='right-float menubutton popup' />").appendTo(ad.header_div);var ae=(ad.track_config&&ad.track_config.values.mode?ad.track_config.values.mode:ad.display_modes[0]);ad.mode=ae;ad.mode_div.text(ae);var ac={};for(var af=0,ai=ad.display_modes.length;af<ai;af++){var ag=ad.display_modes[af];ac[ag]=function(am){return function(){ad.change_mode(am)}}(ag)}make_popupmenu(ad.mode_div,ac)}else{ad.mode_div.hide()}}this.make_name_popup_menu()};n(J.prototype,j.prototype,{change_mode:function(ad){var ac=this;ac.mode_div.text(ad);ac.mode=ad;ac.track_config.values.mode=ad;ac.tile_cache.clear();ac.draw()},make_name_popup_menu:function(){var ad=this;var ac={};ac[(this.is_overview?"Hide overview":"Set as overview")]=function(){if(ad.is_overview){ad.view.reset_overview()}else{ad.view.set_overview(ad)}};ac["Edit configuration"]=function(){var aj=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ah=function(){ad.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ai=function(ak){if((ak.keyCode||ak.which)===27){aj()}else{if((ak.keyCode||ak.which)===13){ah()}}};$(window).bind("keypress.check_enter_esc",ai);show_modal("Configure Track",ad.track_config.build_form(),{Cancel:aj,OK:ah})};if(ad.filters_available>0){var ag=(ad.filters_div.is(":visible")?"Hide filters":"Show filters");ac[ag]=function(){ad.filters_visible=(ad.filters_div.is(":visible"));if(ad.filters_visible){ad.filters_manager.reset_filters()}ad.filters_div.toggle();ad.make_name_popup_menu()}}if(ad.tool){var ag=(ad.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");ac[ag]=function(){if(!ad.dynamic_tool_div.is(":visible")){ad.update_name(ad.name+ad.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";ad.revert_name()}ad.dynamic_tool_div.toggle();ad.make_name_popup_menu()}}if(ad.valid_chroms){ac["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+ad.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ae=view;var af=function(){$("#no-tracks").show()};if(this.parent_track){ae=this.parent_track;af=function(){}}ac.Remove=function(){ae.remove_track(ad);if(ae.num_tracks===0){af()}};make_popupmenu(ad.name_div,ac)},set_is_overview:function(ac){this.is_overview=ac;this.make_name_popup_menu()},get_overview_tile:function(){var ac=this;view=ac.view,resolution=Math.pow(z,Math.ceil(Math.log((view.max_high-view.max_low)/N)/Math.log(z))),view_width=view.container.width(),w_scale=view_width/(view.max_high-view.max_low),overview_tile=$.Deferred();$.when(ac.data_manager.get_data(view.max_low,view.max_high,"Auto",resolution,ac.data_url_extra_params)).then(function(ad){var af=ac._gen_tile_cache_key(view_width,w_scale,0),ah=ac.tile_cache.get(af);if(!ah){ah=ac.draw_tile(ad,resolution,0,w_scale);ac.tile_cache.set(af,ah)}var ak=$(ah.canvas.find("canvas")),ag=ak.clone(),aj=ak.get(0).getContext("2d"),ae=ag.get(0).getContext("2d"),ai=aj.getImageData(0,0,aj.canvas.width,aj.canvas.height);ae.putImageData(ai,-ac.left_offset,(ah.data.dataset_type==="summary_tree"?P:0));new_tile=new b(-1,resolution,ag);overview_tile.resolve(new_tile)});return overview_tile},_gen_tile_cache_key:function(ad,ae,ac){return ad+"_"+ae+"_"+ac},draw:function(ae,an){if(!this.dataset_id){return}var am=this.view.low,ai=this.view.high,ak=ai-am,af=this.view.container.width(),aq=af/ak,ah=this.view.resolution,ap=$("<div style='position: relative;'></div>");if(!an){this.content_div.children().remove()}this.content_div.append(ap);this.max_height=0;var ad=Math.floor(am/ah/N);var al=true;var ao=[];var ac=0;while((ad*N*ah)<ai){tile=this.draw_helper(ae,af,ad,ah,ap,aq);if(tile){ao.push(tile)}else{al=false}ad+=1;ac++}var ag=this;if(al){ag.postdraw_actions(ao,af,aq,an)}for(var aj=0;aj<this.child_tracks.length;aj++){this.child_tracks[aj].draw(ae,an)}},postdraw_actions:function(ag,ah,ai,ac){var ae=this;var af=false;for(var ad=0;ad<ag.length;ad++){if(ag[ad].message){af=true;break}}if(af){for(var ad=0;ad<ag.length;ad++){tile=ag[ad];if(!tile.message){tile.canvas.css("padding-top",A)}}}},draw_helper:function(ad,ae,af,ai,ao,at,ap,aj){var ag=this,an=this._gen_tile_cache_key(ae,at,af),ak=af*N*ai,ar=ak+N*ai;var al=(ad?undefined:ag.tile_cache.get(an));if(al){ag.show_tile(al,ao,at);return al}var am=function(au){return("isResolved" in au)};var ah=true;var ac=ag.data_manager.get_data(ak,ar,ag.mode,ai,ag.data_url_extra_params);if(am(ac)){ah=false}var aq;if(view.reference_track&&at>view.canvas_manager.char_width_px){aq=view.reference_track.data_manager.get_data(ak,ar,ag.mode,ai,view.reference_track.data_url_extra_params);if(am(aq)){ah=false}}if(ah){n(ac,aj);var al=ag.draw_tile(ac,ai,af,at,aq);ag.tile_cache.set(an,al);if(al!==undefined){ag.show_tile(al,ao,at)}return al}$.when(ac,aq).then(function(){view.request_redraw()});return null},show_tile:function(aj,al,am){var ae=this,ad=aj.canvas,ai=ad;if(aj.message){var an=$("<div/>"),ak=$("<div/>").addClass("tile-message").text(aj.message).css({height:A-1,width:aj.canvas.width}).appendTo(an),ag=$("<a href='javascript:void(0);'/>").addClass("icon more-down").appendTo(ak),ac=$("<a href='javascript:void(0);'/>").addClass("icon more-across").appendTo(ak);an.append(ad);ai=an;ag.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.DEEP_DATA_REQ);ae.draw()}).dblclick(function(ao){ao.stopPropagation()});ac.click(function(){aj.stale=true;ae.data_manager.get_more_data(aj.low,aj.high,ae.mode,aj.resolution,{},ae.data_manager.BROAD_DATA_REQ);ae.draw()}).dblclick(function(ao){ao.stopPropagation()})}var ah=this.view.high-this.view.low,af=(aj.low-this.view.low)*am;if(this.left_offset){af-=this.left_offset}ai.css({position:"absolute",top:0,left:af,height:""});al.append(ai);ae.max_height=Math.max(ae.max_height,ai.height());ae.content_div.css("height",ae.max_height+"px");al.children().css("height",ae.max_height+"px")},tool_region_and_parameters_str:function(ae,ac,af){var ad=this,ag=(ae!==undefined&&ac!==undefined&&af!==undefined?ae+":"+ac+"-"+af:"all");return" - region=["+ag+"], parameters=["+ad.tool.get_param_values().join(", ")+"]"},add_track:function(ac){ac.track_id=this.track_id+"_"+this.child_tracks.length;ac.container_div.attr("id","track_"+ac.track_id);this.child_tracks_container.append(ac.container_div);C(ac.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(ac);this.view.has_changes=true},remove_track:function(ac){ac.container_div.fadeOut("slow",function(){$(this).remove()})}});var Y=function(ac,ad){this.hidden=true;j.call(this,null,ac,ad);this.container_div.addClass("label-track")};n(Y.prototype,j.prototype,{draw:function(){var ae=this.view,af=ae.high-ae.low,ai=Math.floor(Math.pow(10,Math.floor(Math.log(af)/Math.log(10)))),ac=Math.floor(ae.low/ai)*ai,ag=this.view.container.width(),ad=$("<div style='position: relative; height: 1.3em;'></div>");while(ac<ae.high){var ah=(ac-ae.low)/af*ag;ad.append($("<div class='label'>"+commatize(ac)+"</div>").css({position:"absolute",left:ah-1}));ac+=ai}this.content_div.children(":first").remove();this.content_div.append(ad)}});var x=function(ac){this.hidden=true;j.call(this,null,ac,ac.top_labeltrack);J.call(this);ac.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:ac.dbkey};this.data_manager=new E(y,this,false);this.tile_cache=new c(r)};n(x.prototype,J.prototype,{draw_tile:function(ak,ah,ad,am){var ag=this,ae=N*ah;if(am>this.view.canvas_manager.char_width_px){if(ak===null){ag.content_div.css("height","0px");return}var af=this.view.canvas_manager.new_canvas();var al=af.getContext("2d");af.width=Math.ceil(ae*am+ag.left_offset);af.height=ag.height_px;al.font=al.canvas.manager.default_font;al.textAlign="center";for(var ai=0,aj=ak.length;ai<aj;ai++){var ac=Math.round(ai*am);al.fillText(ak[ai],ac+ag.left_offset,10)}return new b(ad,ah,af,ak)}this.content_div.css("height","0px")}});var k=function(ag,ae,ah,ac,af){var ad=this;this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ag,ae,ae.viewport_container);J.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ah;this.dataset_id=ac;this.original_dataset_id=ac;this.data_manager=new O(y,this);this.tile_cache=new c(r);this.track_config=new W({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:af,onchange:function(){ad.vertical_range=ad.prefs.max_value-ad.prefs.min_value;$("#linetrack_"+ad.track_id+"_minval").text(ad.prefs.min_value);$("#linetrack_"+ad.track_id+"_maxval").text(ad.prefs.max_value);ad.tile_cache.clear();ad.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,J.prototype,{add_resize_handle:function(){var ac=this;var af=false;var ae=false;var ad=$("<div class='track-resize'>");$(ac.container_div).hover(function(){af=true;ad.show()},function(){af=false;if(!ae){ad.hide()}});ad.hide().bind("dragstart",function(ag,ah){ae=true;ah.original_height=$(ac.content_div).height()}).bind("drag",function(ah,ai){var ag=Math.min(Math.max(ai.original_height+ai.deltaY,ac.min_height_px),ac.max_height_px);$(ac.content_div).css("height",ag);ac.height_px=ag;ac.draw(true)}).bind("dragend",function(ag,ah){ac.tile_cache.clear();ae=false;if(!af){ad.hide()}ac.track_config.values.height=ac.height_px}).appendTo(ac.container_div)},predraw_init:function(){var ac=this,ad=ac.view.tracks.indexOf(ac);ac.vertical_range=undefined;return $.getJSON(ac.data_url,{stats:true,chrom:ac.view.chrom,low:null,high:null,hda_ldda:ac.hda_ldda,dataset_id:ac.dataset_id},function(ae){ac.container_div.addClass("line-track");var ag=ae.data;if(isNaN(parseFloat(ac.prefs.min_value))||isNaN(parseFloat(ac.prefs.max_value))){ac.prefs.min_value=ag.min;ac.prefs.max_value=ag.max;$("#track_"+ad+"_minval").val(ac.prefs.min_value);$("#track_"+ad+"_maxval").val(ac.prefs.max_value)}ac.vertical_range=ac.prefs.max_value-ac.prefs.min_value;ac.total_frequency=ag.total_frequency;ac.container_div.find(".yaxislabel").remove();var ah=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_minval").text(u(ac.prefs.min_value));var af=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ad+"_maxval").text(u(ac.prefs.max_value));af.css({position:"absolute",top:"24px",left:"10px"});af.prependTo(ac.container_div);ah.css({position:"absolute",bottom:"2px",left:"10px"});ah.prependTo(ac.container_div)})},draw_tile:function(am,ag,ad,al){if(this.vertical_range===undefined){return}var ah=ad*N*ag,af=N*ag,ac=Math.ceil(af*al),aj=this.height_px;var ae=this.view.canvas_manager.new_canvas();ae.width=ac,ae.height=aj;var ak=ae.getContext("2d");var ai=new I.LinePainter(am.data,ah,ah+af,this.prefs,this.mode);ai.draw(ak,ac,aj);return new b(ad,ag,ae,am.data)}});var e=function(ac,ah,ag,ak,aj,ae,af,ai){var ad=this;this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:aj,onchange:function(){ad.tile_cache.clear();ad.draw()}});this.prefs=this.track_config.values;j.call(this,ac,ah,ah.viewport_container);J.call(this,ae,af,ai);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ag;this.dataset_id=ak;this.original_dataset_id=ak;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_manager=new O(20,this);this.left_offset=200;this.painter=I.LinkedFeaturePainter};n(e.prototype,J.prototype,{postdraw_actions:function(ar,ac,at,aq){J.prototype.postdraw_actions.call(this,ar,aq);var af=this;if(aq){var ah=af.content_div.children();var ai=false;for(var ag=ah.length-1,am=0;ag>=am;ag--){var ae=$(ah[ag]);if(ai){ae.remove()}else{if(ae.children().length!==0){ai=true}}}}if(af.mode=="Histogram"){var al=-1;for(var ag=0;ag<ar.length;ag++){var ap=ar[ag].max_val;if(ap>al){al=ap}}for(var ag=0;ag<ar.length;ag++){var ao=ar[ag];if(ao.max_val!==al){ao.canvas.remove();af.draw_helper(true,ac,ao.index,ao.resolution,ao.canvas.parent(),at,[],{max:al})}}}if(af.filters_manager){var ad=af.filters_manager.filters;for(var ak=0;ak<ad.length;ak++){ad[ak].update_ui_elt()}var aj=false,an;for(var ag=0;ag<ar.length;ag++){if(ar[ag].data.length){an=ar[ag].data[0];for(var ak=0;ak<ad.length;ak++){if(ad[ak].applies_to(an)){aj=true;break}}}}if(af.filters_available!==aj){af.filters_available=aj;if(!af.filters_available){af.filters_div.hide()}af.make_name_popup_menu()}}},update_auto_mode:function(ac){if(this.mode=="Auto"){if(ac=="no_detail"){ac="feature spans"}else{if(ac=="summary_tree"){ac="coverage histogram"}}this.mode_div.text("Auto ("+ac+")")}},incremental_slots:function(ag,ad,af){var ae=this.view.canvas_manager.dummy_context,ac=this.inc_slots[ag];if(!ac||(ac.mode!==af)){ac=new (p.FeatureSlotter)(ag,af==="Pack",w,function(ah){return ae.measureText(ah)});ac.mode=af;this.inc_slots[ag]=ac}return ac.slot_features(ad)},get_summary_tree_data:function(ag,aj,ae,ar){if(ar>ae-aj){ar=ae-aj}var an=Math.floor((ae-aj)/ar),aq=[],af=0;var ah=0,ai=0,am,ap=0,ak=[],ao,al;var ad=function(av,au,aw,at){av[0]=au+aw*at;av[1]=au+(aw+1)*at};while(ap<ar&&ah!==ag.length){var ac=false;for(;ap<ar&&!ac;ap++){ad(ak,aj,ap,an);for(ai=ah;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ac=true;break}}if(ac){break}}data_start_index=ai;aq[aq.length]=ao=[ak[0],0];for(;ai<ag.length;ai++){am=ag[ai].slice(1,3);if(is_overlap(am,ak)){ao[1]++}else{break}}if(ao[1]>af){af=ao[1]}ap++}return{max:af,delta:an,data:aq}},draw_tile:function(ap,ay,aC,al,af){var av=this,aE=aC*N*ay,ad=(aC+1)*N*ay,ar=ad-aE,aw=Math.ceil(ar*al),at=this.mode,aI=25,ag=this.left_offset,aq,ah;if(at==="Auto"){if(ap.dataset_type==="summary_tree"){at=ap.dataset_type}else{if(ap.extra_info==="no_detail"){at="no_detail"}else{var aH=ap.data;if(this.view.high-this.view.low>F){at="Squish"}else{at="Pack"}}}this.update_auto_mode(at)}if(at==="summary_tree"||at==="Histogram"){ah=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var ac=$("<div />").addClass("yaxislabel");ac.text(ap.max);ac.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});ac.prependTo(this.container_div);var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah+P;if(ap.dataset_type!="summary_tree"){var am=this.get_summary_tree_data(ap.data,aE,ad,200);if(ap.max){am.max=ap.max}ap=am}var aF=new I.SummaryTreePainter(ap,aE,ad,this.prefs);var ax=ae.getContext("2d");ax.translate(ag,P);aF.draw(ax,aw,ah);return new l(aC,ay,ae,ap.data,ap.max)}var aq,aj=1;if(at==="no_detail"||at==="Squish"||at==="Pack"){aj=this.incremental_slots(al,ap.data,at);aq=this.inc_slots[al].slots}var ak=[];if(ap.data){var an=this.filters_manager.filters;for(var az=0,aB=ap.data.length;az<aB;az++){var ai=ap.data[az];var aA=false;var ao;for(var aD=0,aG=an.length;aD<aG;aD++){ao=an[aD];ao.update_attrs(ai);if(!ao.keep(ai)){aA=true;break}}if(!aA){ak.push(ai)}}}var au=(this.filters_manager.alpha_filter?new L(this.filters_manager.alpha_filter):null);var aF=new (this.painter)(ak,aE,ad,this.prefs,at,au,af);var ah=Math.max(aa,aF.get_required_height(aj));var ae=this.view.canvas_manager.new_canvas();ae.width=aw+ag;ae.height=ah;var ax=ae.getContext("2d");ax.fillStyle=this.prefs.block_color;ax.font=ax.canvas.manager.default_font;ax.textAlign="right";this.container_div.find(".yaxislabel").remove();if(ap.data){ax.translate(ag,0);aF.draw(ax,aw,ah,aq)}return new M(aC,ay,ae,ap.data,ap.message)}});var Q=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.painter=I.VariantPainter};n(Q.prototype,J.prototype,e.prototype);var T=function(af,ad,ah,ac,ae,ag){e.call(this,af,ad,ah,ac,ae,ag);this.track_config=new W({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ae,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.painter=I.ReadPainter;this.make_name_popup_menu()};n(T.prototype,J.prototype,e.prototype);var R=function(ag,ae,ai,ac,af,ah,ad){e.call(this,ag,ae,ai,ac,af,ah,{},ad);this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(R.prototype,J.prototype,e.prototype,{predraw_init:function(){var ad=this;var ac=function(){if(ad.data_manager.size()===0){setTimeout(ac,300)}else{ad.data_url=default_data_url;ad.data_query_wait=H;ad.dataset_state_url=converted_datasets_state_url;$.getJSON(ad.dataset_state_url,{dataset_id:ad.dataset_id,hda_ldda:ad.hda_ldda},function(ae){})}};ac()}});U.View=Z;U.LineTrack=k;U.FeatureTrack=e;U.ReadTrack=T};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(k,x){var u=k("class").extend;var p=function(I,A,G,z,F,D){if(D===undefined){D=4}var C=z-A;var B=F-G;var E=Math.floor(Math.sqrt(C*C+B*B)/D);var J=C/E;var H=B/E;var y;for(y=0;y<E;y++,A+=J,G+=H){if(y%2!==0){continue}I.fillRect(A,G,D,1)}};var q=function(B,A,z,E){var D=A-E/2,C=A+E/2,F=z-Math.sqrt(E*3/2);B.beginPath();B.moveTo(D,F);B.lineTo(C,F);B.lineTo(A,z);B.lineTo(D,F);B.strokeStyle=this.fillStyle;B.fill();B.stroke();B.closePath()};var g=function(y){this.default_alpha=(y?y:1)};g.prototype.gen_alpha=function(y){return this.default_alpha};var n=function(A,C,y,z,B){this.data=A;this.view_start=C;this.view_end=y;this.prefs=u({},this.default_prefs,z);this.mode=B};n.prototype.default_prefs={};var v=function(A,C,y,z,B){n.call(this,A,C,y,z,B)};v.prototype.default_prefs={show_counts:false};v.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(y,C,E,F,A){n.call(this,y,C,E,F,A);if(this.prefs.min_value===undefined){var G=Infinity;for(var z=0,B=this.data.length;z<B;z++){G=Math.min(G,this.data[z][1])}this.prefs.min_value=G}if(this.prefs.max_value===undefined){var D=-Infinity;for(var z=0,B=this.data.length;z<B;z++){D=Math.max(D,this.data[z][1])}this.prefs.max_value=D}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(N,M,K){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,J=D-H,z=K,A=this.view_start,L=this.view_end-this.view_start,B=M/L,I=this.mode,T=this.data;N.save();var U=Math.round(K+H/J*K);if(I!=="Intensity"){N.fillStyle="#aaa";N.fillRect(0,U,M,1)}N.beginPath();var R,E,C;if(T.length>1){C=Math.ceil((T[1][0]-T[0][0])*B)}else{C=10}for(var O=0,P=T.length;O<P;O++){N.fillStyle=this.prefs.color;R=Math.round((T[O][0]-A)*B);E=T[O][1];var Q=false,G=false;if(E===null){if(F&&I==="Filled"){N.lineTo(R,z)}F=false;continue}if(E<H){G=true;E=H}else{if(E>D){Q=true;E=D}}if(I==="Histogram"){E=Math.round(E/J*z);N.fillRect(R,U,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/J*255);N.fillStyle="rgb("+E+","+E+","+E+")";N.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/J*z);if(F){N.lineTo(R,E)}else{F=true;if(I==="Filled"){N.moveTo(R,z);N.lineTo(R,E)}else{N.moveTo(R,E)}}}}N.fillStyle=this.prefs.overflow_color;if(Q||G){var S;if(I==="Histogram"||I==="Intensity"){S=C}else{R-=2;S=4}if(Q){N.fillRect(R,0,S,3)}if(G){N.fillRect(R,z-3,S,3)}}N.fillStyle=this.prefs.color}if(I==="Filled"){if(F){N.lineTo(R,U);N.lineTo(0,U)}N.fill()}else{N.stroke()}N.restore()};var o=function(B,D,y,A,C,z){n.call(this,B,D,y,A,C);this.alpha_generator=(z?z:new g())};o.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};u(o.prototype,{get_required_height:function(z){var y=y_scale=this.get_row_height(),A=this.mode;if(A==="no_detail"||A==="Squish"||A==="Pack"){y=z*y_scale}return y+Math.max(Math.round(y_scale/2),5)},draw:function(K,B,J,G){var E=this.data,H=this.view_start,L=this.view_end;K.save();K.fillStyle=this.prefs.block_color;K.textAlign="right";var O=this.view_end-this.view_start,N=B/O,A=this.get_row_height();for(var D=0,F=E.length;D<F;D++){var M=E[D],C=M[0],y=M[1],z=M[2],I=(G&&G[C]!==undefined?G[C]:null);if((y<L&&z>H)&&(this.mode=="Dense"||I!==null)){this.draw_element(K,this.mode,M,I,H,L,N,A,B)}}K.restore()},draw_element:function(E,A,G,C,B,D,F,z,y){console.log("WARNING: Unimplemented function.")}});var d=10,j=3,m=5,w=10,f=1,s=3,e=3,a=9,l=2,h="#ccc";var r=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(r.prototype,o.prototype,{get_row_height:function(){var z=this.mode,y;if(z==="Dense"){y=d}else{if(z==="no_detail"){y=j}else{if(z==="Squish"){y=m}else{y=w}}}return y},draw_element:function(K,D,S,F,M,ac,ag,ah,y){var P=S[0],ae=S[1],W=S[2],N=S[3],X=Math.floor(Math.max(0,(ae-M)*ag)),L=Math.ceil(Math.min(y,Math.max(0,(W-M)*ag))),V=(D==="Dense"?0:(0+F))*ah,J,aa,O=null,ai=null,B=this.prefs.block_color,Z=this.prefs.label_color;K.globalAlpha=this.alpha_generator.gen_alpha(S);if(D=="Dense"){F=1}if(D==="no_detail"){K.fillStyle=B;K.fillRect(X,V+5,L-X,f)}else{var I=S[4],U=S[5],Y=S[6],C=S[7];if(U&&Y){O=Math.floor(Math.max(0,(U-M)*ag));ai=Math.ceil(Math.min(y,Math.max(0,(Y-M)*ag)))}var af,Q;if(D==="Squish"||D==="Dense"){af=1;Q=e}else{af=5;Q=a}if(!C){if(S.strand){if(S.strand==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(S.strand==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}}else{K.fillStyle=B}K.fillRect(X,V,L-X,Q)}else{var H,R;if(D==="Squish"||D==="Dense"){K.fillStyle=h;H=V+Math.floor(e/2)+1;R=1}else{if(I){var H=V;var R=Q;if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand")}}}else{K.fillStyle=h;H+=(e/2)+1;R=1}}K.fillRect(X,H,L-X,R);for(var ad=0,A=C.length;ad<A;ad++){var E=C[ad],z=Math.floor(Math.max(0,(E[0]-M)*ag)),T=Math.ceil(Math.min(y,Math.max((E[1]-M)*ag)));if(z>T){continue}K.fillStyle=B;K.fillRect(z,V+(Q-af)/2+1,T-z,af);if(O!==undefined&&Y>U&&!(z>ai||T<O)){var ab=Math.max(z,O),G=Math.min(T,ai);K.fillRect(ab,V+1,G-ab,Q);if(C.length==1&&D=="Pack"){if(I==="+"){K.fillStyle=K.canvas.manager.get_pattern("right_strand_inv")}else{if(I==="-"){K.fillStyle=K.canvas.manager.get_pattern("left_strand_inv")}}if(ab+14<G){ab+=2;G-=2}K.fillRect(ab,V+1,G-ab,Q)}}}}if(D==="Pack"&&ae>M){K.fillStyle=Z;if(M===0&&X-K.measureText(N).width<0){K.textAlign="left";K.fillText(N,L+l,V+8)}else{K.textAlign="right";K.fillText(N,X-l,V+8)}}}K.globalAlpha=1}});var b=function(B,D,y,A,C,z){o.call(this,B,D,y,A,C,z)};u(b.prototype,o.prototype,{draw_element:function(R,M,G,C,U,A,J,S,P){var G=data[i],I=G[0],Q=G[1],B=G[2],L=G[3],E=Math.floor(Math.max(0,(Q-U)*J)),H=Math.ceil(Math.min(P,Math.max(0,(B-U)*J))),D=(M==="Dense"?0:(0+C))*S,y,V,z=null,K=null;if(no_label){R.fillStyle=block_color;R.fillRect(E+left_offset,D+5,H-E,1)}else{var T=G[4],O=G[5],F=G[6];y=9;V=1;R.fillRect(E+left_offset,D,H-E,y);if(M!=="Dense"&&L!==undefined&&Q>U){R.fillStyle=label_color;if(U===0&&E-R.measureText(L).width<0){R.textAlign="left";R.fillText(L,H+2+left_offset,D+8)}else{R.textAlign="right";R.fillText(L,E-2+left_offset,D+8)}R.fillStyle=block_color}var N=T+" / "+O;if(Q>U&&R.measureText(N).width<(H-E)){R.fillStyle="white";R.textAlign="center";R.fillText(N,left_offset+E+(H-E)/2,D+8);R.fillStyle=block_color}}}});var t=function(C,E,y,B,D,z,A){o.call(this,C,E,y,B,D,z);this.ref_seq=A};t.prototype.default_prefs=u({},o.prototype.default_prefs,{show_insertions:false});u(t.prototype,o.prototype,{get_row_height:function(){var y,z=this.mode;if(z==="Dense"){y=d}else{if(z==="Squish"){y=m}else{y=w;if(this.prefs.show_insertions){y*=2}}}return y},draw_read:function(U,P,L,Z,A,T,I,F,E){U.textAlign="center";var S=this,z=[Z,A],O=0,V=0,R=0;ref_seq=this.ref_seq,char_width_px=U.canvas.manager.char_width_px;var ae=[];if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){R=Math.round(L/2)}if(!I){I=[[0,F.length]]}for(var M=0,X=I.length;M<X;M++){var J=I[M],B="MIDNSHP=X"[J[0]],N=J[1];if(B==="H"||B==="S"){O-=N}var G=T+O,ad=Math.floor(Math.max(0,(G-Z)*L)),H=Math.floor(Math.max(0,(G+N-Z)*L));if(ad===H){H+=1}switch(B){case"H":break;case"S":case"M":case"=":if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(R>0){U.fillStyle=this.prefs.block_color;U.fillRect(ad-R,E+1,H-ad,9);U.fillStyle=h;for(var ab=0,y=Q.length;ab<y;ab++){if(this.prefs.show_differences&&ref_seq){var K=ref_seq[G-Z+ab];if(!K||K.toLowerCase()===Q[ab].toLowerCase()){continue}}if(G+ab>=Z&&G+ab<=A){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac,E+9)}}}else{U.fillStyle=this.prefs.block_color;U.fillRect(ad,E+4,H-ad,e)}}V+=N;O+=N;break;case"N":U.fillStyle=h;U.fillRect(ad-R,E+5,H-ad,1);O+=N;break;case"D":U.fillStyle="red";U.fillRect(ad-R,E+4,H-ad,3);O+=N;break;case"P":break;case"I":var Y=ad-R;if(is_overlap([G,G+N],z)){var Q=F.slice(V,V+N);if(this.prefs.show_insertions){var D=ad-(H-ad)/2;if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){U.fillStyle="yellow";U.fillRect(D-R,E-9,H-ad,9);ae[ae.length]={type:"triangle",data:[Y,E+4,5]};U.fillStyle=h;switch(seq_tile_overlap){case (OVERLAP_START):Q=Q.slice(Z-G);break;case (OVERLAP_END):Q=Q.slice(0,G-A);break;case (CONTAINED_BY):break;case (CONTAINS):Q=Q.slice(Z-G,G-A);break}for(var ab=0,y=Q.length;ab<y;ab++){var ac=Math.floor(Math.max(0,(G+ab-Z)*L));U.fillText(Q[ab],ac-(H-ad)/2,E)}}else{U.fillStyle="yellow";U.fillRect(D,E+(this.mode!=="Dense"?2:5),H-ad,(P!=="Dense"?e:s))}}else{if((P==="Pack"||this.mode==="Auto")&&F!==undefined&&L>char_width_px){ae[ae.length]={type:"text",data:[Q.length,Y,E+9]}}else{}}}V+=N;break;case"X":V+=N;break}}U.fillStyle="yellow";var aa,C,af;for(var W=0;W<ae.length;W++){aa=ae[W];C=aa.type;af=aa.data;if(C==="text"){U.save();U.font="bold "+U.font;U.fillText(af[0],af[1],af[2]);U.restore()}else{if(C=="triangle"){q(U,af[0],af[1],af[2])}}}},draw_element:function(R,M,E,B,U,z,I,S,P){var H=E[0],Q=E[1],A=E[2],J=E[3],D=Math.floor(Math.max(0,(Q-U)*I)),F=Math.ceil(Math.min(P,Math.max(0,(A-U)*I))),C=(M==="Dense"?0:(0+B))*S,V=this.prefs.block_color,G=this.prefs.label_color,O=0;if((M==="Pack"||this.mode==="Auto")&&I>R.canvas.manager.char_width_px){var O=Math.round(I/2)}R.fillStyle=V;if(E[5] instanceof Array){var N=Math.floor(Math.max(0,(E[4][0]-U)*I)),L=Math.ceil(Math.min(P,Math.max(0,(E[4][1]-U)*I))),K=Math.floor(Math.max(0,(E[5][0]-U)*I)),y=Math.ceil(Math.min(P,Math.max(0,(E[5][1]-U)*I)));if(E[4][1]>=U&&E[4][0]<=z&&E[4][2]){this.draw_read(R,M,I,U,z,E[4][0],E[4][2],E[4][3],C)}if(E[5][1]>=U&&E[5][0]<=z&&E[5][2]){this.draw_read(R,M,I,U,z,E[5][0],E[5][2],E[5][3],C)}if(K>L){R.fillStyle=h;p(R,L-O,C+5,K-O,C+5)}}else{R.fillStyle=V;this.draw_read(R,M,I,U,z,Q,E[4],E[5],C)}if(M==="Pack"&&Q>U){R.fillStyle=this.prefs.label_color;var T=1;if(T===0&&D-R.measureText(J).width<0){R.textAlign="left";R.fillText(J,F+l-O,C+8)}else{R.textAlign="right";R.fillText(J,D-l-O,C+8)}R.fillStyle=V}}});x.AlphaGenerator=g;x.SummaryTreePainter=v;x.LinePainter=c;x.LinkedFeaturePainter=r;x.ReadPainter=t;x.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
--- a/static/scripts/trackster.js Mon Aug 22 16:31:50 2011 -0400
+++ b/static/scripts/trackster.js Tue Aug 23 17:21:37 2011 -0400
@@ -24,7 +24,7 @@
};
/**
- * Find browser's reeuestAnimationFrame method or fallback on a setTimeout
+ * Find browser's requestAnimationFrame method or fallback on a setTimeout
*/
var requestAnimationFrame = (function(){
return window.requestAnimationFrame ||
@@ -35,7 +35,7 @@
function( callback, element ) {
window.setTimeout(callback, 1000 / 60);
};
- })();
+})();
/**
@@ -1197,6 +1197,7 @@
// Name to use for filter when building expression for tool.
this.tool_exp_name = tool_exp_name;
};
+
/**
* Number filters have a min, max as well as a low, high; low and high are used
*/
@@ -1379,7 +1380,9 @@
});
};
- // Create filtering div.
+ //
+ // Create parent div.
+ //
this.parent_div = $("<div/>").addClass("filters").hide();
// Disable dragging, double clicking, keys on div so that actions on slider do not impact viz.
this.parent_div.bind("drag", function(e) {
@@ -1391,12 +1394,17 @@
}).bind("keydown", function(e) {
e.stopPropagation();
});
+
+ //
+ // Create sliders div.
+ //
+ var sliders_div = $("<div/>").addClass("sliders").appendTo(this.parent_div);
var manager = this;
$.each(this.filters, function(index, filter) {
- filter.container = $("<div/>").addClass("slider-row").appendTo(manager.parent_div);
+ filter.container = $("<div/>").addClass("slider-row").appendTo(sliders_div);
// Set up filter label (name, values).
- var filter_label = $("<div/>").addClass("slider-label").appendTo(filter.container)
+ var filter_label = $("<div/>").addClass("elt-label").appendTo(filter.container)
var name_span = $("<span/>").addClass("slider-name").text(filter.name + " ").appendTo(filter_label);
var values_span = $("<span/>");
var values_span_container = $("<span/>").addClass("slider-value").appendTo(filter_label).append("[").append(values_span).append("]");
@@ -1414,6 +1422,7 @@
//
// Always update UI values, but set timeout for doing more--especially drawing--
// so that viz is more responsive.
+ // TODO: remove this because it's no longer necessary as we have requestAnimationFrame().
//
prev_values = ui.values;
values_span.text(ui.values[0] + "-" + ui.values[1]);
@@ -1445,25 +1454,52 @@
});
// Add button to filter complete dataset.
- if (this.filters.length != 0) {
- var run_buttons_row = $("<div>").addClass("param-row").appendTo(this.parent_div);
- var run_on_dataset_button = $("<input type='submit'>").attr("value", "Run on complete dataset").appendTo(run_buttons_row);
+ if (this.filters.length !== 0) {
+ var run_buttons_row = $("<div/>").addClass("param-row").appendTo(sliders_div);
+ var run_on_dataset_button = $("<input type='submit'/>").attr("value", "Run on complete dataset").appendTo(run_buttons_row);
var filter_manager = this;
run_on_dataset_button.click( function() {
filter_manager.run_on_dataset();
});
}
+
+ //
+ // Create filtering display controls.
+ //
+ var
+ display_controls_div = $("<div/>").addClass("display-controls").appendTo(this.parent_div),
+ header_text = $("<span/>").addClass("elt-label").text("Transparency:").appendTo(display_controls_div),
+ alpha_select = $("<select/>").attr("name", "alpha_dropdown").appendTo(display_controls_div);
+
+ // Dropdown for selecting attribute to use for alpha channel manipulation.
+ this.alpha_filter = null;
+ $("<option/>").attr("value", -1).text("== None ==").appendTo(alpha_select);
+ for (var i = 0; i < this.filters.length; i++) {
+ $("<option/>").attr("value", i).text(this.filters[i].name).appendTo(alpha_select);
+ }
+ alpha_select.change(function() {
+ $(this).children("option:selected").each(function() {
+ var filterIndex = parseInt($(this).val());
+ manager.alpha_filter = (filterIndex >= 0 ? manager.filters[filterIndex] : null);
+ manager.track.draw(true, true);
+ })
+ });
+
+ // Clear floating.
+ // Add to clear floating layout.
+ $("<div style='clear: both;'/>").appendTo(this.parent_div);
};
extend(FiltersManager.prototype, {
/**
- * Reset filters to min and max.
+ * Reset filters so that they do not impact track display.
*/
reset_filters: function() {
for (var i = 0; i < this.filters.length; i++) {
filter = this.filters[i];
filter.slider.slider("option", "values", [filter.min, filter.max]);
}
+ this.alpha_filter = null;
},
run_on_dataset: function() {
// Get or create dictionary item.
@@ -1551,6 +1587,24 @@
});
/**
+ * Generates alpha values based on filter and feature's value for filter.
+ */
+var FilterAlphaGenerator = function(filter, default_alpha) {
+ painters.AlphaGenerator.call(this, default_alpha);
+ this.filter = filter;
+};
+
+FilterAlphaGenerator.prototype.gen_alpha = function(feature_data) {
+ // If filter is not initalized yet, return default alpha.
+ if (this.filter.high === Number.MAX_VALUE || this.filter.low === -Number.MAX_VALUE || this.filter.low === this.filter.high) {
+ return this.default_alpha;
+ }
+
+ // Alpha value is ratio of (filter's value compared to low) to (complete filter range).
+ return ( ( parseFloat(feature_data[this.filter.index]) - this.filter.low ) / ( this.filter.high - this.filter.low ) );
+};
+
+/**
* Container for track configuration data.
*/
var TrackConfig = function( options ) {
@@ -1562,7 +1616,7 @@
}
this.onchange = options.onchange
}
-extend( TrackConfig.prototype, {
+extend(TrackConfig.prototype, {
restore_values: function( values ) {
var track_config = this;
$.each( this.params, function( index, param ) {
@@ -2860,7 +2914,7 @@
slots = this.inc_slots[w_scale].slots;
}
- // Filter features
+ // Filter features.
var filtered = [];
if ( result.data ) {
var filters = this.filters_manager.filters;
@@ -2877,14 +2931,15 @@
}
}
if (!hide_feature) {
- filtered.push( feature );
+ filtered.push(feature);
}
}
- }
+ }
- // Create painter, and canvas of sufficient size to contain all features
+ // Create painter, and canvas of sufficient size to contain all features.
+ var filter_alpha_generator = (this.filters_manager.alpha_filter ? new FilterAlphaGenerator(this.filters_manager.alpha_filter) : null);
// HACK: ref_seq will only be defined for ReadTracks, and only the ReadPainter accepts that argument
- var painter = new (this.painter)(filtered, tile_low, tile_high, this.prefs, mode, ref_seq);
+ var painter = new (this.painter)(filtered, tile_low, tile_high, this.prefs, mode, filter_alpha_generator, ref_seq);
var required_height = Math.max(MIN_TRACK_HEIGHT, painter.get_required_height(slots_required));
var canvas = this.view.canvas_manager.new_canvas();
@@ -3213,11 +3268,25 @@
};
/**
+ * Base class for all alpha generators.
+ */
+var AlphaGenerator = function(default_alpha) {
+ this.default_alpha = (default_alpha ? default_alpha : 1);
+};
+
+/**
+ * Base method for generating an alpha channel value; returns default alpha if not implemented.
+ */
+AlphaGenerator.prototype.gen_alpha = function(data) {
+ return this.default_alpha;
+};
+
+/**
* Base class for painters
*
* -- Mode and prefs are both optional
*/
-var Painter = function( data, view_start, view_end, prefs, mode ) {
+var Painter = function(data, view_start, view_end, prefs, mode) {
// Data and data properties
this.data = data;
// View
@@ -3233,13 +3302,13 @@
/**
* SummaryTreePainter, a histogram showing number of intervals in a region
*/
-var SummaryTreePainter = function( data, view_start, view_end, prefs, mode ) {
- Painter.call( this, data, view_start, view_end, prefs, mode );
+var SummaryTreePainter = function(data, view_start, view_end, prefs, mode) {
+ Painter.call(this, data, view_start, view_end, prefs, mode);
}
SummaryTreePainter.prototype.default_prefs = { show_counts: false };
-SummaryTreePainter.prototype.draw = function( ctx, width, height ) {
+SummaryTreePainter.prototype.draw = function(ctx, width, height) {
var view_start = this.view_start,
view_range = this.view_end - this.view_start,
@@ -3276,7 +3345,7 @@
ctx.restore();
}
-var LinePainter = function( data, view_start, view_end, prefs, mode ) {
+var LinePainter = function(data, view_start, view_end, prefs, mode) {
Painter.call( this, data, view_start, view_end, prefs, mode );
if ( this.prefs.min_value === undefined ) {
var min_value = Infinity;
@@ -3296,7 +3365,7 @@
LinePainter.prototype.default_prefs = { min_value: undefined, max_value: undefined, mode: "Histogram", color: "#000", overflow_color: "#F66" };
-LinePainter.prototype.draw = function( ctx, width, height ) {
+LinePainter.prototype.draw = function(ctx, width, height) {
var
in_path = false,
min_value = this.prefs.min_value,
@@ -3406,14 +3475,14 @@
/**
* Abstract object for painting feature tracks. Subclasses must implement draw_element() for painting to work.
*/
-var FeaturePainter = function(data, view_start, view_end, prefs, mode) {
+var FeaturePainter = function(data, view_start, view_end, prefs, mode, alpha_generator) {
Painter.call(this, data, view_start, view_end, prefs, mode);
+ this.alpha_generator = (alpha_generator ? alpha_generator : new AlphaGenerator());
}
FeaturePainter.prototype.default_prefs = { block_color: "#FFF", connector_color: "#FFF" };
-extend(FeaturePainter.prototype, {
-
+extend(FeaturePainter.prototype, {
get_required_height: function(rows_required) {
// y_scale is the height per row
var required_height = y_scale = this.get_row_height(), mode = this.mode;
@@ -3479,9 +3548,9 @@
LABEL_SPACING = 2,
CONNECTOR_COLOR = "#ccc";
-var LinkedFeaturePainter = function(data, view_start, view_end, prefs, mode) {
- FeaturePainter.call(this, data, view_start, view_end, prefs, mode);
-}
+var LinkedFeaturePainter = function(data, view_start, view_end, prefs, mode, alpha_generator) {
+ FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_generator);
+};
extend(LinkedFeaturePainter.prototype, FeaturePainter.prototype, {
@@ -3518,18 +3587,15 @@
f_end = Math.ceil( Math.min(width, Math.max(0, (feature_end - tile_low) * w_scale)) ),
y_center = (mode === "Dense" ? 0 : (0 + slot)) * y_scale,
thickness, y_start, thick_start = null, thick_end = null,
+ // TODO: is there any reason why block, label color cannot be set at the Painter level?
block_color = this.prefs.block_color,
label_color = this.prefs.label_color;
+
+ // Set global alpha.
+ ctx.globalAlpha = this.alpha_generator.gen_alpha(feature);
- // Dense mode displays the same for all data.
- /*
- if (mode === "Dense") {
- ctx.fillStyle = block_color;
- ctx.fillRect(f_start, y_center, f_end - f_start, DENSE_FEATURE_HEIGHT);
- }
- */
-
- if ( mode == "Dense" ) {
+ // In dense mode, put all data in top slot.
+ if (mode == "Dense") {
slot = 1;
}
@@ -3626,8 +3692,7 @@
if (thick_start !== undefined && feature_te > feature_ts && !(block_start > thick_end || block_end < thick_start) ) {
var block_thick_start = Math.max(block_start, thick_start),
block_thick_end = Math.min(block_end, thick_end);
- ctx.fillRect(block_thick_start, y_center + 1,
- block_thick_end - block_thick_start, thick_height);
+ ctx.fillRect(block_thick_start, y_center + 1, block_thick_end - block_thick_start, thick_height);
if ( feature_blocks.length == 1 && mode == "Pack") {
// Exactly one block means we have no introns, but do have a distinct "thick" region,
// draw arrows over it if in pack mode
@@ -3658,15 +3723,18 @@
ctx.textAlign = "right";
ctx.fillText(feature_name, f_start - LABEL_SPACING, y_center + 8);
}
- ctx.fillStyle = block_color;
+ //ctx.fillStyle = block_color;
}
}
+
+ // Reset global alpha.
+ ctx.globalAlpha = 1;
}
});
-var VariantPainter = function(data, view_start, view_end, prefs, mode) {
- FeaturePainter.call(this, data, view_start, view_end, prefs, mode);
+var VariantPainter = function(data, view_start, view_end, prefs, mode, alpha_generator) {
+ FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_generator);
}
extend(VariantPainter.prototype, FeaturePainter.prototype, {
@@ -3720,8 +3788,8 @@
}
});
-var ReadPainter = function(data, view_start, view_end, prefs, mode, ref_seq) {
- FeaturePainter.call(this, data, view_start, view_end, prefs, mode);
+var ReadPainter = function(data, view_start, view_end, prefs, mode, alpha_generator, ref_seq) {
+ FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_generator);
this.ref_seq = ref_seq;
};
@@ -4007,6 +4075,7 @@
}
});
+exports.AlphaGenerator = AlphaGenerator;
exports.SummaryTreePainter = SummaryTreePainter;
exports.LinePainter = LinePainter;
exports.LinkedFeaturePainter = LinkedFeaturePainter;
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: greg: Add the ability to switch between tool shed repository revsions when viewing tool metadata.
by Bitbucket 22 Aug '11
by Bitbucket 22 Aug '11
22 Aug '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/b1f22f337651/
changeset: b1f22f337651
user: greg
date: 2011-08-22 22:31:50
summary: Add the ability to switch between tool shed repository revsions when viewing tool metadata.
affected #: 3 files (1.5 KB)
--- a/lib/galaxy/webapps/community/controllers/repository.py Mon Aug 22 16:19:49 2011 -0400
+++ b/lib/galaxy/webapps/community/controllers/repository.py Mon Aug 22 16:31:50 2011 -0400
@@ -1157,12 +1157,17 @@
tool = None
break
is_malicious = change_set_is_malicious( trans, repository_id, repository.tip )
+ changeset_revision_select_field = build_changeset_revision_select_field( trans,
+ repository,
+ selected_value=changeset_revision,
+ add_id_to_name=False )
return trans.fill_template( "/webapps/community/repository/view_tool_metadata.mako",
repository=repository,
tool=tool,
metadata=metadata,
changeset_revision=changeset_revision,
revision_label=revision_label,
+ changeset_revision_select_field=changeset_revision_select_field,
is_malicious=is_malicious,
message=message,
status=status )
--- a/templates/webapps/community/repository/manage_repository.mako Mon Aug 22 16:19:49 2011 -0400
+++ b/templates/webapps/community/repository/manage_repository.mako Mon Aug 22 16:31:50 2011 -0400
@@ -19,7 +19,7 @@
browse_label = 'Browse or delete repository files'
else:
browse_label = 'Browse repository files'
- can_set_malicious = metadata and can_set_metadata and is_admin
+ can_set_malicious = metadata and can_set_metadata and is_admin and changeset_revision == repository.tip
%><%!
--- a/templates/webapps/community/repository/view_tool_metadata.mako Mon Aug 22 16:19:49 2011 -0400
+++ b/templates/webapps/community/repository/view_tool_metadata.mako Mon Aug 22 16:31:50 2011 -0400
@@ -71,14 +71,31 @@
<div class="toolForm"><div class="toolFormTitle">Repository revision</div><div class="toolFormBody">
- <div class="form-row">
- <label>Revision:</label>
- %if can_view_change_log:
- <a href="${h.url_for( controller='repository', action='view_changelog', id=trans.app.security.encode_id( repository.id ) )}">${revision_label}</a>
- %else:
- ${revision_label}
- %endif
- </div>
+ %if len( changeset_revision_select_field.options ) > 1:
+ <form name="change_revision" id="change_revision" action="${h.url_for( controller='repository', action='view_tool_metadata', repository_id=trans.security.encode_id( repository.id ), tool_id=metadata[ 'id' ] )}" method="post" >
+ <div class="form-row">
+ <%
+ if changeset_revision == repository.tip:
+ tip_str = 'repository tip'
+ else:
+ tip_str = ''
+ %>
+ ${changeset_revision_select_field.get_html()} <i>${tip_str}</i>
+ <div class="toolParamHelp" style="clear: both;">
+ Select a revision to inspect and download versions of tools from this repository.
+ </div>
+ </div>
+ </form>
+ %else:
+ <div class="form-row">
+ <label>Revision:</label>
+ %if can_view_change_log:
+ <a href="${h.url_for( controller='repository', action='view_changelog', id=trans.app.security.encode_id( repository.id ) )}">${revision_label}</a>
+ %else:
+ ${revision_label}
+ %endif
+ </div>
+ %endif
</div></div><p/>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0