diff --git a/web/Gemfile b/web/Gemfile index 8aa825f40..a48fd5e57 100644 --- a/web/Gemfile +++ b/web/Gemfile @@ -99,6 +99,7 @@ group :development, :test do gem 'factory_girl_rails', '4.1.0' # in dev because in use by rake task gem 'database_cleaner', '1.3.0' #in dev because in use by rake task gem 'teaspoon' + gem 'teaspoon-jasmine' end group :unix do gem 'therubyracer' #, '0.11.0beta8' diff --git a/web/app/assets/javascripts/jam_track_screen.js.coffee b/web/app/assets/javascripts/jam_track_screen.js.coffee index 3a56a2572..df5e488ff 100644 --- a/web/app/assets/javascripts/jam_track_screen.js.coffee +++ b/web/app/assets/javascripts/jam_track_screen.js.coffee @@ -222,14 +222,31 @@ context.JK.JamTrackScreen=class JamTrackScreen @renderJamtracks(@currentData) false + computeWeight: (jam_track_track, instrument) => + weight = switch + when jam_track_track.track_type == 'Master' then 0 + when jam_track_track.instrument?.id == instrument then 1 + jam_track_track.position + else 10000 + jam_track_track.position + renderJamtracks:(data) => @currentData = data that = this + for jamtrack in data.jamtracks jamtrackExpanded = this.expanded==jamtrack.id trackRow = _.clone(jamtrack) trackRow.track_cnt = jamtrack.tracks.length - trackRow.tracks = [] + trackRow.tracks = [] + + # if an instrument is selected by the user, then re-order any jam tracks with a matching instrument to the top + instrument = @instrument.val() + if instrument? + jamtrack.tracks.sort((a, b) => + aWeight = @computeWeight(a, instrument) + bWeight = @computeWeight(b, instrument) + return aWeight - bWeight + ) + for track in jamtrack.tracks trackRow.tracks.push(track) if track.track_type=='Master' diff --git a/web/app/views/api_jam_tracks/show.rabl b/web/app/views/api_jam_tracks/show.rabl index e616306e2..028180632 100644 --- a/web/app/views/api_jam_tracks/show.rabl +++ b/web/app/views/api_jam_tracks/show.rabl @@ -15,7 +15,7 @@ node :purchased do |item| end child(:jam_track_tracks => :tracks) { - attributes :id, :part, :instrument, :track_type + attributes :id, :part, :instrument, :track_type, :position node do |track| {