Mercurial > hg > soundsoftware-site
comparison lib/redmine/helpers/.svn/text-base/diff.rb.svn-base @ 245:051f544170fe
* Update to SVN trunk revision 4993
| author | Chris Cannam |
|---|---|
| date | Thu, 03 Mar 2011 11:42:28 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 244:8972b600f4fb | 245:051f544170fe |
|---|---|
| 1 # Redmine - project management software | |
| 2 # Copyright (C) 2006-2011 Jean-Philippe Lang | |
| 3 # | |
| 4 # This program is free software; you can redistribute it and/or | |
| 5 # modify it under the terms of the GNU General Public License | |
| 6 # as published by the Free Software Foundation; either version 2 | |
| 7 # of the License, or (at your option) any later version. | |
| 8 # | |
| 9 # This program is distributed in the hope that it will be useful, | |
| 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 12 # GNU General Public License for more details. | |
| 13 # | |
| 14 # You should have received a copy of the GNU General Public License | |
| 15 # along with this program; if not, write to the Free Software | |
| 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
| 17 | |
| 18 module Redmine | |
| 19 module Helpers | |
| 20 class Diff | |
| 21 include ERB::Util | |
| 22 include ActionView::Helpers::TagHelper | |
| 23 include ActionView::Helpers::TextHelper | |
| 24 attr_reader :diff, :words | |
| 25 | |
| 26 def initialize(content_to, content_from) | |
| 27 @words = content_to.to_s.split(/(\s+)/) | |
| 28 @words = @words.select {|word| word != ' '} | |
| 29 words_from = content_from.to_s.split(/(\s+)/) | |
| 30 words_from = words_from.select {|word| word != ' '} | |
| 31 @diff = words_from.diff @words | |
| 32 end | |
| 33 | |
| 34 def to_html | |
| 35 words = self.words.collect{|word| h(word)} | |
| 36 words_add = 0 | |
| 37 words_del = 0 | |
| 38 dels = 0 | |
| 39 del_off = 0 | |
| 40 diff.diffs.each do |diff| | |
| 41 add_at = nil | |
| 42 add_to = nil | |
| 43 del_at = nil | |
| 44 deleted = "" | |
| 45 diff.each do |change| | |
| 46 pos = change[1] | |
| 47 if change[0] == "+" | |
| 48 add_at = pos + dels unless add_at | |
| 49 add_to = pos + dels | |
| 50 words_add += 1 | |
| 51 else | |
| 52 del_at = pos unless del_at | |
| 53 deleted << ' ' + h(change[2]) | |
| 54 words_del += 1 | |
| 55 end | |
| 56 end | |
| 57 if add_at | |
| 58 words[add_at] = '<span class="diff_in">' + words[add_at] | |
| 59 words[add_to] = words[add_to] + '</span>' | |
| 60 end | |
| 61 if del_at | |
| 62 words.insert del_at - del_off + dels + words_add, '<span class="diff_out">' + deleted + '</span>' | |
| 63 dels += 1 | |
| 64 del_off += words_del | |
| 65 words_del = 0 | |
| 66 end | |
| 67 end | |
| 68 words.join(' ') | |
| 69 end | |
| 70 end | |
| 71 end | |
| 72 end |
