]> source.dussan.org Git - redmine.git/commitdiff
Extracts a diff helper from the WikiDiff class.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 27 Feb 2011 12:35:31 +0000 (12:35 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 27 Feb 2011 12:35:31 +0000 (12:35 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4952 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/wiki_helper.rb
app/models/wiki_page.rb
app/views/wiki/diff.rhtml
lib/redmine/helpers/diff.rb [new file with mode: 0644]

index 19e252bcb4f12eb578b3da0ec57ca0c542b81469..32225d83ef0de0886f6ca64d4e1cc7dc49e83eb1 100644 (file)
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -29,41 +29,4 @@ module WikiHelper
     end
     s
   end
-  
-  def html_diff(wdiff)
-    words = wdiff.words.collect{|word| h(word)}
-    words_add = 0
-    words_del = 0
-    dels = 0
-    del_off = 0
-    wdiff.diff.diffs.each do |diff|
-      add_at = nil
-      add_to = nil
-      del_at = nil
-      deleted = ""         
-      diff.each do |change|
-        pos = change[1]
-        if change[0] == "+"
-          add_at = pos + dels unless add_at
-          add_to = pos + dels
-          words_add += 1
-        else
-          del_at = pos unless del_at
-          deleted << ' ' + h(change[2])
-          words_del     += 1
-        end
-      end
-      if add_at
-        words[add_at] = '<span class="diff_in">' + words[add_at]
-        words[add_to] = words[add_to] + '</span>'
-      end
-      if del_at
-        words.insert del_at - del_off + dels + words_add, '<span class="diff_out">' + deleted + '</span>'
-        dels += 1
-        del_off += words_del
-        words_del = 0
-      end
-    end
-    simple_format_without_paragraph(words.join(' '))
-  end
 end
index b65da2b77a9ef2ad79e61555b58d54e6c9e80c9a..8cd836a31a4920816db310451c16e2223b5a6e40 100644 (file)
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -149,17 +149,13 @@ class WikiPage < ActiveRecord::Base
   end
 end
 
-class WikiDiff
-  attr_reader :diff, :words, :content_to, :content_from
+class WikiDiff < Redmine::Helpers::Diff
+  attr_reader :content_to, :content_from
   
   def initialize(content_to, content_from)
     @content_to = content_to
     @content_from = content_from
-    @words = content_to.text.split(/(\s+)/)
-    @words = @words.select {|word| word != ' '}
-    words_from = content_from.text.split(/(\s+)/)
-    words_from = words_from.select {|word| word != ' '}    
-    @diff = words_from.diff @words
+    super(content_to.text, content_from.text)
   end
 end
 
index 264c677b0b004a455e16ba7cdb1d6317c155b745..11afc59301387aec4520141d7eb905264504a844 100644 (file)
@@ -12,6 +12,6 @@
 <em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em>
 </p>
 
-<hr />
-
-<%= html_diff(@diff) %>
+<div class="text-diff">
+<%= @diff.to_html %>
+</div>
diff --git a/lib/redmine/helpers/diff.rb b/lib/redmine/helpers/diff.rb
new file mode 100644 (file)
index 0000000..24deb3d
--- /dev/null
@@ -0,0 +1,72 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+module Redmine
+  module Helpers
+    class Diff
+      include ERB::Util
+      include ActionView::Helpers::TagHelper
+      include ActionView::Helpers::TextHelper
+      attr_reader :diff, :words
+      
+      def initialize(content_to, content_from)
+        @words = content_to.to_s.split(/(\s+)/)
+        @words = @words.select {|word| word != ' '}
+        words_from = content_from.to_s.split(/(\s+)/)
+        words_from = words_from.select {|word| word != ' '}    
+        @diff = words_from.diff @words
+      end
+  
+      def to_html
+        words = self.words.collect{|word| h(word)}
+        words_add = 0
+        words_del = 0
+        dels = 0
+        del_off = 0
+        diff.diffs.each do |diff|
+          add_at = nil
+          add_to = nil
+          del_at = nil
+          deleted = ""      
+          diff.each do |change|
+            pos = change[1]
+            if change[0] == "+"
+              add_at = pos + dels unless add_at
+              add_to = pos + dels
+              words_add += 1
+            else
+              del_at = pos unless del_at
+              deleted << ' ' + h(change[2])
+              words_del  += 1
+            end
+          end
+          if add_at
+            words[add_at] = '<span class="diff_in">' + words[add_at]
+            words[add_to] = words[add_to] + '</span>'
+          end
+          if del_at
+            words.insert del_at - del_off + dels + words_add, '<span class="diff_out">' + deleted + '</span>'
+            dels += 1
+            del_off += words_del
+            words_del = 0
+          end
+        end
+        simple_format(words.join(' '))
+      end
+    end
+  end
+end