From 207b7b9e2050c673acf60bb5154fcdd6f090635b Mon Sep 17 00:00:00 2001 From: Steven Miers Date: Fri, 5 Dec 2014 15:03:40 -0600 Subject: [PATCH] VRFS-1890 : Mechanism to move track up/down, hook up in admin UI. --- admin/app/admin/jam_tracks.rb | 45 ++++++++++--- admin/app/assets/javascripts/jam_track.js | 73 +++++++++++---------- ruby/lib/jam_ruby/models/jam_track_track.rb | 51 +++++++++++++- 3 files changed, 125 insertions(+), 44 deletions(-) diff --git a/admin/app/admin/jam_tracks.rb b/admin/app/admin/jam_tracks.rb index 0f6d99e08..ed1e746ab 100644 --- a/admin/app/admin/jam_tracks.rb +++ b/admin/app/admin/jam_tracks.rb @@ -11,6 +11,18 @@ ActiveAdmin.register JamRuby::JamTrack, :as => 'JamTracks' do form :partial => 'form' index do + + # default_actions # use this for all view/edit/delete links + column "Actions" do |jam_track| + links = ''.html_safe + clz = "member_link view_link show_tracks" + clz += ' expand' if params[:focus_track]==jam_track.id + links << link_to("Show Tracks", '#', :class => clz) + links << link_to("Update", edit_resource_path(jam_track), :class => "member_link edit_link") + links + end + + column :id column :name column :description @@ -40,18 +52,35 @@ ActiveAdmin.register JamRuby::JamTrack, :as => 'JamTracks' do column :track_type column :instrument column :part - column :track do |track| + + column "" do |track| + if track.position > 1 + link_to 'Move Up', "jam_tracks/#{track.id}/move_up" + end + end + column "" do |track| + if track.position < jam_track.jam_track_tracks.count + link_to 'Move Down', "jam_tracks/#{track.id}/move_down" + end + end + column "" do |track| link_to 'Play', '#' end end end - # default_actions # use this for all view/edit/delete links - column "Actions" do |jam_track| - links = ''.html_safe - links << link_to("Show Tracks", '#', :class => "member_link view_link show_tracks") - links << link_to("Update", edit_resource_path(jam_track), :class => "member_link edit_link") - links - end + + end + + member_action :move_up, :method => :get do + track = JamTrackTrack.where("id=?",params[:id]).first + track.move_up + redirect_to("/admin/jam_tracks?focus_track=#{track.jam_track_id}", {:notice => "Moved Up."}) + end + + member_action :move_down, :method => :get do + track = JamTrackTrack.where("id=?",params[:id]).first + track.move_down + redirect_to("/admin/jam_tracks?focus_track=#{track.jam_track_id}", {:notice => "Moved Down."}) end end \ No newline at end of file diff --git a/admin/app/assets/javascripts/jam_track.js b/admin/app/assets/javascripts/jam_track.js index a8781672a..e1b6852bf 100644 --- a/admin/app/assets/javascripts/jam_track.js +++ b/admin/app/assets/javascripts/jam_track.js @@ -1,43 +1,48 @@ +function showTracks(rowJamTrack) { + var $jamTrackTracks = rowJamTrack.find("td.jam_track_tracks"); + + var name=rowJamTrack.find("td.name").text() + var count = $jamTrackTracks.find("table tbody tr").length; + + if (rowJamTrack.next().attr('id') == "jam_track_tracks_detail") { + $(this).html("Show Tracks"); + rowJamTrack.next().remove(); + } else { + $(this).html('Hide Tracks'); + if (count == 0) { + rowJamTrack.after( + $("").html( + $("") + ).append( + $("").html( + "No Tracks" + ) + ) + ); + } + else { + rowJamTrack.after( + $("").html( + $("Tracks in '" + name + "':") + ).append( + $("").html( + $jamTrackTracks.html() + ) + ) + ); + } + } +} + $(document).ready(function() { $("th.jam_track_tracks").css('display', 'none'); $("td.jam_track_tracks").css('display', 'none'); - + showTracks($("a.expand").parents("tr")) + $(".show_tracks").click(function(e) { e.preventDefault(); var $rowJamTrack = $(this).parents('tr'); - var $jamTrackTracks = $($rowJamTrack).find("td.jam_track_tracks"); - - var count = $jamTrackTracks.find("table tbody tr").length; - - if ($rowJamTrack.next().attr('id') == "jam_track_tracks_detail") { - $(this).html("Show Tracks"); - $rowJamTrack.next().remove(); - } - else { - $(this).html('Hide Tracks'); - if (count == 0) { - $rowJamTrack.after( - $("").html( - $("") - ).append( - $("").html( - "No Tracks" - ) - ) - ); - } - else { - $rowJamTrack.after( - $("").html( - $("") - ).append( - $("").html( - $jamTrackTracks.html() - ) - ) - ); - } - } + showTracks($rowJamTrack) }) }); \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/jam_track_track.rb b/ruby/lib/jam_ruby/models/jam_track_track.rb index f9e8ebcb9..fd527b9eb 100644 --- a/ruby/lib/jam_ruby/models/jam_track_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track_track.rb @@ -43,5 +43,52 @@ module JamRuby # I think we have to make a special case for 'previews', but maybe that's just up to the controller to not check can_download? jam_track.owners.include?(user) end - end -end + + def move_up + #normalize_position + if self.position > 1 + # Switch with previous + previous_track = self.jam_track.jam_track_tracks.where("position=?", self.position-1).first + if previous_track + JamTrack.transaction do + previous_track.position,self.position = self.position,previous_track.position + previous_track.save(validate:false) + self.save(validate:false) + end + end + end + end + + def move_down + count=normalize_position + if self.position < count + # Switch with next: + next_track = self.jam_track.jam_track_tracks.where("position=?", self.position+1).first + if next_track + next_track.position,self.position = self.position,next_track.position + next_track.save(validate:false) + self.save(validate:false) + end + end + end + + private + def normalize_position + parent = self.jam_track + position = 0 + if parent + JamTrack.transaction do + parent.jam_track_tracks.each do |jtt| + position += 1 + if jtt.position != position + jtt.position = position + jtt.save(validate:false) + end + end + end + end + position + end # normalize_position + + end # class +end # module