diff --git a/tracks/app/controllers/project_controller.rb b/tracks/app/controllers/project_controller.rb
index ded7bd15..03f60a2f 100644
--- a/tracks/app/controllers/project_controller.rb
+++ b/tracks/app/controllers/project_controller.rb
@@ -79,6 +79,8 @@ class ProjectController < ApplicationController
@project_not_done_counts[@project.id] = @project.reload().not_done_todo_count(:include_project_hidden_todos => true)
end
render
+ elsif params['update_status']
+ render :action => 'update_status'
else
render :text => success_text || 'Success'
end
diff --git a/tracks/app/models/project.rb b/tracks/app/models/project.rb
index ab6f5a63..c742ddd9 100644
--- a/tracks/app/models/project.rb
+++ b/tracks/app/models/project.rb
@@ -47,7 +47,7 @@ class Project < ActiveRecord::Base
def hide_todos
todos.each do |t|
- t.hide! unless t.completed?
+ t.hide! unless t.completed? || t.deferred?
t.save
end
end
diff --git a/tracks/app/views/project/_project_form.rhtml b/tracks/app/views/project/_project_form.rhtml
index d6df8245..117b3435 100644
--- a/tracks/app/views/project/_project_form.rhtml
+++ b/tracks/app/views/project/_project_form.rhtml
@@ -13,7 +13,7 @@
|
<% ['active', 'hidden', 'completed'].each do | state | %>
- <%= radio_button(:project, 'state', state, {:class => 'project-done'}) %> <%= state.titlecase %>
+ <%= radio_button(:project, 'state', state) %> <%= state.titlecase %>
<% end %>
|
diff --git a/tracks/app/views/project/show.rhtml b/tracks/app/views/project/show.rhtml
index 27bd894a..ccbe412b 100644
--- a/tracks/app/views/project/show.rhtml
+++ b/tracks/app/views/project/show.rhtml
@@ -35,8 +35,10 @@
Status
<% ['active', 'hidden', 'completed'].each do | state | %>
- <% js = "new Ajax.Request('#{ url_for :controller => 'project', :action => 'update', :id => @project.id, :wants_render => false, 'project[state]' => state }', {asynchronous:true, evalScripts:true});" %>
- <%= radio_button(:project, 'state', state, {:class => 'project-done', :onclick => js}) %> <%= state.titlecase %>
+ <% js = "new Ajax.Request('#{ url_for :controller => 'project', :action => 'update', :id => @project.id, :wants_render => false, :update_status => true, 'project[state]' => state }', {asynchronous:true, evalScripts:true});"
+ span_class = @project.current_state.to_s == state ? 'active_state' : 'inactive_state'
+ %>
+ <%= radio_button(:project, 'state', state, {:onclick => js}) %> <%= state.titlecase %>
<% end %>
diff --git a/tracks/app/views/project/update_status.rjs b/tracks/app/views/project/update_status.rjs
new file mode 100644
index 00000000..28e04a1f
--- /dev/null
+++ b/tracks/app/views/project/update_status.rjs
@@ -0,0 +1,10 @@
+page.select('#project_status .active span').each do |element|
+ element.className = @project.current_state == :active ? 'active_state' : 'inactive_state'
+end
+page.select('#project_status .hidden span').each do |element|
+ element.className = @project.current_state == :hidden ? 'active_state' : 'inactive_state'
+end
+page.select('#project_status .completed span').each do |element|
+ element.className = @project.current_state == :completed ? 'active_state' : 'inactive_state'
+end
+page.notify :notice, "Set project status to #{@project.current_state}", 5.0
diff --git a/tracks/public/stylesheets/standard.css b/tracks/public/stylesheets/standard.css
index 58a51417..86ff73a2 100644
--- a/tracks/public/stylesheets/standard.css
+++ b/tracks/public/stylesheets/standard.css
@@ -308,6 +308,12 @@ div.add_note_link {
div#project_status > div {
padding: 10px;
}
+#project_status span {
+ margin-right:5px;
+}
+#project_status .active_state {
+ font-weight:bold;
+}
a.footer_link {color: #cc3334; font-style: normal;}
a.footer_link:hover {color: #fff; background-color: #cc3334 !important;}
diff --git a/tracks/test/selenium/project_detail/change_project_status.rsel b/tracks/test/selenium/project_detail/change_project_status.rsel
new file mode 100644
index 00000000..012da2e5
--- /dev/null
+++ b/tracks/test/selenium/project_detail/change_project_status.rsel
@@ -0,0 +1,14 @@
+setup :fixtures => :all
+include_partial 'login/login', :username => 'admin', :password => 'abracadabra'
+open '/project/Build_a_working_time_machine'
+assert_checked 'project_state_active', 'ignored'
+assert_attribute 'css=#project_status .active span', 'class', 'active_state'
+assert_attribute 'css=#project_status .hidden span', 'class', 'inactive_state'
+assert_text 'badge_count', '2'
+click 'project_state_hidden'
+wait_for_attribute 'css=#project_status .active span', 'class', 'inactive_state'
+wait_for_attribute 'css=#project_status .hidden span', 'class', 'active_state'
+assert_text 'badge_count', '2'
+open '/project/Build_a_working_time_machine'
+assert_text 'badge_count', '2'
+assert_checked 'project_state_hidden', 'ignored'