26 lines
973 B
Ruby
26 lines
973 B
Ruby
require 'diffy'
|
|
# This class is used to generate diffs, it will be consumed by the UI on
|
|
# on the client the displays diffs.
|
|
#
|
|
# 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
|
|
|
|
class DiffEngine
|
|
|
|
# generate an html friendly diff similar to the way Stack Exchange generates
|
|
# html diffs
|
|
#
|
|
# returns: html containing decorations indicating the changes
|
|
def self.html_diff(html_before, html_after)
|
|
Diffy::Diff.new(html_before, html_after, {allow_empty_diff: false}).to_s(:html)
|
|
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)
|
|
Diffy::Diff.new(markdown_before, markdown_after).to_s(:html)
|
|
end
|
|
end
|