diff options
Diffstat (limited to 'app/views/revisions/diff.html.erb')
| -rw-r--r-- | app/views/revisions/diff.html.erb | 177 |
1 files changed, 123 insertions, 54 deletions
diff --git a/app/views/revisions/diff.html.erb b/app/views/revisions/diff.html.erb index b8d061d..7e7b729 100644 --- a/app/views/revisions/diff.html.erb +++ b/app/views/revisions/diff.html.erb | |||
| @@ -1,65 +1,134 @@ | |||
| 1 | <% content_for :subnavigation do %> | ||
| 2 | <%= link_to 'Edit', edit_node_path(@node) %> | ||
| 3 | <%= link_to 'Revisions', node_revisions_path(@node) %> | ||
| 4 | <% end %> | ||
| 5 | |||
| 6 | <h1>Revisions#diff</h1> | 1 | <h1>Revisions#diff</h1> |
| 7 | 2 | ||
| 8 | <%= form_tag diff_node_revisions_path do %> | 3 | <p class="node_action_bar standalone_action_bar"> |
| 9 | <%= select_tag :start_revision, options_for_select(@node.pages.map{|x| x.revision}, params[:start_revision].to_i) %> | 4 | <%= link_to 'Revisions', node_revisions_path(@node) %> |
| 10 | <%= select_tag :end_revision, options_for_select(@node.pages.map{|x| x.revision}, params[:end_revision].to_i) %> | 5 | </p> |
| 11 | <%= submit_tag 'Diff' %> | ||
| 12 | <% end %> | ||
| 13 | 6 | ||
| 14 | <div id="start_title" style="display: none;"> | 7 | <p class="diff_comparison_label"> |
| 15 | <%= h(@start.title) %> | 8 | Comparing <strong><%= describe_page_reference(params[:start_revision]) %></strong> |
| 16 | </div> | 9 | against <strong><%= describe_page_reference(params[:end_revision]) %></strong> |
| 10 | — showing the <strong><%= @locale.to_s.upcase %></strong> translation | ||
| 11 | </p> | ||
| 17 | 12 | ||
| 18 | <div id="end_title" style="display: none;"> | 13 | <% if @locale_summary.size > 1 %> |
| 19 | <%= h(@end.title) %> | 14 | <p class="diff_locale_toggle"> |
| 20 | </div> | 15 | Locale: |
| 16 | <% @locale_summary.each_with_index do |s, i| %> | ||
| 17 | <%= " · ".html_safe if i > 0 %> | ||
| 18 | <% label = "#{s[:locale].to_s.upcase}#{' *' if s[:changed]}" %> | ||
| 19 | <% if s[:locale] == @locale %> | ||
| 20 | <strong><%= label %></strong> | ||
| 21 | <% else %> | ||
| 22 | <%= link_to label, diff_node_revisions_path(@node, start_revision: params[:start_revision], end_revision: params[:end_revision], view: @diff_view, locale: s[:locale]) %> | ||
| 23 | <% end %> | ||
| 24 | <% end %> | ||
| 25 | </p> | ||
| 26 | <p class="field_hint">* has a difference between these two versions.</p> | ||
| 27 | <% end %> | ||
| 21 | 28 | ||
| 22 | <div id="start_abstract" style="display: none;"> | 29 | <p class="diff_view_toggle"> |
| 23 | <%= h(@start.abstract) %> | 30 | View: |
| 24 | </div> | 31 | <% if @diff_view == :inline %> |
| 32 | <strong>Inline</strong> | ||
| 33 | <% else %> | ||
| 34 | <%= link_to 'Inline', diff_node_revisions_path(@node, start_revision: params[:start_revision], end_revision: params[:end_revision], view: 'inline', locale: @locale) %> | ||
| 35 | <% end %> | ||
| 36 | · | ||
| 37 | <% if @diff_view == :side_by_side %> | ||
| 38 | <strong>Side by side</strong> | ||
| 39 | <% else %> | ||
| 40 | <%= link_to 'Side by side', diff_node_revisions_path(@node, start_revision: params[:start_revision], end_revision: params[:end_revision], view: 'side_by_side', locale: @locale) %> | ||
| 41 | <% end %> | ||
| 42 | </p> | ||
| 25 | 43 | ||
| 26 | <div id="end_abstract" style="display: none;"> | 44 | <% numeric_comparison = params[:start_revision].to_s =~ /\A\d+\z/ && params[:end_revision].to_s =~ /\A\d+\z/ %> |
| 27 | <%= h(@end.abstract) %> | ||
| 28 | </div> | ||
| 29 | 45 | ||
| 30 | <pre> | 46 | <% if numeric_comparison %> |
| 31 | <div id="start_body" style="display: none;"> | 47 | <%= form_tag diff_node_revisions_path do %> |
| 32 | <%= (@start.body) %> | 48 | <%= select_tag :start_revision, options_for_select(@node.pages.map{|x| x.revision}, params[:start_revision].to_i) %> |
| 33 | </div> | 49 | <%= select_tag :end_revision, options_for_select(@node.pages.map{|x| x.revision}, params[:end_revision].to_i) %> |
| 34 | </pre> | 50 | <%= hidden_field_tag :view, @diff_view %> |
| 35 | <pre> | 51 | <%= hidden_field_tag :locale, @locale %> |
| 36 | <div id="end_body" style="display: none;"> | 52 | <%= submit_tag 'Diff' %> |
| 37 | <%= (@end.body) %> | 53 | <% end %> |
| 38 | </div> | 54 | <% else %> |
| 39 | </pre> | 55 | <p class="node_action_bar standalone_action_bar"><%= link_to 'Compare two numbered revisions instead', node_revisions_path(@node) %></p> |
| 56 | <% end %> | ||
| 40 | 57 | ||
| 41 | <script src="/javascripts/cacycle_diff.js"></script> | 58 | <% if @available_layer_pairs.present? %> |
| 42 | <script type="text/javascript" charset="utf-8"> | 59 | <div class="node_action_bar standalone_action_bar"> |
| 43 | window.onload = function() { | 60 | <% @available_layer_pairs.each do |pair| %> |
| 44 | title1 = document.getElementById('start_title').innerHTML; | 61 | <% next if [params[:start_revision].to_s, params[:end_revision].to_s].sort == pair.map(&:to_s).sort %> |
| 45 | title2 = document.getElementById('end_title').innerHTML; | 62 | <%= button_to "Diff #{pair.first.to_s.capitalize} vs. #{pair.last.to_s.capitalize}", |
| 46 | abstract1 = document.getElementById('start_abstract').innerHTML; | 63 | diff_node_revisions_path(@node), |
| 47 | abstract2 = document.getElementById('end_abstract').innerHTML; | 64 | method: :get, |
| 48 | body1 = document.getElementById('start_body').innerHTML; | 65 | params: { start_revision: pair.first, end_revision: pair.last, view: @diff_view, locale: @locale }, |
| 49 | body2 = document.getElementById('end_body').innerHTML; | 66 | form: { class: 'button_to computation' } %> |
| 50 | document.getElementById('diffview_title').innerHTML = WDiffString(title1, title2); | 67 | <% end %> |
| 51 | document.getElementById('diffview_abstract').innerHTML = WDiffString(abstract1, abstract2); | 68 | <% if !@locked_by_other && (@node.autosave || @node.draft) %> |
| 52 | document.getElementById('diffview_body').innerHTML = WDiffString(body1, body2); | 69 | <%= button_to revert_node_path(@node), method: :put, |
| 53 | } | 70 | params: { return_to: request.fullpath }, |
| 54 | </script> | 71 | form: { data: { confirm: "This cannot be undone. Continue?" }, class: 'button_to destructive' } do %> |
| 72 | <%= icon("trash", library: "tabler", "aria-hidden": true) %> | ||
| 73 | <%= @node.draft && !@node.autosave ? "Destroy Draft" : "Discard Autosave" %> | ||
| 74 | <% end %> | ||
| 75 | <% end %> | ||
| 76 | </div> | ||
| 77 | <% end %> | ||
| 55 | 78 | ||
| 56 | <div id="diffview"> | 79 | <div id="diffview"> |
| 57 | <h3>Title</h3> | 80 | <% if @diff_view == :side_by_side %> |
| 58 | <p id="diffview_title"></p> | 81 | <div class="diff_side_by_side"> |
| 59 | 82 | <div class="diff_column"> | |
| 60 | <h3>Abstract</h3> | 83 | <h3>Title</h3> |
| 61 | <p id="diffview_abstract"></p> | 84 | <p><%= raw @diff[:title][0] %></p> |
| 62 | 85 | <h3>Abstract</h3> | |
| 63 | <h3>Body</h3> | 86 | <p><%= raw @diff[:abstract][0] %></p> |
| 64 | <p id="diffview_body"></p> | 87 | <h3>Body</h3> |
| 88 | <%= raw @diff[:body][0] %> | ||
| 89 | </div> | ||
| 90 | <div class="diff_column"> | ||
| 91 | <h3>Title</h3> | ||
| 92 | <p><%= raw @diff[:title][1] %></p> | ||
| 93 | <h3>Abstract</h3> | ||
| 94 | <p><%= raw @diff[:abstract][1] %></p> | ||
| 95 | <h3>Body</h3> | ||
| 96 | <%= raw @diff[:body][1] %> | ||
| 97 | </div> | ||
| 98 | </div> | ||
| 99 | <% else %> | ||
| 100 | <h3>Title</h3> | ||
| 101 | <p><%= raw @diff[:title] %></p> | ||
| 102 | <h3>Abstract</h3> | ||
| 103 | <p><%= raw @diff[:abstract] %></p> | ||
| 104 | <h3>Body</h3> | ||
| 105 | <%= raw @diff[:body] %> | ||
| 106 | <% end %> | ||
| 107 | |||
| 108 | <h3>Tags</h3> | ||
| 109 | <% if @diff[:tags][:added].empty? && @diff[:tags][:removed].empty? %> | ||
| 110 | <p class="diff_unchanged">No change.</p> | ||
| 111 | <% else %> | ||
| 112 | <ul class="diff_set_list"> | ||
| 113 | <% @diff[:tags][:added].each do |tag| %><li><ins><%= tag %></ins></li><% end %> | ||
| 114 | <% @diff[:tags][:removed].each do |tag| %><li><del><%= tag %></del></li><% end %> | ||
| 115 | </ul> | ||
| 116 | <% end %> | ||
| 117 | |||
| 118 | <h3>Template</h3> | ||
| 119 | <% if @diff[:template_name][:changed] %> | ||
| 120 | <p><del><%= @diff[:template_name][:from] || '(none)' %></del> <ins><%= @diff[:template_name][:to] || '(none)' %></ins></p> | ||
| 121 | <% else %> | ||
| 122 | <p class="diff_unchanged">No change.</p> | ||
| 123 | <% end %> | ||
| 124 | |||
| 125 | <h3>Assets</h3> | ||
| 126 | <% if @diff[:assets][:added].empty? && @diff[:assets][:removed].empty? %> | ||
| 127 | <p class="diff_unchanged">No change.</p> | ||
| 128 | <% else %> | ||
| 129 | <ul class="diff_set_list"> | ||
| 130 | <% @diff[:assets][:added].each do |asset| %><li><ins><%= asset.upload_file_name %></ins></li><% end %> | ||
| 131 | <% @diff[:assets][:removed].each do |asset| %><li><del><%= asset.upload_file_name %></del></li><% end %> | ||
| 132 | </ul> | ||
| 133 | <% end %> | ||
| 65 | </div> | 134 | </div> |
