Commit 2253cc6652cb77781b7cd71fd9dfa2773858a1db

Authored by Junior Silva
1 parent 111ae542

diff-article-versions: display differences between two article versions

AI2822
app/controllers/public/content_viewer_controller.rb
@@ -124,8 +124,11 @@ class ContentViewerController < ApplicationController @@ -124,8 +124,11 @@ class ContentViewerController < ApplicationController
124 end 124 end
125 end 125 end
126 126
127 - def differences_between_article_versions(version1, version2)  
128 - Diffy::Diff.new('version1', 'version2').to_s(:html) 127 + def versions_diff
  128 + path = params[:page].join('/')
  129 + @page = profile.articles.find_by_path(path)
  130 + @v1, @v2 = @page.versions.find_by_version(params[:v1]).body, @page.versions.find_by_version(params[:v2]).body
  131 + p params
129 end 132 end
130 133
131 def article_versions 134 def article_versions
app/views/content_viewer/article_versions.rhtml
@@ -2,19 +2,20 @@ @@ -2,19 +2,20 @@
2 2
3 <p><%= _('This is the list of all versions of this content. Select a version to see it and then revert to it.') %>.</p> 3 <p><%= _('This is the list of all versions of this content. Select a version to see it and then revert to it.') %>.</p>
4 4
5 -<ul class='article-versions'>  
6 - <% @versions.each do |v| %>  
7 - <li>  
8 - <%= radio_button_tag :first, "#{v.version}" %>  
9 - <%= radio_button_tag :end, "#{v.version}" %>  
10 - <%= link_to(_("Version #{v.version}"), @page.url.merge(:version => v.version)) %>  
11 - <%= @page.version == v.version ? _('(current)') : '' %>  
12 - <span class='updated-by'><%= _('by %{author}') % {:author => link_to(@page.author_name(v.version), @page.author_url)} %></span>  
13 - <div class='updated-on'><%= show_time(v.updated_at) %></div>  
14 - </li>  
15 - <% end %>  
16 -</ul> 5 +<% form_tag({:controller => 'content_viewer', :action => 'versions_diff', :profile => profile.identifier, :page => @page.path.split('/')}) do %>
  6 + <ul class='article-versions'>
  7 + <% @versions.each do |v| %>
  8 + <li>
  9 + <%= radio_button_tag 'v1', v.version %>
  10 + <%= radio_button_tag 'v2', v.version %>
  11 + <%= link_to(_("Version #{v.version}"), @page.url.merge(:version => v.version)) %>
  12 + <%= @page.version == v.version ? _('(current)') : '' %>
  13 + <span class='updated-by'><%= _('by %{author}') % {:author => link_to(@page.author_name(v.version), @page.author_url)} %></span>
  14 + <div class='updated-on'><%= show_time(v.updated_at) %></div>
  15 + </li>
  16 + <% end %>
  17 + </ul>
17 18
18 -<%= button_to "Show differences between selected versions", :id => "diff-versions",  
19 - :class => "diff-versions", :method => :get %> 19 + <%= submit_button(:search, _('Show differences between selected versions')) %>
  20 +<% end %>
20 <%= pagination_links @versions, :param_name => 'npage' %> 21 <%= pagination_links @versions, :param_name => 'npage' %>
config/routes.rb
@@ -129,6 +129,9 @@ ActionController::Routing::Routes.draw do |map| @@ -129,6 +129,9 @@ ActionController::Routing::Routes.draw do |map|
129 map.connect ':profile/*page/versions', :controller => 'content_viewer', :action => 'article_versions', :profile => /#{Noosfero.identifier_format}/, :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } } 129 map.connect ':profile/*page/versions', :controller => 'content_viewer', :action => 'article_versions', :profile => /#{Noosfero.identifier_format}/, :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } }
130 map.connect '*page/versions', :controller => 'content_viewer', :action => 'article_versions' 130 map.connect '*page/versions', :controller => 'content_viewer', :action => 'article_versions'
131 131
  132 + map.connect ':profile/*page/versions_diff', :controller => 'content_viewer', :action => 'versions_diff', :profile => /#{Noosfero.identifier_format}/, :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } }
  133 + map.connect '*page/versions_diff', :controller => 'content_viewer', :action => 'versions_diff'
  134 +
132 # match requests for profiles that don't have a custom domain 135 # match requests for profiles that don't have a custom domain
133 map.homepage ':profile/*page', :controller => 'content_viewer', :action => 'view_page', :profile => /#{Noosfero.identifier_format}/, :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } } 136 map.homepage ':profile/*page', :controller => 'content_viewer', :action => 'view_page', :profile => /#{Noosfero.identifier_format}/, :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } }
134 137