diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 6a2762d7..9cf5c3eb 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -64,7 +64,7 @@ module TodosHelper :complete => todo_stop_waiting_js(todo)) end end - + def todo_start_waiting_js(todo) return "$('#ul#{dom_id(todo)}').css('visibility', 'hidden'); $('##{dom_id(todo)}').block({message: null})" end diff --git a/app/models/todo.rb b/app/models/todo.rb index 55044f48..0eb9be78 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -115,6 +115,12 @@ class Todo < ActiveRecord::Base end end + def remove_predecessor(predecessor) + # remove predecessor and activate myself + predecessors.delete(predecessor) + self.activate! + end + # Returns true if t is equal to self or a successor of self def is_successor?(t) if self == t diff --git a/app/views/todos/_successor.html.erb b/app/views/todos/_successor.html.erb index 327dc81c..82d74f56 100644 --- a/app/views/todos/_successor.html.erb +++ b/app/views/todos/_successor.html.erb @@ -10,11 +10,15 @@ parameters += "&_tag_name=#{@tag_name}" if @source_view == 'tag'
<%= h sanitize(successor.description) %> - <%= image_tag( "blank.png", - :title => "Remove the successor", - :class=>"delete_item") %> + + <%= link_to_remote( + image_tag("delete_off.png", :mouseover => "delete_on.png", :alt => "Remove the dependency", :align => "absmiddle"), + :url => {:controller => 'todos', :action => 'remove_predecessor', :id => successor.id}, + :method => 'delete', + :with => "'#{parameters}&predecessor=#{predecessor.id}'", + :before => todo_start_waiting_js(dom_id(successor, 'successor')), + :complete => todo_stop_waiting_js) %> + <%= render(:partial => "todos/toggle_successors", :locals => { :item => successor, :suppress_button => true }) unless successor.pending_successors.empty? %>
diff --git a/app/views/todos/_toggle_successors.html.erb b/app/views/todos/_toggle_successors.html.erb index a0a8883f..47efc3df 100644 --- a/app/views/todos/_toggle_successors.html.erb +++ b/app/views/todos/_toggle_successors.html.erb @@ -8,7 +8,8 @@ suppress_button ||= false :collection => item.pending_successors, :locals => { :todo => item, :parent_container_type => parent_container_type, - :suppress_dependencies => true } + :suppress_dependencies => true, + :predecessor => item } %> diff --git a/app/views/todos/add_predecessor.js.rjs b/app/views/todos/add_predecessor.js.rjs index 2d1f5c0c..714a5956 100644 --- a/app/views/todos/add_predecessor.js.rjs +++ b/app/views/todos/add_predecessor.js.rjs @@ -3,24 +3,24 @@ if @saved status_message = "Added #{@predecessor.description} as dependency." unless @original_state == 'pending' status_message += " #{@todo.description} set to pending" - # remove successor from page - page[@todo].remove - # regenerate predecessor to add arrow - page[@predecessor].replace_html :partial => 'todos/todo', :locals => { :todo => @predecessor, :parent_container_type => parent_container_type } - - # show in tickler box in project view - if source_view_is_one_of :project, :tag - page['tickler-empty-nd'].hide - page.replace "tickler", :partial => 'todos/deferred', :locals => { :deferred => @todo.project.deferred_todos, - :collapsible => false, - :append_descriptor => "in this project", - :parent_container_type => 'project', - :pending => @todo.project.pending_todos } - end - - page << "TodoBehavior.enableToggleNotes();" - page << "TodoBehavior.enableToggleSuccessors();" end + # remove successor from page + page[@todo].remove + # regenerate predecessor to add arrow + page[@predecessor].replace_html :partial => 'todos/todo', :locals => { :todo => @predecessor, :parent_container_type => parent_container_type } + + # show in tickler box in project view + if source_view_is_one_of :project, :tag + page['tickler-empty-nd'].hide + page.replace "tickler", :partial => 'todos/deferred', :locals => { :deferred => @todo.project.deferred_todos, + :collapsible => false, + :append_descriptor => "in this project", + :parent_container_type => 'project', + :pending => @todo.project.pending_todos } + end + + page << "TodoBehavior.enableToggleNotes();" + page << "TodoBehavior.enableToggleSuccessors();" page.notify :notice, status_message, 5.0 else page.replace_html "status", content_tag("div", content_tag("h2", "Unable to add dependency"), "id" => "errorExplanation", "class" => "errorExplanation") diff --git a/app/views/todos/remove_predecessor.js.rjs b/app/views/todos/remove_predecessor.js.rjs new file mode 100644 index 00000000..02cb8364 --- /dev/null +++ b/app/views/todos/remove_predecessor.js.rjs @@ -0,0 +1,21 @@ +if @removed + status_message = "Removed #{@successor.description} as dependency from #{@predecessor.description}." + page.notify :notice, status_message, 5.0 + + # replace old predecessor with one without the successor + page.replace dom_id(@predecessor), :partial => 'todos/todo', :locals => { + :todo => @predecessor, :parent_container_type => parent_container_type } + + # if possible, remove successor from pending block + # TODO: do not remove when multiple dependencies + page[@successor].remove unless source_view_is :context + + # if possible, add successor + container = "c#{@successor.context_id}items" + container = "p#{@successor.project_id}items" if source_view_is :project + page.insert_html :bottom, container, :partial => 'todos/todo', :locals => { + :todo => @successor, :parent_container_type => parent_container_type } + page << "TodoBehavior.enableToggleSuccessors()" +else + page.notify :error, "There was an error removing the dependency", 8.0 +end