95 lines
2.4 KiB
Ruby
95 lines
2.4 KiB
Ruby
module Precious
|
|
module Views
|
|
class Compare < Layout
|
|
include HasPage
|
|
|
|
attr_reader :page, :diff, :versions, :message
|
|
|
|
def title
|
|
"Comparison of #{@page.title}"
|
|
end
|
|
|
|
def before
|
|
@versions[0][0..6]
|
|
end
|
|
|
|
def after
|
|
@versions[1][0..6]
|
|
end
|
|
|
|
def lines
|
|
lines = []
|
|
@diff.diff.split("\n")[2..-1].each_with_index do |line, line_index|
|
|
lines << { :line => line,
|
|
:class => line_class(line),
|
|
:ldln => left_diff_line_number(0, line),
|
|
:rdln => right_diff_line_number(0, line) }
|
|
end if @diff
|
|
lines
|
|
end
|
|
|
|
def show_revert
|
|
!@message
|
|
end
|
|
|
|
# private
|
|
|
|
def line_class(line)
|
|
if line =~ /^@@/
|
|
'gc'
|
|
elsif line =~ /^\+/
|
|
'gi'
|
|
elsif line =~ /^\-/
|
|
'gd'
|
|
else
|
|
''
|
|
end
|
|
end
|
|
|
|
@left_diff_line_number = nil
|
|
|
|
def left_diff_line_number(id, line)
|
|
if line =~ /^@@/
|
|
m, li = *line.match(/\-(\d+)/)
|
|
@left_diff_line_number = li.to_i
|
|
@current_line_number = @left_diff_line_number
|
|
ret = '...'
|
|
elsif line[0] == ?-
|
|
ret = @left_diff_line_number.to_s
|
|
@left_diff_line_number += 1
|
|
@current_line_number = @left_diff_line_number - 1
|
|
elsif line[0] == ?+
|
|
ret = ' '
|
|
else
|
|
ret = @left_diff_line_number.to_s
|
|
@left_diff_line_number += 1
|
|
@current_line_number = @left_diff_line_number - 1
|
|
end
|
|
ret
|
|
end
|
|
|
|
@right_diff_line_number = nil
|
|
|
|
def right_diff_line_number(id, line)
|
|
if line =~ /^@@/
|
|
m, ri = *line.match(/\+(\d+)/)
|
|
@right_diff_line_number = ri.to_i
|
|
@current_line_number = @right_diff_line_number
|
|
ret = '...'
|
|
elsif line[0] == ?-
|
|
ret = ' '
|
|
elsif line[0] == ?+
|
|
ret = @right_diff_line_number.to_s
|
|
@right_diff_line_number += 1
|
|
@current_line_number = @right_diff_line_number - 1
|
|
else
|
|
ret = @right_diff_line_number.to_s
|
|
@right_diff_line_number += 1
|
|
@current_line_number = @right_diff_line_number - 1
|
|
end
|
|
ret
|
|
end
|
|
end
|
|
end
|
|
end
|