summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/models/page.rb6
-rw-r--r--app/views/revisions/diff.html.erb133
2 files changed, 87 insertions, 52 deletions
diff --git a/app/models/page.rb b/app/models/page.rb
index 3240057f..c2dc227b 100644
--- a/app/models/page.rb
+++ b/app/models/page.rb
@@ -277,6 +277,12 @@ class Page < ApplicationRecord
277 277
278 text_diffs.merge( 278 text_diffs.merge(
279 address: address_diff_against(other), 279 address: address_diff_against(other),
280 external_url: { from: other.external_url, to: external_url,
281 changed: external_url.presence != other.external_url.presence },
282 published_at: { from: other.published_at, to: published_at,
283 changed: published_at != other.published_at },
284 user: { from: other.user, to: user,
285 changed: user_id != other.user_id },
280 tags: { added: tag_list.to_a - other.tag_list.to_a, removed: other.tag_list.to_a - tag_list.to_a }, 286 tags: { added: tag_list.to_a - other.tag_list.to_a, removed: other.tag_list.to_a - tag_list.to_a },
281 template_name: { from: other.template_name, to: template_name, changed: template_name != other.template_name }, 287 template_name: { from: other.template_name, to: template_name, changed: template_name != other.template_name },
282 assets: { added: assets.to_a - other.assets.to_a, removed: other.assets.to_a - assets.to_a } 288 assets: { added: assets.to_a - other.assets.to_a, removed: other.assets.to_a - assets.to_a }
diff --git a/app/views/revisions/diff.html.erb b/app/views/revisions/diff.html.erb
index 0fd9ccb9..25f5ad04 100644
--- a/app/views/revisions/diff.html.erb
+++ b/app/views/revisions/diff.html.erb
@@ -48,7 +48,6 @@
48 </p> 48 </p>
49<% end %> 49<% end %>
50 50
51
52<% if @available_layer_pairs.present? %> 51<% if @available_layer_pairs.present? %>
53 <div class="node_action_bar standalone_action_bar"> 52 <div class="node_action_bar standalone_action_bar">
54 <% @available_layer_pairs.each do |pair| %> 53 <% @available_layer_pairs.each do |pair| %>
@@ -71,21 +70,88 @@
71<% end %> 70<% end %>
72 71
73<div id="diffview"> 72<div id="diffview">
74 <% current_summary = @locale_summary.find { |s| s[:locale] == @translation_locale } %> 73 <% meta_changed = @diff[:address][:changed] || @diff[:external_url][:changed] ||
75 <% if current_summary && !current_summary[:changed] %> 74 @diff[:template_name][:changed] ||
76 <% elsewhere = @locale_summary.select { |s| s[:changed] }.map { |s| 75 @diff[:published_at][:changed] || @diff[:user][:changed] ||
77 link_to s[:locale].to_s.upcase, diff_node_revisions_path(@node, 76 @diff[:tags][:added].any? || @diff[:tags][:removed].any? ||
78 start_revision: params[:start_revision], end_revision: params[:end_revision], 77 @diff[:assets][:added].any? || @diff[:assets][:removed].any? %>
79 view: @diff_view, translation_locale: s[:locale]) } %> 78
80 <p class="diff_unchanged diff_locale_pointer"> 79 <div class="diff_preamble">
81 <% if elsewhere.any? %> 80 <div class="diff_meta">
82 <%= t(".unchanged_here_html", :lang => @translation_locale.to_s.upcase, 81 <% unless meta_changed %>
83 :others => safe_join(elsewhere, ", ")) %> 82 <p class="diff_unchanged"><%= t(".no_metadata_change") %></p>
84 <% else %> 83 <% end %>
85 <%= t(".unchanged_anywhere") %> 84
85 <% if @diff[:address][:changed] %>
86 <h3><%= t(".address") %></h3>
87 <p>
88 <del><%= @diff[:address][:from] || t(".none_marker") %></del>
89 <ins><%= @diff[:address][:to] || t(".none_marker") %></ins>
90 </p>
91 <% end %>
92
93 <% if @diff[:external_url][:changed] %>
94 <h3><%= Page.human_attribute_name(:external_url) %></h3>
95 <p>
96 <del><%= @diff[:external_url][:from].presence || t(".none_marker") %></del>
97 <ins><%= @diff[:external_url][:to].presence || t(".none_marker") %></ins>
98 </p>
99 <% end %>
100
101 <% if @diff[:published_at][:changed] %>
102 <h3><%= Page.human_attribute_name(:published_at) %></h3>
103 <p>
104 <del><%= @diff[:published_at][:from] ? admin_datetime(@diff[:published_at][:from]) : t(".none_marker") %></del>
105 <ins><%= @diff[:published_at][:to] ? admin_datetime(@diff[:published_at][:to]) : t(".none_marker") %></ins>
106 </p>
86 <% end %> 107 <% end %>
87 </p> 108
88 <% end %> 109 <% if @diff[:user][:changed] %>
110 <h3><%= Page.human_attribute_name(:user) %></h3>
111 <p>
112 <del><%= @diff[:user][:from]&.login || t(".none_marker") %></del>
113 <ins><%= @diff[:user][:to]&.login || t(".none_marker") %></ins>
114 </p>
115 <% end %>
116
117 <% if @diff[:tags][:added].any? || @diff[:tags][:removed].any? %>
118 <h3><%= Page.human_attribute_name(:tag_list) %></h3>
119 <ul class="diff_set_list">
120 <% @diff[:tags][:added].each do |tag| %><li><ins><%= tag %></ins></li><% end %>
121 <% @diff[:tags][:removed].each do |tag| %><li><del><%= tag %></del></li><% end %>
122 </ul>
123 <% end %>
124
125 <% if @diff[:template_name][:changed] %>
126 <h3><%= Page.human_attribute_name(:template_name) %></h3>
127 <p><del><%= @diff[:template_name][:from] || t(".none_marker") %></del> <ins><%= @diff[:template_name][:to] || t(".none_marker") %></ins></p>
128 <% end %>
129
130 <% if @diff[:assets][:added].any? || @diff[:assets][:removed].any? %>
131 <h3><%= Page.human_attribute_name(:assets) %></h3>
132 <ul class="diff_set_list">
133 <% @diff[:assets][:added].each do |asset| %><li><ins><%= asset.upload_file_name %></ins></li><% end %>
134 <% @diff[:assets][:removed].each do |asset| %><li><del><%= asset.upload_file_name %></del></li><% end %>
135 </ul>
136 <% end %>
137 </div>
138
139 <% current_summary = @locale_summary.find { |s| s[:locale] == @translation_locale } %>
140 <% if current_summary && !current_summary[:changed] %>
141 <% elsewhere = @locale_summary.select { |s| s[:changed] }.map { |s|
142 link_to s[:locale].to_s.upcase, diff_node_revisions_path(@node,
143 start_revision: params[:start_revision], end_revision: params[:end_revision],
144 view: @diff_view, translation_locale: s[:locale]) } %>
145 <p class="diff_unchanged diff_locale_pointer">
146 <% if elsewhere.any? %>
147 <%= t(".unchanged_here_html", :lang => @translation_locale.to_s.upcase,
148 :others => safe_join(elsewhere, ", ")) %>
149 <% else %>
150 <%= t(".unchanged_anywhere") %>
151 <% end %>
152 </p>
153 <% end %>
154 </div>
89 155
90 <% if @diff_view == :side_by_side %> 156 <% if @diff_view == :side_by_side %>
91 <div class="diff_side_by_side"> 157 <div class="diff_side_by_side">
@@ -114,41 +180,4 @@
114 <h3><%= Page.human_attribute_name(:body) %></h3> 180 <h3><%= Page.human_attribute_name(:body) %></h3>
115 <%= raw @diff[:body] %> 181 <%= raw @diff[:body] %>
116 <% end %> 182 <% end %>
117
118 <h3><%= t(".address") %></h3>
119 <% if @diff[:address][:changed] %>
120 <p>
121 <del><%= @diff[:address][:from] || t(".none_marker") %></del>
122 <ins><%= @diff[:address][:to] || t(".none_marker") %></ins>
123 </p>
124 <% else %>
125 <p class="diff_unchanged"><%= t(".no_change") %></p>
126 <% end %>
127
128 <h3><%= Page.human_attribute_name(:tag_list) %></h3>
129 <% if @diff[:tags][:added].empty? && @diff[:tags][:removed].empty? %>
130 <p class="diff_unchanged"><%= t(".no_change") %></p>
131 <% else %>
132 <ul class="diff_set_list">
133 <% @diff[:tags][:added].each do |tag| %><li><ins><%= tag %></ins></li><% end %>
134 <% @diff[:tags][:removed].each do |tag| %><li><del><%= tag %></del></li><% end %>
135 </ul>
136 <% end %>
137
138 <h3><%= Page.human_attribute_name(:template_name) %></h3>
139 <% if @diff[:template_name][:changed] %>
140 <p><del><%= @diff[:template_name][:from] || t(".none_marker") %></del> <ins><%= @diff[:template_name][:to] || t(".none_marker") %></ins></p>
141 <% else %>
142 <p class="diff_unchanged"><%= t(".no_change") %></p>
143 <% end %>
144
145 <h3><%= Page.human_attribute_name(:assets) %></h3>
146 <% if @diff[:assets][:added].empty? && @diff[:assets][:removed].empty? %>
147 <p class="diff_unchanged"><%= t(".no_change") %></p>
148 <% else %>
149 <ul class="diff_set_list">
150 <% @diff[:assets][:added].each do |asset| %><li><ins><%= asset.upload_file_name %></ins></li><% end %>
151 <% @diff[:assets][:removed].each do |asset| %><li><del><%= asset.upload_file_name %></del></li><% end %>
152 </ul>
153 <% end %>
154</div> 183</div>