summaryrefslogtreecommitdiff
path: root/app/helpers/revisions_helper.rb
blob: 25a2aa383df32ecf31a0e5aeab6298d8b069af51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module RevisionsHelper
  # Human-readable label for a diff endpoint -- "head"/"draft"/"autosave"
  # get their name; anything else is a revision number.
  def describe_page_reference(ref)
    %w[head draft autosave].include?(ref.to_s) ? ref.to_s.capitalize : "revision #{ref}"
  end

  def neighbour_revision_pairs node, start_ref, end_ref
    return [nil, nil] unless start_ref.to_s.match?(/\A\d+\z/) &&
                             end_ref.to_s.match?(/\A\d+\z/)

    a, b = start_ref.to_i, end_ref.to_i
    return [nil, nil] unless (a - b).abs == 1

    lo, hi  = [a, b].minmax
    forward = a < b
    earlier = forward ? [lo - 1, lo] : [lo, lo - 1]
    later   = forward ? [hi, hi + 1] : [hi + 1, hi]

    [earlier, later].map do |pair|
      pair if pair.all? { |rev| node.pages.exists?(:revision => rev) }
    end
  end
end