From 101df3fb6b9551f85b10803717ce856b5bd56894 Mon Sep 17 00:00:00 2001 From: Eric Allen Date: Wed, 4 Nov 2009 22:32:44 -0500 Subject: [PATCH] Simple dependency handling working on project page. The database contains actions with dependencies. Please rename to tracks-17-blank.db or update database path accordingly. Conflicts: app/views/todos/toggle_check.js.rjs --- app/controllers/todos_controller.rb | 14 ++++++++++---- app/helpers/todos_helper.rb | 2 +- app/views/todos/toggle_check.js.rjs | 16 +++++++++++++++- db/tracks-17-test.db | Bin 0 -> 55296 bytes 4 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 db/tracks-17-test.db diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index de6e283e..71d22346 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -144,19 +144,25 @@ class TodosController < ApplicationController if @todo.completed? logger.debug "completed #{@todo.description}" - # A todo was completed - check for pending todos + # A todo was completed - check for pending todos to activate + @pending_to_activate = [] @todo.successors.each do |t| if t.uncompleted_predecessors.empty? # Activate pending todos logger.debug "activated #{t.description}" t.activate! + @pending_to_activate << t end end else - # Block todos for undone actions - (it does no harm if they are already pending) + # Block active successors for undone action + @active_to_block = [] logger.debug "undid #{@todo.description}" @todo.successors.each do |t| - logger.debug "blocked #{t.description}" - t.block! + if t.state == 'active' + logger.debug "blocked #{t.description}" + t.block! + @active_to_block << t + end end end diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index b39d5674..cfd1dbf8 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -203,7 +203,7 @@ module TodosHelper def item_container_id (todo) if source_view_is :project return "p#{todo.project_id}items" if todo.active? - return "tickler" if todo.deferred? + return "tickler" if todo.deferred? or todo.pending? end return "c#{todo.context_id}items" end diff --git a/app/views/todos/toggle_check.js.rjs b/app/views/todos/toggle_check.js.rjs index 5f9e2734..92289b16 100644 --- a/app/views/todos/toggle_check.js.rjs +++ b/app/views/todos/toggle_check.js.rjs @@ -8,9 +8,15 @@ if @saved page.insert_html :top, "completed_containeritems", :partial => 'todos/todo', :locals => { :todo => @todo, :parent_container_type => "completed" } page.visual_effect :highlight, dom_id(@todo, 'line'), {'startcolor' => "'#99ff99'"} page[empty_container_msg_div_id].show if @down_count == 0 && !empty_container_msg_div_id.nil? - page.show 'tickler-empty-nd' if source_view_is(:project) && @deferred_count == 0 + page.show 'tickler-empty-nd' if source_view_is(:project) && @deferred_count == 0 && @pending_count == 0 page.hide 'empty-d' # If we've checked something as done, completed items can't be empty end + # Activate pending todos that are successors of the completed + @pending_to_activate.each do |t| + logger.debug "#300: Removing #{t.description} from pending block and adding it to active" + page[t].remove + page.insert_html :bottom, item_container_id(t), :partial => 'todos/todo', :locals => { :todo => t, :parent_container_type => parent_container_type } + end # remove container if empty if @remaining_in_context == 0 && source_view_is(:todo) @@ -44,6 +50,14 @@ if @saved page.show "empty-d" if @completed_count == 0 page.show "c"+@todo.context.id.to_s page[empty_container_msg_div_id].hide unless empty_container_msg_div_id.nil? # If we've checked something as undone, incomplete items can't be empty + # If active todos are successors of the reactivated todo they will be blocked + @active_to_block.each do |t| + logger.debug "#300: Block #{t.description} that are a successor of #{@todo.description}" + page[t].remove # Remove it from active + # Insert it in deferred/pending block + logger.debug "Insert #{t.description} in deferred/pending block" + page.insert_html :bottom, item_container_id(t), :partial => 'todos/todo', :locals => { :todo => t, :parent_container_type => parent_container_type } + end end page.hide "status" diff --git a/db/tracks-17-test.db b/db/tracks-17-test.db new file mode 100644 index 0000000000000000000000000000000000000000..3f79ee534f3c54d4cefffc7d92941aef82694641 GIT binary patch literal 55296 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