diff options
Diffstat (limited to 'app/controllers/revisions_controller.rb')
| -rw-r--r-- | app/controllers/revisions_controller.rb | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/app/controllers/revisions_controller.rb b/app/controllers/revisions_controller.rb index 42d667e..0aed243 100644 --- a/app/controllers/revisions_controller.rb +++ b/app/controllers/revisions_controller.rb | |||
| @@ -13,16 +13,31 @@ class RevisionsController < ApplicationController | |||
| 13 | 13 | ||
| 14 | def diff | 14 | def diff |
| 15 | @node = Node.find(params[:node_id]) | 15 | @node = Node.find(params[:node_id]) |
| 16 | 16 | ||
| 17 | if @node.pages.length > 1 | 17 | if @node.pages.length > 1 |
| 18 | params[:start_revision] ||= @node.pages.all[-2].revision | 18 | params[:start_revision] ||= @node.pages.all[-2].revision |
| 19 | params[:end_revision] ||= @node.pages.all[-1].revision | 19 | params[:end_revision] ||= @node.pages.all[-1].revision |
| 20 | else | 20 | else |
| 21 | params[:start], params[:end] = 1, 1 | 21 | params[:start_revision], params[:end_revision] = 1, 1 |
| 22 | end | ||
| 23 | |||
| 24 | @start = @node.resolve_page_reference(params[:start_revision]) | ||
| 25 | @end = @node.resolve_page_reference(params[:end_revision]) | ||
| 26 | |||
| 27 | if @start.nil? || @end.nil? | ||
| 28 | flash[:error] = "That comparison is no longer available." | ||
| 29 | redirect_to(node_path(@node)) and return | ||
| 22 | end | 30 | end |
| 23 | 31 | ||
| 24 | @start = @node.pages.find_by_revision( params[:start_revision] ) | 32 | @locale_summary = @end.locale_diff_summary(@start) |
| 25 | @end = @node.pages.find_by_revision( params[:end_revision] ) | 33 | requested_locale = params[:locale].presence&.to_sym |
| 34 | default_locale = @locale_summary.find { |s| s[:changed] }&.dig(:locale) || I18n.default_locale | ||
| 35 | @locale = @locale_summary.any? { |s| s[:locale] == requested_locale } ? requested_locale : default_locale | ||
| 36 | |||
| 37 | @diff_view = params[:view] == "side_by_side" ? :side_by_side : :inline | ||
| 38 | @diff = @end.diff_against(@start, view: @diff_view, locale: @locale) | ||
| 39 | @available_layer_pairs = @node.available_layer_pairs | ||
| 40 | @locked_by_other = @node.locked? && @node.lock_owner != current_user | ||
| 26 | end | 41 | end |
| 27 | 42 | ||
| 28 | def show | 43 | def show |
