From ead9a4cfe9487f30f5f0c996dc0c3128e01decad Mon Sep 17 00:00:00 2001 From: lukemelia Date: Wed, 10 Jan 2007 07:01:26 +0000 Subject: [PATCH] Add a bold state to emphasize the project status on the project detail page. The bold state changes once the ajax operation is complete. Project status changes now also show a flash notice when the ajax operation completes. Add a selenium test to confirm this behavior. Fixed a bug where hiding a project would make deferred items hidden. Now we leave them deferred. Added a little breathing room between the project status options. git-svn-id: http://www.rousette.org.uk/svn/tracks-repos/trunk@395 a4c988fc-2ded-0310-b66e-134b36920a42 --- tracks/app/controllers/project_controller.rb | 2 ++ tracks/app/models/project.rb | 2 +- tracks/app/views/project/_project_form.rhtml | 2 +- tracks/app/views/project/show.rhtml | 6 ++++-- tracks/app/views/project/update_status.rjs | 10 ++++++++++ tracks/public/stylesheets/standard.css | 6 ++++++ .../project_detail/change_project_status.rsel | 14 ++++++++++++++ 7 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 tracks/app/views/project/update_status.rjs create mode 100644 tracks/test/selenium/project_detail/change_project_status.rsel 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'