From 6f0434bf8347a09cc9f8fc090a03b0056f56f64d Mon Sep 17 00:00:00 2001 From: Alexey Verkhovsky Date: Sun, 19 Mar 2006 07:54:54 +0000 Subject: [PATCH] All tests pass, including Watir suite --- app/controllers/wiki_controller.rb | 11 +-- app/helpers/wiki_helper.rb | 89 +++++++++++++++++++++++++ app/views/wiki/page.rhtml | 46 ++++--------- app/views/wiki/revision.rhtml | 81 ++++------------------ test/functional/wiki_controller_test.rb | 17 ++++- test/unit/page_test.rb | 1 - test/watir/e2e.rb | 32 +++++---- 7 files changed, 154 insertions(+), 123 deletions(-) create mode 100644 app/helpers/wiki_helper.rb diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 38211e37..1c07f868 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -224,15 +224,18 @@ class WikiController < ApplicationController def save render(:status => 404, :text => 'Undefined page name') and return if @page_name.nil? - cookies['author'] = { :value => @params['author'], :expires => Time.utc(2030) } + author_name = @params['author'] + author_name = 'AnonymousCoward' if author_name =~ /^\s*$/ + cookies['author'] = { :value => author_name, :expires => Time.utc(2030) } + begin if @page wiki.revise_page(@web_name, @page_name, @params['content'], Time.now, - Author.new(@params['author'], remote_ip), PageRenderer.new) + Author.new(author_name, remote_ip), PageRenderer.new) @page.unlock else wiki.write_page(@web_name, @page_name, @params['content'], Time.now, - Author.new(@params['author'], remote_ip), PageRenderer.new) + Author.new(author_name, remote_ip), PageRenderer.new) end redirect_to_page @page_name rescue => e @@ -336,7 +339,7 @@ class WikiController < ApplicationController def get_page_and_revision @revision_number = @params['rev'].to_i - @revision = @page.revisions[@revision_number] + @revision = @page.revisions[@revision_number - 1] end def parse_category diff --git a/app/helpers/wiki_helper.rb b/app/helpers/wiki_helper.rb new file mode 100644 index 00000000..a5b97f29 --- /dev/null +++ b/app/helpers/wiki_helper.rb @@ -0,0 +1,89 @@ +module WikiHelper + + def navigation_menu_for_revision + menu = [] + menu << forward + menu << back_for_revision if @revision_number > 1 + menu << current_revision + menu << see_or_hide_changes_for_revision if @revision_number > 1 + menu << rollback + menu + end + + def navigation_menu_for_page + menu = [] + menu << edit_page + menu << edit_web if @page.name == "HomePage" + if @page.revisions.length > 1 + menu << back_for_page + menu << see_or_hide_changes_for_page + end + menu + end + + def edit_page + link_text = (@page.name == "HomePage" ? 'Edit Page' : 'Edit') + link_to(link_text, {:web => @web.address, :action => 'edit', :id => @page.name}, + {:class => 'navlink', :accesskey => 'E', :name => 'edit'}) + end + + def edit_web + link_to('Edit Web', {:web => @web.address, :action => 'edit_web'}, + {:class => 'navlink', :accesskey => 'W', :name => 'edit_web'}) + end + + def forward + if @revision_number < @page.revisions.length - 1 + link_to('Forward in time', + {:web => @web.address, :action => 'revision', :id => @page.name, :rev => @revision_number + 1}, + {:class => 'navlink', :accesskey => 'F', :name => 'to_next_revision'}) + + " (#{@revision.page.revisions.length - @revision_number} more) " + else + link_to('Forward in time', {:web => @web.address, :action => 'show', :id => @page.name}, + {:class => 'navlink', :accesskey => 'F', :name => 'to_next_revision'}) + + " (to current)" + end + end + + def back_for_revision + link_to('Back in time', + {:web => @web.address, :action => 'revision', :id => @page.name, :rev => @revision_number - 1}, + {:class => 'navlink', :name => 'to_previous_revision'}) + + " (#{@revision_number - 1} more)" + end + + def back_for_page + link_to('Back in time', + {:web => @web.address, :action => 'revision', :id => @page.name, + :rev => @page.revisions.length - 1}, + {:class => 'navlink', :accesskey => 'B', :name => 'to_previous_revision'}) + + " (#{@page.revisions.length - 1} #{@page.revisions.length - 1 == 1 ? 'revision' : 'revisions'})" + end + + def current_revision + link_to('See current', {:web => @web.address, :action => 'show', :id => @page.name}, + {:class => 'navlink', :name => 'to_current_revision'}) + end + + def see_or_hide_changes_for_revision + link_to(@show_diff ? 'Hide changes' : 'See changes', + {:web => @web.address, :action => 'revision', :id => @page.name, :rev => @revision_number, + :mode => (@show_diff ? nil : 'diff') }, + {:class => 'navlink', :accesskey => 'C', :name => 'see_changes'}) + end + + def see_or_hide_changes_for_page + link_to(@show_diff ? 'Hide changes' : 'See changes', + {:web => @web.address, :action => 'show', :id => @page.name, :mode => (@show_diff ? nil : 'diff') }, + {:class => 'navlink', :accesskey => 'C', :name => 'see_changes'}) + end + + def rollback + link_to('Rollback', + {:web => @web.address, :action => 'rollback', :id => @page.name, :rev => @revision_number}, + {:class => 'navlink', :name => 'rollback'}) + end + + + +end \ No newline at end of file diff --git a/app/views/wiki/page.rhtml b/app/views/wiki/page.rhtml index 169460fe..725f1184 100644 --- a/app/views/wiki/page.rhtml +++ b/app/views/wiki/page.rhtml @@ -5,7 +5,17 @@ %>
- <%= @show_diff ? @renderer.display_diff : @renderer.display_content %> + <% if @show_diff %> +

+ + Showing changes from revision #<%= @page.revisions.size - 1 %> to #<%= @page.revisions.size %>: + Added | Removed + +

+ <%= @renderer.display_diff %> + <% else %> + <%= @renderer.display_content %> + <% end %>
@@ -19,39 +29,9 @@