2013-05-13 04:04:03 -04:00
|
|
|
require 'diffy'
|
2013-02-25 11:42:20 -05:00
|
|
|
# This class is used to generate diffs, it will be consumed by the UI on
|
2013-02-23 00:30:02 -05:00
|
|
|
# on the client the displays diffs.
|
|
|
|
#
|
2013-03-15 20:31:51 -04:00
|
|
|
# There are potential performance issues associated with diffing large amounts of completely
|
|
|
|
# different text, see answer here for optimization if needed
|
|
|
|
# http://meta.stackoverflow.com/questions/127497/suggested-edit-diff-shows-different-results-depending-upon-mode
|
2013-02-23 00:30:02 -05:00
|
|
|
|
|
|
|
class DiffEngine
|
2013-02-25 11:42:20 -05:00
|
|
|
|
2013-03-15 20:31:51 -04:00
|
|
|
# generate an html friendly diff similar to the way Stack Exchange generates
|
|
|
|
# html diffs
|
2013-02-23 00:30:02 -05:00
|
|
|
#
|
2013-03-06 02:52:24 -05:00
|
|
|
# returns: html containing decorations indicating the changes
|
2013-02-23 00:30:02 -05:00
|
|
|
def self.html_diff(html_before, html_after)
|
2013-07-23 14:42:52 -04:00
|
|
|
Diffy::Diff.new(html_before, html_after, {allow_empty_diff: false}).to_s(:html)
|
2013-02-23 00:30:02 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
# same as html diff, except that it operates on markdown
|
|
|
|
#
|
|
|
|
# returns html containing decorated areas where diff happened
|
|
|
|
def self.markdown_diff(markdown_before, markdown_after)
|
2013-03-15 20:31:51 -04:00
|
|
|
Diffy::Diff.new(markdown_before, markdown_after).to_s(:html)
|
2013-02-23 00:30:02 -05:00
|
|
|
end
|
|
|
|
end
|