summaryrefslogtreecommitdiff
path: root/app/views/revisions/diff.html.erb
blob: 5638b7ab380ce39f98849f5a5f91c397317eb65e (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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<h1>Revisions#diff</h1>

<p class="node_action_bar standalone_action_bar">
  <%= link_to 'Revisions', node_revisions_path(@node) %>
</p>

<p class="diff_comparison_label">
  Comparing <strong><%= describe_page_reference(params[:start_revision]) %></strong>
  against <strong><%= describe_page_reference(params[:end_revision]) %></strong>
</p>

<p class="diff_view_toggle">
  View:
  <% if @diff_view == :inline %>
    <strong>Inline</strong>
  <% else %>
    <%= link_to 'Inline', diff_node_revisions_path(@node, start_revision: params[:start_revision], end_revision: params[:end_revision], view: 'inline') %>
  <% end %>
  &middot;
  <% if @diff_view == :side_by_side %>
    <strong>Side by side</strong>
  <% else %>
    <%= link_to 'Side by side', diff_node_revisions_path(@node, start_revision: params[:start_revision], end_revision: params[:end_revision], view: 'side_by_side') %>
  <% end %>
</p>

<% numeric_comparison = params[:start_revision].to_s =~ /\A\d+\z/ && params[:end_revision].to_s =~ /\A\d+\z/ %>

<% if numeric_comparison %>
  <%= form_tag diff_node_revisions_path do %>
    <%= select_tag :start_revision, options_for_select(@node.pages.map{|x| x.revision}, params[:start_revision].to_i) %>
    <%= select_tag :end_revision, options_for_select(@node.pages.map{|x| x.revision}, params[:end_revision].to_i) %>
    <%= hidden_field_tag :view, @diff_view %>
    <%= submit_tag 'Diff' %>
  <% end %>
<% else %>
  <p class="node_action_bar standalone_action_bar"><%= link_to 'Compare two numbered revisions instead', node_revisions_path(@node) %></p>
<% end %>

<% if @available_layer_pairs.present? %>
  <p class="node_action_bar standalone_action_bar">
    <% @available_layer_pairs.each do |pair| %>
      <% next if [params[:start_revision].to_s, params[:end_revision].to_s].sort == pair.map(&:to_s).sort %>
      <%= button_to "Diff #{pair.first.to_s.capitalize} vs. #{pair.last.to_s.capitalize}",
            diff_node_revisions_path(@node),
            method: :get,
            params: { start_revision: pair.first, end_revision: pair.last, view: @diff_view },
            form: { class: 'button_to computation' } %>
    <% end %>

    <% if !@locked_by_other && (@node.autosave || @node.draft) %>
      <%= button_to revert_node_path(@node), method: :put,
                  params: { return_to: request.fullpath },
                  form: { data: { confirm: "This cannot be undone. Continue?" }, class: 'button_to destructive' } do %>
        <%= icon("trash", library: "tabler", "aria-hidden": true) %>
        <%= @node.draft && !@node.autosave ? "Destroy Draft" : "Discard Autosave" %>
      <% end %>
    <% end %>
  </p>
<% end %>

<div id="diffview">
  <% if @diff_view == :side_by_side %>
    <div class="diff_side_by_side">
      <div class="diff_column">
        <h3>Title</h3>
        <p><%= raw @diff[:title][0] %></p>
        <h3>Abstract</h3>
        <p><%= raw @diff[:abstract][0] %></p>
        <h3>Body</h3>
        <%= raw @diff[:body][0] %>
      </div>
      <div class="diff_column">
        <h3>Title</h3>
        <p><%= raw @diff[:title][1] %></p>
        <h3>Abstract</h3>
        <p><%= raw @diff[:abstract][1] %></p>
        <h3>Body</h3>
        <%= raw @diff[:body][1] %>
      </div>
    </div>
  <% else %>
    <h3>Title</h3>
    <p><%= raw @diff[:title] %></p>
    <h3>Abstract</h3>
    <p><%= raw @diff[:abstract] %></p>
    <h3>Body</h3>
    <%= raw @diff[:body] %>
  <% end %>

  <h3>Tags</h3>
  <% if @diff[:tags][:added].empty? && @diff[:tags][:removed].empty? %>
    <p class="diff_unchanged">No change.</p>
  <% else %>
    <ul class="diff_set_list">
      <% @diff[:tags][:added].each do |tag| %><li><ins><%= tag %></ins></li><% end %>
      <% @diff[:tags][:removed].each do |tag| %><li><del><%= tag %></del></li><% end %>
    </ul>
  <% end %>

  <h3>Template</h3>
  <% if @diff[:template_name][:changed] %>
    <p><del><%= @diff[:template_name][:from] || '(none)' %></del> <ins><%= @diff[:template_name][:to] || '(none)' %></ins></p>
  <% else %>
    <p class="diff_unchanged">No change.</p>
  <% end %>

  <h3>Assets</h3>
  <% if @diff[:assets][:added].empty? && @diff[:assets][:removed].empty? %>
    <p class="diff_unchanged">No change.</p>
  <% else %>
    <ul class="diff_set_list">
      <% @diff[:assets][:added].each do |asset| %><li><ins><%= asset.upload_file_name %></ins></li><% end %>
      <% @diff[:assets][:removed].each do |asset| %><li><del><%= asset.upload_file_name %></del></li><% end %>
    </ul>
  <% end %>
</div>