From 9d7a14f765b7d2b0095b8df40a2bd58e3c0bbcd9 Mon Sep 17 00:00:00 2001 From: Kanwei Li Date: Wed, 23 Sep 2009 17:32:16 -0400 Subject: [PATCH] trackster: natural sort for chroms list, disable zooming when no data, can click on labels when selecting datasets --- lib/galaxy/web/controllers/tracks.py | 17 +++++++++++++---- static/scripts/trackster.js | 4 ++++ templates/tracks/new_browser.mako | 6 +++--- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/lib/galaxy/web/controllers/tracks.py b/lib/galaxy/web/controllers/tracks.py index c60db2b3bfd..f49971b79b6 100644 --- a/lib/galaxy/web/controllers/tracks.py +++ b/lib/galaxy/web/controllers/tracks.py @@ -15,7 +15,7 @@ Problems need to support that, but need to make user defined build support better) """ -import math, logging +import math, re, logging log = logging.getLogger(__name__) from galaxy.util.json import to_json_string @@ -49,6 +49,9 @@ dataset_type_to_data_provider = { # converters browsable_types = set( ["wig" ] ) +# For natural sort +NUM_RE = re.compile('([0-9]+)') + class TracksController( BaseController ): """ Controller for track browser interface. Handles building a new browser from @@ -116,10 +119,16 @@ class TracksController( BaseController ): @web.json def chroms(self, trans, dbkey=None ): + """ + Returns a naturally sorted list of chroms/contigs for the given dbkey + """ + def split_by_number(s): + return [ int(c) if c.isdigit() else c for c in NUM_RE.split(s) ] + chroms = self._chroms( trans, dbkey ) - unsorted = [{ 'chrom': chrom, 'len': length } for chrom, length in chroms.iteritems()] - unsorted.sort( lambda a,b: cmp(a['chrom'], b['chrom']) ) - return unsorted + to_sort = [{ 'chrom': chrom, 'len': length } for chrom, length in chroms.iteritems()] + to_sort.sort(lambda a,b: cmp( split_by_number(a['chrom']), split_by_number(b['chrom']) )) + return to_sort def _chroms( self, trans, dbkey ): """ diff --git a/static/scripts/trackster.js b/static/scripts/trackster.js index 3aec0f7b733..7fb5d0bfce8 100644 --- a/static/scripts/trackster.js +++ b/static/scripts/trackster.js @@ -67,6 +67,9 @@ $.extend( View.prototype, { this.high = Math.min( this.length, Math.ceil( new_high ) ); }, zoom_in: function ( factor, point ) { + console.log(this.max_high); + if (this.max_high == 0) return; + var range = this.high - this.low; var diff = range / factor / 2; @@ -92,6 +95,7 @@ $.extend( View.prototype, { } }, zoom_out: function ( factor ) { + if (this.max_high == 0) return; var center = ( this.low + this.high ) / 2; var range = this.high - this.low; var diff = range * factor / 2; diff --git a/templates/tracks/new_browser.mako b/templates/tracks/new_browser.mako index b522f4d77a9..875777f1fc2 100644 --- a/templates/tracks/new_browser.mako +++ b/templates/tracks/new_browser.mako @@ -32,10 +32,10 @@ $( function() {
- %for key,value in datasets.items(): + %for dataset_id, dataset_name in datasets.items():
- - ${value} + +
%endfor